From bf503299c30103eae49e8a2167b1c4228006ec2f Mon Sep 17 00:00:00 2001 From: sparkyx Date: Sun, 3 Aug 2025 16:45:50 +0200 Subject: [PATCH] OTP : set double authentication : create, send link, usable with Google Authenticator and FreeOTP --- composer.json | 10 + composer.lock | 2290 + .../database/otp_send_secret_sql.class.php | 63 + include/lib/otp.class.php | 103 + include/otp-link.php | 116 + vendor/autoload.php | 25 + vendor/bacon/bacon-qr-code/LICENSE | 22 + vendor/bacon/bacon-qr-code/README.md | 57 + vendor/bacon/bacon-qr-code/composer.json | 50 + .../bacon-qr-code/src/Common/BitArray.php | 364 + .../bacon-qr-code/src/Common/BitMatrix.php | 307 + .../bacon-qr-code/src/Common/BitUtils.php | 41 + .../src/Common/CharacterSetEci.php | 177 + .../bacon-qr-code/src/Common/EcBlock.php | 33 + .../bacon-qr-code/src/Common/EcBlocks.php | 66 + .../src/Common/ErrorCorrectionLevel.php | 57 + .../src/Common/FormatInformation.php | 196 + .../bacon/bacon-qr-code/src/Common/Mode.php | 69 + .../src/Common/ReedSolomonCodec.php | 454 + .../bacon-qr-code/src/Common/Version.php | 592 + .../bacon-qr-code/src/Encoder/BlockPair.php | 44 + .../bacon-qr-code/src/Encoder/ByteMatrix.php | 134 + .../bacon-qr-code/src/Encoder/Encoder.php | 679 + .../bacon-qr-code/src/Encoder/MaskUtil.php | 271 + .../bacon-qr-code/src/Encoder/MatrixUtil.php | 513 + .../bacon-qr-code/src/Encoder/QrCode.php | 108 + .../src/Exception/ExceptionInterface.php | 10 + .../Exception/InvalidArgumentException.php | 8 + .../src/Exception/OutOfBoundsException.php | 8 + .../src/Exception/RuntimeException.php | 8 + .../Exception/UnexpectedValueException.php | 8 + .../src/Exception/WriterException.php | 8 + .../src/Renderer/Color/Alpha.php | 44 + .../bacon-qr-code/src/Renderer/Color/Cmyk.php | 82 + .../src/Renderer/Color/ColorInterface.php | 22 + .../bacon-qr-code/src/Renderer/Color/Gray.php | 39 + .../bacon-qr-code/src/Renderer/Color/Rgb.php | 73 + .../src/Renderer/Eye/CompositeEye.php | 26 + .../src/Renderer/Eye/EyeInterface.php | 26 + .../src/Renderer/Eye/ModuleEye.php | 48 + .../src/Renderer/Eye/PointyEye.php | 56 + .../src/Renderer/Eye/SimpleCircleEye.php | 51 + .../src/Renderer/Eye/SquareEye.php | 50 + .../src/Renderer/GDLibRenderer.php | 238 + .../src/Renderer/Image/EpsImageBackEnd.php | 373 + .../Renderer/Image/ImageBackEndInterface.php | 87 + .../Renderer/Image/ImagickImageBackEnd.php | 318 + .../src/Renderer/Image/SvgImageBackEnd.php | 363 + .../Renderer/Image/TransformationMatrix.php | 68 + .../src/Renderer/ImageRenderer.php | 150 + .../src/Renderer/Module/DotsModule.php | 56 + .../src/Renderer/Module/EdgeIterator/Edge.php | 82 + .../Module/EdgeIterator/EdgeIterator.php | 160 + .../src/Renderer/Module/ModuleInterface.php | 18 + .../src/Renderer/Module/RoundnessModule.php | 124 + .../src/Renderer/Module/SquareModule.php | 44 + .../bacon-qr-code/src/Renderer/Path/Close.php | 34 + .../bacon-qr-code/src/Renderer/Path/Curve.php | 86 + .../src/Renderer/Path/EllipticArc.php | 264 + .../bacon-qr-code/src/Renderer/Path/Line.php | 42 + .../bacon-qr-code/src/Renderer/Path/Move.php | 42 + .../src/Renderer/Path/OperationInterface.php | 17 + .../bacon-qr-code/src/Renderer/Path/Path.php | 117 + .../src/Renderer/PlainTextRenderer.php | 80 + .../src/Renderer/RendererInterface.php | 11 + .../src/Renderer/RendererStyle/EyeFill.php | 61 + .../src/Renderer/RendererStyle/Fill.php | 129 + .../src/Renderer/RendererStyle/Gradient.php | 31 + .../Renderer/RendererStyle/GradientType.php | 22 + .../Renderer/RendererStyle/RendererStyle.php | 69 + vendor/bacon/bacon-qr-code/src/Writer.php | 63 + vendor/bin/yaml-lint | 120 + vendor/chillerlan/php-authenticator/LICENSE | 21 + vendor/chillerlan/php-authenticator/README.md | 181 + .../php-authenticator/composer.json | 71 + .../php-authenticator/src/Authenticator.php | 168 + .../src/AuthenticatorOptions.php | 21 + .../src/AuthenticatorOptionsTrait.php | 178 + .../Authenticators/AuthenticatorAbstract.php | 119 + .../Authenticators/AuthenticatorInterface.php | 119 + .../src/Authenticators/HOTP.php | 93 + .../src/Authenticators/SteamGuard.php | 162 + .../src/Authenticators/TOTP.php | 61 + .../php-authenticator/src/Common/Base32.php | 61 + .../php-authenticator/src/Common/Base64.php | 71 + .../php-authenticator/src/Common/Hex.php | 71 + .../chillerlan/php-settings-container/LICENSE | 21 + .../php-settings-container/README.md | 167 + .../php-settings-container/composer.json | 52 + .../rules-magic-access.neon | 4 + .../src/SettingsContainerAbstract.php | 252 + .../src/SettingsContainerInterface.php | 86 + vendor/composer/ClassLoader.php | 585 + vendor/composer/InstalledVersions.php | 359 + vendor/composer/LICENSE | 19 + vendor/composer/autoload_classmap.php | 123 + vendor/composer/autoload_files.php | 16 + vendor/composer/autoload_namespaces.php | 10 + vendor/composer/autoload_psr4.php | 38 + vendor/composer/autoload_real.php | 50 + vendor/composer/autoload_static.php | 346 + vendor/composer/installed.json | 2376 + vendor/composer/installed.php | 320 + vendor/composer/platform_check.php | 26 + vendor/dasprid/enum/LICENSE | 22 + vendor/dasprid/enum/README.md | 164 + vendor/dasprid/enum/composer.json | 34 + vendor/dasprid/enum/src/AbstractEnum.php | 241 + vendor/dasprid/enum/src/EnumMap.php | 385 + .../Exception/CloneNotSupportedException.php | 10 + .../enum/src/Exception/ExceptionInterface.php | 10 + .../src/Exception/ExpectationException.php | 10 + .../Exception/IllegalArgumentException.php | 10 + .../enum/src/Exception/MismatchException.php | 10 + .../SerializeNotSupportedException.php | 10 + .../UnserializeNotSupportedException.php | 10 + vendor/dasprid/enum/src/NullValue.php | 55 + .../instantiator/.doctrine-project.json | 47 + vendor/doctrine/instantiator/CONTRIBUTING.md | 35 + vendor/doctrine/instantiator/LICENSE | 19 + vendor/doctrine/instantiator/README.md | 38 + vendor/doctrine/instantiator/composer.json | 48 + .../doctrine/instantiator/docs/en/index.rst | 68 + .../doctrine/instantiator/docs/en/sidebar.rst | 4 + vendor/doctrine/instantiator/psalm.xml | 16 + .../Exception/ExceptionInterface.php | 14 + .../Exception/InvalidArgumentException.php | 52 + .../Exception/UnexpectedValueException.php | 61 + .../Doctrine/Instantiator/Instantiator.php | 255 + .../Instantiator/InstantiatorInterface.php | 24 + vendor/doctrine/lexer/LICENSE | 19 + vendor/doctrine/lexer/README.md | 9 + vendor/doctrine/lexer/UPGRADE.md | 22 + vendor/doctrine/lexer/composer.json | 55 + vendor/doctrine/lexer/src/AbstractLexer.php | 328 + vendor/doctrine/lexer/src/Token.php | 56 + vendor/endroid/qr-code/LICENSE | 19 + vendor/endroid/qr-code/README.md | 230 + vendor/endroid/qr-code/assets/open_sans.ttf | Bin 0 -> 217360 bytes vendor/endroid/qr-code/composer.json | 54 + .../Bacon/ErrorCorrectionLevelConverter.php | 21 + .../qr-code/src/Bacon/MatrixFactory.php | 32 + .../endroid/qr-code/src/Builder/Builder.php | 128 + .../qr-code/src/Builder/BuilderInterface.php | 45 + .../qr-code/src/Builder/BuilderRegistry.php | 25 + .../src/Builder/BuilderRegistryInterface.php | 12 + vendor/endroid/qr-code/src/Color/Color.php | 56 + .../qr-code/src/Color/ColorInterface.php | 23 + .../endroid/qr-code/src/Encoding/Encoding.php | 27 + .../src/Encoding/EncodingInterface.php | 10 + .../qr-code/src/ErrorCorrectionLevel.php | 13 + .../Exception/BlockSizeTooSmallException.php | 9 + .../src/Exception/ValidationException.php | 23 + .../qr-code/src/ImageData/LabelImageData.php | 48 + .../qr-code/src/ImageData/LogoImageData.php | 159 + .../endroid/qr-code/src/Label/Font/Font.php | 32 + .../qr-code/src/Label/Font/FontInterface.php | 12 + .../qr-code/src/Label/Font/OpenSans.php | 23 + vendor/endroid/qr-code/src/Label/Label.php | 49 + .../qr-code/src/Label/LabelAlignment.php | 12 + .../qr-code/src/Label/LabelInterface.php | 22 + .../qr-code/src/Label/Margin/Margin.php | 47 + .../src/Label/Margin/MarginInterface.php | 19 + vendor/endroid/qr-code/src/Logo/Logo.php | 36 + .../qr-code/src/Logo/LogoInterface.php | 16 + vendor/endroid/qr-code/src/Matrix/Matrix.php | 91 + .../src/Matrix/MatrixFactoryInterface.php | 12 + .../qr-code/src/Matrix/MatrixInterface.php | 22 + vendor/endroid/qr-code/src/QrCode.php | 65 + .../endroid/qr-code/src/QrCodeInterface.php | 27 + .../qr-code/src/RoundBlockSizeMode.php | 13 + .../qr-code/src/Writer/AbstractGdWriter.php | 211 + .../qr-code/src/Writer/BinaryWriter.php | 23 + .../qr-code/src/Writer/ConsoleWriter.php | 23 + .../qr-code/src/Writer/DebugWriter.php | 32 + .../endroid/qr-code/src/Writer/EpsWriter.php | 44 + .../endroid/qr-code/src/Writer/GifWriter.php | 23 + .../endroid/qr-code/src/Writer/PdfWriter.php | 139 + .../endroid/qr-code/src/Writer/PngWriter.php | 43 + .../src/Writer/Result/AbstractResult.php | 31 + .../src/Writer/Result/BinaryResult.php | 35 + .../src/Writer/Result/ConsoleResult.php | 69 + .../qr-code/src/Writer/Result/DebugResult.php | 74 + .../qr-code/src/Writer/Result/EpsResult.php | 28 + .../qr-code/src/Writer/Result/GdResult.php | 32 + .../qr-code/src/Writer/Result/GifResult.php | 21 + .../qr-code/src/Writer/Result/PdfResult.php | 32 + .../qr-code/src/Writer/Result/PngResult.php | 35 + .../src/Writer/Result/ResultInterface.php | 20 + .../qr-code/src/Writer/Result/SvgResult.php | 43 + .../qr-code/src/Writer/Result/WebPResult.php | 35 + .../endroid/qr-code/src/Writer/SvgWriter.php | 174 + .../src/Writer/ValidatingWriterInterface.php | 12 + .../endroid/qr-code/src/Writer/WebPWriter.php | 29 + .../qr-code/src/Writer/WriterInterface.php | 16 + .../xsd2php-runtime/.gitignore | 8 + .../xsd2php-runtime/.scrutinizer.yml | 10 + .../xsd2php-runtime/.travis.yml | 31 + .../xsd2php-runtime/LICENSE | 21 + .../xsd2php-runtime/README.md | 17 + .../xsd2php-runtime/composer.json | 45 + .../xsd2php-runtime/phpunit.xml.dist | 33 + .../src/Jms/Handler/BaseTypesHandler.php | 91 + .../src/Jms/Handler/XmlSchemaDateHandler.php | 168 + ...mlSchemaDateHandlerDeserializationTest.php | 120 + .../XmlSchemaDateHandlerSerializationTest.php | 114 + .../.github/ISSUE_TEMPLATE/bug_report.md | 28 + .../mimedb/.github/ISSUE_TEMPLATE/config.yml | 1 + .../mimedb/.github/ISSUE_TEMPLATE/feature.md | 20 + .../mimedb/.github/ISSUE_TEMPLATE/question.md | 17 + .../horstoeko/mimedb/.github/dependabot.yml | 13 + .../mimedb/.github/pull_request_template.md | 38 + .../mimedb/.github/workflows/build.ci.yml | 124 + .../mimedb/.github/workflows/build.doc.yml | 50 + .../.github/workflows/build.php73.ant.yml | 33 + .../.github/workflows/build.php74.ant.yml | 33 + .../.github/workflows/build.php80.ant.yml | 33 + .../.github/workflows/build.php81.ant.yml | 33 + .../workflows/build.php81.release.ant.yml | 39 + .../.github/workflows/build.php82.ant.yml | 33 + .../.github/workflows/build.php83.ant.yml | 33 + .../.github/workflows/build.release.yml | 132 + .../workflows/maintain-issues-stale.yml | 24 + vendor/horstoeko/mimedb/.gitignore | 83 + vendor/horstoeko/mimedb/CODE_OF_CONDUCT.md | 128 + vendor/horstoeko/mimedb/CONTRIBUTING.md | 116 + vendor/horstoeko/mimedb/LICENSE | 21 + vendor/horstoeko/mimedb/README.md | 104 + vendor/horstoeko/mimedb/SECURITY.md | 10 + vendor/horstoeko/mimedb/build.ant.xml | 263 + vendor/horstoeko/mimedb/build.xml | 281 + vendor/horstoeko/mimedb/build/phpcsrules.xml | 351 + .../mimedb/build/phpcsrules_psr1.xml | 47 + .../mimedb/build/phpcsrules_psr12.xml | 268 + .../mimedb/build/phpcsrules_psr2.xml | 218 + .../mimedb/build/phpcsrules_squiz.xml | 132 + vendor/horstoeko/mimedb/build/phpdoc.xml | 26 + vendor/horstoeko/mimedb/build/phpmd.xml | 20 + vendor/horstoeko/mimedb/build/phpstan.neon | 8 + vendor/horstoeko/mimedb/build/phpunit.xml | 26 + vendor/horstoeko/mimedb/composer.json | 68 + .../examples/FindExtensionByMimeType.php | 30 + .../examples/FindMimeTypeByExtension.php | 21 + vendor/horstoeko/mimedb/src/MimeDb.php | 187 + .../mimedb/src/assets/mimetypes.json | 6627 +++ vendor/horstoeko/mimedb/tests/TestCase.php | 170 + .../mimedb/tests/testcases/BasicTest.php | 13 + .../mimedb/tests/testcases/MimeDbTest.php | 157 + .../.github/ISSUE_TEMPLATE/bug_report.md | 28 + .../.github/ISSUE_TEMPLATE/config.yml | 1 + .../.github/ISSUE_TEMPLATE/feature.md | 20 + .../.github/ISSUE_TEMPLATE/question.md | 17 + .../pull_request_template.md | 38 + .../.github/workflows/build.php73.ant.yml | 32 + .../.github/workflows/build.php74.ant.yml | 32 + .../.github/workflows/build.php80.ant.yml | 32 + .../.github/workflows/build.php81.ant.yml | 32 + .../workflows/build.php81.release.ant.yml | 38 + vendor/horstoeko/stringmanagement/.gitignore | 85 + .../stringmanagement/CODE_OF_CONDUCT.md | 128 + .../stringmanagement/CONTRIBUTING.md | 116 + vendor/horstoeko/stringmanagement/LICENSE | 21 + vendor/horstoeko/stringmanagement/README.md | 10 + vendor/horstoeko/stringmanagement/SECURITY.md | 10 + .../horstoeko/stringmanagement/build.ant.xml | 263 + vendor/horstoeko/stringmanagement/build.xml | 281 + .../stringmanagement/build/phpcsrules.xml | 351 + .../build/phpcsrules_psr1.xml | 47 + .../build/phpcsrules_psr12.xml | 268 + .../build/phpcsrules_psr2.xml | 218 + .../build/phpcsrules_squiz.xml | 132 + .../stringmanagement/build/phpdoc.xml | 26 + .../stringmanagement/build/phpdocumentor.xml | 12 + .../stringmanagement/build/phpmd.xml | 20 + .../build/phprectorconfig.php | 40 + .../stringmanagement/build/phpstan.neon | 6 + .../stringmanagement/build/phpunit.xml | 25 + .../horstoeko/stringmanagement/composer.json | 69 + .../stringmanagement/src/FileUtils.php | 250 + .../stringmanagement/src/PathUtils.php | 134 + .../stringmanagement/src/StringUtils.php | 51 + .../stringmanagement/tests/FileUtilsTest.php | 166 + .../stringmanagement/tests/PathUtilsTest.php | 88 + .../tests/StringUtilsTest.php | 34 + .../stringmanagement/tests/data/base64.txt | 1 + .../stringmanagement/tests/data/tobase64.txt | 1 + .../.github/ISSUE_TEMPLATE/bug_report.md | 41 + .../zugferd/.github/ISSUE_TEMPLATE/config.yml | 1 + .../zugferd/.github/ISSUE_TEMPLATE/feature.md | 33 + .../.github/ISSUE_TEMPLATE/question.md | 30 + .../horstoeko/zugferd/.github/dependabot.yml | 13 + .../zugferd/.github/pull_request_template.md | 38 + .../.github/workflows/build.changelog.yml | 67 + .../zugferd/.github/workflows/build.ci.yml | 249 + .../zugferd/.github/workflows/build.doc.yml | 68 + .../.github/workflows/build.release.yml | 268 + .../zugferd/.github/workflows/build.wiki.yml | 63 + .../workflows/maintain-issues-stale.yml | 24 + vendor/horstoeko/zugferd/.gitignore | 93 + vendor/horstoeko/zugferd/CHANGELOG.md | 1261 + vendor/horstoeko/zugferd/CODE_OF_CONDUCT.md | 128 + vendor/horstoeko/zugferd/CONTRIBUTING.md | 114 + vendor/horstoeko/zugferd/LICENSE | 21 + vendor/horstoeko/zugferd/README.md | 91 + vendor/horstoeko/zugferd/SECURITY.md | 10 + vendor/horstoeko/zugferd/build.ant.xml | 363 + vendor/horstoeko/zugferd/build.xml | 281 + vendor/horstoeko/zugferd/build/phpcsrules.xml | 351 + .../zugferd/build/phpcsrules_psr1.xml | 47 + .../zugferd/build/phpcsrules_psr12.xml | 122 + .../zugferd/build/phpcsrules_psr2.xml | 218 + .../zugferd/build/phpcsrules_squiz.xml | 132 + vendor/horstoeko/zugferd/build/phpdoc.xml | 26 + vendor/horstoeko/zugferd/build/phpmd.xml | 20 + .../zugferd/build/phprectorconfig.php | 47 + vendor/horstoeko/zugferd/build/phpstan.neon | 12 + vendor/horstoeko/zugferd/build/phpunit.xml | 91 + vendor/horstoeko/zugferd/composer.json | 78 + .../zugferd/examples/00_ExampleHelpers.php | 104 + .../01_ZugferdDocumentBuilder_EN16931.php | 196 + .../01_ZugferdDocumentBuilder_XRECHNUNG3.php | 201 + .../02_ZugferdDocumentPdfBuilder_EN16931.php | 212 + ...02_ZugferdDocumentPdfBuilder_XRECHNUNG.php | 212 + .../03_ZugferdDocumentReader_EN16931.php | 420 + .../03_ZugferdDocumentReader_XRECHNUNG3.php | 420 + .../examples/assets/00_AdditionalDocument.csv | 1 + ..._ZugferdDocumentPdfBuilder_PrintLayout.pdf | Bin 0 -> 419608 bytes ...gferdDocumentReader_ImportFile_EN16931.xml | 266 + ...rdDocumentReader_ImportFile_XRECHNUNG3.xml | 271 + vendor/horstoeko/zugferd/make/.gitignore | 2 + .../horstoeko/zugferd/make/config_basic.yml | 27 + .../zugferd/make/config_basic_wl.yml | 27 + .../horstoeko/zugferd/make/config_en16931.yml | 27 + .../zugferd/make/config_extended.yml | 27 + .../horstoeko/zugferd/make/config_minimum.yml | 27 + .../horstoeko/zugferd/make/genchangelog.php | 211 + vendor/horstoeko/zugferd/make/genclasses | 14 + vendor/horstoeko/zugferd/make/genclasses.bat | 5 + vendor/horstoeko/zugferd/make/gencodelists | 4 + .../horstoeko/zugferd/make/gencodelists.php | 905 + .../horstoeko/zugferd/make/genmethoddocs.php | 731 + .../zugferd/make/md/ZugferdDocumentBuilder.md | 59 + ...dDocumentBuilder_setDocumentInformation.md | 4 + .../make/md/ZugferdDocumentPdfBuilder.md | 123 + ...dfBuilder_attachAdditionalFileByContent.md | 12 + ...fBuilder_attachAdditionalFileByRealFile.md | 18 + ...mentPdfBuilder_setAdditionalCreatorTool.md | 11 + ...erdDocumentPdfBuilder_setAuthorTemplate.md | 18 + ...rdDocumentPdfBuilder_setKeywordTemplate.md | 18 + ...ntPdfBuilder_setMetaInformationCallback.md | 32 + ...rdDocumentPdfBuilder_setSubjectTemplate.md | 18 + ...ferdDocumentPdfBuilder_setTitleTemplate.md | 18 + .../make/md/ZugferdDocumentPdfMerger.md | 67 + .../zugferd/make/md/ZugferdKositValidator.md | 35 + .../horstoeko/zugferd/src/ZugferdDocument.php | 304 + .../zugferd/src/ZugferdDocumentBuilder.php | 3634 ++ .../src/ZugferdDocumentJsonExporter.php | 72 + .../zugferd/src/ZugferdDocumentPdfBuilder.php | 112 + .../src/ZugferdDocumentPdfBuilderAbstract.php | 788 + .../zugferd/src/ZugferdDocumentPdfMerger.php | 158 + .../zugferd/src/ZugferdDocumentPdfReader.php | 96 + .../src/ZugferdDocumentPdfReaderExt.php | 319 + .../src/ZugferdDocumentProfileConverter.php | 291 + .../zugferd/src/ZugferdDocumentReader.php | 4201 ++ .../zugferd/src/ZugferdDocumentValidator.php | 117 + .../zugferd/src/ZugferdKositValidator.php | 1221 + .../zugferd/src/ZugferdObjectHelper.php | 1810 + .../zugferd/src/ZugferdPackageVersion.php | 50 + .../zugferd/src/ZugferdPdfValidator.php | 1069 + .../zugferd/src/ZugferdPdfWriter.php | 509 + .../zugferd/src/ZugferdProfileResolver.php | 128 + .../horstoeko/zugferd/src/ZugferdProfiles.php | 255 + .../horstoeko/zugferd/src/ZugferdSettings.php | 454 + .../src/ZugferdSpecificationVersions.php | 37 + .../zugferd/src/ZugferdXsdValidator.php | 234 + .../src/assets/facturx_extension_schema.xmp | 110 + .../horstoeko/zugferd/src/assets/sRGB2014.icc | Bin 0 -> 3024 bytes .../zugferd/src/assets/sRGB_v4_ICC.icc | Bin 0 -> 60988 bytes ...dAccountingAccountsClassificationTypes.php | 57 + .../src/codelists/ZugferdAllowanceCodes.php | 117 + .../src/codelists/ZugferdChargeCodes.php | 907 + .../src/codelists/ZugferdCountryCodes.php | 1272 + .../src/codelists/ZugferdCurrencyCodes.php | 917 + .../src/codelists/ZugferdDocumentType.php | 6422 +++ .../codelists/ZugferdDutyTaxFeeCategories.php | 67 + .../ZugferdElectronicAddressScheme.php | 479 + .../src/codelists/ZugferdInvoiceType.php | 328 + .../ZugferdItemTypeIdentificationCodes.php | 927 + .../src/codelists/ZugferdLineStatusCodes.php | 830 + .../src/codelists/ZugferdPaymentMeans.php | 437 + .../ZugferdReferenceCodeQualifiers.php | 5946 +++ .../codelists/ZugferdSchemeIdentifiers.php | 1079 + .../ZugferdTextSubjectCodeQualifiers.php | 1937 + .../src/codelists/ZugferdUnitCodes.php | 10603 +++++ .../ZugferdVATExemptionReasonCode.php | 438 + .../src/codelists/ZugferdVatCategoryCodes.php | 185 + .../src/codelists/ZugferdVatTypeCodes.php | 32 + ...dAccountingAccountsClassificationTypes.php | 58 + .../codelistsenum/ZugferdAllowanceCodes.php | 118 + .../src/codelistsenum/ZugferdChargeCodes.php | 908 + .../src/codelistsenum/ZugferdCountryCodes.php | 1273 + .../codelistsenum/ZugferdCurrencyCodes.php | 918 + .../ZugferdDutyTaxFeeCategories.php | 68 + .../ZugferdElectronicAddressScheme.php | 479 + .../src/codelistsenum/ZugferdInvoiceType.php | 328 + .../ZugferdItemTypeIdentificationCodes.php | 928 + .../src/codelistsenum/ZugferdPaymentMeans.php | 433 + .../ZugferdReferenceCodeQualifiers.php | 5947 +++ .../ZugferdSchemeIdentifiers.php | 1080 + .../ZugferdTextSubjectCodeQualifiers.php | 1938 + .../src/codelistsenum/ZugferdUnitCodes.php | 10604 +++++ .../ZugferdVATExemptionReasonCode.php | 438 + .../qdt/AllowanceChargeReasonCodeType.php | 51 + .../src/entities/basic/qdt/CountryIDType.php | 51 + .../entities/basic/qdt/CurrencyCodeType.php | 51 + .../entities/basic/qdt/DocumentCodeType.php | 51 + .../basic/qdt/FormattedDateTimeType.php | 39 + .../DateTimeStringAType.php | 76 + .../basic/qdt/PaymentMeansCodeType.php | 51 + .../basic/qdt/TaxCategoryCodeType.php | 51 + .../entities/basic/qdt/TaxTypeCodeType.php | 51 + .../basic/qdt/TimeReferenceCodeType.php | 51 + .../ram/CreditorFinancialAccountType.php | 66 + .../basic/ram/DebtorFinancialAccountType.php | 39 + .../ram/DocumentContextParameterType.php | 39 + .../basic/ram/DocumentLineDocumentType.php | 66 + .../ram/ExchangedDocumentContextType.php | 66 + .../basic/ram/ExchangedDocumentType.php | 156 + .../basic/ram/HeaderTradeAgreementType.php | 174 + .../basic/ram/HeaderTradeDeliveryType.php | 93 + .../basic/ram/HeaderTradeSettlementType.php | 507 + .../basic/ram/LegalOrganizationType.php | 66 + .../basic/ram/LineTradeAgreementType.php | 66 + .../basic/ram/LineTradeDeliveryType.php | 39 + .../basic/ram/LineTradeSettlementType.php | 156 + .../src/entities/basic/ram/NoteType.php | 66 + .../basic/ram/ReferencedDocumentType.php | 66 + .../basic/ram/SpecifiedPeriodType.php | 66 + .../basic/ram/SupplyChainEventType.php | 39 + .../ram/SupplyChainTradeLineItemType.php | 147 + .../ram/SupplyChainTradeTransactionType.php | 156 + .../basic/ram/TaxRegistrationType.php | 39 + .../basic/ram/TradeAccountingAccountType.php | 39 + .../entities/basic/ram/TradeAddressType.php | 201 + .../basic/ram/TradeAllowanceChargeType.php | 201 + .../src/entities/basic/ram/TradePartyType.php | 309 + .../basic/ram/TradePaymentTermsType.php | 93 + .../src/entities/basic/ram/TradePriceType.php | 93 + .../entities/basic/ram/TradeProductType.php | 66 + ...eSettlementHeaderMonetarySummationType.php | 264 + ...adeSettlementLineMonetarySummationType.php | 39 + .../ram/TradeSettlementPaymentMeansType.php | 93 + .../src/entities/basic/ram/TradeTaxType.php | 228 + .../basic/ram/UniversalCommunicationType.php | 39 + .../basic/rsm/CrossIndustryInvoice.php | 12 + .../basic/rsm/CrossIndustryInvoiceType.php | 93 + .../src/entities/basic/udt/AmountType.php | 78 + .../src/entities/basic/udt/CodeType.php | 51 + .../src/entities/basic/udt/DateTimeType.php | 39 + .../udt/DateTimeType/DateTimeStringAType.php | 76 + .../zugferd/src/entities/basic/udt/IDType.php | 78 + .../src/entities/basic/udt/IndicatorType.php | 39 + .../src/entities/basic/udt/PercentType.php | 51 + .../src/entities/basic/udt/QuantityType.php | 78 + .../src/entities/basic/udt/TextType.php | 51 + .../qdt/AllowanceChargeReasonCodeType.php | 51 + .../entities/basicwl/qdt/CountryIDType.php | 51 + .../entities/basicwl/qdt/CurrencyCodeType.php | 51 + .../entities/basicwl/qdt/DocumentCodeType.php | 51 + .../basicwl/qdt/FormattedDateTimeType.php | 39 + .../DateTimeStringAType.php | 76 + .../basicwl/qdt/PaymentMeansCodeType.php | 51 + .../basicwl/qdt/TaxCategoryCodeType.php | 51 + .../entities/basicwl/qdt/TaxTypeCodeType.php | 51 + .../basicwl/qdt/TimeReferenceCodeType.php | 51 + .../ram/CreditorFinancialAccountType.php | 66 + .../ram/DebtorFinancialAccountType.php | 39 + .../ram/DocumentContextParameterType.php | 39 + .../ram/ExchangedDocumentContextType.php | 66 + .../basicwl/ram/ExchangedDocumentType.php | 156 + .../basicwl/ram/HeaderTradeAgreementType.php | 174 + .../basicwl/ram/HeaderTradeDeliveryType.php | 93 + .../basicwl/ram/HeaderTradeSettlementType.php | 507 + .../basicwl/ram/LegalOrganizationType.php | 66 + .../src/entities/basicwl/ram/NoteType.php | 66 + .../basicwl/ram/ReferencedDocumentType.php | 66 + .../basicwl/ram/SpecifiedPeriodType.php | 66 + .../basicwl/ram/SupplyChainEventType.php | 39 + .../ram/SupplyChainTradeTransactionType.php | 93 + .../basicwl/ram/TaxRegistrationType.php | 39 + .../ram/TradeAccountingAccountType.php | 39 + .../entities/basicwl/ram/TradeAddressType.php | 201 + .../basicwl/ram/TradeAllowanceChargeType.php | 201 + .../entities/basicwl/ram/TradePartyType.php | 309 + .../basicwl/ram/TradePaymentTermsType.php | 93 + ...eSettlementHeaderMonetarySummationType.php | 264 + .../ram/TradeSettlementPaymentMeansType.php | 93 + .../src/entities/basicwl/ram/TradeTaxType.php | 228 + .../ram/UniversalCommunicationType.php | 39 + .../basicwl/rsm/CrossIndustryInvoice.php | 12 + .../basicwl/rsm/CrossIndustryInvoiceType.php | 93 + .../src/entities/basicwl/udt/AmountType.php | 78 + .../src/entities/basicwl/udt/CodeType.php | 51 + .../src/entities/basicwl/udt/DateTimeType.php | 39 + .../udt/DateTimeType/DateTimeStringAType.php | 76 + .../src/entities/basicwl/udt/IDType.php | 78 + .../entities/basicwl/udt/IndicatorType.php | 39 + .../src/entities/basicwl/udt/PercentType.php | 51 + .../src/entities/basicwl/udt/TextType.php | 51 + .../qdt/AllowanceChargeReasonCodeType.php | 51 + .../entities/en16931/qdt/CountryIDType.php | 51 + .../entities/en16931/qdt/CurrencyCodeType.php | 51 + .../entities/en16931/qdt/DocumentCodeType.php | 51 + .../en16931/qdt/FormattedDateTimeType.php | 39 + .../DateTimeStringAType.php | 76 + .../en16931/qdt/PaymentMeansCodeType.php | 51 + .../en16931/qdt/ReferenceCodeType.php | 51 + .../en16931/qdt/TaxCategoryCodeType.php | 51 + .../entities/en16931/qdt/TaxTypeCodeType.php | 51 + .../en16931/qdt/TimeReferenceCodeType.php | 51 + .../ram/CreditorFinancialAccountType.php | 93 + .../ram/CreditorFinancialInstitutionType.php | 39 + .../ram/DebtorFinancialAccountType.php | 39 + .../ram/DocumentContextParameterType.php | 39 + .../en16931/ram/DocumentLineDocumentType.php | 66 + .../ram/ExchangedDocumentContextType.php | 66 + .../en16931/ram/ExchangedDocumentType.php | 156 + .../en16931/ram/HeaderTradeAgreementType.php | 291 + .../en16931/ram/HeaderTradeDeliveryType.php | 120 + .../en16931/ram/HeaderTradeSettlementType.php | 507 + .../en16931/ram/LegalOrganizationType.php | 66 + .../en16931/ram/LineTradeAgreementType.php | 93 + .../en16931/ram/LineTradeDeliveryType.php | 39 + .../en16931/ram/LineTradeSettlementType.php | 210 + .../src/entities/en16931/ram/NoteType.php | 66 + .../en16931/ram/ProcuringProjectType.php | 66 + .../en16931/ram/ProductCharacteristicType.php | 66 + .../en16931/ram/ProductClassificationType.php | 39 + .../en16931/ram/ReferencedDocumentType.php | 228 + .../en16931/ram/SpecifiedPeriodType.php | 66 + .../en16931/ram/SupplyChainEventType.php | 39 + .../ram/SupplyChainTradeLineItemType.php | 147 + .../ram/SupplyChainTradeTransactionType.php | 156 + .../en16931/ram/TaxRegistrationType.php | 39 + .../ram/TradeAccountingAccountType.php | 39 + .../entities/en16931/ram/TradeAddressType.php | 201 + .../en16931/ram/TradeAllowanceChargeType.php | 201 + .../entities/en16931/ram/TradeContactType.php | 120 + .../entities/en16931/ram/TradeCountryType.php | 39 + .../entities/en16931/ram/TradePartyType.php | 363 + .../en16931/ram/TradePaymentTermsType.php | 93 + .../entities/en16931/ram/TradePriceType.php | 93 + .../entities/en16931/ram/TradeProductType.php | 300 + .../ram/TradeSettlementFinancialCardType.php | 66 + ...eSettlementHeaderMonetarySummationType.php | 291 + ...adeSettlementLineMonetarySummationType.php | 39 + .../ram/TradeSettlementPaymentMeansType.php | 174 + .../src/entities/en16931/ram/TradeTaxType.php | 255 + .../ram/UniversalCommunicationType.php | 66 + .../en16931/rsm/CrossIndustryInvoice.php | 12 + .../en16931/rsm/CrossIndustryInvoiceType.php | 93 + .../src/entities/en16931/udt/AmountType.php | 78 + .../entities/en16931/udt/BinaryObjectType.php | 105 + .../src/entities/en16931/udt/CodeType.php | 105 + .../src/entities/en16931/udt/DateTimeType.php | 39 + .../udt/DateTimeType/DateTimeStringAType.php | 76 + .../src/entities/en16931/udt/DateType.php | 39 + .../en16931/udt/DateType/DateStringAType.php | 76 + .../src/entities/en16931/udt/IDType.php | 78 + .../entities/en16931/udt/IndicatorType.php | 39 + .../src/entities/en16931/udt/PercentType.php | 51 + .../src/entities/en16931/udt/QuantityType.php | 78 + .../src/entities/en16931/udt/TextType.php | 51 + .../qdt/AccountingAccountTypeCodeType.php | 51 + .../qdt/AllowanceChargeReasonCodeType.php | 51 + .../extended/qdt/ContactTypeCodeType.php | 51 + .../entities/extended/qdt/CountryIDType.php | 51 + .../extended/qdt/CurrencyCodeType.php | 51 + .../extended/qdt/DeliveryTermsCodeType.php | 51 + .../extended/qdt/DocumentCodeType.php | 51 + .../extended/qdt/FormattedDateTimeType.php | 39 + .../DateTimeStringAType.php | 76 + .../extended/qdt/LineStatusCodeType.php | 51 + .../extended/qdt/PartyRoleCodeType.php | 51 + .../extended/qdt/PaymentMeansCodeType.php | 51 + .../extended/qdt/ReferenceCodeType.php | 51 + .../extended/qdt/TaxCategoryCodeType.php | 51 + .../entities/extended/qdt/TaxTypeCodeType.php | 51 + .../extended/qdt/TimeReferenceCodeType.php | 51 + .../extended/qdt/TransportModeCodeType.php | 51 + .../extended/ram/AdvancePaymentType.php | 156 + .../ram/CreditorFinancialAccountType.php | 93 + .../ram/CreditorFinancialInstitutionType.php | 39 + .../ram/DebtorFinancialAccountType.php | 39 + .../ram/DocumentContextParameterType.php | 39 + .../extended/ram/DocumentLineDocumentType.php | 183 + .../ram/ExchangedDocumentContextType.php | 93 + .../extended/ram/ExchangedDocumentType.php | 264 + .../extended/ram/HeaderTradeAgreementType.php | 516 + .../extended/ram/HeaderTradeDeliveryType.php | 262 + .../ram/HeaderTradeSettlementType.php | 840 + .../extended/ram/LegalOrganizationType.php | 93 + .../extended/ram/LineTradeAgreementType.php | 300 + .../extended/ram/LineTradeDeliveryType.php | 255 + .../extended/ram/LineTradeSettlementType.php | 309 + .../ram/LogisticsServiceChargeType.php | 129 + .../ram/LogisticsTransportMovementType.php | 39 + .../src/entities/extended/ram/NoteType.php | 93 + .../extended/ram/ProcuringProjectType.php | 66 + .../ram/ProductCharacteristicType.php | 120 + .../ram/ProductClassificationType.php | 66 + .../extended/ram/ReferencedDocumentType.php | 228 + .../extended/ram/ReferencedProductType.php | 264 + .../extended/ram/SpecifiedPeriodType.php | 120 + .../ram/SupplyChainConsignmentType.php | 75 + .../extended/ram/SupplyChainEventType.php | 39 + .../ram/SupplyChainTradeLineItemType.php | 147 + .../ram/SupplyChainTradeTransactionType.php | 156 + .../extended/ram/TaxRegistrationType.php | 39 + .../ram/TradeAccountingAccountType.php | 66 + .../extended/ram/TradeAddressType.php | 201 + .../extended/ram/TradeAllowanceChargeType.php | 255 + .../extended/ram/TradeContactType.php | 174 + .../extended/ram/TradeCountryType.php | 39 + .../ram/TradeCurrencyExchangeType.php | 120 + .../extended/ram/TradeDeliveryTermsType.php | 39 + .../entities/extended/ram/TradePartyType.php | 426 + .../ram/TradePaymentDiscountTermsType.php | 147 + .../ram/TradePaymentPenaltyTermsType.php | 147 + .../extended/ram/TradePaymentTermsType.php | 201 + .../entities/extended/ram/TradePriceType.php | 156 + .../extended/ram/TradeProductInstanceType.php | 66 + .../extended/ram/TradeProductType.php | 624 + .../ram/TradeSettlementFinancialCardType.php | 66 + ...eSettlementHeaderMonetarySummationType.php | 291 + ...adeSettlementLineMonetarySummationType.php | 174 + .../ram/TradeSettlementPaymentMeansType.php | 174 + .../entities/extended/ram/TradeTaxType.php | 309 + .../ram/UniversalCommunicationType.php | 66 + .../extended/rsm/CrossIndustryInvoice.php | 12 + .../extended/rsm/CrossIndustryInvoiceType.php | 93 + .../src/entities/extended/udt/AmountType.php | 78 + .../extended/udt/BinaryObjectType.php | 105 + .../src/entities/extended/udt/CodeType.php | 105 + .../entities/extended/udt/DateTimeType.php | 39 + .../udt/DateTimeType/DateTimeStringAType.php | 76 + .../src/entities/extended/udt/DateType.php | 39 + .../extended/udt/DateType/DateStringAType.php | 76 + .../src/entities/extended/udt/IDType.php | 78 + .../entities/extended/udt/IndicatorType.php | 39 + .../src/entities/extended/udt/MeasureType.php | 78 + .../src/entities/extended/udt/NumericType.php | 51 + .../src/entities/extended/udt/PercentType.php | 51 + .../entities/extended/udt/QuantityType.php | 78 + .../src/entities/extended/udt/RateType.php | 51 + .../src/entities/extended/udt/TextType.php | 51 + .../entities/minimum/qdt/CountryIDType.php | 51 + .../entities/minimum/qdt/CurrencyCodeType.php | 51 + .../entities/minimum/qdt/DocumentCodeType.php | 51 + .../ram/DocumentContextParameterType.php | 39 + .../ram/ExchangedDocumentContextType.php | 66 + .../minimum/ram/ExchangedDocumentType.php | 93 + .../minimum/ram/HeaderTradeAgreementType.php | 120 + .../minimum/ram/HeaderTradeDeliveryType.php | 14 + .../minimum/ram/HeaderTradeSettlementType.php | 66 + .../minimum/ram/LegalOrganizationType.php | 39 + .../minimum/ram/ReferencedDocumentType.php | 39 + .../ram/SupplyChainTradeTransactionType.php | 93 + .../minimum/ram/TaxRegistrationType.php | 39 + .../entities/minimum/ram/TradeAddressType.php | 39 + .../entities/minimum/ram/TradePartyType.php | 156 + ...eSettlementHeaderMonetarySummationType.php | 156 + .../minimum/rsm/CrossIndustryInvoice.php | 12 + .../minimum/rsm/CrossIndustryInvoiceType.php | 93 + .../src/entities/minimum/udt/AmountType.php | 78 + .../src/entities/minimum/udt/DateTimeType.php | 39 + .../udt/DateTimeType/DateTimeStringAType.php | 76 + .../src/entities/minimum/udt/IDType.php | 78 + .../src/entities/minimum/udt/TextType.php | 51 + .../src/exception/ZugferdBaseException.php | 23 + .../src/exception/ZugferdExceptionCodes.php | 48 + .../ZugferdFileNotFoundException.php | 35 + .../ZugferdFileNotReadableException.php | 35 + .../ZugferdInvalidArgumentException.php | 35 + .../ZugferdNoPdfAttachmentFoundException.php | 35 + .../ZugferdUnknownDateFormatException.php | 29 + .../src/exception/ZugferdUnknownMimetype.php | 34 + .../ZugferdUnknownProfileException.php | 35 + .../ZugferdUnknownProfileIdException.php | 35 + ...ugferdUnknownProfileParameterException.php | 35 + .../ZugferdUnknownXmlContentException.php | 34 + .../exception/ZugferdUnsupportedMimetype.php | 34 + .../zugferd/src/jms/ZugferdTypesHandler.php | 286 + .../src/quick/ZugferdQuickDescriptor.php | 836 + .../quick/ZugferdQuickDescriptorEn16931.php | 33 + .../quick/ZugferdQuickDescriptorExtended.php | 33 + .../quick/ZugferdQuickDescriptorXRechnung.php | 33 + .../ZugferdQuickDescriptorXRechnung2.php | 33 + .../ZugferdQuickDescriptorXRechnung3.php | 33 + .../zugferd/src/schema/FACTUR-X_BASIC-WL.xsd | 20 + ...ct_data_standard_QualifiedDataType_100.xsd | 86 + ...AggregateBusinessInformationEntity_100.xsd | 196 + ..._data_standard_UnqualifiedDataType_100.xsd | 53 + .../zugferd/src/schema/FACTUR-X_BASIC.xsd | 20 + ...ct_data_standard_QualifiedDataType_100.xsd | 86 + ...AggregateBusinessInformationEntity_100.xsd | 249 + ..._data_standard_UnqualifiedDataType_100.xsd | 60 + .../zugferd/src/schema/FACTUR-X_EN16931.xsd | 20 + ...ct_data_standard_QualifiedDataType_100.xsd | 94 + ...AggregateBusinessInformationEntity_100.xsd | 318 + ..._data_standard_UnqualifiedDataType_100.xsd | 84 + .../zugferd/src/schema/FACTUR-X_EXTENDED.xsd | 20 + ...ct_data_standard_QualifiedDataType_100.xsd | 142 + ...AggregateBusinessInformationEntity_100.xsd | 465 + ..._data_standard_UnqualifiedDataType_100.xsd | 101 + .../zugferd/src/schema/FACTUR-X_MINIMUM.xsd | 20 + ...ct_data_standard_QualifiedDataType_100.xsd | 30 + ...AggregateBusinessInformationEntity_100.xsd | 86 + ..._data_standard_UnqualifiedDataType_100.xsd | 38 + .../schema/schematron/FACTUR-X_BASIC-WL.sch | 1485 + .../schematron/FACTUR-X_BASIC-WL_codedb.xml | 2190 + .../src/schema/schematron/FACTUR-X_BASIC.sch | 2047 + .../schematron/FACTUR-X_BASIC_codedb.xml | 2190 + .../schema/schematron/FACTUR-X_EN16931.sch | 2905 ++ .../schematron/FACTUR-X_EN16931_codedb.xml | 5812 +++ .../schema/schematron/FACTUR-X_EXTENDED.sch | 7069 +++ .../schematron/FACTUR-X_EXTENDED_codedb.xml | 6292 +++ .../schema/schematron/FACTUR-X_MINIMUM.sch | 312 + .../schematron/FACTUR-X_MINIMUM_codedb.xml | 908 + .../src/schema/xslt/FACTUR-X_BASIC-WL.xslt | 8829 ++++ .../schema/xslt/FACTUR-X_BASIC-WL_codedb.xml | 2215 + .../src/schema/xslt/FACTUR-X_BASIC.xslt | 12161 +++++ .../src/schema/xslt/FACTUR-X_BASIC_codedb.xml | 4815 ++ .../src/schema/xslt/FACTUR-X_EN16931.xslt | 16743 +++++++ .../schema/xslt/FACTUR-X_EN16931_codedb.xml | 5844 +++ .../src/schema/xslt/FACTUR-X_EXTENDED.xslt | 39738 ++++++++++++++++ .../schema/xslt/FACTUR-X_EXTENDED_codedb.xml | 6677 +++ .../src/schema/xslt/FACTUR-X_MINIMUM.xslt | 1931 + .../schema/xslt/FACTUR-X_MINIMUM_codedb.xml | 919 + .../qdt/AllowanceChargeReasonCodeType.yml | 204 + .../validation/basic/qdt/CountryIDType.yml | 259 + .../validation/basic/qdt/CurrencyCodeType.yml | 187 + .../validation/basic/qdt/DocumentCodeType.yml | 53 + ...mattedDateTimeType.DateTimeStringAType.yml | 7 + .../basic/qdt/FormattedDateTimeType.yml | 7 + .../basic/qdt/PaymentMeansCodeType.yml | 19 + .../basic/qdt/TaxCategoryCodeType.yml | 17 + .../validation/basic/qdt/TaxTypeCodeType.yml | 9 + .../basic/qdt/TimeReferenceCodeType.yml | 11 + .../basic/ram/DebtorFinancialAccountType.yml | 7 + .../ram/DocumentContextParameterType.yml | 7 + .../basic/ram/DocumentLineDocumentType.yml | 10 + .../ram/ExchangedDocumentContextType.yml | 12 + .../basic/ram/ExchangedDocumentType.yml | 22 + .../basic/ram/HeaderTradeAgreementType.yml | 25 + .../basic/ram/HeaderTradeDeliveryType.yml | 11 + .../basic/ram/HeaderTradeSettlementType.yml | 42 + .../basic/ram/LineTradeAgreementType.yml | 12 + .../basic/ram/LineTradeDeliveryType.yml | 7 + .../basic/ram/LineTradeSettlementType.yml | 22 + .../src/validation/basic/ram/NoteType.yml | 7 + .../basic/ram/ReferencedDocumentType.yml | 10 + .../basic/ram/SpecifiedPeriodType.yml | 8 + .../basic/ram/SupplyChainEventType.yml | 9 + .../ram/SupplyChainTradeLineItemType.yml | 37 + .../ram/SupplyChainTradeTransactionType.yml | 30 + .../basic/ram/TaxRegistrationType.yml | 7 + .../basic/ram/TradeAccountingAccountType.yml | 7 + .../validation/basic/ram/TradeAddressType.yml | 7 + .../basic/ram/TradeAllowanceChargeType.yml | 17 + .../validation/basic/ram/TradePartyType.yml | 14 + .../basic/ram/TradePaymentTermsType.yml | 5 + .../validation/basic/ram/TradePriceType.yml | 10 + .../validation/basic/ram/TradeProductType.yml | 7 + ...eSettlementHeaderMonetarySummationType.yml | 22 + ...adeSettlementLineMonetarySummationType.yml | 7 + .../ram/TradeSettlementPaymentMeansType.yml | 13 + .../src/validation/basic/ram/TradeTaxType.yml | 12 + .../basic/ram/UniversalCommunicationType.yml | 7 + .../basic/rsm/CrossIndustryInvoiceType.yml | 23 + .../udt/DateTimeType.DateTimeStringAType.yml | 7 + .../src/validation/basic/udt/QuantityType.yml | 7 + .../qdt/AllowanceChargeReasonCodeType.yml | 204 + .../validation/basicwl/qdt/CountryIDType.yml | 259 + .../basicwl/qdt/CurrencyCodeType.yml | 187 + .../basicwl/qdt/DocumentCodeType.yml | 53 + ...mattedDateTimeType.DateTimeStringAType.yml | 7 + .../basicwl/qdt/FormattedDateTimeType.yml | 7 + .../basicwl/qdt/PaymentMeansCodeType.yml | 19 + .../basicwl/qdt/TaxCategoryCodeType.yml | 17 + .../basicwl/qdt/TaxTypeCodeType.yml | 9 + .../basicwl/qdt/TimeReferenceCodeType.yml | 11 + .../ram/DebtorFinancialAccountType.yml | 7 + .../ram/DocumentContextParameterType.yml | 7 + .../ram/ExchangedDocumentContextType.yml | 12 + .../basicwl/ram/ExchangedDocumentType.yml | 22 + .../basicwl/ram/HeaderTradeAgreementType.yml | 25 + .../basicwl/ram/HeaderTradeDeliveryType.yml | 11 + .../basicwl/ram/HeaderTradeSettlementType.yml | 42 + .../src/validation/basicwl/ram/NoteType.yml | 7 + .../basicwl/ram/ReferencedDocumentType.yml | 10 + .../basicwl/ram/SpecifiedPeriodType.yml | 8 + .../basicwl/ram/SupplyChainEventType.yml | 9 + .../ram/SupplyChainTradeTransactionType.yml | 23 + .../basicwl/ram/TaxRegistrationType.yml | 7 + .../ram/TradeAccountingAccountType.yml | 7 + .../basicwl/ram/TradeAddressType.yml | 7 + .../basicwl/ram/TradeAllowanceChargeType.yml | 21 + .../validation/basicwl/ram/TradePartyType.yml | 14 + .../basicwl/ram/TradePaymentTermsType.yml | 5 + ...eSettlementHeaderMonetarySummationType.yml | 22 + .../ram/TradeSettlementPaymentMeansType.yml | 13 + .../validation/basicwl/ram/TradeTaxType.yml | 12 + .../ram/UniversalCommunicationType.yml | 7 + .../basicwl/rsm/CrossIndustryInvoiceType.yml | 23 + .../udt/DateTimeType.DateTimeStringAType.yml | 7 + .../qdt/AllowanceChargeReasonCodeType.yml | 204 + .../validation/en16931/qdt/CountryIDType.yml | 259 + .../en16931/qdt/CurrencyCodeType.yml | 187 + .../en16931/qdt/DocumentCodeType.yml | 55 + ...mattedDateTimeType.DateTimeStringAType.yml | 7 + .../en16931/qdt/FormattedDateTimeType.yml | 7 + .../en16931/qdt/PaymentMeansCodeType.yml | 91 + .../en16931/qdt/ReferenceCodeType.yml | 825 + .../en16931/qdt/TaxCategoryCodeType.yml | 17 + .../en16931/qdt/TaxTypeCodeType.yml | 62 + .../en16931/qdt/TimeReferenceCodeType.yml | 11 + .../ram/CreditorFinancialInstitutionType.yml | 7 + .../ram/DebtorFinancialAccountType.yml | 7 + .../ram/DocumentContextParameterType.yml | 7 + .../en16931/ram/DocumentLineDocumentType.yml | 10 + .../ram/ExchangedDocumentContextType.yml | 12 + .../en16931/ram/ExchangedDocumentType.yml | 22 + .../en16931/ram/HeaderTradeAgreementType.yml | 34 + .../en16931/ram/HeaderTradeDeliveryType.yml | 14 + .../en16931/ram/HeaderTradeSettlementType.yml | 42 + .../en16931/ram/LineTradeAgreementType.yml | 15 + .../en16931/ram/LineTradeDeliveryType.yml | 7 + .../en16931/ram/LineTradeSettlementType.yml | 28 + .../src/validation/en16931/ram/NoteType.yml | 7 + .../en16931/ram/ProcuringProjectType.yml | 12 + .../en16931/ram/ProductCharacteristicType.yml | 12 + .../en16931/ram/ProductClassificationType.yml | 7 + .../en16931/ram/ReferencedDocumentType.yml | 5 + .../en16931/ram/SpecifiedPeriodType.yml | 8 + .../en16931/ram/SupplyChainEventType.yml | 9 + .../ram/SupplyChainTradeLineItemType.yml | 37 + .../ram/SupplyChainTradeTransactionType.yml | 30 + .../en16931/ram/TaxRegistrationType.yml | 7 + .../ram/TradeAccountingAccountType.yml | 7 + .../en16931/ram/TradeAddressType.yml | 7 + .../en16931/ram/TradeAllowanceChargeType.yml | 17 + .../en16931/ram/TradeContactType.yml | 8 + .../en16931/ram/TradeCountryType.yml | 7 + .../validation/en16931/ram/TradePartyType.yml | 17 + .../en16931/ram/TradePaymentTermsType.yml | 5 + .../validation/en16931/ram/TradePriceType.yml | 10 + .../en16931/ram/TradeProductType.yml | 16 + .../ram/TradeSettlementFinancialCardType.yml | 7 + ...eSettlementHeaderMonetarySummationType.yml | 22 + ...adeSettlementLineMonetarySummationType.yml | 7 + .../ram/TradeSettlementPaymentMeansType.yml | 19 + .../validation/en16931/ram/TradeTaxType.yml | 15 + .../en16931/rsm/CrossIndustryInvoiceType.yml | 23 + .../en16931/udt/BinaryObjectType.yml | 12 + .../udt/DateTimeType.DateTimeStringAType.yml | 7 + .../en16931/udt/DateType.DateStringAType.yml | 7 + .../validation/en16931/udt/QuantityType.yml | 7 + .../qdt/AccountingAccountTypeCodeType.yml | 15 + .../qdt/AllowanceChargeReasonCodeType.yml | 204 + .../validation/extended/qdt/CountryIDType.yml | 259 + .../extended/qdt/CurrencyCodeType.yml | 187 + .../extended/qdt/DeliveryTermsCodeType.yml | 21 + .../extended/qdt/DocumentCodeType.yml | 803 + ...mattedDateTimeType.DateTimeStringAType.yml | 7 + .../extended/qdt/FormattedDateTimeType.yml | 7 + .../extended/qdt/PaymentMeansCodeType.yml | 91 + .../extended/qdt/ReferenceCodeType.yml | 825 + .../extended/qdt/TaxCategoryCodeType.yml | 29 + .../extended/qdt/TaxTypeCodeType.yml | 62 + .../extended/qdt/TimeReferenceCodeType.yml | 11 + .../extended/ram/AdvancePaymentType.yml | 20 + .../ram/CreditorFinancialInstitutionType.yml | 7 + .../ram/DebtorFinancialAccountType.yml | 7 + .../ram/DocumentContextParameterType.yml | 7 + .../extended/ram/DocumentLineDocumentType.yml | 10 + .../ram/ExchangedDocumentContextType.yml | 15 + .../extended/ram/ExchangedDocumentType.yml | 28 + .../extended/ram/HeaderTradeAgreementType.yml | 55 + .../extended/ram/HeaderTradeDeliveryType.yml | 26 + .../ram/HeaderTradeSettlementType.yml | 60 + .../extended/ram/LegalOrganizationType.yml | 5 + .../extended/ram/LineTradeAgreementType.yml | 30 + .../extended/ram/LineTradeDeliveryType.yml | 25 + .../extended/ram/LineTradeSettlementType.yml | 31 + .../ram/LogisticsServiceChargeType.yml | 19 + .../ram/LogisticsTransportMovementType.yml | 7 + .../src/validation/extended/ram/NoteType.yml | 7 + .../extended/ram/ProcuringProjectType.yml | 12 + .../ram/ProductCharacteristicType.yml | 12 + .../ram/ProductClassificationType.yml | 7 + .../extended/ram/ReferencedDocumentType.yml | 5 + .../extended/ram/ReferencedProductType.yml | 7 + .../extended/ram/SpecifiedPeriodType.yml | 11 + .../ram/SupplyChainConsignmentType.yml | 5 + .../extended/ram/SupplyChainEventType.yml | 9 + .../ram/SupplyChainTradeLineItemType.yml | 37 + .../ram/SupplyChainTradeTransactionType.yml | 30 + .../extended/ram/TaxRegistrationType.yml | 7 + .../ram/TradeAccountingAccountType.yml | 7 + .../extended/ram/TradeAddressType.yml | 7 + .../extended/ram/TradeAllowanceChargeType.yml | 17 + .../extended/ram/TradeContactType.yml | 11 + .../extended/ram/TradeCountryType.yml | 7 + .../ram/TradeCurrencyExchangeType.yml | 20 + .../extended/ram/TradeDeliveryTermsType.yml | 7 + .../extended/ram/TradePartyType.yml | 17 + .../ram/TradePaymentDiscountTermsType.yml | 5 + .../ram/TradePaymentPenaltyTermsType.yml | 5 + .../extended/ram/TradePaymentTermsType.yml | 14 + .../extended/ram/TradePriceType.yml | 13 + .../extended/ram/TradeProductType.yml | 22 + .../ram/TradeSettlementFinancialCardType.yml | 7 + ...eSettlementHeaderMonetarySummationType.yml | 22 + ...adeSettlementLineMonetarySummationType.yml | 7 + .../ram/TradeSettlementPaymentMeansType.yml | 19 + .../validation/extended/ram/TradeTaxType.yml | 15 + .../extended/rsm/CrossIndustryInvoiceType.yml | 23 + .../extended/udt/BinaryObjectType.yml | 12 + .../udt/DateTimeType.DateTimeStringAType.yml | 7 + .../extended/udt/DateType.DateStringAType.yml | 7 + .../validation/extended/udt/MeasureType.yml | 7 + .../validation/extended/udt/QuantityType.yml | 7 + .../validation/minimum/qdt/CountryIDType.yml | 259 + .../minimum/qdt/CurrencyCodeType.yml | 187 + .../minimum/qdt/DocumentCodeType.yml | 53 + .../ram/DocumentContextParameterType.yml | 7 + .../ram/ExchangedDocumentContextType.yml | 12 + .../minimum/ram/ExchangedDocumentType.yml | 19 + .../minimum/ram/HeaderTradeAgreementType.yml | 19 + .../minimum/ram/HeaderTradeSettlementType.yml | 14 + .../minimum/ram/ReferencedDocumentType.yml | 7 + .../ram/SupplyChainTradeTransactionType.yml | 23 + .../minimum/ram/TaxRegistrationType.yml | 7 + .../minimum/ram/TradeAddressType.yml | 7 + .../validation/minimum/ram/TradePartyType.yml | 16 + ...eSettlementHeaderMonetarySummationType.yml | 17 + .../minimum/rsm/CrossIndustryInvoiceType.yml | 23 + .../udt/DateTimeType.DateTimeStringAType.yml | 7 + .../qdt/AllowanceChargeReasonCodeType.yml | 12 + .../src/yaml/basic/qdt/CountryIDType.yml | 12 + .../src/yaml/basic/qdt/CurrencyCodeType.yml | 12 + .../src/yaml/basic/qdt/DocumentCodeType.yml | 12 + ...mattedDateTimeType.DateTimeStringAType.yml | 21 + .../yaml/basic/qdt/FormattedDateTimeType.yml | 13 + .../yaml/basic/qdt/PaymentMeansCodeType.yml | 12 + .../yaml/basic/qdt/TaxCategoryCodeType.yml | 12 + .../src/yaml/basic/qdt/TaxTypeCodeType.yml | 12 + .../yaml/basic/qdt/TimeReferenceCodeType.yml | 12 + .../ram/CreditorFinancialAccountType.yml | 24 + .../basic/ram/DebtorFinancialAccountType.yml | 13 + .../ram/DocumentContextParameterType.yml | 13 + .../basic/ram/DocumentLineDocumentType.yml | 24 + .../ram/ExchangedDocumentContextType.yml | 24 + .../yaml/basic/ram/ExchangedDocumentType.yml | 50 + .../basic/ram/HeaderTradeAgreementType.yml | 68 + .../basic/ram/HeaderTradeDeliveryType.yml | 35 + .../basic/ram/HeaderTradeSettlementType.yml | 161 + .../yaml/basic/ram/LegalOrganizationType.yml | 24 + .../yaml/basic/ram/LineTradeAgreementType.yml | 24 + .../yaml/basic/ram/LineTradeDeliveryType.yml | 13 + .../basic/ram/LineTradeSettlementType.yml | 50 + .../zugferd/src/yaml/basic/ram/NoteType.yml | 24 + .../yaml/basic/ram/ReferencedDocumentType.yml | 24 + .../yaml/basic/ram/SpecifiedPeriodType.yml | 24 + .../yaml/basic/ram/SupplyChainEventType.yml | 13 + .../ram/SupplyChainTradeLineItemType.yml | 57 + .../ram/SupplyChainTradeTransactionType.yml | 50 + .../yaml/basic/ram/TaxRegistrationType.yml | 13 + .../basic/ram/TradeAccountingAccountType.yml | 13 + .../src/yaml/basic/ram/TradeAddressType.yml | 79 + .../basic/ram/TradeAllowanceChargeType.yml | 79 + .../src/yaml/basic/ram/TradePartyType.yml | 91 + .../yaml/basic/ram/TradePaymentTermsType.yml | 35 + .../src/yaml/basic/ram/TradePriceType.yml | 35 + .../src/yaml/basic/ram/TradeProductType.yml | 24 + ...eSettlementHeaderMonetarySummationType.yml | 94 + ...adeSettlementLineMonetarySummationType.yml | 13 + .../ram/TradeSettlementPaymentMeansType.yml | 35 + .../src/yaml/basic/ram/TradeTaxType.yml | 90 + .../basic/ram/UniversalCommunicationType.yml | 13 + .../yaml/basic/rsm/CrossIndustryInvoice.yml | 10 + .../basic/rsm/CrossIndustryInvoiceType.yml | 42 + .../zugferd/src/yaml/basic/udt/AmountType.yml | 21 + .../zugferd/src/yaml/basic/udt/CodeType.yml | 12 + .../udt/DateTimeType.DateTimeStringAType.yml | 21 + .../src/yaml/basic/udt/DateTimeType.yml | 13 + .../zugferd/src/yaml/basic/udt/IDType.yml | 21 + .../src/yaml/basic/udt/IndicatorType.yml | 13 + .../src/yaml/basic/udt/PercentType.yml | 12 + .../src/yaml/basic/udt/QuantityType.yml | 21 + .../zugferd/src/yaml/basic/udt/TextType.yml | 12 + .../qdt/AllowanceChargeReasonCodeType.yml | 12 + .../src/yaml/basicwl/qdt/CountryIDType.yml | 12 + .../src/yaml/basicwl/qdt/CurrencyCodeType.yml | 12 + .../src/yaml/basicwl/qdt/DocumentCodeType.yml | 12 + ...mattedDateTimeType.DateTimeStringAType.yml | 21 + .../basicwl/qdt/FormattedDateTimeType.yml | 13 + .../yaml/basicwl/qdt/PaymentMeansCodeType.yml | 12 + .../yaml/basicwl/qdt/TaxCategoryCodeType.yml | 12 + .../src/yaml/basicwl/qdt/TaxTypeCodeType.yml | 12 + .../basicwl/qdt/TimeReferenceCodeType.yml | 12 + .../ram/CreditorFinancialAccountType.yml | 24 + .../ram/DebtorFinancialAccountType.yml | 13 + .../ram/DocumentContextParameterType.yml | 13 + .../ram/ExchangedDocumentContextType.yml | 24 + .../basicwl/ram/ExchangedDocumentType.yml | 50 + .../basicwl/ram/HeaderTradeAgreementType.yml | 68 + .../basicwl/ram/HeaderTradeDeliveryType.yml | 35 + .../basicwl/ram/HeaderTradeSettlementType.yml | 161 + .../basicwl/ram/LegalOrganizationType.yml | 24 + .../zugferd/src/yaml/basicwl/ram/NoteType.yml | 24 + .../basicwl/ram/ReferencedDocumentType.yml | 24 + .../yaml/basicwl/ram/SpecifiedPeriodType.yml | 24 + .../yaml/basicwl/ram/SupplyChainEventType.yml | 13 + .../ram/SupplyChainTradeTransactionType.yml | 35 + .../yaml/basicwl/ram/TaxRegistrationType.yml | 13 + .../ram/TradeAccountingAccountType.yml | 13 + .../src/yaml/basicwl/ram/TradeAddressType.yml | 79 + .../basicwl/ram/TradeAllowanceChargeType.yml | 79 + .../src/yaml/basicwl/ram/TradePartyType.yml | 91 + .../basicwl/ram/TradePaymentTermsType.yml | 35 + ...eSettlementHeaderMonetarySummationType.yml | 94 + .../ram/TradeSettlementPaymentMeansType.yml | 35 + .../src/yaml/basicwl/ram/TradeTaxType.yml | 90 + .../ram/UniversalCommunicationType.yml | 13 + .../yaml/basicwl/rsm/CrossIndustryInvoice.yml | 10 + .../basicwl/rsm/CrossIndustryInvoiceType.yml | 42 + .../src/yaml/basicwl/udt/AmountType.yml | 21 + .../zugferd/src/yaml/basicwl/udt/CodeType.yml | 12 + .../udt/DateTimeType.DateTimeStringAType.yml | 21 + .../src/yaml/basicwl/udt/DateTimeType.yml | 13 + .../zugferd/src/yaml/basicwl/udt/IDType.yml | 21 + .../src/yaml/basicwl/udt/IndicatorType.yml | 13 + .../src/yaml/basicwl/udt/PercentType.yml | 12 + .../zugferd/src/yaml/basicwl/udt/TextType.yml | 12 + .../qdt/AllowanceChargeReasonCodeType.yml | 12 + .../src/yaml/en16931/qdt/CountryIDType.yml | 12 + .../src/yaml/en16931/qdt/CurrencyCodeType.yml | 12 + .../src/yaml/en16931/qdt/DocumentCodeType.yml | 12 + ...mattedDateTimeType.DateTimeStringAType.yml | 21 + .../en16931/qdt/FormattedDateTimeType.yml | 13 + .../yaml/en16931/qdt/PaymentMeansCodeType.yml | 12 + .../yaml/en16931/qdt/ReferenceCodeType.yml | 12 + .../yaml/en16931/qdt/TaxCategoryCodeType.yml | 12 + .../src/yaml/en16931/qdt/TaxTypeCodeType.yml | 12 + .../en16931/qdt/TimeReferenceCodeType.yml | 12 + .../ram/CreditorFinancialAccountType.yml | 35 + .../ram/CreditorFinancialInstitutionType.yml | 13 + .../ram/DebtorFinancialAccountType.yml | 13 + .../ram/DocumentContextParameterType.yml | 13 + .../en16931/ram/DocumentLineDocumentType.yml | 24 + .../ram/ExchangedDocumentContextType.yml | 24 + .../en16931/ram/ExchangedDocumentType.yml | 50 + .../en16931/ram/HeaderTradeAgreementType.yml | 105 + .../en16931/ram/HeaderTradeDeliveryType.yml | 46 + .../en16931/ram/HeaderTradeSettlementType.yml | 161 + .../en16931/ram/LegalOrganizationType.yml | 24 + .../en16931/ram/LineTradeAgreementType.yml | 35 + .../en16931/ram/LineTradeDeliveryType.yml | 13 + .../en16931/ram/LineTradeSettlementType.yml | 72 + .../zugferd/src/yaml/en16931/ram/NoteType.yml | 24 + .../yaml/en16931/ram/ProcuringProjectType.yml | 24 + .../en16931/ram/ProductCharacteristicType.yml | 24 + .../en16931/ram/ProductClassificationType.yml | 13 + .../en16931/ram/ReferencedDocumentType.yml | 90 + .../yaml/en16931/ram/SpecifiedPeriodType.yml | 24 + .../yaml/en16931/ram/SupplyChainEventType.yml | 13 + .../ram/SupplyChainTradeLineItemType.yml | 57 + .../ram/SupplyChainTradeTransactionType.yml | 50 + .../yaml/en16931/ram/TaxRegistrationType.yml | 13 + .../ram/TradeAccountingAccountType.yml | 13 + .../src/yaml/en16931/ram/TradeAddressType.yml | 79 + .../en16931/ram/TradeAllowanceChargeType.yml | 79 + .../src/yaml/en16931/ram/TradeContactType.yml | 46 + .../src/yaml/en16931/ram/TradeCountryType.yml | 13 + .../src/yaml/en16931/ram/TradePartyType.yml | 113 + .../en16931/ram/TradePaymentTermsType.yml | 35 + .../src/yaml/en16931/ram/TradePriceType.yml | 35 + .../src/yaml/en16931/ram/TradeProductType.yml | 98 + .../ram/TradeSettlementFinancialCardType.yml | 24 + ...eSettlementHeaderMonetarySummationType.yml | 105 + ...adeSettlementLineMonetarySummationType.yml | 13 + .../ram/TradeSettlementPaymentMeansType.yml | 68 + .../src/yaml/en16931/ram/TradeTaxType.yml | 101 + .../ram/UniversalCommunicationType.yml | 24 + .../yaml/en16931/rsm/CrossIndustryInvoice.yml | 10 + .../en16931/rsm/CrossIndustryInvoiceType.yml | 42 + .../src/yaml/en16931/udt/AmountType.yml | 21 + .../src/yaml/en16931/udt/BinaryObjectType.yml | 30 + .../zugferd/src/yaml/en16931/udt/CodeType.yml | 30 + .../udt/DateTimeType.DateTimeStringAType.yml | 21 + .../src/yaml/en16931/udt/DateTimeType.yml | 13 + .../en16931/udt/DateType.DateStringAType.yml | 21 + .../zugferd/src/yaml/en16931/udt/DateType.yml | 13 + .../zugferd/src/yaml/en16931/udt/IDType.yml | 21 + .../src/yaml/en16931/udt/IndicatorType.yml | 13 + .../src/yaml/en16931/udt/PercentType.yml | 12 + .../src/yaml/en16931/udt/QuantityType.yml | 21 + .../zugferd/src/yaml/en16931/udt/TextType.yml | 12 + .../qdt/AccountingAccountTypeCodeType.yml | 12 + .../qdt/AllowanceChargeReasonCodeType.yml | 12 + .../yaml/extended/qdt/ContactTypeCodeType.yml | 12 + .../src/yaml/extended/qdt/CountryIDType.yml | 12 + .../yaml/extended/qdt/CurrencyCodeType.yml | 12 + .../extended/qdt/DeliveryTermsCodeType.yml | 12 + .../yaml/extended/qdt/DocumentCodeType.yml | 12 + ...mattedDateTimeType.DateTimeStringAType.yml | 21 + .../extended/qdt/FormattedDateTimeType.yml | 13 + .../yaml/extended/qdt/LineStatusCodeType.yml | 12 + .../yaml/extended/qdt/PartyRoleCodeType.yml | 12 + .../extended/qdt/PaymentMeansCodeType.yml | 12 + .../yaml/extended/qdt/ReferenceCodeType.yml | 12 + .../yaml/extended/qdt/TaxCategoryCodeType.yml | 12 + .../src/yaml/extended/qdt/TaxTypeCodeType.yml | 12 + .../extended/qdt/TimeReferenceCodeType.yml | 12 + .../extended/qdt/TransportModeCodeType.yml | 12 + .../yaml/extended/ram/AdvancePaymentType.yml | 50 + .../ram/CreditorFinancialAccountType.yml | 35 + .../ram/CreditorFinancialInstitutionType.yml | 13 + .../ram/DebtorFinancialAccountType.yml | 13 + .../ram/DocumentContextParameterType.yml | 13 + .../extended/ram/DocumentLineDocumentType.yml | 61 + .../ram/ExchangedDocumentContextType.yml | 35 + .../extended/ram/ExchangedDocumentType.yml | 94 + .../extended/ram/HeaderTradeAgreementType.yml | 186 + .../extended/ram/HeaderTradeDeliveryType.yml | 95 + .../ram/HeaderTradeSettlementType.yml | 254 + .../extended/ram/LegalOrganizationType.yml | 35 + .../extended/ram/LineTradeAgreementType.yml | 98 + .../extended/ram/LineTradeDeliveryType.yml | 101 + .../extended/ram/LineTradeSettlementType.yml | 91 + .../ram/LogisticsServiceChargeType.yml | 39 + .../ram/LogisticsTransportMovementType.yml | 13 + .../src/yaml/extended/ram/NoteType.yml | 35 + .../extended/ram/ProcuringProjectType.yml | 24 + .../ram/ProductCharacteristicType.yml | 46 + .../ram/ProductClassificationType.yml | 24 + .../extended/ram/ReferencedDocumentType.yml | 90 + .../extended/ram/ReferencedProductType.yml | 94 + .../yaml/extended/ram/SpecifiedPeriodType.yml | 46 + .../ram/SupplyChainConsignmentType.yml | 17 + .../extended/ram/SupplyChainEventType.yml | 13 + .../ram/SupplyChainTradeLineItemType.yml | 57 + .../ram/SupplyChainTradeTransactionType.yml | 50 + .../yaml/extended/ram/TaxRegistrationType.yml | 13 + .../ram/TradeAccountingAccountType.yml | 24 + .../yaml/extended/ram/TradeAddressType.yml | 79 + .../extended/ram/TradeAllowanceChargeType.yml | 101 + .../yaml/extended/ram/TradeContactType.yml | 68 + .../yaml/extended/ram/TradeCountryType.yml | 13 + .../ram/TradeCurrencyExchangeType.yml | 46 + .../extended/ram/TradeDeliveryTermsType.yml | 13 + .../src/yaml/extended/ram/TradePartyType.yml | 128 + .../ram/TradePaymentDiscountTermsType.yml | 57 + .../ram/TradePaymentPenaltyTermsType.yml | 57 + .../extended/ram/TradePaymentTermsType.yml | 79 + .../src/yaml/extended/ram/TradePriceType.yml | 50 + .../extended/ram/TradeProductInstanceType.yml | 24 + .../yaml/extended/ram/TradeProductType.yml | 198 + .../ram/TradeSettlementFinancialCardType.yml | 24 + ...eSettlementHeaderMonetarySummationType.yml | 105 + ...adeSettlementLineMonetarySummationType.yml | 68 + .../ram/TradeSettlementPaymentMeansType.yml | 68 + .../src/yaml/extended/ram/TradeTaxType.yml | 123 + .../ram/UniversalCommunicationType.yml | 24 + .../extended/rsm/CrossIndustryInvoice.yml | 10 + .../extended/rsm/CrossIndustryInvoiceType.yml | 42 + .../src/yaml/extended/udt/AmountType.yml | 21 + .../yaml/extended/udt/BinaryObjectType.yml | 30 + .../src/yaml/extended/udt/CodeType.yml | 30 + .../udt/DateTimeType.DateTimeStringAType.yml | 21 + .../src/yaml/extended/udt/DateTimeType.yml | 13 + .../extended/udt/DateType.DateStringAType.yml | 21 + .../src/yaml/extended/udt/DateType.yml | 13 + .../zugferd/src/yaml/extended/udt/IDType.yml | 21 + .../src/yaml/extended/udt/IndicatorType.yml | 13 + .../src/yaml/extended/udt/MeasureType.yml | 21 + .../src/yaml/extended/udt/NumericType.yml | 12 + .../src/yaml/extended/udt/PercentType.yml | 12 + .../src/yaml/extended/udt/QuantityType.yml | 21 + .../src/yaml/extended/udt/RateType.yml | 12 + .../src/yaml/extended/udt/TextType.yml | 12 + .../src/yaml/minimum/qdt/CountryIDType.yml | 12 + .../src/yaml/minimum/qdt/CurrencyCodeType.yml | 12 + .../src/yaml/minimum/qdt/DocumentCodeType.yml | 12 + .../ram/DocumentContextParameterType.yml | 13 + .../ram/ExchangedDocumentContextType.yml | 24 + .../minimum/ram/ExchangedDocumentType.yml | 35 + .../minimum/ram/HeaderTradeAgreementType.yml | 46 + .../minimum/ram/HeaderTradeDeliveryType.yml | 2 + .../minimum/ram/HeaderTradeSettlementType.yml | 24 + .../minimum/ram/LegalOrganizationType.yml | 13 + .../minimum/ram/ReferencedDocumentType.yml | 13 + .../ram/SupplyChainTradeTransactionType.yml | 35 + .../yaml/minimum/ram/TaxRegistrationType.yml | 13 + .../src/yaml/minimum/ram/TradeAddressType.yml | 14 + .../src/yaml/minimum/ram/TradePartyType.yml | 50 + ...eSettlementHeaderMonetarySummationType.yml | 50 + .../yaml/minimum/rsm/CrossIndustryInvoice.yml | 10 + .../minimum/rsm/CrossIndustryInvoiceType.yml | 42 + .../src/yaml/minimum/udt/AmountType.yml | 21 + .../udt/DateTimeType.DateTimeStringAType.yml | 21 + .../src/yaml/minimum/udt/DateTimeType.yml | 13 + .../zugferd/src/yaml/minimum/udt/IDType.yml | 21 + .../zugferd/src/yaml/minimum/udt/TextType.yml | 12 + vendor/horstoeko/zugferd/tests/TestCase.php | 165 + .../tests/assets/dummy_attachment_1.dummy | 1 + .../tests/assets/issues/xml_issue_206.xml | 123 + .../tests/assets/issues/xml_issue_268.xml | 1338 + .../assets/issues/xml_issue_268_extended.xml | 1346 + .../tests/assets/pdf_fx_extended_1.pdf | 1877 + .../zugferd/tests/assets/pdf_fx_minimum_1.pdf | Bin 0 -> 250114 bytes .../zugferd/tests/assets/pdf_invalid.pdf | Bin 0 -> 20399 bytes .../zugferd/tests/assets/pdf_plain.pdf | Bin 0 -> 1740 bytes .../zugferd/tests/assets/pdf_zf_en16931_1.pdf | Bin 0 -> 85261 bytes .../zugferd/tests/assets/pdf_zf_en16931_2.pdf | Bin 0 -> 1055033 bytes .../zugferd/tests/assets/pdf_zf_en16931_3.pdf | Bin 0 -> 93638 bytes .../tests/assets/pdf_zf_extended_1.pdf | Bin 0 -> 99163 bytes .../tests/assets/pdf_zf_xrechnung_1.pdf | Bin 0 -> 147863 bytes .../tests/assets/txt_addattachment_1.txt | 1 + .../zugferd/tests/assets/xml_basic_1.xml | 205 + .../zugferd/tests/assets/xml_en16931_1.xml | 170 + .../zugferd/tests/assets/xml_en16931_2.xml | 370 + .../zugferd/tests/assets/xml_en16931_3.xml | 425 + .../zugferd/tests/assets/xml_en16931_4.xml | 170 + .../zugferd/tests/assets/xml_en16931_5.xml | 153 + .../zugferd/tests/assets/xml_extended_1.xml | 378 + .../zugferd/tests/assets/xml_extended_2.xml | 304 + .../zugferd/tests/assets/xml_invalid_1.xml | 2 + .../zugferd/tests/assets/xml_invalid_2.xml | 1 + .../zugferd/tests/assets/xml_xrechnung_1.xml | 265 + .../zugferd/tests/assets/xml_xrechnung_2.xml | 215 + .../tests/testcases/BuilderEn16931Test.php | 2236 + .../tests/testcases/BuilderExtendedTest.php | 2217 + .../tests/testcases/BuilderMinimumTest.php | 2126 + .../zugferd/tests/testcases/DocumentTest.php | 102 + .../tests/testcases/JsonExporterTest.php | 47 + .../tests/testcases/KositValidatorTest.php | 776 + .../testcases/ObjectHelperEn16931Test.php | 1439 + .../testcases/ObjectHelperExtendedTest.php | 1460 + .../tests/testcases/PackageVersionTest.php | 14 + .../tests/testcases/PdfBuilderEn16931Test.php | 969 + .../zugferd/tests/testcases/PdfMergerTest.php | 105 + .../PdfReaderEn16931AllowanceChargeTest.php | 1484 + .../tests/testcases/PdfReaderEn16931Test.php | 1153 + .../testcases/PdfReaderExtGeneralTest.php | 179 + .../testcases/PdfReaderExtended2Test.php | 1339 + .../tests/testcases/PdfReaderExtendedTest.php | 1569 + .../tests/testcases/PdfReaderGeneralTest.php | 111 + .../tests/testcases/PdfReaderMinimumTest.php | 872 + .../PdfReaderMultipleAttachmentsTest.php | 47 + .../testcases/PdfReaderXRechnungTest.php | 1169 + .../tests/testcases/ProfileConverterTest.php | 226 + .../tests/testcases/ProfileResolverTest.php | 466 + .../tests/testcases/ReaderBasicTest.php | 1056 + .../ReaderEn16931AllowanceChargeTest.php | 1500 + .../testcases/ReaderEn16931Bank1Test.php | 125 + .../testcases/ReaderEn16931Bank2Test.php | 163 + .../tests/testcases/ReaderEn16931Test.php | 1185 + .../tests/testcases/ReaderExtended2Test.php | 1356 + .../tests/testcases/ReaderExtendedTest.php | 1661 + ...eaderXRechnungAttachedBinaryObjectTest.php | 105 + .../tests/testcases/ReaderXRechnungTest.php | 1186 + .../zugferd/tests/testcases/SettingsTest.php | 208 + .../tests/testcases/ValidatorInvalidTest.php | 32 + .../tests/testcases/ValidatorValidTest.php | 29 + .../tests/testcases/issues/Issue104Test.php | 32 + .../tests/testcases/issues/Issue10Test.php | 70 + .../tests/testcases/issues/Issue113Test.php | 30 + .../tests/testcases/issues/Issue18Test.php | 30 + .../tests/testcases/issues/Issue206Test.php | 26 + .../tests/testcases/issues/Issue268Test.php | 97 + .../tests/testcases/issues/Issue270Test.php | 96 + .../tests/testcases/issues/Issue32Test.php | 57 + .../tests/testcases/issues/Issue43Test.php | 48 + .../zugferd/tests/traits/HandlesXmlTests.php | 230 + .../RunsOnlyWithJavaEnvironmentTrait.php | 49 + vendor/jms/metadata/CHANGELOG.md | 144 + vendor/jms/metadata/CONTRIBUTING.md | 44 + vendor/jms/metadata/LICENSE | 19 + vendor/jms/metadata/README.md | 55 + vendor/jms/metadata/UPGRADING.md | 62 + vendor/jms/metadata/composer.json | 45 + .../src/AdvancedMetadataFactoryInterface.php | 23 + .../jms/metadata/src/Cache/CacheInterface.php | 25 + .../src/Cache/ClearableCacheInterface.php | 16 + .../src/Cache/DoctrineCacheAdapter.php | 55 + vendor/jms/metadata/src/Cache/FileCache.php | 134 + .../metadata/src/Cache/PsrCacheAdapter.php | 69 + .../metadata/src/ClassHierarchyMetadata.php | 44 + vendor/jms/metadata/src/ClassMetadata.php | 100 + .../src/Driver/AbstractFileDriver.php | 56 + .../src/Driver/AdvancedDriverInterface.php | 20 + .../Driver/AdvancedFileLocatorInterface.php | 20 + .../jms/metadata/src/Driver/DriverChain.php | 65 + .../metadata/src/Driver/DriverInterface.php | 12 + .../jms/metadata/src/Driver/FileLocator.php | 80 + .../src/Driver/FileLocatorInterface.php | 10 + .../metadata/src/Driver/LazyLoadingDriver.php | 40 + .../Driver/TraceableFileLocatorInterface.php | 15 + .../metadata/src/MergeableClassMetadata.php | 24 + .../jms/metadata/src/MergeableInterface.php | 10 + vendor/jms/metadata/src/MetadataFactory.php | 217 + .../metadata/src/MetadataFactoryInterface.php | 29 + vendor/jms/metadata/src/MethodMetadata.php | 90 + vendor/jms/metadata/src/NullMetadata.php | 14 + vendor/jms/metadata/src/PropertyMetadata.php | 47 + .../jms/metadata/src/SerializationHelper.php | 40 + vendor/jms/serializer/.run/phpunit.run.xml | 6 + vendor/jms/serializer/CHANGELOG.md | 546 + vendor/jms/serializer/CONTRIBUTING.md | 83 + vendor/jms/serializer/LICENSE | 19 + vendor/jms/serializer/META.md | 7 + vendor/jms/serializer/README.md | 74 + vendor/jms/serializer/UPGRADING.md | 114 + vendor/jms/serializer/composer.json | 84 + vendor/jms/serializer/doc/LICENSE | 55 + vendor/jms/serializer/doc/conf.py | 41 + vendor/jms/serializer/doc/configuration.rst | 106 + vendor/jms/serializer/doc/cookbook.rst | 7 + vendor/jms/serializer/doc/cookbook/arrays.rst | 47 + .../doc/cookbook/exclusion_strategies.rst | 408 + .../doc/cookbook/object_constructor.rst | 56 + .../jms/serializer/doc/cookbook/stdclass.rst | 16 + vendor/jms/serializer/doc/event_system.rst | 85 + vendor/jms/serializer/doc/handlers.rst | 85 + vendor/jms/serializer/doc/index.rst | 62 + vendor/jms/serializer/doc/logo-small.png | Bin 0 -> 6473 bytes vendor/jms/serializer/doc/logo.png | Bin 0 -> 53560 bytes vendor/jms/serializer/doc/reference.rst | 8 + .../serializer/doc/reference/annotations.rst | 1067 + .../doc/reference/xml_reference.rst | 112 + .../doc/reference/yml_reference.rst | 98 + vendor/jms/serializer/doc/requirements.txt | 6 + vendor/jms/serializer/doc/usage.rst | 36 + vendor/jms/serializer/phpbench.json | 15 + vendor/jms/serializer/phpstan.neon.dist | 27 + vendor/jms/serializer/rector.php | 10 + vendor/jms/serializer/src/AbstractVisitor.php | 115 + .../Accessor/AccessorStrategyInterface.php | 25 + .../src/Accessor/DefaultAccessorStrategy.php | 143 + .../serializer/src/Annotation/AccessType.php | 28 + .../serializer/src/Annotation/Accessor.php | 32 + .../src/Annotation/AccessorOrder.php | 35 + .../src/Annotation/AnnotationUtilsTrait.php | 40 + .../src/Annotation/DeprecatedReadOnly.php | 16 + .../src/Annotation/Discriminator.php | 32 + .../jms/serializer/src/Annotation/Exclude.php | 25 + .../src/Annotation/ExclusionPolicy.php | 36 + .../jms/serializer/src/Annotation/Expose.php | 25 + .../jms/serializer/src/Annotation/Groups.php | 35 + .../jms/serializer/src/Annotation/Inline.php | 14 + .../serializer/src/Annotation/MaxDepth.php | 26 + .../src/Annotation/PostDeserialize.php | 21 + .../src/Annotation/PostSerialize.php | 14 + .../src/Annotation/PreSerialize.php | 22 + .../serializer/src/Annotation/ReadOnly.php | 7 + .../src/Annotation/ReadOnlyProperty.php | 27 + .../src/Annotation/SerializedName.php | 25 + .../src/Annotation/SerializerAttribute.php | 12 + .../jms/serializer/src/Annotation/Since.php | 14 + .../src/Annotation/SkipWhenEmpty.php | 14 + vendor/jms/serializer/src/Annotation/Type.php | 46 + .../src/Annotation/UnionDiscriminator.php | 26 + .../jms/serializer/src/Annotation/Until.php | 14 + .../jms/serializer/src/Annotation/Version.php | 21 + .../src/Annotation/VirtualProperty.php | 53 + .../src/Annotation/XmlAttribute.php | 25 + .../src/Annotation/XmlAttributeMap.php | 14 + .../src/Annotation/XmlCollection.php | 35 + .../src/Annotation/XmlDiscriminator.php | 35 + .../serializer/src/Annotation/XmlElement.php | 30 + .../src/Annotation/XmlKeyValuePairs.php | 14 + .../jms/serializer/src/Annotation/XmlList.php | 14 + .../jms/serializer/src/Annotation/XmlMap.php | 25 + .../src/Annotation/XmlNamespace.php | 31 + .../jms/serializer/src/Annotation/XmlRoot.php | 36 + .../serializer/src/Annotation/XmlValue.php | 25 + .../src/ArrayTransformerInterface.php | 33 + .../src/Builder/CallbackDriverFactory.php | 36 + .../src/Builder/DefaultDriverFactory.php | 104 + .../src/Builder/DocBlockDriverFactory.php | 35 + .../src/Builder/DriverFactoryInterface.php | 13 + .../DoctrineObjectConstructor.php | 161 + .../ObjectConstructorInterface.php | 31 + .../UnserializeObjectConstructor.php | 33 + vendor/jms/serializer/src/Context.php | 268 + .../ContextFactory/CallableContextFactory.php | 12 + .../CallableDeserializationContextFactory.php | 31 + .../CallableSerializationContextFactory.php | 33 + .../DefaultDeserializationContextFactory.php | 18 + .../DefaultSerializationContextFactory.php | 18 + ...DeserializationContextFactoryInterface.php | 15 + .../SerializationContextFactoryInterface.php | 15 + .../serializer/src/DeserializationContext.php | 44 + .../serializer/src/EventDispatcher/Event.php | 78 + .../src/EventDispatcher/EventDispatcher.php | 140 + .../EventDispatcherInterface.php | 33 + .../EventSubscriberInterface.php | 26 + .../serializer/src/EventDispatcher/Events.php | 17 + .../EventDispatcher/LazyEventDispatcher.php | 51 + .../src/EventDispatcher/ObjectEvent.php | 38 + .../EventDispatcher/PreDeserializeEvent.php | 51 + .../src/EventDispatcher/PreSerializeEvent.php | 13 + .../Subscriber/DoctrineProxySubscriber.php | 126 + .../Subscriber/EnumSubscriber.php | 34 + .../SymfonyValidatorValidatorSubscriber.php | 57 + .../CircularReferenceDetectedException.php | 12 + .../serializer/src/Exception/Exception.php | 14 + .../src/Exception/ExcludedClassException.php | 12 + .../ExpressionLanguageRequiredException.php | 12 + .../Exception/InvalidArgumentException.php | 14 + .../Exception/InvalidMetadataException.php | 14 + .../src/Exception/LogicException.php | 14 + .../Exception/NonCastableTypeException.php | 37 + .../NonFloatCastableTypeException.php | 16 + .../Exception/NonIntCastableTypeException.php | 16 + .../NonStringCastableTypeException.php | 16 + .../Exception/NonVisitableTypeException.php | 31 + .../src/Exception/NotAcceptableException.php | 12 + .../Exception/ObjectConstructionException.php | 14 + .../src/Exception/RuntimeException.php | 22 + .../src/Exception/SkipHandlerException.php | 13 + .../UninitializedPropertyException.php | 9 + .../Exception/UnsupportedFormatException.php | 9 + .../Exception/ValidationFailedException.php | 27 + .../src/Exception/XmlErrorException.php | 42 + .../src/Exclusion/DepthExclusionStrategy.php | 48 + .../Exclusion/DisjunctExclusionStrategy.php | 67 + .../Exclusion/ExclusionStrategyInterface.php | 27 + .../ExpressionLanguageExclusionStrategy.php | 80 + .../src/Exclusion/GroupsExclusionStrategy.php | 115 + .../Exclusion/VersionExclusionStrategy.php | 36 + ...CompilableExpressionEvaluatorInterface.php | 18 + .../serializer/src/Expression/Expression.php | 77 + .../src/Expression/ExpressionEvaluator.php | 58 + .../ExpressionEvaluatorInterface.php | 16 + vendor/jms/serializer/src/Functions.php | 20 + vendor/jms/serializer/src/GraphNavigator.php | 48 + .../DeserializationGraphNavigator.php | 274 + .../DeserializationGraphNavigatorFactory.php | 63 + .../GraphNavigatorFactoryInterface.php | 12 + .../SerializationGraphNavigatorFactory.php | 58 + .../SerializationGraphNavigator.php | 318 + .../src/GraphNavigatorInterface.php | 35 + .../src/Handler/ArrayCollectionHandler.php | 168 + .../Handler/ConstraintViolationHandler.php | 89 + .../serializer/src/Handler/DateHandler.php | 363 + .../serializer/src/Handler/EnumHandler.php | 105 + .../src/Handler/FormErrorHandler.php | 155 + .../src/Handler/HandlerRegistry.php | 87 + .../src/Handler/HandlerRegistryInterface.php | 30 + .../src/Handler/IteratorHandler.php | 133 + .../src/Handler/LazyHandlerRegistry.php | 68 + .../src/Handler/StdClassHandler.php | 57 + .../Handler/SubscribingHandlerInterface.php | 28 + .../src/Handler/SymfonyUidHandler.php | 173 + .../serializer/src/Handler/UnionHandler.php | 161 + .../src/JsonDeserializationStrictVisitor.php | 172 + .../src/JsonDeserializationVisitor.php | 258 + .../src/JsonSerializationVisitor.php | 202 + .../serializer/src/Metadata/ClassMetadata.php | 410 + .../Driver/AbstractDoctrineTypeDriver.php | 158 + .../src/Metadata/Driver/AnnotationDriver.php | 52 + .../Driver/AnnotationOrAttributeDriver.php | 369 + .../src/Metadata/Driver/AttributeDriver.php | 43 + .../AttributeDriver/AttributeReader.php | 92 + .../Driver/DefaultValuePropertyDriver.php | 84 + .../src/Metadata/Driver/DocBlockDriver.php | 97 + .../DocBlockDriver/DocBlockTypeResolver.php | 461 + .../Driver/DoctrinePHPCRTypeDriver.php | 64 + .../Metadata/Driver/DoctrineTypeDriver.php | 73 + .../Metadata/Driver/EnumPropertiesDriver.php | 90 + .../Driver/ExpressionMetadataTrait.php | 35 + .../src/Metadata/Driver/NullDriver.php | 49 + .../Metadata/Driver/TypedPropertiesDriver.php | 204 + .../src/Metadata/Driver/XmlDriver.php | 418 + .../src/Metadata/Driver/YamlDriver.php | 464 + .../Metadata/ExpressionPropertyMetadata.php | 58 + .../src/Metadata/PropertyMetadata.php | 302 + .../src/Metadata/StaticPropertyMetadata.php | 59 + .../src/Metadata/VirtualPropertyMetadata.php | 26 + .../src/Naming/CamelCaseNamingStrategy.php | 42 + .../IdenticalPropertyNamingStrategy.php | 15 + .../PropertyNamingStrategyInterface.php | 23 + .../SerializedNameAnnotationStrategy.php | 34 + .../src/NullAwareVisitorInterface.php | 16 + .../AlphabeticalPropertyOrderingStrategy.php | 23 + .../CustomPropertyOrderingStrategy.php | 48 + .../IdenticalPropertyOrderingStrategy.php | 16 + .../Ordering/PropertyOrderingInterface.php | 17 + .../serializer/src/SerializationContext.php | 160 + vendor/jms/serializer/src/Serializer.php | 278 + .../jms/serializer/src/SerializerBuilder.php | 680 + .../serializer/src/SerializerInterface.php | 33 + .../src/Twig/SerializerBaseExtension.php | 30 + .../src/Twig/SerializerExtension.php | 59 + .../src/Twig/SerializerRuntimeExtension.php | 38 + .../src/Twig/SerializerRuntimeHelper.php | 32 + .../src/Type/Exception/Exception.php | 11 + .../src/Type/Exception/InvalidNode.php | 9 + .../src/Type/Exception/SyntaxError.php | 9 + vendor/jms/serializer/src/Type/Lexer.php | 113 + vendor/jms/serializer/src/Type/Parser.php | 167 + .../serializer/src/Type/ParserInterface.php | 16 + vendor/jms/serializer/src/Type/Type.php | 14 + .../DeserializationVisitorInterface.php | 95 + .../Factory/DeserializationVisitorFactory.php | 15 + .../JsonDeserializationVisitorFactory.php | 58 + .../JsonSerializationVisitorFactory.php | 31 + .../Factory/SerializationVisitorFactory.php | 15 + .../XmlDeserializationVisitorFactory.php | 61 + .../XmlSerializationVisitorFactory.php | 79 + .../Visitor/SerializationVisitorInterface.php | 83 + .../jms/serializer/src/VisitorInterface.php | 43 + .../src/XmlDeserializationVisitor.php | 572 + .../src/XmlSerializationVisitor.php | 629 + vendor/num-num/ubl-invoice/.editorconfig | 15 + vendor/num-num/ubl-invoice/.gitignore | 83 + vendor/num-num/ubl-invoice/CHANGELOG.md | 261 + vendor/num-num/ubl-invoice/CONTRIBUTING.md | 60 + vendor/num-num/ubl-invoice/LICENSE | 24 + vendor/num-num/ubl-invoice/README.md | 31 + vendor/num-num/ubl-invoice/composer.json | 56 + vendor/num-num/ubl-invoice/composer.lock | 1996 + vendor/num-num/ubl-invoice/phpcs.xml | 350 + vendor/num-num/ubl-invoice/phpunit.xml.dist | 13 + .../src/AdditionalDocumentReference.php | 140 + vendor/num-num/ubl-invoice/src/Address.php | 189 + .../ubl-invoice/src/AllowanceCharge.php | 227 + vendor/num-num/ubl-invoice/src/Attachment.php | 180 + .../ubl-invoice/src/BillingReference.php | 57 + .../ubl-invoice/src/ClassifiedTaxCategory.php | 239 + .../src/CommodityClassification.php | 90 + vendor/num-num/ubl-invoice/src/Contact.php | 144 + .../src/ContractDocumentReference.php | 42 + vendor/num-num/ubl-invoice/src/Country.php | 69 + vendor/num-num/ubl-invoice/src/CreditNote.php | 30 + .../ubl-invoice/src/CreditNoteLine.php | 27 + vendor/num-num/ubl-invoice/src/Delivery.php | 93 + vendor/num-num/ubl-invoice/src/EASCode.php | 109 + .../src/FinancialInstitutionBranch.php | 36 + vendor/num-num/ubl-invoice/src/Generator.php | 44 + vendor/num-num/ubl-invoice/src/ICDCode.php | 244 + vendor/num-num/ubl-invoice/src/Invoice.php | 826 + .../src/InvoiceDocumentReference.php | 96 + .../num-num/ubl-invoice/src/InvoiceLine.php | 367 + .../num-num/ubl-invoice/src/InvoicePeriod.php | 109 + .../ubl-invoice/src/InvoiceTypeCode.php | 17 + vendor/num-num/ubl-invoice/src/Item.php | 205 + .../num-num/ubl-invoice/src/LegalEntity.php | 99 + .../ubl-invoice/src/LegalMonetaryTotal.php | 245 + .../ubl-invoice/src/NumberFormatter.php | 33 + .../ubl-invoice/src/OrderLineReference.php | 55 + .../ubl-invoice/src/OrderReference.php | 89 + vendor/num-num/ubl-invoice/src/Party.php | 276 + .../ubl-invoice/src/PartyTaxScheme.php | 107 + .../ubl-invoice/src/PayeeFinancialAccount.php | 91 + .../num-num/ubl-invoice/src/PaymentMeans.php | 172 + .../num-num/ubl-invoice/src/PaymentTerms.php | 113 + vendor/num-num/ubl-invoice/src/Price.php | 145 + .../ubl-invoice/src/ProjectReference.php | 43 + vendor/num-num/ubl-invoice/src/Schema.php | 9 + .../ubl-invoice/src/SettlementPeriod.php | 93 + .../num-num/ubl-invoice/src/TaxCategory.php | 208 + vendor/num-num/ubl-invoice/src/TaxScheme.php | 114 + .../num-num/ubl-invoice/src/TaxSubTotal.php | 146 + vendor/num-num/ubl-invoice/src/TaxTotal.php | 87 + vendor/num-num/ubl-invoice/src/UNCL4461.php | 93 + vendor/num-num/ubl-invoice/src/UNCL5305.php | 25 + vendor/num-num/ubl-invoice/src/UnitCode.php | 31 + .../ubl-invoice/src/VatExemptionCode.php | 353 + .../tests/BillingReferenceCreditNoteTest.php | 124 + .../tests/ContractDocumentReferenceTest.php | 128 + .../ubl-invoice/tests/DocumentTypeTest.php | 158 + .../num-num/ubl-invoice/tests/DueDateTest.php | 118 + .../num-num/ubl-invoice/tests/EN16931Test.php | 202 + .../ubl-invoice/tests/EmptyAttachmentTest.php | 161 + .../tests/MultiplePaymentMeansTest.php | 171 + .../ubl-invoice/tests/NumberFormatterTest.php | 35 + .../PartyIdentificationSchemeNameTest.php | 128 + .../tests/ProjectReferenceTest.php | 192 + .../ubl-invoice/tests/SampleInvoice.pdf | Bin 0 -> 62037 bytes .../tests/SimpleCreditNoteTest.php | 117 + .../ubl-invoice/tests/SimpleInvoiceTest.php | 155 + .../SimpleInvoiceWithFilePathPdfTest.php | 162 + .../tests/SimpleInvoiceWithInlinePdfTest.php | 167 + .../tests/SimpleUBL22InvoiceTest.php | 119 + .../constant_time_encoding/LICENSE.txt | 48 + .../constant_time_encoding/README.md | 88 + .../constant_time_encoding/composer.json | 56 + .../constant_time_encoding/src/Base32.php | 541 + .../constant_time_encoding/src/Base32Hex.php | 111 + .../constant_time_encoding/src/Base64.php | 319 + .../src/Base64DotSlash.php | 88 + .../src/Base64DotSlashOrdered.php | 82 + .../src/Base64UrlSafe.php | 95 + .../constant_time_encoding/src/Binary.php | 93 + .../src/EncoderInterface.php | 52 + .../constant_time_encoding/src/Encoding.php | 298 + .../constant_time_encoding/src/Hex.php | 151 + .../constant_time_encoding/src/RFC4648.php | 206 + .../php-curl-class/CHANGELOG.md | 350 + vendor/php-curl-class/php-curl-class/LICENSE | 24 + .../php-curl-class/php-curl-class/README.md | 408 + .../php-curl-class/php-curl-class/SECURITY.md | 127 + .../php-curl-class/composer.json | 53 + .../php-curl-class/src/Curl/ArrayUtil.php | 159 + .../php-curl-class/src/Curl/BaseCurl.php | 422 + .../src/Curl/CaseInsensitiveArray.php | 211 + .../php-curl-class/src/Curl/Curl.php | 2275 + .../php-curl-class/src/Curl/Decoder.php | 45 + .../php-curl-class/src/Curl/Encoder.php | 30 + .../php-curl-class/src/Curl/MultiCurl.php | 976 + .../php-curl-class/src/Curl/StringUtil.php | 65 + .../php-curl-class/src/Curl/Url.php | 253 + vendor/phpstan/phpdoc-parser/LICENSE | 22 + vendor/phpstan/phpdoc-parser/README.md | 123 + vendor/phpstan/phpdoc-parser/UPGRADING.md | 129 + vendor/phpstan/phpdoc-parser/composer.json | 44 + .../src/Ast/AbstractNodeVisitor.php | 34 + .../phpdoc-parser/src/Ast/Attribute.php | 18 + .../phpstan/phpdoc-parser/src/Ast/Comment.php | 28 + .../Ast/ConstExpr/ConstExprArrayItemNode.php | 34 + .../src/Ast/ConstExpr/ConstExprArrayNode.php | 30 + .../src/Ast/ConstExpr/ConstExprFalseNode.php | 17 + .../src/Ast/ConstExpr/ConstExprFloatNode.php | 25 + .../Ast/ConstExpr/ConstExprIntegerNode.php | 25 + .../src/Ast/ConstExpr/ConstExprNode.php | 10 + .../src/Ast/ConstExpr/ConstExprNullNode.php | 17 + .../src/Ast/ConstExpr/ConstExprStringNode.php | 80 + .../src/Ast/ConstExpr/ConstExprTrueNode.php | 17 + .../src/Ast/ConstExpr/ConstFetchNode.php | 34 + .../ConstExpr/DoctrineConstExprStringNode.php | 41 + vendor/phpstan/phpdoc-parser/src/Ast/Node.php | 22 + .../phpdoc-parser/src/Ast/NodeAttributes.php | 42 + .../phpdoc-parser/src/Ast/NodeTraverser.php | 312 + .../phpdoc-parser/src/Ast/NodeVisitor.php | 87 + .../src/Ast/NodeVisitor/CloningVisitor.php | 20 + .../Ast/PhpDoc/AssertTagMethodValueNode.php | 45 + .../Ast/PhpDoc/AssertTagPropertyValueNode.php | 45 + .../src/Ast/PhpDoc/AssertTagValueNode.php | 42 + .../src/Ast/PhpDoc/DeprecatedTagValueNode.php | 27 + .../PhpDoc/Doctrine/DoctrineAnnotation.php | 34 + .../Ast/PhpDoc/Doctrine/DoctrineArgument.php | 42 + .../src/Ast/PhpDoc/Doctrine/DoctrineArray.php | 32 + .../Ast/PhpDoc/Doctrine/DoctrineArrayItem.php | 47 + .../PhpDoc/Doctrine/DoctrineTagValueNode.php | 35 + .../src/Ast/PhpDoc/ExtendsTagValueNode.php | 31 + .../src/Ast/PhpDoc/GenericTagValueNode.php | 26 + .../src/Ast/PhpDoc/ImplementsTagValueNode.php | 31 + .../src/Ast/PhpDoc/InvalidTagValueNode.php | 53 + .../src/Ast/PhpDoc/MethodTagValueNode.php | 55 + .../PhpDoc/MethodTagValueParameterNode.php | 44 + .../src/Ast/PhpDoc/MixinTagValueNode.php | 31 + .../PhpDoc/ParamClosureThisTagValueNode.php | 33 + ...ImmediatelyInvokedCallableTagValueNode.php | 29 + .../ParamLaterInvokedCallableTagValueNode.php | 29 + .../src/Ast/PhpDoc/ParamOutTagValueNode.php | 33 + .../src/Ast/PhpDoc/ParamTagValueNode.php | 42 + .../src/Ast/PhpDoc/PhpDocChildNode.php | 10 + .../src/Ast/PhpDoc/PhpDocNode.php | 401 + .../src/Ast/PhpDoc/PhpDocTagNode.php | 34 + .../src/Ast/PhpDoc/PhpDocTagValueNode.php | 10 + .../src/Ast/PhpDoc/PhpDocTextNode.php | 25 + .../src/Ast/PhpDoc/PropertyTagValueNode.php | 34 + ...PureUnlessCallableIsImpureTagValueNode.php | 29 + .../Ast/PhpDoc/RequireExtendsTagValueNode.php | 31 + .../PhpDoc/RequireImplementsTagValueNode.php | 31 + .../src/Ast/PhpDoc/ReturnTagValueNode.php | 31 + .../src/Ast/PhpDoc/SealedTagValueNode.php | 31 + .../src/Ast/PhpDoc/SelfOutTagValueNode.php | 31 + .../src/Ast/PhpDoc/TemplateTagValueNode.php | 47 + .../src/Ast/PhpDoc/ThrowsTagValueNode.php | 31 + .../PhpDoc/TypeAliasImportTagValueNode.php | 35 + .../src/Ast/PhpDoc/TypeAliasTagValueNode.php | 30 + .../Ast/PhpDoc/TypelessParamTagValueNode.php | 38 + .../src/Ast/PhpDoc/UsesTagValueNode.php | 31 + .../src/Ast/PhpDoc/VarTagValueNode.php | 35 + .../src/Ast/Type/ArrayShapeItemNode.php | 48 + .../src/Ast/Type/ArrayShapeNode.php | 76 + .../Ast/Type/ArrayShapeUnsealedTypeNode.php | 32 + .../src/Ast/Type/ArrayTypeNode.php | 33 + .../src/Ast/Type/CallableTypeNode.php | 50 + .../Ast/Type/CallableTypeParameterNode.php | 44 + .../Type/ConditionalTypeForParameterNode.php | 44 + .../src/Ast/Type/ConditionalTypeNode.php | 44 + .../src/Ast/Type/ConstTypeNode.php | 25 + .../src/Ast/Type/GenericTypeNode.php | 57 + .../src/Ast/Type/IdentifierTypeNode.php | 25 + .../src/Ast/Type/IntersectionTypeNode.php | 37 + .../src/Ast/Type/InvalidTypeNode.php | 38 + .../src/Ast/Type/NullableTypeNode.php | 25 + .../src/Ast/Type/ObjectShapeItemNode.php | 47 + .../src/Ast/Type/ObjectShapeNode.php | 31 + .../src/Ast/Type/OffsetAccessTypeNode.php | 34 + .../src/Ast/Type/ThisTypeNode.php | 17 + .../phpdoc-parser/src/Ast/Type/TypeNode.php | 10 + .../src/Ast/Type/UnionTypeNode.php | 37 + .../phpstan/phpdoc-parser/src/Lexer/Lexer.php | 199 + .../src/Parser/ConstExprParser.php | 292 + .../src/Parser/ParserException.php | 100 + .../phpdoc-parser/src/Parser/PhpDocParser.php | 1265 + .../src/Parser/StringUnescaper.php | 100 + .../src/Parser/TokenIterator.php | 428 + .../phpdoc-parser/src/Parser/TypeParser.php | 1136 + .../phpdoc-parser/src/ParserConfig.php | 24 + .../phpdoc-parser/src/Printer/DiffElem.php | 44 + .../phpdoc-parser/src/Printer/Differ.php | 196 + .../phpdoc-parser/src/Printer/Printer.php | 920 + vendor/sabre/uri/LICENSE | 27 + vendor/sabre/uri/composer.json | 68 + vendor/sabre/uri/lib/InvalidUriException.php | 19 + vendor/sabre/uri/lib/Version.php | 20 + vendor/sabre/uri/lib/functions.php | 425 + vendor/sabre/xml/LICENSE | 27 + vendor/sabre/xml/README.md | 26 + vendor/sabre/xml/composer.json | 70 + vendor/sabre/xml/lib/ContextStackTrait.php | 116 + .../sabre/xml/lib/Deserializer/functions.php | 388 + vendor/sabre/xml/lib/Element.php | 22 + vendor/sabre/xml/lib/Element/Base.php | 84 + vendor/sabre/xml/lib/Element/Cdata.php | 57 + vendor/sabre/xml/lib/Element/Elements.php | 102 + vendor/sabre/xml/lib/Element/KeyValue.php | 102 + vendor/sabre/xml/lib/Element/Uri.php | 95 + vendor/sabre/xml/lib/Element/XmlFragment.php | 144 + vendor/sabre/xml/lib/LibXMLException.php | 49 + vendor/sabre/xml/lib/ParseException.php | 16 + vendor/sabre/xml/lib/Reader.php | 317 + vendor/sabre/xml/lib/Serializer/functions.php | 207 + vendor/sabre/xml/lib/Service.php | 326 + vendor/sabre/xml/lib/Version.php | 20 + vendor/sabre/xml/lib/Writer.php | 261 + vendor/sabre/xml/lib/XmlDeserializable.php | 38 + vendor/sabre/xml/lib/XmlSerializable.php | 34 + vendor/setasign/fpdf/FAQ.htm | 270 + vendor/setasign/fpdf/README.md | 21 + vendor/setasign/fpdf/changelog.htm | 188 + vendor/setasign/fpdf/composer.json | 24 + vendor/setasign/fpdf/doc/__construct.htm | 63 + vendor/setasign/fpdf/doc/acceptpagebreak.htm | 63 + vendor/setasign/fpdf/doc/addfont.htm | 67 + vendor/setasign/fpdf/doc/addlink.htm | 26 + vendor/setasign/fpdf/doc/addpage.htm | 61 + vendor/setasign/fpdf/doc/aliasnbpages.htm | 45 + vendor/setasign/fpdf/doc/cell.htm | 104 + vendor/setasign/fpdf/doc/close.htm | 21 + vendor/setasign/fpdf/doc/error.htm | 26 + vendor/setasign/fpdf/doc/footer.htm | 35 + vendor/setasign/fpdf/doc/getpageheight.htm | 18 + vendor/setasign/fpdf/doc/getpagewidth.htm | 18 + vendor/setasign/fpdf/doc/getstringwidth.htm | 23 + vendor/setasign/fpdf/doc/getx.htm | 20 + vendor/setasign/fpdf/doc/gety.htm | 20 + vendor/setasign/fpdf/doc/header.htm | 37 + vendor/setasign/fpdf/doc/image.htm | 99 + vendor/setasign/fpdf/doc/index.htm | 59 + vendor/setasign/fpdf/doc/line.htm | 38 + vendor/setasign/fpdf/doc/link.htm | 46 + vendor/setasign/fpdf/doc/ln.htm | 28 + vendor/setasign/fpdf/doc/multicell.htm | 76 + vendor/setasign/fpdf/doc/output.htm | 55 + vendor/setasign/fpdf/doc/pageno.htm | 18 + vendor/setasign/fpdf/doc/rect.htm | 48 + vendor/setasign/fpdf/doc/setauthor.htm | 33 + vendor/setasign/fpdf/doc/setautopagebreak.htm | 33 + vendor/setasign/fpdf/doc/setcompression.htm | 31 + vendor/setasign/fpdf/doc/setcreator.htm | 34 + vendor/setasign/fpdf/doc/setdisplaymode.htm | 45 + vendor/setasign/fpdf/doc/setdrawcolor.htm | 41 + vendor/setasign/fpdf/doc/setfillcolor.htm | 40 + vendor/setasign/fpdf/doc/setfont.htm | 78 + vendor/setasign/fpdf/doc/setfontsize.htm | 25 + vendor/setasign/fpdf/doc/setkeywords.htm | 33 + vendor/setasign/fpdf/doc/setleftmargin.htm | 30 + vendor/setasign/fpdf/doc/setlinewidth.htm | 29 + vendor/setasign/fpdf/doc/setlink.htm | 34 + vendor/setasign/fpdf/doc/setmargins.htm | 37 + vendor/setasign/fpdf/doc/setrightmargin.htm | 28 + vendor/setasign/fpdf/doc/setsubject.htm | 33 + vendor/setasign/fpdf/doc/settextcolor.htm | 40 + vendor/setasign/fpdf/doc/settitle.htm | 33 + vendor/setasign/fpdf/doc/settopmargin.htm | 28 + vendor/setasign/fpdf/doc/setx.htm | 29 + vendor/setasign/fpdf/doc/setxy.htm | 31 + vendor/setasign/fpdf/doc/sety.htm | 33 + vendor/setasign/fpdf/doc/text.htm | 39 + vendor/setasign/fpdf/doc/write.htm | 51 + vendor/setasign/fpdf/font/courier.php | 10 + vendor/setasign/fpdf/font/courierb.php | 10 + vendor/setasign/fpdf/font/courierbi.php | 10 + vendor/setasign/fpdf/font/courieri.php | 10 + vendor/setasign/fpdf/font/helvetica.php | 21 + vendor/setasign/fpdf/font/helveticab.php | 21 + vendor/setasign/fpdf/font/helveticabi.php | 21 + vendor/setasign/fpdf/font/helveticai.php | 21 + vendor/setasign/fpdf/font/symbol.php | 20 + vendor/setasign/fpdf/font/times.php | 21 + vendor/setasign/fpdf/font/timesb.php | 21 + vendor/setasign/fpdf/font/timesbi.php | 21 + vendor/setasign/fpdf/font/timesi.php | 21 + vendor/setasign/fpdf/font/zapfdingbats.php | 20 + vendor/setasign/fpdf/fpdf.css | 21 + vendor/setasign/fpdf/fpdf.php | 1934 + vendor/setasign/fpdf/install.txt | 15 + vendor/setasign/fpdf/license.txt | 6 + vendor/setasign/fpdf/makefont/cp1250.map | 251 + vendor/setasign/fpdf/makefont/cp1251.map | 255 + vendor/setasign/fpdf/makefont/cp1252.map | 251 + vendor/setasign/fpdf/makefont/cp1253.map | 239 + vendor/setasign/fpdf/makefont/cp1254.map | 249 + vendor/setasign/fpdf/makefont/cp1255.map | 233 + vendor/setasign/fpdf/makefont/cp1257.map | 244 + vendor/setasign/fpdf/makefont/cp1258.map | 247 + vendor/setasign/fpdf/makefont/cp874.map | 225 + vendor/setasign/fpdf/makefont/iso-8859-1.map | 256 + vendor/setasign/fpdf/makefont/iso-8859-11.map | 248 + vendor/setasign/fpdf/makefont/iso-8859-15.map | 256 + vendor/setasign/fpdf/makefont/iso-8859-16.map | 256 + vendor/setasign/fpdf/makefont/iso-8859-2.map | 256 + vendor/setasign/fpdf/makefont/iso-8859-4.map | 256 + vendor/setasign/fpdf/makefont/iso-8859-5.map | 256 + vendor/setasign/fpdf/makefont/iso-8859-7.map | 250 + vendor/setasign/fpdf/makefont/iso-8859-9.map | 256 + vendor/setasign/fpdf/makefont/koi8-r.map | 256 + vendor/setasign/fpdf/makefont/koi8-u.map | 256 + vendor/setasign/fpdf/makefont/makefont.php | 447 + vendor/setasign/fpdf/makefont/ttfparser.php | 714 + vendor/setasign/fpdf/tutorial/20k_c1.txt | 10 + vendor/setasign/fpdf/tutorial/20k_c2.txt | 23 + .../tutorial/CevicheOne-Regular-Licence.txt | 94 + .../fpdf/tutorial/CevicheOne-Regular.php | 25 + .../fpdf/tutorial/CevicheOne-Regular.ttf | Bin 0 -> 35576 bytes .../fpdf/tutorial/CevicheOne-Regular.z | Bin 0 -> 15498 bytes vendor/setasign/fpdf/tutorial/countries.txt | 15 + vendor/setasign/fpdf/tutorial/index.htm | 20 + vendor/setasign/fpdf/tutorial/logo.png | Bin 0 -> 2373 bytes vendor/setasign/fpdf/tutorial/makefont.php | 6 + vendor/setasign/fpdf/tutorial/tuto1.htm | 76 + vendor/setasign/fpdf/tutorial/tuto1.php | 9 + vendor/setasign/fpdf/tutorial/tuto2.htm | 80 + vendor/setasign/fpdf/tutorial/tuto2.php | 41 + vendor/setasign/fpdf/tutorial/tuto3.htm | 115 + vendor/setasign/fpdf/tutorial/tuto3.php | 81 + vendor/setasign/fpdf/tutorial/tuto4.htm | 132 + vendor/setasign/fpdf/tutorial/tuto4.php | 109 + vendor/setasign/fpdf/tutorial/tuto5.htm | 134 + vendor/setasign/fpdf/tutorial/tuto5.php | 102 + vendor/setasign/fpdf/tutorial/tuto6.htm | 154 + vendor/setasign/fpdf/tutorial/tuto6.php | 113 + vendor/setasign/fpdf/tutorial/tuto7.htm | 182 + vendor/setasign/fpdf/tutorial/tuto7.php | 10 + vendor/setasign/fpdi/LICENSE.txt | 21 + vendor/setasign/fpdi/README.md | 130 + vendor/setasign/fpdi/SECURITY.md | 5 + vendor/setasign/fpdi/composer.json | 51 + vendor/setasign/fpdi/src/FpdfTpl.php | 21 + vendor/setasign/fpdi/src/FpdfTplTrait.php | 473 + vendor/setasign/fpdi/src/FpdfTrait.php | 193 + vendor/setasign/fpdi/src/Fpdi.php | 34 + vendor/setasign/fpdi/src/FpdiException.php | 18 + vendor/setasign/fpdi/src/FpdiTrait.php | 656 + vendor/setasign/fpdi/src/GraphicsState.php | 97 + vendor/setasign/fpdi/src/Math/Matrix.php | 116 + vendor/setasign/fpdi/src/Math/Vector.php | 66 + .../CrossReference/AbstractReader.php | 95 + .../CrossReference/CrossReference.php | 326 + .../CrossReferenceException.php | 79 + .../PdfParser/CrossReference/FixedReader.php | 200 + .../PdfParser/CrossReference/LineReader.php | 168 + .../CrossReference/ReaderInterface.php | 34 + .../fpdi/src/PdfParser/Filter/Ascii85.php | 102 + .../src/PdfParser/Filter/Ascii85Exception.php | 27 + .../fpdi/src/PdfParser/Filter/AsciiHex.php | 47 + .../src/PdfParser/Filter/FilterException.php | 23 + .../src/PdfParser/Filter/FilterInterface.php | 25 + .../fpdi/src/PdfParser/Filter/Flate.php | 77 + .../src/PdfParser/Filter/FlateException.php | 27 + .../fpdi/src/PdfParser/Filter/Lzw.php | 178 + .../src/PdfParser/Filter/LzwException.php | 22 + .../setasign/fpdi/src/PdfParser/PdfParser.php | 436 + .../fpdi/src/PdfParser/PdfParserException.php | 49 + .../fpdi/src/PdfParser/StreamReader.php | 481 + .../setasign/fpdi/src/PdfParser/Tokenizer.php | 151 + .../fpdi/src/PdfParser/Type/PdfArray.php | 85 + .../fpdi/src/PdfParser/Type/PdfBoolean.php | 42 + .../fpdi/src/PdfParser/Type/PdfDictionary.php | 131 + .../fpdi/src/PdfParser/Type/PdfHexString.php | 77 + .../src/PdfParser/Type/PdfIndirectObject.php | 103 + .../Type/PdfIndirectObjectReference.php | 52 + .../fpdi/src/PdfParser/Type/PdfName.php | 82 + .../fpdi/src/PdfParser/Type/PdfNull.php | 19 + .../fpdi/src/PdfParser/Type/PdfNumeric.php | 43 + .../fpdi/src/PdfParser/Type/PdfStream.php | 352 + .../fpdi/src/PdfParser/Type/PdfString.php | 202 + .../fpdi/src/PdfParser/Type/PdfToken.php | 43 + .../fpdi/src/PdfParser/Type/PdfType.php | 106 + .../src/PdfParser/Type/PdfTypeException.php | 24 + .../src/PdfReader/DataStructure/Rectangle.php | 179 + vendor/setasign/fpdi/src/PdfReader/Page.php | 422 + .../fpdi/src/PdfReader/PageBoundaries.php | 94 + .../setasign/fpdi/src/PdfReader/PdfReader.php | 243 + .../fpdi/src/PdfReader/PdfReaderException.php | 34 + vendor/setasign/fpdi/src/Tcpdf/Fpdi.php | 391 + vendor/setasign/fpdi/src/TcpdfFpdi.php | 23 + vendor/setasign/fpdi/src/Tfpdf/FpdfTpl.php | 23 + vendor/setasign/fpdi/src/Tfpdf/Fpdi.php | 32 + vendor/setasign/fpdi/src/autoload.php | 21 + .../ISSUE_TEMPLATE/incorrect-parsing.md | 25 + .../.github/pull_request_template.md | 14 + .../.github/workflows/coding-standards.yml | 37 + .../workflows/continuous-integration.yml | 229 + .../.github/workflows/performance.yml | 30 + vendor/smalot/pdfparser/.php-cs-fixer.php | 31 + vendor/smalot/pdfparser/CONTRIBUTING.md | 19 + vendor/smalot/pdfparser/LICENSE.txt | 165 + vendor/smalot/pdfparser/Makefile | 11 + vendor/smalot/pdfparser/README.md | 59 + vendor/smalot/pdfparser/alt_autoload.php-dist | 75 + vendor/smalot/pdfparser/composer.json | 37 + vendor/smalot/pdfparser/doc/CustomConfig.md | 80 + vendor/smalot/pdfparser/doc/Developer.md | 57 + vendor/smalot/pdfparser/doc/Usage.md | 248 + vendor/smalot/pdfparser/phpunit-windows.xml | 21 + .../pdfparser/src/Smalot/PdfParser/Config.php | 175 + .../src/Smalot/PdfParser/Document.php | 461 + .../src/Smalot/PdfParser/Element.php | 156 + .../Smalot/PdfParser/Element/ElementArray.php | 139 + .../PdfParser/Element/ElementBoolean.php | 75 + .../Smalot/PdfParser/Element/ElementDate.php | 139 + .../Smalot/PdfParser/Element/ElementHexa.php | 91 + .../PdfParser/Element/ElementMissing.php | 66 + .../Smalot/PdfParser/Element/ElementName.php | 69 + .../Smalot/PdfParser/Element/ElementNull.php | 71 + .../PdfParser/Element/ElementNumeric.php | 62 + .../PdfParser/Element/ElementString.php | 93 + .../PdfParser/Element/ElementStruct.php | 75 + .../Smalot/PdfParser/Element/ElementXRef.php | 98 + .../src/Smalot/PdfParser/Encoding.php | 162 + .../PdfParser/Encoding/AbstractEncoding.php | 8 + .../PdfParser/Encoding/EncodingLocator.php | 17 + .../PdfParser/Encoding/ISOLatin1Encoding.php | 76 + .../PdfParser/Encoding/ISOLatin9Encoding.php | 76 + .../PdfParser/Encoding/MacRomanEncoding.php | 80 + .../PdfParser/Encoding/PDFDocEncoding.php | 189 + .../PdfParser/Encoding/PostScriptGlyphs.php | 1099 + .../PdfParser/Encoding/StandardEncoding.php | 76 + .../PdfParser/Encoding/WinAnsiEncoding.php | 76 + .../PdfParser/Exception/EmptyPdfException.php | 12 + .../Exception/EncodingNotFoundException.php | 7 + .../InvalidDictionaryObjectException.php | 12 + .../Exception/MissingCatalogException.php | 12 + .../Exception/MissingPdfHeaderException.php | 12 + .../Exception/NotImplementedException.php | 12 + .../pdfparser/src/Smalot/PdfParser/Font.php | 709 + .../PdfParser/Font/FontCIDFontType0.php | 42 + .../PdfParser/Font/FontCIDFontType2.php | 42 + .../Smalot/PdfParser/Font/FontTrueType.php | 42 + .../src/Smalot/PdfParser/Font/FontType0.php | 42 + .../src/Smalot/PdfParser/Font/FontType1.php | 42 + .../src/Smalot/PdfParser/Font/FontType3.php | 42 + .../pdfparser/src/Smalot/PdfParser/Header.php | 194 + .../src/Smalot/PdfParser/PDFObject.php | 1193 + .../pdfparser/src/Smalot/PdfParser/Page.php | 1014 + .../pdfparser/src/Smalot/PdfParser/Pages.php | 131 + .../pdfparser/src/Smalot/PdfParser/Parser.php | 331 + .../Smalot/PdfParser/RawData/FilterHelper.php | 399 + .../PdfParser/RawData/RawDataParser.php | 979 + .../src/Smalot/PdfParser/XObject/Form.php | 51 + .../src/Smalot/PdfParser/XObject/Image.php | 47 + .../deprecation-contracts/CHANGELOG.md | 5 + vendor/symfony/deprecation-contracts/LICENSE | 19 + .../symfony/deprecation-contracts/README.md | 26 + .../deprecation-contracts/composer.json | 35 + .../deprecation-contracts/function.php | 27 + vendor/symfony/finder/CHANGELOG.md | 103 + .../symfony/finder/Comparator/Comparator.php | 62 + .../finder/Comparator/DateComparator.php | 50 + .../finder/Comparator/NumberComparator.php | 78 + .../Exception/AccessDeniedException.php | 19 + .../Exception/DirectoryNotFoundException.php | 19 + vendor/symfony/finder/Finder.php | 852 + vendor/symfony/finder/Gitignore.php | 91 + vendor/symfony/finder/Glob.php | 109 + .../finder/Iterator/CustomFilterIterator.php | 61 + .../Iterator/DateRangeFilterIterator.php | 58 + .../Iterator/DepthRangeFilterIterator.php | 48 + .../ExcludeDirectoryFilterIterator.php | 110 + .../Iterator/FileTypeFilterIterator.php | 51 + .../Iterator/FilecontentFilterIterator.php | 58 + .../Iterator/FilenameFilterIterator.php | 45 + .../symfony/finder/Iterator/LazyIterator.php | 32 + .../Iterator/MultiplePcreFilterIterator.php | 107 + .../finder/Iterator/PathFilterIterator.php | 56 + .../Iterator/RecursiveDirectoryIterator.php | 134 + .../Iterator/SizeRangeFilterIterator.php | 57 + .../finder/Iterator/SortableIterator.php | 103 + .../Iterator/VcsIgnoredFilterIterator.php | 173 + vendor/symfony/finder/LICENSE | 19 + vendor/symfony/finder/README.md | 14 + vendor/symfony/finder/SplFileInfo.php | 80 + vendor/symfony/finder/composer.json | 31 + vendor/symfony/polyfill-ctype/Ctype.php | 232 + vendor/symfony/polyfill-ctype/LICENSE | 19 + vendor/symfony/polyfill-ctype/README.md | 12 + vendor/symfony/polyfill-ctype/bootstrap.php | 50 + vendor/symfony/polyfill-ctype/bootstrap80.php | 46 + vendor/symfony/polyfill-ctype/composer.json | 38 + vendor/symfony/polyfill-mbstring/LICENSE | 19 + vendor/symfony/polyfill-mbstring/Mbstring.php | 1045 + vendor/symfony/polyfill-mbstring/README.md | 13 + .../Resources/unidata/caseFolding.php | 119 + .../Resources/unidata/lowerCase.php | 1397 + .../Resources/unidata/titleCaseRegexp.php | 5 + .../Resources/unidata/upperCase.php | 1489 + .../symfony/polyfill-mbstring/bootstrap.php | 172 + .../symfony/polyfill-mbstring/bootstrap80.php | 167 + .../symfony/polyfill-mbstring/composer.json | 39 + vendor/symfony/polyfill-php83/LICENSE | 19 + vendor/symfony/polyfill-php83/Php83.php | 197 + vendor/symfony/polyfill-php83/README.md | 22 + .../Resources/stubs/DateError.php | 16 + .../Resources/stubs/DateException.php | 16 + .../stubs/DateInvalidOperationException.php | 16 + .../stubs/DateInvalidTimeZoneException.php | 16 + .../DateMalformedIntervalStringException.php | 16 + .../DateMalformedPeriodStringException.php | 16 + .../stubs/DateMalformedStringException.php | 16 + .../Resources/stubs/DateObjectError.php | 16 + .../Resources/stubs/DateRangeError.php | 16 + .../Resources/stubs/Override.php | 20 + .../Resources/stubs/SQLite3Exception.php | 16 + vendor/symfony/polyfill-php83/bootstrap.php | 50 + vendor/symfony/polyfill-php83/bootstrap81.php | 22 + vendor/symfony/polyfill-php83/composer.json | 33 + vendor/symfony/process/CHANGELOG.md | 134 + .../process/Exception/ExceptionInterface.php | 21 + .../Exception/InvalidArgumentException.php | 21 + .../process/Exception/LogicException.php | 21 + .../Exception/ProcessFailedException.php | 53 + .../Exception/ProcessSignaledException.php | 38 + .../Exception/ProcessStartFailedException.php | 43 + .../Exception/ProcessTimedOutException.php | 60 + .../Exception/RunProcessFailedException.php | 25 + .../process/Exception/RuntimeException.php | 21 + vendor/symfony/process/ExecutableFinder.php | 103 + vendor/symfony/process/InputStream.php | 91 + vendor/symfony/process/LICENSE | 19 + .../process/Messenger/RunProcessContext.php | 33 + .../process/Messenger/RunProcessMessage.php | 47 + .../Messenger/RunProcessMessageHandler.php | 36 + .../symfony/process/PhpExecutableFinder.php | 98 + vendor/symfony/process/PhpProcess.php | 66 + vendor/symfony/process/PhpSubprocess.php | 164 + .../symfony/process/Pipes/AbstractPipes.php | 176 + .../symfony/process/Pipes/PipesInterface.php | 61 + vendor/symfony/process/Pipes/UnixPipes.php | 144 + vendor/symfony/process/Pipes/WindowsPipes.php | 185 + vendor/symfony/process/Process.php | 1662 + vendor/symfony/process/ProcessUtils.php | 64 + vendor/symfony/process/README.md | 13 + vendor/symfony/process/composer.json | 28 + .../translation-contracts/CHANGELOG.md | 5 + vendor/symfony/translation-contracts/LICENSE | 19 + .../LocaleAwareInterface.php | 29 + .../symfony/translation-contracts/README.md | 9 + .../Test/TranslatorTest.php | 398 + .../TranslatableInterface.php | 20 + .../TranslatorInterface.php | 68 + .../translation-contracts/TranslatorTrait.php | 225 + .../translation-contracts/composer.json | 37 + .../validator/Attribute/HasNamedArguments.php | 22 + vendor/symfony/validator/CHANGELOG.md | 521 + .../validator/Command/DebugCommand.php | 247 + vendor/symfony/validator/Constraint.php | 300 + .../symfony/validator/ConstraintValidator.php | 147 + .../validator/ConstraintValidatorFactory.php | 40 + .../ConstraintValidatorFactoryInterface.php | 25 + .../ConstraintValidatorInterface.php | 34 + .../symfony/validator/ConstraintViolation.php | 133 + .../ConstraintViolationInterface.php | 127 + .../validator/ConstraintViolationList.php | 151 + .../ConstraintViolationListInterface.php | 70 + .../Constraints/AbstractComparison.php | 71 + .../AbstractComparisonValidator.php | 104 + vendor/symfony/validator/Constraints/All.php | 56 + .../validator/Constraints/AllValidator.php | 46 + .../validator/Constraints/AtLeastOneOf.php | 71 + .../Constraints/AtLeastOneOfValidator.php | 70 + vendor/symfony/validator/Constraints/Bic.php | 115 + .../validator/Constraints/BicValidator.php | 164 + .../symfony/validator/Constraints/Blank.php | 48 + .../validator/Constraints/BlankValidator.php | 36 + .../validator/Constraints/Callback.php | 70 + .../Constraints/CallbackValidator.php | 58 + .../validator/Constraints/CardScheme.php | 86 + .../Constraints/CardSchemeValidator.php | 132 + .../symfony/validator/Constraints/Cascade.php | 59 + .../symfony/validator/Constraints/Charset.php | 43 + .../Constraints/CharsetValidator.php | 46 + .../symfony/validator/Constraints/Choice.php | 104 + .../validator/Constraints/ChoiceValidator.php | 108 + vendor/symfony/validator/Constraints/Cidr.php | 116 + .../validator/Constraints/CidrValidator.php | 89 + .../validator/Constraints/Collection.php | 115 + .../Constraints/CollectionValidator.php | 83 + .../validator/Constraints/Composite.php | 162 + .../validator/Constraints/Compound.php | 56 + .../Constraints/CompoundValidator.php | 35 + .../symfony/validator/Constraints/Count.php | 102 + .../validator/Constraints/CountValidator.php | 80 + .../symfony/validator/Constraints/Country.php | 66 + .../Constraints/CountryValidator.php | 50 + .../validator/Constraints/CssColor.php | 111 + .../Constraints/CssColorValidator.php | 83 + .../validator/Constraints/Currency.php | 57 + .../Constraints/CurrencyValidator.php | 51 + vendor/symfony/validator/Constraints/Date.php | 52 + .../validator/Constraints/DateTime.php | 71 + .../Constraints/DateTimeValidator.php | 80 + .../validator/Constraints/DateValidator.php | 72 + .../Constraints/DisableAutoMapping.php | 50 + .../validator/Constraints/DivisibleBy.php | 29 + .../Constraints/DivisibleByValidator.php | 56 + .../symfony/validator/Constraints/Email.php | 89 + .../validator/Constraints/EmailValidator.php | 104 + .../Constraints/EnableAutoMapping.php | 50 + .../symfony/validator/Constraints/EqualTo.php | 30 + .../Constraints/EqualToValidator.php | 31 + .../validator/Constraints/Existence.php | 32 + .../validator/Constraints/Expression.php | 103 + .../ExpressionLanguageProvider.php | 32 + .../Constraints/ExpressionSyntax.php | 59 + .../Constraints/ExpressionSyntaxValidator.php | 57 + .../Constraints/ExpressionValidator.php | 62 + vendor/symfony/validator/Constraints/File.php | 231 + .../validator/Constraints/FileValidator.php | 332 + .../validator/Constraints/GreaterThan.php | 30 + .../Constraints/GreaterThanOrEqual.php | 30 + .../GreaterThanOrEqualValidator.php | 31 + .../Constraints/GreaterThanValidator.php | 31 + .../validator/Constraints/GroupSequence.php | 85 + .../Constraints/GroupSequenceProvider.php | 28 + .../validator/Constraints/Hostname.php | 56 + .../Constraints/HostnameValidator.php | 69 + vendor/symfony/validator/Constraints/Iban.php | 60 + .../validator/Constraints/IbanValidator.php | 298 + .../validator/Constraints/IdenticalTo.php | 30 + .../Constraints/IdenticalToValidator.php | 31 + .../symfony/validator/Constraints/Image.php | 240 + .../validator/Constraints/ImageValidator.php | 290 + vendor/symfony/validator/Constraints/Ip.php | 142 + .../validator/Constraints/IpValidator.php | 95 + .../symfony/validator/Constraints/IsFalse.php | 48 + .../Constraints/IsFalseValidator.php | 38 + .../symfony/validator/Constraints/IsNull.php | 48 + .../validator/Constraints/IsNullValidator.php | 36 + .../symfony/validator/Constraints/IsTrue.php | 48 + .../validator/Constraints/IsTrueValidator.php | 38 + vendor/symfony/validator/Constraints/Isbn.php | 95 + .../validator/Constraints/IsbnValidator.php | 181 + vendor/symfony/validator/Constraints/Isin.php | 57 + .../validator/Constraints/IsinValidator.php | 78 + vendor/symfony/validator/Constraints/Issn.php | 73 + .../validator/Constraints/IssnValidator.php | 128 + vendor/symfony/validator/Constraints/Json.php | 48 + .../validator/Constraints/JsonValidator.php | 47 + .../validator/Constraints/Language.php | 64 + .../Constraints/LanguageValidator.php | 50 + .../symfony/validator/Constraints/Length.php | 131 + .../validator/Constraints/LengthValidator.php | 99 + .../validator/Constraints/LessThan.php | 30 + .../validator/Constraints/LessThanOrEqual.php | 30 + .../Constraints/LessThanOrEqualValidator.php | 31 + .../Constraints/LessThanValidator.php | 31 + .../symfony/validator/Constraints/Locale.php | 64 + .../validator/Constraints/LocaleValidator.php | 54 + vendor/symfony/validator/Constraints/Luhn.php | 58 + .../validator/Constraints/LuhnValidator.php | 89 + .../validator/Constraints/MacAddress.php | 85 + .../Constraints/MacAddressValidator.php | 118 + .../validator/Constraints/Negative.php | 25 + .../validator/Constraints/NegativeOrZero.php | 25 + .../Constraints/NoSuspiciousCharacters.php | 124 + .../NoSuspiciousCharactersValidator.php | 123 + .../validator/Constraints/NotBlank.php | 60 + .../Constraints/NotBlankValidator.php | 45 + .../Constraints/NotCompromisedPassword.php | 60 + .../NotCompromisedPasswordValidator.php | 108 + .../validator/Constraints/NotEqualTo.php | 30 + .../Constraints/NotEqualToValidator.php | 31 + .../validator/Constraints/NotIdenticalTo.php | 30 + .../Constraints/NotIdenticalToValidator.php | 31 + .../symfony/validator/Constraints/NotNull.php | 48 + .../Constraints/NotNullValidator.php | 36 + .../validator/Constraints/Optional.php | 19 + .../Constraints/PasswordStrength.php | 65 + .../Constraints/PasswordStrengthValidator.php | 91 + .../validator/Constraints/Positive.php | 25 + .../validator/Constraints/PositiveOrZero.php | 25 + .../symfony/validator/Constraints/Range.php | 112 + .../validator/Constraints/RangeValidator.php | 188 + .../symfony/validator/Constraints/Regex.php | 135 + .../validator/Constraints/RegexValidator.php | 55 + .../validator/Constraints/Required.php | 19 + .../validator/Constraints/Sequentially.php | 61 + .../Constraints/SequentiallyValidator.php | 41 + vendor/symfony/validator/Constraints/Time.php | 58 + .../validator/Constraints/TimeValidator.php | 69 + .../validator/Constraints/Timezone.php | 99 + .../Constraints/TimezoneValidator.php | 119 + .../validator/Constraints/Traverse.php | 54 + vendor/symfony/validator/Constraints/Type.php | 72 + .../validator/Constraints/TypeValidator.php | 96 + vendor/symfony/validator/Constraints/Ulid.php | 75 + .../validator/Constraints/UlidValidator.php | 97 + .../symfony/validator/Constraints/Unique.php | 72 + .../validator/Constraints/UniqueValidator.php | 89 + vendor/symfony/validator/Constraints/Url.php | 82 + .../validator/Constraints/UrlValidator.php | 99 + vendor/symfony/validator/Constraints/Uuid.php | 129 + .../validator/Constraints/UuidValidator.php | 257 + .../symfony/validator/Constraints/Valid.php | 60 + .../validator/Constraints/ValidValidator.php | 38 + vendor/symfony/validator/Constraints/Week.php | 70 + .../validator/Constraints/WeekValidator.php | 82 + vendor/symfony/validator/Constraints/When.php | 99 + .../validator/Constraints/WhenValidator.php | 61 + .../validator/Constraints/WordCount.php | 69 + .../Constraints/WordCountValidator.php | 65 + vendor/symfony/validator/Constraints/Yaml.php | 48 + .../validator/Constraints/YamlValidator.php | 63 + .../ZeroComparisonConstraintTrait.php | 47 + .../ContainerConstraintValidatorFactory.php | 59 + .../validator/Context/ExecutionContext.php | 275 + .../Context/ExecutionContextFactory.php | 41 + .../ExecutionContextFactoryInterface.php | 33 + .../Context/ExecutionContextInterface.php | 285 + .../DataCollector/ValidatorDataCollector.php | 93 + .../AddAutoMappingConfigurationPass.php | 84 + .../AddConstraintValidatorsPass.php | 47 + .../AddValidatorInitializersPass.php | 37 + .../Exception/BadMethodCallException.php | 21 + .../ConstraintDefinitionException.php | 16 + .../Exception/ExceptionInterface.php | 21 + .../Exception/GroupDefinitionException.php | 16 + .../Exception/InvalidArgumentException.php | 21 + .../Exception/InvalidOptionsException.php | 27 + .../validator/Exception/LogicException.php | 16 + .../validator/Exception/MappingException.php | 16 + .../Exception/MissingOptionsException.php | 27 + .../Exception/NoSuchMetadataException.php | 19 + .../Exception/OutOfBoundsException.php | 21 + .../validator/Exception/RuntimeException.php | 21 + .../Exception/UnexpectedTypeException.php | 20 + .../Exception/UnexpectedValueException.php | 30 + .../UnsupportedMetadataException.php | 19 + .../Exception/ValidationFailedException.php | 37 + .../Exception/ValidatorException.php | 16 + .../validator/GroupProviderInterface.php | 30 + .../GroupSequenceProviderInterface.php | 28 + vendor/symfony/validator/LICENSE | 19 + .../validator/Mapping/AutoMappingStrategy.php | 42 + .../validator/Mapping/CascadingStrategy.php | 52 + .../validator/Mapping/ClassMetadata.php | 515 + .../Mapping/ClassMetadataInterface.php | 92 + .../Factory/BlackHoleMetadataFactory.php | 37 + .../Factory/LazyLoadingMetadataFactory.php | 156 + .../Factory/MetadataFactoryInterface.php | 35 + .../validator/Mapping/GenericMetadata.php | 226 + .../validator/Mapping/GetterMetadata.php | 74 + .../Mapping/Loader/AbstractLoader.php | 115 + .../Mapping/Loader/AttributeLoader.php | 96 + .../Mapping/Loader/AutoMappingTrait.php | 34 + .../validator/Mapping/Loader/FileLoader.php | 48 + .../validator/Mapping/Loader/FilesLoader.php | 55 + .../validator/Mapping/Loader/LoaderChain.php | 61 + .../Mapping/Loader/LoaderInterface.php | 27 + .../Mapping/Loader/PropertyInfoLoader.php | 326 + .../Mapping/Loader/StaticMethodLoader.php | 61 + .../Mapping/Loader/XmlFileLoader.php | 236 + .../Mapping/Loader/XmlFilesLoader.php | 28 + .../Mapping/Loader/YamlFileLoader.php | 192 + .../Mapping/Loader/YamlFilesLoader.php | 28 + .../constraint-mapping-1.0.xsd | 163 + .../validator/Mapping/MemberMetadata.php | 160 + .../validator/Mapping/MetadataInterface.php | 62 + .../validator/Mapping/PropertyMetadata.php | 84 + .../Mapping/PropertyMetadataInterface.php | 41 + .../validator/Mapping/TraversalStrategy.php | 55 + .../validator/ObjectInitializerInterface.php | 26 + vendor/symfony/validator/README.md | 16 + .../Resources/translations/validators.af.xlf | 475 + .../Resources/translations/validators.ar.xlf | 475 + .../Resources/translations/validators.az.xlf | 475 + .../Resources/translations/validators.be.xlf | 475 + .../Resources/translations/validators.bg.xlf | 475 + .../Resources/translations/validators.bs.xlf | 475 + .../Resources/translations/validators.ca.xlf | 475 + .../Resources/translations/validators.cs.xlf | 475 + .../Resources/translations/validators.cy.xlf | 475 + .../Resources/translations/validators.da.xlf | 475 + .../Resources/translations/validators.de.xlf | 475 + .../Resources/translations/validators.el.xlf | 475 + .../Resources/translations/validators.en.xlf | 475 + .../Resources/translations/validators.es.xlf | 475 + .../Resources/translations/validators.et.xlf | 475 + .../Resources/translations/validators.eu.xlf | 475 + .../Resources/translations/validators.fa.xlf | 475 + .../Resources/translations/validators.fi.xlf | 475 + .../Resources/translations/validators.fr.xlf | 475 + .../Resources/translations/validators.gl.xlf | 475 + .../Resources/translations/validators.he.xlf | 475 + .../Resources/translations/validators.hr.xlf | 475 + .../Resources/translations/validators.hu.xlf | 475 + .../Resources/translations/validators.hy.xlf | 475 + .../Resources/translations/validators.id.xlf | 475 + .../Resources/translations/validators.it.xlf | 475 + .../Resources/translations/validators.ja.xlf | 475 + .../Resources/translations/validators.lb.xlf | 475 + .../Resources/translations/validators.lt.xlf | 475 + .../Resources/translations/validators.lv.xlf | 475 + .../Resources/translations/validators.mk.xlf | 475 + .../Resources/translations/validators.mn.xlf | 475 + .../Resources/translations/validators.my.xlf | 475 + .../Resources/translations/validators.nb.xlf | 475 + .../Resources/translations/validators.nl.xlf | 475 + .../Resources/translations/validators.nn.xlf | 475 + .../Resources/translations/validators.no.xlf | 475 + .../Resources/translations/validators.pl.xlf | 475 + .../Resources/translations/validators.pt.xlf | 475 + .../translations/validators.pt_BR.xlf | 475 + .../Resources/translations/validators.ro.xlf | 475 + .../Resources/translations/validators.ru.xlf | 475 + .../Resources/translations/validators.sk.xlf | 475 + .../Resources/translations/validators.sl.xlf | 475 + .../Resources/translations/validators.sq.xlf | 484 + .../translations/validators.sr_Cyrl.xlf | 475 + .../translations/validators.sr_Latn.xlf | 475 + .../Resources/translations/validators.sv.xlf | 475 + .../Resources/translations/validators.th.xlf | 475 + .../Resources/translations/validators.tl.xlf | 475 + .../Resources/translations/validators.tr.xlf | 475 + .../Resources/translations/validators.uk.xlf | 475 + .../Resources/translations/validators.ur.xlf | 475 + .../Resources/translations/validators.uz.xlf | 475 + .../Resources/translations/validators.vi.xlf | 475 + .../translations/validators.zh_CN.xlf | 475 + .../translations/validators.zh_TW.xlf | 475 + .../Test/CompoundConstraintTestCase.php | 129 + .../Test/ConstraintValidatorTestCase.php | 573 + .../symfony/validator/Util/PropertyPath.php | 51 + vendor/symfony/validator/Validation.php | 88 + .../ContextualValidatorInterface.php | 78 + .../validator/Validator/LazyProperty.php | 30 + .../RecursiveContextualValidator.php | 770 + .../Validator/RecursiveValidator.php | 99 + .../Validator/TraceableValidator.php | 120 + .../Validator/ValidatorInterface.php | 86 + vendor/symfony/validator/ValidatorBuilder.php | 379 + .../Violation/ConstraintViolationBuilder.php | 140 + .../ConstraintViolationBuilderInterface.php | 117 + vendor/symfony/validator/composer.json | 65 + vendor/symfony/yaml/CHANGELOG.md | 275 + vendor/symfony/yaml/Command/LintCommand.php | 277 + vendor/symfony/yaml/Dumper.php | 184 + vendor/symfony/yaml/Escaper.php | 97 + .../symfony/yaml/Exception/DumpException.php | 21 + .../yaml/Exception/ExceptionInterface.php | 21 + .../symfony/yaml/Exception/ParseException.php | 121 + .../yaml/Exception/RuntimeException.php | 21 + vendor/symfony/yaml/Inline.php | 854 + vendor/symfony/yaml/LICENSE | 19 + vendor/symfony/yaml/Parser.php | 1271 + vendor/symfony/yaml/README.md | 13 + vendor/symfony/yaml/Resources/bin/yaml-lint | 49 + vendor/symfony/yaml/Tag/TaggedValue.php | 35 + vendor/symfony/yaml/Unescaper.php | 108 + vendor/symfony/yaml/Yaml.php | 100 + vendor/symfony/yaml/composer.json | 39 + .../base/.github/workflows/ci.yml | 14 + .../.github/workflows/coding-standard.yml | 15 + vendor/zetacomponents/base/.gitignore | 4 + vendor/zetacomponents/base/CREDITS | 16 + vendor/zetacomponents/base/ChangeLog | 375 + vendor/zetacomponents/base/DESCRIPTION | 2 + vendor/zetacomponents/base/LICENSE.txt | 215 + vendor/zetacomponents/base/composer.json | 55 + .../base/design/class_diagram.png | Bin 0 -> 233811 bytes vendor/zetacomponents/base/design/design.txt | 9 + .../base/docs/repos/Me/myclass1.php | 9 + .../base/docs/repos/Me/myclass2.php | 9 + .../base/docs/repos/You/yourclass1.php | 9 + .../base/docs/repos/You/yourclass2.php | 9 + .../base/docs/repos/autoloads/my_autoload.php | 6 + .../docs/repos/autoloads/your_autoload.php | 6 + vendor/zetacomponents/base/docs/tutorial.txt | 240 + .../base/docs/tutorial_autoload.php | 20 + .../base/docs/tutorial_example_01.php | 9 + .../base/docs/tutorial_example_02.php | 11 + .../base/docs/tutorial_example_03.php | 6 + .../base/docs/tutorial_example_04.php | 42 + .../docs/tutorial_lazy_initialization.php | 38 + vendor/zetacomponents/base/phpcs.xml.dist | 16 + vendor/zetacomponents/base/phpunit.xml.dist | 13 + vendor/zetacomponents/base/review-1.5.txt | 23 + vendor/zetacomponents/base/src/base.php | 674 + .../zetacomponents/base/src/base_autoload.php | 63 + .../base/src/exceptions/autoload.php | 54 + .../double_class_repository_prefix.php | 50 + .../base/src/exceptions/exception.php | 59 + .../src/exceptions/extension_not_found.php | 54 + .../base/src/exceptions/file_exception.php | 41 + .../base/src/exceptions/file_io.php | 66 + .../base/src/exceptions/file_not_found.php | 59 + .../base/src/exceptions/file_permission.php | 79 + .../functionality_not_supported.php | 47 + .../exceptions/init_callback_configured.php | 47 + .../src/exceptions/invalid_callback_class.php | 47 + .../src/exceptions/invalid_parent_class.php | 45 + .../src/exceptions/property_not_found.php | 46 + .../src/exceptions/property_permission.php | 60 + .../base/src/exceptions/setting_not_found.php | 45 + .../base/src/exceptions/setting_value.php | 58 + .../base/src/exceptions/value.php | 59 + .../base/src/exceptions/whatever.php | 56 + .../zetacomponents/base/src/ezc_bootstrap.php | 47 + vendor/zetacomponents/base/src/features.php | 381 + vendor/zetacomponents/base/src/file.php | 511 + vendor/zetacomponents/base/src/init.php | 141 + .../interfaces/configuration_initializer.php | 48 + .../base/src/interfaces/exportable.php | 49 + .../base/src/interfaces/persistable.php | 56 + vendor/zetacomponents/base/src/metadata.php | 136 + .../zetacomponents/base/src/metadata/pear.php | 145 + .../base/src/metadata/tarball.php | 169 + vendor/zetacomponents/base/src/options.php | 257 + .../base/src/options/autoload.php | 91 + vendor/zetacomponents/base/src/struct.php | 58 + .../base/src/structs/file_find_context.php | 88 + .../base/src/structs/repository_directory.php | 99 + .../base/tests/autoload/autoload.php | 2 + .../base/tests/base_init_test.php | 98 + .../base/tests/base_options_test.php | 162 + .../zetacomponents/base/tests/base_test.php | 545 + .../zetacomponents/base/tests/bootstrap.php | 26 + .../base/tests/check_tarball.php | 14 + .../extra_repository/Translation/test.php | 5 + .../autoload/translation_autoload.php | 5 + .../base/tests/features_unix_test.php | 182 + .../base/tests/features_windows_test.php | 162 + .../file_calculate_relative_path_test.php | 109 + .../base/tests/file_copy_recursive_test.php | 270 + .../base/tests/file_find_recursive_test.php | 166 + .../base/tests/file_is_absolute_path.php | 247 + .../base/tests/file_remove_recursive_test.php | 176 + .../base/tests/init/base_init_callback.php | 40 + .../base/tests/init/base_init_class.php | 48 + .../base/tests/issue15896/ab.php | 7 + .../tests/issue15896/autoload/autoload.php | 7 + .../base/tests/metadata_pear_test.php | 98 + .../zetacomponents/base/tests/struct_test.php | 70 + .../base/tests/test_options.php | 18 + .../TestClasses/base_test_class.php | 4 + .../base_test_class_number_two.php | 4 + .../TestClasses/base_test_long_class.php | 4 + .../autoload_files/basetest_autoload.php | 7 + .../autoload_files/basetest_long_autoload.php | 5 + .../autoload_files/objet_autoload.php | 5 + .../tests/test_repository/object/object.php | 5 + .../mail/.github/workflows/ci.yml | 55 + vendor/zetacomponents/mail/.gitignore | 4 + vendor/zetacomponents/mail/CREDITS | 32 + vendor/zetacomponents/mail/ChangeLog | 707 + vendor/zetacomponents/mail/DESCRIPTION | 4 + vendor/zetacomponents/mail/LICENSE.txt | 215 + vendor/zetacomponents/mail/composer.json | 60 + .../mail/design/class_diagram.png | Bin 0 -> 1142780 bytes vendor/zetacomponents/mail/design/design.txt | 121 + vendor/zetacomponents/mail/design/mail.png | Bin 0 -> 24828 bytes vendor/zetacomponents/mail/design/mail.xml | 3649 ++ .../zetacomponents/mail/design/transport.png | Bin 0 -> 19431 bytes .../mail/docs/display-example.txt | 18 + .../docs/display-example/display-example.php | 186 + .../mail/docs/mail-listing-example.txt | 105 + .../mail/docs/mail-listing-example/app.ini | 14 + .../mail-listing-example/app/paging_links.php | 85 + .../mail/docs/mail-listing-example/mail.php | 133 + .../templates/mail_listing.ezt | 62 + vendor/zetacomponents/mail/docs/rfcs.txt | 77 + vendor/zetacomponents/mail/docs/tutorial.txt | 711 + .../mail/docs/tutorial/test-mail.mail | 176 + .../mail/docs/tutorial/tutorial_autoload.php | 20 + .../mail/docs/tutorial/tutorial_charset.php | 34 + .../mail/docs/tutorial/tutorial_composer.php | 28 + .../tutorial_composer_attachments.php | 38 + .../docs/tutorial/tutorial_extend_create.php | 19 + .../docs/tutorial/tutorial_extend_use.php | 30 + .../docs/tutorial/tutorial_html_display.php | 64 + .../mail/docs/tutorial/tutorial_imap.php | 75 + .../docs/tutorial/tutorial_imap_extra.php | 46 + .../mail/docs/tutorial/tutorial_imap_ssl.php | 17 + .../mail/docs/tutorial/tutorial_imap_uids.php | 20 + .../tutorial/tutorial_mail_attachments.php | 31 + .../docs/tutorial/tutorial_mail_simple.php | 25 + .../mail/docs/tutorial/tutorial_mbox.php | 16 + .../mail/docs/tutorial/tutorial_parse.php | 29 + .../mail/docs/tutorial/tutorial_pop3.php | 47 + .../docs/tutorial/tutorial_pop3_options.php | 17 + .../mail/docs/tutorial/tutorial_smtp_auth.php | 20 + .../mail/docs/tutorial/tutorial_smtp_ssl.php | 39 + .../mail/docs/tutorial/tutorial_tools.php | 50 + vendor/zetacomponents/mail/phpunit.xml.dist | 14 + vendor/zetacomponents/mail/review-1.4.txt | 64 + vendor/zetacomponents/mail/review-1.5.txt | 91 + vendor/zetacomponents/mail/review-1.7.txt | 19 + vendor/zetacomponents/mail/review.txt | 58 + vendor/zetacomponents/mail/src/composer.php | 563 + .../mail/src/exceptions/invalid_limit.php | 47 + .../mail/src/exceptions/mail_exception.php | 45 + .../mail/src/exceptions/no_such_message.php | 46 + .../src/exceptions/offset_out_of_range.php | 47 + .../src/exceptions/transport_exception.php | 46 + .../exceptions/transport_smtp_exception.php | 50 + .../mail/src/interfaces/part.php | 474 + .../mail/src/interfaces/transport.php | 44 + .../mail/src/internal/charset_convert.php | 145 + .../mail/src/internal/header_folder.php | 162 + vendor/zetacomponents/mail/src/mail.php | 589 + .../zetacomponents/mail/src/mail_autoload.php | 98 + .../mail/src/options/composer_options.php | 99 + .../mail/src/options/imap_options.php | 107 + .../mail/src/options/imap_set_options.php | 83 + .../mail/src/options/mail_options.php | 100 + .../mail/src/options/parser_options.php | 165 + .../mail/src/options/pop3_options.php | 97 + .../mail/src/options/smtp_options.php | 139 + .../mail/src/options/transport_options.php | 94 + .../mail/src/parser/headers_holder.php | 160 + .../mail/src/parser/interfaces/parser_set.php | 65 + .../src/parser/interfaces/part_parser.php | 305 + .../zetacomponents/mail/src/parser/parser.php | 308 + .../parser/parts/delivery_status_parser.php | 155 + .../mail/src/parser/parts/file_parser.php | 342 + .../parts/multipart_alternative_parser.php | 84 + .../parser/parts/multipart_digest_parser.php | 84 + .../parser/parts/multipart_mixed_parser.php | 83 + .../src/parser/parts/multipart_parser.php | 246 + .../parser/parts/multipart_related_parser.php | 94 + .../parser/parts/multipart_report_parser.php | 110 + .../src/parser/parts/rfc822_digest_parser.php | 98 + .../mail/src/parser/parts/rfc822_parser.php | 181 + .../mail/src/parser/parts/text_parser.php | 135 + .../src/parser/rfc2231_implementation.php | 208 + .../mail/src/parser/shutdown_handler.php | 133 + .../mail/src/parts/delivery_status.php | 194 + vendor/zetacomponents/mail/src/parts/file.php | 251 + .../mail/src/parts/fileparts/disk_file.php | 156 + .../mail/src/parts/fileparts/stream_file.php | 145 + .../mail/src/parts/fileparts/virtual_file.php | 160 + .../mail/src/parts/multipart.php | 212 + .../multiparts/multipart_alternative.php | 100 + .../src/parts/multiparts/multipart_digest.php | 114 + .../src/parts/multiparts/multipart_mixed.php | 92 + .../parts/multiparts/multipart_related.php | 198 + .../src/parts/multiparts/multipart_report.php | 241 + .../mail/src/parts/rfc822_digest.php | 142 + vendor/zetacomponents/mail/src/parts/text.php | 206 + .../structs/content_disposition_header.php | 209 + .../mail/src/structs/mail_address.php | 107 + .../mail/src/structs/walk_context.php | 205 + vendor/zetacomponents/mail/src/tools.php | 836 + .../mail/src/transports/file/file_set.php | 202 + .../mail/src/transports/imap/imap_set.php | 398 + .../src/transports/imap/imap_transport.php | 2848 ++ .../mail/src/transports/mbox/mbox_set.php | 179 + .../src/transports/mbox/mbox_transport.php | 211 + .../mail/src/transports/mta/mta_transport.php | 87 + .../mail/src/transports/mta/transport_mta.php | 37 + .../mail/src/transports/pop3/pop3_set.php | 205 + .../src/transports/pop3/pop3_transport.php | 870 + .../src/transports/smtp/smtp_transport.php | 1373 + .../src/transports/smtp/transport_smtp.php | 37 + .../src/transports/storage/storage_set.php | 224 + .../src/transports/transport_connection.php | 273 + .../mail/src/transports/variable/var_set.php | 108 + .../zetacomponents/mail/tests/bootstrap.php | 14 + .../mail/tests/composer_test.php | 1026 + .../mail/tests/header_folder_test.php | 102 + .../mail/tests/interfaces/part_test.php | 245 + .../zetacomponents/mail/tests/mail_test.php | 542 + .../tests/options/classes/custom_classes.php | 5 + .../mail/tests/options/mail_options_test.php | 78 + .../tests/options/parser_options_test.php | 150 + .../tests/options/transport_options_test.php | 99 + .../parser/data/classes/custom_classes.php | 117 + .../data/drafts/postponed-msgs-pine.mbox | 40 + .../tests/parser/data/gmail/html_mail.mail | 51 + .../data/gmail/mail_with_attachment.mail | 856 + .../gmail/mail_with_norwegian_characters.mail | 51 + ...imple_mail_with_text_subject_and_body.mail | 39 + .../data/hotmail/mail_with_attachment.mail | 1055 + .../mail_with_norwegian_characters.mail | 38 + ...imple_mail_with_text_subject_and_body.mail | 37 + .../tests/parser/data/kmail/html_mail.mail | 53 + .../data/kmail/mail_with_attachment.mail | 846 + .../parser/data/kmail/mail_with_digest.mail | 894 + .../kmail/mail_with_iso-8859-1_encoding.mail | 40 + ...imple_mail_with_text_subject_and_body.mail | 39 + .../data/mail.app/html_mail_with_image.mail | 874 + .../data/opera/mail_with_attachment.mail | 984 + .../opera/mail_with_norwegian_characters.mail | 36 + ...imple_mail_with_text_subject_and_body.mail | 35 + .../data/pine/mail_with_attachment.mail | 1051 + .../pine/mail_with_norwegian_characters.mail | 41 + ...imple_mail_with_text_subject_and_body.mail | 33 + .../data/pine/three_message_digest.mail | 2131 + .../parser/data/pine/uppercase-charset.mail | 47 + ...hment_only_horizontal_tab_in_filename.mail | 55 + .../attachment_with_long_filename.mail | 55 + .../data/various/attachment_with_slash.mail | 55 + .../various/attachment_without_filename.mail | 55 + .../data/various/default-disposition-header | 57 + .../various/mail-with-broken-charset-header | 30 + .../parser/data/various/multipart-report | 104 + .../multipart-report-multiple-deliveries | 48 + .../data/various/multiple-received-headers | 104 + .../parser/data/various/multiple_recipients | 41 + .../parser/data/various/quoted-printable-mac | 64 + .../parser/data/various/test-RFC2184-header | 847 + .../tests/parser/data/various/test-bounced | 1507 + .../parser/data/various/test-broken-iconv-1 | 64 + .../parser/data/various/test-broken-iconv-2 | 24 + .../various/test-broken-mime-encoded-string | 49 + .../various/test-broken-multipart-related | 792 + .../parser/data/various/test-digest-in-digest | 413 + .../data/various/test-fetch-parts-empty-body | 19 + .../data/various/test-filename-with-space | 83 + .../parser/data/various/test-header-no-space | 20 + .../parser/data/various/test-header-with-tab | 20 + .../data/various/test-html-inline-images | 141 + .../various/test-html-text-and-attachment | 140 + ...t-and-attachment-weird-content-type-header | 144 + .../test-html-text-and-text-attachment | 64 + .../test-lowercase-hex-chars-in-mime-encoding | 48 + .../tests/parser/data/various/test-mbox-PGP | 100 + .../parser/data/various/test-mbox-russian | 41 + .../data/various/test-mime-header-x-unknown | 54 + .../data/various/test-mime-subject-broken | 8 + .../parser/data/various/test-soft-lineending | 70 + .../parser/data/various/test-text-lineendings | 232 + .../data/various/test-unrecognized-mime | 26 + .../data/various/test-unrecognized-subtype | 26 + .../parser/data/various/test-utf8-in-filename | 68 + .../mail/tests/parser/headers_holder_test.php | 87 + .../mail/tests/parser/parser_test.php | 1979 + .../parser/parts/delivery_status_parser.php | 48 + .../parser/parts/multipart_mixed_test.php | 100 + .../parser/rfc2231_implementation_test.php | 163 + .../mail/tests/parser/walk_context_test.php | 145 + ...zcMailFilePartTest_testGenerateBase64.data | 797 + ...MailMultiPartTest_customNoMimeMessage.data | 20 + .../ezcMailMultiPartTest_testGenerate.data | 21 + ...ilMultipartDigestTest_multiple_digest.data | 30 + ...ezcMailMultipartDigestTest_singleMail.data | 12 + .../ezcMailRfc822DigestTest_testDefault.data | 5 + .../tests/parts/data/fly with whitespace.jpg | Bin 0 -> 45177 bytes .../mail/tests/parts/data/fly.jpg | Bin 0 -> 45177 bytes .../mail/tests/parts/file_part_test.php | 80 + .../tests/parts/multipart_digest_test.php | 99 + .../mail/tests/parts/multipart_test.php | 268 + .../mail/tests/parts/rfc822_digest_test.php | 81 + .../tests/parts/stream_file_part_test.php | 60 + .../mail/tests/parts/text_part_test.php | 135 + .../tests/parts/virtual_file_part_test.php | 60 + .../tests/tools/data/addresses_correct.txt | 165 + .../tests/tools/data/addresses_correct_mx.txt | 11 + .../tests/tools/data/addresses_incorrect.txt | 213 + .../tools/data/addresses_incorrect_mx.txt | 14 + .../zetacomponents/mail/tests/tools_test.php | 510 + .../transports/data/empty-no-header.mbox | 0 .../mail/tests/transports/data/empty.mbox | 12 + .../transports/data/one-mail-no-header.mbox | 66 + .../mail/tests/transports/data/one-mail.mbox | 78 + .../tests/transports/data/parse-script.php | 15 + .../mail/tests/transports/data/shark | 76 + .../mail/tests/transports/data/shark_append | 245 + .../transports/data/shark_wrong_body_ending | 74 + .../mail/tests/transports/data/tab.mbox | 50 + .../mail/tests/transports/data/test-mbox | 345 + .../mail/tests/transports/data/test-variable | 34 + .../mail/tests/transports/data/testlimit-mbox | 628 + .../transports/data/unknown-charsets.mbox | 46 + .../tests/transports/transport_file_test.php | 117 + .../tests/transports/transport_imap_test.php | 2425 + .../transports/transport_imap_uid_test.php | 858 + .../tests/transports/transport_mbox_test.php | 266 + .../tests/transports/transport_mta_test.php | 144 + .../tests/transports/transport_pop3_test.php | 810 + .../transports/transport_smtp_auth_test.php | 502 + .../tests/transports/transport_smtp_test.php | 802 + .../transports/transport_storage_test.php | 261 + .../transports/transport_variable_test.php | 100 + .../wrappers/imap_custom_wrapper.php | 102 + .../transports/wrappers/imap_wrapper.php | 129 + .../transports/wrappers/pop3_wrapper.php | 83 + .../transports/wrappers/smtp_wrapper.php | 141 + .../mail/tests/tutorial_examples.php | 116 + 2720 files changed, 542245 insertions(+) create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 include/database/otp_send_secret_sql.class.php create mode 100644 include/lib/otp.class.php create mode 100644 include/otp-link.php create mode 100644 vendor/autoload.php create mode 100644 vendor/bacon/bacon-qr-code/LICENSE create mode 100644 vendor/bacon/bacon-qr-code/README.md create mode 100644 vendor/bacon/bacon-qr-code/composer.json create mode 100644 vendor/bacon/bacon-qr-code/src/Common/BitArray.php create mode 100644 vendor/bacon/bacon-qr-code/src/Common/BitMatrix.php create mode 100644 vendor/bacon/bacon-qr-code/src/Common/BitUtils.php create mode 100644 vendor/bacon/bacon-qr-code/src/Common/CharacterSetEci.php create mode 100644 vendor/bacon/bacon-qr-code/src/Common/EcBlock.php create mode 100644 vendor/bacon/bacon-qr-code/src/Common/EcBlocks.php create mode 100644 vendor/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.php create mode 100644 vendor/bacon/bacon-qr-code/src/Common/FormatInformation.php create mode 100644 vendor/bacon/bacon-qr-code/src/Common/Mode.php create mode 100644 vendor/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.php create mode 100644 vendor/bacon/bacon-qr-code/src/Common/Version.php create mode 100644 vendor/bacon/bacon-qr-code/src/Encoder/BlockPair.php create mode 100644 vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php create mode 100644 vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php create mode 100644 vendor/bacon/bacon-qr-code/src/Encoder/MaskUtil.php create mode 100644 vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php create mode 100644 vendor/bacon/bacon-qr-code/src/Encoder/QrCode.php create mode 100644 vendor/bacon/bacon-qr-code/src/Exception/ExceptionInterface.php create mode 100644 vendor/bacon/bacon-qr-code/src/Exception/InvalidArgumentException.php create mode 100644 vendor/bacon/bacon-qr-code/src/Exception/OutOfBoundsException.php create mode 100644 vendor/bacon/bacon-qr-code/src/Exception/RuntimeException.php create mode 100644 vendor/bacon/bacon-qr-code/src/Exception/UnexpectedValueException.php create mode 100644 vendor/bacon/bacon-qr-code/src/Exception/WriterException.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Color/Alpha.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Color/Gray.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Color/Rgb.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Eye/ModuleEye.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Eye/PointyEye.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/GDLibRenderer.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Image/ImagickImageBackEnd.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/ImageRenderer.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Module/RoundnessModule.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Path/Close.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Path/Curve.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Path/Line.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/Path/Path.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/RendererInterface.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/EyeFill.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.php create mode 100644 vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/RendererStyle.php create mode 100644 vendor/bacon/bacon-qr-code/src/Writer.php create mode 100755 vendor/bin/yaml-lint create mode 100644 vendor/chillerlan/php-authenticator/LICENSE create mode 100644 vendor/chillerlan/php-authenticator/README.md create mode 100644 vendor/chillerlan/php-authenticator/composer.json create mode 100644 vendor/chillerlan/php-authenticator/src/Authenticator.php create mode 100644 vendor/chillerlan/php-authenticator/src/AuthenticatorOptions.php create mode 100644 vendor/chillerlan/php-authenticator/src/AuthenticatorOptionsTrait.php create mode 100644 vendor/chillerlan/php-authenticator/src/Authenticators/AuthenticatorAbstract.php create mode 100644 vendor/chillerlan/php-authenticator/src/Authenticators/AuthenticatorInterface.php create mode 100644 vendor/chillerlan/php-authenticator/src/Authenticators/HOTP.php create mode 100644 vendor/chillerlan/php-authenticator/src/Authenticators/SteamGuard.php create mode 100644 vendor/chillerlan/php-authenticator/src/Authenticators/TOTP.php create mode 100644 vendor/chillerlan/php-authenticator/src/Common/Base32.php create mode 100644 vendor/chillerlan/php-authenticator/src/Common/Base64.php create mode 100644 vendor/chillerlan/php-authenticator/src/Common/Hex.php create mode 100644 vendor/chillerlan/php-settings-container/LICENSE create mode 100644 vendor/chillerlan/php-settings-container/README.md create mode 100644 vendor/chillerlan/php-settings-container/composer.json create mode 100644 vendor/chillerlan/php-settings-container/rules-magic-access.neon create mode 100644 vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php create mode 100644 vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php create mode 100644 vendor/composer/ClassLoader.php create mode 100644 vendor/composer/InstalledVersions.php create mode 100644 vendor/composer/LICENSE create mode 100644 vendor/composer/autoload_classmap.php create mode 100644 vendor/composer/autoload_files.php create mode 100644 vendor/composer/autoload_namespaces.php create mode 100644 vendor/composer/autoload_psr4.php create mode 100644 vendor/composer/autoload_real.php create mode 100644 vendor/composer/autoload_static.php create mode 100644 vendor/composer/installed.json create mode 100644 vendor/composer/installed.php create mode 100644 vendor/composer/platform_check.php create mode 100644 vendor/dasprid/enum/LICENSE create mode 100644 vendor/dasprid/enum/README.md create mode 100644 vendor/dasprid/enum/composer.json create mode 100644 vendor/dasprid/enum/src/AbstractEnum.php create mode 100644 vendor/dasprid/enum/src/EnumMap.php create mode 100644 vendor/dasprid/enum/src/Exception/CloneNotSupportedException.php create mode 100644 vendor/dasprid/enum/src/Exception/ExceptionInterface.php create mode 100644 vendor/dasprid/enum/src/Exception/ExpectationException.php create mode 100644 vendor/dasprid/enum/src/Exception/IllegalArgumentException.php create mode 100644 vendor/dasprid/enum/src/Exception/MismatchException.php create mode 100644 vendor/dasprid/enum/src/Exception/SerializeNotSupportedException.php create mode 100644 vendor/dasprid/enum/src/Exception/UnserializeNotSupportedException.php create mode 100644 vendor/dasprid/enum/src/NullValue.php create mode 100644 vendor/doctrine/instantiator/.doctrine-project.json create mode 100644 vendor/doctrine/instantiator/CONTRIBUTING.md create mode 100644 vendor/doctrine/instantiator/LICENSE create mode 100644 vendor/doctrine/instantiator/README.md create mode 100644 vendor/doctrine/instantiator/composer.json create mode 100644 vendor/doctrine/instantiator/docs/en/index.rst create mode 100644 vendor/doctrine/instantiator/docs/en/sidebar.rst create mode 100644 vendor/doctrine/instantiator/psalm.xml create mode 100644 vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php create mode 100644 vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php create mode 100644 vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php create mode 100644 vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php create mode 100644 vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php create mode 100644 vendor/doctrine/lexer/LICENSE create mode 100644 vendor/doctrine/lexer/README.md create mode 100644 vendor/doctrine/lexer/UPGRADE.md create mode 100644 vendor/doctrine/lexer/composer.json create mode 100644 vendor/doctrine/lexer/src/AbstractLexer.php create mode 100644 vendor/doctrine/lexer/src/Token.php create mode 100644 vendor/endroid/qr-code/LICENSE create mode 100644 vendor/endroid/qr-code/README.md create mode 100644 vendor/endroid/qr-code/assets/open_sans.ttf create mode 100644 vendor/endroid/qr-code/composer.json create mode 100644 vendor/endroid/qr-code/src/Bacon/ErrorCorrectionLevelConverter.php create mode 100644 vendor/endroid/qr-code/src/Bacon/MatrixFactory.php create mode 100644 vendor/endroid/qr-code/src/Builder/Builder.php create mode 100644 vendor/endroid/qr-code/src/Builder/BuilderInterface.php create mode 100644 vendor/endroid/qr-code/src/Builder/BuilderRegistry.php create mode 100644 vendor/endroid/qr-code/src/Builder/BuilderRegistryInterface.php create mode 100644 vendor/endroid/qr-code/src/Color/Color.php create mode 100644 vendor/endroid/qr-code/src/Color/ColorInterface.php create mode 100644 vendor/endroid/qr-code/src/Encoding/Encoding.php create mode 100644 vendor/endroid/qr-code/src/Encoding/EncodingInterface.php create mode 100644 vendor/endroid/qr-code/src/ErrorCorrectionLevel.php create mode 100644 vendor/endroid/qr-code/src/Exception/BlockSizeTooSmallException.php create mode 100644 vendor/endroid/qr-code/src/Exception/ValidationException.php create mode 100644 vendor/endroid/qr-code/src/ImageData/LabelImageData.php create mode 100644 vendor/endroid/qr-code/src/ImageData/LogoImageData.php create mode 100644 vendor/endroid/qr-code/src/Label/Font/Font.php create mode 100644 vendor/endroid/qr-code/src/Label/Font/FontInterface.php create mode 100644 vendor/endroid/qr-code/src/Label/Font/OpenSans.php create mode 100644 vendor/endroid/qr-code/src/Label/Label.php create mode 100644 vendor/endroid/qr-code/src/Label/LabelAlignment.php create mode 100644 vendor/endroid/qr-code/src/Label/LabelInterface.php create mode 100644 vendor/endroid/qr-code/src/Label/Margin/Margin.php create mode 100644 vendor/endroid/qr-code/src/Label/Margin/MarginInterface.php create mode 100644 vendor/endroid/qr-code/src/Logo/Logo.php create mode 100644 vendor/endroid/qr-code/src/Logo/LogoInterface.php create mode 100644 vendor/endroid/qr-code/src/Matrix/Matrix.php create mode 100644 vendor/endroid/qr-code/src/Matrix/MatrixFactoryInterface.php create mode 100644 vendor/endroid/qr-code/src/Matrix/MatrixInterface.php create mode 100644 vendor/endroid/qr-code/src/QrCode.php create mode 100644 vendor/endroid/qr-code/src/QrCodeInterface.php create mode 100644 vendor/endroid/qr-code/src/RoundBlockSizeMode.php create mode 100644 vendor/endroid/qr-code/src/Writer/AbstractGdWriter.php create mode 100644 vendor/endroid/qr-code/src/Writer/BinaryWriter.php create mode 100644 vendor/endroid/qr-code/src/Writer/ConsoleWriter.php create mode 100644 vendor/endroid/qr-code/src/Writer/DebugWriter.php create mode 100644 vendor/endroid/qr-code/src/Writer/EpsWriter.php create mode 100644 vendor/endroid/qr-code/src/Writer/GifWriter.php create mode 100644 vendor/endroid/qr-code/src/Writer/PdfWriter.php create mode 100644 vendor/endroid/qr-code/src/Writer/PngWriter.php create mode 100644 vendor/endroid/qr-code/src/Writer/Result/AbstractResult.php create mode 100644 vendor/endroid/qr-code/src/Writer/Result/BinaryResult.php create mode 100644 vendor/endroid/qr-code/src/Writer/Result/ConsoleResult.php create mode 100644 vendor/endroid/qr-code/src/Writer/Result/DebugResult.php create mode 100644 vendor/endroid/qr-code/src/Writer/Result/EpsResult.php create mode 100644 vendor/endroid/qr-code/src/Writer/Result/GdResult.php create mode 100644 vendor/endroid/qr-code/src/Writer/Result/GifResult.php create mode 100644 vendor/endroid/qr-code/src/Writer/Result/PdfResult.php create mode 100644 vendor/endroid/qr-code/src/Writer/Result/PngResult.php create mode 100644 vendor/endroid/qr-code/src/Writer/Result/ResultInterface.php create mode 100644 vendor/endroid/qr-code/src/Writer/Result/SvgResult.php create mode 100644 vendor/endroid/qr-code/src/Writer/Result/WebPResult.php create mode 100644 vendor/endroid/qr-code/src/Writer/SvgWriter.php create mode 100644 vendor/endroid/qr-code/src/Writer/ValidatingWriterInterface.php create mode 100644 vendor/endroid/qr-code/src/Writer/WebPWriter.php create mode 100644 vendor/endroid/qr-code/src/Writer/WriterInterface.php create mode 100755 vendor/goetas-webservices/xsd2php-runtime/.gitignore create mode 100644 vendor/goetas-webservices/xsd2php-runtime/.scrutinizer.yml create mode 100644 vendor/goetas-webservices/xsd2php-runtime/.travis.yml create mode 100644 vendor/goetas-webservices/xsd2php-runtime/LICENSE create mode 100644 vendor/goetas-webservices/xsd2php-runtime/README.md create mode 100644 vendor/goetas-webservices/xsd2php-runtime/composer.json create mode 100644 vendor/goetas-webservices/xsd2php-runtime/phpunit.xml.dist create mode 100644 vendor/goetas-webservices/xsd2php-runtime/src/Jms/Handler/BaseTypesHandler.php create mode 100644 vendor/goetas-webservices/xsd2php-runtime/src/Jms/Handler/XmlSchemaDateHandler.php create mode 100644 vendor/goetas-webservices/xsd2php-runtime/tests/XmlSchemaDateHandlerDeserializationTest.php create mode 100644 vendor/goetas-webservices/xsd2php-runtime/tests/XmlSchemaDateHandlerSerializationTest.php create mode 100644 vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/bug_report.md create mode 100644 vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/config.yml create mode 100644 vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/feature.md create mode 100644 vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/question.md create mode 100644 vendor/horstoeko/mimedb/.github/dependabot.yml create mode 100644 vendor/horstoeko/mimedb/.github/pull_request_template.md create mode 100644 vendor/horstoeko/mimedb/.github/workflows/build.ci.yml create mode 100644 vendor/horstoeko/mimedb/.github/workflows/build.doc.yml create mode 100644 vendor/horstoeko/mimedb/.github/workflows/build.php73.ant.yml create mode 100644 vendor/horstoeko/mimedb/.github/workflows/build.php74.ant.yml create mode 100644 vendor/horstoeko/mimedb/.github/workflows/build.php80.ant.yml create mode 100644 vendor/horstoeko/mimedb/.github/workflows/build.php81.ant.yml create mode 100644 vendor/horstoeko/mimedb/.github/workflows/build.php81.release.ant.yml create mode 100644 vendor/horstoeko/mimedb/.github/workflows/build.php82.ant.yml create mode 100644 vendor/horstoeko/mimedb/.github/workflows/build.php83.ant.yml create mode 100644 vendor/horstoeko/mimedb/.github/workflows/build.release.yml create mode 100644 vendor/horstoeko/mimedb/.github/workflows/maintain-issues-stale.yml create mode 100644 vendor/horstoeko/mimedb/.gitignore create mode 100644 vendor/horstoeko/mimedb/CODE_OF_CONDUCT.md create mode 100644 vendor/horstoeko/mimedb/CONTRIBUTING.md create mode 100644 vendor/horstoeko/mimedb/LICENSE create mode 100644 vendor/horstoeko/mimedb/README.md create mode 100644 vendor/horstoeko/mimedb/SECURITY.md create mode 100644 vendor/horstoeko/mimedb/build.ant.xml create mode 100644 vendor/horstoeko/mimedb/build.xml create mode 100644 vendor/horstoeko/mimedb/build/phpcsrules.xml create mode 100644 vendor/horstoeko/mimedb/build/phpcsrules_psr1.xml create mode 100644 vendor/horstoeko/mimedb/build/phpcsrules_psr12.xml create mode 100644 vendor/horstoeko/mimedb/build/phpcsrules_psr2.xml create mode 100644 vendor/horstoeko/mimedb/build/phpcsrules_squiz.xml create mode 100644 vendor/horstoeko/mimedb/build/phpdoc.xml create mode 100644 vendor/horstoeko/mimedb/build/phpmd.xml create mode 100644 vendor/horstoeko/mimedb/build/phpstan.neon create mode 100644 vendor/horstoeko/mimedb/build/phpunit.xml create mode 100644 vendor/horstoeko/mimedb/composer.json create mode 100644 vendor/horstoeko/mimedb/examples/FindExtensionByMimeType.php create mode 100644 vendor/horstoeko/mimedb/examples/FindMimeTypeByExtension.php create mode 100644 vendor/horstoeko/mimedb/src/MimeDb.php create mode 100644 vendor/horstoeko/mimedb/src/assets/mimetypes.json create mode 100644 vendor/horstoeko/mimedb/tests/TestCase.php create mode 100644 vendor/horstoeko/mimedb/tests/testcases/BasicTest.php create mode 100644 vendor/horstoeko/mimedb/tests/testcases/MimeDbTest.php create mode 100644 vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/bug_report.md create mode 100644 vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/config.yml create mode 100644 vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/feature.md create mode 100644 vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/question.md create mode 100644 vendor/horstoeko/stringmanagement/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md create mode 100644 vendor/horstoeko/stringmanagement/.github/workflows/build.php73.ant.yml create mode 100644 vendor/horstoeko/stringmanagement/.github/workflows/build.php74.ant.yml create mode 100644 vendor/horstoeko/stringmanagement/.github/workflows/build.php80.ant.yml create mode 100644 vendor/horstoeko/stringmanagement/.github/workflows/build.php81.ant.yml create mode 100644 vendor/horstoeko/stringmanagement/.github/workflows/build.php81.release.ant.yml create mode 100644 vendor/horstoeko/stringmanagement/.gitignore create mode 100644 vendor/horstoeko/stringmanagement/CODE_OF_CONDUCT.md create mode 100644 vendor/horstoeko/stringmanagement/CONTRIBUTING.md create mode 100644 vendor/horstoeko/stringmanagement/LICENSE create mode 100644 vendor/horstoeko/stringmanagement/README.md create mode 100644 vendor/horstoeko/stringmanagement/SECURITY.md create mode 100644 vendor/horstoeko/stringmanagement/build.ant.xml create mode 100644 vendor/horstoeko/stringmanagement/build.xml create mode 100644 vendor/horstoeko/stringmanagement/build/phpcsrules.xml create mode 100644 vendor/horstoeko/stringmanagement/build/phpcsrules_psr1.xml create mode 100644 vendor/horstoeko/stringmanagement/build/phpcsrules_psr12.xml create mode 100644 vendor/horstoeko/stringmanagement/build/phpcsrules_psr2.xml create mode 100644 vendor/horstoeko/stringmanagement/build/phpcsrules_squiz.xml create mode 100644 vendor/horstoeko/stringmanagement/build/phpdoc.xml create mode 100644 vendor/horstoeko/stringmanagement/build/phpdocumentor.xml create mode 100644 vendor/horstoeko/stringmanagement/build/phpmd.xml create mode 100644 vendor/horstoeko/stringmanagement/build/phprectorconfig.php create mode 100644 vendor/horstoeko/stringmanagement/build/phpstan.neon create mode 100644 vendor/horstoeko/stringmanagement/build/phpunit.xml create mode 100644 vendor/horstoeko/stringmanagement/composer.json create mode 100644 vendor/horstoeko/stringmanagement/src/FileUtils.php create mode 100644 vendor/horstoeko/stringmanagement/src/PathUtils.php create mode 100644 vendor/horstoeko/stringmanagement/src/StringUtils.php create mode 100644 vendor/horstoeko/stringmanagement/tests/FileUtilsTest.php create mode 100644 vendor/horstoeko/stringmanagement/tests/PathUtilsTest.php create mode 100644 vendor/horstoeko/stringmanagement/tests/StringUtilsTest.php create mode 100644 vendor/horstoeko/stringmanagement/tests/data/base64.txt create mode 100644 vendor/horstoeko/stringmanagement/tests/data/tobase64.txt create mode 100644 vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/bug_report.md create mode 100644 vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/config.yml create mode 100644 vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/feature.md create mode 100644 vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/question.md create mode 100644 vendor/horstoeko/zugferd/.github/dependabot.yml create mode 100644 vendor/horstoeko/zugferd/.github/pull_request_template.md create mode 100644 vendor/horstoeko/zugferd/.github/workflows/build.changelog.yml create mode 100644 vendor/horstoeko/zugferd/.github/workflows/build.ci.yml create mode 100644 vendor/horstoeko/zugferd/.github/workflows/build.doc.yml create mode 100644 vendor/horstoeko/zugferd/.github/workflows/build.release.yml create mode 100644 vendor/horstoeko/zugferd/.github/workflows/build.wiki.yml create mode 100644 vendor/horstoeko/zugferd/.github/workflows/maintain-issues-stale.yml create mode 100644 vendor/horstoeko/zugferd/.gitignore create mode 100644 vendor/horstoeko/zugferd/CHANGELOG.md create mode 100644 vendor/horstoeko/zugferd/CODE_OF_CONDUCT.md create mode 100644 vendor/horstoeko/zugferd/CONTRIBUTING.md create mode 100644 vendor/horstoeko/zugferd/LICENSE create mode 100644 vendor/horstoeko/zugferd/README.md create mode 100644 vendor/horstoeko/zugferd/SECURITY.md create mode 100644 vendor/horstoeko/zugferd/build.ant.xml create mode 100644 vendor/horstoeko/zugferd/build.xml create mode 100644 vendor/horstoeko/zugferd/build/phpcsrules.xml create mode 100644 vendor/horstoeko/zugferd/build/phpcsrules_psr1.xml create mode 100644 vendor/horstoeko/zugferd/build/phpcsrules_psr12.xml create mode 100644 vendor/horstoeko/zugferd/build/phpcsrules_psr2.xml create mode 100644 vendor/horstoeko/zugferd/build/phpcsrules_squiz.xml create mode 100644 vendor/horstoeko/zugferd/build/phpdoc.xml create mode 100644 vendor/horstoeko/zugferd/build/phpmd.xml create mode 100644 vendor/horstoeko/zugferd/build/phprectorconfig.php create mode 100644 vendor/horstoeko/zugferd/build/phpstan.neon create mode 100644 vendor/horstoeko/zugferd/build/phpunit.xml create mode 100644 vendor/horstoeko/zugferd/composer.json create mode 100644 vendor/horstoeko/zugferd/examples/00_ExampleHelpers.php create mode 100644 vendor/horstoeko/zugferd/examples/01_ZugferdDocumentBuilder_EN16931.php create mode 100644 vendor/horstoeko/zugferd/examples/01_ZugferdDocumentBuilder_XRECHNUNG3.php create mode 100644 vendor/horstoeko/zugferd/examples/02_ZugferdDocumentPdfBuilder_EN16931.php create mode 100644 vendor/horstoeko/zugferd/examples/02_ZugferdDocumentPdfBuilder_XRECHNUNG.php create mode 100644 vendor/horstoeko/zugferd/examples/03_ZugferdDocumentReader_EN16931.php create mode 100644 vendor/horstoeko/zugferd/examples/03_ZugferdDocumentReader_XRECHNUNG3.php create mode 100644 vendor/horstoeko/zugferd/examples/assets/00_AdditionalDocument.csv create mode 100644 vendor/horstoeko/zugferd/examples/assets/00_ZugferdDocumentPdfBuilder_PrintLayout.pdf create mode 100644 vendor/horstoeko/zugferd/examples/assets/03_ZugferdDocumentReader_ImportFile_EN16931.xml create mode 100644 vendor/horstoeko/zugferd/examples/assets/03_ZugferdDocumentReader_ImportFile_XRECHNUNG3.xml create mode 100644 vendor/horstoeko/zugferd/make/.gitignore create mode 100644 vendor/horstoeko/zugferd/make/config_basic.yml create mode 100644 vendor/horstoeko/zugferd/make/config_basic_wl.yml create mode 100644 vendor/horstoeko/zugferd/make/config_en16931.yml create mode 100644 vendor/horstoeko/zugferd/make/config_extended.yml create mode 100644 vendor/horstoeko/zugferd/make/config_minimum.yml create mode 100644 vendor/horstoeko/zugferd/make/genchangelog.php create mode 100644 vendor/horstoeko/zugferd/make/genclasses create mode 100644 vendor/horstoeko/zugferd/make/genclasses.bat create mode 100644 vendor/horstoeko/zugferd/make/gencodelists create mode 100644 vendor/horstoeko/zugferd/make/gencodelists.php create mode 100644 vendor/horstoeko/zugferd/make/genmethoddocs.php create mode 100644 vendor/horstoeko/zugferd/make/md/ZugferdDocumentBuilder.md create mode 100644 vendor/horstoeko/zugferd/make/md/ZugferdDocumentBuilder_setDocumentInformation.md create mode 100644 vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder.md create mode 100644 vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_attachAdditionalFileByContent.md create mode 100644 vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_attachAdditionalFileByRealFile.md create mode 100644 vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setAdditionalCreatorTool.md create mode 100644 vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setAuthorTemplate.md create mode 100644 vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setKeywordTemplate.md create mode 100644 vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setMetaInformationCallback.md create mode 100644 vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setSubjectTemplate.md create mode 100644 vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setTitleTemplate.md create mode 100644 vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfMerger.md create mode 100644 vendor/horstoeko/zugferd/make/md/ZugferdKositValidator.md create mode 100644 vendor/horstoeko/zugferd/src/ZugferdDocument.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdDocumentBuilder.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdDocumentJsonExporter.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdDocumentPdfBuilder.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdDocumentPdfBuilderAbstract.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdDocumentPdfMerger.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdDocumentPdfReader.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdDocumentPdfReaderExt.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdDocumentProfileConverter.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdDocumentReader.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdDocumentValidator.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdKositValidator.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdObjectHelper.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdPackageVersion.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdPdfValidator.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdPdfWriter.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdProfileResolver.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdProfiles.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdSettings.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdSpecificationVersions.php create mode 100644 vendor/horstoeko/zugferd/src/ZugferdXsdValidator.php create mode 100644 vendor/horstoeko/zugferd/src/assets/facturx_extension_schema.xmp create mode 100644 vendor/horstoeko/zugferd/src/assets/sRGB2014.icc create mode 100644 vendor/horstoeko/zugferd/src/assets/sRGB_v4_ICC.icc create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdAccountingAccountsClassificationTypes.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdAllowanceCodes.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdChargeCodes.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdCountryCodes.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdCurrencyCodes.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdDocumentType.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdDutyTaxFeeCategories.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdElectronicAddressScheme.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdInvoiceType.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdItemTypeIdentificationCodes.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdLineStatusCodes.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdPaymentMeans.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdReferenceCodeQualifiers.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdSchemeIdentifiers.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdTextSubjectCodeQualifiers.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdUnitCodes.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdVATExemptionReasonCode.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdVatCategoryCodes.php create mode 100644 vendor/horstoeko/zugferd/src/codelists/ZugferdVatTypeCodes.php create mode 100644 vendor/horstoeko/zugferd/src/codelistsenum/ZugferdAccountingAccountsClassificationTypes.php create mode 100644 vendor/horstoeko/zugferd/src/codelistsenum/ZugferdAllowanceCodes.php create mode 100644 vendor/horstoeko/zugferd/src/codelistsenum/ZugferdChargeCodes.php create mode 100644 vendor/horstoeko/zugferd/src/codelistsenum/ZugferdCountryCodes.php create mode 100644 vendor/horstoeko/zugferd/src/codelistsenum/ZugferdCurrencyCodes.php create mode 100644 vendor/horstoeko/zugferd/src/codelistsenum/ZugferdDutyTaxFeeCategories.php create mode 100644 vendor/horstoeko/zugferd/src/codelistsenum/ZugferdElectronicAddressScheme.php create mode 100644 vendor/horstoeko/zugferd/src/codelistsenum/ZugferdInvoiceType.php create mode 100644 vendor/horstoeko/zugferd/src/codelistsenum/ZugferdItemTypeIdentificationCodes.php create mode 100644 vendor/horstoeko/zugferd/src/codelistsenum/ZugferdPaymentMeans.php create mode 100644 vendor/horstoeko/zugferd/src/codelistsenum/ZugferdReferenceCodeQualifiers.php create mode 100644 vendor/horstoeko/zugferd/src/codelistsenum/ZugferdSchemeIdentifiers.php create mode 100644 vendor/horstoeko/zugferd/src/codelistsenum/ZugferdTextSubjectCodeQualifiers.php create mode 100644 vendor/horstoeko/zugferd/src/codelistsenum/ZugferdUnitCodes.php create mode 100644 vendor/horstoeko/zugferd/src/codelistsenum/ZugferdVATExemptionReasonCode.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/qdt/AllowanceChargeReasonCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/qdt/CountryIDType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/qdt/CurrencyCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/qdt/DocumentCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/qdt/FormattedDateTimeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/qdt/FormattedDateTimeType/DateTimeStringAType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/qdt/PaymentMeansCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/qdt/TaxCategoryCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/qdt/TaxTypeCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/qdt/TimeReferenceCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/CreditorFinancialAccountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/DebtorFinancialAccountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/DocumentContextParameterType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/DocumentLineDocumentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/ExchangedDocumentContextType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/ExchangedDocumentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeAgreementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeDeliveryType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeSettlementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/LegalOrganizationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeAgreementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeDeliveryType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeSettlementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/NoteType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/ReferencedDocumentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/SpecifiedPeriodType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainEventType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainTradeLineItemType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainTradeTransactionType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/TaxRegistrationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAccountingAccountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAddressType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAllowanceChargeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/TradePartyType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/TradePaymentTermsType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/TradePriceType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/TradeProductType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementHeaderMonetarySummationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementLineMonetarySummationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementPaymentMeansType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/TradeTaxType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/ram/UniversalCommunicationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/rsm/CrossIndustryInvoice.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/rsm/CrossIndustryInvoiceType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/udt/AmountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/udt/CodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/udt/DateTimeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/udt/DateTimeType/DateTimeStringAType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/udt/IDType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/udt/IndicatorType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/udt/PercentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/udt/QuantityType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basic/udt/TextType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/qdt/AllowanceChargeReasonCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/qdt/CountryIDType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/qdt/CurrencyCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/qdt/DocumentCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/qdt/FormattedDateTimeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/qdt/FormattedDateTimeType/DateTimeStringAType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/qdt/PaymentMeansCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TaxCategoryCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TaxTypeCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TimeReferenceCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/CreditorFinancialAccountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/DebtorFinancialAccountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/DocumentContextParameterType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/ExchangedDocumentContextType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/ExchangedDocumentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeAgreementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeDeliveryType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeSettlementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/LegalOrganizationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/NoteType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/ReferencedDocumentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/SpecifiedPeriodType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/SupplyChainEventType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/SupplyChainTradeTransactionType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/TaxRegistrationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAccountingAccountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAddressType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAllowanceChargeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradePartyType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradePaymentTermsType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeSettlementHeaderMonetarySummationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeSettlementPaymentMeansType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeTaxType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/ram/UniversalCommunicationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/rsm/CrossIndustryInvoice.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/rsm/CrossIndustryInvoiceType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/udt/AmountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/udt/CodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/udt/DateTimeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/udt/DateTimeType/DateTimeStringAType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/udt/IDType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/udt/IndicatorType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/udt/PercentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/basicwl/udt/TextType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/qdt/AllowanceChargeReasonCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/qdt/CountryIDType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/qdt/CurrencyCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/qdt/DocumentCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/qdt/FormattedDateTimeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/qdt/FormattedDateTimeType/DateTimeStringAType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/qdt/PaymentMeansCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/qdt/ReferenceCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/qdt/TaxCategoryCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/qdt/TaxTypeCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/qdt/TimeReferenceCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/CreditorFinancialAccountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/CreditorFinancialInstitutionType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/DebtorFinancialAccountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/DocumentContextParameterType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/DocumentLineDocumentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/ExchangedDocumentContextType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/ExchangedDocumentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeAgreementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeDeliveryType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeSettlementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/LegalOrganizationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeAgreementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeDeliveryType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeSettlementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/NoteType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/ProcuringProjectType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/ProductCharacteristicType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/ProductClassificationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/ReferencedDocumentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/SpecifiedPeriodType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainEventType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainTradeLineItemType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainTradeTransactionType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/TaxRegistrationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAccountingAccountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAddressType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAllowanceChargeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeContactType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeCountryType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePartyType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePaymentTermsType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePriceType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeProductType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementFinancialCardType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementHeaderMonetarySummationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementLineMonetarySummationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementPaymentMeansType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeTaxType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/ram/UniversalCommunicationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/rsm/CrossIndustryInvoice.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/rsm/CrossIndustryInvoiceType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/udt/AmountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/udt/BinaryObjectType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/udt/CodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/udt/DateTimeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/udt/DateTimeType/DateTimeStringAType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/udt/DateType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/udt/DateType/DateStringAType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/udt/IDType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/udt/IndicatorType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/udt/PercentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/udt/QuantityType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/en16931/udt/TextType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/AccountingAccountTypeCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/AllowanceChargeReasonCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/ContactTypeCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/CountryIDType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/CurrencyCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/DeliveryTermsCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/DocumentCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/FormattedDateTimeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/FormattedDateTimeType/DateTimeStringAType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/LineStatusCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/PartyRoleCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/PaymentMeansCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/ReferenceCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/TaxCategoryCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/TaxTypeCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/TimeReferenceCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/qdt/TransportModeCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/AdvancePaymentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/CreditorFinancialAccountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/CreditorFinancialInstitutionType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/DebtorFinancialAccountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/DocumentContextParameterType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/DocumentLineDocumentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/ExchangedDocumentContextType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/ExchangedDocumentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeAgreementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeDeliveryType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeSettlementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/LegalOrganizationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeAgreementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeDeliveryType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeSettlementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/LogisticsServiceChargeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/LogisticsTransportMovementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/NoteType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/ProcuringProjectType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/ProductCharacteristicType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/ProductClassificationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/ReferencedDocumentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/ReferencedProductType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/SpecifiedPeriodType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainConsignmentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainEventType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainTradeLineItemType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainTradeTransactionType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TaxRegistrationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAccountingAccountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAddressType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAllowanceChargeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradeContactType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradeCountryType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradeCurrencyExchangeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradeDeliveryTermsType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradePartyType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentDiscountTermsType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentPenaltyTermsType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentTermsType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradePriceType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradeProductInstanceType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradeProductType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementFinancialCardType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementHeaderMonetarySummationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementLineMonetarySummationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementPaymentMeansType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/TradeTaxType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/ram/UniversalCommunicationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/rsm/CrossIndustryInvoice.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/rsm/CrossIndustryInvoiceType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/udt/AmountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/udt/BinaryObjectType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/udt/CodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/udt/DateTimeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/udt/DateTimeType/DateTimeStringAType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/udt/DateType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/udt/DateType/DateStringAType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/udt/IDType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/udt/IndicatorType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/udt/MeasureType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/udt/NumericType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/udt/PercentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/udt/QuantityType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/udt/RateType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/extended/udt/TextType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/qdt/CountryIDType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/qdt/CurrencyCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/qdt/DocumentCodeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/ram/DocumentContextParameterType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/ram/ExchangedDocumentContextType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/ram/ExchangedDocumentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeAgreementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeDeliveryType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeSettlementType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/ram/LegalOrganizationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/ram/ReferencedDocumentType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/ram/SupplyChainTradeTransactionType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/ram/TaxRegistrationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/ram/TradeAddressType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/ram/TradePartyType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/ram/TradeSettlementHeaderMonetarySummationType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/rsm/CrossIndustryInvoice.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/rsm/CrossIndustryInvoiceType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/udt/AmountType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/udt/DateTimeType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/udt/DateTimeType/DateTimeStringAType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/udt/IDType.php create mode 100644 vendor/horstoeko/zugferd/src/entities/minimum/udt/TextType.php create mode 100644 vendor/horstoeko/zugferd/src/exception/ZugferdBaseException.php create mode 100644 vendor/horstoeko/zugferd/src/exception/ZugferdExceptionCodes.php create mode 100644 vendor/horstoeko/zugferd/src/exception/ZugferdFileNotFoundException.php create mode 100644 vendor/horstoeko/zugferd/src/exception/ZugferdFileNotReadableException.php create mode 100644 vendor/horstoeko/zugferd/src/exception/ZugferdInvalidArgumentException.php create mode 100644 vendor/horstoeko/zugferd/src/exception/ZugferdNoPdfAttachmentFoundException.php create mode 100644 vendor/horstoeko/zugferd/src/exception/ZugferdUnknownDateFormatException.php create mode 100644 vendor/horstoeko/zugferd/src/exception/ZugferdUnknownMimetype.php create mode 100644 vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileException.php create mode 100644 vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileIdException.php create mode 100644 vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileParameterException.php create mode 100644 vendor/horstoeko/zugferd/src/exception/ZugferdUnknownXmlContentException.php create mode 100644 vendor/horstoeko/zugferd/src/exception/ZugferdUnsupportedMimetype.php create mode 100644 vendor/horstoeko/zugferd/src/jms/ZugferdTypesHandler.php create mode 100644 vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptor.php create mode 100644 vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorEn16931.php create mode 100644 vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorExtended.php create mode 100644 vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung.php create mode 100644 vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung2.php create mode 100644 vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung3.php create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd create mode 100644 vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC-WL.sch create mode 100644 vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC-WL_codedb.xml create mode 100644 vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC.sch create mode 100644 vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC_codedb.xml create mode 100644 vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EN16931.sch create mode 100644 vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EN16931_codedb.xml create mode 100644 vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EXTENDED.sch create mode 100644 vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EXTENDED_codedb.xml create mode 100644 vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_MINIMUM.sch create mode 100644 vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_MINIMUM_codedb.xml create mode 100644 vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC-WL.xslt create mode 100644 vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC-WL_codedb.xml create mode 100644 vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC.xslt create mode 100644 vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC_codedb.xml create mode 100644 vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EN16931.xslt create mode 100644 vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EN16931_codedb.xml create mode 100644 vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EXTENDED.xslt create mode 100644 vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EXTENDED_codedb.xml create mode 100644 vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_MINIMUM.xslt create mode 100644 vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_MINIMUM_codedb.xml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/qdt/AllowanceChargeReasonCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/qdt/CountryIDType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/qdt/CurrencyCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/qdt/DocumentCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/qdt/FormattedDateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/qdt/FormattedDateTimeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/qdt/PaymentMeansCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/qdt/TaxCategoryCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/qdt/TaxTypeCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/qdt/TimeReferenceCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/DebtorFinancialAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/DocumentContextParameterType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/DocumentLineDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/ExchangedDocumentContextType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/ExchangedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeDeliveryType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeDeliveryType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/NoteType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/ReferencedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/SpecifiedPeriodType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainEventType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainTradeLineItemType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainTradeTransactionType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/TaxRegistrationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAccountingAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAddressType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAllowanceChargeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/TradePartyType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/TradePaymentTermsType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/TradePriceType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/TradeProductType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementHeaderMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementLineMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementPaymentMeansType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/TradeTaxType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/ram/UniversalCommunicationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/rsm/CrossIndustryInvoiceType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/udt/DateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basic/udt/QuantityType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/qdt/AllowanceChargeReasonCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/qdt/CountryIDType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/qdt/CurrencyCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/qdt/DocumentCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/qdt/FormattedDateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/qdt/FormattedDateTimeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/qdt/PaymentMeansCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TaxCategoryCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TaxTypeCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TimeReferenceCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/DebtorFinancialAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/DocumentContextParameterType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/ExchangedDocumentContextType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/ExchangedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeDeliveryType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/NoteType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/ReferencedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/SpecifiedPeriodType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/SupplyChainEventType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/SupplyChainTradeTransactionType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/TaxRegistrationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAccountingAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAddressType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAllowanceChargeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradePartyType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradePaymentTermsType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeSettlementHeaderMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeSettlementPaymentMeansType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeTaxType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/ram/UniversalCommunicationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/rsm/CrossIndustryInvoiceType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/basicwl/udt/DateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/qdt/AllowanceChargeReasonCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/qdt/CountryIDType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/qdt/CurrencyCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/qdt/DocumentCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/qdt/FormattedDateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/qdt/FormattedDateTimeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/qdt/PaymentMeansCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/qdt/ReferenceCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/qdt/TaxCategoryCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/qdt/TaxTypeCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/qdt/TimeReferenceCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/CreditorFinancialInstitutionType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/DebtorFinancialAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/DocumentContextParameterType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/DocumentLineDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/ExchangedDocumentContextType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/ExchangedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeDeliveryType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeDeliveryType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/NoteType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/ProcuringProjectType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/ProductCharacteristicType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/ProductClassificationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/ReferencedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/SpecifiedPeriodType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainEventType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainTradeLineItemType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainTradeTransactionType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/TaxRegistrationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAccountingAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAddressType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAllowanceChargeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeContactType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeCountryType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePartyType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePaymentTermsType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePriceType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeProductType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementFinancialCardType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementHeaderMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementLineMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementPaymentMeansType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeTaxType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/rsm/CrossIndustryInvoiceType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/udt/BinaryObjectType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/udt/DateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/udt/DateType.DateStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/en16931/udt/QuantityType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/qdt/AccountingAccountTypeCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/qdt/AllowanceChargeReasonCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/qdt/CountryIDType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/qdt/CurrencyCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/qdt/DeliveryTermsCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/qdt/DocumentCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/qdt/FormattedDateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/qdt/FormattedDateTimeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/qdt/PaymentMeansCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/qdt/ReferenceCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/qdt/TaxCategoryCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/qdt/TaxTypeCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/qdt/TimeReferenceCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/AdvancePaymentType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/CreditorFinancialInstitutionType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/DebtorFinancialAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/DocumentContextParameterType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/DocumentLineDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/ExchangedDocumentContextType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/ExchangedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeDeliveryType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/LegalOrganizationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeDeliveryType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/LogisticsServiceChargeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/LogisticsTransportMovementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/NoteType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/ProcuringProjectType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/ProductCharacteristicType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/ProductClassificationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/ReferencedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/ReferencedProductType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/SpecifiedPeriodType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainConsignmentType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainEventType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainTradeLineItemType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainTradeTransactionType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TaxRegistrationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAccountingAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAddressType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAllowanceChargeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradeContactType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradeCountryType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradeCurrencyExchangeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradeDeliveryTermsType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradePartyType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentDiscountTermsType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentPenaltyTermsType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentTermsType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradePriceType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradeProductType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementFinancialCardType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementHeaderMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementLineMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementPaymentMeansType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/ram/TradeTaxType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/rsm/CrossIndustryInvoiceType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/udt/BinaryObjectType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/udt/DateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/udt/DateType.DateStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/udt/MeasureType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/extended/udt/QuantityType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/qdt/CountryIDType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/qdt/CurrencyCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/qdt/DocumentCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/ram/DocumentContextParameterType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/ram/ExchangedDocumentContextType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/ram/ExchangedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/ram/HeaderTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/ram/HeaderTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/ram/ReferencedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/ram/SupplyChainTradeTransactionType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/ram/TaxRegistrationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/ram/TradeAddressType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/ram/TradePartyType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/ram/TradeSettlementHeaderMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/rsm/CrossIndustryInvoiceType.yml create mode 100644 vendor/horstoeko/zugferd/src/validation/minimum/udt/DateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/qdt/AllowanceChargeReasonCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/qdt/CountryIDType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/qdt/CurrencyCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/qdt/DocumentCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/qdt/FormattedDateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/qdt/FormattedDateTimeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/qdt/PaymentMeansCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/qdt/TaxCategoryCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/qdt/TaxTypeCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/qdt/TimeReferenceCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/CreditorFinancialAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/DebtorFinancialAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/DocumentContextParameterType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/DocumentLineDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/ExchangedDocumentContextType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/ExchangedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeDeliveryType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/LegalOrganizationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeDeliveryType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/NoteType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/ReferencedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/SpecifiedPeriodType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainEventType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainTradeLineItemType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainTradeTransactionType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/TaxRegistrationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAccountingAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAddressType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAllowanceChargeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePartyType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePaymentTermsType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePriceType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeProductType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementHeaderMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementLineMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementPaymentMeansType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeTaxType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/ram/UniversalCommunicationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/rsm/CrossIndustryInvoice.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/rsm/CrossIndustryInvoiceType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/udt/AmountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/udt/CodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/udt/DateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/udt/DateTimeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/udt/IDType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/udt/IndicatorType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/udt/PercentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/udt/QuantityType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basic/udt/TextType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/AllowanceChargeReasonCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/CountryIDType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/CurrencyCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/DocumentCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/FormattedDateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/FormattedDateTimeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/PaymentMeansCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TaxCategoryCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TaxTypeCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TimeReferenceCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/CreditorFinancialAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/DebtorFinancialAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/DocumentContextParameterType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ExchangedDocumentContextType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ExchangedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeDeliveryType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/LegalOrganizationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/NoteType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ReferencedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SpecifiedPeriodType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SupplyChainEventType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SupplyChainTradeTransactionType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TaxRegistrationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAccountingAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAddressType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAllowanceChargeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradePartyType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradePaymentTermsType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeSettlementHeaderMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeSettlementPaymentMeansType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeTaxType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/ram/UniversalCommunicationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/rsm/CrossIndustryInvoice.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/rsm/CrossIndustryInvoiceType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/udt/AmountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/udt/CodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/udt/DateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/udt/DateTimeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/udt/IDType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/udt/IndicatorType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/udt/PercentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/basicwl/udt/TextType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/qdt/AllowanceChargeReasonCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/qdt/CountryIDType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/qdt/CurrencyCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/qdt/DocumentCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/qdt/FormattedDateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/qdt/FormattedDateTimeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/qdt/PaymentMeansCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/qdt/ReferenceCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TaxCategoryCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TaxTypeCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TimeReferenceCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/CreditorFinancialAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/CreditorFinancialInstitutionType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/DebtorFinancialAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/DocumentContextParameterType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/DocumentLineDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/ExchangedDocumentContextType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/ExchangedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeDeliveryType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/LegalOrganizationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeDeliveryType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/NoteType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProcuringProjectType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProductCharacteristicType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProductClassificationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/ReferencedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/SpecifiedPeriodType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainEventType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainTradeLineItemType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainTradeTransactionType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/TaxRegistrationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAccountingAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAddressType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAllowanceChargeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeContactType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeCountryType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePartyType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePaymentTermsType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePriceType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeProductType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementFinancialCardType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementHeaderMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementLineMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementPaymentMeansType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeTaxType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/ram/UniversalCommunicationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/rsm/CrossIndustryInvoice.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/rsm/CrossIndustryInvoiceType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/udt/AmountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/udt/BinaryObjectType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/udt/CodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateTimeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateType.DateStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/udt/IDType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/udt/IndicatorType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/udt/PercentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/udt/QuantityType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/en16931/udt/TextType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/AccountingAccountTypeCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/AllowanceChargeReasonCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/ContactTypeCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/CountryIDType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/CurrencyCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/DeliveryTermsCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/DocumentCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/FormattedDateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/FormattedDateTimeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/LineStatusCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/PartyRoleCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/PaymentMeansCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/ReferenceCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/TaxCategoryCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/TaxTypeCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/TimeReferenceCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/qdt/TransportModeCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/AdvancePaymentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/CreditorFinancialAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/CreditorFinancialInstitutionType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/DebtorFinancialAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/DocumentContextParameterType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/DocumentLineDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/ExchangedDocumentContextType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/ExchangedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeDeliveryType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/LegalOrganizationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeDeliveryType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/LogisticsServiceChargeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/LogisticsTransportMovementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/NoteType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/ProcuringProjectType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/ProductCharacteristicType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/ProductClassificationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/ReferencedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/ReferencedProductType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/SpecifiedPeriodType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainConsignmentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainEventType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainTradeLineItemType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainTradeTransactionType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TaxRegistrationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAccountingAccountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAddressType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAllowanceChargeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeContactType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeCountryType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeCurrencyExchangeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeDeliveryTermsType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePartyType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentDiscountTermsType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentPenaltyTermsType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentTermsType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePriceType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeProductInstanceType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeProductType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementFinancialCardType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementHeaderMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementLineMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementPaymentMeansType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeTaxType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/ram/UniversalCommunicationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/rsm/CrossIndustryInvoice.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/rsm/CrossIndustryInvoiceType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/udt/AmountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/udt/BinaryObjectType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/udt/CodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/udt/DateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/udt/DateTimeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/udt/DateType.DateStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/udt/DateType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/udt/IDType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/udt/IndicatorType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/udt/MeasureType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/udt/NumericType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/udt/PercentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/udt/QuantityType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/udt/RateType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/extended/udt/TextType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/qdt/CountryIDType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/qdt/CurrencyCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/qdt/DocumentCodeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/ram/DocumentContextParameterType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/ram/ExchangedDocumentContextType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/ram/ExchangedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeAgreementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeDeliveryType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeSettlementType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/ram/LegalOrganizationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/ram/ReferencedDocumentType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/ram/SupplyChainTradeTransactionType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/ram/TaxRegistrationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradeAddressType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradePartyType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradeSettlementHeaderMonetarySummationType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/rsm/CrossIndustryInvoice.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/rsm/CrossIndustryInvoiceType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/udt/AmountType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/udt/DateTimeType.DateTimeStringAType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/udt/DateTimeType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/udt/IDType.yml create mode 100644 vendor/horstoeko/zugferd/src/yaml/minimum/udt/TextType.yml create mode 100644 vendor/horstoeko/zugferd/tests/TestCase.php create mode 100644 vendor/horstoeko/zugferd/tests/assets/dummy_attachment_1.dummy create mode 100644 vendor/horstoeko/zugferd/tests/assets/issues/xml_issue_206.xml create mode 100644 vendor/horstoeko/zugferd/tests/assets/issues/xml_issue_268.xml create mode 100644 vendor/horstoeko/zugferd/tests/assets/issues/xml_issue_268_extended.xml create mode 100644 vendor/horstoeko/zugferd/tests/assets/pdf_fx_extended_1.pdf create mode 100644 vendor/horstoeko/zugferd/tests/assets/pdf_fx_minimum_1.pdf create mode 100644 vendor/horstoeko/zugferd/tests/assets/pdf_invalid.pdf create mode 100644 vendor/horstoeko/zugferd/tests/assets/pdf_plain.pdf create mode 100644 vendor/horstoeko/zugferd/tests/assets/pdf_zf_en16931_1.pdf create mode 100644 vendor/horstoeko/zugferd/tests/assets/pdf_zf_en16931_2.pdf create mode 100644 vendor/horstoeko/zugferd/tests/assets/pdf_zf_en16931_3.pdf create mode 100644 vendor/horstoeko/zugferd/tests/assets/pdf_zf_extended_1.pdf create mode 100644 vendor/horstoeko/zugferd/tests/assets/pdf_zf_xrechnung_1.pdf create mode 100644 vendor/horstoeko/zugferd/tests/assets/txt_addattachment_1.txt create mode 100644 vendor/horstoeko/zugferd/tests/assets/xml_basic_1.xml create mode 100644 vendor/horstoeko/zugferd/tests/assets/xml_en16931_1.xml create mode 100644 vendor/horstoeko/zugferd/tests/assets/xml_en16931_2.xml create mode 100644 vendor/horstoeko/zugferd/tests/assets/xml_en16931_3.xml create mode 100644 vendor/horstoeko/zugferd/tests/assets/xml_en16931_4.xml create mode 100644 vendor/horstoeko/zugferd/tests/assets/xml_en16931_5.xml create mode 100644 vendor/horstoeko/zugferd/tests/assets/xml_extended_1.xml create mode 100644 vendor/horstoeko/zugferd/tests/assets/xml_extended_2.xml create mode 100644 vendor/horstoeko/zugferd/tests/assets/xml_invalid_1.xml create mode 100644 vendor/horstoeko/zugferd/tests/assets/xml_invalid_2.xml create mode 100644 vendor/horstoeko/zugferd/tests/assets/xml_xrechnung_1.xml create mode 100644 vendor/horstoeko/zugferd/tests/assets/xml_xrechnung_2.xml create mode 100644 vendor/horstoeko/zugferd/tests/testcases/BuilderEn16931Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/BuilderExtendedTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/BuilderMinimumTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/DocumentTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/JsonExporterTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/KositValidatorTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/ObjectHelperEn16931Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/ObjectHelperExtendedTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/PackageVersionTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/PdfBuilderEn16931Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/PdfMergerTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/PdfReaderEn16931AllowanceChargeTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/PdfReaderEn16931Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/PdfReaderExtGeneralTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/PdfReaderExtended2Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/PdfReaderExtendedTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/PdfReaderGeneralTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/PdfReaderMinimumTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/PdfReaderMultipleAttachmentsTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/PdfReaderXRechnungTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/ProfileConverterTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/ProfileResolverTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/ReaderBasicTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931AllowanceChargeTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931Bank1Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931Bank2Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/ReaderExtended2Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/ReaderExtendedTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/ReaderXRechnungAttachedBinaryObjectTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/ReaderXRechnungTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/SettingsTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/ValidatorInvalidTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/ValidatorValidTest.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/issues/Issue104Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/issues/Issue10Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/issues/Issue113Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/issues/Issue18Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/issues/Issue206Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/issues/Issue268Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/issues/Issue270Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/issues/Issue32Test.php create mode 100644 vendor/horstoeko/zugferd/tests/testcases/issues/Issue43Test.php create mode 100644 vendor/horstoeko/zugferd/tests/traits/HandlesXmlTests.php create mode 100644 vendor/horstoeko/zugferd/tests/traits/RunsOnlyWithJavaEnvironmentTrait.php create mode 100644 vendor/jms/metadata/CHANGELOG.md create mode 100644 vendor/jms/metadata/CONTRIBUTING.md create mode 100644 vendor/jms/metadata/LICENSE create mode 100644 vendor/jms/metadata/README.md create mode 100644 vendor/jms/metadata/UPGRADING.md create mode 100644 vendor/jms/metadata/composer.json create mode 100644 vendor/jms/metadata/src/AdvancedMetadataFactoryInterface.php create mode 100644 vendor/jms/metadata/src/Cache/CacheInterface.php create mode 100644 vendor/jms/metadata/src/Cache/ClearableCacheInterface.php create mode 100644 vendor/jms/metadata/src/Cache/DoctrineCacheAdapter.php create mode 100644 vendor/jms/metadata/src/Cache/FileCache.php create mode 100644 vendor/jms/metadata/src/Cache/PsrCacheAdapter.php create mode 100644 vendor/jms/metadata/src/ClassHierarchyMetadata.php create mode 100644 vendor/jms/metadata/src/ClassMetadata.php create mode 100644 vendor/jms/metadata/src/Driver/AbstractFileDriver.php create mode 100644 vendor/jms/metadata/src/Driver/AdvancedDriverInterface.php create mode 100644 vendor/jms/metadata/src/Driver/AdvancedFileLocatorInterface.php create mode 100644 vendor/jms/metadata/src/Driver/DriverChain.php create mode 100644 vendor/jms/metadata/src/Driver/DriverInterface.php create mode 100644 vendor/jms/metadata/src/Driver/FileLocator.php create mode 100644 vendor/jms/metadata/src/Driver/FileLocatorInterface.php create mode 100644 vendor/jms/metadata/src/Driver/LazyLoadingDriver.php create mode 100644 vendor/jms/metadata/src/Driver/TraceableFileLocatorInterface.php create mode 100644 vendor/jms/metadata/src/MergeableClassMetadata.php create mode 100644 vendor/jms/metadata/src/MergeableInterface.php create mode 100644 vendor/jms/metadata/src/MetadataFactory.php create mode 100644 vendor/jms/metadata/src/MetadataFactoryInterface.php create mode 100644 vendor/jms/metadata/src/MethodMetadata.php create mode 100644 vendor/jms/metadata/src/NullMetadata.php create mode 100644 vendor/jms/metadata/src/PropertyMetadata.php create mode 100644 vendor/jms/metadata/src/SerializationHelper.php create mode 100644 vendor/jms/serializer/.run/phpunit.run.xml create mode 100644 vendor/jms/serializer/CHANGELOG.md create mode 100644 vendor/jms/serializer/CONTRIBUTING.md create mode 100644 vendor/jms/serializer/LICENSE create mode 100644 vendor/jms/serializer/META.md create mode 100644 vendor/jms/serializer/README.md create mode 100644 vendor/jms/serializer/UPGRADING.md create mode 100644 vendor/jms/serializer/composer.json create mode 100644 vendor/jms/serializer/doc/LICENSE create mode 100644 vendor/jms/serializer/doc/conf.py create mode 100644 vendor/jms/serializer/doc/configuration.rst create mode 100644 vendor/jms/serializer/doc/cookbook.rst create mode 100644 vendor/jms/serializer/doc/cookbook/arrays.rst create mode 100644 vendor/jms/serializer/doc/cookbook/exclusion_strategies.rst create mode 100644 vendor/jms/serializer/doc/cookbook/object_constructor.rst create mode 100644 vendor/jms/serializer/doc/cookbook/stdclass.rst create mode 100644 vendor/jms/serializer/doc/event_system.rst create mode 100644 vendor/jms/serializer/doc/handlers.rst create mode 100644 vendor/jms/serializer/doc/index.rst create mode 100644 vendor/jms/serializer/doc/logo-small.png create mode 100644 vendor/jms/serializer/doc/logo.png create mode 100644 vendor/jms/serializer/doc/reference.rst create mode 100644 vendor/jms/serializer/doc/reference/annotations.rst create mode 100644 vendor/jms/serializer/doc/reference/xml_reference.rst create mode 100644 vendor/jms/serializer/doc/reference/yml_reference.rst create mode 100644 vendor/jms/serializer/doc/requirements.txt create mode 100644 vendor/jms/serializer/doc/usage.rst create mode 100644 vendor/jms/serializer/phpbench.json create mode 100644 vendor/jms/serializer/phpstan.neon.dist create mode 100644 vendor/jms/serializer/rector.php create mode 100644 vendor/jms/serializer/src/AbstractVisitor.php create mode 100644 vendor/jms/serializer/src/Accessor/AccessorStrategyInterface.php create mode 100644 vendor/jms/serializer/src/Accessor/DefaultAccessorStrategy.php create mode 100644 vendor/jms/serializer/src/Annotation/AccessType.php create mode 100644 vendor/jms/serializer/src/Annotation/Accessor.php create mode 100644 vendor/jms/serializer/src/Annotation/AccessorOrder.php create mode 100644 vendor/jms/serializer/src/Annotation/AnnotationUtilsTrait.php create mode 100644 vendor/jms/serializer/src/Annotation/DeprecatedReadOnly.php create mode 100644 vendor/jms/serializer/src/Annotation/Discriminator.php create mode 100644 vendor/jms/serializer/src/Annotation/Exclude.php create mode 100644 vendor/jms/serializer/src/Annotation/ExclusionPolicy.php create mode 100644 vendor/jms/serializer/src/Annotation/Expose.php create mode 100644 vendor/jms/serializer/src/Annotation/Groups.php create mode 100644 vendor/jms/serializer/src/Annotation/Inline.php create mode 100644 vendor/jms/serializer/src/Annotation/MaxDepth.php create mode 100644 vendor/jms/serializer/src/Annotation/PostDeserialize.php create mode 100644 vendor/jms/serializer/src/Annotation/PostSerialize.php create mode 100644 vendor/jms/serializer/src/Annotation/PreSerialize.php create mode 100644 vendor/jms/serializer/src/Annotation/ReadOnly.php create mode 100644 vendor/jms/serializer/src/Annotation/ReadOnlyProperty.php create mode 100644 vendor/jms/serializer/src/Annotation/SerializedName.php create mode 100644 vendor/jms/serializer/src/Annotation/SerializerAttribute.php create mode 100644 vendor/jms/serializer/src/Annotation/Since.php create mode 100644 vendor/jms/serializer/src/Annotation/SkipWhenEmpty.php create mode 100644 vendor/jms/serializer/src/Annotation/Type.php create mode 100644 vendor/jms/serializer/src/Annotation/UnionDiscriminator.php create mode 100644 vendor/jms/serializer/src/Annotation/Until.php create mode 100644 vendor/jms/serializer/src/Annotation/Version.php create mode 100644 vendor/jms/serializer/src/Annotation/VirtualProperty.php create mode 100644 vendor/jms/serializer/src/Annotation/XmlAttribute.php create mode 100644 vendor/jms/serializer/src/Annotation/XmlAttributeMap.php create mode 100644 vendor/jms/serializer/src/Annotation/XmlCollection.php create mode 100644 vendor/jms/serializer/src/Annotation/XmlDiscriminator.php create mode 100644 vendor/jms/serializer/src/Annotation/XmlElement.php create mode 100644 vendor/jms/serializer/src/Annotation/XmlKeyValuePairs.php create mode 100644 vendor/jms/serializer/src/Annotation/XmlList.php create mode 100644 vendor/jms/serializer/src/Annotation/XmlMap.php create mode 100644 vendor/jms/serializer/src/Annotation/XmlNamespace.php create mode 100644 vendor/jms/serializer/src/Annotation/XmlRoot.php create mode 100644 vendor/jms/serializer/src/Annotation/XmlValue.php create mode 100644 vendor/jms/serializer/src/ArrayTransformerInterface.php create mode 100644 vendor/jms/serializer/src/Builder/CallbackDriverFactory.php create mode 100644 vendor/jms/serializer/src/Builder/DefaultDriverFactory.php create mode 100644 vendor/jms/serializer/src/Builder/DocBlockDriverFactory.php create mode 100644 vendor/jms/serializer/src/Builder/DriverFactoryInterface.php create mode 100644 vendor/jms/serializer/src/Construction/DoctrineObjectConstructor.php create mode 100644 vendor/jms/serializer/src/Construction/ObjectConstructorInterface.php create mode 100644 vendor/jms/serializer/src/Construction/UnserializeObjectConstructor.php create mode 100644 vendor/jms/serializer/src/Context.php create mode 100644 vendor/jms/serializer/src/ContextFactory/CallableContextFactory.php create mode 100644 vendor/jms/serializer/src/ContextFactory/CallableDeserializationContextFactory.php create mode 100644 vendor/jms/serializer/src/ContextFactory/CallableSerializationContextFactory.php create mode 100644 vendor/jms/serializer/src/ContextFactory/DefaultDeserializationContextFactory.php create mode 100644 vendor/jms/serializer/src/ContextFactory/DefaultSerializationContextFactory.php create mode 100644 vendor/jms/serializer/src/ContextFactory/DeserializationContextFactoryInterface.php create mode 100644 vendor/jms/serializer/src/ContextFactory/SerializationContextFactoryInterface.php create mode 100644 vendor/jms/serializer/src/DeserializationContext.php create mode 100644 vendor/jms/serializer/src/EventDispatcher/Event.php create mode 100644 vendor/jms/serializer/src/EventDispatcher/EventDispatcher.php create mode 100644 vendor/jms/serializer/src/EventDispatcher/EventDispatcherInterface.php create mode 100644 vendor/jms/serializer/src/EventDispatcher/EventSubscriberInterface.php create mode 100644 vendor/jms/serializer/src/EventDispatcher/Events.php create mode 100644 vendor/jms/serializer/src/EventDispatcher/LazyEventDispatcher.php create mode 100644 vendor/jms/serializer/src/EventDispatcher/ObjectEvent.php create mode 100644 vendor/jms/serializer/src/EventDispatcher/PreDeserializeEvent.php create mode 100644 vendor/jms/serializer/src/EventDispatcher/PreSerializeEvent.php create mode 100644 vendor/jms/serializer/src/EventDispatcher/Subscriber/DoctrineProxySubscriber.php create mode 100644 vendor/jms/serializer/src/EventDispatcher/Subscriber/EnumSubscriber.php create mode 100644 vendor/jms/serializer/src/EventDispatcher/Subscriber/SymfonyValidatorValidatorSubscriber.php create mode 100644 vendor/jms/serializer/src/Exception/CircularReferenceDetectedException.php create mode 100644 vendor/jms/serializer/src/Exception/Exception.php create mode 100644 vendor/jms/serializer/src/Exception/ExcludedClassException.php create mode 100644 vendor/jms/serializer/src/Exception/ExpressionLanguageRequiredException.php create mode 100644 vendor/jms/serializer/src/Exception/InvalidArgumentException.php create mode 100644 vendor/jms/serializer/src/Exception/InvalidMetadataException.php create mode 100644 vendor/jms/serializer/src/Exception/LogicException.php create mode 100644 vendor/jms/serializer/src/Exception/NonCastableTypeException.php create mode 100644 vendor/jms/serializer/src/Exception/NonFloatCastableTypeException.php create mode 100644 vendor/jms/serializer/src/Exception/NonIntCastableTypeException.php create mode 100644 vendor/jms/serializer/src/Exception/NonStringCastableTypeException.php create mode 100644 vendor/jms/serializer/src/Exception/NonVisitableTypeException.php create mode 100644 vendor/jms/serializer/src/Exception/NotAcceptableException.php create mode 100644 vendor/jms/serializer/src/Exception/ObjectConstructionException.php create mode 100644 vendor/jms/serializer/src/Exception/RuntimeException.php create mode 100755 vendor/jms/serializer/src/Exception/SkipHandlerException.php create mode 100644 vendor/jms/serializer/src/Exception/UninitializedPropertyException.php create mode 100644 vendor/jms/serializer/src/Exception/UnsupportedFormatException.php create mode 100644 vendor/jms/serializer/src/Exception/ValidationFailedException.php create mode 100644 vendor/jms/serializer/src/Exception/XmlErrorException.php create mode 100644 vendor/jms/serializer/src/Exclusion/DepthExclusionStrategy.php create mode 100644 vendor/jms/serializer/src/Exclusion/DisjunctExclusionStrategy.php create mode 100644 vendor/jms/serializer/src/Exclusion/ExclusionStrategyInterface.php create mode 100644 vendor/jms/serializer/src/Exclusion/ExpressionLanguageExclusionStrategy.php create mode 100644 vendor/jms/serializer/src/Exclusion/GroupsExclusionStrategy.php create mode 100644 vendor/jms/serializer/src/Exclusion/VersionExclusionStrategy.php create mode 100644 vendor/jms/serializer/src/Expression/CompilableExpressionEvaluatorInterface.php create mode 100644 vendor/jms/serializer/src/Expression/Expression.php create mode 100644 vendor/jms/serializer/src/Expression/ExpressionEvaluator.php create mode 100644 vendor/jms/serializer/src/Expression/ExpressionEvaluatorInterface.php create mode 100644 vendor/jms/serializer/src/Functions.php create mode 100644 vendor/jms/serializer/src/GraphNavigator.php create mode 100644 vendor/jms/serializer/src/GraphNavigator/DeserializationGraphNavigator.php create mode 100644 vendor/jms/serializer/src/GraphNavigator/Factory/DeserializationGraphNavigatorFactory.php create mode 100644 vendor/jms/serializer/src/GraphNavigator/Factory/GraphNavigatorFactoryInterface.php create mode 100644 vendor/jms/serializer/src/GraphNavigator/Factory/SerializationGraphNavigatorFactory.php create mode 100644 vendor/jms/serializer/src/GraphNavigator/SerializationGraphNavigator.php create mode 100644 vendor/jms/serializer/src/GraphNavigatorInterface.php create mode 100644 vendor/jms/serializer/src/Handler/ArrayCollectionHandler.php create mode 100644 vendor/jms/serializer/src/Handler/ConstraintViolationHandler.php create mode 100644 vendor/jms/serializer/src/Handler/DateHandler.php create mode 100644 vendor/jms/serializer/src/Handler/EnumHandler.php create mode 100644 vendor/jms/serializer/src/Handler/FormErrorHandler.php create mode 100644 vendor/jms/serializer/src/Handler/HandlerRegistry.php create mode 100644 vendor/jms/serializer/src/Handler/HandlerRegistryInterface.php create mode 100644 vendor/jms/serializer/src/Handler/IteratorHandler.php create mode 100644 vendor/jms/serializer/src/Handler/LazyHandlerRegistry.php create mode 100644 vendor/jms/serializer/src/Handler/StdClassHandler.php create mode 100644 vendor/jms/serializer/src/Handler/SubscribingHandlerInterface.php create mode 100644 vendor/jms/serializer/src/Handler/SymfonyUidHandler.php create mode 100644 vendor/jms/serializer/src/Handler/UnionHandler.php create mode 100644 vendor/jms/serializer/src/JsonDeserializationStrictVisitor.php create mode 100644 vendor/jms/serializer/src/JsonDeserializationVisitor.php create mode 100644 vendor/jms/serializer/src/JsonSerializationVisitor.php create mode 100644 vendor/jms/serializer/src/Metadata/ClassMetadata.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/AbstractDoctrineTypeDriver.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/AnnotationDriver.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/AnnotationOrAttributeDriver.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/AttributeDriver.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/AttributeDriver/AttributeReader.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/DefaultValuePropertyDriver.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/DocBlockDriver.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/DocBlockDriver/DocBlockTypeResolver.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/DoctrinePHPCRTypeDriver.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/DoctrineTypeDriver.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/EnumPropertiesDriver.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/ExpressionMetadataTrait.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/NullDriver.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/TypedPropertiesDriver.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/XmlDriver.php create mode 100644 vendor/jms/serializer/src/Metadata/Driver/YamlDriver.php create mode 100644 vendor/jms/serializer/src/Metadata/ExpressionPropertyMetadata.php create mode 100644 vendor/jms/serializer/src/Metadata/PropertyMetadata.php create mode 100644 vendor/jms/serializer/src/Metadata/StaticPropertyMetadata.php create mode 100644 vendor/jms/serializer/src/Metadata/VirtualPropertyMetadata.php create mode 100644 vendor/jms/serializer/src/Naming/CamelCaseNamingStrategy.php create mode 100644 vendor/jms/serializer/src/Naming/IdenticalPropertyNamingStrategy.php create mode 100644 vendor/jms/serializer/src/Naming/PropertyNamingStrategyInterface.php create mode 100644 vendor/jms/serializer/src/Naming/SerializedNameAnnotationStrategy.php create mode 100644 vendor/jms/serializer/src/NullAwareVisitorInterface.php create mode 100644 vendor/jms/serializer/src/Ordering/AlphabeticalPropertyOrderingStrategy.php create mode 100644 vendor/jms/serializer/src/Ordering/CustomPropertyOrderingStrategy.php create mode 100644 vendor/jms/serializer/src/Ordering/IdenticalPropertyOrderingStrategy.php create mode 100644 vendor/jms/serializer/src/Ordering/PropertyOrderingInterface.php create mode 100644 vendor/jms/serializer/src/SerializationContext.php create mode 100644 vendor/jms/serializer/src/Serializer.php create mode 100644 vendor/jms/serializer/src/SerializerBuilder.php create mode 100644 vendor/jms/serializer/src/SerializerInterface.php create mode 100644 vendor/jms/serializer/src/Twig/SerializerBaseExtension.php create mode 100644 vendor/jms/serializer/src/Twig/SerializerExtension.php create mode 100644 vendor/jms/serializer/src/Twig/SerializerRuntimeExtension.php create mode 100644 vendor/jms/serializer/src/Twig/SerializerRuntimeHelper.php create mode 100644 vendor/jms/serializer/src/Type/Exception/Exception.php create mode 100644 vendor/jms/serializer/src/Type/Exception/InvalidNode.php create mode 100644 vendor/jms/serializer/src/Type/Exception/SyntaxError.php create mode 100644 vendor/jms/serializer/src/Type/Lexer.php create mode 100644 vendor/jms/serializer/src/Type/Parser.php create mode 100644 vendor/jms/serializer/src/Type/ParserInterface.php create mode 100644 vendor/jms/serializer/src/Type/Type.php create mode 100644 vendor/jms/serializer/src/Visitor/DeserializationVisitorInterface.php create mode 100644 vendor/jms/serializer/src/Visitor/Factory/DeserializationVisitorFactory.php create mode 100644 vendor/jms/serializer/src/Visitor/Factory/JsonDeserializationVisitorFactory.php create mode 100644 vendor/jms/serializer/src/Visitor/Factory/JsonSerializationVisitorFactory.php create mode 100644 vendor/jms/serializer/src/Visitor/Factory/SerializationVisitorFactory.php create mode 100644 vendor/jms/serializer/src/Visitor/Factory/XmlDeserializationVisitorFactory.php create mode 100644 vendor/jms/serializer/src/Visitor/Factory/XmlSerializationVisitorFactory.php create mode 100644 vendor/jms/serializer/src/Visitor/SerializationVisitorInterface.php create mode 100644 vendor/jms/serializer/src/VisitorInterface.php create mode 100644 vendor/jms/serializer/src/XmlDeserializationVisitor.php create mode 100644 vendor/jms/serializer/src/XmlSerializationVisitor.php create mode 100644 vendor/num-num/ubl-invoice/.editorconfig create mode 100644 vendor/num-num/ubl-invoice/.gitignore create mode 100644 vendor/num-num/ubl-invoice/CHANGELOG.md create mode 100644 vendor/num-num/ubl-invoice/CONTRIBUTING.md create mode 100644 vendor/num-num/ubl-invoice/LICENSE create mode 100644 vendor/num-num/ubl-invoice/README.md create mode 100644 vendor/num-num/ubl-invoice/composer.json create mode 100644 vendor/num-num/ubl-invoice/composer.lock create mode 100644 vendor/num-num/ubl-invoice/phpcs.xml create mode 100644 vendor/num-num/ubl-invoice/phpunit.xml.dist create mode 100644 vendor/num-num/ubl-invoice/src/AdditionalDocumentReference.php create mode 100644 vendor/num-num/ubl-invoice/src/Address.php create mode 100644 vendor/num-num/ubl-invoice/src/AllowanceCharge.php create mode 100644 vendor/num-num/ubl-invoice/src/Attachment.php create mode 100644 vendor/num-num/ubl-invoice/src/BillingReference.php create mode 100644 vendor/num-num/ubl-invoice/src/ClassifiedTaxCategory.php create mode 100644 vendor/num-num/ubl-invoice/src/CommodityClassification.php create mode 100644 vendor/num-num/ubl-invoice/src/Contact.php create mode 100644 vendor/num-num/ubl-invoice/src/ContractDocumentReference.php create mode 100644 vendor/num-num/ubl-invoice/src/Country.php create mode 100644 vendor/num-num/ubl-invoice/src/CreditNote.php create mode 100644 vendor/num-num/ubl-invoice/src/CreditNoteLine.php create mode 100644 vendor/num-num/ubl-invoice/src/Delivery.php create mode 100644 vendor/num-num/ubl-invoice/src/EASCode.php create mode 100644 vendor/num-num/ubl-invoice/src/FinancialInstitutionBranch.php create mode 100644 vendor/num-num/ubl-invoice/src/Generator.php create mode 100644 vendor/num-num/ubl-invoice/src/ICDCode.php create mode 100644 vendor/num-num/ubl-invoice/src/Invoice.php create mode 100644 vendor/num-num/ubl-invoice/src/InvoiceDocumentReference.php create mode 100644 vendor/num-num/ubl-invoice/src/InvoiceLine.php create mode 100644 vendor/num-num/ubl-invoice/src/InvoicePeriod.php create mode 100644 vendor/num-num/ubl-invoice/src/InvoiceTypeCode.php create mode 100644 vendor/num-num/ubl-invoice/src/Item.php create mode 100644 vendor/num-num/ubl-invoice/src/LegalEntity.php create mode 100644 vendor/num-num/ubl-invoice/src/LegalMonetaryTotal.php create mode 100644 vendor/num-num/ubl-invoice/src/NumberFormatter.php create mode 100644 vendor/num-num/ubl-invoice/src/OrderLineReference.php create mode 100644 vendor/num-num/ubl-invoice/src/OrderReference.php create mode 100644 vendor/num-num/ubl-invoice/src/Party.php create mode 100644 vendor/num-num/ubl-invoice/src/PartyTaxScheme.php create mode 100644 vendor/num-num/ubl-invoice/src/PayeeFinancialAccount.php create mode 100644 vendor/num-num/ubl-invoice/src/PaymentMeans.php create mode 100644 vendor/num-num/ubl-invoice/src/PaymentTerms.php create mode 100644 vendor/num-num/ubl-invoice/src/Price.php create mode 100644 vendor/num-num/ubl-invoice/src/ProjectReference.php create mode 100644 vendor/num-num/ubl-invoice/src/Schema.php create mode 100644 vendor/num-num/ubl-invoice/src/SettlementPeriod.php create mode 100644 vendor/num-num/ubl-invoice/src/TaxCategory.php create mode 100644 vendor/num-num/ubl-invoice/src/TaxScheme.php create mode 100644 vendor/num-num/ubl-invoice/src/TaxSubTotal.php create mode 100644 vendor/num-num/ubl-invoice/src/TaxTotal.php create mode 100644 vendor/num-num/ubl-invoice/src/UNCL4461.php create mode 100644 vendor/num-num/ubl-invoice/src/UNCL5305.php create mode 100644 vendor/num-num/ubl-invoice/src/UnitCode.php create mode 100644 vendor/num-num/ubl-invoice/src/VatExemptionCode.php create mode 100644 vendor/num-num/ubl-invoice/tests/BillingReferenceCreditNoteTest.php create mode 100644 vendor/num-num/ubl-invoice/tests/ContractDocumentReferenceTest.php create mode 100644 vendor/num-num/ubl-invoice/tests/DocumentTypeTest.php create mode 100644 vendor/num-num/ubl-invoice/tests/DueDateTest.php create mode 100644 vendor/num-num/ubl-invoice/tests/EN16931Test.php create mode 100644 vendor/num-num/ubl-invoice/tests/EmptyAttachmentTest.php create mode 100644 vendor/num-num/ubl-invoice/tests/MultiplePaymentMeansTest.php create mode 100644 vendor/num-num/ubl-invoice/tests/NumberFormatterTest.php create mode 100644 vendor/num-num/ubl-invoice/tests/PartyIdentificationSchemeNameTest.php create mode 100644 vendor/num-num/ubl-invoice/tests/ProjectReferenceTest.php create mode 100644 vendor/num-num/ubl-invoice/tests/SampleInvoice.pdf create mode 100644 vendor/num-num/ubl-invoice/tests/SimpleCreditNoteTest.php create mode 100644 vendor/num-num/ubl-invoice/tests/SimpleInvoiceTest.php create mode 100644 vendor/num-num/ubl-invoice/tests/SimpleInvoiceWithFilePathPdfTest.php create mode 100644 vendor/num-num/ubl-invoice/tests/SimpleInvoiceWithInlinePdfTest.php create mode 100644 vendor/num-num/ubl-invoice/tests/SimpleUBL22InvoiceTest.php create mode 100644 vendor/paragonie/constant_time_encoding/LICENSE.txt create mode 100644 vendor/paragonie/constant_time_encoding/README.md create mode 100644 vendor/paragonie/constant_time_encoding/composer.json create mode 100644 vendor/paragonie/constant_time_encoding/src/Base32.php create mode 100644 vendor/paragonie/constant_time_encoding/src/Base32Hex.php create mode 100644 vendor/paragonie/constant_time_encoding/src/Base64.php create mode 100644 vendor/paragonie/constant_time_encoding/src/Base64DotSlash.php create mode 100644 vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php create mode 100644 vendor/paragonie/constant_time_encoding/src/Base64UrlSafe.php create mode 100644 vendor/paragonie/constant_time_encoding/src/Binary.php create mode 100644 vendor/paragonie/constant_time_encoding/src/EncoderInterface.php create mode 100644 vendor/paragonie/constant_time_encoding/src/Encoding.php create mode 100644 vendor/paragonie/constant_time_encoding/src/Hex.php create mode 100644 vendor/paragonie/constant_time_encoding/src/RFC4648.php create mode 100644 vendor/php-curl-class/php-curl-class/CHANGELOG.md create mode 100644 vendor/php-curl-class/php-curl-class/LICENSE create mode 100644 vendor/php-curl-class/php-curl-class/README.md create mode 100644 vendor/php-curl-class/php-curl-class/SECURITY.md create mode 100644 vendor/php-curl-class/php-curl-class/composer.json create mode 100644 vendor/php-curl-class/php-curl-class/src/Curl/ArrayUtil.php create mode 100644 vendor/php-curl-class/php-curl-class/src/Curl/BaseCurl.php create mode 100644 vendor/php-curl-class/php-curl-class/src/Curl/CaseInsensitiveArray.php create mode 100644 vendor/php-curl-class/php-curl-class/src/Curl/Curl.php create mode 100644 vendor/php-curl-class/php-curl-class/src/Curl/Decoder.php create mode 100644 vendor/php-curl-class/php-curl-class/src/Curl/Encoder.php create mode 100644 vendor/php-curl-class/php-curl-class/src/Curl/MultiCurl.php create mode 100644 vendor/php-curl-class/php-curl-class/src/Curl/StringUtil.php create mode 100644 vendor/php-curl-class/php-curl-class/src/Curl/Url.php create mode 100644 vendor/phpstan/phpdoc-parser/LICENSE create mode 100644 vendor/phpstan/phpdoc-parser/README.md create mode 100644 vendor/phpstan/phpdoc-parser/UPGRADING.md create mode 100644 vendor/phpstan/phpdoc-parser/composer.json create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/AbstractNodeVisitor.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Attribute.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Comment.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayItemNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFalseNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFloatNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprIntegerNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNullNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprStringNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprTrueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstFetchNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/DoctrineConstExprStringNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Node.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/NodeAttributes.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/NodeTraverser.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor/CloningVisitor.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagMethodValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagPropertyValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/DeprecatedTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineAnnotation.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArgument.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArray.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArrayItem.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ExtendsTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/GenericTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ImplementsTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/InvalidTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueParameterNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MixinTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamClosureThisTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamImmediatelyInvokedCallableTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamLaterInvokedCallableTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamOutTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocChildNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTextNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PropertyTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PureUnlessCallableIsImpureTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireExtendsTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireImplementsTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ReturnTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/SealedTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/SelfOutTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TemplateTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ThrowsTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasImportTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypelessParamTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/UsesTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/VarTagValueNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeItemNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeUnsealedTypeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayTypeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeParameterNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeForParameterNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ConstTypeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/GenericTypeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/IdentifierTypeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/IntersectionTypeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/InvalidTypeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/NullableTypeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeItemNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/OffsetAccessTypeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ThisTypeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/TypeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/UnionTypeNode.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Lexer/Lexer.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Parser/ConstExprParser.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Parser/ParserException.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Parser/StringUnescaper.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Parser/TokenIterator.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Parser/TypeParser.php create mode 100644 vendor/phpstan/phpdoc-parser/src/ParserConfig.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Printer/DiffElem.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Printer/Differ.php create mode 100644 vendor/phpstan/phpdoc-parser/src/Printer/Printer.php create mode 100644 vendor/sabre/uri/LICENSE create mode 100644 vendor/sabre/uri/composer.json create mode 100644 vendor/sabre/uri/lib/InvalidUriException.php create mode 100644 vendor/sabre/uri/lib/Version.php create mode 100644 vendor/sabre/uri/lib/functions.php create mode 100644 vendor/sabre/xml/LICENSE create mode 100644 vendor/sabre/xml/README.md create mode 100644 vendor/sabre/xml/composer.json create mode 100644 vendor/sabre/xml/lib/ContextStackTrait.php create mode 100644 vendor/sabre/xml/lib/Deserializer/functions.php create mode 100644 vendor/sabre/xml/lib/Element.php create mode 100644 vendor/sabre/xml/lib/Element/Base.php create mode 100644 vendor/sabre/xml/lib/Element/Cdata.php create mode 100644 vendor/sabre/xml/lib/Element/Elements.php create mode 100644 vendor/sabre/xml/lib/Element/KeyValue.php create mode 100644 vendor/sabre/xml/lib/Element/Uri.php create mode 100644 vendor/sabre/xml/lib/Element/XmlFragment.php create mode 100644 vendor/sabre/xml/lib/LibXMLException.php create mode 100644 vendor/sabre/xml/lib/ParseException.php create mode 100644 vendor/sabre/xml/lib/Reader.php create mode 100644 vendor/sabre/xml/lib/Serializer/functions.php create mode 100644 vendor/sabre/xml/lib/Service.php create mode 100644 vendor/sabre/xml/lib/Version.php create mode 100644 vendor/sabre/xml/lib/Writer.php create mode 100644 vendor/sabre/xml/lib/XmlDeserializable.php create mode 100644 vendor/sabre/xml/lib/XmlSerializable.php create mode 100644 vendor/setasign/fpdf/FAQ.htm create mode 100644 vendor/setasign/fpdf/README.md create mode 100644 vendor/setasign/fpdf/changelog.htm create mode 100644 vendor/setasign/fpdf/composer.json create mode 100644 vendor/setasign/fpdf/doc/__construct.htm create mode 100644 vendor/setasign/fpdf/doc/acceptpagebreak.htm create mode 100644 vendor/setasign/fpdf/doc/addfont.htm create mode 100644 vendor/setasign/fpdf/doc/addlink.htm create mode 100644 vendor/setasign/fpdf/doc/addpage.htm create mode 100644 vendor/setasign/fpdf/doc/aliasnbpages.htm create mode 100644 vendor/setasign/fpdf/doc/cell.htm create mode 100644 vendor/setasign/fpdf/doc/close.htm create mode 100644 vendor/setasign/fpdf/doc/error.htm create mode 100644 vendor/setasign/fpdf/doc/footer.htm create mode 100644 vendor/setasign/fpdf/doc/getpageheight.htm create mode 100644 vendor/setasign/fpdf/doc/getpagewidth.htm create mode 100644 vendor/setasign/fpdf/doc/getstringwidth.htm create mode 100644 vendor/setasign/fpdf/doc/getx.htm create mode 100644 vendor/setasign/fpdf/doc/gety.htm create mode 100644 vendor/setasign/fpdf/doc/header.htm create mode 100644 vendor/setasign/fpdf/doc/image.htm create mode 100644 vendor/setasign/fpdf/doc/index.htm create mode 100644 vendor/setasign/fpdf/doc/line.htm create mode 100644 vendor/setasign/fpdf/doc/link.htm create mode 100644 vendor/setasign/fpdf/doc/ln.htm create mode 100644 vendor/setasign/fpdf/doc/multicell.htm create mode 100644 vendor/setasign/fpdf/doc/output.htm create mode 100644 vendor/setasign/fpdf/doc/pageno.htm create mode 100644 vendor/setasign/fpdf/doc/rect.htm create mode 100644 vendor/setasign/fpdf/doc/setauthor.htm create mode 100644 vendor/setasign/fpdf/doc/setautopagebreak.htm create mode 100644 vendor/setasign/fpdf/doc/setcompression.htm create mode 100644 vendor/setasign/fpdf/doc/setcreator.htm create mode 100644 vendor/setasign/fpdf/doc/setdisplaymode.htm create mode 100644 vendor/setasign/fpdf/doc/setdrawcolor.htm create mode 100644 vendor/setasign/fpdf/doc/setfillcolor.htm create mode 100644 vendor/setasign/fpdf/doc/setfont.htm create mode 100644 vendor/setasign/fpdf/doc/setfontsize.htm create mode 100644 vendor/setasign/fpdf/doc/setkeywords.htm create mode 100644 vendor/setasign/fpdf/doc/setleftmargin.htm create mode 100644 vendor/setasign/fpdf/doc/setlinewidth.htm create mode 100644 vendor/setasign/fpdf/doc/setlink.htm create mode 100644 vendor/setasign/fpdf/doc/setmargins.htm create mode 100644 vendor/setasign/fpdf/doc/setrightmargin.htm create mode 100644 vendor/setasign/fpdf/doc/setsubject.htm create mode 100644 vendor/setasign/fpdf/doc/settextcolor.htm create mode 100644 vendor/setasign/fpdf/doc/settitle.htm create mode 100644 vendor/setasign/fpdf/doc/settopmargin.htm create mode 100644 vendor/setasign/fpdf/doc/setx.htm create mode 100644 vendor/setasign/fpdf/doc/setxy.htm create mode 100644 vendor/setasign/fpdf/doc/sety.htm create mode 100644 vendor/setasign/fpdf/doc/text.htm create mode 100644 vendor/setasign/fpdf/doc/write.htm create mode 100644 vendor/setasign/fpdf/font/courier.php create mode 100644 vendor/setasign/fpdf/font/courierb.php create mode 100644 vendor/setasign/fpdf/font/courierbi.php create mode 100644 vendor/setasign/fpdf/font/courieri.php create mode 100644 vendor/setasign/fpdf/font/helvetica.php create mode 100644 vendor/setasign/fpdf/font/helveticab.php create mode 100644 vendor/setasign/fpdf/font/helveticabi.php create mode 100644 vendor/setasign/fpdf/font/helveticai.php create mode 100644 vendor/setasign/fpdf/font/symbol.php create mode 100644 vendor/setasign/fpdf/font/times.php create mode 100644 vendor/setasign/fpdf/font/timesb.php create mode 100644 vendor/setasign/fpdf/font/timesbi.php create mode 100644 vendor/setasign/fpdf/font/timesi.php create mode 100644 vendor/setasign/fpdf/font/zapfdingbats.php create mode 100644 vendor/setasign/fpdf/fpdf.css create mode 100644 vendor/setasign/fpdf/fpdf.php create mode 100644 vendor/setasign/fpdf/install.txt create mode 100644 vendor/setasign/fpdf/license.txt create mode 100644 vendor/setasign/fpdf/makefont/cp1250.map create mode 100644 vendor/setasign/fpdf/makefont/cp1251.map create mode 100644 vendor/setasign/fpdf/makefont/cp1252.map create mode 100644 vendor/setasign/fpdf/makefont/cp1253.map create mode 100644 vendor/setasign/fpdf/makefont/cp1254.map create mode 100644 vendor/setasign/fpdf/makefont/cp1255.map create mode 100644 vendor/setasign/fpdf/makefont/cp1257.map create mode 100644 vendor/setasign/fpdf/makefont/cp1258.map create mode 100644 vendor/setasign/fpdf/makefont/cp874.map create mode 100644 vendor/setasign/fpdf/makefont/iso-8859-1.map create mode 100644 vendor/setasign/fpdf/makefont/iso-8859-11.map create mode 100644 vendor/setasign/fpdf/makefont/iso-8859-15.map create mode 100644 vendor/setasign/fpdf/makefont/iso-8859-16.map create mode 100644 vendor/setasign/fpdf/makefont/iso-8859-2.map create mode 100644 vendor/setasign/fpdf/makefont/iso-8859-4.map create mode 100644 vendor/setasign/fpdf/makefont/iso-8859-5.map create mode 100644 vendor/setasign/fpdf/makefont/iso-8859-7.map create mode 100644 vendor/setasign/fpdf/makefont/iso-8859-9.map create mode 100644 vendor/setasign/fpdf/makefont/koi8-r.map create mode 100644 vendor/setasign/fpdf/makefont/koi8-u.map create mode 100644 vendor/setasign/fpdf/makefont/makefont.php create mode 100644 vendor/setasign/fpdf/makefont/ttfparser.php create mode 100644 vendor/setasign/fpdf/tutorial/20k_c1.txt create mode 100644 vendor/setasign/fpdf/tutorial/20k_c2.txt create mode 100644 vendor/setasign/fpdf/tutorial/CevicheOne-Regular-Licence.txt create mode 100644 vendor/setasign/fpdf/tutorial/CevicheOne-Regular.php create mode 100644 vendor/setasign/fpdf/tutorial/CevicheOne-Regular.ttf create mode 100644 vendor/setasign/fpdf/tutorial/CevicheOne-Regular.z create mode 100644 vendor/setasign/fpdf/tutorial/countries.txt create mode 100644 vendor/setasign/fpdf/tutorial/index.htm create mode 100644 vendor/setasign/fpdf/tutorial/logo.png create mode 100644 vendor/setasign/fpdf/tutorial/makefont.php create mode 100644 vendor/setasign/fpdf/tutorial/tuto1.htm create mode 100644 vendor/setasign/fpdf/tutorial/tuto1.php create mode 100644 vendor/setasign/fpdf/tutorial/tuto2.htm create mode 100644 vendor/setasign/fpdf/tutorial/tuto2.php create mode 100644 vendor/setasign/fpdf/tutorial/tuto3.htm create mode 100644 vendor/setasign/fpdf/tutorial/tuto3.php create mode 100644 vendor/setasign/fpdf/tutorial/tuto4.htm create mode 100644 vendor/setasign/fpdf/tutorial/tuto4.php create mode 100644 vendor/setasign/fpdf/tutorial/tuto5.htm create mode 100644 vendor/setasign/fpdf/tutorial/tuto5.php create mode 100644 vendor/setasign/fpdf/tutorial/tuto6.htm create mode 100644 vendor/setasign/fpdf/tutorial/tuto6.php create mode 100644 vendor/setasign/fpdf/tutorial/tuto7.htm create mode 100644 vendor/setasign/fpdf/tutorial/tuto7.php create mode 100644 vendor/setasign/fpdi/LICENSE.txt create mode 100644 vendor/setasign/fpdi/README.md create mode 100644 vendor/setasign/fpdi/SECURITY.md create mode 100644 vendor/setasign/fpdi/composer.json create mode 100644 vendor/setasign/fpdi/src/FpdfTpl.php create mode 100644 vendor/setasign/fpdi/src/FpdfTplTrait.php create mode 100644 vendor/setasign/fpdi/src/FpdfTrait.php create mode 100644 vendor/setasign/fpdi/src/Fpdi.php create mode 100644 vendor/setasign/fpdi/src/FpdiException.php create mode 100644 vendor/setasign/fpdi/src/FpdiTrait.php create mode 100644 vendor/setasign/fpdi/src/GraphicsState.php create mode 100644 vendor/setasign/fpdi/src/Math/Matrix.php create mode 100644 vendor/setasign/fpdi/src/Math/Vector.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/CrossReference/AbstractReader.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReference.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReferenceException.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/CrossReference/FixedReader.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/CrossReference/LineReader.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/CrossReference/ReaderInterface.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Filter/Ascii85.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Filter/Ascii85Exception.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Filter/AsciiHex.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Filter/FilterException.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Filter/FilterInterface.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Filter/Flate.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Filter/FlateException.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Filter/Lzw.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Filter/LzwException.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/PdfParser.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/PdfParserException.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/StreamReader.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Tokenizer.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Type/PdfArray.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Type/PdfBoolean.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Type/PdfDictionary.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Type/PdfHexString.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Type/PdfIndirectObject.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Type/PdfIndirectObjectReference.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Type/PdfName.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Type/PdfNull.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Type/PdfNumeric.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Type/PdfStream.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Type/PdfString.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Type/PdfToken.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Type/PdfType.php create mode 100644 vendor/setasign/fpdi/src/PdfParser/Type/PdfTypeException.php create mode 100644 vendor/setasign/fpdi/src/PdfReader/DataStructure/Rectangle.php create mode 100644 vendor/setasign/fpdi/src/PdfReader/Page.php create mode 100644 vendor/setasign/fpdi/src/PdfReader/PageBoundaries.php create mode 100644 vendor/setasign/fpdi/src/PdfReader/PdfReader.php create mode 100644 vendor/setasign/fpdi/src/PdfReader/PdfReaderException.php create mode 100644 vendor/setasign/fpdi/src/Tcpdf/Fpdi.php create mode 100644 vendor/setasign/fpdi/src/TcpdfFpdi.php create mode 100644 vendor/setasign/fpdi/src/Tfpdf/FpdfTpl.php create mode 100644 vendor/setasign/fpdi/src/Tfpdf/Fpdi.php create mode 100644 vendor/setasign/fpdi/src/autoload.php create mode 100644 vendor/smalot/pdfparser/.github/ISSUE_TEMPLATE/incorrect-parsing.md create mode 100644 vendor/smalot/pdfparser/.github/pull_request_template.md create mode 100644 vendor/smalot/pdfparser/.github/workflows/coding-standards.yml create mode 100644 vendor/smalot/pdfparser/.github/workflows/continuous-integration.yml create mode 100644 vendor/smalot/pdfparser/.github/workflows/performance.yml create mode 100644 vendor/smalot/pdfparser/.php-cs-fixer.php create mode 100644 vendor/smalot/pdfparser/CONTRIBUTING.md create mode 100644 vendor/smalot/pdfparser/LICENSE.txt create mode 100644 vendor/smalot/pdfparser/Makefile create mode 100644 vendor/smalot/pdfparser/README.md create mode 100644 vendor/smalot/pdfparser/alt_autoload.php-dist create mode 100644 vendor/smalot/pdfparser/composer.json create mode 100644 vendor/smalot/pdfparser/doc/CustomConfig.md create mode 100644 vendor/smalot/pdfparser/doc/Developer.md create mode 100644 vendor/smalot/pdfparser/doc/Usage.md create mode 100644 vendor/smalot/pdfparser/phpunit-windows.xml create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Config.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Document.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementArray.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementBoolean.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementDate.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementHexa.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementMissing.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementName.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNull.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNumeric.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementString.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementStruct.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementXRef.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/AbstractEncoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/EncodingLocator.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin1Encoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin9Encoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/MacRomanEncoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PDFDocEncoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PostScriptGlyphs.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/StandardEncoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/WinAnsiEncoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/EmptyPdfException.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/EncodingNotFoundException.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/InvalidDictionaryObjectException.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/MissingCatalogException.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/MissingPdfHeaderException.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/NotImplementedException.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Font.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType0.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType2.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontTrueType.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType0.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType1.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType3.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Header.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/PDFObject.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Page.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Pages.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Parser.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/FilterHelper.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/RawDataParser.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Form.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Image.php create mode 100644 vendor/symfony/deprecation-contracts/CHANGELOG.md create mode 100644 vendor/symfony/deprecation-contracts/LICENSE create mode 100644 vendor/symfony/deprecation-contracts/README.md create mode 100644 vendor/symfony/deprecation-contracts/composer.json create mode 100644 vendor/symfony/deprecation-contracts/function.php create mode 100644 vendor/symfony/finder/CHANGELOG.md create mode 100644 vendor/symfony/finder/Comparator/Comparator.php create mode 100644 vendor/symfony/finder/Comparator/DateComparator.php create mode 100644 vendor/symfony/finder/Comparator/NumberComparator.php create mode 100644 vendor/symfony/finder/Exception/AccessDeniedException.php create mode 100644 vendor/symfony/finder/Exception/DirectoryNotFoundException.php create mode 100644 vendor/symfony/finder/Finder.php create mode 100644 vendor/symfony/finder/Gitignore.php create mode 100644 vendor/symfony/finder/Glob.php create mode 100644 vendor/symfony/finder/Iterator/CustomFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/DateRangeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/FileTypeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/FilecontentFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/FilenameFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/LazyIterator.php create mode 100644 vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/PathFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php create mode 100644 vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/SortableIterator.php create mode 100644 vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php create mode 100644 vendor/symfony/finder/LICENSE create mode 100644 vendor/symfony/finder/README.md create mode 100644 vendor/symfony/finder/SplFileInfo.php create mode 100644 vendor/symfony/finder/composer.json create mode 100644 vendor/symfony/polyfill-ctype/Ctype.php create mode 100644 vendor/symfony/polyfill-ctype/LICENSE create mode 100644 vendor/symfony/polyfill-ctype/README.md create mode 100644 vendor/symfony/polyfill-ctype/bootstrap.php create mode 100644 vendor/symfony/polyfill-ctype/bootstrap80.php create mode 100644 vendor/symfony/polyfill-ctype/composer.json create mode 100644 vendor/symfony/polyfill-mbstring/LICENSE create mode 100644 vendor/symfony/polyfill-mbstring/Mbstring.php create mode 100644 vendor/symfony/polyfill-mbstring/README.md create mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php create mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php create mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php create mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php create mode 100644 vendor/symfony/polyfill-mbstring/bootstrap.php create mode 100644 vendor/symfony/polyfill-mbstring/bootstrap80.php create mode 100644 vendor/symfony/polyfill-mbstring/composer.json create mode 100644 vendor/symfony/polyfill-php83/LICENSE create mode 100644 vendor/symfony/polyfill-php83/Php83.php create mode 100644 vendor/symfony/polyfill-php83/README.md create mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateError.php create mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateException.php create mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php create mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php create mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php create mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php create mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php create mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateObjectError.php create mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateRangeError.php create mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/Override.php create mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/SQLite3Exception.php create mode 100644 vendor/symfony/polyfill-php83/bootstrap.php create mode 100644 vendor/symfony/polyfill-php83/bootstrap81.php create mode 100644 vendor/symfony/polyfill-php83/composer.json create mode 100644 vendor/symfony/process/CHANGELOG.md create mode 100644 vendor/symfony/process/Exception/ExceptionInterface.php create mode 100644 vendor/symfony/process/Exception/InvalidArgumentException.php create mode 100644 vendor/symfony/process/Exception/LogicException.php create mode 100644 vendor/symfony/process/Exception/ProcessFailedException.php create mode 100644 vendor/symfony/process/Exception/ProcessSignaledException.php create mode 100644 vendor/symfony/process/Exception/ProcessStartFailedException.php create mode 100644 vendor/symfony/process/Exception/ProcessTimedOutException.php create mode 100644 vendor/symfony/process/Exception/RunProcessFailedException.php create mode 100644 vendor/symfony/process/Exception/RuntimeException.php create mode 100644 vendor/symfony/process/ExecutableFinder.php create mode 100644 vendor/symfony/process/InputStream.php create mode 100644 vendor/symfony/process/LICENSE create mode 100644 vendor/symfony/process/Messenger/RunProcessContext.php create mode 100644 vendor/symfony/process/Messenger/RunProcessMessage.php create mode 100644 vendor/symfony/process/Messenger/RunProcessMessageHandler.php create mode 100644 vendor/symfony/process/PhpExecutableFinder.php create mode 100644 vendor/symfony/process/PhpProcess.php create mode 100644 vendor/symfony/process/PhpSubprocess.php create mode 100644 vendor/symfony/process/Pipes/AbstractPipes.php create mode 100644 vendor/symfony/process/Pipes/PipesInterface.php create mode 100644 vendor/symfony/process/Pipes/UnixPipes.php create mode 100644 vendor/symfony/process/Pipes/WindowsPipes.php create mode 100644 vendor/symfony/process/Process.php create mode 100644 vendor/symfony/process/ProcessUtils.php create mode 100644 vendor/symfony/process/README.md create mode 100644 vendor/symfony/process/composer.json create mode 100644 vendor/symfony/translation-contracts/CHANGELOG.md create mode 100644 vendor/symfony/translation-contracts/LICENSE create mode 100644 vendor/symfony/translation-contracts/LocaleAwareInterface.php create mode 100644 vendor/symfony/translation-contracts/README.md create mode 100644 vendor/symfony/translation-contracts/Test/TranslatorTest.php create mode 100644 vendor/symfony/translation-contracts/TranslatableInterface.php create mode 100644 vendor/symfony/translation-contracts/TranslatorInterface.php create mode 100644 vendor/symfony/translation-contracts/TranslatorTrait.php create mode 100644 vendor/symfony/translation-contracts/composer.json create mode 100644 vendor/symfony/validator/Attribute/HasNamedArguments.php create mode 100644 vendor/symfony/validator/CHANGELOG.md create mode 100644 vendor/symfony/validator/Command/DebugCommand.php create mode 100644 vendor/symfony/validator/Constraint.php create mode 100644 vendor/symfony/validator/ConstraintValidator.php create mode 100644 vendor/symfony/validator/ConstraintValidatorFactory.php create mode 100644 vendor/symfony/validator/ConstraintValidatorFactoryInterface.php create mode 100644 vendor/symfony/validator/ConstraintValidatorInterface.php create mode 100644 vendor/symfony/validator/ConstraintViolation.php create mode 100644 vendor/symfony/validator/ConstraintViolationInterface.php create mode 100644 vendor/symfony/validator/ConstraintViolationList.php create mode 100644 vendor/symfony/validator/ConstraintViolationListInterface.php create mode 100644 vendor/symfony/validator/Constraints/AbstractComparison.php create mode 100644 vendor/symfony/validator/Constraints/AbstractComparisonValidator.php create mode 100644 vendor/symfony/validator/Constraints/All.php create mode 100644 vendor/symfony/validator/Constraints/AllValidator.php create mode 100644 vendor/symfony/validator/Constraints/AtLeastOneOf.php create mode 100644 vendor/symfony/validator/Constraints/AtLeastOneOfValidator.php create mode 100644 vendor/symfony/validator/Constraints/Bic.php create mode 100644 vendor/symfony/validator/Constraints/BicValidator.php create mode 100644 vendor/symfony/validator/Constraints/Blank.php create mode 100644 vendor/symfony/validator/Constraints/BlankValidator.php create mode 100644 vendor/symfony/validator/Constraints/Callback.php create mode 100644 vendor/symfony/validator/Constraints/CallbackValidator.php create mode 100644 vendor/symfony/validator/Constraints/CardScheme.php create mode 100644 vendor/symfony/validator/Constraints/CardSchemeValidator.php create mode 100644 vendor/symfony/validator/Constraints/Cascade.php create mode 100644 vendor/symfony/validator/Constraints/Charset.php create mode 100644 vendor/symfony/validator/Constraints/CharsetValidator.php create mode 100644 vendor/symfony/validator/Constraints/Choice.php create mode 100644 vendor/symfony/validator/Constraints/ChoiceValidator.php create mode 100644 vendor/symfony/validator/Constraints/Cidr.php create mode 100644 vendor/symfony/validator/Constraints/CidrValidator.php create mode 100644 vendor/symfony/validator/Constraints/Collection.php create mode 100644 vendor/symfony/validator/Constraints/CollectionValidator.php create mode 100644 vendor/symfony/validator/Constraints/Composite.php create mode 100644 vendor/symfony/validator/Constraints/Compound.php create mode 100644 vendor/symfony/validator/Constraints/CompoundValidator.php create mode 100644 vendor/symfony/validator/Constraints/Count.php create mode 100644 vendor/symfony/validator/Constraints/CountValidator.php create mode 100644 vendor/symfony/validator/Constraints/Country.php create mode 100644 vendor/symfony/validator/Constraints/CountryValidator.php create mode 100644 vendor/symfony/validator/Constraints/CssColor.php create mode 100644 vendor/symfony/validator/Constraints/CssColorValidator.php create mode 100644 vendor/symfony/validator/Constraints/Currency.php create mode 100644 vendor/symfony/validator/Constraints/CurrencyValidator.php create mode 100644 vendor/symfony/validator/Constraints/Date.php create mode 100644 vendor/symfony/validator/Constraints/DateTime.php create mode 100644 vendor/symfony/validator/Constraints/DateTimeValidator.php create mode 100644 vendor/symfony/validator/Constraints/DateValidator.php create mode 100644 vendor/symfony/validator/Constraints/DisableAutoMapping.php create mode 100644 vendor/symfony/validator/Constraints/DivisibleBy.php create mode 100644 vendor/symfony/validator/Constraints/DivisibleByValidator.php create mode 100644 vendor/symfony/validator/Constraints/Email.php create mode 100644 vendor/symfony/validator/Constraints/EmailValidator.php create mode 100644 vendor/symfony/validator/Constraints/EnableAutoMapping.php create mode 100644 vendor/symfony/validator/Constraints/EqualTo.php create mode 100644 vendor/symfony/validator/Constraints/EqualToValidator.php create mode 100644 vendor/symfony/validator/Constraints/Existence.php create mode 100644 vendor/symfony/validator/Constraints/Expression.php create mode 100644 vendor/symfony/validator/Constraints/ExpressionLanguageProvider.php create mode 100644 vendor/symfony/validator/Constraints/ExpressionSyntax.php create mode 100644 vendor/symfony/validator/Constraints/ExpressionSyntaxValidator.php create mode 100644 vendor/symfony/validator/Constraints/ExpressionValidator.php create mode 100644 vendor/symfony/validator/Constraints/File.php create mode 100644 vendor/symfony/validator/Constraints/FileValidator.php create mode 100644 vendor/symfony/validator/Constraints/GreaterThan.php create mode 100644 vendor/symfony/validator/Constraints/GreaterThanOrEqual.php create mode 100644 vendor/symfony/validator/Constraints/GreaterThanOrEqualValidator.php create mode 100644 vendor/symfony/validator/Constraints/GreaterThanValidator.php create mode 100644 vendor/symfony/validator/Constraints/GroupSequence.php create mode 100644 vendor/symfony/validator/Constraints/GroupSequenceProvider.php create mode 100644 vendor/symfony/validator/Constraints/Hostname.php create mode 100644 vendor/symfony/validator/Constraints/HostnameValidator.php create mode 100644 vendor/symfony/validator/Constraints/Iban.php create mode 100644 vendor/symfony/validator/Constraints/IbanValidator.php create mode 100644 vendor/symfony/validator/Constraints/IdenticalTo.php create mode 100644 vendor/symfony/validator/Constraints/IdenticalToValidator.php create mode 100644 vendor/symfony/validator/Constraints/Image.php create mode 100644 vendor/symfony/validator/Constraints/ImageValidator.php create mode 100644 vendor/symfony/validator/Constraints/Ip.php create mode 100644 vendor/symfony/validator/Constraints/IpValidator.php create mode 100644 vendor/symfony/validator/Constraints/IsFalse.php create mode 100644 vendor/symfony/validator/Constraints/IsFalseValidator.php create mode 100644 vendor/symfony/validator/Constraints/IsNull.php create mode 100644 vendor/symfony/validator/Constraints/IsNullValidator.php create mode 100644 vendor/symfony/validator/Constraints/IsTrue.php create mode 100644 vendor/symfony/validator/Constraints/IsTrueValidator.php create mode 100644 vendor/symfony/validator/Constraints/Isbn.php create mode 100644 vendor/symfony/validator/Constraints/IsbnValidator.php create mode 100644 vendor/symfony/validator/Constraints/Isin.php create mode 100644 vendor/symfony/validator/Constraints/IsinValidator.php create mode 100644 vendor/symfony/validator/Constraints/Issn.php create mode 100644 vendor/symfony/validator/Constraints/IssnValidator.php create mode 100644 vendor/symfony/validator/Constraints/Json.php create mode 100644 vendor/symfony/validator/Constraints/JsonValidator.php create mode 100644 vendor/symfony/validator/Constraints/Language.php create mode 100644 vendor/symfony/validator/Constraints/LanguageValidator.php create mode 100644 vendor/symfony/validator/Constraints/Length.php create mode 100644 vendor/symfony/validator/Constraints/LengthValidator.php create mode 100644 vendor/symfony/validator/Constraints/LessThan.php create mode 100644 vendor/symfony/validator/Constraints/LessThanOrEqual.php create mode 100644 vendor/symfony/validator/Constraints/LessThanOrEqualValidator.php create mode 100644 vendor/symfony/validator/Constraints/LessThanValidator.php create mode 100644 vendor/symfony/validator/Constraints/Locale.php create mode 100644 vendor/symfony/validator/Constraints/LocaleValidator.php create mode 100644 vendor/symfony/validator/Constraints/Luhn.php create mode 100644 vendor/symfony/validator/Constraints/LuhnValidator.php create mode 100644 vendor/symfony/validator/Constraints/MacAddress.php create mode 100644 vendor/symfony/validator/Constraints/MacAddressValidator.php create mode 100644 vendor/symfony/validator/Constraints/Negative.php create mode 100644 vendor/symfony/validator/Constraints/NegativeOrZero.php create mode 100644 vendor/symfony/validator/Constraints/NoSuspiciousCharacters.php create mode 100644 vendor/symfony/validator/Constraints/NoSuspiciousCharactersValidator.php create mode 100644 vendor/symfony/validator/Constraints/NotBlank.php create mode 100644 vendor/symfony/validator/Constraints/NotBlankValidator.php create mode 100644 vendor/symfony/validator/Constraints/NotCompromisedPassword.php create mode 100644 vendor/symfony/validator/Constraints/NotCompromisedPasswordValidator.php create mode 100644 vendor/symfony/validator/Constraints/NotEqualTo.php create mode 100644 vendor/symfony/validator/Constraints/NotEqualToValidator.php create mode 100644 vendor/symfony/validator/Constraints/NotIdenticalTo.php create mode 100644 vendor/symfony/validator/Constraints/NotIdenticalToValidator.php create mode 100644 vendor/symfony/validator/Constraints/NotNull.php create mode 100644 vendor/symfony/validator/Constraints/NotNullValidator.php create mode 100644 vendor/symfony/validator/Constraints/Optional.php create mode 100644 vendor/symfony/validator/Constraints/PasswordStrength.php create mode 100644 vendor/symfony/validator/Constraints/PasswordStrengthValidator.php create mode 100644 vendor/symfony/validator/Constraints/Positive.php create mode 100644 vendor/symfony/validator/Constraints/PositiveOrZero.php create mode 100644 vendor/symfony/validator/Constraints/Range.php create mode 100644 vendor/symfony/validator/Constraints/RangeValidator.php create mode 100644 vendor/symfony/validator/Constraints/Regex.php create mode 100644 vendor/symfony/validator/Constraints/RegexValidator.php create mode 100644 vendor/symfony/validator/Constraints/Required.php create mode 100644 vendor/symfony/validator/Constraints/Sequentially.php create mode 100644 vendor/symfony/validator/Constraints/SequentiallyValidator.php create mode 100644 vendor/symfony/validator/Constraints/Time.php create mode 100644 vendor/symfony/validator/Constraints/TimeValidator.php create mode 100644 vendor/symfony/validator/Constraints/Timezone.php create mode 100644 vendor/symfony/validator/Constraints/TimezoneValidator.php create mode 100644 vendor/symfony/validator/Constraints/Traverse.php create mode 100644 vendor/symfony/validator/Constraints/Type.php create mode 100644 vendor/symfony/validator/Constraints/TypeValidator.php create mode 100644 vendor/symfony/validator/Constraints/Ulid.php create mode 100644 vendor/symfony/validator/Constraints/UlidValidator.php create mode 100644 vendor/symfony/validator/Constraints/Unique.php create mode 100644 vendor/symfony/validator/Constraints/UniqueValidator.php create mode 100644 vendor/symfony/validator/Constraints/Url.php create mode 100644 vendor/symfony/validator/Constraints/UrlValidator.php create mode 100644 vendor/symfony/validator/Constraints/Uuid.php create mode 100644 vendor/symfony/validator/Constraints/UuidValidator.php create mode 100644 vendor/symfony/validator/Constraints/Valid.php create mode 100644 vendor/symfony/validator/Constraints/ValidValidator.php create mode 100644 vendor/symfony/validator/Constraints/Week.php create mode 100644 vendor/symfony/validator/Constraints/WeekValidator.php create mode 100644 vendor/symfony/validator/Constraints/When.php create mode 100644 vendor/symfony/validator/Constraints/WhenValidator.php create mode 100644 vendor/symfony/validator/Constraints/WordCount.php create mode 100644 vendor/symfony/validator/Constraints/WordCountValidator.php create mode 100644 vendor/symfony/validator/Constraints/Yaml.php create mode 100644 vendor/symfony/validator/Constraints/YamlValidator.php create mode 100644 vendor/symfony/validator/Constraints/ZeroComparisonConstraintTrait.php create mode 100644 vendor/symfony/validator/ContainerConstraintValidatorFactory.php create mode 100644 vendor/symfony/validator/Context/ExecutionContext.php create mode 100644 vendor/symfony/validator/Context/ExecutionContextFactory.php create mode 100644 vendor/symfony/validator/Context/ExecutionContextFactoryInterface.php create mode 100644 vendor/symfony/validator/Context/ExecutionContextInterface.php create mode 100644 vendor/symfony/validator/DataCollector/ValidatorDataCollector.php create mode 100644 vendor/symfony/validator/DependencyInjection/AddAutoMappingConfigurationPass.php create mode 100644 vendor/symfony/validator/DependencyInjection/AddConstraintValidatorsPass.php create mode 100644 vendor/symfony/validator/DependencyInjection/AddValidatorInitializersPass.php create mode 100644 vendor/symfony/validator/Exception/BadMethodCallException.php create mode 100644 vendor/symfony/validator/Exception/ConstraintDefinitionException.php create mode 100644 vendor/symfony/validator/Exception/ExceptionInterface.php create mode 100644 vendor/symfony/validator/Exception/GroupDefinitionException.php create mode 100644 vendor/symfony/validator/Exception/InvalidArgumentException.php create mode 100644 vendor/symfony/validator/Exception/InvalidOptionsException.php create mode 100644 vendor/symfony/validator/Exception/LogicException.php create mode 100644 vendor/symfony/validator/Exception/MappingException.php create mode 100644 vendor/symfony/validator/Exception/MissingOptionsException.php create mode 100644 vendor/symfony/validator/Exception/NoSuchMetadataException.php create mode 100644 vendor/symfony/validator/Exception/OutOfBoundsException.php create mode 100644 vendor/symfony/validator/Exception/RuntimeException.php create mode 100644 vendor/symfony/validator/Exception/UnexpectedTypeException.php create mode 100644 vendor/symfony/validator/Exception/UnexpectedValueException.php create mode 100644 vendor/symfony/validator/Exception/UnsupportedMetadataException.php create mode 100644 vendor/symfony/validator/Exception/ValidationFailedException.php create mode 100644 vendor/symfony/validator/Exception/ValidatorException.php create mode 100644 vendor/symfony/validator/GroupProviderInterface.php create mode 100644 vendor/symfony/validator/GroupSequenceProviderInterface.php create mode 100644 vendor/symfony/validator/LICENSE create mode 100644 vendor/symfony/validator/Mapping/AutoMappingStrategy.php create mode 100644 vendor/symfony/validator/Mapping/CascadingStrategy.php create mode 100644 vendor/symfony/validator/Mapping/ClassMetadata.php create mode 100644 vendor/symfony/validator/Mapping/ClassMetadataInterface.php create mode 100644 vendor/symfony/validator/Mapping/Factory/BlackHoleMetadataFactory.php create mode 100644 vendor/symfony/validator/Mapping/Factory/LazyLoadingMetadataFactory.php create mode 100644 vendor/symfony/validator/Mapping/Factory/MetadataFactoryInterface.php create mode 100644 vendor/symfony/validator/Mapping/GenericMetadata.php create mode 100644 vendor/symfony/validator/Mapping/GetterMetadata.php create mode 100644 vendor/symfony/validator/Mapping/Loader/AbstractLoader.php create mode 100644 vendor/symfony/validator/Mapping/Loader/AttributeLoader.php create mode 100644 vendor/symfony/validator/Mapping/Loader/AutoMappingTrait.php create mode 100644 vendor/symfony/validator/Mapping/Loader/FileLoader.php create mode 100644 vendor/symfony/validator/Mapping/Loader/FilesLoader.php create mode 100644 vendor/symfony/validator/Mapping/Loader/LoaderChain.php create mode 100644 vendor/symfony/validator/Mapping/Loader/LoaderInterface.php create mode 100644 vendor/symfony/validator/Mapping/Loader/PropertyInfoLoader.php create mode 100644 vendor/symfony/validator/Mapping/Loader/StaticMethodLoader.php create mode 100644 vendor/symfony/validator/Mapping/Loader/XmlFileLoader.php create mode 100644 vendor/symfony/validator/Mapping/Loader/XmlFilesLoader.php create mode 100644 vendor/symfony/validator/Mapping/Loader/YamlFileLoader.php create mode 100644 vendor/symfony/validator/Mapping/Loader/YamlFilesLoader.php create mode 100644 vendor/symfony/validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd create mode 100644 vendor/symfony/validator/Mapping/MemberMetadata.php create mode 100644 vendor/symfony/validator/Mapping/MetadataInterface.php create mode 100644 vendor/symfony/validator/Mapping/PropertyMetadata.php create mode 100644 vendor/symfony/validator/Mapping/PropertyMetadataInterface.php create mode 100644 vendor/symfony/validator/Mapping/TraversalStrategy.php create mode 100644 vendor/symfony/validator/ObjectInitializerInterface.php create mode 100644 vendor/symfony/validator/README.md create mode 100644 vendor/symfony/validator/Resources/translations/validators.af.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.ar.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.az.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.be.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.bg.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.bs.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.ca.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.cs.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.cy.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.da.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.de.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.el.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.en.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.es.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.et.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.eu.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.fa.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.fi.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.fr.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.gl.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.he.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.hr.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.hu.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.hy.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.id.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.it.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.ja.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.lb.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.lt.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.lv.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.mk.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.mn.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.my.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.nb.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.nl.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.nn.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.no.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.pl.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.pt.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.pt_BR.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.ro.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.ru.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.sk.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.sl.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.sq.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.sr_Cyrl.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.sv.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.th.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.tl.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.tr.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.uk.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.ur.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.uz.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.vi.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.zh_CN.xlf create mode 100644 vendor/symfony/validator/Resources/translations/validators.zh_TW.xlf create mode 100644 vendor/symfony/validator/Test/CompoundConstraintTestCase.php create mode 100644 vendor/symfony/validator/Test/ConstraintValidatorTestCase.php create mode 100644 vendor/symfony/validator/Util/PropertyPath.php create mode 100644 vendor/symfony/validator/Validation.php create mode 100644 vendor/symfony/validator/Validator/ContextualValidatorInterface.php create mode 100644 vendor/symfony/validator/Validator/LazyProperty.php create mode 100644 vendor/symfony/validator/Validator/RecursiveContextualValidator.php create mode 100644 vendor/symfony/validator/Validator/RecursiveValidator.php create mode 100644 vendor/symfony/validator/Validator/TraceableValidator.php create mode 100644 vendor/symfony/validator/Validator/ValidatorInterface.php create mode 100644 vendor/symfony/validator/ValidatorBuilder.php create mode 100644 vendor/symfony/validator/Violation/ConstraintViolationBuilder.php create mode 100644 vendor/symfony/validator/Violation/ConstraintViolationBuilderInterface.php create mode 100644 vendor/symfony/validator/composer.json create mode 100644 vendor/symfony/yaml/CHANGELOG.md create mode 100644 vendor/symfony/yaml/Command/LintCommand.php create mode 100644 vendor/symfony/yaml/Dumper.php create mode 100644 vendor/symfony/yaml/Escaper.php create mode 100644 vendor/symfony/yaml/Exception/DumpException.php create mode 100644 vendor/symfony/yaml/Exception/ExceptionInterface.php create mode 100644 vendor/symfony/yaml/Exception/ParseException.php create mode 100644 vendor/symfony/yaml/Exception/RuntimeException.php create mode 100644 vendor/symfony/yaml/Inline.php create mode 100644 vendor/symfony/yaml/LICENSE create mode 100644 vendor/symfony/yaml/Parser.php create mode 100644 vendor/symfony/yaml/README.md create mode 100755 vendor/symfony/yaml/Resources/bin/yaml-lint create mode 100644 vendor/symfony/yaml/Tag/TaggedValue.php create mode 100644 vendor/symfony/yaml/Unescaper.php create mode 100644 vendor/symfony/yaml/Yaml.php create mode 100644 vendor/symfony/yaml/composer.json create mode 100644 vendor/zetacomponents/base/.github/workflows/ci.yml create mode 100644 vendor/zetacomponents/base/.github/workflows/coding-standard.yml create mode 100644 vendor/zetacomponents/base/.gitignore create mode 100644 vendor/zetacomponents/base/CREDITS create mode 100644 vendor/zetacomponents/base/ChangeLog create mode 100644 vendor/zetacomponents/base/DESCRIPTION create mode 100644 vendor/zetacomponents/base/LICENSE.txt create mode 100644 vendor/zetacomponents/base/composer.json create mode 100644 vendor/zetacomponents/base/design/class_diagram.png create mode 100644 vendor/zetacomponents/base/design/design.txt create mode 100644 vendor/zetacomponents/base/docs/repos/Me/myclass1.php create mode 100644 vendor/zetacomponents/base/docs/repos/Me/myclass2.php create mode 100644 vendor/zetacomponents/base/docs/repos/You/yourclass1.php create mode 100644 vendor/zetacomponents/base/docs/repos/You/yourclass2.php create mode 100644 vendor/zetacomponents/base/docs/repos/autoloads/my_autoload.php create mode 100644 vendor/zetacomponents/base/docs/repos/autoloads/your_autoload.php create mode 100644 vendor/zetacomponents/base/docs/tutorial.txt create mode 100644 vendor/zetacomponents/base/docs/tutorial_autoload.php create mode 100644 vendor/zetacomponents/base/docs/tutorial_example_01.php create mode 100644 vendor/zetacomponents/base/docs/tutorial_example_02.php create mode 100644 vendor/zetacomponents/base/docs/tutorial_example_03.php create mode 100644 vendor/zetacomponents/base/docs/tutorial_example_04.php create mode 100644 vendor/zetacomponents/base/docs/tutorial_lazy_initialization.php create mode 100644 vendor/zetacomponents/base/phpcs.xml.dist create mode 100644 vendor/zetacomponents/base/phpunit.xml.dist create mode 100644 vendor/zetacomponents/base/review-1.5.txt create mode 100644 vendor/zetacomponents/base/src/base.php create mode 100644 vendor/zetacomponents/base/src/base_autoload.php create mode 100644 vendor/zetacomponents/base/src/exceptions/autoload.php create mode 100644 vendor/zetacomponents/base/src/exceptions/double_class_repository_prefix.php create mode 100644 vendor/zetacomponents/base/src/exceptions/exception.php create mode 100644 vendor/zetacomponents/base/src/exceptions/extension_not_found.php create mode 100644 vendor/zetacomponents/base/src/exceptions/file_exception.php create mode 100644 vendor/zetacomponents/base/src/exceptions/file_io.php create mode 100644 vendor/zetacomponents/base/src/exceptions/file_not_found.php create mode 100644 vendor/zetacomponents/base/src/exceptions/file_permission.php create mode 100644 vendor/zetacomponents/base/src/exceptions/functionality_not_supported.php create mode 100644 vendor/zetacomponents/base/src/exceptions/init_callback_configured.php create mode 100644 vendor/zetacomponents/base/src/exceptions/invalid_callback_class.php create mode 100644 vendor/zetacomponents/base/src/exceptions/invalid_parent_class.php create mode 100644 vendor/zetacomponents/base/src/exceptions/property_not_found.php create mode 100644 vendor/zetacomponents/base/src/exceptions/property_permission.php create mode 100644 vendor/zetacomponents/base/src/exceptions/setting_not_found.php create mode 100644 vendor/zetacomponents/base/src/exceptions/setting_value.php create mode 100644 vendor/zetacomponents/base/src/exceptions/value.php create mode 100644 vendor/zetacomponents/base/src/exceptions/whatever.php create mode 100644 vendor/zetacomponents/base/src/ezc_bootstrap.php create mode 100644 vendor/zetacomponents/base/src/features.php create mode 100644 vendor/zetacomponents/base/src/file.php create mode 100644 vendor/zetacomponents/base/src/init.php create mode 100644 vendor/zetacomponents/base/src/interfaces/configuration_initializer.php create mode 100644 vendor/zetacomponents/base/src/interfaces/exportable.php create mode 100644 vendor/zetacomponents/base/src/interfaces/persistable.php create mode 100644 vendor/zetacomponents/base/src/metadata.php create mode 100644 vendor/zetacomponents/base/src/metadata/pear.php create mode 100644 vendor/zetacomponents/base/src/metadata/tarball.php create mode 100644 vendor/zetacomponents/base/src/options.php create mode 100644 vendor/zetacomponents/base/src/options/autoload.php create mode 100644 vendor/zetacomponents/base/src/struct.php create mode 100644 vendor/zetacomponents/base/src/structs/file_find_context.php create mode 100644 vendor/zetacomponents/base/src/structs/repository_directory.php create mode 100644 vendor/zetacomponents/base/tests/autoload/autoload.php create mode 100644 vendor/zetacomponents/base/tests/base_init_test.php create mode 100644 vendor/zetacomponents/base/tests/base_options_test.php create mode 100644 vendor/zetacomponents/base/tests/base_test.php create mode 100644 vendor/zetacomponents/base/tests/bootstrap.php create mode 100644 vendor/zetacomponents/base/tests/check_tarball.php create mode 100644 vendor/zetacomponents/base/tests/extra_repository/Translation/test.php create mode 100644 vendor/zetacomponents/base/tests/extra_repository/autoload/translation_autoload.php create mode 100644 vendor/zetacomponents/base/tests/features_unix_test.php create mode 100644 vendor/zetacomponents/base/tests/features_windows_test.php create mode 100644 vendor/zetacomponents/base/tests/file_calculate_relative_path_test.php create mode 100644 vendor/zetacomponents/base/tests/file_copy_recursive_test.php create mode 100644 vendor/zetacomponents/base/tests/file_find_recursive_test.php create mode 100644 vendor/zetacomponents/base/tests/file_is_absolute_path.php create mode 100644 vendor/zetacomponents/base/tests/file_remove_recursive_test.php create mode 100644 vendor/zetacomponents/base/tests/init/base_init_callback.php create mode 100644 vendor/zetacomponents/base/tests/init/base_init_class.php create mode 100644 vendor/zetacomponents/base/tests/issue15896/ab.php create mode 100644 vendor/zetacomponents/base/tests/issue15896/autoload/autoload.php create mode 100644 vendor/zetacomponents/base/tests/metadata_pear_test.php create mode 100644 vendor/zetacomponents/base/tests/struct_test.php create mode 100644 vendor/zetacomponents/base/tests/test_options.php create mode 100644 vendor/zetacomponents/base/tests/test_repository/TestClasses/base_test_class.php create mode 100644 vendor/zetacomponents/base/tests/test_repository/TestClasses/base_test_class_number_two.php create mode 100644 vendor/zetacomponents/base/tests/test_repository/TestClasses/base_test_long_class.php create mode 100644 vendor/zetacomponents/base/tests/test_repository/autoload_files/basetest_autoload.php create mode 100644 vendor/zetacomponents/base/tests/test_repository/autoload_files/basetest_long_autoload.php create mode 100644 vendor/zetacomponents/base/tests/test_repository/autoload_files/objet_autoload.php create mode 100644 vendor/zetacomponents/base/tests/test_repository/object/object.php create mode 100644 vendor/zetacomponents/mail/.github/workflows/ci.yml create mode 100644 vendor/zetacomponents/mail/.gitignore create mode 100644 vendor/zetacomponents/mail/CREDITS create mode 100644 vendor/zetacomponents/mail/ChangeLog create mode 100644 vendor/zetacomponents/mail/DESCRIPTION create mode 100644 vendor/zetacomponents/mail/LICENSE.txt create mode 100644 vendor/zetacomponents/mail/composer.json create mode 100644 vendor/zetacomponents/mail/design/class_diagram.png create mode 100644 vendor/zetacomponents/mail/design/design.txt create mode 100644 vendor/zetacomponents/mail/design/mail.png create mode 100644 vendor/zetacomponents/mail/design/mail.xml create mode 100644 vendor/zetacomponents/mail/design/transport.png create mode 100644 vendor/zetacomponents/mail/docs/display-example.txt create mode 100644 vendor/zetacomponents/mail/docs/display-example/display-example.php create mode 100644 vendor/zetacomponents/mail/docs/mail-listing-example.txt create mode 100644 vendor/zetacomponents/mail/docs/mail-listing-example/app.ini create mode 100644 vendor/zetacomponents/mail/docs/mail-listing-example/app/paging_links.php create mode 100644 vendor/zetacomponents/mail/docs/mail-listing-example/mail.php create mode 100644 vendor/zetacomponents/mail/docs/mail-listing-example/templates/mail_listing.ezt create mode 100644 vendor/zetacomponents/mail/docs/rfcs.txt create mode 100644 vendor/zetacomponents/mail/docs/tutorial.txt create mode 100644 vendor/zetacomponents/mail/docs/tutorial/test-mail.mail create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_autoload.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_charset.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_composer.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_composer_attachments.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_extend_create.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_extend_use.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_html_display.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_imap.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_imap_extra.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_imap_ssl.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_imap_uids.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_mail_attachments.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_mail_simple.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_mbox.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_parse.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_pop3.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_pop3_options.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_smtp_auth.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_smtp_ssl.php create mode 100644 vendor/zetacomponents/mail/docs/tutorial/tutorial_tools.php create mode 100644 vendor/zetacomponents/mail/phpunit.xml.dist create mode 100644 vendor/zetacomponents/mail/review-1.4.txt create mode 100644 vendor/zetacomponents/mail/review-1.5.txt create mode 100644 vendor/zetacomponents/mail/review-1.7.txt create mode 100644 vendor/zetacomponents/mail/review.txt create mode 100644 vendor/zetacomponents/mail/src/composer.php create mode 100644 vendor/zetacomponents/mail/src/exceptions/invalid_limit.php create mode 100644 vendor/zetacomponents/mail/src/exceptions/mail_exception.php create mode 100644 vendor/zetacomponents/mail/src/exceptions/no_such_message.php create mode 100644 vendor/zetacomponents/mail/src/exceptions/offset_out_of_range.php create mode 100644 vendor/zetacomponents/mail/src/exceptions/transport_exception.php create mode 100644 vendor/zetacomponents/mail/src/exceptions/transport_smtp_exception.php create mode 100644 vendor/zetacomponents/mail/src/interfaces/part.php create mode 100644 vendor/zetacomponents/mail/src/interfaces/transport.php create mode 100644 vendor/zetacomponents/mail/src/internal/charset_convert.php create mode 100644 vendor/zetacomponents/mail/src/internal/header_folder.php create mode 100644 vendor/zetacomponents/mail/src/mail.php create mode 100644 vendor/zetacomponents/mail/src/mail_autoload.php create mode 100644 vendor/zetacomponents/mail/src/options/composer_options.php create mode 100644 vendor/zetacomponents/mail/src/options/imap_options.php create mode 100644 vendor/zetacomponents/mail/src/options/imap_set_options.php create mode 100644 vendor/zetacomponents/mail/src/options/mail_options.php create mode 100644 vendor/zetacomponents/mail/src/options/parser_options.php create mode 100644 vendor/zetacomponents/mail/src/options/pop3_options.php create mode 100644 vendor/zetacomponents/mail/src/options/smtp_options.php create mode 100644 vendor/zetacomponents/mail/src/options/transport_options.php create mode 100644 vendor/zetacomponents/mail/src/parser/headers_holder.php create mode 100644 vendor/zetacomponents/mail/src/parser/interfaces/parser_set.php create mode 100644 vendor/zetacomponents/mail/src/parser/interfaces/part_parser.php create mode 100644 vendor/zetacomponents/mail/src/parser/parser.php create mode 100644 vendor/zetacomponents/mail/src/parser/parts/delivery_status_parser.php create mode 100644 vendor/zetacomponents/mail/src/parser/parts/file_parser.php create mode 100644 vendor/zetacomponents/mail/src/parser/parts/multipart_alternative_parser.php create mode 100644 vendor/zetacomponents/mail/src/parser/parts/multipart_digest_parser.php create mode 100644 vendor/zetacomponents/mail/src/parser/parts/multipart_mixed_parser.php create mode 100644 vendor/zetacomponents/mail/src/parser/parts/multipart_parser.php create mode 100644 vendor/zetacomponents/mail/src/parser/parts/multipart_related_parser.php create mode 100644 vendor/zetacomponents/mail/src/parser/parts/multipart_report_parser.php create mode 100644 vendor/zetacomponents/mail/src/parser/parts/rfc822_digest_parser.php create mode 100644 vendor/zetacomponents/mail/src/parser/parts/rfc822_parser.php create mode 100644 vendor/zetacomponents/mail/src/parser/parts/text_parser.php create mode 100644 vendor/zetacomponents/mail/src/parser/rfc2231_implementation.php create mode 100644 vendor/zetacomponents/mail/src/parser/shutdown_handler.php create mode 100644 vendor/zetacomponents/mail/src/parts/delivery_status.php create mode 100644 vendor/zetacomponents/mail/src/parts/file.php create mode 100644 vendor/zetacomponents/mail/src/parts/fileparts/disk_file.php create mode 100644 vendor/zetacomponents/mail/src/parts/fileparts/stream_file.php create mode 100644 vendor/zetacomponents/mail/src/parts/fileparts/virtual_file.php create mode 100644 vendor/zetacomponents/mail/src/parts/multipart.php create mode 100644 vendor/zetacomponents/mail/src/parts/multiparts/multipart_alternative.php create mode 100644 vendor/zetacomponents/mail/src/parts/multiparts/multipart_digest.php create mode 100644 vendor/zetacomponents/mail/src/parts/multiparts/multipart_mixed.php create mode 100644 vendor/zetacomponents/mail/src/parts/multiparts/multipart_related.php create mode 100644 vendor/zetacomponents/mail/src/parts/multiparts/multipart_report.php create mode 100644 vendor/zetacomponents/mail/src/parts/rfc822_digest.php create mode 100644 vendor/zetacomponents/mail/src/parts/text.php create mode 100644 vendor/zetacomponents/mail/src/structs/content_disposition_header.php create mode 100644 vendor/zetacomponents/mail/src/structs/mail_address.php create mode 100644 vendor/zetacomponents/mail/src/structs/walk_context.php create mode 100644 vendor/zetacomponents/mail/src/tools.php create mode 100644 vendor/zetacomponents/mail/src/transports/file/file_set.php create mode 100644 vendor/zetacomponents/mail/src/transports/imap/imap_set.php create mode 100644 vendor/zetacomponents/mail/src/transports/imap/imap_transport.php create mode 100644 vendor/zetacomponents/mail/src/transports/mbox/mbox_set.php create mode 100644 vendor/zetacomponents/mail/src/transports/mbox/mbox_transport.php create mode 100644 vendor/zetacomponents/mail/src/transports/mta/mta_transport.php create mode 100644 vendor/zetacomponents/mail/src/transports/mta/transport_mta.php create mode 100644 vendor/zetacomponents/mail/src/transports/pop3/pop3_set.php create mode 100644 vendor/zetacomponents/mail/src/transports/pop3/pop3_transport.php create mode 100644 vendor/zetacomponents/mail/src/transports/smtp/smtp_transport.php create mode 100644 vendor/zetacomponents/mail/src/transports/smtp/transport_smtp.php create mode 100644 vendor/zetacomponents/mail/src/transports/storage/storage_set.php create mode 100644 vendor/zetacomponents/mail/src/transports/transport_connection.php create mode 100644 vendor/zetacomponents/mail/src/transports/variable/var_set.php create mode 100644 vendor/zetacomponents/mail/tests/bootstrap.php create mode 100644 vendor/zetacomponents/mail/tests/composer_test.php create mode 100644 vendor/zetacomponents/mail/tests/header_folder_test.php create mode 100644 vendor/zetacomponents/mail/tests/interfaces/part_test.php create mode 100644 vendor/zetacomponents/mail/tests/mail_test.php create mode 100644 vendor/zetacomponents/mail/tests/options/classes/custom_classes.php create mode 100644 vendor/zetacomponents/mail/tests/options/mail_options_test.php create mode 100644 vendor/zetacomponents/mail/tests/options/parser_options_test.php create mode 100644 vendor/zetacomponents/mail/tests/options/transport_options_test.php create mode 100644 vendor/zetacomponents/mail/tests/parser/data/classes/custom_classes.php create mode 100644 vendor/zetacomponents/mail/tests/parser/data/drafts/postponed-msgs-pine.mbox create mode 100644 vendor/zetacomponents/mail/tests/parser/data/gmail/html_mail.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/gmail/mail_with_attachment.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/gmail/mail_with_norwegian_characters.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/gmail/simple_mail_with_text_subject_and_body.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/hotmail/mail_with_attachment.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/hotmail/mail_with_norwegian_characters.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/hotmail/simple_mail_with_text_subject_and_body.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/kmail/html_mail.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/kmail/mail_with_attachment.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/kmail/mail_with_digest.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/kmail/mail_with_iso-8859-1_encoding.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/kmail/simple_mail_with_text_subject_and_body.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/mail.app/html_mail_with_image.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/opera/mail_with_attachment.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/opera/mail_with_norwegian_characters.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/opera/simple_mail_with_text_subject_and_body.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/pine/mail_with_attachment.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/pine/mail_with_norwegian_characters.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/pine/simple_mail_with_text_subject_and_body.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/pine/three_message_digest.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/pine/uppercase-charset.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/attachment_only_horizontal_tab_in_filename.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/attachment_with_long_filename.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/attachment_with_slash.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/attachment_without_filename.mail create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/default-disposition-header create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/mail-with-broken-charset-header create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/multipart-report create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/multipart-report-multiple-deliveries create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/multiple-received-headers create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/multiple_recipients create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/quoted-printable-mac create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-RFC2184-header create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-bounced create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-broken-iconv-1 create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-broken-iconv-2 create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-broken-mime-encoded-string create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-broken-multipart-related create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-digest-in-digest create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-fetch-parts-empty-body create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-filename-with-space create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-header-no-space create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-header-with-tab create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-html-inline-images create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-html-text-and-attachment create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-html-text-and-attachment-weird-content-type-header create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-html-text-and-text-attachment create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-lowercase-hex-chars-in-mime-encoding create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-mbox-PGP create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-mbox-russian create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-mime-header-x-unknown create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-mime-subject-broken create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-soft-lineending create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-text-lineendings create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-unrecognized-mime create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-unrecognized-subtype create mode 100644 vendor/zetacomponents/mail/tests/parser/data/various/test-utf8-in-filename create mode 100644 vendor/zetacomponents/mail/tests/parser/headers_holder_test.php create mode 100644 vendor/zetacomponents/mail/tests/parser/parser_test.php create mode 100644 vendor/zetacomponents/mail/tests/parser/parts/delivery_status_parser.php create mode 100644 vendor/zetacomponents/mail/tests/parser/parts/multipart_mixed_test.php create mode 100644 vendor/zetacomponents/mail/tests/parser/rfc2231_implementation_test.php create mode 100644 vendor/zetacomponents/mail/tests/parser/walk_context_test.php create mode 100644 vendor/zetacomponents/mail/tests/parts/data/ezcMailFilePartTest_testGenerateBase64.data create mode 100644 vendor/zetacomponents/mail/tests/parts/data/ezcMailMultiPartTest_customNoMimeMessage.data create mode 100644 vendor/zetacomponents/mail/tests/parts/data/ezcMailMultiPartTest_testGenerate.data create mode 100644 vendor/zetacomponents/mail/tests/parts/data/ezcMailMultipartDigestTest_multiple_digest.data create mode 100644 vendor/zetacomponents/mail/tests/parts/data/ezcMailMultipartDigestTest_singleMail.data create mode 100644 vendor/zetacomponents/mail/tests/parts/data/ezcMailRfc822DigestTest_testDefault.data create mode 100644 vendor/zetacomponents/mail/tests/parts/data/fly with whitespace.jpg create mode 100644 vendor/zetacomponents/mail/tests/parts/data/fly.jpg create mode 100644 vendor/zetacomponents/mail/tests/parts/file_part_test.php create mode 100644 vendor/zetacomponents/mail/tests/parts/multipart_digest_test.php create mode 100644 vendor/zetacomponents/mail/tests/parts/multipart_test.php create mode 100644 vendor/zetacomponents/mail/tests/parts/rfc822_digest_test.php create mode 100644 vendor/zetacomponents/mail/tests/parts/stream_file_part_test.php create mode 100644 vendor/zetacomponents/mail/tests/parts/text_part_test.php create mode 100644 vendor/zetacomponents/mail/tests/parts/virtual_file_part_test.php create mode 100644 vendor/zetacomponents/mail/tests/tools/data/addresses_correct.txt create mode 100644 vendor/zetacomponents/mail/tests/tools/data/addresses_correct_mx.txt create mode 100644 vendor/zetacomponents/mail/tests/tools/data/addresses_incorrect.txt create mode 100644 vendor/zetacomponents/mail/tests/tools/data/addresses_incorrect_mx.txt create mode 100644 vendor/zetacomponents/mail/tests/tools_test.php create mode 100644 vendor/zetacomponents/mail/tests/transports/data/empty-no-header.mbox create mode 100644 vendor/zetacomponents/mail/tests/transports/data/empty.mbox create mode 100644 vendor/zetacomponents/mail/tests/transports/data/one-mail-no-header.mbox create mode 100644 vendor/zetacomponents/mail/tests/transports/data/one-mail.mbox create mode 100644 vendor/zetacomponents/mail/tests/transports/data/parse-script.php create mode 100644 vendor/zetacomponents/mail/tests/transports/data/shark create mode 100644 vendor/zetacomponents/mail/tests/transports/data/shark_append create mode 100644 vendor/zetacomponents/mail/tests/transports/data/shark_wrong_body_ending create mode 100644 vendor/zetacomponents/mail/tests/transports/data/tab.mbox create mode 100644 vendor/zetacomponents/mail/tests/transports/data/test-mbox create mode 100644 vendor/zetacomponents/mail/tests/transports/data/test-variable create mode 100644 vendor/zetacomponents/mail/tests/transports/data/testlimit-mbox create mode 100644 vendor/zetacomponents/mail/tests/transports/data/unknown-charsets.mbox create mode 100644 vendor/zetacomponents/mail/tests/transports/transport_file_test.php create mode 100644 vendor/zetacomponents/mail/tests/transports/transport_imap_test.php create mode 100644 vendor/zetacomponents/mail/tests/transports/transport_imap_uid_test.php create mode 100644 vendor/zetacomponents/mail/tests/transports/transport_mbox_test.php create mode 100644 vendor/zetacomponents/mail/tests/transports/transport_mta_test.php create mode 100644 vendor/zetacomponents/mail/tests/transports/transport_pop3_test.php create mode 100644 vendor/zetacomponents/mail/tests/transports/transport_smtp_auth_test.php create mode 100644 vendor/zetacomponents/mail/tests/transports/transport_smtp_test.php create mode 100644 vendor/zetacomponents/mail/tests/transports/transport_storage_test.php create mode 100644 vendor/zetacomponents/mail/tests/transports/transport_variable_test.php create mode 100644 vendor/zetacomponents/mail/tests/transports/wrappers/imap_custom_wrapper.php create mode 100644 vendor/zetacomponents/mail/tests/transports/wrappers/imap_wrapper.php create mode 100644 vendor/zetacomponents/mail/tests/transports/wrappers/pop3_wrapper.php create mode 100644 vendor/zetacomponents/mail/tests/transports/wrappers/smtp_wrapper.php create mode 100644 vendor/zetacomponents/mail/tests/tutorial_examples.php diff --git a/composer.json b/composer.json new file mode 100644 index 000000000..ee0c5eec8 --- /dev/null +++ b/composer.json @@ -0,0 +1,10 @@ +{ + "require": { + "horstoeko/zugferd": "^1.0", + "zetacomponents/mail": "^1.10", + "num-num/ubl-invoice": "^1.21", + "php-curl-class/php-curl-class": "^12.0", + "chillerlan/php-authenticator": "^5.2", + "endroid/qr-code": "^6.0" + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 000000000..4e866e855 --- /dev/null +++ b/composer.lock @@ -0,0 +1,2290 @@ +{ + "_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": "03e0b831d2d0674eac8b1d9fb8f1a615", + "packages": [ + { + "name": "bacon/bacon-qr-code", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/Bacon/BaconQrCode.git", + "reference": "f9cc1f52b5a463062251d666761178dbdb6b544f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/f9cc1f52b5a463062251d666761178dbdb6b544f", + "reference": "f9cc1f52b5a463062251d666761178dbdb6b544f", + "shasum": "" + }, + "require": { + "dasprid/enum": "^1.0.3", + "ext-iconv": "*", + "php": "^8.1" + }, + "require-dev": { + "phly/keep-a-changelog": "^2.12", + "phpunit/phpunit": "^10.5.11 || 11.0.4", + "spatie/phpunit-snapshot-assertions": "^5.1.5", + "squizlabs/php_codesniffer": "^3.9" + }, + "suggest": { + "ext-imagick": "to generate QR code images" + }, + "type": "library", + "autoload": { + "psr-4": { + "BaconQrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "BaconQrCode is a QR code generator for PHP.", + "homepage": "https://github.com/Bacon/BaconQrCode", + "support": { + "issues": "https://github.com/Bacon/BaconQrCode/issues", + "source": "https://github.com/Bacon/BaconQrCode/tree/v3.0.1" + }, + "time": "2024-10-01T13:55:55+00:00" + }, + { + "name": "chillerlan/php-authenticator", + "version": "5.2.1", + "source": { + "type": "git", + "url": "https://github.com/chillerlan/php-authenticator.git", + "reference": "040318f0055421ff1ee52f6afa13e5f60a88ade9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/chillerlan/php-authenticator/zipball/040318f0055421ff1ee52f6afa13e5f60a88ade9", + "reference": "040318f0055421ff1ee52f6afa13e5f60a88ade9", + "shasum": "" + }, + "require": { + "chillerlan/php-settings-container": "^3.2.1", + "paragonie/constant_time_encoding": "^3.0", + "php": "^8.2" + }, + "require-dev": { + "ext-curl": "*", + "ext-json": "*", + "ext-sodium": "*", + "phpmd/phpmd": "^2.15", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-deprecation-rules": "^1.2", + "phpunit/phpunit": "^11.2", + "squizlabs/php_codesniffer": "^3.10" + }, + "suggest": { + "chillerlan/php-qrcode": "Create QR Codes for use with an authenticator app." + }, + "type": "library", + "autoload": { + "psr-4": { + "chillerlan\\Authenticator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" + }, + { + "name": "Contributors", + "homepage": "https://github.com/chillerlan/php-authenticator/graphs/contributors" + } + ], + "description": "A generator for counter- and time based 2-factor authentication codes (Google Authenticator). PHP 8.2+", + "homepage": "https://github.com/chillerlan/php-authenticator", + "keywords": [ + "2fa", + "MFA", + "authenticator", + "google2fa", + "hotp", + "otp", + "rfc4226", + "rfc6238", + "tfa", + "totp", + "two factor" + ], + "support": { + "issues": "https://github.com/chillerlan/php-authenticator/issues", + "source": "https://github.com/chillerlan/php-authenticator" + }, + "funding": [ + { + "url": "https://ko-fi.com/codemasher", + "type": "Ko-Fi" + } + ], + "time": "2024-07-16T23:53:16+00:00" + }, + { + "name": "chillerlan/php-settings-container", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/chillerlan/php-settings-container.git", + "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/95ed3e9676a1d47cab2e3174d19b43f5dbf52681", + "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^8.1" + }, + "require-dev": { + "phpmd/phpmd": "^2.15", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-deprecation-rules": "^1.2", + "phpunit/phpunit": "^10.5", + "squizlabs/php_codesniffer": "^3.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "chillerlan\\Settings\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" + } + ], + "description": "A container class for immutable settings objects. Not a DI container.", + "homepage": "https://github.com/chillerlan/php-settings-container", + "keywords": [ + "Settings", + "configuration", + "container", + "helper" + ], + "support": { + "issues": "https://github.com/chillerlan/php-settings-container/issues", + "source": "https://github.com/chillerlan/php-settings-container" + }, + "funding": [ + { + "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4", + "type": "custom" + }, + { + "url": "https://ko-fi.com/codemasher", + "type": "ko_fi" + } + ], + "time": "2024-07-16T11:13:48+00:00" + }, + { + "name": "dasprid/enum", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/DASPRiD/Enum.git", + "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/8dfd07c6d2cf31c8da90c53b83c026c7696dda90", + "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90", + "shasum": "" + }, + "require": { + "php": ">=7.1 <9.0" + }, + "require-dev": { + "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11", + "squizlabs/php_codesniffer": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "DASPRiD\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "PHP 7.1 enum implementation", + "keywords": [ + "enum", + "map" + ], + "support": { + "issues": "https://github.com/DASPRiD/Enum/issues", + "source": "https://github.com/DASPRiD/Enum/tree/1.0.6" + }, + "time": "2024-08-09T14:30:48+00:00" + }, + { + "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": "endroid/qr-code", + "version": "6.0.9", + "source": { + "type": "git", + "url": "https://github.com/endroid/qr-code.git", + "reference": "21e888e8597440b2205e2e5c484b6c8e556bcd1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/endroid/qr-code/zipball/21e888e8597440b2205e2e5c484b6c8e556bcd1a", + "reference": "21e888e8597440b2205e2e5c484b6c8e556bcd1a", + "shasum": "" + }, + "require": { + "bacon/bacon-qr-code": "^3.0", + "php": "^8.2" + }, + "require-dev": { + "endroid/quality": "dev-main", + "ext-gd": "*", + "khanamiryan/qrcode-detector-decoder": "^2.0.2", + "setasign/fpdf": "^1.8.2" + }, + "suggest": { + "ext-gd": "Enables you to write PNG images", + "khanamiryan/qrcode-detector-decoder": "Enables you to use the image validator", + "roave/security-advisories": "Makes sure package versions with known security issues are not installed", + "setasign/fpdf": "Enables you to use the PDF writer" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Endroid\\QrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeroen van den Enden", + "email": "info@endroid.nl" + } + ], + "description": "Endroid QR Code", + "homepage": "https://github.com/endroid/qr-code", + "keywords": [ + "code", + "endroid", + "php", + "qr", + "qrcode" + ], + "support": { + "issues": "https://github.com/endroid/qr-code/issues", + "source": "https://github.com/endroid/qr-code/tree/6.0.9" + }, + "funding": [ + { + "url": "https://github.com/endroid", + "type": "github" + } + ], + "time": "2025-07-13T19:59:45+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.8", + "source": { + "type": "git", + "url": "https://github.com/horstoeko/mimedb.git", + "reference": "2d50f2b6bf63f14741514682869b53fc97232308" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/horstoeko/mimedb/zipball/2d50f2b6bf63f14741514682869b53fc97232308", + "reference": "2d50f2b6bf63f14741514682869b53fc97232308", + "shasum": "" + }, + "require": { + "php": ">=7.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.8" + }, + "time": "2024-12-03T10:57:28+00:00" + }, + { + "name": "horstoeko/stringmanagement", + "version": "v1.0.12", + "source": { + "type": "git", + "url": "https://github.com/horstoeko/stringmanagement.git", + "reference": "d304a094e34c39d35f275bccf4944176dd8f1722" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/horstoeko/stringmanagement/zipball/d304a094e34c39d35f275bccf4944176dd8f1722", + "reference": "d304a094e34c39d35f275bccf4944176dd8f1722", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "nette/php-generator": "*", + "pdepend/pdepend": "^2", + "phpdocumentor/reflection-docblock": "^5", + "phploc/phploc": "^7", + "phpmd/phpmd": "^2", + "phpstan/phpstan": "^1|^2", + "phpunit/phpunit": "^9", + "rector/rector": "*", + "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.12" + }, + "time": "2025-03-15T09:04:46+00:00" + }, + { + "name": "horstoeko/zugferd", + "version": "v1.0.115", + "source": { + "type": "git", + "url": "https://github.com/horstoeko/zugferd.git", + "reference": "9bbf0c06942645001d10e88d6e26ff6d8983da2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/horstoeko/zugferd/zipball/9bbf0c06942645001d10e88d6e26ff6d8983da2c", + "reference": "9bbf0c06942645001d10e88d6e26ff6d8983da2c", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "goetas-webservices/xsd2php-runtime": "^0.2.13", + "horstoeko/mimedb": "^1", + "horstoeko/stringmanagement": "^1", + "jms/serializer": "^3", + "php": ">=7.3", + "setasign/fpdf": "^1", + "setasign/fpdi": "^2", + "smalot/pdfparser": "^0|^2", + "symfony/finder": "^5|^6|^7", + "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", + "phpdocumentor/reflection-docblock": "^5", + "phploc/phploc": "^7", + "phpmd/phpmd": "^2", + "phpstan/phpstan": "^1|^2", + "phpunit/phpunit": "^9", + "rector/rector": "*", + "sebastian/phpcpd": "^6", + "squizlabs/php_codesniffer": "^3" + }, + "type": "package", + "autoload": { + "psr-4": { + "horstoeko\\zugferd\\": "src" + } + }, + "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.115" + }, + "time": "2025-06-06T08:14:02+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.32.5", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/serializer.git", + "reference": "7c88b1b02ff868eecc870eeddbb3b1250e4bd89c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/7c88b1b02ff868eecc870eeddbb3b1250e4bd89c", + "reference": "7c88b1b02ff868eecc870eeddbb3b1250e4bd89c", + "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 || ^2.0" + }, + "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": "^2.0", + "phpunit/phpunit": "^9.0 || ^10.0 || ^11.0", + "psr/container": "^1.0 || ^2.0", + "rector/rector": "^1.0.0 || ^2.0@dev", + "slevomat/coding-standard": "dev-master#f2cc4c553eae68772624ffd7dd99022343b69c31 as 8.11.9999", + "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.32.5" + }, + "funding": [ + { + "url": "https://github.com/goetas", + "type": "github" + }, + { + "url": "https://github.com/scyzoryck", + "type": "github" + } + ], + "time": "2025-05-26T15:55:41+00:00" + }, + { + "name": "num-num/ubl-invoice", + "version": "v1.21.2", + "source": { + "type": "git", + "url": "https://github.com/num-num/ubl-invoice.git", + "reference": "195712b3071e23c5aaa6fe95cb9e2de55c3d1348" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/num-num/ubl-invoice/zipball/195712b3071e23c5aaa6fe95cb9e2de55c3d1348", + "reference": "195712b3071e23c5aaa6fe95cb9e2de55c3d1348", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0", + "sabre/xml": "^4.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "NumNum\\UBL\\": [ + "src" + ], + "NumNum\\UBL\\Tests\\": [ + "tests" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bert Devriese", + "email": "bert@numnum.be", + "homepage": "https://www.numnum.be", + "role": "Developer" + } + ], + "description": "A modern object-oriented PHP library to create valid UBL and Peppol BIS 3.0 files", + "homepage": "https://github.com/num-num/ubl-invoice", + "keywords": [ + "E-Invoice", + "digital invoice", + "efff", + "einvoice", + "electronic invoice", + "euinvoice", + "invoice", + "peppol", + "peppol bis", + "peppol invoice", + "peppolbis", + "ubl", + "ubl invoice", + "ublinvoice", + "xml", + "xml invoice" + ], + "support": { + "issues": "https://github.com/num-num/ubl-invoice/issues", + "source": "https://github.com/num-num/ubl-invoice/tree/v1.21.2" + }, + "time": "2025-07-01T11:58:25+00:00" + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512", + "shasum": "" + }, + "require": { + "php": "^8" + }, + "require-dev": { + "phpunit/phpunit": "^9", + "vimeo/psalm": "^4|^5" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + }, + "time": "2024-05-08T12:36:18+00:00" + }, + { + "name": "php-curl-class/php-curl-class", + "version": "12.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-curl-class/php-curl-class.git", + "reference": "7a8f05efb18bb865dbce864b8fd34d4f5d920c74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-curl-class/php-curl-class/zipball/7a8f05efb18bb865dbce864b8fd34d4f5d920c74", + "reference": "7a8f05efb18bb865dbce864b8fd34d4f5d920c74", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "*", + "ext-gd": "*", + "friendsofphp/php-cs-fixer": "*", + "phpcompatibility/php-compatibility": "dev-develop", + "phpcsstandards/phpcsutils": "@alpha", + "phpstan/phpstan": "*", + "phpunit/phpunit": "*", + "squizlabs/php_codesniffer": "*" + }, + "suggest": { + "ext-mbstring": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "Curl\\": "src/Curl/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Unlicense" + ], + "authors": [ + { + "name": "Zach Borboa" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-curl-class/php-curl-class/graphs/contributors" + } + ], + "description": "PHP Curl Class makes it easy to send HTTP requests and integrate with web APIs.", + "homepage": "https://github.com/php-curl-class/php-curl-class", + "keywords": [ + "API-Client", + "api", + "class", + "client", + "curl", + "framework", + "http", + "http-client", + "http-proxy", + "json", + "php", + "php-curl", + "php-curl-library", + "proxy", + "requests", + "restful", + "web-scraper", + "web-scraping ", + "web-service", + "xml" + ], + "support": { + "issues": "https://github.com/php-curl-class/php-curl-class/issues", + "source": "https://github.com/php-curl-class/php-curl-class/tree/12.0.0" + }, + "time": "2025-03-25T18:04:16+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/b9e61a61e39e02dd90944e9115241c7f7e76bfd8", + "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "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/2.2.0" + }, + "time": "2025-07-13T07:04:09+00:00" + }, + { + "name": "sabre/uri", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sabre-io/uri.git", + "reference": "38eeab6ed9eec435a2188db489d4649c56272c51" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabre-io/uri/zipball/38eeab6ed9eec435a2188db489d4649c56272c51", + "reference": "38eeab6ed9eec435a2188db489d4649c56272c51", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.64", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^1.12", + "phpstan/phpstan-phpunit": "^1.4", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "^9.6" + }, + "type": "library", + "autoload": { + "files": [ + "lib/functions.php" + ], + "psr-4": { + "Sabre\\Uri\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + } + ], + "description": "Functions for making sense out of URIs.", + "homepage": "http://sabre.io/uri/", + "keywords": [ + "rfc3986", + "uri", + "url" + ], + "support": { + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/uri/issues", + "source": "https://github.com/fruux/sabre-uri" + }, + "time": "2024-09-04T15:30:08+00:00" + }, + { + "name": "sabre/xml", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sabre-io/xml.git", + "reference": "a89257fd188ce30e456b841b6915f27905dfdbe3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabre-io/xml/zipball/a89257fd188ce30e456b841b6915f27905dfdbe3", + "reference": "a89257fd188ce30e456b841b6915f27905dfdbe3", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "lib-libxml": ">=2.6.20", + "php": "^7.4 || ^8.0", + "sabre/uri": ">=2.0,<4.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.64", + "phpstan/phpstan": "^1.12", + "phpunit/phpunit": "^9.6" + }, + "type": "library", + "autoload": { + "files": [ + "lib/Deserializer/functions.php", + "lib/Serializer/functions.php" + ], + "psr-4": { + "Sabre\\Xml\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + }, + { + "name": "Markus Staab", + "email": "markus.staab@redaxo.de", + "role": "Developer" + } + ], + "description": "sabre/xml is an XML library that you may not hate.", + "homepage": "https://sabre.io/xml/", + "keywords": [ + "XMLReader", + "XMLWriter", + "dom", + "xml" + ], + "support": { + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/xml/issues", + "source": "https://github.com/fruux/sabre-xml" + }, + "time": "2024-09-06T08:00:55+00:00" + }, + { + "name": "setasign/fpdf", + "version": "1.8.6", + "source": { + "type": "git", + "url": "https://github.com/Setasign/FPDF.git", + "reference": "0838e0ee4925716fcbbc50ad9e1799b5edfae0a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Setasign/FPDF/zipball/0838e0ee4925716fcbbc50ad9e1799b5edfae0a0", + "reference": "0838e0ee4925716fcbbc50ad9e1799b5edfae0a0", + "shasum": "" + }, + "require": { + "ext-gd": "*", + "ext-zlib": "*" + }, + "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.6" + }, + "time": "2023-06-26T14:44:25+00:00" + }, + { + "name": "setasign/fpdi", + "version": "v2.6.3", + "source": { + "type": "git", + "url": "https://github.com/Setasign/FPDI.git", + "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/67c31f5e50c93c20579ca9e23035d8c540b51941", + "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941", + "shasum": "" + }, + "require": { + "ext-zlib": "*", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "setasign/tfpdf": "<1.31" + }, + "require-dev": { + "phpunit/phpunit": "^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.3" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/setasign/fpdi", + "type": "tidelift" + } + ], + "time": "2025-02-05T13:22:35+00:00" + }, + { + "name": "smalot/pdfparser", + "version": "v2.12.0", + "source": { + "type": "git", + "url": "https://github.com/smalot/pdfparser.git", + "reference": "8440edbf58c8596074e78ada38dcb0bd041a5948" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/smalot/pdfparser/zipball/8440edbf58c8596074e78ada38dcb0bd041a5948", + "reference": "8440edbf58c8596074e78ada38dcb0bd041a5948", + "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.12.0" + }, + "time": "2025-03-31T13:16:09+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "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.6.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-09-25T14:21:43+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d", + "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "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": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.3.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-12-30T19:00:26+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "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.32.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-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "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.32.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-12-23T08:48:59+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "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.32.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-09-09T11:45:10+00:00" + }, + { + "name": "symfony/process", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "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/v7.3.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": "2025-04-17T09:11:12+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "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.6.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-09-27T08:32:26+00:00" + }, + { + "name": "symfony/validator", + "version": "v7.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "e2f2497c869fc57446f735fbf00cff4de32ae8c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/e2f2497c869fc57446f735fbf00cff4de32ae8c3", + "reference": "e2f2497c869fc57446f735fbf00cff4de32ae8c3", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "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/lexer": "<1.1", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<7.0", + "symfony/expression-language": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/intl": "<6.4", + "symfony/property-info": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", + "symfony/translation": "^6.4.3|^7.0.3", + "symfony/type-info": "^7.1", + "symfony/yaml": "^6.4|^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/v7.3.1" + }, + "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": "2025-06-26T13:22:23+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "0c3555045a46ab3cd4cc5a69d161225195230edb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0c3555045a46ab3cd4cc5a69d161225195230edb", + "reference": "0c3555045a46ab3cd4cc5a69d161225195230edb", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^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/v7.3.1" + }, + "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": "2025-06-03T06:57:57+00:00" + }, + { + "name": "zetacomponents/base", + "version": "1.9.4", + "source": { + "type": "git", + "url": "https://github.com/zetacomponents/Base.git", + "reference": "b6ae5f6177f6e51c5fc3514800e1c3fb076ec4be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zetacomponents/Base/zipball/b6ae5f6177f6e51c5fc3514800e1c3fb076ec4be", + "reference": "b6ae5f6177f6e51c5fc3514800e1c3fb076ec4be", + "shasum": "" + }, + "require-dev": { + "phpunit/php-invoker": "^2.0|^3.1", + "phpunit/phpunit": "~9.0", + "zetacomponents/coding-standard": "dev-main", + "zetacomponents/unit-test": "~1.2.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Sergey Alexeev" + }, + { + "name": "Sebastian Bergmann" + }, + { + "name": "Jan Borsodi" + }, + { + "name": "Raymond Bosman" + }, + { + "name": "Frederik Holljen" + }, + { + "name": "Kore Nordmann" + }, + { + "name": "Derick Rethans" + }, + { + "name": "Vadym Savchuk" + }, + { + "name": "Tobias Schlitt" + }, + { + "name": "Alexandru Stanoi" + } + ], + "description": "The Base package provides the basic infrastructure that all packages rely on. Therefore every component relies on this package.", + "homepage": "https://github.com/zetacomponents", + "support": { + "issues": "https://github.com/zetacomponents/Base/issues", + "source": "https://github.com/zetacomponents/Base/tree/1.9.4" + }, + "time": "2022-11-30T16:16:25+00:00" + }, + { + "name": "zetacomponents/mail", + "version": "1.10.1", + "source": { + "type": "git", + "url": "https://github.com/zetacomponents/Mail.git", + "reference": "644fe50cf9f05a455cc576e2d763bc7cd967769f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zetacomponents/Mail/zipball/644fe50cf9f05a455cc576e2d763bc7cd967769f", + "reference": "644fe50cf9f05a455cc576e2d763bc7cd967769f", + "shasum": "" + }, + "require": { + "zetacomponents/base": "~1.8" + }, + "require-dev": { + "phpunit/phpunit": "~9.0", + "zetacomponents/unit-test": "*" + }, + "type": "library", + "autoload": { + "classmap": [ + "src" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Sergey Alexeev" + }, + { + "name": "Sebastian Bergmann" + }, + { + "name": "Jan Borsodi" + }, + { + "name": "Raymond Bosman" + }, + { + "name": "Frederik Holljen" + }, + { + "name": "Kore Nordmann" + }, + { + "name": "Derick Rethans" + }, + { + "name": "Vadym Savchuk" + }, + { + "name": "Tobias Schlitt" + }, + { + "name": "Alexandru Stanoi" + }, + { + "name": "Sinisa Dukaric" + }, + { + "name": "Mikko Koppanen" + }, + { + "name": "Christian Michel" + } + ], + "description": "The component allows you construct and/or parse Mail messages conforming to the mail standard. It has support for attachments, multipart messages and HTML mail. It also interfaces with SMTP to send mail or IMAP, POP3 or mbox to retrieve e-mail.", + "homepage": "https://github.com/zetacomponents", + "support": { + "issues": "https://github.com/zetacomponents/Mail/issues", + "source": "https://github.com/zetacomponents/Mail/tree/1.10.1" + }, + "time": "2025-03-17T11:33:59+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/include/database/otp_send_secret_sql.class.php b/include/database/otp_send_secret_sql.class.php new file mode 100644 index 000000000..fcdc74a7f --- /dev/null +++ b/include/database/otp_send_secret_sql.class.php @@ -0,0 +1,63 @@ +table = "public.otp_send_secret"; + $this->primary_key = "os_id"; + /* + * List of columns + */ + $this->name = array( + "os_id" => "os_id" + , "use_email" => "use_email" + , "os_timestamp" => "os_timestamp" + , "os_request" => "os_request" + ); + + /* + * Type of columns + */ + $this->type = array( + "os_id" => "numeric" + , "use_email" => "text" + , "os_timestamp" => "date" + , "os_request" => "text" + ); + + $this->default = array("os_id" => "auto"); + + $this->date_format = "DD.MM.YYYY HH24:MI:SS"; + parent::__construct($p_cn, $p_id); + } +} diff --git a/include/lib/otp.class.php b/include/lib/otp.class.php new file mode 100644 index 000000000..c5ef09a2e --- /dev/null +++ b/include/lib/otp.class.php @@ -0,0 +1,103 @@ +secret_length = 32; + $options->algorithm = AuthenticatorInterface::ALGO_SHA512; + $options->digits=6; + $authenticator = new Authenticator($options); + // create a secret (stored somewhere in a *safe* place on the server. safe... hahaha jk) + $secret = $authenticator->createSecret(); + return $secret; + + } + /** + * @brief send an email with link to the user + * @param $user (\Noalyss_User ) + */ + function send_mail(\Noalyss_User $user) { + $mail=new \Sendmail(); + $mail->set_from(ADMIN_WEB); + $mail->mailto($user->getEmail()); + $mail->set_subject(_("NOALYSS : Double authentification lien pour freeOTP")); + $noalyss_url=NOALYSS_URL; + $uuid=guidv4(); + $id=$user->getId(); + /** + * save in DB first + */ + $message="Bonjour, + + Afin de pouvoir utiliser la double authentification avec freeOTP, pourriez-vous + suivre ce lien et scanner le QRCode avec votre application android freeOTP. + + Ce lien ne sera actif que 24 heures. + + + {$noalyss_url}/index.php?otp={$uuid} + + Merci d'utiliser NOALYSS + +Cordialement, + +Noalyss team +"; + try { + $repository=new \Database(); + $otp_send_secret_sql=new \Otp_Send_Secret_SQL($repository); + $otp_send_secret_sql->set('use_id',$id) + ->set('os_request',$uuid); + $otp_send_secret_sql->save(); + $mail->set_message($message); + $mail->compose(); + $mail->send(); + + } catch (Exception $ex) { + + } + } + +} diff --git a/include/otp-link.php b/include/otp-link.php new file mode 100644 index 000000000..cb87596e3 --- /dev/null +++ b/include/otp-link.php @@ -0,0 +1,116 @@ +get('otp'); + $repository = new \Database(0); +// remove old request (> 24 hours) + $repository->exec_sql("delete from otp_send_secret where os_timestamp < now()-interval '24 hours'"); + +// check if UUID exist + $id = $repository->get_value("select os_id from otp_send_secret where os_request=$1", + [$uuid]); +// if UUID doesn't exist exit + if ($repository->count() == 0) { + return; + } + +// get email from id + $otp_send = new Otp_Send_Secret_SQL($repository, $id); + $user = new Noalyss_User($repository, $otp_send->get('use_id')); + $secret = $user->get_otp_secret(); + + // OTP + $options = new AuthenticatorOptions; + $options->secret_length = 32; + $options->algorithm = AuthenticatorInterface::ALGO_SHA512; + $options->digits=6; + $authenticator = new Authenticator($options); + $authenticator->setSecret($secret); + $data= $authenticator->getUri(label:"noalyss:".$user->getEmail(),issuer:"noalyss.eu"); +// load secret for this id +//echo "use with php -S localhost:5000 puis ouvrir index.html "; + $writer = new PngWriter(); + +// Create QR code + $qrCode = new QrCode( + data: $data, + encoding: new Encoding('UTF-8'), + errorCorrectionLevel: ErrorCorrectionLevel::Medium, + size: 600, + margin: 10, + roundBlockSizeMode: RoundBlockSizeMode::Margin, + foregroundColor: new Color(0, 0, 0), + backgroundColor: new Color(255, 255, 255) + ); + + $result = $writer->write($qrCode); + echo '
'; + // generate the QRCode + echo '

',_("Scanner ceci avec freeOTP"),'

'; + + echo '

'; + echo _("Scanner ce QRCode avec votre application OTP afin de l'ajouter"); + + if ( DEBUGNOALYSS > 1) { echo "code attendu",$authenticator->code();} + echo '

'; + + printf('', base64_encode($result->getString())); + + echo '
'; +} catch (Exception $exc) { + record_log($e); + return; +} +?> + + + + diff --git a/vendor/autoload.php b/vendor/autoload.php new file mode 100644 index 000000000..ce5290c53 --- /dev/null +++ b/vendor/autoload.php @@ -0,0 +1,25 @@ +writeFile('Hello World!', 'qrcode.png'); +``` + +## Available image renderer back ends +BaconQrCode comes with multiple back ends for rendering images. Currently included are the following: + +- `ImagickImageBackEnd`: renders raster images using the Imagick library +- `SvgImageBackEnd`: renders SVG files using XMLWriter +- `EpsImageBackEnd`: renders EPS files + +### GDLib Renderer +GD library has so many limitations, that GD support is not added as backend, but as separated renderer. +Use `GDLibRenderer` instead of `ImageRenderer`. These are the limitations: + +- Does not support gradient. +- Does not support any curves, so you QR code is always squared. + +Example usage: + +```php +use BaconQrCode\Renderer\GDLibRenderer; +use BaconQrCode\Writer; + +$renderer = new GDLibRenderer(400); +$writer = new Writer($renderer); +$writer->writeFile('Hello World!', 'qrcode.png'); +``` diff --git a/vendor/bacon/bacon-qr-code/composer.json b/vendor/bacon/bacon-qr-code/composer.json new file mode 100644 index 000000000..41f41660e --- /dev/null +++ b/vendor/bacon/bacon-qr-code/composer.json @@ -0,0 +1,50 @@ +{ + "name": "bacon/bacon-qr-code", + "description": "BaconQrCode is a QR code generator for PHP.", + "license": "BSD-2-Clause", + "homepage": "https://github.com/Bacon/BaconQrCode", + "require": { + "php": "^8.1", + "ext-iconv": "*", + "dasprid/enum": "^1.0.3" + }, + "suggest": { + "ext-imagick": "to generate QR code images" + }, + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "autoload": { + "psr-4": { + "BaconQrCode\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "BaconQrCodeTest\\": "test/" + } + }, + "require-dev": { + "phpunit/phpunit": "^10.5.11 || 11.0.4", + "spatie/phpunit-snapshot-assertions": "^5.1.5", + "squizlabs/php_codesniffer": "^3.9", + "phly/keep-a-changelog": "^2.12" + }, + "config": { + "allow-plugins": { + "ocramius/package-versions": true, + "php-http/discovery": true + } + }, + "archive": { + "exclude": [ + "/test", + "/phpunit.xml.dist" + ] + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Common/BitArray.php b/vendor/bacon/bacon-qr-code/src/Common/BitArray.php new file mode 100644 index 000000000..9ec86292d --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Common/BitArray.php @@ -0,0 +1,364 @@ + + */ + private SplFixedArray $bits; + + /** + * Creates a new bit array with a given size. + */ + public function __construct(private int $size = 0) + { + $this->bits = SplFixedArray::fromArray(array_fill(0, ($this->size + 31) >> 3, 0)); + } + + /** + * Gets the size in bits. + */ + public function getSize() : int + { + return $this->size; + } + + /** + * Gets the size in bytes. + */ + public function getSizeInBytes() : int + { + return ($this->size + 7) >> 3; + } + + /** + * Ensures that the array has a minimum capacity. + */ + public function ensureCapacity(int $size) : void + { + if ($size > count($this->bits) << 5) { + $this->bits->setSize(($size + 31) >> 5); + } + } + + /** + * Gets a specific bit. + */ + public function get(int $i) : bool + { + return 0 !== ($this->bits[$i >> 5] & (1 << ($i & 0x1f))); + } + + /** + * Sets a specific bit. + */ + public function set(int $i) : void + { + $this->bits[$i >> 5] = $this->bits[$i >> 5] | 1 << ($i & 0x1f); + } + + /** + * Flips a specific bit. + */ + public function flip(int $i) : void + { + $this->bits[$i >> 5] ^= 1 << ($i & 0x1f); + } + + /** + * Gets the next set bit position from a given position. + */ + public function getNextSet(int $from) : int + { + if ($from >= $this->size) { + return $this->size; + } + + $bitsOffset = $from >> 5; + $currentBits = $this->bits[$bitsOffset]; + $bitsLength = count($this->bits); + $currentBits &= ~((1 << ($from & 0x1f)) - 1); + + while (0 === $currentBits) { + if (++$bitsOffset === $bitsLength) { + return $this->size; + } + + $currentBits = $this->bits[$bitsOffset]; + } + + $result = ($bitsOffset << 5) + BitUtils::numberOfTrailingZeros($currentBits); + return min($result, $this->size); + } + + /** + * Gets the next unset bit position from a given position. + */ + public function getNextUnset(int $from) : int + { + if ($from >= $this->size) { + return $this->size; + } + + $bitsOffset = $from >> 5; + $currentBits = ~$this->bits[$bitsOffset]; + $bitsLength = count($this->bits); + $currentBits &= ~((1 << ($from & 0x1f)) - 1); + + while (0 === $currentBits) { + if (++$bitsOffset === $bitsLength) { + return $this->size; + } + + $currentBits = ~$this->bits[$bitsOffset]; + } + + $result = ($bitsOffset << 5) + BitUtils::numberOfTrailingZeros($currentBits); + return min($result, $this->size); + } + + /** + * Sets a bulk of bits. + */ + public function setBulk(int $i, int $newBits) : void + { + $this->bits[$i >> 5] = $newBits; + } + + /** + * Sets a range of bits. + * + * @throws InvalidArgumentException if end is smaller than start + */ + public function setRange(int $start, int $end) : void + { + if ($end < $start) { + throw new InvalidArgumentException('End must be greater or equal to start'); + } + + if ($end === $start) { + return; + } + + --$end; + + $firstInt = $start >> 5; + $lastInt = $end >> 5; + + for ($i = $firstInt; $i <= $lastInt; ++$i) { + $firstBit = $i > $firstInt ? 0 : $start & 0x1f; + $lastBit = $i < $lastInt ? 31 : $end & 0x1f; + + if (0 === $firstBit && 31 === $lastBit) { + $mask = 0x7fffffff; + } else { + $mask = 0; + + for ($j = $firstBit; $j < $lastBit; ++$j) { + $mask |= 1 << $j; + } + } + + $this->bits[$i] = $this->bits[$i] | $mask; + } + } + + /** + * Clears the bit array, unsetting every bit. + */ + public function clear() : void + { + $bitsLength = count($this->bits); + + for ($i = 0; $i < $bitsLength; ++$i) { + $this->bits[$i] = 0; + } + } + + /** + * Checks if a range of bits is set or not set. + + * @throws InvalidArgumentException if end is smaller than start + */ + public function isRange(int $start, int $end, bool $value) : bool + { + if ($end < $start) { + throw new InvalidArgumentException('End must be greater or equal to start'); + } + + if ($end === $start) { + return true; + } + + --$end; + + $firstInt = $start >> 5; + $lastInt = $end >> 5; + + for ($i = $firstInt; $i <= $lastInt; ++$i) { + $firstBit = $i > $firstInt ? 0 : $start & 0x1f; + $lastBit = $i < $lastInt ? 31 : $end & 0x1f; + + if (0 === $firstBit && 31 === $lastBit) { + $mask = 0x7fffffff; + } else { + $mask = 0; + + for ($j = $firstBit; $j <= $lastBit; ++$j) { + $mask |= 1 << $j; + } + } + + if (($this->bits[$i] & $mask) !== ($value ? $mask : 0)) { + return false; + } + } + + return true; + } + + /** + * Appends a bit to the array. + */ + public function appendBit(bool $bit) : void + { + $this->ensureCapacity($this->size + 1); + + if ($bit) { + $this->bits[$this->size >> 5] = $this->bits[$this->size >> 5] | (1 << ($this->size & 0x1f)); + } + + ++$this->size; + } + + /** + * Appends a number of bits (up to 32) to the array. + + * @throws InvalidArgumentException if num bits is not between 0 and 32 + */ + public function appendBits(int $value, int $numBits) : void + { + if ($numBits < 0 || $numBits > 32) { + throw new InvalidArgumentException('Num bits must be between 0 and 32'); + } + + $this->ensureCapacity($this->size + $numBits); + + for ($numBitsLeft = $numBits; $numBitsLeft > 0; $numBitsLeft--) { + $this->appendBit((($value >> ($numBitsLeft - 1)) & 0x01) === 1); + } + } + + /** + * Appends another bit array to this array. + */ + public function appendBitArray(self $other) : void + { + $otherSize = $other->getSize(); + $this->ensureCapacity($this->size + $other->getSize()); + + for ($i = 0; $i < $otherSize; ++$i) { + $this->appendBit($other->get($i)); + } + } + + /** + * Makes an exclusive-or comparision on the current bit array. + * + * @throws InvalidArgumentException if sizes don't match + */ + public function xorBits(self $other) : void + { + $bitsLength = count($this->bits); + $otherBits = $other->getBitArray(); + + if ($bitsLength !== count($otherBits)) { + throw new InvalidArgumentException('Sizes don\'t match'); + } + + for ($i = 0; $i < $bitsLength; ++$i) { + $this->bits[$i] = $this->bits[$i] ^ $otherBits[$i]; + } + } + + /** + * Converts the bit array to a byte array. + * + * @return SplFixedArray + */ + public function toBytes(int $bitOffset, int $numBytes) : SplFixedArray + { + $bytes = new SplFixedArray($numBytes); + + for ($i = 0; $i < $numBytes; ++$i) { + $byte = 0; + + for ($j = 0; $j < 8; ++$j) { + if ($this->get($bitOffset)) { + $byte |= 1 << (7 - $j); + } + + ++$bitOffset; + } + + $bytes[$i] = $byte; + } + + return $bytes; + } + + /** + * Gets the internal bit array. + * + * @return SplFixedArray + */ + public function getBitArray() : SplFixedArray + { + return $this->bits; + } + + /** + * Reverses the array. + */ + public function reverse() : void + { + $newBits = new SplFixedArray(count($this->bits)); + + for ($i = 0; $i < $this->size; ++$i) { + if ($this->get($this->size - $i - 1)) { + $newBits[$i >> 5] = $newBits[$i >> 5] | (1 << ($i & 0x1f)); + } + } + + $this->bits = $newBits; + } + + /** + * Returns a string representation of the bit array. + */ + public function __toString() : string + { + $result = ''; + + for ($i = 0; $i < $this->size; ++$i) { + if (0 === ($i & 0x07)) { + $result .= ' '; + } + + $result .= $this->get($i) ? 'X' : '.'; + } + + return $result; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Common/BitMatrix.php b/vendor/bacon/bacon-qr-code/src/Common/BitMatrix.php new file mode 100644 index 000000000..294afb4a5 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Common/BitMatrix.php @@ -0,0 +1,307 @@ + + */ + private SplFixedArray $bits; + + /** + * @throws InvalidArgumentException if a dimension is smaller than zero + */ + public function __construct(int $width, ?int $height = null) + { + if (null === $height) { + $height = $width; + } + + if ($width < 1 || $height < 1) { + throw new InvalidArgumentException('Both dimensions must be greater than zero'); + } + + $this->width = $width; + $this->height = $height; + $this->rowSize = ($width + 31) >> 5; + $this->bits = SplFixedArray::fromArray(array_fill(0, $this->rowSize * $height, 0)); + } + + /** + * Gets the requested bit, where true means black. + */ + public function get(int $x, int $y) : bool + { + $offset = $y * $this->rowSize + ($x >> 5); + return 0 !== (BitUtils::unsignedRightShift($this->bits[$offset], ($x & 0x1f)) & 1); + } + + /** + * Sets the given bit to true. + */ + public function set(int $x, int $y) : void + { + $offset = $y * $this->rowSize + ($x >> 5); + $this->bits[$offset] = $this->bits[$offset] | (1 << ($x & 0x1f)); + } + + /** + * Flips the given bit. + */ + public function flip(int $x, int $y) : void + { + $offset = $y * $this->rowSize + ($x >> 5); + $this->bits[$offset] = $this->bits[$offset] ^ (1 << ($x & 0x1f)); + } + + /** + * Clears all bits (set to false). + */ + public function clear() : void + { + $max = count($this->bits); + + for ($i = 0; $i < $max; ++$i) { + $this->bits[$i] = 0; + } + } + + /** + * Sets a square region of the bit matrix to true. + * + * @throws InvalidArgumentException if left or top are negative + * @throws InvalidArgumentException if width or height are smaller than 1 + * @throws InvalidArgumentException if region does not fit into the matix + */ + public function setRegion(int $left, int $top, int $width, int $height) : void + { + if ($top < 0 || $left < 0) { + throw new InvalidArgumentException('Left and top must be non-negative'); + } + + if ($height < 1 || $width < 1) { + throw new InvalidArgumentException('Width and height must be at least 1'); + } + + $right = $left + $width; + $bottom = $top + $height; + + if ($bottom > $this->height || $right > $this->width) { + throw new InvalidArgumentException('The region must fit inside the matrix'); + } + + for ($y = $top; $y < $bottom; ++$y) { + $offset = $y * $this->rowSize; + + for ($x = $left; $x < $right; ++$x) { + $index = $offset + ($x >> 5); + $this->bits[$index] = $this->bits[$index] | (1 << ($x & 0x1f)); + } + } + } + + /** + * A fast method to retrieve one row of data from the matrix as a BitArray. + */ + public function getRow(int $y, ?BitArray $row = null) : BitArray + { + if (null === $row || $row->getSize() < $this->width) { + $row = new BitArray($this->width); + } + + $offset = $y * $this->rowSize; + + for ($x = 0; $x < $this->rowSize; ++$x) { + $row->setBulk($x << 5, $this->bits[$offset + $x]); + } + + return $row; + } + + /** + * Sets a row of data from a BitArray. + */ + public function setRow(int $y, BitArray $row) : void + { + $bits = $row->getBitArray(); + + for ($i = 0; $i < $this->rowSize; ++$i) { + $this->bits[$y * $this->rowSize + $i] = $bits[$i]; + } + } + + /** + * This is useful in detecting the enclosing rectangle of a 'pure' barcode. + * + * @return int[]|null + */ + public function getEnclosingRectangle() : ?array + { + $left = $this->width; + $top = $this->height; + $right = -1; + $bottom = -1; + + for ($y = 0; $y < $this->height; ++$y) { + for ($x32 = 0; $x32 < $this->rowSize; ++$x32) { + $bits = $this->bits[$y * $this->rowSize + $x32]; + + if (0 !== $bits) { + if ($y < $top) { + $top = $y; + } + + if ($y > $bottom) { + $bottom = $y; + } + + if ($x32 * 32 < $left) { + $bit = 0; + + while (($bits << (31 - $bit)) === 0) { + $bit++; + } + + if (($x32 * 32 + $bit) < $left) { + $left = $x32 * 32 + $bit; + } + } + } + + if ($x32 * 32 + 31 > $right) { + $bit = 31; + + while (0 === BitUtils::unsignedRightShift($bits, $bit)) { + --$bit; + } + + if (($x32 * 32 + $bit) > $right) { + $right = $x32 * 32 + $bit; + } + } + } + } + + $width = $right - $left; + $height = $bottom - $top; + + if ($width < 0 || $height < 0) { + return null; + } + + return [$left, $top, $width, $height]; + } + + /** + * Gets the most top left set bit. + * + * This is useful in detecting a corner of a 'pure' barcode. + * + * @return int[]|null + */ + public function getTopLeftOnBit() : ?array + { + $bitsOffset = 0; + + while ($bitsOffset < count($this->bits) && 0 === $this->bits[$bitsOffset]) { + ++$bitsOffset; + } + + if (count($this->bits) === $bitsOffset) { + return null; + } + + $x = intdiv($bitsOffset, $this->rowSize); + $y = ($bitsOffset % $this->rowSize) << 5; + + $bits = $this->bits[$bitsOffset]; + $bit = 0; + + while (0 === ($bits << (31 - $bit))) { + ++$bit; + } + + $x += $bit; + + return [$x, $y]; + } + + /** + * Gets the most bottom right set bit. + * + * This is useful in detecting a corner of a 'pure' barcode. + * + * @return int[]|null + */ + public function getBottomRightOnBit() : ?array + { + $bitsOffset = count($this->bits) - 1; + + while ($bitsOffset >= 0 && 0 === $this->bits[$bitsOffset]) { + --$bitsOffset; + } + + if ($bitsOffset < 0) { + return null; + } + + $x = intdiv($bitsOffset, $this->rowSize); + $y = ($bitsOffset % $this->rowSize) << 5; + + $bits = $this->bits[$bitsOffset]; + $bit = 0; + + while (0 === BitUtils::unsignedRightShift($bits, $bit)) { + --$bit; + } + + $x += $bit; + + return [$x, $y]; + } + + /** + * Gets the width of the matrix, + */ + public function getWidth() : int + { + return $this->width; + } + + /** + * Gets the height of the matrix. + */ + public function getHeight() : int + { + return $this->height; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Common/BitUtils.php b/vendor/bacon/bacon-qr-code/src/Common/BitUtils.php new file mode 100644 index 000000000..0c575b493 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Common/BitUtils.php @@ -0,0 +1,41 @@ +>>" in other + * languages. + */ + public static function unsignedRightShift(int $a, int $b) : int + { + return ( + $a >= 0 + ? $a >> $b + : (($a & 0x7fffffff) >> $b) | (0x40000000 >> ($b - 1)) + ); + } + + /** + * Gets the number of trailing zeros. + */ + public static function numberOfTrailingZeros(int $i) : int + { + $lastPos = strrpos(str_pad(decbin($i), 32, '0', STR_PAD_LEFT), '1'); + return $lastPos === false ? 32 : 31 - $lastPos; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Common/CharacterSetEci.php b/vendor/bacon/bacon-qr-code/src/Common/CharacterSetEci.php new file mode 100644 index 000000000..8b62b8cfe --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Common/CharacterSetEci.php @@ -0,0 +1,177 @@ +|null + */ + private static ?array $valueToEci; + + /** + * @var array|null + */ + private static ?array $nameToEci = null; + + /** + * @param int[] $values + */ + public function __construct(private readonly array $values, string ...$otherEncodingNames) + { + $this->otherEncodingNames = $otherEncodingNames; + } + + /** + * Returns the primary value. + */ + public function getValue() : int + { + return $this->values[0]; + } + + /** + * Gets character set ECI by value. + * + * Returns the representing ECI of a given value, or null if it is legal but unsupported. + * + * @throws InvalidArgumentException if value is not between 0 and 900 + */ + public static function getCharacterSetEciByValue(int $value) : ?self + { + if ($value < 0 || $value >= 900) { + throw new InvalidArgumentException('Value must be between 0 and 900'); + } + + $valueToEci = self::valueToEci(); + + if (! array_key_exists($value, $valueToEci)) { + return null; + } + + return $valueToEci[$value]; + } + + /** + * Returns character set ECI by name. + * + * Returns the representing ECI of a given name, or null if it is legal but unsupported + */ + public static function getCharacterSetEciByName(string $name) : ?self + { + $nameToEci = self::nameToEci(); + $name = strtolower($name); + + if (! array_key_exists($name, $nameToEci)) { + return null; + } + + return $nameToEci[$name]; + } + + private static function valueToEci() : array + { + if (null !== self::$valueToEci) { + return self::$valueToEci; + } + + self::$valueToEci = []; + + foreach (self::values() as $eci) { + foreach ($eci->values as $value) { + self::$valueToEci[$value] = $eci; + } + } + + return self::$valueToEci; + } + + private static function nameToEci() : array + { + if (null !== self::$nameToEci) { + return self::$nameToEci; + } + + self::$nameToEci = []; + + foreach (self::values() as $eci) { + self::$nameToEci[strtolower($eci->name())] = $eci; + + foreach ($eci->otherEncodingNames as $name) { + self::$nameToEci[strtolower($name)] = $eci; + } + } + + return self::$nameToEci; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Common/EcBlock.php b/vendor/bacon/bacon-qr-code/src/Common/EcBlock.php new file mode 100644 index 000000000..bc9e86512 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Common/EcBlock.php @@ -0,0 +1,33 @@ +count; + } + + /** + * Returns the number of data codewords. + */ + public function getDataCodewords() : int + { + return $this->dataCodewords; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Common/EcBlocks.php b/vendor/bacon/bacon-qr-code/src/Common/EcBlocks.php new file mode 100644 index 000000000..63c52a94c --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Common/EcBlocks.php @@ -0,0 +1,66 @@ +ecBlocks = $ecBlocks; + } + + /** + * Returns the number of EC codewords per block. + */ + public function getEcCodewordsPerBlock() : int + { + return $this->ecCodewordsPerBlock; + } + + /** + * Returns the total number of EC block appearances. + */ + public function getNumBlocks() : int + { + $total = 0; + + foreach ($this->ecBlocks as $ecBlock) { + $total += $ecBlock->getCount(); + } + + return $total; + } + + /** + * Returns the total count of EC codewords. + */ + public function getTotalEcCodewords() : int + { + return $this->ecCodewordsPerBlock * $this->getNumBlocks(); + } + + /** + * Returns the EC blocks included in this collection. + * + * @return EcBlock[] + */ + public function getEcBlocks() : array + { + return $this->ecBlocks; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.php b/vendor/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.php new file mode 100644 index 000000000..ac84d66f4 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.php @@ -0,0 +1,57 @@ +bits; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Common/FormatInformation.php b/vendor/bacon/bacon-qr-code/src/Common/FormatInformation.php new file mode 100644 index 000000000..6a5da0b60 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Common/FormatInformation.php @@ -0,0 +1,196 @@ +ecLevel = ErrorCorrectionLevel::forBits(($formatInfo >> 3) & 0x3); + $this->dataMask = $formatInfo & 0x7; + } + + /** + * Checks how many bits are different between two integers. + */ + public static function numBitsDiffering(int $a, int $b) : int + { + $a ^= $b; + + return ( + self::BITS_SET_IN_HALF_BYTE[$a & 0xf] + + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 4) & 0xf)] + + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 8) & 0xf)] + + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 12) & 0xf)] + + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 16) & 0xf)] + + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 20) & 0xf)] + + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 24) & 0xf)] + + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 28) & 0xf)] + ); + } + + /** + * Decodes format information. + */ + public static function decodeFormatInformation(int $maskedFormatInfo1, int $maskedFormatInfo2) : ?self + { + $formatInfo = self::doDecodeFormatInformation($maskedFormatInfo1, $maskedFormatInfo2); + + if (null !== $formatInfo) { + return $formatInfo; + } + + // Should return null, but, some QR codes apparently do not mask this info. Try again by actually masking the + // pattern first. + return self::doDecodeFormatInformation( + $maskedFormatInfo1 ^ self::FORMAT_INFO_MASK_QR, + $maskedFormatInfo2 ^ self::FORMAT_INFO_MASK_QR + ); + } + + /** + * Internal method for decoding format information. + */ + private static function doDecodeFormatInformation(int $maskedFormatInfo1, int $maskedFormatInfo2) : ?self + { + $bestDifference = PHP_INT_MAX; + $bestFormatInfo = 0; + + foreach (self::FORMAT_INFO_DECODE_LOOKUP as $decodeInfo) { + $targetInfo = $decodeInfo[0]; + + if ($targetInfo === $maskedFormatInfo1 || $targetInfo === $maskedFormatInfo2) { + // Found an exact match + return new self($decodeInfo[1]); + } + + $bitsDifference = self::numBitsDiffering($maskedFormatInfo1, $targetInfo); + + if ($bitsDifference < $bestDifference) { + $bestFormatInfo = $decodeInfo[1]; + $bestDifference = $bitsDifference; + } + + if ($maskedFormatInfo1 !== $maskedFormatInfo2) { + // Also try the other option + $bitsDifference = self::numBitsDiffering($maskedFormatInfo2, $targetInfo); + + if ($bitsDifference < $bestDifference) { + $bestFormatInfo = $decodeInfo[1]; + $bestDifference = $bitsDifference; + } + } + } + + // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits differing means we found a match. + if ($bestDifference <= 3) { + return new self($bestFormatInfo); + } + + return null; + } + + /** + * Returns the error correction level. + */ + public function getErrorCorrectionLevel() : ErrorCorrectionLevel + { + return $this->ecLevel; + } + + /** + * Returns the data mask. + */ + public function getDataMask() : int + { + return $this->dataMask; + } + + /** + * Hashes the code of the EC level. + */ + public function hashCode() : int + { + return ($this->ecLevel->getBits() << 3) | $this->dataMask; + } + + /** + * Verifies if this instance equals another one. + */ + public function equals(self $other) : bool + { + return ( + $this->ecLevel === $other->ecLevel + && $this->dataMask === $other->dataMask + ); + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Common/Mode.php b/vendor/bacon/bacon-qr-code/src/Common/Mode.php new file mode 100644 index 000000000..f5fb15373 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Common/Mode.php @@ -0,0 +1,69 @@ +getVersionNumber(); + + if ($number <= 9) { + $offset = 0; + } elseif ($number <= 26) { + $offset = 1; + } else { + $offset = 2; + } + + return $this->characterCountBitsForVersions[$offset]; + } + + /** + * Returns the four bits used to encode this mode. + */ + public function getBits() : int + { + return $this->bits; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.php b/vendor/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.php new file mode 100644 index 000000000..d16a75e4a --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.php @@ -0,0 +1,454 @@ + 8) { + throw new InvalidArgumentException('Symbol size must be between 0 and 8'); + } + + if ($firstRoot < 0 || $firstRoot >= (1 << $symbolSize)) { + throw new InvalidArgumentException('First root must be between 0 and ' . (1 << $symbolSize)); + } + + if ($numRoots < 0 || $numRoots >= (1 << $symbolSize)) { + throw new InvalidArgumentException('Num roots must be between 0 and ' . (1 << $symbolSize)); + } + + if ($padding < 0 || $padding >= ((1 << $symbolSize) - 1 - $numRoots)) { + throw new InvalidArgumentException( + 'Padding must be between 0 and ' . ((1 << $symbolSize) - 1 - $numRoots) + ); + } + + $this->symbolSize = $symbolSize; + $this->blockSize = (1 << $symbolSize) - 1; + $this->padding = $padding; + $this->alphaTo = SplFixedArray::fromArray(array_fill(0, $this->blockSize + 1, 0), false); + $this->indexOf = SplFixedArray::fromArray(array_fill(0, $this->blockSize + 1, 0), false); + + // Generate galous field lookup table + $this->indexOf[0] = $this->blockSize; + $this->alphaTo[$this->blockSize] = 0; + + $sr = 1; + + for ($i = 0; $i < $this->blockSize; ++$i) { + $this->indexOf[$sr] = $i; + $this->alphaTo[$i] = $sr; + + $sr <<= 1; + + if ($sr & (1 << $symbolSize)) { + $sr ^= $gfPoly; + } + + $sr &= $this->blockSize; + } + + if (1 !== $sr) { + throw new RuntimeException('Field generator polynomial is not primitive'); + } + + // Form RS code generator polynomial from its roots + $this->generatorPoly = SplFixedArray::fromArray(array_fill(0, $numRoots + 1, 0), false); + $this->firstRoot = $firstRoot; + $this->primitive = $primitive; + $this->numRoots = $numRoots; + + // Find prim-th root of 1, used in decoding + for ($iPrimitive = 1; ($iPrimitive % $primitive) !== 0; $iPrimitive += $this->blockSize) { + } + + $this->iPrimitive = intdiv($iPrimitive, $primitive); + + $this->generatorPoly[0] = 1; + + for ($i = 0, $root = $firstRoot * $primitive; $i < $numRoots; ++$i, $root += $primitive) { + $this->generatorPoly[$i + 1] = 1; + + for ($j = $i; $j > 0; $j--) { + if ($this->generatorPoly[$j] !== 0) { + $this->generatorPoly[$j] = $this->generatorPoly[$j - 1] ^ $this->alphaTo[ + $this->modNn($this->indexOf[$this->generatorPoly[$j]] + $root) + ]; + } else { + $this->generatorPoly[$j] = $this->generatorPoly[$j - 1]; + } + } + + $this->generatorPoly[$j] = $this->alphaTo[$this->modNn($this->indexOf[$this->generatorPoly[0]] + $root)]; + } + + // Convert generator poly to index form for quicker encoding + for ($i = 0; $i <= $numRoots; ++$i) { + $this->generatorPoly[$i] = $this->indexOf[$this->generatorPoly[$i]]; + } + } + + /** + * Encodes data and writes result back into parity array. + */ + public function encode(SplFixedArray $data, SplFixedArray $parity) : void + { + for ($i = 0; $i < $this->numRoots; ++$i) { + $parity[$i] = 0; + } + + $iterations = $this->blockSize - $this->numRoots - $this->padding; + + for ($i = 0; $i < $iterations; ++$i) { + $feedback = $this->indexOf[$data[$i] ^ $parity[0]]; + + if ($feedback !== $this->blockSize) { + // Feedback term is non-zero + $feedback = $this->modNn($this->blockSize - $this->generatorPoly[$this->numRoots] + $feedback); + + for ($j = 1; $j < $this->numRoots; ++$j) { + $parity[$j] = $parity[$j] ^ $this->alphaTo[ + $this->modNn($feedback + $this->generatorPoly[$this->numRoots - $j]) + ]; + } + } + + for ($j = 0; $j < $this->numRoots - 1; ++$j) { + $parity[$j] = $parity[$j + 1]; + } + + if ($feedback !== $this->blockSize) { + $parity[$this->numRoots - 1] = $this->alphaTo[$this->modNn($feedback + $this->generatorPoly[0])]; + } else { + $parity[$this->numRoots - 1] = 0; + } + } + } + + /** + * Decodes received data. + */ + public function decode(SplFixedArray $data, ?SplFixedArray $erasures = null) : ?int + { + // This speeds up the initialization a bit. + $numRootsPlusOne = SplFixedArray::fromArray(array_fill(0, $this->numRoots + 1, 0), false); + $numRoots = SplFixedArray::fromArray(array_fill(0, $this->numRoots, 0), false); + + $lambda = clone $numRootsPlusOne; + $b = clone $numRootsPlusOne; + $t = clone $numRootsPlusOne; + $omega = clone $numRootsPlusOne; + $root = clone $numRoots; + $loc = clone $numRoots; + + $numErasures = (null !== $erasures ? count($erasures) : 0); + + // Form the Syndromes; i.e., evaluate data(x) at roots of g(x) + $syndromes = SplFixedArray::fromArray(array_fill(0, $this->numRoots, $data[0]), false); + + for ($i = 1; $i < $this->blockSize - $this->padding; ++$i) { + for ($j = 0; $j < $this->numRoots; ++$j) { + if ($syndromes[$j] === 0) { + $syndromes[$j] = $data[$i]; + } else { + $syndromes[$j] = $data[$i] ^ $this->alphaTo[ + $this->modNn($this->indexOf[$syndromes[$j]] + ($this->firstRoot + $j) * $this->primitive) + ]; + } + } + } + + // Convert syndromes to index form, checking for nonzero conditions + $syndromeError = 0; + + for ($i = 0; $i < $this->numRoots; ++$i) { + $syndromeError |= $syndromes[$i]; + $syndromes[$i] = $this->indexOf[$syndromes[$i]]; + } + + if (! $syndromeError) { + // If syndrome is zero, data[] is a codeword and there are no errors to correct, so return data[] + // unmodified. + return 0; + } + + $lambda[0] = 1; + + if ($numErasures > 0) { + // Init lambda to be the erasure locator polynomial + $lambda[1] = $this->alphaTo[$this->modNn($this->primitive * ($this->blockSize - 1 - $erasures[0]))]; + + for ($i = 1; $i < $numErasures; ++$i) { + $u = $this->modNn($this->primitive * ($this->blockSize - 1 - $erasures[$i])); + + for ($j = $i + 1; $j > 0; --$j) { + $tmp = $this->indexOf[$lambda[$j - 1]]; + + if ($tmp !== $this->blockSize) { + $lambda[$j] = $lambda[$j] ^ $this->alphaTo[$this->modNn($u + $tmp)]; + } + } + } + } + + for ($i = 0; $i <= $this->numRoots; ++$i) { + $b[$i] = $this->indexOf[$lambda[$i]]; + } + + // Begin Berlekamp-Massey algorithm to determine error+erasure locator polynomial + $r = $numErasures; + $el = $numErasures; + + while (++$r <= $this->numRoots) { + // Compute discrepancy at the r-th step in poly form + $discrepancyR = 0; + + for ($i = 0; $i < $r; ++$i) { + if ($lambda[$i] !== 0 && $syndromes[$r - $i - 1] !== $this->blockSize) { + $discrepancyR ^= $this->alphaTo[ + $this->modNn($this->indexOf[$lambda[$i]] + $syndromes[$r - $i - 1]) + ]; + } + } + + $discrepancyR = $this->indexOf[$discrepancyR]; + + if ($discrepancyR === $this->blockSize) { + $tmp = $b->toArray(); + array_unshift($tmp, $this->blockSize); + array_pop($tmp); + $b = SplFixedArray::fromArray($tmp, false); + continue; + } + + $t[0] = $lambda[0]; + + for ($i = 0; $i < $this->numRoots; ++$i) { + if ($b[$i] !== $this->blockSize) { + $t[$i + 1] = $lambda[$i + 1] ^ $this->alphaTo[$this->modNn($discrepancyR + $b[$i])]; + } else { + $t[$i + 1] = $lambda[$i + 1]; + } + } + + if (2 * $el <= $r + $numErasures - 1) { + $el = $r + $numErasures - $el; + + for ($i = 0; $i <= $this->numRoots; ++$i) { + $b[$i] = ( + $lambda[$i] === 0 + ? $this->blockSize + : $this->modNn($this->indexOf[$lambda[$i]] - $discrepancyR + $this->blockSize) + ); + } + } else { + $tmp = $b->toArray(); + array_unshift($tmp, $this->blockSize); + array_pop($tmp); + $b = SplFixedArray::fromArray($tmp, false); + } + + $lambda = clone $t; + } + + // Convert lambda to index form and compute deg(lambda(x)) + $degLambda = 0; + + for ($i = 0; $i <= $this->numRoots; ++$i) { + $lambda[$i] = $this->indexOf[$lambda[$i]]; + + if ($lambda[$i] !== $this->blockSize) { + $degLambda = $i; + } + } + + // Find roots of the error+erasure locator polynomial by Chien search. + $reg = clone $lambda; + $reg[0] = 0; + $count = 0; + $i = 1; + + for ($k = $this->iPrimitive - 1; $i <= $this->blockSize; ++$i, $k = $this->modNn($k + $this->iPrimitive)) { + $q = 1; + + for ($j = $degLambda; $j > 0; $j--) { + if ($reg[$j] !== $this->blockSize) { + $reg[$j] = $this->modNn($reg[$j] + $j); + $q ^= $this->alphaTo[$reg[$j]]; + } + } + + if ($q !== 0) { + // Not a root + continue; + } + + // Store root (index-form) and error location number + $root[$count] = $i; + $loc[$count] = $k; + + if (++$count === $degLambda) { + break; + } + } + + if ($degLambda !== $count) { + // deg(lambda) unequal to number of roots: uncorrectable error detected + return null; + } + + // Compute err+eras evaluate poly omega(x) = s(x)*lambda(x) (modulo x**numRoots). In index form. Also find + // deg(omega). + $degOmega = $degLambda - 1; + + for ($i = 0; $i <= $degOmega; ++$i) { + $tmp = 0; + + for ($j = $i; $j >= 0; --$j) { + if ($syndromes[$i - $j] !== $this->blockSize && $lambda[$j] !== $this->blockSize) { + $tmp ^= $this->alphaTo[$this->modNn($syndromes[$i - $j] + $lambda[$j])]; + } + } + + $omega[$i] = $this->indexOf[$tmp]; + } + + // Compute error values in poly-form. num1 = omega(inv(X(l))), num2 = inv(X(l))**(firstRoot-1) and + // den = lambda_pr(inv(X(l))) all in poly form. + for ($j = $count - 1; $j >= 0; --$j) { + $num1 = 0; + + for ($i = $degOmega; $i >= 0; $i--) { + if ($omega[$i] !== $this->blockSize) { + $num1 ^= $this->alphaTo[$this->modNn($omega[$i] + $i * $root[$j])]; + } + } + + $num2 = $this->alphaTo[$this->modNn($root[$j] * ($this->firstRoot - 1) + $this->blockSize)]; + $den = 0; + + // lambda[i+1] for i even is the formal derivativelambda_pr of lambda[i] + for ($i = min($degLambda, $this->numRoots - 1) & ~1; $i >= 0; $i -= 2) { + if ($lambda[$i + 1] !== $this->blockSize) { + $den ^= $this->alphaTo[$this->modNn($lambda[$i + 1] + $i * $root[$j])]; + } + } + + // Apply error to data + if ($num1 !== 0 && $loc[$j] >= $this->padding) { + $data[$loc[$j] - $this->padding] = $data[$loc[$j] - $this->padding] ^ ( + $this->alphaTo[ + $this->modNn( + $this->indexOf[$num1] + $this->indexOf[$num2] + $this->blockSize - $this->indexOf[$den] + ) + ] + ); + } + } + + if (null !== $erasures) { + if (count($erasures) < $count) { + $erasures->setSize($count); + } + + for ($i = 0; $i < $count; $i++) { + $erasures[$i] = $loc[$i]; + } + } + + return $count; + } + + /** + * Computes $x % GF_SIZE, where GF_SIZE is 2**GF_BITS - 1, without a slow divide. + */ + private function modNn(int $x) : int + { + while ($x >= $this->blockSize) { + $x -= $this->blockSize; + $x = ($x >> $this->symbolSize) + ($x & $this->blockSize); + } + + return $x; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Common/Version.php b/vendor/bacon/bacon-qr-code/src/Common/Version.php new file mode 100644 index 000000000..68d3d1686 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Common/Version.php @@ -0,0 +1,592 @@ +|null + */ + private static ?array $versions = null; + + /** + * @param int[] $alignmentPatternCenters + */ + private function __construct( + int $versionNumber, + array $alignmentPatternCenters, + EcBlocks ...$ecBlocks + ) { + $this->versionNumber = $versionNumber; + $this->alignmentPatternCenters = $alignmentPatternCenters; + $this->ecBlocks = $ecBlocks; + + $totalCodewords = 0; + $ecCodewords = $ecBlocks[0]->getEcCodewordsPerBlock(); + + foreach ($ecBlocks[0]->getEcBlocks() as $ecBlock) { + $totalCodewords += $ecBlock->getCount() * ($ecBlock->getDataCodewords() + $ecCodewords); + } + + $this->totalCodewords = $totalCodewords; + } + + /** + * Returns the version number. + */ + public function getVersionNumber() : int + { + return $this->versionNumber; + } + + /** + * Returns the alignment pattern centers. + * + * @return int[] + */ + public function getAlignmentPatternCenters() : array + { + return $this->alignmentPatternCenters; + } + + /** + * Returns the total number of codewords. + */ + public function getTotalCodewords() : int + { + return $this->totalCodewords; + } + + /** + * Calculates the dimension for the current version. + */ + public function getDimensionForVersion() : int + { + return 17 + 4 * $this->versionNumber; + } + + /** + * Returns the number of EC blocks for a specific EC level. + */ + public function getEcBlocksForLevel(ErrorCorrectionLevel $ecLevel) : EcBlocks + { + return $this->ecBlocks[$ecLevel->ordinal()]; + } + + /** + * Gets a provisional version number for a specific dimension. + * + * @throws InvalidArgumentException if dimension is not 1 mod 4 + */ + public static function getProvisionalVersionForDimension(int $dimension) : self + { + if (1 !== $dimension % 4) { + throw new InvalidArgumentException('Dimension is not 1 mod 4'); + } + + return self::getVersionForNumber(intdiv($dimension - 17, 4)); + } + + /** + * Gets a version instance for a specific version number. + * + * @throws InvalidArgumentException if version number is out of range + */ + public static function getVersionForNumber(int $versionNumber) : self + { + if ($versionNumber < 1 || $versionNumber > 40) { + throw new InvalidArgumentException('Version number must be between 1 and 40'); + } + + return self::versions()[$versionNumber - 1]; + } + + /** + * Decodes version information from an integer and returns the version. + */ + public static function decodeVersionInformation(int $versionBits) : ?self + { + $bestDifference = PHP_INT_MAX; + $bestVersion = 0; + + foreach (self::VERSION_DECODE_INFO as $i => $targetVersion) { + if ($targetVersion === $versionBits) { + return self::getVersionForNumber($i + 7); + } + + $bitsDifference = FormatInformation::numBitsDiffering($versionBits, $targetVersion); + + if ($bitsDifference < $bestDifference) { + $bestVersion = $i + 7; + $bestDifference = $bitsDifference; + } + } + + if ($bestDifference <= 3) { + return self::getVersionForNumber($bestVersion); + } + + return null; + } + + /** + * Builds the function pattern for the current version. + */ + public function buildFunctionPattern() : BitMatrix + { + $dimension = $this->getDimensionForVersion(); + $bitMatrix = new BitMatrix($dimension); + + // Top left finder pattern + separator + format + $bitMatrix->setRegion(0, 0, 9, 9); + // Top right finder pattern + separator + format + $bitMatrix->setRegion($dimension - 8, 0, 8, 9); + // Bottom left finder pattern + separator + format + $bitMatrix->setRegion(0, $dimension - 8, 9, 8); + + // Alignment patterns + $max = count($this->alignmentPatternCenters); + + for ($x = 0; $x < $max; ++$x) { + $i = $this->alignmentPatternCenters[$x] - 2; + + for ($y = 0; $y < $max; ++$y) { + if (($x === 0 && ($y === 0 || $y === $max - 1)) || ($x === $max - 1 && $y === 0)) { + // No alignment patterns near the three finder paterns + continue; + } + + $bitMatrix->setRegion($this->alignmentPatternCenters[$y] - 2, $i, 5, 5); + } + } + + // Vertical timing pattern + $bitMatrix->setRegion(6, 9, 1, $dimension - 17); + // Horizontal timing pattern + $bitMatrix->setRegion(9, 6, $dimension - 17, 1); + + if ($this->versionNumber > 6) { + // Version info, top right + $bitMatrix->setRegion($dimension - 11, 0, 3, 6); + // Version info, bottom left + $bitMatrix->setRegion(0, $dimension - 11, 6, 3); + } + + return $bitMatrix; + } + + /** + * Returns a string representation for the version. + */ + public function __toString() : string + { + return (string) $this->versionNumber; + } + + /** + * Build and cache a specific version. + * + * See ISO 18004:2006 6.5.1 Table 9. + * + * @return array + */ + private static function versions() : array + { + if (null !== self::$versions) { + return self::$versions; + } + + return self::$versions = [ + new self( + 1, + [], + new EcBlocks(7, new EcBlock(1, 19)), + new EcBlocks(10, new EcBlock(1, 16)), + new EcBlocks(13, new EcBlock(1, 13)), + new EcBlocks(17, new EcBlock(1, 9)) + ), + new self( + 2, + [6, 18], + new EcBlocks(10, new EcBlock(1, 34)), + new EcBlocks(16, new EcBlock(1, 28)), + new EcBlocks(22, new EcBlock(1, 22)), + new EcBlocks(28, new EcBlock(1, 16)) + ), + new self( + 3, + [6, 22], + new EcBlocks(15, new EcBlock(1, 55)), + new EcBlocks(26, new EcBlock(1, 44)), + new EcBlocks(18, new EcBlock(2, 17)), + new EcBlocks(22, new EcBlock(2, 13)) + ), + new self( + 4, + [6, 26], + new EcBlocks(20, new EcBlock(1, 80)), + new EcBlocks(18, new EcBlock(2, 32)), + new EcBlocks(26, new EcBlock(2, 24)), + new EcBlocks(16, new EcBlock(4, 9)) + ), + new self( + 5, + [6, 30], + new EcBlocks(26, new EcBlock(1, 108)), + new EcBlocks(24, new EcBlock(2, 43)), + new EcBlocks(18, new EcBlock(2, 15), new EcBlock(2, 16)), + new EcBlocks(22, new EcBlock(2, 11), new EcBlock(2, 12)) + ), + new self( + 6, + [6, 34], + new EcBlocks(18, new EcBlock(2, 68)), + new EcBlocks(16, new EcBlock(4, 27)), + new EcBlocks(24, new EcBlock(4, 19)), + new EcBlocks(28, new EcBlock(4, 15)) + ), + new self( + 7, + [6, 22, 38], + new EcBlocks(20, new EcBlock(2, 78)), + new EcBlocks(18, new EcBlock(4, 31)), + new EcBlocks(18, new EcBlock(2, 14), new EcBlock(4, 15)), + new EcBlocks(26, new EcBlock(4, 13), new EcBlock(1, 14)) + ), + new self( + 8, + [6, 24, 42], + new EcBlocks(24, new EcBlock(2, 97)), + new EcBlocks(22, new EcBlock(2, 38), new EcBlock(2, 39)), + new EcBlocks(22, new EcBlock(4, 18), new EcBlock(2, 19)), + new EcBlocks(26, new EcBlock(4, 14), new EcBlock(2, 15)) + ), + new self( + 9, + [6, 26, 46], + new EcBlocks(30, new EcBlock(2, 116)), + new EcBlocks(22, new EcBlock(3, 36), new EcBlock(2, 37)), + new EcBlocks(20, new EcBlock(4, 16), new EcBlock(4, 17)), + new EcBlocks(24, new EcBlock(4, 12), new EcBlock(4, 13)) + ), + new self( + 10, + [6, 28, 50], + new EcBlocks(18, new EcBlock(2, 68), new EcBlock(2, 69)), + new EcBlocks(26, new EcBlock(4, 43), new EcBlock(1, 44)), + new EcBlocks(24, new EcBlock(6, 19), new EcBlock(2, 20)), + new EcBlocks(28, new EcBlock(6, 15), new EcBlock(2, 16)) + ), + new self( + 11, + [6, 30, 54], + new EcBlocks(20, new EcBlock(4, 81)), + new EcBlocks(30, new EcBlock(1, 50), new EcBlock(4, 51)), + new EcBlocks(28, new EcBlock(4, 22), new EcBlock(4, 23)), + new EcBlocks(24, new EcBlock(3, 12), new EcBlock(8, 13)) + ), + new self( + 12, + [6, 32, 58], + new EcBlocks(24, new EcBlock(2, 92), new EcBlock(2, 93)), + new EcBlocks(22, new EcBlock(6, 36), new EcBlock(2, 37)), + new EcBlocks(26, new EcBlock(4, 20), new EcBlock(6, 21)), + new EcBlocks(28, new EcBlock(7, 14), new EcBlock(4, 15)) + ), + new self( + 13, + [6, 34, 62], + new EcBlocks(26, new EcBlock(4, 107)), + new EcBlocks(22, new EcBlock(8, 37), new EcBlock(1, 38)), + new EcBlocks(24, new EcBlock(8, 20), new EcBlock(4, 21)), + new EcBlocks(22, new EcBlock(12, 11), new EcBlock(4, 12)) + ), + new self( + 14, + [6, 26, 46, 66], + new EcBlocks(30, new EcBlock(3, 115), new EcBlock(1, 116)), + new EcBlocks(24, new EcBlock(4, 40), new EcBlock(5, 41)), + new EcBlocks(20, new EcBlock(11, 16), new EcBlock(5, 17)), + new EcBlocks(24, new EcBlock(11, 12), new EcBlock(5, 13)) + ), + new self( + 15, + [6, 26, 48, 70], + new EcBlocks(22, new EcBlock(5, 87), new EcBlock(1, 88)), + new EcBlocks(24, new EcBlock(5, 41), new EcBlock(5, 42)), + new EcBlocks(30, new EcBlock(5, 24), new EcBlock(7, 25)), + new EcBlocks(24, new EcBlock(11, 12), new EcBlock(7, 13)) + ), + new self( + 16, + [6, 26, 50, 74], + new EcBlocks(24, new EcBlock(5, 98), new EcBlock(1, 99)), + new EcBlocks(28, new EcBlock(7, 45), new EcBlock(3, 46)), + new EcBlocks(24, new EcBlock(15, 19), new EcBlock(2, 20)), + new EcBlocks(30, new EcBlock(3, 15), new EcBlock(13, 16)) + ), + new self( + 17, + [6, 30, 54, 78], + new EcBlocks(28, new EcBlock(1, 107), new EcBlock(5, 108)), + new EcBlocks(28, new EcBlock(10, 46), new EcBlock(1, 47)), + new EcBlocks(28, new EcBlock(1, 22), new EcBlock(15, 23)), + new EcBlocks(28, new EcBlock(2, 14), new EcBlock(17, 15)) + ), + new self( + 18, + [6, 30, 56, 82], + new EcBlocks(30, new EcBlock(5, 120), new EcBlock(1, 121)), + new EcBlocks(26, new EcBlock(9, 43), new EcBlock(4, 44)), + new EcBlocks(28, new EcBlock(17, 22), new EcBlock(1, 23)), + new EcBlocks(28, new EcBlock(2, 14), new EcBlock(19, 15)) + ), + new self( + 19, + [6, 30, 58, 86], + new EcBlocks(28, new EcBlock(3, 113), new EcBlock(4, 114)), + new EcBlocks(26, new EcBlock(3, 44), new EcBlock(11, 45)), + new EcBlocks(26, new EcBlock(17, 21), new EcBlock(4, 22)), + new EcBlocks(26, new EcBlock(9, 13), new EcBlock(16, 14)) + ), + new self( + 20, + [6, 34, 62, 90], + new EcBlocks(28, new EcBlock(3, 107), new EcBlock(5, 108)), + new EcBlocks(26, new EcBlock(3, 41), new EcBlock(13, 42)), + new EcBlocks(30, new EcBlock(15, 24), new EcBlock(5, 25)), + new EcBlocks(28, new EcBlock(15, 15), new EcBlock(10, 16)) + ), + new self( + 21, + [6, 28, 50, 72, 94], + new EcBlocks(28, new EcBlock(4, 116), new EcBlock(4, 117)), + new EcBlocks(26, new EcBlock(17, 42)), + new EcBlocks(28, new EcBlock(17, 22), new EcBlock(6, 23)), + new EcBlocks(30, new EcBlock(19, 16), new EcBlock(6, 17)) + ), + new self( + 22, + [6, 26, 50, 74, 98], + new EcBlocks(28, new EcBlock(2, 111), new EcBlock(7, 112)), + new EcBlocks(28, new EcBlock(17, 46)), + new EcBlocks(30, new EcBlock(7, 24), new EcBlock(16, 25)), + new EcBlocks(24, new EcBlock(34, 13)) + ), + new self( + 23, + [6, 30, 54, 78, 102], + new EcBlocks(30, new EcBlock(4, 121), new EcBlock(5, 122)), + new EcBlocks(28, new EcBlock(4, 47), new EcBlock(14, 48)), + new EcBlocks(30, new EcBlock(11, 24), new EcBlock(14, 25)), + new EcBlocks(30, new EcBlock(16, 15), new EcBlock(14, 16)) + ), + new self( + 24, + [6, 28, 54, 80, 106], + new EcBlocks(30, new EcBlock(6, 117), new EcBlock(4, 118)), + new EcBlocks(28, new EcBlock(6, 45), new EcBlock(14, 46)), + new EcBlocks(30, new EcBlock(11, 24), new EcBlock(16, 25)), + new EcBlocks(30, new EcBlock(30, 16), new EcBlock(2, 17)) + ), + new self( + 25, + [6, 32, 58, 84, 110], + new EcBlocks(26, new EcBlock(8, 106), new EcBlock(4, 107)), + new EcBlocks(28, new EcBlock(8, 47), new EcBlock(13, 48)), + new EcBlocks(30, new EcBlock(7, 24), new EcBlock(22, 25)), + new EcBlocks(30, new EcBlock(22, 15), new EcBlock(13, 16)) + ), + new self( + 26, + [6, 30, 58, 86, 114], + new EcBlocks(28, new EcBlock(10, 114), new EcBlock(2, 115)), + new EcBlocks(28, new EcBlock(19, 46), new EcBlock(4, 47)), + new EcBlocks(28, new EcBlock(28, 22), new EcBlock(6, 23)), + new EcBlocks(30, new EcBlock(33, 16), new EcBlock(4, 17)) + ), + new self( + 27, + [6, 34, 62, 90, 118], + new EcBlocks(30, new EcBlock(8, 122), new EcBlock(4, 123)), + new EcBlocks(28, new EcBlock(22, 45), new EcBlock(3, 46)), + new EcBlocks(30, new EcBlock(8, 23), new EcBlock(26, 24)), + new EcBlocks(30, new EcBlock(12, 15), new EcBlock(28, 16)) + ), + new self( + 28, + [6, 26, 50, 74, 98, 122], + new EcBlocks(30, new EcBlock(3, 117), new EcBlock(10, 118)), + new EcBlocks(28, new EcBlock(3, 45), new EcBlock(23, 46)), + new EcBlocks(30, new EcBlock(4, 24), new EcBlock(31, 25)), + new EcBlocks(30, new EcBlock(11, 15), new EcBlock(31, 16)) + ), + new self( + 29, + [6, 30, 54, 78, 102, 126], + new EcBlocks(30, new EcBlock(7, 116), new EcBlock(7, 117)), + new EcBlocks(28, new EcBlock(21, 45), new EcBlock(7, 46)), + new EcBlocks(30, new EcBlock(1, 23), new EcBlock(37, 24)), + new EcBlocks(30, new EcBlock(19, 15), new EcBlock(26, 16)) + ), + new self( + 30, + [6, 26, 52, 78, 104, 130], + new EcBlocks(30, new EcBlock(5, 115), new EcBlock(10, 116)), + new EcBlocks(28, new EcBlock(19, 47), new EcBlock(10, 48)), + new EcBlocks(30, new EcBlock(15, 24), new EcBlock(25, 25)), + new EcBlocks(30, new EcBlock(23, 15), new EcBlock(25, 16)) + ), + new self( + 31, + [6, 30, 56, 82, 108, 134], + new EcBlocks(30, new EcBlock(13, 115), new EcBlock(3, 116)), + new EcBlocks(28, new EcBlock(2, 46), new EcBlock(29, 47)), + new EcBlocks(30, new EcBlock(42, 24), new EcBlock(1, 25)), + new EcBlocks(30, new EcBlock(23, 15), new EcBlock(28, 16)) + ), + new self( + 32, + [6, 34, 60, 86, 112, 138], + new EcBlocks(30, new EcBlock(17, 115)), + new EcBlocks(28, new EcBlock(10, 46), new EcBlock(23, 47)), + new EcBlocks(30, new EcBlock(10, 24), new EcBlock(35, 25)), + new EcBlocks(30, new EcBlock(19, 15), new EcBlock(35, 16)) + ), + new self( + 33, + [6, 30, 58, 86, 114, 142], + new EcBlocks(30, new EcBlock(17, 115), new EcBlock(1, 116)), + new EcBlocks(28, new EcBlock(14, 46), new EcBlock(21, 47)), + new EcBlocks(30, new EcBlock(29, 24), new EcBlock(19, 25)), + new EcBlocks(30, new EcBlock(11, 15), new EcBlock(46, 16)) + ), + new self( + 34, + [6, 34, 62, 90, 118, 146], + new EcBlocks(30, new EcBlock(13, 115), new EcBlock(6, 116)), + new EcBlocks(28, new EcBlock(14, 46), new EcBlock(23, 47)), + new EcBlocks(30, new EcBlock(44, 24), new EcBlock(7, 25)), + new EcBlocks(30, new EcBlock(59, 16), new EcBlock(1, 17)) + ), + new self( + 35, + [6, 30, 54, 78, 102, 126, 150], + new EcBlocks(30, new EcBlock(12, 121), new EcBlock(7, 122)), + new EcBlocks(28, new EcBlock(12, 47), new EcBlock(26, 48)), + new EcBlocks(30, new EcBlock(39, 24), new EcBlock(14, 25)), + new EcBlocks(30, new EcBlock(22, 15), new EcBlock(41, 16)) + ), + new self( + 36, + [6, 24, 50, 76, 102, 128, 154], + new EcBlocks(30, new EcBlock(6, 121), new EcBlock(14, 122)), + new EcBlocks(28, new EcBlock(6, 47), new EcBlock(34, 48)), + new EcBlocks(30, new EcBlock(46, 24), new EcBlock(10, 25)), + new EcBlocks(30, new EcBlock(2, 15), new EcBlock(64, 16)) + ), + new self( + 37, + [6, 28, 54, 80, 106, 132, 158], + new EcBlocks(30, new EcBlock(17, 122), new EcBlock(4, 123)), + new EcBlocks(28, new EcBlock(29, 46), new EcBlock(14, 47)), + new EcBlocks(30, new EcBlock(49, 24), new EcBlock(10, 25)), + new EcBlocks(30, new EcBlock(24, 15), new EcBlock(46, 16)) + ), + new self( + 38, + [6, 32, 58, 84, 110, 136, 162], + new EcBlocks(30, new EcBlock(4, 122), new EcBlock(18, 123)), + new EcBlocks(28, new EcBlock(13, 46), new EcBlock(32, 47)), + new EcBlocks(30, new EcBlock(48, 24), new EcBlock(14, 25)), + new EcBlocks(30, new EcBlock(42, 15), new EcBlock(32, 16)) + ), + new self( + 39, + [6, 26, 54, 82, 110, 138, 166], + new EcBlocks(30, new EcBlock(20, 117), new EcBlock(4, 118)), + new EcBlocks(28, new EcBlock(40, 47), new EcBlock(7, 48)), + new EcBlocks(30, new EcBlock(43, 24), new EcBlock(22, 25)), + new EcBlocks(30, new EcBlock(10, 15), new EcBlock(67, 16)) + ), + new self( + 40, + [6, 30, 58, 86, 114, 142, 170], + new EcBlocks(30, new EcBlock(19, 118), new EcBlock(6, 119)), + new EcBlocks(28, new EcBlock(18, 47), new EcBlock(31, 48)), + new EcBlocks(30, new EcBlock(34, 24), new EcBlock(34, 25)), + new EcBlocks(30, new EcBlock(20, 15), new EcBlock(61, 16)) + ), + ]; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Encoder/BlockPair.php b/vendor/bacon/bacon-qr-code/src/Encoder/BlockPair.php new file mode 100644 index 000000000..b1dc5c45b --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Encoder/BlockPair.php @@ -0,0 +1,44 @@ + $dataBytes Data bytes in the block. + * @param SplFixedArray $errorCorrectionBytes Error correction bytes in the block. + */ + public function __construct( + private readonly SplFixedArray $dataBytes, + private readonly SplFixedArray $errorCorrectionBytes + ) { + } + + /** + * Gets the data bytes. + * + * @return SplFixedArray + */ + public function getDataBytes() : SplFixedArray + { + return $this->dataBytes; + } + + /** + * Gets the error correction bytes. + * + * @return SplFixedArray + */ + public function getErrorCorrectionBytes() : SplFixedArray + { + return $this->errorCorrectionBytes; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php b/vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php new file mode 100644 index 000000000..eefcf1c49 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php @@ -0,0 +1,134 @@ +> + */ + private SplFixedArray $bytes; + + public function __construct(private readonly int $width, private readonly int $height) + { + $this->bytes = new SplFixedArray($height); + + for ($y = 0; $y < $height; ++$y) { + $this->bytes[$y] = SplFixedArray::fromArray(array_fill(0, $width, 0)); + } + } + + /** + * Gets the width of the matrix. + */ + public function getWidth() : int + { + return $this->width; + } + + /** + * Gets the height of the matrix. + */ + public function getHeight() : int + { + return $this->height; + } + + /** + * Gets the internal representation of the matrix. + * + * @return SplFixedArray> + */ + public function getArray() : SplFixedArray + { + return $this->bytes; + } + + /** + * @return Traversable + */ + public function getBytes() : Traversable + { + foreach ($this->bytes as $row) { + foreach ($row as $byte) { + yield $byte; + } + } + } + + /** + * Gets the byte for a specific position. + */ + public function get(int $x, int $y) : int + { + return $this->bytes[$y][$x]; + } + + /** + * Sets the byte for a specific position. + */ + public function set(int $x, int $y, int $value) : void + { + $this->bytes[$y][$x] = $value; + } + + /** + * Clears the matrix with a specific value. + */ + public function clear(int $value) : void + { + for ($y = 0; $y < $this->height; ++$y) { + for ($x = 0; $x < $this->width; ++$x) { + $this->bytes[$y][$x] = $value; + } + } + } + + public function __clone() + { + $this->bytes = clone $this->bytes; + + foreach ($this->bytes as $index => $row) { + $this->bytes[$index] = clone $row; + } + } + + /** + * Returns a string representation of the matrix. + */ + public function __toString() : string + { + $result = ''; + + for ($y = 0; $y < $this->height; $y++) { + for ($x = 0; $x < $this->width; $x++) { + switch ($this->bytes[$y][$x]) { + case 0: + $result .= ' 0'; + break; + + case 1: + $result .= ' 1'; + break; + + default: + $result .= ' '; + break; + } + } + + $result .= "\n"; + } + + return $result; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php b/vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php new file mode 100644 index 000000000..c363953a5 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php @@ -0,0 +1,679 @@ + + */ + private static array $codecs = []; + + /** + * Encodes "content" with the error correction level "ecLevel". + */ + public static function encode( + string $content, + ErrorCorrectionLevel $ecLevel, + string $encoding = self::DEFAULT_BYTE_MODE_ENCODING, + ?Version $forcedVersion = null, + // Barcode scanner might not be able to read the encoded message of the QR code with the prefix ECI of UTF-8 + bool $prefixEci = true + ) : QrCode { + // Pick an encoding mode appropriate for the content. Note that this + // will not attempt to use multiple modes / segments even if that were + // more efficient. Would be nice. + $mode = self::chooseMode($content, $encoding); + + // This will store the header information, like mode and length, as well + // as "header" segments like an ECI segment. + $headerBits = new BitArray(); + + // Append ECI segment if applicable + if ($prefixEci && Mode::BYTE() === $mode && self::DEFAULT_BYTE_MODE_ENCODING !== $encoding) { + $eci = CharacterSetEci::getCharacterSetEciByName($encoding); + + if (null !== $eci) { + self::appendEci($eci, $headerBits); + } + } + + // (With ECI in place,) Write the mode marker + self::appendModeInfo($mode, $headerBits); + + // Collect data within the main segment, separately, to count its size + // if needed. Don't add it to main payload yet. + $dataBits = new BitArray(); + self::appendBytes($content, $mode, $dataBits, $encoding); + + // Hard part: need to know version to know how many bits length takes. + // But need to know how many bits it takes to know version. First we + // take a guess at version by assuming version will be the minimum, 1: + $provisionalBitsNeeded = $headerBits->getSize() + + $mode->getCharacterCountBits(Version::getVersionForNumber(1)) + + $dataBits->getSize(); + $provisionalVersion = self::chooseVersion($provisionalBitsNeeded, $ecLevel); + + // Use that guess to calculate the right version. I am still not sure + // this works in 100% of cases. + $bitsNeeded = $headerBits->getSize() + + $mode->getCharacterCountBits($provisionalVersion) + + $dataBits->getSize(); + $version = self::chooseVersion($bitsNeeded, $ecLevel); + + if (null !== $forcedVersion) { + // Forced version check + if ($version->getVersionNumber() <= $forcedVersion->getVersionNumber()) { + // Calculated minimum version is same or equal as forced version + $version = $forcedVersion; + } else { + throw new WriterException( + 'Invalid version! Calculated version: ' + . $version->getVersionNumber() + . ', requested version: ' + . $forcedVersion->getVersionNumber() + ); + } + } + + $headerAndDataBits = new BitArray(); + $headerAndDataBits->appendBitArray($headerBits); + + // Find "length" of main segment and write it. + $numLetters = (Mode::BYTE() === $mode ? $dataBits->getSizeInBytes() : strlen($content)); + self::appendLengthInfo($numLetters, $version, $mode, $headerAndDataBits); + + // Put data together into the overall payload. + $headerAndDataBits->appendBitArray($dataBits); + $ecBlocks = $version->getEcBlocksForLevel($ecLevel); + $numDataBytes = $version->getTotalCodewords() - $ecBlocks->getTotalEcCodewords(); + + // Terminate the bits properly. + self::terminateBits($numDataBytes, $headerAndDataBits); + + // Interleave data bits with error correction code. + $finalBits = self::interleaveWithEcBytes( + $headerAndDataBits, + $version->getTotalCodewords(), + $numDataBytes, + $ecBlocks->getNumBlocks() + ); + + // Choose the mask pattern. + $dimension = $version->getDimensionForVersion(); + $matrix = new ByteMatrix($dimension, $dimension); + $maskPattern = self::chooseMaskPattern($finalBits, $ecLevel, $version, $matrix); + + // Build the matrix. + MatrixUtil::buildMatrix($finalBits, $ecLevel, $version, $maskPattern, $matrix); + + return new QrCode($mode, $ecLevel, $version, $maskPattern, $matrix); + } + + /** + * Gets the alphanumeric code for a byte. + */ + private static function getAlphanumericCode(int $code) : int + { + if (isset(self::ALPHANUMERIC_TABLE[$code])) { + return self::ALPHANUMERIC_TABLE[$code]; + } + + return -1; + } + + /** + * Chooses the best mode for a given content. + */ + private static function chooseMode(string $content, ?string $encoding = null) : Mode + { + if (null !== $encoding && 0 === strcasecmp($encoding, 'SHIFT-JIS')) { + return self::isOnlyDoubleByteKanji($content) ? Mode::KANJI() : Mode::BYTE(); + } + + $hasNumeric = false; + $hasAlphanumeric = false; + $contentLength = strlen($content); + + for ($i = 0; $i < $contentLength; ++$i) { + $char = $content[$i]; + + if (ctype_digit($char)) { + $hasNumeric = true; + } elseif (-1 !== self::getAlphanumericCode(ord($char))) { + $hasAlphanumeric = true; + } else { + return Mode::BYTE(); + } + } + + if ($hasAlphanumeric) { + return Mode::ALPHANUMERIC(); + } elseif ($hasNumeric) { + return Mode::NUMERIC(); + } + + return Mode::BYTE(); + } + + /** + * Calculates the mask penalty for a matrix. + */ + private static function calculateMaskPenalty(ByteMatrix $matrix) : int + { + return ( + MaskUtil::applyMaskPenaltyRule1($matrix) + + MaskUtil::applyMaskPenaltyRule2($matrix) + + MaskUtil::applyMaskPenaltyRule3($matrix) + + MaskUtil::applyMaskPenaltyRule4($matrix) + ); + } + + /** + * Checks if content only consists of double-byte kanji characters. + */ + private static function isOnlyDoubleByteKanji(string $content) : bool + { + $bytes = @iconv('utf-8', 'SHIFT-JIS', $content); + + if (false === $bytes) { + return false; + } + + $length = strlen($bytes); + + if (0 !== $length % 2) { + return false; + } + + for ($i = 0; $i < $length; $i += 2) { + $byte = ord($bytes[$i]) & 0xff; + + if (($byte < 0x81 || $byte > 0x9f) && $byte < 0xe0 || $byte > 0xeb) { + return false; + } + } + + return true; + } + + /** + * Chooses the best mask pattern for a matrix. + */ + private static function chooseMaskPattern( + BitArray $bits, + ErrorCorrectionLevel $ecLevel, + Version $version, + ByteMatrix $matrix + ) : int { + $minPenalty = PHP_INT_MAX; + $bestMaskPattern = -1; + + for ($maskPattern = 0; $maskPattern < QrCode::NUM_MASK_PATTERNS; ++$maskPattern) { + MatrixUtil::buildMatrix($bits, $ecLevel, $version, $maskPattern, $matrix); + $penalty = self::calculateMaskPenalty($matrix); + + if ($penalty < $minPenalty) { + $minPenalty = $penalty; + $bestMaskPattern = $maskPattern; + } + } + + return $bestMaskPattern; + } + + /** + * Chooses the best version for the input. + * + * @throws WriterException if data is too big + */ + private static function chooseVersion(int $numInputBits, ErrorCorrectionLevel $ecLevel) : Version + { + for ($versionNum = 1; $versionNum <= 40; ++$versionNum) { + $version = Version::getVersionForNumber($versionNum); + $numBytes = $version->getTotalCodewords(); + + $ecBlocks = $version->getEcBlocksForLevel($ecLevel); + $numEcBytes = $ecBlocks->getTotalEcCodewords(); + + $numDataBytes = $numBytes - $numEcBytes; + $totalInputBytes = intdiv($numInputBits + 8, 8); + + if ($numDataBytes >= $totalInputBytes) { + return $version; + } + } + + throw new WriterException('Data too big'); + } + + /** + * Terminates the bits in a bit array. + * + * @throws WriterException if data bits cannot fit in the QR code + * @throws WriterException if bits size does not equal the capacity + */ + private static function terminateBits(int $numDataBytes, BitArray $bits) : void + { + $capacity = $numDataBytes << 3; + + if ($bits->getSize() > $capacity) { + throw new WriterException('Data bits cannot fit in the QR code'); + } + + for ($i = 0; $i < 4 && $bits->getSize() < $capacity; ++$i) { + $bits->appendBit(false); + } + + $numBitsInLastByte = $bits->getSize() & 0x7; + + if ($numBitsInLastByte > 0) { + for ($i = $numBitsInLastByte; $i < 8; ++$i) { + $bits->appendBit(false); + } + } + + $numPaddingBytes = $numDataBytes - $bits->getSizeInBytes(); + + for ($i = 0; $i < $numPaddingBytes; ++$i) { + $bits->appendBits(0 === ($i & 0x1) ? 0xec : 0x11, 8); + } + + if ($bits->getSize() !== $capacity) { + throw new WriterException('Bits size does not equal capacity'); + } + } + + /** + * Gets number of data- and EC bytes for a block ID. + * + * @return int[] + * @throws WriterException if block ID is too large + * @throws WriterException if EC bytes mismatch + * @throws WriterException if RS blocks mismatch + * @throws WriterException if total bytes mismatch + */ + private static function getNumDataBytesAndNumEcBytesForBlockId( + int $numTotalBytes, + int $numDataBytes, + int $numRsBlocks, + int $blockId + ) : array { + if ($blockId >= $numRsBlocks) { + throw new WriterException('Block ID too large'); + } + + $numRsBlocksInGroup2 = $numTotalBytes % $numRsBlocks; + $numRsBlocksInGroup1 = $numRsBlocks - $numRsBlocksInGroup2; + $numTotalBytesInGroup1 = intdiv($numTotalBytes, $numRsBlocks); + $numTotalBytesInGroup2 = $numTotalBytesInGroup1 + 1; + $numDataBytesInGroup1 = intdiv($numDataBytes, $numRsBlocks); + $numDataBytesInGroup2 = $numDataBytesInGroup1 + 1; + $numEcBytesInGroup1 = $numTotalBytesInGroup1 - $numDataBytesInGroup1; + $numEcBytesInGroup2 = $numTotalBytesInGroup2 - $numDataBytesInGroup2; + + if ($numEcBytesInGroup1 !== $numEcBytesInGroup2) { + throw new WriterException('EC bytes mismatch'); + } + + if ($numRsBlocks !== $numRsBlocksInGroup1 + $numRsBlocksInGroup2) { + throw new WriterException('RS blocks mismatch'); + } + + if ($numTotalBytes !== + (($numDataBytesInGroup1 + $numEcBytesInGroup1) * $numRsBlocksInGroup1) + + (($numDataBytesInGroup2 + $numEcBytesInGroup2) * $numRsBlocksInGroup2) + ) { + throw new WriterException('Total bytes mismatch'); + } + + if ($blockId < $numRsBlocksInGroup1) { + return [$numDataBytesInGroup1, $numEcBytesInGroup1]; + } else { + return [$numDataBytesInGroup2, $numEcBytesInGroup2]; + } + } + + /** + * Interleaves data with EC bytes. + * + * @throws WriterException if number of bits and data bytes does not match + * @throws WriterException if data bytes does not match offset + * @throws WriterException if an interleaving error occurs + */ + private static function interleaveWithEcBytes( + BitArray $bits, + int $numTotalBytes, + int $numDataBytes, + int $numRsBlocks + ) : BitArray { + if ($bits->getSizeInBytes() !== $numDataBytes) { + throw new WriterException('Number of bits and data bytes does not match'); + } + + $dataBytesOffset = 0; + $maxNumDataBytes = 0; + $maxNumEcBytes = 0; + + $blocks = new SplFixedArray($numRsBlocks); + + for ($i = 0; $i < $numRsBlocks; ++$i) { + list($numDataBytesInBlock, $numEcBytesInBlock) = self::getNumDataBytesAndNumEcBytesForBlockId( + $numTotalBytes, + $numDataBytes, + $numRsBlocks, + $i + ); + + $size = $numDataBytesInBlock; + $dataBytes = $bits->toBytes(8 * $dataBytesOffset, $size); + $ecBytes = self::generateEcBytes($dataBytes, $numEcBytesInBlock); + $blocks[$i] = new BlockPair($dataBytes, $ecBytes); + + $maxNumDataBytes = max($maxNumDataBytes, $size); + $maxNumEcBytes = max($maxNumEcBytes, count($ecBytes)); + $dataBytesOffset += $numDataBytesInBlock; + } + + if ($numDataBytes !== $dataBytesOffset) { + throw new WriterException('Data bytes does not match offset'); + } + + $result = new BitArray(); + + for ($i = 0; $i < $maxNumDataBytes; ++$i) { + foreach ($blocks as $block) { + $dataBytes = $block->getDataBytes(); + + if ($i < count($dataBytes)) { + $result->appendBits($dataBytes[$i], 8); + } + } + } + + for ($i = 0; $i < $maxNumEcBytes; ++$i) { + foreach ($blocks as $block) { + $ecBytes = $block->getErrorCorrectionBytes(); + + if ($i < count($ecBytes)) { + $result->appendBits($ecBytes[$i], 8); + } + } + } + + if ($numTotalBytes !== $result->getSizeInBytes()) { + throw new WriterException( + 'Interleaving error: ' . $numTotalBytes . ' and ' . $result->getSizeInBytes() . ' differ' + ); + } + + return $result; + } + + /** + * Generates EC bytes for given data. + * + * @param SplFixedArray $dataBytes + * @return SplFixedArray + */ + private static function generateEcBytes(SplFixedArray $dataBytes, int $numEcBytesInBlock) : SplFixedArray + { + $numDataBytes = count($dataBytes); + $toEncode = new SplFixedArray($numDataBytes + $numEcBytesInBlock); + + for ($i = 0; $i < $numDataBytes; $i++) { + $toEncode[$i] = $dataBytes[$i] & 0xff; + } + + $ecBytes = new SplFixedArray($numEcBytesInBlock); + $codec = self::getCodec($numDataBytes, $numEcBytesInBlock); + $codec->encode($toEncode, $ecBytes); + + return $ecBytes; + } + + /** + * Gets an RS codec and caches it. + */ + private static function getCodec(int $numDataBytes, int $numEcBytesInBlock) : ReedSolomonCodec + { + $cacheId = $numDataBytes . '-' . $numEcBytesInBlock; + + if (isset(self::$codecs[$cacheId])) { + return self::$codecs[$cacheId]; + } + + return self::$codecs[$cacheId] = new ReedSolomonCodec( + 8, + 0x11d, + 0, + 1, + $numEcBytesInBlock, + 255 - $numDataBytes - $numEcBytesInBlock + ); + } + + /** + * Appends mode information to a bit array. + */ + private static function appendModeInfo(Mode $mode, BitArray $bits) : void + { + $bits->appendBits($mode->getBits(), 4); + } + + /** + * Appends length information to a bit array. + * + * @throws WriterException if num letters is bigger than expected + */ + private static function appendLengthInfo(int $numLetters, Version $version, Mode $mode, BitArray $bits) : void + { + $numBits = $mode->getCharacterCountBits($version); + + if ($numLetters >= (1 << $numBits)) { + throw new WriterException($numLetters . ' is bigger than ' . ((1 << $numBits) - 1)); + } + + $bits->appendBits($numLetters, $numBits); + } + + /** + * Appends bytes to a bit array in a specific mode. + * + * @throws WriterException if an invalid mode was supplied + */ + private static function appendBytes(string $content, Mode $mode, BitArray $bits, string $encoding) : void + { + switch ($mode) { + case Mode::NUMERIC(): + self::appendNumericBytes($content, $bits); + break; + + case Mode::ALPHANUMERIC(): + self::appendAlphanumericBytes($content, $bits); + break; + + case Mode::BYTE(): + self::append8BitBytes($content, $bits, $encoding); + break; + + case Mode::KANJI(): + self::appendKanjiBytes($content, $bits); + break; + + default: + throw new WriterException('Invalid mode: ' . $mode); + } + } + + /** + * Appends numeric bytes to a bit array. + */ + private static function appendNumericBytes(string $content, BitArray $bits) : void + { + $length = strlen($content); + $i = 0; + + while ($i < $length) { + $num1 = (int) $content[$i]; + + if ($i + 2 < $length) { + // Encode three numeric letters in ten bits. + $num2 = (int) $content[$i + 1]; + $num3 = (int) $content[$i + 2]; + $bits->appendBits($num1 * 100 + $num2 * 10 + $num3, 10); + $i += 3; + } elseif ($i + 1 < $length) { + // Encode two numeric letters in seven bits. + $num2 = (int) $content[$i + 1]; + $bits->appendBits($num1 * 10 + $num2, 7); + $i += 2; + } else { + // Encode one numeric letter in four bits. + $bits->appendBits($num1, 4); + ++$i; + } + } + } + + /** + * Appends alpha-numeric bytes to a bit array. + * + * @throws WriterException if an invalid alphanumeric code was found + */ + private static function appendAlphanumericBytes(string $content, BitArray $bits) : void + { + $length = strlen($content); + $i = 0; + + while ($i < $length) { + $code1 = self::getAlphanumericCode(ord($content[$i])); + + if (-1 === $code1) { + throw new WriterException('Invalid alphanumeric code'); + } + + if ($i + 1 < $length) { + $code2 = self::getAlphanumericCode(ord($content[$i + 1])); + + if (-1 === $code2) { + throw new WriterException('Invalid alphanumeric code'); + } + + // Encode two alphanumeric letters in 11 bits. + $bits->appendBits($code1 * 45 + $code2, 11); + $i += 2; + } else { + // Encode one alphanumeric letter in six bits. + $bits->appendBits($code1, 6); + ++$i; + } + } + } + + /** + * Appends regular 8-bit bytes to a bit array. + * + * @throws WriterException if content cannot be encoded to target encoding + */ + private static function append8BitBytes(string $content, BitArray $bits, string $encoding) : void + { + $bytes = @iconv('utf-8', $encoding, $content); + + if (false === $bytes) { + throw new WriterException('Could not encode content to ' . $encoding); + } + + $length = strlen($bytes); + + for ($i = 0; $i < $length; $i++) { + $bits->appendBits(ord($bytes[$i]), 8); + } + } + + /** + * Appends KANJI bytes to a bit array. + * + * @throws WriterException if content does not seem to be encoded in SHIFT-JIS + * @throws WriterException if an invalid byte sequence occurs + */ + private static function appendKanjiBytes(string $content, BitArray $bits) : void + { + $bytes = @iconv('utf-8', 'SHIFT-JIS', $content); + + if (false === $bytes) { + throw new WriterException('Content could not be converted to SHIFT-JIS'); + } + + if (strlen($bytes) % 2 > 0) { + // We just do a simple length check here. The for loop will check + // individual characters. + throw new WriterException('Content does not seem to be encoded in SHIFT-JIS'); + } + + $length = strlen($bytes); + + for ($i = 0; $i < $length; $i += 2) { + $byte1 = ord($bytes[$i]) & 0xff; + $byte2 = ord($bytes[$i + 1]) & 0xff; + $code = ($byte1 << 8) | $byte2; + + if ($code >= 0x8140 && $code <= 0x9ffc) { + $subtracted = $code - 0x8140; + } elseif ($code >= 0xe040 && $code <= 0xebbf) { + $subtracted = $code - 0xc140; + } else { + throw new WriterException('Invalid byte sequence'); + } + + $encoded = (($subtracted >> 8) * 0xc0) + ($subtracted & 0xff); + + $bits->appendBits($encoded, 13); + } + } + + /** + * Appends ECI information to a bit array. + */ + private static function appendEci(CharacterSetEci $eci, BitArray $bits) : void + { + $mode = Mode::ECI(); + $bits->appendBits($mode->getBits(), 4); + $bits->appendBits($eci->getValue(), 8); + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Encoder/MaskUtil.php b/vendor/bacon/bacon-qr-code/src/Encoder/MaskUtil.php new file mode 100644 index 000000000..54a07baad --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Encoder/MaskUtil.php @@ -0,0 +1,271 @@ +getArray(); + $width = $matrix->getWidth(); + $height = $matrix->getHeight(); + + for ($y = 0; $y < $height - 1; ++$y) { + for ($x = 0; $x < $width - 1; ++$x) { + $value = $array[$y][$x]; + + if ($value === $array[$y][$x + 1] + && $value === $array[$y + 1][$x] + && $value === $array[$y + 1][$x + 1] + ) { + ++$penalty; + } + } + } + + return self::N2 * $penalty; + } + + /** + * Applies mask penalty rule 3 and returns the penalty. + * + * Finds consecutive cells of 00001011101 or 10111010000, and gives penalty + * to them. If we find patterns like 000010111010000, we give penalties + * twice (i.e. 40 * 2). + */ + public static function applyMaskPenaltyRule3(ByteMatrix $matrix) : int + { + $penalty = 0; + $array = $matrix->getArray(); + $width = $matrix->getWidth(); + $height = $matrix->getHeight(); + + for ($y = 0; $y < $height; ++$y) { + for ($x = 0; $x < $width; ++$x) { + if ($x + 6 < $width + && 1 === $array[$y][$x] + && 0 === $array[$y][$x + 1] + && 1 === $array[$y][$x + 2] + && 1 === $array[$y][$x + 3] + && 1 === $array[$y][$x + 4] + && 0 === $array[$y][$x + 5] + && 1 === $array[$y][$x + 6] + && ( + ( + $x + 10 < $width + && 0 === $array[$y][$x + 7] + && 0 === $array[$y][$x + 8] + && 0 === $array[$y][$x + 9] + && 0 === $array[$y][$x + 10] + ) + || ( + $x - 4 >= 0 + && 0 === $array[$y][$x - 1] + && 0 === $array[$y][$x - 2] + && 0 === $array[$y][$x - 3] + && 0 === $array[$y][$x - 4] + ) + ) + ) { + $penalty += self::N3; + } + + if ($y + 6 < $height + && 1 === $array[$y][$x] + && 0 === $array[$y + 1][$x] + && 1 === $array[$y + 2][$x] + && 1 === $array[$y + 3][$x] + && 1 === $array[$y + 4][$x] + && 0 === $array[$y + 5][$x] + && 1 === $array[$y + 6][$x] + && ( + ( + $y + 10 < $height + && 0 === $array[$y + 7][$x] + && 0 === $array[$y + 8][$x] + && 0 === $array[$y + 9][$x] + && 0 === $array[$y + 10][$x] + ) + || ( + $y - 4 >= 0 + && 0 === $array[$y - 1][$x] + && 0 === $array[$y - 2][$x] + && 0 === $array[$y - 3][$x] + && 0 === $array[$y - 4][$x] + ) + ) + ) { + $penalty += self::N3; + } + } + } + + return $penalty; + } + + /** + * Applies mask penalty rule 4 and returns the penalty. + * + * Calculates the ratio of dark cells and gives penalty if the ratio is far + * from 50%. It gives 10 penalty for 5% distance. + */ + public static function applyMaskPenaltyRule4(ByteMatrix $matrix) : int + { + $numDarkCells = 0; + + $array = $matrix->getArray(); + $width = $matrix->getWidth(); + $height = $matrix->getHeight(); + + for ($y = 0; $y < $height; ++$y) { + $arrayY = $array[$y]; + + for ($x = 0; $x < $width; ++$x) { + if (1 === $arrayY[$x]) { + ++$numDarkCells; + } + } + } + + $numTotalCells = $height * $width; + $darkRatio = $numDarkCells / $numTotalCells; + $fixedPercentVariances = (int) (abs($darkRatio - 0.5) * 20); + + return $fixedPercentVariances * self::N4; + } + + /** + * Returns the mask bit for "getMaskPattern" at "x" and "y". + * + * See 8.8 of JISX0510:2004 for mask pattern conditions. + * + * @throws InvalidArgumentException if an invalid mask pattern was supplied + */ + public static function getDataMaskBit(int $maskPattern, int $x, int $y) : bool + { + switch ($maskPattern) { + case 0: + $intermediate = ($y + $x) & 0x1; + break; + + case 1: + $intermediate = $y & 0x1; + break; + + case 2: + $intermediate = $x % 3; + break; + + case 3: + $intermediate = ($y + $x) % 3; + break; + + case 4: + $intermediate = (BitUtils::unsignedRightShift($y, 1) + (int) ($x / 3)) & 0x1; + break; + + case 5: + $temp = $y * $x; + $intermediate = ($temp & 0x1) + ($temp % 3); + break; + + case 6: + $temp = $y * $x; + $intermediate = (($temp & 0x1) + ($temp % 3)) & 0x1; + break; + + case 7: + $temp = $y * $x; + $intermediate = (($temp % 3) + (($y + $x) & 0x1)) & 0x1; + break; + + default: + throw new InvalidArgumentException('Invalid mask pattern: ' . $maskPattern); + } + + return 0 == $intermediate; + } + + /** + * Helper function for applyMaskPenaltyRule1. + * + * We need this for doing this calculation in both vertical and horizontal + * orders respectively. + */ + private static function applyMaskPenaltyRule1Internal(ByteMatrix $matrix, bool $isHorizontal) : int + { + $penalty = 0; + $iLimit = $isHorizontal ? $matrix->getHeight() : $matrix->getWidth(); + $jLimit = $isHorizontal ? $matrix->getWidth() : $matrix->getHeight(); + $array = $matrix->getArray(); + + for ($i = 0; $i < $iLimit; ++$i) { + $numSameBitCells = 0; + $prevBit = -1; + + for ($j = 0; $j < $jLimit; $j++) { + $bit = $isHorizontal ? $array[$i][$j] : $array[$j][$i]; + + if ($bit === $prevBit) { + ++$numSameBitCells; + } else { + if ($numSameBitCells >= 5) { + $penalty += self::N1 + ($numSameBitCells - 5); + } + + $numSameBitCells = 1; + $prevBit = $bit; + } + } + + if ($numSameBitCells >= 5) { + $penalty += self::N1 + ($numSameBitCells - 5); + } + } + + return $penalty; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php b/vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php new file mode 100644 index 000000000..0967e298a --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php @@ -0,0 +1,513 @@ +clear(-1); + } + + /** + * Builds a complete matrix. + */ + public static function buildMatrix( + BitArray $dataBits, + ErrorCorrectionLevel $level, + Version $version, + int $maskPattern, + ByteMatrix $matrix + ) : void { + self::clearMatrix($matrix); + self::embedBasicPatterns($version, $matrix); + self::embedTypeInfo($level, $maskPattern, $matrix); + self::maybeEmbedVersionInfo($version, $matrix); + self::embedDataBits($dataBits, $maskPattern, $matrix); + } + + /** + * Removes the position detection patterns from a matrix. + * + * This can be useful if you need to render those patterns separately. + */ + public static function removePositionDetectionPatterns(ByteMatrix $matrix) : void + { + $pdpWidth = count(self::POSITION_DETECTION_PATTERN[0]); + + self::removePositionDetectionPattern(0, 0, $matrix); + self::removePositionDetectionPattern($matrix->getWidth() - $pdpWidth, 0, $matrix); + self::removePositionDetectionPattern(0, $matrix->getWidth() - $pdpWidth, $matrix); + } + + /** + * Embeds type information into a matrix. + */ + private static function embedTypeInfo(ErrorCorrectionLevel $level, int $maskPattern, ByteMatrix $matrix) : void + { + $typeInfoBits = new BitArray(); + self::makeTypeInfoBits($level, $maskPattern, $typeInfoBits); + + $typeInfoBitsSize = $typeInfoBits->getSize(); + + for ($i = 0; $i < $typeInfoBitsSize; ++$i) { + $bit = $typeInfoBits->get($typeInfoBitsSize - 1 - $i); + + $x1 = self::TYPE_INFO_COORDINATES[$i][0]; + $y1 = self::TYPE_INFO_COORDINATES[$i][1]; + + $matrix->set($x1, $y1, (int) $bit); + + if ($i < 8) { + $x2 = $matrix->getWidth() - $i - 1; + $y2 = 8; + } else { + $x2 = 8; + $y2 = $matrix->getHeight() - 7 + ($i - 8); + } + + $matrix->set($x2, $y2, (int) $bit); + } + } + + /** + * Generates type information bits and appends them to a bit array. + * + * @throws RuntimeException if bit array resulted in invalid size + */ + private static function makeTypeInfoBits(ErrorCorrectionLevel $level, int $maskPattern, BitArray $bits) : void + { + $typeInfo = ($level->getBits() << 3) | $maskPattern; + $bits->appendBits($typeInfo, 5); + + $bchCode = self::calculateBchCode($typeInfo, self::TYPE_INFO_POLY); + $bits->appendBits($bchCode, 10); + + $maskBits = new BitArray(); + $maskBits->appendBits(self::TYPE_INFO_MASK_PATTERN, 15); + $bits->xorBits($maskBits); + + if (15 !== $bits->getSize()) { + throw new RuntimeException('Bit array resulted in invalid size: ' . $bits->getSize()); + } + } + + /** + * Embeds version information if required. + */ + private static function maybeEmbedVersionInfo(Version $version, ByteMatrix $matrix) : void + { + if ($version->getVersionNumber() < 7) { + return; + } + + $versionInfoBits = new BitArray(); + self::makeVersionInfoBits($version, $versionInfoBits); + + $bitIndex = 6 * 3 - 1; + + for ($i = 0; $i < 6; ++$i) { + for ($j = 0; $j < 3; ++$j) { + $bit = $versionInfoBits->get($bitIndex); + --$bitIndex; + + $matrix->set($i, $matrix->getHeight() - 11 + $j, (int) $bit); + $matrix->set($matrix->getHeight() - 11 + $j, $i, (int) $bit); + } + } + } + + /** + * Generates version information bits and appends them to a bit array. + * + * @throws RuntimeException if bit array resulted in invalid size + */ + private static function makeVersionInfoBits(Version $version, BitArray $bits) : void + { + $bits->appendBits($version->getVersionNumber(), 6); + + $bchCode = self::calculateBchCode($version->getVersionNumber(), self::VERSION_INFO_POLY); + $bits->appendBits($bchCode, 12); + + if (18 !== $bits->getSize()) { + throw new RuntimeException('Bit array resulted in invalid size: ' . $bits->getSize()); + } + } + + /** + * Calculates the BCH code for a value and a polynomial. + */ + private static function calculateBchCode(int $value, int $poly) : int + { + $msbSetInPoly = self::findMsbSet($poly); + $value <<= $msbSetInPoly - 1; + + while (self::findMsbSet($value) >= $msbSetInPoly) { + $value ^= $poly << (self::findMsbSet($value) - $msbSetInPoly); + } + + return $value; + } + + /** + * Finds and MSB set. + */ + private static function findMsbSet(int $value) : int + { + $numDigits = 0; + + while (0 !== $value) { + $value >>= 1; + ++$numDigits; + } + + return $numDigits; + } + + /** + * Embeds basic patterns into a matrix. + */ + private static function embedBasicPatterns(Version $version, ByteMatrix $matrix) : void + { + self::embedPositionDetectionPatternsAndSeparators($matrix); + self::embedDarkDotAtLeftBottomCorner($matrix); + self::maybeEmbedPositionAdjustmentPatterns($version, $matrix); + self::embedTimingPatterns($matrix); + } + + /** + * Embeds position detection patterns and separators into a byte matrix. + */ + private static function embedPositionDetectionPatternsAndSeparators(ByteMatrix $matrix) : void + { + $pdpWidth = count(self::POSITION_DETECTION_PATTERN[0]); + + self::embedPositionDetectionPattern(0, 0, $matrix); + self::embedPositionDetectionPattern($matrix->getWidth() - $pdpWidth, 0, $matrix); + self::embedPositionDetectionPattern(0, $matrix->getWidth() - $pdpWidth, $matrix); + + $hspWidth = 8; + + self::embedHorizontalSeparationPattern(0, $hspWidth - 1, $matrix); + self::embedHorizontalSeparationPattern($matrix->getWidth() - $hspWidth, $hspWidth - 1, $matrix); + self::embedHorizontalSeparationPattern(0, $matrix->getWidth() - $hspWidth, $matrix); + + $vspSize = 7; + + self::embedVerticalSeparationPattern($vspSize, 0, $matrix); + self::embedVerticalSeparationPattern($matrix->getHeight() - $vspSize - 1, 0, $matrix); + self::embedVerticalSeparationPattern($vspSize, $matrix->getHeight() - $vspSize, $matrix); + } + + /** + * Embeds a single position detection pattern into a byte matrix. + */ + private static function embedPositionDetectionPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void + { + for ($y = 0; $y < 7; ++$y) { + for ($x = 0; $x < 7; ++$x) { + $matrix->set($xStart + $x, $yStart + $y, self::POSITION_DETECTION_PATTERN[$y][$x]); + } + } + } + + private static function removePositionDetectionPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void + { + for ($y = 0; $y < 7; ++$y) { + for ($x = 0; $x < 7; ++$x) { + $matrix->set($xStart + $x, $yStart + $y, 0); + } + } + } + + /** + * Embeds a single horizontal separation pattern. + * + * @throws RuntimeException if a byte was already set + */ + private static function embedHorizontalSeparationPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void + { + for ($x = 0; $x < 8; $x++) { + if (-1 !== $matrix->get($xStart + $x, $yStart)) { + throw new RuntimeException('Byte already set'); + } + + $matrix->set($xStart + $x, $yStart, 0); + } + } + + /** + * Embeds a single vertical separation pattern. + * + * @throws RuntimeException if a byte was already set + */ + private static function embedVerticalSeparationPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void + { + for ($y = 0; $y < 7; $y++) { + if (-1 !== $matrix->get($xStart, $yStart + $y)) { + throw new RuntimeException('Byte already set'); + } + + $matrix->set($xStart, $yStart + $y, 0); + } + } + + /** + * Embeds a dot at the left bottom corner. + * + * @throws RuntimeException if a byte was already set to 0 + */ + private static function embedDarkDotAtLeftBottomCorner(ByteMatrix $matrix) : void + { + if (0 === $matrix->get(8, $matrix->getHeight() - 8)) { + throw new RuntimeException('Byte already set to 0'); + } + + $matrix->set(8, $matrix->getHeight() - 8, 1); + } + + /** + * Embeds position adjustment patterns if required. + */ + private static function maybeEmbedPositionAdjustmentPatterns(Version $version, ByteMatrix $matrix) : void + { + if ($version->getVersionNumber() < 2) { + return; + } + + $index = $version->getVersionNumber() - 1; + + $coordinates = self::POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[$index]; + $numCoordinates = count($coordinates); + + for ($i = 0; $i < $numCoordinates; ++$i) { + for ($j = 0; $j < $numCoordinates; ++$j) { + $y = $coordinates[$i]; + $x = $coordinates[$j]; + + if (null === $x || null === $y) { + continue; + } + + if (-1 === $matrix->get($x, $y)) { + self::embedPositionAdjustmentPattern($x - 2, $y - 2, $matrix); + } + } + } + } + + /** + * Embeds a single position adjustment pattern. + */ + private static function embedPositionAdjustmentPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void + { + for ($y = 0; $y < 5; $y++) { + for ($x = 0; $x < 5; $x++) { + $matrix->set($xStart + $x, $yStart + $y, self::POSITION_ADJUSTMENT_PATTERN[$y][$x]); + } + } + } + + /** + * Embeds timing patterns into a matrix. + */ + private static function embedTimingPatterns(ByteMatrix $matrix) : void + { + $matrixWidth = $matrix->getWidth(); + + for ($i = 8; $i < $matrixWidth - 8; ++$i) { + $bit = ($i + 1) % 2; + + if (-1 === $matrix->get($i, 6)) { + $matrix->set($i, 6, $bit); + } + + if (-1 === $matrix->get(6, $i)) { + $matrix->set(6, $i, $bit); + } + } + } + + /** + * Embeds "dataBits" using "getMaskPattern". + * + * For debugging purposes, it skips masking process if "getMaskPattern" is -1. See 8.7 of JISX0510:2004 (p.38) for + * how to embed data bits. + * + * @throws WriterException if not all bits could be consumed + */ + private static function embedDataBits(BitArray $dataBits, int $maskPattern, ByteMatrix $matrix) : void + { + $bitIndex = 0; + $direction = -1; + + // Start from the right bottom cell. + $x = $matrix->getWidth() - 1; + $y = $matrix->getHeight() - 1; + + while ($x > 0) { + // Skip vertical timing pattern. + if (6 === $x) { + --$x; + } + + while ($y >= 0 && $y < $matrix->getHeight()) { + for ($i = 0; $i < 2; $i++) { + $xx = $x - $i; + + // Skip the cell if it's not empty. + if (-1 !== $matrix->get($xx, $y)) { + continue; + } + + if ($bitIndex < $dataBits->getSize()) { + $bit = $dataBits->get($bitIndex); + ++$bitIndex; + } else { + // Padding bit. If there is no bit left, we'll fill the + // left cells with 0, as described in 8.4.9 of + // JISX0510:2004 (p. 24). + $bit = false; + } + + // Skip masking if maskPattern is -1. + if (-1 !== $maskPattern && MaskUtil::getDataMaskBit($maskPattern, $xx, $y)) { + $bit = ! $bit; + } + + $matrix->set($xx, $y, (int) $bit); + } + + $y += $direction; + } + + $direction = -$direction; + $y += $direction; + $x -= 2; + } + + // All bits should be consumed + if ($dataBits->getSize() !== $bitIndex) { + throw new WriterException('Not all bits consumed (' . $bitIndex . ' out of ' . $dataBits->getSize() .')'); + } + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Encoder/QrCode.php b/vendor/bacon/bacon-qr-code/src/Encoder/QrCode.php new file mode 100644 index 000000000..c3398f40f --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Encoder/QrCode.php @@ -0,0 +1,108 @@ +maskPattern = $maskPattern; + $this->matrix = $matrix; + } + + /** + * Gets the mode. + */ + public function getMode() : Mode + { + return $this->mode; + } + + /** + * Gets the EC level. + */ + public function getErrorCorrectionLevel() : ErrorCorrectionLevel + { + return $this->errorCorrectionLevel; + } + + /** + * Gets the version. + */ + public function getVersion() : Version + { + return $this->version; + } + + /** + * Gets the mask pattern. + */ + public function getMaskPattern() : int + { + return $this->maskPattern; + } + + public function getMatrix(): ByteMatrix + { + return $this->matrix; + } + + /** + * Validates whether a mask pattern is valid. + */ + public static function isValidMaskPattern(int $maskPattern) : bool + { + return $maskPattern > 0 && $maskPattern < self::NUM_MASK_PATTERNS; + } + + /** + * Returns a string representation of the QR code. + */ + public function __toString() : string + { + $result = "<<\n" + . ' mode: ' . $this->mode . "\n" + . ' ecLevel: ' . $this->errorCorrectionLevel . "\n" + . ' version: ' . $this->version . "\n" + . ' maskPattern: ' . $this->maskPattern . "\n"; + + if ($this->matrix === null) { + $result .= " matrix: null\n"; + } else { + $result .= " matrix:\n"; + $result .= $this->matrix; + } + + $result .= ">>\n"; + + return $result; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Exception/ExceptionInterface.php b/vendor/bacon/bacon-qr-code/src/Exception/ExceptionInterface.php new file mode 100644 index 000000000..6f70c2055 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Exception/ExceptionInterface.php @@ -0,0 +1,10 @@ + 100) { + throw new Exception\InvalidArgumentException('Alpha must be between 0 and 100'); + } + } + + public function getAlpha() : int + { + return $this->alpha; + } + + public function getBaseColor() : ColorInterface + { + return $this->baseColor; + } + + public function toRgb() : Rgb + { + return $this->baseColor->toRgb(); + } + + public function toCmyk() : Cmyk + { + return $this->baseColor->toCmyk(); + } + + public function toGray() : Gray + { + return $this->baseColor->toGray(); + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php b/vendor/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php new file mode 100644 index 000000000..d028210fa --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php @@ -0,0 +1,82 @@ + 100) { + throw new Exception\InvalidArgumentException('Cyan must be between 0 and 100'); + } + + if ($magenta < 0 || $magenta > 100) { + throw new Exception\InvalidArgumentException('Magenta must be between 0 and 100'); + } + + if ($yellow < 0 || $yellow > 100) { + throw new Exception\InvalidArgumentException('Yellow must be between 0 and 100'); + } + + if ($black < 0 || $black > 100) { + throw new Exception\InvalidArgumentException('Black must be between 0 and 100'); + } + } + + public function getCyan() : int + { + return $this->cyan; + } + + public function getMagenta() : int + { + return $this->magenta; + } + + public function getYellow() : int + { + return $this->yellow; + } + + public function getBlack() : int + { + return $this->black; + } + + public function toRgb() : Rgb + { + $k = $this->black / 100; + $c = (-$k * $this->cyan + $k * 100 + $this->cyan) / 100; + $m = (-$k * $this->magenta + $k * 100 + $this->magenta) / 100; + $y = (-$k * $this->yellow + $k * 100 + $this->yellow) / 100; + + return new Rgb( + (int) (-$c * 255 + 255), + (int) (-$m * 255 + 255), + (int) (-$y * 255 + 255) + ); + } + + public function toCmyk() : Cmyk + { + return $this; + } + + public function toGray() : Gray + { + return $this->toRgb()->toGray(); + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.php b/vendor/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.php new file mode 100644 index 000000000..b50d1cace --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.php @@ -0,0 +1,22 @@ + 100) { + throw new Exception\InvalidArgumentException('Gray must be between 0 and 100'); + } + } + + public function getGray() : int + { + return $this->gray; + } + + public function toRgb() : Rgb + { + return new Rgb((int) ($this->gray * 2.55), (int) ($this->gray * 2.55), (int) ($this->gray * 2.55)); + } + + public function toCmyk() : Cmyk + { + return new Cmyk(0, 0, 0, 100 - $this->gray); + } + + public function toGray() : Gray + { + return $this; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Color/Rgb.php b/vendor/bacon/bacon-qr-code/src/Renderer/Color/Rgb.php new file mode 100644 index 000000000..9e388dac2 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Color/Rgb.php @@ -0,0 +1,73 @@ + 255) { + throw new Exception\InvalidArgumentException('Red must be between 0 and 255'); + } + + if ($green < 0 || $green > 255) { + throw new Exception\InvalidArgumentException('Green must be between 0 and 255'); + } + + if ($blue < 0 || $blue > 255) { + throw new Exception\InvalidArgumentException('Blue must be between 0 and 255'); + } + } + + public function getRed() : int + { + return $this->red; + } + + public function getGreen() : int + { + return $this->green; + } + + public function getBlue() : int + { + return $this->blue; + } + + public function toRgb() : Rgb + { + return $this; + } + + public function toCmyk() : Cmyk + { + $c = 1 - ($this->red / 255); + $m = 1 - ($this->green / 255); + $y = 1 - ($this->blue / 255); + $k = min($c, $m, $y); + + if ($k === 0) { + return new Cmyk(0, 0, 0, 0); + } + + return new Cmyk( + (int) (100 * ($c - $k) / (1 - $k)), + (int) (100 * ($m - $k) / (1 - $k)), + (int) (100 * ($y - $k) / (1 - $k)), + (int) (100 * $k) + ); + } + + public function toGray() : Gray + { + return new Gray((int) (($this->red * 0.21 + $this->green * 0.71 + $this->blue * 0.07) / 2.55)); + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php b/vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php new file mode 100644 index 000000000..379e5c717 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php @@ -0,0 +1,26 @@ +externalEye->getExternalPath(); + } + + public function getInternalPath() : Path + { + return $this->internalEye->getInternalPath(); + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php b/vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php new file mode 100644 index 000000000..ab68f3cd1 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php @@ -0,0 +1,26 @@ +set($x, 0, 1); + $matrix->set($x, 6, 1); + } + + for ($y = 1; $y < 6; ++$y) { + $matrix->set(0, $y, 1); + $matrix->set(6, $y, 1); + } + + return $this->module->createPath($matrix)->translate(-3.5, -3.5); + } + + public function getInternalPath() : Path + { + $matrix = new ByteMatrix(3, 3); + + for ($x = 0; $x < 3; ++$x) { + for ($y = 0; $y < 3; ++$y) { + $matrix->set($x, $y, 1); + } + } + + return $this->module->createPath($matrix)->translate(-1.5, -1.5); + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Eye/PointyEye.php b/vendor/bacon/bacon-qr-code/src/Renderer/Eye/PointyEye.php new file mode 100644 index 000000000..39c7d23aa --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Eye/PointyEye.php @@ -0,0 +1,56 @@ +move(-3.5, 3.5) + ->line(-3.5, 0) + ->ellipticArc(3.5, 3.5, 0, false, true, 0, -3.5) + ->line(3.5, -3.5) + ->line(3.5, 3.5) + ->close() + ->move(2.5, 0) + ->ellipticArc(2.5, 2.5, 0, false, true, 0, 2.5) + ->ellipticArc(2.5, 2.5, 0, false, true, -2.5, 0) + ->ellipticArc(2.5, 2.5, 0, false, true, 0, -2.5) + ->ellipticArc(2.5, 2.5, 0, false, true, 2.5, 0) + ->close() + ; + } + + public function getInternalPath() : Path + { + return (new Path()) + ->move(1.5, 0) + ->ellipticArc(1.5, 1.5, 0., false, true, 0., 1.5) + ->ellipticArc(1.5, 1.5, 0., false, true, -1.5, 0.) + ->ellipticArc(1.5, 1.5, 0., false, true, 0., -1.5) + ->ellipticArc(1.5, 1.5, 0., false, true, 1.5, 0.) + ->close() + ; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.php b/vendor/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.php new file mode 100644 index 000000000..735d326ed --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.php @@ -0,0 +1,51 @@ +move(-3.5, -3.5) + ->line(3.5, -3.5) + ->line(3.5, 3.5) + ->line(-3.5, 3.5) + ->close() + ->move(-2.5, -2.5) + ->line(-2.5, 2.5) + ->line(2.5, 2.5) + ->line(2.5, -2.5) + ->close() + ; + } + + public function getInternalPath() : Path + { + return (new Path()) + ->move(1.5, 0) + ->ellipticArc(1.5, 1.5, 0., false, true, 0., 1.5) + ->ellipticArc(1.5, 1.5, 0., false, true, -1.5, 0.) + ->ellipticArc(1.5, 1.5, 0., false, true, 0., -1.5) + ->ellipticArc(1.5, 1.5, 0., false, true, 1.5, 0.) + ->close() + ; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.php b/vendor/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.php new file mode 100644 index 000000000..09bedfe4a --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.php @@ -0,0 +1,50 @@ +move(-3.5, -3.5) + ->line(3.5, -3.5) + ->line(3.5, 3.5) + ->line(-3.5, 3.5) + ->close() + ->move(-2.5, -2.5) + ->line(-2.5, 2.5) + ->line(2.5, 2.5) + ->line(2.5, -2.5) + ->close() + ; + } + + public function getInternalPath() : Path + { + return (new Path()) + ->move(-1.5, -1.5) + ->line(1.5, -1.5) + ->line(1.5, 1.5) + ->line(-1.5, 1.5) + ->close() + ; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/GDLibRenderer.php b/vendor/bacon/bacon-qr-code/src/Renderer/GDLibRenderer.php new file mode 100644 index 000000000..51164b9bb --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/GDLibRenderer.php @@ -0,0 +1,238 @@ + + */ + private array $colors; + + public function __construct( + private int $size, + private int $margin = 4, + private string $imageFormat = 'png', + private int $compressionQuality = 9, + private ?Fill $fill = null + ) { + if (! extension_loaded('gd') || ! function_exists('gd_info')) { + throw new RuntimeException('You need to install the GD extension to use this back end'); + } + + if ($this->fill === null) { + $this->fill = Fill::default(); + } + if ($this->fill->hasGradientFill()) { + throw new InvalidArgumentException('GDLibRenderer does not support gradients'); + } + } + + /** + * @throws InvalidArgumentException if matrix width doesn't match height + */ + public function render(QrCode $qrCode): string + { + $matrix = $qrCode->getMatrix(); + $matrixSize = $matrix->getWidth(); + + if ($matrixSize !== $matrix->getHeight()) { + throw new InvalidArgumentException('Matrix must have the same width and height'); + } + + MatrixUtil::removePositionDetectionPatterns($matrix); + $this->newImage(); + $this->draw($matrix); + + return $this->renderImage(); + } + + private function newImage(): void + { + $img = imagecreatetruecolor($this->size, $this->size); + if ($img === false) { + throw new RuntimeException('Failed to create image of that size'); + } + + $this->image = $img; + imagealphablending($this->image, false); + imagesavealpha($this->image, true); + + + $bg = $this->getColor($this->fill->getBackgroundColor()); + imagefilledrectangle($this->image, 0, 0, $this->size, $this->size, $bg); + imagealphablending($this->image, true); + } + + private function draw(ByteMatrix $matrix): void + { + $matrixSize = $matrix->getWidth(); + + $pointsOnSide = $matrix->getWidth() + $this->margin * 2; + $pointInPx = $this->size / $pointsOnSide; + + $this->drawEye(0, 0, $pointInPx, $this->fill->getTopLeftEyeFill()); + $this->drawEye($matrixSize - 7, 0, $pointInPx, $this->fill->getTopRightEyeFill()); + $this->drawEye(0, $matrixSize - 7, $pointInPx, $this->fill->getBottomLeftEyeFill()); + + $rows = $matrix->getArray()->toArray(); + $color = $this->getColor($this->fill->getForegroundColor()); + for ($y = 0; $y < $matrixSize; $y += 1) { + for ($x = 0; $x < $matrixSize; $x += 1) { + if (! $rows[$y][$x]) { + continue; + } + + $points = $this->normalizePoints([ + ($this->margin + $x) * $pointInPx, ($this->margin + $y) * $pointInPx, + ($this->margin + $x + 1) * $pointInPx, ($this->margin + $y) * $pointInPx, + ($this->margin + $x + 1) * $pointInPx, ($this->margin + $y + 1) * $pointInPx, + ($this->margin + $x) * $pointInPx, ($this->margin + $y + 1) * $pointInPx, + ]); + imagefilledpolygon($this->image, $points, $color); + } + } + } + + private function drawEye(int $xOffset, int $yOffset, float $pointInPx, EyeFill $eyeFill): void + { + $internalColor = $this->getColor($eyeFill->inheritsInternalColor() + ? $this->fill->getForegroundColor() + : $eyeFill->getInternalColor()); + + $externalColor = $this->getColor($eyeFill->inheritsExternalColor() + ? $this->fill->getForegroundColor() + : $eyeFill->getExternalColor()); + + for ($y = 0; $y < 7; $y += 1) { + for ($x = 0; $x < 7; $x += 1) { + if ((($y === 1 || $y === 5) && $x > 0 && $x < 6) || (($x === 1 || $x === 5) && $y > 0 && $y < 6)) { + continue; + } + + $points = $this->normalizePoints([ + ($this->margin + $x + $xOffset) * $pointInPx, ($this->margin + $y + $yOffset) * $pointInPx, + ($this->margin + $x + $xOffset + 1) * $pointInPx, ($this->margin + $y + $yOffset) * $pointInPx, + ($this->margin + $x + $xOffset + 1) * $pointInPx, ($this->margin + $y + $yOffset + 1) * $pointInPx, + ($this->margin + $x + $xOffset) * $pointInPx, ($this->margin + $y + $yOffset + 1) * $pointInPx, + ]); + + if ($y > 1 && $y < 5 && $x > 1 && $x < 5) { + imagefilledpolygon($this->image, $points, $internalColor); + } else { + imagefilledpolygon($this->image, $points, $externalColor); + } + } + } + } + + /** + * Normalize points will trim right and bottom line by 1 pixel. + * Otherwise pixels of neighbors are overlapping which leads to issue with transparency and small QR codes. + */ + private function normalizePoints(array $points): array + { + $maxX = $maxY = 0; + for ($i = 0; $i < count($points); $i += 2) { + // Do manual round as GD just removes decimal part + $points[$i] = $newX = round($points[$i]); + $points[$i + 1] = $newY = round($points[$i + 1]); + + $maxX = max($maxX, $newX); + $maxY = max($maxY, $newY); + } + + // Do trimming only if there are 4 points (8 coordinates), assumes this is square. + + for ($i = 0; $i < count($points); $i += 2) { + $points[$i] = min($points[$i], $maxX - 1); + $points[$i + 1] = min($points[$i + 1], $maxY - 1); + } + + return $points; + } + + private function renderImage(): string + { + ob_start(); + $quality = $this->compressionQuality; + switch ($this->imageFormat) { + case 'png': + if ($quality > 9 || $quality < 0) { + $quality = 9; + } + imagepng($this->image, null, $quality); + break; + + case 'gif': + imagegif($this->image, null); + break; + + case 'jpeg': + case 'jpg': + if ($quality > 100 || $quality < 0) { + $quality = 85; + } + imagejpeg($this->image, null, $quality); + break; + default: + ob_end_clean(); + throw new InvalidArgumentException( + 'Supported image formats are jpeg, png and gif, got: ' . $this->imageFormat + ); + } + + imagedestroy($this->image); + $this->colors = []; + $this->image = null; + + return ob_get_clean(); + } + + private function getColor(ColorInterface $color): int + { + $alpha = 100; + + if ($color instanceof Alpha) { + $alpha = $color->getAlpha(); + $color = $color->getBaseColor(); + } + + $rgb = $color->toRgb(); + + $colorKey = sprintf('%02X%02X%02X%02X', $rgb->getRed(), $rgb->getGreen(), $rgb->getBlue(), $alpha); + + if (! isset($this->colors[$colorKey])) { + $colorId = imagecolorallocatealpha( + $this->image, + $rgb->getRed(), + $rgb->getGreen(), + $rgb->getBlue(), + (int)((100 - $alpha) / 100 * 127) // Alpha for GD is in range 0 (opaque) - 127 (transparent) + ); + + if ($colorId === false) { + throw new RuntimeException('Failed to create color: #' . $colorKey); + } + + $this->colors[$colorKey] = $colorId; + } + + return $this->colors[$colorKey]; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php b/vendor/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php new file mode 100644 index 000000000..42694561e --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php @@ -0,0 +1,373 @@ +eps = "%!PS-Adobe-3.0 EPSF-3.0\n" + . "%%Creator: BaconQrCode\n" + . sprintf("%%%%BoundingBox: 0 0 %d %d \n", $size, $size) + . "%%BeginProlog\n" + . "save\n" + . "50 dict begin\n" + . "/q { gsave } bind def\n" + . "/Q { grestore } bind def\n" + . "/s { scale } bind def\n" + . "/t { translate } bind def\n" + . "/r { rotate } bind def\n" + . "/n { newpath } bind def\n" + . "/m { moveto } bind def\n" + . "/l { lineto } bind def\n" + . "/c { curveto } bind def\n" + . "/z { closepath } bind def\n" + . "/f { eofill } bind def\n" + . "/rgb { setrgbcolor } bind def\n" + . "/cmyk { setcmykcolor } bind def\n" + . "/gray { setgray } bind def\n" + . "%%EndProlog\n" + . "1 -1 s\n" + . sprintf("0 -%d t\n", $size); + + if ($backgroundColor instanceof Alpha && 0 === $backgroundColor->getAlpha()) { + return; + } + + $this->eps .= wordwrap( + '0 0 m' + . sprintf(' %s 0 l', (string) $size) + . sprintf(' %s %s l', (string) $size, (string) $size) + . sprintf(' 0 %s l', (string) $size) + . ' z' + . ' ' .$this->getColorSetString($backgroundColor) . " f\n", + 75, + "\n " + ); + } + + public function scale(float $size) : void + { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $this->eps .= sprintf("%1\$s %1\$s s\n", round($size, self::PRECISION)); + } + + public function translate(float $x, float $y) : void + { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $this->eps .= sprintf("%s %s t\n", round($x, self::PRECISION), round($y, self::PRECISION)); + } + + public function rotate(int $degrees) : void + { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $this->eps .= sprintf("%d r\n", $degrees); + } + + public function push() : void + { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $this->eps .= "q\n"; + } + + public function pop() : void + { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $this->eps .= "Q\n"; + } + + public function drawPathWithColor(Path $path, ColorInterface $color) : void + { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $fromX = 0; + $fromY = 0; + $this->eps .= wordwrap( + 'n ' + . $this->drawPathOperations($path, $fromX, $fromY) + . ' ' . $this->getColorSetString($color) . " f\n", + 75, + "\n " + ); + } + + public function drawPathWithGradient( + Path $path, + Gradient $gradient, + float $x, + float $y, + float $width, + float $height + ) : void { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $fromX = 0; + $fromY = 0; + $this->eps .= wordwrap( + 'q n ' . $this->drawPathOperations($path, $fromX, $fromY) . "\n", + 75, + "\n " + ); + + $this->createGradientFill($gradient, $x, $y, $width, $height); + } + + public function done() : string + { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $this->eps .= "%%TRAILER\nend restore\n%%EOF"; + $blob = $this->eps; + $this->eps = null; + + return $blob; + } + + private function drawPathOperations(Iterable $ops, &$fromX, &$fromY) : string + { + $pathData = []; + + foreach ($ops as $op) { + switch (true) { + case $op instanceof Move: + $fromX = $toX = round($op->getX(), self::PRECISION); + $fromY = $toY = round($op->getY(), self::PRECISION); + $pathData[] = sprintf('%s %s m', $toX, $toY); + break; + + case $op instanceof Line: + $fromX = $toX = round($op->getX(), self::PRECISION); + $fromY = $toY = round($op->getY(), self::PRECISION); + $pathData[] = sprintf('%s %s l', $toX, $toY); + break; + + case $op instanceof EllipticArc: + $pathData[] = $this->drawPathOperations($op->toCurves($fromX, $fromY), $fromX, $fromY); + break; + + case $op instanceof Curve: + $x1 = round($op->getX1(), self::PRECISION); + $y1 = round($op->getY1(), self::PRECISION); + $x2 = round($op->getX2(), self::PRECISION); + $y2 = round($op->getY2(), self::PRECISION); + $fromX = $x3 = round($op->getX3(), self::PRECISION); + $fromY = $y3 = round($op->getY3(), self::PRECISION); + $pathData[] = sprintf('%s %s %s %s %s %s c', $x1, $y1, $x2, $y2, $x3, $y3); + break; + + case $op instanceof Close: + $pathData[] = 'z'; + break; + + default: + throw new RuntimeException('Unexpected draw operation: ' . get_class($op)); + } + } + + return implode(' ', $pathData); + } + + private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : void + { + $startColor = $gradient->getStartColor(); + $endColor = $gradient->getEndColor(); + + if ($startColor instanceof Alpha) { + $startColor = $startColor->getBaseColor(); + } + + $startColorType = get_class($startColor); + + if (! in_array($startColorType, [Rgb::class, Cmyk::class, Gray::class])) { + $startColorType = Cmyk::class; + $startColor = $startColor->toCmyk(); + } + + if (get_class($endColor) !== $startColorType) { + switch ($startColorType) { + case Cmyk::class: + $endColor = $endColor->toCmyk(); + break; + + case Rgb::class: + $endColor = $endColor->toRgb(); + break; + + case Gray::class: + $endColor = $endColor->toGray(); + break; + } + } + + $this->eps .= "eoclip\n<<\n"; + + if ($gradient->getType() === GradientType::RADIAL()) { + $this->eps .= " /ShadingType 3\n"; + } else { + $this->eps .= " /ShadingType 2\n"; + } + + $this->eps .= " /Extend [ true true ]\n" + . " /AntiAlias true\n"; + + switch ($startColorType) { + case Cmyk::class: + $this->eps .= " /ColorSpace /DeviceCMYK\n"; + break; + + case Rgb::class: + $this->eps .= " /ColorSpace /DeviceRGB\n"; + break; + + case Gray::class: + $this->eps .= " /ColorSpace /DeviceGray\n"; + break; + } + + switch ($gradient->getType()) { + case GradientType::HORIZONTAL(): + $this->eps .= sprintf( + " /Coords [ %s %s %s %s ]\n", + round($x, self::PRECISION), + round($y, self::PRECISION), + round($x + $width, self::PRECISION), + round($y, self::PRECISION) + ); + break; + + case GradientType::VERTICAL(): + $this->eps .= sprintf( + " /Coords [ %s %s %s %s ]\n", + round($x, self::PRECISION), + round($y, self::PRECISION), + round($x, self::PRECISION), + round($y + $height, self::PRECISION) + ); + break; + + case GradientType::DIAGONAL(): + $this->eps .= sprintf( + " /Coords [ %s %s %s %s ]\n", + round($x, self::PRECISION), + round($y, self::PRECISION), + round($x + $width, self::PRECISION), + round($y + $height, self::PRECISION) + ); + break; + + case GradientType::INVERSE_DIAGONAL(): + $this->eps .= sprintf( + " /Coords [ %s %s %s %s ]\n", + round($x, self::PRECISION), + round($y + $height, self::PRECISION), + round($x + $width, self::PRECISION), + round($y, self::PRECISION) + ); + break; + + case GradientType::RADIAL(): + $centerX = ($x + $width) / 2; + $centerY = ($y + $height) / 2; + + $this->eps .= sprintf( + " /Coords [ %s %s 0 %s %s %s ]\n", + round($centerX, self::PRECISION), + round($centerY, self::PRECISION), + round($centerX, self::PRECISION), + round($centerY, self::PRECISION), + round(max($width, $height) / 2, self::PRECISION) + ); + break; + } + + $this->eps .= " /Function\n" + . " <<\n" + . " /FunctionType 2\n" + . " /Domain [ 0 1 ]\n" + . sprintf(" /C0 [ %s ]\n", $this->getColorString($startColor)) + . sprintf(" /C1 [ %s ]\n", $this->getColorString($endColor)) + . " /N 1\n" + . " >>\n>>\nshfill\nQ\n"; + } + + private function getColorSetString(ColorInterface $color) : string + { + if ($color instanceof Rgb) { + return $this->getColorString($color) . ' rgb'; + } + + if ($color instanceof Cmyk) { + return $this->getColorString($color) . ' cmyk'; + } + + if ($color instanceof Gray) { + return $this->getColorString($color) . ' gray'; + } + + return $this->getColorSetString($color->toCmyk()); + } + + private function getColorString(ColorInterface $color) : string + { + if ($color instanceof Rgb) { + return sprintf('%s %s %s', $color->getRed() / 255, $color->getGreen() / 255, $color->getBlue() / 255); + } + + if ($color instanceof Cmyk) { + return sprintf( + '%s %s %s %s', + $color->getCyan() / 100, + $color->getMagenta() / 100, + $color->getYellow() / 100, + $color->getBlack() / 100 + ); + } + + if ($color instanceof Gray) { + return sprintf('%s', $color->getGray() / 100); + } + + return $this->getColorString($color->toCmyk()); + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.php b/vendor/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.php new file mode 100644 index 000000000..0935819a8 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.php @@ -0,0 +1,87 @@ +imageFormat = $imageFormat; + $this->compressionQuality = $compressionQuality; + } + + public function new(int $size, ColorInterface $backgroundColor) : void + { + $this->image = new Imagick(); + $this->image->newImage($size, $size, $this->getColorPixel($backgroundColor)); + $this->image->setImageFormat($this->imageFormat); + $this->image->setCompressionQuality($this->compressionQuality); + $this->draw = new ImagickDraw(); + $this->gradientCount = 0; + $this->matrices = [new TransformationMatrix()]; + $this->matrixIndex = 0; + } + + public function scale(float $size) : void + { + if (null === $this->draw) { + throw new RuntimeException('No image has been started'); + } + + $this->draw->scale($size, $size); + $this->matrices[$this->matrixIndex] = $this->matrices[$this->matrixIndex] + ->multiply(TransformationMatrix::scale($size)); + } + + public function translate(float $x, float $y) : void + { + if (null === $this->draw) { + throw new RuntimeException('No image has been started'); + } + + $this->draw->translate($x, $y); + $this->matrices[$this->matrixIndex] = $this->matrices[$this->matrixIndex] + ->multiply(TransformationMatrix::translate($x, $y)); + } + + public function rotate(int $degrees) : void + { + if (null === $this->draw) { + throw new RuntimeException('No image has been started'); + } + + $this->draw->rotate($degrees); + $this->matrices[$this->matrixIndex] = $this->matrices[$this->matrixIndex] + ->multiply(TransformationMatrix::rotate($degrees)); + } + + public function push() : void + { + if (null === $this->draw) { + throw new RuntimeException('No image has been started'); + } + + $this->draw->push(); + $this->matrices[++$this->matrixIndex] = $this->matrices[$this->matrixIndex - 1]; + } + + public function pop() : void + { + if (null === $this->draw) { + throw new RuntimeException('No image has been started'); + } + + $this->draw->pop(); + unset($this->matrices[$this->matrixIndex--]); + } + + public function drawPathWithColor(Path $path, ColorInterface $color) : void + { + if (null === $this->draw) { + throw new RuntimeException('No image has been started'); + } + + $this->draw->setFillColor($this->getColorPixel($color)); + $this->drawPath($path); + } + + public function drawPathWithGradient( + Path $path, + Gradient $gradient, + float $x, + float $y, + float $width, + float $height + ) : void { + if (null === $this->draw) { + throw new RuntimeException('No image has been started'); + } + + $this->draw->setFillPatternURL('#' . $this->createGradientFill($gradient, $x, $y, $width, $height)); + $this->drawPath($path); + } + + public function done() : string + { + if (null === $this->draw) { + throw new RuntimeException('No image has been started'); + } + + $this->image->drawImage($this->draw); + $blob = $this->image->getImageBlob(); + $this->draw->clear(); + $this->image->clear(); + $this->draw = null; + $this->image = null; + $this->gradientCount = null; + + return $blob; + } + + private function drawPath(Path $path) : void + { + $this->draw->pathStart(); + + foreach ($path as $op) { + switch (true) { + case $op instanceof Move: + $this->draw->pathMoveToAbsolute($op->getX(), $op->getY()); + break; + + case $op instanceof Line: + $this->draw->pathLineToAbsolute($op->getX(), $op->getY()); + break; + + case $op instanceof EllipticArc: + $this->draw->pathEllipticArcAbsolute( + $op->getXRadius(), + $op->getYRadius(), + $op->getXAxisAngle(), + $op->isLargeArc(), + $op->isSweep(), + $op->getX(), + $op->getY() + ); + break; + + case $op instanceof Curve: + $this->draw->pathCurveToAbsolute( + $op->getX1(), + $op->getY1(), + $op->getX2(), + $op->getY2(), + $op->getX3(), + $op->getY3() + ); + break; + + case $op instanceof Close: + $this->draw->pathClose(); + break; + + default: + throw new RuntimeException('Unexpected draw operation: ' . get_class($op)); + } + } + + $this->draw->pathFinish(); + } + + private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : string + { + list($width, $height) = $this->matrices[$this->matrixIndex]->apply($width, $height); + + $startColor = $this->getColorPixel($gradient->getStartColor())->getColorAsString(); + $endColor = $this->getColorPixel($gradient->getEndColor())->getColorAsString(); + $gradientImage = new Imagick(); + + switch ($gradient->getType()) { + case GradientType::HORIZONTAL(): + $gradientImage->newPseudoImage((int) $height, (int) $width, sprintf( + 'gradient:%s-%s', + $startColor, + $endColor + )); + $gradientImage->rotateImage('transparent', -90); + break; + + case GradientType::VERTICAL(): + $gradientImage->newPseudoImage((int) $width, (int) $height, sprintf( + 'gradient:%s-%s', + $startColor, + $endColor + )); + break; + + case GradientType::DIAGONAL(): + case GradientType::INVERSE_DIAGONAL(): + $gradientImage->newPseudoImage((int) ($width * sqrt(2)), (int) ($height * sqrt(2)), sprintf( + 'gradient:%s-%s', + $startColor, + $endColor + )); + + if (GradientType::DIAGONAL() === $gradient->getType()) { + $gradientImage->rotateImage('transparent', -45); + } else { + $gradientImage->rotateImage('transparent', -135); + } + + $rotatedWidth = $gradientImage->getImageWidth(); + $rotatedHeight = $gradientImage->getImageHeight(); + + $gradientImage->setImagePage($rotatedWidth, $rotatedHeight, 0, 0); + $gradientImage->cropImage( + intdiv($rotatedWidth, 2) - 2, + intdiv($rotatedHeight, 2) - 2, + intdiv($rotatedWidth, 4) + 1, + intdiv($rotatedWidth, 4) + 1 + ); + break; + + case GradientType::RADIAL(): + $gradientImage->newPseudoImage((int) $width, (int) $height, sprintf( + 'radial-gradient:%s-%s', + $startColor, + $endColor + )); + break; + } + + $id = sprintf('g%d', ++$this->gradientCount); + $this->draw->pushPattern($id, 0, 0, $width, $height); + $this->draw->composite(Imagick::COMPOSITE_COPY, 0, 0, $width, $height, $gradientImage); + $this->draw->popPattern(); + return $id; + } + + private function getColorPixel(ColorInterface $color) : ImagickPixel + { + $alpha = 100; + + if ($color instanceof Alpha) { + $alpha = $color->getAlpha(); + $color = $color->getBaseColor(); + } + + if ($color instanceof Rgb) { + return new ImagickPixel(sprintf( + 'rgba(%d, %d, %d, %F)', + $color->getRed(), + $color->getGreen(), + $color->getBlue(), + $alpha / 100 + )); + } + + if ($color instanceof Cmyk) { + return new ImagickPixel(sprintf( + 'cmyka(%d, %d, %d, %d, %F)', + $color->getCyan(), + $color->getMagenta(), + $color->getYellow(), + $color->getBlack(), + $alpha / 100 + )); + } + + if ($color instanceof Gray) { + return new ImagickPixel(sprintf( + 'graya(%d%%, %F)', + $color->getGray(), + $alpha / 100 + )); + } + + return $this->getColorPixel(new Alpha($alpha, $color->toRgb())); + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.php b/vendor/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.php new file mode 100644 index 000000000..44d014e7a --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.php @@ -0,0 +1,363 @@ +xmlWriter = new XMLWriter(); + $this->xmlWriter->openMemory(); + + $this->xmlWriter->startDocument('1.0', 'UTF-8'); + $this->xmlWriter->startElement('svg'); + $this->xmlWriter->writeAttribute('xmlns', 'http://www.w3.org/2000/svg'); + $this->xmlWriter->writeAttribute('version', '1.1'); + $this->xmlWriter->writeAttribute('width', (string) $size); + $this->xmlWriter->writeAttribute('height', (string) $size); + $this->xmlWriter->writeAttribute('viewBox', '0 0 '. $size . ' ' . $size); + + $this->gradientCount = 0; + $this->currentStack = 0; + $this->stack[0] = 0; + + $alpha = 1; + + if ($backgroundColor instanceof Alpha) { + $alpha = $backgroundColor->getAlpha() / 100; + } + + if (0 === $alpha) { + return; + } + + $this->xmlWriter->startElement('rect'); + $this->xmlWriter->writeAttribute('x', '0'); + $this->xmlWriter->writeAttribute('y', '0'); + $this->xmlWriter->writeAttribute('width', (string) $size); + $this->xmlWriter->writeAttribute('height', (string) $size); + $this->xmlWriter->writeAttribute('fill', $this->getColorString($backgroundColor)); + + if ($alpha < 1) { + $this->xmlWriter->writeAttribute('fill-opacity', (string) $alpha); + } + + $this->xmlWriter->endElement(); + } + + public function scale(float $size) : void + { + if (null === $this->xmlWriter) { + throw new RuntimeException('No image has been started'); + } + + $this->xmlWriter->startElement('g'); + $this->xmlWriter->writeAttribute( + 'transform', + sprintf(self::SCALE_FORMAT, round($size, self::PRECISION)) + ); + ++$this->stack[$this->currentStack]; + } + + public function translate(float $x, float $y) : void + { + if (null === $this->xmlWriter) { + throw new RuntimeException('No image has been started'); + } + + $this->xmlWriter->startElement('g'); + $this->xmlWriter->writeAttribute( + 'transform', + sprintf(self::TRANSLATE_FORMAT, round($x, self::PRECISION), round($y, self::PRECISION)) + ); + ++$this->stack[$this->currentStack]; + } + + public function rotate(int $degrees) : void + { + if (null === $this->xmlWriter) { + throw new RuntimeException('No image has been started'); + } + + $this->xmlWriter->startElement('g'); + $this->xmlWriter->writeAttribute('transform', sprintf('rotate(%d)', $degrees)); + ++$this->stack[$this->currentStack]; + } + + public function push() : void + { + if (null === $this->xmlWriter) { + throw new RuntimeException('No image has been started'); + } + + $this->xmlWriter->startElement('g'); + $this->stack[] = 1; + ++$this->currentStack; + } + + public function pop() : void + { + if (null === $this->xmlWriter) { + throw new RuntimeException('No image has been started'); + } + + for ($i = 0; $i < $this->stack[$this->currentStack]; ++$i) { + $this->xmlWriter->endElement(); + } + + array_pop($this->stack); + --$this->currentStack; + } + + public function drawPathWithColor(Path $path, ColorInterface $color) : void + { + if (null === $this->xmlWriter) { + throw new RuntimeException('No image has been started'); + } + + $alpha = 1; + + if ($color instanceof Alpha) { + $alpha = $color->getAlpha() / 100; + } + + $this->startPathElement($path); + $this->xmlWriter->writeAttribute('fill', $this->getColorString($color)); + + if ($alpha < 1) { + $this->xmlWriter->writeAttribute('fill-opacity', (string) $alpha); + } + + $this->xmlWriter->endElement(); + } + + public function drawPathWithGradient( + Path $path, + Gradient $gradient, + float $x, + float $y, + float $width, + float $height + ) : void { + if (null === $this->xmlWriter) { + throw new RuntimeException('No image has been started'); + } + + $gradientId = $this->createGradientFill($gradient, $x, $y, $width, $height); + $this->startPathElement($path); + $this->xmlWriter->writeAttribute('fill', 'url(#' . $gradientId . ')'); + $this->xmlWriter->endElement(); + } + + public function done() : string + { + if (null === $this->xmlWriter) { + throw new RuntimeException('No image has been started'); + } + + foreach ($this->stack as $openElements) { + for ($i = $openElements; $i > 0; --$i) { + $this->xmlWriter->endElement(); + } + } + + $this->xmlWriter->endDocument(); + $blob = $this->xmlWriter->outputMemory(true); + $this->xmlWriter = null; + $this->stack = null; + $this->currentStack = null; + $this->gradientCount = null; + + return $blob; + } + + private function startPathElement(Path $path) : void + { + $pathData = []; + + foreach ($path as $op) { + switch (true) { + case $op instanceof Move: + $pathData[] = sprintf( + 'M%s %s', + round($op->getX(), self::PRECISION), + round($op->getY(), self::PRECISION) + ); + break; + + case $op instanceof Line: + $pathData[] = sprintf( + 'L%s %s', + round($op->getX(), self::PRECISION), + round($op->getY(), self::PRECISION) + ); + break; + + case $op instanceof EllipticArc: + $pathData[] = sprintf( + 'A%s %s %s %u %u %s %s', + round($op->getXRadius(), self::PRECISION), + round($op->getYRadius(), self::PRECISION), + round($op->getXAxisAngle(), self::PRECISION), + $op->isLargeArc(), + $op->isSweep(), + round($op->getX(), self::PRECISION), + round($op->getY(), self::PRECISION) + ); + break; + + case $op instanceof Curve: + $pathData[] = sprintf( + 'C%s %s %s %s %s %s', + round($op->getX1(), self::PRECISION), + round($op->getY1(), self::PRECISION), + round($op->getX2(), self::PRECISION), + round($op->getY2(), self::PRECISION), + round($op->getX3(), self::PRECISION), + round($op->getY3(), self::PRECISION) + ); + break; + + case $op instanceof Close: + $pathData[] = 'Z'; + break; + + default: + throw new RuntimeException('Unexpected draw operation: ' . get_class($op)); + } + } + + $this->xmlWriter->startElement('path'); + $this->xmlWriter->writeAttribute('fill-rule', 'evenodd'); + $this->xmlWriter->writeAttribute('d', implode('', $pathData)); + } + + private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : string + { + $this->xmlWriter->startElement('defs'); + + $startColor = $gradient->getStartColor(); + $endColor = $gradient->getEndColor(); + + if ($gradient->getType() === GradientType::RADIAL()) { + $this->xmlWriter->startElement('radialGradient'); + } else { + $this->xmlWriter->startElement('linearGradient'); + } + + $this->xmlWriter->writeAttribute('gradientUnits', 'userSpaceOnUse'); + + switch ($gradient->getType()) { + case GradientType::HORIZONTAL(): + $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION)); + $this->xmlWriter->writeAttribute('y1', (string) round($y, self::PRECISION)); + $this->xmlWriter->writeAttribute('x2', (string) round($x + $width, self::PRECISION)); + $this->xmlWriter->writeAttribute('y2', (string) round($y, self::PRECISION)); + break; + + case GradientType::VERTICAL(): + $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION)); + $this->xmlWriter->writeAttribute('y1', (string) round($y, self::PRECISION)); + $this->xmlWriter->writeAttribute('x2', (string) round($x, self::PRECISION)); + $this->xmlWriter->writeAttribute('y2', (string) round($y + $height, self::PRECISION)); + break; + + case GradientType::DIAGONAL(): + $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION)); + $this->xmlWriter->writeAttribute('y1', (string) round($y, self::PRECISION)); + $this->xmlWriter->writeAttribute('x2', (string) round($x + $width, self::PRECISION)); + $this->xmlWriter->writeAttribute('y2', (string) round($y + $height, self::PRECISION)); + break; + + case GradientType::INVERSE_DIAGONAL(): + $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION)); + $this->xmlWriter->writeAttribute('y1', (string) round($y + $height, self::PRECISION)); + $this->xmlWriter->writeAttribute('x2', (string) round($x + $width, self::PRECISION)); + $this->xmlWriter->writeAttribute('y2', (string) round($y, self::PRECISION)); + break; + + case GradientType::RADIAL(): + $this->xmlWriter->writeAttribute('cx', (string) round(($x + $width) / 2, self::PRECISION)); + $this->xmlWriter->writeAttribute('cy', (string) round(($y + $height) / 2, self::PRECISION)); + $this->xmlWriter->writeAttribute('r', (string) round(max($width, $height) / 2, self::PRECISION)); + break; + } + + $toBeHashed = $this->getColorString($startColor) . $this->getColorString($endColor) . $gradient->getType(); + if ($startColor instanceof Alpha) { + $toBeHashed .= (string) $startColor->getAlpha(); + } + $id = sprintf('g%d-%s', ++$this->gradientCount, hash('xxh64', $toBeHashed)); + $this->xmlWriter->writeAttribute('id', $id); + + $this->xmlWriter->startElement('stop'); + $this->xmlWriter->writeAttribute('offset', '0%'); + $this->xmlWriter->writeAttribute('stop-color', $this->getColorString($startColor)); + + if ($startColor instanceof Alpha) { + $this->xmlWriter->writeAttribute('stop-opacity', (string) $startColor->getAlpha()); + } + + $this->xmlWriter->endElement(); + + $this->xmlWriter->startElement('stop'); + $this->xmlWriter->writeAttribute('offset', '100%'); + $this->xmlWriter->writeAttribute('stop-color', $this->getColorString($endColor)); + + if ($endColor instanceof Alpha) { + $this->xmlWriter->writeAttribute('stop-opacity', (string) $endColor->getAlpha()); + } + + $this->xmlWriter->endElement(); + + $this->xmlWriter->endElement(); + $this->xmlWriter->endElement(); + + return $id; + } + + private function getColorString(ColorInterface $color) : string + { + $color = $color->toRgb(); + + return sprintf( + '#%02x%02x%02x', + $color->getRed(), + $color->getGreen(), + $color->getBlue() + ); + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.php b/vendor/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.php new file mode 100644 index 000000000..9b435a0c0 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.php @@ -0,0 +1,68 @@ +values = [1, 0, 0, 1, 0, 0]; + } + + public function multiply(self $other) : self + { + $matrix = new self(); + $matrix->values[0] = $this->values[0] * $other->values[0] + $this->values[2] * $other->values[1]; + $matrix->values[1] = $this->values[1] * $other->values[0] + $this->values[3] * $other->values[1]; + $matrix->values[2] = $this->values[0] * $other->values[2] + $this->values[2] * $other->values[3]; + $matrix->values[3] = $this->values[1] * $other->values[2] + $this->values[3] * $other->values[3]; + $matrix->values[4] = $this->values[0] * $other->values[4] + $this->values[2] * $other->values[5] + + $this->values[4]; + $matrix->values[5] = $this->values[1] * $other->values[4] + $this->values[3] * $other->values[5] + + $this->values[5]; + + return $matrix; + } + + public static function scale(float $size) : self + { + $matrix = new self(); + $matrix->values = [$size, 0, 0, $size, 0, 0]; + return $matrix; + } + + public static function translate(float $x, float $y) : self + { + $matrix = new self(); + $matrix->values = [1, 0, 0, 1, $x, $y]; + return $matrix; + } + + public static function rotate(int $degrees) : self + { + $matrix = new self(); + $rad = deg2rad($degrees); + $matrix->values = [cos($rad), sin($rad), -sin($rad), cos($rad), 0, 0]; + return $matrix; + } + + + /** + * Applies this matrix onto a point and returns the resulting viewport point. + * + * @return float[] + */ + public function apply(float $x, float $y) : array + { + return [ + $x * $this->values[0] + $y * $this->values[2] + $this->values[4], + $x * $this->values[1] + $y * $this->values[3] + $this->values[5], + ]; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/ImageRenderer.php b/vendor/bacon/bacon-qr-code/src/Renderer/ImageRenderer.php new file mode 100644 index 000000000..0d333038c --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/ImageRenderer.php @@ -0,0 +1,150 @@ +rendererStyle->getSize(); + $margin = $this->rendererStyle->getMargin(); + $matrix = $qrCode->getMatrix(); + $matrixSize = $matrix->getWidth(); + + if ($matrixSize !== $matrix->getHeight()) { + throw new InvalidArgumentException('Matrix must have the same width and height'); + } + + $totalSize = $matrixSize + ($margin * 2); + $moduleSize = $size / $totalSize; + $fill = $this->rendererStyle->getFill(); + + $this->imageBackEnd->new($size, $fill->getBackgroundColor()); + $this->imageBackEnd->scale((float) $moduleSize); + $this->imageBackEnd->translate((float) $margin, (float) $margin); + + $module = $this->rendererStyle->getModule(); + $moduleMatrix = clone $matrix; + MatrixUtil::removePositionDetectionPatterns($moduleMatrix); + $modulePath = $this->drawEyes($matrixSize, $module->createPath($moduleMatrix)); + + if ($fill->hasGradientFill()) { + $this->imageBackEnd->drawPathWithGradient( + $modulePath, + $fill->getForegroundGradient(), + 0, + 0, + $matrixSize, + $matrixSize + ); + } else { + $this->imageBackEnd->drawPathWithColor($modulePath, $fill->getForegroundColor()); + } + + return $this->imageBackEnd->done(); + } + + private function drawEyes(int $matrixSize, Path $modulePath) : Path + { + $fill = $this->rendererStyle->getFill(); + + $eye = $this->rendererStyle->getEye(); + $externalPath = $eye->getExternalPath(); + $internalPath = $eye->getInternalPath(); + + $modulePath = $this->drawEye( + $externalPath, + $internalPath, + $fill->getTopLeftEyeFill(), + 3.5, + 3.5, + 0, + $modulePath + ); + $modulePath = $this->drawEye( + $externalPath, + $internalPath, + $fill->getTopRightEyeFill(), + $matrixSize - 3.5, + 3.5, + 90, + $modulePath + ); + $modulePath = $this->drawEye( + $externalPath, + $internalPath, + $fill->getBottomLeftEyeFill(), + 3.5, + $matrixSize - 3.5, + -90, + $modulePath + ); + + return $modulePath; + } + + private function drawEye( + Path $externalPath, + Path $internalPath, + EyeFill $fill, + float $xTranslation, + float $yTranslation, + int $rotation, + Path $modulePath + ) : Path { + if ($fill->inheritsBothColors()) { + return $modulePath + ->append( + $externalPath->rotate($rotation)->translate($xTranslation, $yTranslation) + ) + ->append( + $internalPath->rotate($rotation)->translate($xTranslation, $yTranslation) + ); + } + + $this->imageBackEnd->push(); + $this->imageBackEnd->translate($xTranslation, $yTranslation); + + if (0 !== $rotation) { + $this->imageBackEnd->rotate($rotation); + } + + if ($fill->inheritsExternalColor()) { + $modulePath = $modulePath->append( + $externalPath->rotate($rotation)->translate($xTranslation, $yTranslation) + ); + } else { + $this->imageBackEnd->drawPathWithColor($externalPath, $fill->getExternalColor()); + } + + if ($fill->inheritsInternalColor()) { + $modulePath = $modulePath->append( + $internalPath->rotate($rotation)->translate($xTranslation, $yTranslation) + ); + } else { + $this->imageBackEnd->drawPathWithColor($internalPath, $fill->getInternalColor()); + } + + $this->imageBackEnd->pop(); + + return $modulePath; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php b/vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php new file mode 100644 index 000000000..c5d5c6f78 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php @@ -0,0 +1,56 @@ + 1) { + throw new InvalidArgumentException('Size must between 0 (exclusive) and 1 (inclusive)'); + } + } + + public function createPath(ByteMatrix $matrix) : Path + { + $width = $matrix->getWidth(); + $height = $matrix->getHeight(); + $path = new Path(); + $halfSize = $this->size / 2; + $margin = (1 - $this->size) / 2; + + for ($y = 0; $y < $height; ++$y) { + for ($x = 0; $x < $width; ++$x) { + if (! $matrix->get($x, $y)) { + continue; + } + + $pathX = $x + $margin; + $pathY = $y + $margin; + + $path = $path + ->move($pathX + $this->size, $pathY + $halfSize) + ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY + $this->size) + ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX, $pathY + $halfSize) + ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY) + ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $this->size, $pathY + $halfSize) + ->close() + ; + } + } + + return $path; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php b/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php new file mode 100644 index 000000000..141d66c6f --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php @@ -0,0 +1,82 @@ + + */ + private array $points = []; + + /** + * @var array|null + */ + private ?array $simplifiedPoints = null; + + private int $minX = PHP_INT_MAX; + + private int $minY = PHP_INT_MAX; + + private int $maxX = -1; + + private int $maxY = -1; + + public function __construct(private readonly bool $positive) + { + } + + public function addPoint(int $x, int $y) : void + { + $this->points[] = [$x, $y]; + $this->minX = min($this->minX, $x); + $this->minY = min($this->minY, $y); + $this->maxX = max($this->maxX, $x); + $this->maxY = max($this->maxY, $y); + } + + public function isPositive() : bool + { + return $this->positive; + } + + /** + * @return array + */ + public function getPoints() : array + { + return $this->points; + } + + public function getMaxX() : int + { + return $this->maxX; + } + + public function getSimplifiedPoints() : array + { + if (null !== $this->simplifiedPoints) { + return $this->simplifiedPoints; + } + + $points = []; + $length = count($this->points); + + for ($i = 0; $i < $length; ++$i) { + $previousPoint = $this->points[(0 === $i ? $length : $i) - 1]; + $nextPoint = $this->points[($length - 1 === $i ? -1 : $i) + 1]; + $currentPoint = $this->points[$i]; + + if (($previousPoint[0] === $currentPoint[0] && $currentPoint[0] === $nextPoint[0]) + || ($previousPoint[1] === $currentPoint[1] && $currentPoint[1] === $nextPoint[1]) + ) { + continue; + } + + $points[] = $currentPoint; + } + + return $this->simplifiedPoints = $points; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.php b/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.php new file mode 100644 index 000000000..01f692c68 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.php @@ -0,0 +1,160 @@ +bytes = iterator_to_array($matrix->getBytes()); + $this->size = count($this->bytes); + $this->width = $matrix->getWidth(); + $this->height = $matrix->getHeight(); + } + + /** + * @return Traversable + */ + public function getIterator() : Traversable + { + $originalBytes = $this->bytes; + $point = $this->findNext(0, 0); + + while (null !== $point) { + $edge = $this->findEdge($point[0], $point[1]); + $this->xorEdge($edge); + + yield $edge; + + $point = $this->findNext($point[0], $point[1]); + } + + $this->bytes = $originalBytes; + } + + /** + * @return int[]|null + */ + private function findNext(int $x, int $y) : ?array + { + $i = $this->width * $y + $x; + + while ($i < $this->size && 1 !== $this->bytes[$i]) { + ++$i; + } + + if ($i < $this->size) { + return $this->pointOf($i); + } + + return null; + } + + private function findEdge(int $x, int $y) : Edge + { + $edge = new Edge($this->isSet($x, $y)); + $startX = $x; + $startY = $y; + $dirX = 0; + $dirY = 1; + + while (true) { + $edge->addPoint($x, $y); + $x += $dirX; + $y += $dirY; + + if ($x === $startX && $y === $startY) { + break; + } + + $left = $this->isSet($x + ($dirX + $dirY - 1 ) / 2, $y + ($dirY - $dirX - 1) / 2); + $right = $this->isSet($x + ($dirX - $dirY - 1) / 2, $y + ($dirY + $dirX - 1) / 2); + + if ($right && ! $left) { + $tmp = $dirX; + $dirX = -$dirY; + $dirY = $tmp; + } elseif ($right) { + $tmp = $dirX; + $dirX = -$dirY; + $dirY = $tmp; + } elseif (! $left) { + $tmp = $dirX; + $dirX = $dirY; + $dirY = -$tmp; + } + } + + return $edge; + } + + private function xorEdge(Edge $path) : void + { + $points = $path->getPoints(); + $y1 = $points[0][1]; + $length = count($points); + $maxX = $path->getMaxX(); + + for ($i = 1; $i < $length; ++$i) { + $y = $points[$i][1]; + + if ($y === $y1) { + continue; + } + + $x = $points[$i][0]; + $minY = min($y1, $y); + + for ($j = $x; $j < $maxX; ++$j) { + $this->flip($j, $minY); + } + + $y1 = $y; + } + } + + private function isSet(int $x, int $y) : bool + { + return ( + $x >= 0 + && $x < $this->width + && $y >= 0 + && $y < $this->height + ) && 1 === $this->bytes[$this->width * $y + $x]; + } + + /** + * @return int[] + */ + private function pointOf(int $i) : array + { + $y = intdiv($i, $this->width); + return [$i - $y * $this->width, $y]; + } + + private function flip(int $x, int $y) : void + { + $this->bytes[$this->width * $y + $x] = ( + $this->isSet($x, $y) ? 0 : 1 + ); + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php b/vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php new file mode 100644 index 000000000..0ccb0e0fe --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php @@ -0,0 +1,18 @@ + 1) { + throw new InvalidArgumentException('Intensity must between 0 (exclusive) and 1 (inclusive)'); + } + + $this->intensity = $intensity / 2; + } + + public function createPath(ByteMatrix $matrix) : Path + { + $path = new Path(); + + foreach (new EdgeIterator($matrix) as $edge) { + $points = $edge->getSimplifiedPoints(); + $length = count($points); + + $currentPoint = $points[0]; + $nextPoint = $points[1]; + $horizontal = ($currentPoint[1] === $nextPoint[1]); + + if ($horizontal) { + $right = $nextPoint[0] > $currentPoint[0]; + $path = $path->move( + $currentPoint[0] + ($right ? $this->intensity : -$this->intensity), + $currentPoint[1] + ); + } else { + $up = $nextPoint[0] < $currentPoint[0]; + $path = $path->move( + $currentPoint[0], + $currentPoint[1] + ($up ? -$this->intensity : $this->intensity) + ); + } + + for ($i = 1; $i <= $length; ++$i) { + if ($i === $length) { + $previousPoint = $points[$length - 1]; + $currentPoint = $points[0]; + $nextPoint = $points[1]; + } else { + $previousPoint = $points[(0 === $i ? $length : $i) - 1]; + $currentPoint = $points[$i]; + $nextPoint = $points[($length - 1 === $i ? -1 : $i) + 1]; + } + + $horizontal = ($previousPoint[1] === $currentPoint[1]); + + if ($horizontal) { + $right = $previousPoint[0] < $currentPoint[0]; + $up = $nextPoint[1] < $currentPoint[1]; + $sweep = ($up xor $right); + + if ($this->intensity < 0.5 + || ($right && $previousPoint[0] !== $currentPoint[0] - 1) + || (! $right && $previousPoint[0] - 1 !== $currentPoint[0]) + ) { + $path = $path->line( + $currentPoint[0] + ($right ? -$this->intensity : $this->intensity), + $currentPoint[1] + ); + } + + $path = $path->ellipticArc( + $this->intensity, + $this->intensity, + 0, + false, + $sweep, + $currentPoint[0], + $currentPoint[1] + ($up ? -$this->intensity : $this->intensity) + ); + } else { + $up = $previousPoint[1] > $currentPoint[1]; + $right = $nextPoint[0] > $currentPoint[0]; + $sweep = ! ($up xor $right); + + if ($this->intensity < 0.5 + || ($up && $previousPoint[1] !== $currentPoint[1] + 1) + || (! $up && $previousPoint[0] + 1 !== $currentPoint[0]) + ) { + $path = $path->line( + $currentPoint[0], + $currentPoint[1] + ($up ? $this->intensity : -$this->intensity) + ); + } + + $path = $path->ellipticArc( + $this->intensity, + $this->intensity, + 0, + false, + $sweep, + $currentPoint[0] + ($right ? $this->intensity : -$this->intensity), + $currentPoint[1] + ); + } + } + + $path = $path->close(); + } + + return $path; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.php b/vendor/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.php new file mode 100644 index 000000000..8cf1d0be9 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.php @@ -0,0 +1,44 @@ +getSimplifiedPoints(); + $length = count($points); + $path = $path->move($points[0][0], $points[0][1]); + + for ($i = 1; $i < $length; ++$i) { + $path = $path->line($points[$i][0], $points[$i][1]); + } + + $path = $path->close(); + } + + return $path; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Path/Close.php b/vendor/bacon/bacon-qr-code/src/Renderer/Path/Close.php new file mode 100644 index 000000000..bddf2d08f --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Path/Close.php @@ -0,0 +1,34 @@ +x1; + } + + public function getY1() : float + { + return $this->y1; + } + + public function getX2() : float + { + return $this->x2; + } + + public function getY2() : float + { + return $this->y2; + } + + public function getX3() : float + { + return $this->x3; + } + + public function getY3() : float + { + return $this->y3; + } + + /** + * @return self + */ + public function translate(float $x, float $y) : OperationInterface + { + return new self( + $this->x1 + $x, + $this->y1 + $y, + $this->x2 + $x, + $this->y2 + $y, + $this->x3 + $x, + $this->y3 + $y + ); + } + + /** + * @return self + */ + public function rotate(int $degrees) : OperationInterface + { + $radians = deg2rad($degrees); + $sin = sin($radians); + $cos = cos($radians); + $x1r = $this->x1 * $cos - $this->y1 * $sin; + $y1r = $this->x1 * $sin + $this->y1 * $cos; + $x2r = $this->x2 * $cos - $this->y2 * $sin; + $y2r = $this->x2 * $sin + $this->y2 * $cos; + $x3r = $this->x3 * $cos - $this->y3 * $sin; + $y3r = $this->x3 * $sin + $this->y3 * $cos; + return new self( + $x1r, + $y1r, + $x2r, + $y2r, + $x3r, + $y3r + ); + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php b/vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php new file mode 100644 index 000000000..ee957d497 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php @@ -0,0 +1,264 @@ +xRadius = abs($xRadius); + $this->yRadius = abs($yRadius); + $this->xAxisAngle = $xAxisAngle % 360; + } + + public function getXRadius() : float + { + return $this->xRadius; + } + + public function getYRadius() : float + { + return $this->yRadius; + } + + public function getXAxisAngle() : float + { + return $this->xAxisAngle; + } + + public function isLargeArc() : bool + { + return $this->largeArc; + } + + public function isSweep() : bool + { + return $this->sweep; + } + + public function getX() : float + { + return $this->x; + } + + public function getY() : float + { + return $this->y; + } + + /** + * @return self + */ + public function translate(float $x, float $y) : OperationInterface + { + return new self( + $this->xRadius, + $this->yRadius, + $this->xAxisAngle, + $this->largeArc, + $this->sweep, + $this->x + $x, + $this->y + $y + ); + } + + /** + * @return self + */ + public function rotate(int $degrees) : OperationInterface + { + $radians = deg2rad($degrees); + $sin = sin($radians); + $cos = cos($radians); + $xr = $this->x * $cos - $this->y * $sin; + $yr = $this->x * $sin + $this->y * $cos; + return new self( + $this->xRadius, + $this->yRadius, + $this->xAxisAngle, + $this->largeArc, + $this->sweep, + $xr, + $yr + ); + } + + /** + * Converts the elliptic arc to multiple curves. + * + * Since not all image back ends support elliptic arcs, this method allows to convert the arc into multiple curves + * resembling the same result. + * + * @see https://mortoray.com/2017/02/16/rendering-an-svg-elliptical-arc-as-bezier-curves/ + * @return array + */ + public function toCurves(float $fromX, float $fromY) : array + { + if (sqrt(($fromX - $this->x) ** 2 + ($fromY - $this->y) ** 2) < self::ZERO_TOLERANCE) { + return []; + } + + if ($this->xRadius < self::ZERO_TOLERANCE || $this->yRadius < self::ZERO_TOLERANCE) { + return [new Line($this->x, $this->y)]; + } + + return $this->createCurves($fromX, $fromY); + } + + /** + * @return Curve[] + */ + private function createCurves(float $fromX, float $fromY) : array + { + $xAngle = deg2rad($this->xAxisAngle); + list($centerX, $centerY, $radiusX, $radiusY, $startAngle, $deltaAngle) = + $this->calculateCenterPointParameters($fromX, $fromY, $xAngle); + + $s = $startAngle; + $e = $s + $deltaAngle; + $sign = ($e < $s) ? -1 : 1; + $remain = abs($e - $s); + $p1 = self::point($centerX, $centerY, $radiusX, $radiusY, $xAngle, $s); + $curves = []; + + while ($remain > self::ZERO_TOLERANCE) { + $step = min($remain, pi() / 2); + $signStep = $step * $sign; + $p2 = self::point($centerX, $centerY, $radiusX, $radiusY, $xAngle, $s + $signStep); + + $alphaT = tan($signStep / 2); + $alpha = sin($signStep) * (sqrt(4 + 3 * $alphaT ** 2) - 1) / 3; + $d1 = self::derivative($radiusX, $radiusY, $xAngle, $s); + $d2 = self::derivative($radiusX, $radiusY, $xAngle, $s + $signStep); + + $curves[] = new Curve( + $p1[0] + $alpha * $d1[0], + $p1[1] + $alpha * $d1[1], + $p2[0] - $alpha * $d2[0], + $p2[1] - $alpha * $d2[1], + $p2[0], + $p2[1] + ); + + $s += $signStep; + $remain -= $step; + $p1 = $p2; + } + + return $curves; + } + + /** + * @return float[] + */ + private function calculateCenterPointParameters(float $fromX, float $fromY, float $xAngle): array + { + $rX = $this->xRadius; + $rY = $this->yRadius; + + // F.6.5.1 + $dx2 = ($fromX - $this->x) / 2; + $dy2 = ($fromY - $this->y) / 2; + $x1p = cos($xAngle) * $dx2 + sin($xAngle) * $dy2; + $y1p = -sin($xAngle) * $dx2 + cos($xAngle) * $dy2; + + // F.6.5.2 + $rxs = $rX ** 2; + $rys = $rY ** 2; + $x1ps = $x1p ** 2; + $y1ps = $y1p ** 2; + $cr = $x1ps / $rxs + $y1ps / $rys; + + if ($cr > 1) { + $s = sqrt($cr); + $rX *= $s; + $rY *= $s; + $rxs = $rX ** 2; + $rys = $rY ** 2; + } + + $dq = ($rxs * $y1ps + $rys * $x1ps); + $pq = ($rxs * $rys - $dq) / $dq; + $q = sqrt(max(0, $pq)); + + if ($this->largeArc === $this->sweep) { + $q = -$q; + } + + $cxp = $q * $rX * $y1p / $rY; + $cyp = -$q * $rY * $x1p / $rX; + + // F.6.5.3 + $cx = cos($xAngle) * $cxp - sin($xAngle) * $cyp + ($fromX + $this->x) / 2; + $cy = sin($xAngle) * $cxp + cos($xAngle) * $cyp + ($fromY + $this->y) / 2; + + // F.6.5.5 + $theta = self::angle(1, 0, ($x1p - $cxp) / $rX, ($y1p - $cyp) / $rY); + + // F.6.5.6 + $delta = self::angle(($x1p - $cxp) / $rX, ($y1p - $cyp) / $rY, (-$x1p - $cxp) / $rX, (-$y1p - $cyp) / $rY); + $delta = fmod($delta, pi() * 2); + + if (! $this->sweep) { + $delta -= 2 * pi(); + } + + return [$cx, $cy, $rX, $rY, $theta, $delta]; + } + + private static function angle(float $ux, float $uy, float $vx, float $vy) : float + { + // F.6.5.4 + $dot = $ux * $vx + $uy * $vy; + $length = sqrt($ux ** 2 + $uy ** 2) * sqrt($vx ** 2 + $vy ** 2); + $angle = acos(min(1, max(-1, $dot / $length))); + + if (($ux * $vy - $uy * $vx) < 0) { + return -$angle; + } + + return $angle; + } + + /** + * @return float[] + */ + private static function point( + float $centerX, + float $centerY, + float $radiusX, + float $radiusY, + float $xAngle, + float $angle + ) : array { + return [ + $centerX + $radiusX * cos($xAngle) * cos($angle) - $radiusY * sin($xAngle) * sin($angle), + $centerY + $radiusX * sin($xAngle) * cos($angle) + $radiusY * cos($xAngle) * sin($angle), + ]; + } + + /** + * @return float[] + */ + private static function derivative(float $radiusX, float $radiusY, float $xAngle, float $angle) : array + { + return [ + -$radiusX * cos($xAngle) * sin($angle) - $radiusY * sin($xAngle) * cos($angle), + -$radiusX * sin($xAngle) * sin($angle) + $radiusY * cos($xAngle) * cos($angle), + ]; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Path/Line.php b/vendor/bacon/bacon-qr-code/src/Renderer/Path/Line.php new file mode 100644 index 000000000..dec46fd0e --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Path/Line.php @@ -0,0 +1,42 @@ +x; + } + + public function getY() : float + { + return $this->y; + } + + /** + * @return self + */ + public function translate(float $x, float $y) : OperationInterface + { + return new self($this->x + $x, $this->y + $y); + } + + /** + * @return self + */ + public function rotate(int $degrees) : OperationInterface + { + $radians = deg2rad($degrees); + $sin = sin($radians); + $cos = cos($radians); + $xr = $this->x * $cos - $this->y * $sin; + $yr = $this->x * $sin + $this->y * $cos; + return new self($xr, $yr); + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php b/vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php new file mode 100644 index 000000000..c3c9a560e --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php @@ -0,0 +1,42 @@ +x; + } + + public function getY() : float + { + return $this->y; + } + + /** + * @return self + */ + public function translate(float $x, float $y) : OperationInterface + { + return new self($this->x + $x, $this->y + $y); + } + + /** + * @return self + */ + public function rotate(int $degrees) : OperationInterface + { + $radians = deg2rad($degrees); + $sin = sin($radians); + $cos = cos($radians); + $xr = $this->x * $cos - $this->y * $sin; + $yr = $this->x * $sin + $this->y * $cos; + return new self($xr, $yr); + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.php b/vendor/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.php new file mode 100644 index 000000000..927155579 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.php @@ -0,0 +1,17 @@ +operations[] = new Move($x, $y); + return $path; + } + + /** + * Draws a line from the current position to another position. + */ + public function line(float $x, float $y) : self + { + $path = clone $this; + $path->operations[] = new Line($x, $y); + return $path; + } + + /** + * Draws an elliptic arc from the current position to another position. + */ + public function ellipticArc( + float $xRadius, + float $yRadius, + float $xAxisRotation, + bool $largeArc, + bool $sweep, + float $x, + float $y + ) : self { + $path = clone $this; + $path->operations[] = new EllipticArc($xRadius, $yRadius, $xAxisRotation, $largeArc, $sweep, $x, $y); + return $path; + } + + /** + * Draws a curve from the current position to another position. + */ + public function curve(float $x1, float $y1, float $x2, float $y2, float $x3, float $y3) : self + { + $path = clone $this; + $path->operations[] = new Curve($x1, $y1, $x2, $y2, $x3, $y3); + return $path; + } + + /** + * Closes a sub-path. + */ + public function close() : self + { + $path = clone $this; + $path->operations[] = Close::instance(); + return $path; + } + + /** + * Appends another path to this one. + */ + public function append(self $other) : self + { + $path = clone $this; + $path->operations = array_merge($this->operations, $other->operations); + return $path; + } + + public function translate(float $x, float $y) : self + { + $path = new self(); + + foreach ($this->operations as $operation) { + $path->operations[] = $operation->translate($x, $y); + } + + return $path; + } + + public function rotate(int $degrees) : self + { + $path = new self(); + + foreach ($this->operations as $operation) { + $path->operations[] = $operation->rotate($degrees); + } + + return $path; + } + + /** + * @return Traversable + */ + public function getIterator() : Traversable + { + foreach ($this->operations as $operation) { + yield $operation; + } + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.php b/vendor/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.php new file mode 100644 index 000000000..219bbf3cb --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.php @@ -0,0 +1,80 @@ +getMatrix(); + $matrixSize = $matrix->getWidth(); + + if ($matrixSize !== $matrix->getHeight()) { + throw new InvalidArgumentException('Matrix must have the same width and height'); + } + + $rows = $matrix->getArray()->toArray(); + + if (0 !== $matrixSize % 2) { + $rows[] = array_fill(0, $matrixSize, 0); + } + + $horizontalMargin = str_repeat(self::EMPTY_BLOCK, $this->margin); + $result = str_repeat("\n", (int) ceil($this->margin / 2)); + + for ($i = 0; $i < $matrixSize; $i += 2) { + $result .= $horizontalMargin; + + $upperRow = $rows[$i]; + $lowerRow = $rows[$i + 1]; + + for ($j = 0; $j < $matrixSize; ++$j) { + $upperBit = $upperRow[$j]; + $lowerBit = $lowerRow[$j]; + + if ($upperBit) { + $result .= $lowerBit ? self::FULL_BLOCK : self::UPPER_HALF_BLOCK; + } else { + $result .= $lowerBit ? self::LOWER_HALF_BLOCK : self::EMPTY_BLOCK; + } + } + + $result .= $horizontalMargin . "\n"; + } + + $result .= str_repeat("\n", (int) ceil($this->margin / 2)); + + return $result; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/RendererInterface.php b/vendor/bacon/bacon-qr-code/src/Renderer/RendererInterface.php new file mode 100644 index 000000000..b0aae390d --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/RendererInterface.php @@ -0,0 +1,11 @@ +externalColor && null === $this->internalColor; + } + + public function inheritsExternalColor() : bool + { + return null === $this->externalColor; + } + + public function inheritsInternalColor() : bool + { + return null === $this->internalColor; + } + + public function getExternalColor() : ColorInterface + { + if (null === $this->externalColor) { + throw new RuntimeException('External eye color inherits foreground color'); + } + + return $this->externalColor; + } + + public function getInternalColor() : ColorInterface + { + if (null === $this->internalColor) { + throw new RuntimeException('Internal eye color inherits foreground color'); + } + + return $this->internalColor; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.php b/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.php new file mode 100644 index 000000000..19de25dae --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.php @@ -0,0 +1,129 @@ +foregroundGradient; + } + + public function getBackgroundColor() : ColorInterface + { + return $this->backgroundColor; + } + + public function getForegroundColor() : ColorInterface + { + if (null === $this->foregroundColor) { + throw new RuntimeException('Fill uses a gradient, thus no foreground color is available'); + } + + return $this->foregroundColor; + } + + public function getForegroundGradient() : Gradient + { + if (null === $this->foregroundGradient) { + throw new RuntimeException('Fill uses a single color, thus no foreground gradient is available'); + } + + return $this->foregroundGradient; + } + + public function getTopLeftEyeFill() : EyeFill + { + return $this->topLeftEyeFill; + } + + public function getTopRightEyeFill() : EyeFill + { + return $this->topRightEyeFill; + } + + public function getBottomLeftEyeFill() : EyeFill + { + return $this->bottomLeftEyeFill; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php b/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php new file mode 100644 index 000000000..eea403109 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php @@ -0,0 +1,31 @@ +startColor; + } + + public function getEndColor() : ColorInterface + { + return $this->endColor; + } + + public function getType() : GradientType + { + return $this->type; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.php b/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.php new file mode 100644 index 000000000..c1ca75471 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.php @@ -0,0 +1,22 @@ +module = $module ?: SquareModule::instance(); + $this->eye = $eye ?: new ModuleEye($this->module); + $this->fill = $fill ?: Fill::default(); + } + + public function withSize(int $size) : self + { + $style = clone $this; + $style->size = $size; + return $style; + } + + public function withMargin(int $margin) : self + { + $style = clone $this; + $style->margin = $margin; + return $style; + } + + public function getSize() : int + { + return $this->size; + } + + public function getMargin() : int + { + return $this->margin; + } + + public function getModule() : ModuleInterface + { + return $this->module; + } + + public function getEye() : EyeInterface + { + return $this->eye; + } + + public function getFill() : Fill + { + return $this->fill; + } +} diff --git a/vendor/bacon/bacon-qr-code/src/Writer.php b/vendor/bacon/bacon-qr-code/src/Writer.php new file mode 100644 index 000000000..d7f7ebb61 --- /dev/null +++ b/vendor/bacon/bacon-qr-code/src/Writer.php @@ -0,0 +1,63 @@ +renderer->render(Encoder::encode($content, $ecLevel, $encoding, $forcedVersion)); + } + + /** + * Writes QR code to a file. + * + * @see Writer::writeString() + */ + public function writeFile( + string $content, + string $filename, + string $encoding = Encoder::DEFAULT_BYTE_MODE_ENCODING, + ?ErrorCorrectionLevel $ecLevel = null, + ?Version $forcedVersion = null + ) : void { + file_put_contents($filename, $this->writeString($content, $encoding, $ecLevel, $forcedVersion)); + } +} diff --git a/vendor/bin/yaml-lint b/vendor/bin/yaml-lint new file mode 100755 index 000000000..b5cdff984 --- /dev/null +++ b/vendor/bin/yaml-lint @@ -0,0 +1,120 @@ +#!/usr/bin/env php +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_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true)) + || (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'; diff --git a/vendor/chillerlan/php-authenticator/LICENSE b/vendor/chillerlan/php-authenticator/LICENSE new file mode 100644 index 000000000..2541edba9 --- /dev/null +++ b/vendor/chillerlan/php-authenticator/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Smiley + +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. \ No newline at end of file diff --git a/vendor/chillerlan/php-authenticator/README.md b/vendor/chillerlan/php-authenticator/README.md new file mode 100644 index 000000000..fd2e60961 --- /dev/null +++ b/vendor/chillerlan/php-authenticator/README.md @@ -0,0 +1,181 @@ +# chillerlan/php-authenticator + +A generator for counter based ([RFC 4226](https://tools.ietf.org/html/rfc4226)) and time based ([RFC 6238](https://tools.ietf.org/html/rfc6238)) one time passwords (OTP). (a.k.a. Yet Another Google Authenticator Implementation!) + +[![License][license-badge]][license] +[![GitHub actions workflow][gh-action-badge]][gh-action] +[![Coverage][coverage-badge]][coverage] +[![Codacy][codacy-badge]][codacy] + +[license-badge]: https://img.shields.io/github/license/chillerlan/php-authenticator.svg +[license]: https://github.com/chillerlan/php-authenticator/blob/v5.x/LICENSE +[gh-action-badge]: https://img.shields.io/github/actions/workflow/status/chillerlan/php-authenticator/ci.yml?branch=v5.x&logo=github&logoColor=fff +[gh-action]: https://github.com/chillerlan/php-authenticator/actions?query=branch%3Av5.x +[coverage-badge]: https://img.shields.io/codecov/c/gh/chillerlan/php-authenticator/v5.x?logo=codecov&logoColor=fff +[coverage]: https://app.codecov.io/github/chillerlan/php-authenticator/tree/v5.x +[codacy-badge]: https://img.shields.io/codacy/grade/a2793225b448495c9659f27f7f52380a/v5.x?logo=codacy&logoColor=fff +[codacy]: https://www.codacy.com/gh/chillerlan/php-authenticator/dashboard?branch=v5.x + +# Documentation +## Requirements +- PHP 8.2+ + - [`ext-curl`](https://www.php.net/manual/book.curl) for Steam Guard server time synchronization + - [`ext-sodium`](https://www.php.net/manual/book.sodium) for constant time implementations of base64 encode/decode and hex2bin/bin2hex + ([`paragonie/constant_time_encoding`](https://github.com/paragonie/constant_time_encoding) is used as fallback) + +## Installation +**requires [composer](https://getcomposer.org)** + +via terminal: `composer require chillerlan/php-authenticator` + +**composer.json** +```json +{ + "require": { + "php": "^8.2", + "chillerlan/php-authenticator": "dev-v5.x" + } +} +``` +Note: replace `dev-main` with a [version constraint](https://getcomposer.org/doc/articles/versions.md#writing-version-constraints), e.g. `^5.0` - see [releases](https://github.com/chillerlan/php-authenticator/releases) for valid versions + +Profit! + +## Usage +### Create a secret +The secret is usually being created once during the activation process in a user control panel. +So all you need to do there is to display it to the user in a convenient way - +as a text string and QR code for example - and save it somewhere with the user data. +```php +use chillerlan\Authenticator\{Authenticator, AuthenticatorOptions}; + +$options = new AuthenticatorOptions; +$options->secret_length = 32; + +$authenticator = new Authenticator($options); +// create a secret (stored somewhere in a *safe* place on the server. safe... hahaha jk) +$secret = $authenticator->createSecret(); +// you can also specify the length of the secret key, which overrides the options setting +$secret = $authenticator->createSecret(20); +// set an existing secret +$authenticator->setSecret($secret); +``` + +A secret created with `Authenticator::createSecret()` will also be stored internally, +so that you don't need to provide the secret you just created on follow-up operations with the current instance. + +### Verify a one time code +Now during the login process - after the user has successfully entered their credentials - you would +ask them for a one time code to check it against the secret from your user database. + +```php +// verify the code +if($authenticator->verify($otp)){ + // that's it - 2FA has never been easier! :D +} +``` + +#### time based (TOTP) +Verify adjacent codes +```php +// try the first adjacent +$authenticator->verify($otp, time() - $options->period); // -> true +// try the second adjacent, default is 1 +$authenticator->verify($otp, time() + 2 * $options->period); // -> false +// allow 2 adjacent codes +$options->adjacent = 2; +$authenticator->verify($otp, time() + 2 * $options->period); // -> true +``` + +#### counter based (HOTP) +```php +// switch mode to HOTP +$options->mode = AuthenticatorInterface::HOTP; +// user sends the OTP for code #42, which is equivalent to +$otp = $authenticator->code(42); // -> 123456 +// verify [123456, 42] +$authenticator->verify($otp, $counterValueFromUserDatabase) // -> true +``` + +### URI creation +In order to display a QR code for a mobile authenticator you'll need an `otpauth://` URI, which can be created using the following method. +- `$label` should be something that identifies the account to which the secret belongs +- `$issuer` is the name of your website or company for example, so that the user is able to identify multiple accounts. +```php +$uri = $authenticator->getUri($label, $issuer); + +// -> otpauth://totp/my%20label?secret=NKSOQG7UKKID4IXW&issuer=chillerlan.net&digits=6&period=30&algorithm=SHA1 +``` + +#### Notes +Keep in mind that several URI settings are not (yet) recognized by all authenticators. Check [the Google Authenticator wiki](https://github.com/google/google-authenticator/wiki/Key-Uri-Format#parameters) for more info. + +```php +// code length, currently 6 or 8 +$options->digits = 8; +// valid period between 15 and 60 seconds +$options->period = 45; +// set the HMAC hash algorithm +$options->algorithm = AuthenticatorInterface::ALGO_SHA512; +``` + +## API +### `Authenticator` +| method | return | description | +|---------------------------------------------------------------------------------------------|-----------------|------------------------------------------------------------------| +| `__construct(SettingsContainerInterface $options = null, string $secret = null)` | - | | +| `setOptions(SettingsContainerInterface $options)` | `Authenticator` | called internally by `__construct()` | +| `setSecret(string $secret)` | `Authenticator` | called internally by `__construct()` | +| `getSecret()` | `string` | | +| `createSecret(int $length = null)` | `string` | `$length` overrides `AuthenticatorOptions` setting | +| `code(int $data = null)` | `string` | `$data` may be a UNIX timestamp (TOTP) or a counter value (HOTP) | +| `verify(string $otp, int $data = null)` | `bool` | for `$data` see `Authenticator::code()` | +| `getUri(string $label, string $issuer, int $hotpCounter = null, bool $omitSettings = null)` | `string` | | + +### `AuthenticatorOptions` +#### Properties +| property | type | default | allowed | description | +|---------------------|----------|---------|----------------------------------------|---------------------------------------------------------------------------------| +| `$digits` | `int` | 6 | 6 or 8 | auth code length | +| `$period` | `int` | 30 | 15 - 60 | validation period (seconds) | +| `$secret_length` | `int` | 20 | >= 16 | length of the secret phrase (bytes, unencoded binary) | +| `$algorithm` | `string` | `SHA1` | `SHA1`, `SHA256` or `SHA512` | HMAC hash algorithm, see `AuthenticatorInterface::HASH_ALGOS` | +| `$mode` | `string` | `totp` | `totp`, `hotp`, `battlenet` or `steam` | authenticator mode: time- or counter based, see `AuthenticatorInterface::MODES` | +| `$adjacent` | `int` | 1 | >= 0 | number of allowed adjacent codes | +| `$time_offset` | `int` | 0 | * | fixed time offset that will be added to the current time value | +| `$useLocalTime` | `bool` | true | * | whether to use local time or request server time | +| `$forceTimeRefresh` | `bool` | false | * | whether to force refreshing server time on each call | + +### `AuthenticatorInterface` +#### Methods +| method | return | description | +|---------------------------------------------------|--------------------------|-------------| +| `setOptions(SettingsContainerInterface $options)` | `AuthenticatorInterface` | | +| `setSecret(string $encodedSecret)` | `AuthenticatorInterface` | | +| `getSecret()` | `string` | | +| `createSecret(int $length = null)` | `string` | | +| `getServertime()` | `int` | | +| `getCounter(int $data = null)` | `int` | internal | +| `getHMAC(int $counter)` | `string` | internal | +| `getCode(string $hmac)` | `int` | internal | +| `getOTP(int $code)` | `string` | internal | +| `code(int $data = null)` | `string` | | +| `verify(string $otp, int $data = null)` | `bool` | | + +#### Constants +| constant | type | description | +|---------------|----------|-----------------------------------| +| `TOTP` | `string` | | +| `HOTP` | `string` | | +| `STEAM_GUARD` | `string` | | +| `ALGO_SHA1` | `string` | | +| `ALGO_SHA256` | `string` | | +| `ALGO_SHA512` | `string` | | +| `MODES` | `array` | map of mode -> classname | +| `HASH_ALGOS` | `array` | list of available hash algorithms | + +

+ + 2FA ALL THE THINGS! + +

diff --git a/vendor/chillerlan/php-authenticator/composer.json b/vendor/chillerlan/php-authenticator/composer.json new file mode 100644 index 000000000..0806c9538 --- /dev/null +++ b/vendor/chillerlan/php-authenticator/composer.json @@ -0,0 +1,71 @@ +{ + "name": "chillerlan/php-authenticator", + "description": "A generator for counter- and time based 2-factor authentication codes (Google Authenticator). PHP 8.2+", + "homepage": "https://github.com/chillerlan/php-authenticator", + "license": "MIT", + "type": "library", + "keywords": [ + "2fa", "authenticator", "google2fa", "hotp", "mfa", "otp", "rfc4226", "rfc6238", "tfa", "totp", "two factor" + ], + "authors": [ + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" + }, + { + "name": "Contributors", + "homepage":"https://github.com/chillerlan/php-authenticator/graphs/contributors" + } + ], + "funding": [ + { + "type": "Ko-Fi", + "url": "https://ko-fi.com/codemasher" + } + ], + "support": { + "issues": "https://github.com/chillerlan/php-authenticator/issues", + "source": "https://github.com/chillerlan/php-authenticator" + }, + "minimum-stability": "stable", + "prefer-stable": true, + "require": { + "php": "^8.2", + "chillerlan/php-settings-container": "^3.2.1", + "paragonie/constant_time_encoding": "^3.0" + }, + "require-dev": { + "ext-curl": "*", + "ext-json": "*", + "ext-sodium": "*", + "phpmd/phpmd": "^2.15", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-deprecation-rules": "^1.2", + "phpunit/phpunit": "^11.2", + "squizlabs/php_codesniffer": "^3.10" + }, + "suggest": { + "chillerlan/php-qrcode": "Create QR Codes for use with an authenticator app." + }, + "autoload": { + "psr-4": { + "chillerlan\\Authenticator\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "chillerlan\\AuthenticatorTest\\": "tests" + } + }, + "scripts": { + "phpcs": "@php vendor/bin/phpcs", + "phpunit": "@php vendor/bin/phpunit", + "phpstan": "@php vendor/bin/phpstan" + }, + "config": { + "lock": false, + "sort-packages": true, + "platform-check": true + } +} diff --git a/vendor/chillerlan/php-authenticator/src/Authenticator.php b/vendor/chillerlan/php-authenticator/src/Authenticator.php new file mode 100644 index 000000000..b36af9cdc --- /dev/null +++ b/vendor/chillerlan/php-authenticator/src/Authenticator.php @@ -0,0 +1,168 @@ + + * @copyright 2015 Smiley + * @license MIT + */ +declare(strict_types=1); + +namespace chillerlan\Authenticator; + +use chillerlan\Authenticator\Authenticators\AuthenticatorInterface; +use chillerlan\Settings\SettingsContainerInterface; +use InvalidArgumentException; +use SensitiveParameter; +use function http_build_query; +use function rawurlencode; +use function sprintf; +use function trim; +use const PHP_QUERY_RFC3986; + +/** + * Yet another Google authenticator implementation! + * + * @link https://tools.ietf.org/html/rfc4226 + * @link https://tools.ietf.org/html/rfc6238 + * @link https://github.com/google/google-authenticator + * @link https://openauthentication.org/specifications-technical-resources/ + * @link https://blog.ircmaxell.com/2014/11/its-all-about-time.html + */ +class Authenticator{ + + protected SettingsContainerInterface|AuthenticatorOptions $options; + protected AuthenticatorInterface $authenticator; + protected string $mode = AuthenticatorInterface::TOTP; + + /** + * Authenticator constructor + */ + public function __construct( + SettingsContainerInterface|AuthenticatorOptions $options = new AuthenticatorOptions, + string|null $secret = null + ){ + // phpcs:ignore + $this->setOptions($options); + + if($secret !== null){ + $this->setSecret($secret); + } + + } + + /** + * Sets an options instance and invokes an authenticator according to the given mode + * + * Please note that this will reset the secret phrase stored with the authenticator instance + * if a different mode than the current is given. + */ + public function setOptions(SettingsContainerInterface|AuthenticatorOptions $options):self{ + $this->options = $options; + + // invoke a new authenticator interface if necessary + if(!isset($this->authenticator) || $this->options->mode !== $this->mode){ + $this->mode = $this->options->mode; + $this->authenticator = new (AuthenticatorInterface::MODES[$this->options->mode])($this->options); + } + + $this->authenticator->setOptions($this->options); + + return $this; + } + + /** + * Sets a secret phrase from a Base32 representation + * + * @codeCoverageIgnore + */ + public function setSecret(#[SensitiveParameter] string $encodedSecret):self{ + $this->authenticator->setSecret($encodedSecret); + + return $this; + } + + /** + * Returns a Base32 representation of the current secret phrase + * + * @codeCoverageIgnore + */ + public function getSecret():string{ + return $this->authenticator->getSecret(); + } + + /** + * Generates a new (secure random) secret phrase + * + * @codeCoverageIgnore + */ + public function createSecret(int|null $length = null):string{ + return $this->authenticator->createSecret($length); + } + + /** + * Creates a new OTP code with the given secret + * + * $data may be + * - a UNIX timestamp (TOTP) + * - a counter value (HOTP) + * + * @codeCoverageIgnore + */ + public function code(int|null $data = null):string{ + return $this->authenticator->code($data); + } + + /** + * Checks the given $code against the secret + * + * $data may be + * - a UNIX timestamp (TOTP) + * - a counter value (HOTP) + * + * @codeCoverageIgnore + */ + public function verify(#[SensitiveParameter] string $otp, int|null $data = null):bool{ + return $this->authenticator->verify($otp, $data); + } + + /** + * Creates a URI for use in QR codes for example + * + * @link https://github.com/google/google-authenticator/wiki/Key-Uri-Format#parameters + * + * @throws \InvalidArgumentException + */ + public function getUri(string $label, string $issuer, int|null $hotpCounter = null, bool|null $omitSettings = null):string{ + $label = trim($label); + $issuer = trim($issuer); + + if(empty($label) || empty($issuer)){ + throw new InvalidArgumentException('$label and $issuer cannot be empty'); + } + + $values = [ + 'secret' => $this->authenticator->getSecret(), + 'issuer' => $issuer, + ]; + + if($omitSettings !== true){ + $values['digits'] = $this->options->digits; + $values['algorithm'] = $this->options->algorithm; + + if($this->mode === AuthenticatorInterface::TOTP){ + $values['period'] = $this->options->period; + } + + if($this->mode === AuthenticatorInterface::HOTP && $hotpCounter !== null){ + $values['counter'] = $hotpCounter; + } + } + + $values = http_build_query($values, '', '&', PHP_QUERY_RFC3986); + + return sprintf('otpauth://%s/%s?%s', $this->mode, rawurlencode($label), $values); + } + +} diff --git a/vendor/chillerlan/php-authenticator/src/AuthenticatorOptions.php b/vendor/chillerlan/php-authenticator/src/AuthenticatorOptions.php new file mode 100644 index 000000000..cde76ba90 --- /dev/null +++ b/vendor/chillerlan/php-authenticator/src/AuthenticatorOptions.php @@ -0,0 +1,21 @@ + + * @copyright 2019 smiley + * @license MIT + */ +declare(strict_types=1); + +namespace chillerlan\Authenticator; + +use chillerlan\Settings\SettingsContainerAbstract; + +/** + * + */ +class AuthenticatorOptions extends SettingsContainerAbstract{ + use AuthenticatorOptionsTrait; +} diff --git a/vendor/chillerlan/php-authenticator/src/AuthenticatorOptionsTrait.php b/vendor/chillerlan/php-authenticator/src/AuthenticatorOptionsTrait.php new file mode 100644 index 000000000..e4ac34bc8 --- /dev/null +++ b/vendor/chillerlan/php-authenticator/src/AuthenticatorOptionsTrait.php @@ -0,0 +1,178 @@ + + * @copyright 2019 smiley + * @license MIT + */ +declare(strict_types=1); + +namespace chillerlan\Authenticator; + +use chillerlan\Authenticator\Authenticators\AuthenticatorInterface; +use InvalidArgumentException; +use function in_array; +use function strtolower; +use function strtoupper; + +/** + * @property int $digits + * @property int $period + * @property int $secret_length + * @property string $algorithm + * @property string $mode + * @property int $adjacent + * @property int $time_offset + * @property bool $useLocalTime + * @property bool $forceTimeRefresh + */ +trait AuthenticatorOptionsTrait{ + + /** + * Code length: either 6 or 8 + */ + protected int $digits = 6; + + /** + * Validation period (seconds): 15 - 60 + */ + protected int $period = 30; + + /** + * Length of the secret phrase (bytes, unencoded binary) + * + * @see \random_bytes() + */ + protected int $secret_length = 20; + + /** + * Hash algorithm: + * + * - `AuthenticatorInterface::ALGO_SHA1` + * - `AuthenticatorInterface::ALGO_SHA256` + * - `AuthenticatorInterface::ALGO_SHA512` + */ + protected string $algorithm = AuthenticatorInterface::ALGO_SHA1; + + /** + * Authenticator mode: + * + * - `AuthenticatorInterface::HOTP` = counter based + * - `AuthenticatorInterface::TOTP` = time based + * - `AuthenticatorInterface::STEAM` = time based (Steam Guard) + */ + protected string $mode = AuthenticatorInterface::TOTP; + + /** + * Number of allowed adjacent codes + */ + protected int $adjacent = 1; + + /** + * A fixed time offset that will be added to the current time value + * + * @see \chillerlan\Authenticator\Authenticators\AuthenticatorInterface::getCounter() + */ + protected int $time_offset = 0; + + /** + * Whether to use local time or request server time from the API + * + * This can be useful when the device time sync is unreliable. + * + * note: API requests needs ext-curl installed + */ + protected bool $useLocalTime = true; + + /** + * Whether to force refreshing server time on each call or use the time returned from the last request + */ + protected bool $forceTimeRefresh = false; + + /** + * Sets the code length to either 6 or 8 + * + * @throws \InvalidArgumentException + */ + protected function set_digits(int $digits):void{ + + if(!in_array($digits, [6, 8], true)){ + throw new InvalidArgumentException('Invalid code length: '.$digits); + } + + $this->digits = $digits; + } + + /** + * Sets the period to a value between 15 and 60 seconds + * + * @throws \InvalidArgumentException + */ + protected function set_period(int $period):void{ + + if($period < 15 || $period > 60){ + throw new InvalidArgumentException('Invalid period: '.$period); + } + + $this->period = $period; + } + + /** + * Sets the hash algorithm + * + * @throws \InvalidArgumentException + */ + protected function set_algorithm(string $algorithm):void{ + $algorithm = strtoupper($algorithm); + + if(!in_array($algorithm, AuthenticatorInterface::HASH_ALGOS, true)){ + throw new InvalidArgumentException('Invalid algorithm: '.$algorithm); + } + + $this->algorithm = $algorithm; + } + + /** + * Sets the authenticator mode + * + * @throws \InvalidArgumentException + */ + protected function set_mode(string $mode):void{ + $mode = strtolower($mode); + + if(!isset(AuthenticatorInterface::MODES[$mode])){ + throw new InvalidArgumentException('Invalid mode: '.$mode); + } + + $this->mode = $mode; + } + + /** + * Sets the adjacent amount + * + * @throws \InvalidArgumentException + */ + protected function set_adjacent(int $adjacent):void{ + + if($adjacent < 0){ + throw new InvalidArgumentException('Invalid adjacent: '.$adjacent); + } + + $this->adjacent = $adjacent; + } + + /** + * @throws \InvalidArgumentException + */ + protected function set_secret_length(int $secret_length):void{ + // ~ 80 to 640 bits + if($secret_length < 16 || $secret_length > 1024){ + throw new InvalidArgumentException('Invalid secret length: '.$secret_length); + } + + $this->secret_length = $secret_length; + } + +} diff --git a/vendor/chillerlan/php-authenticator/src/Authenticators/AuthenticatorAbstract.php b/vendor/chillerlan/php-authenticator/src/Authenticators/AuthenticatorAbstract.php new file mode 100644 index 000000000..5d9f8f341 --- /dev/null +++ b/vendor/chillerlan/php-authenticator/src/Authenticators/AuthenticatorAbstract.php @@ -0,0 +1,119 @@ + + * @copyright 2023 smiley + * @license MIT + */ +declare(strict_types=1); + +namespace chillerlan\Authenticator\Authenticators; + +use chillerlan\Authenticator\AuthenticatorOptions; +use chillerlan\Authenticator\Common\Base32; +use chillerlan\Settings\SettingsContainerInterface; +use InvalidArgumentException; +use RuntimeException; +use SensitiveParameter; +use function random_bytes; +use function time; +use function trim; + +/** + * + */ +abstract class AuthenticatorAbstract implements AuthenticatorInterface{ + + protected const userAgent = 'chillerlanAuthenticator/5.0 +https://github.com/chillerlan/php-authenticator'; + + protected SettingsContainerInterface|AuthenticatorOptions $options; + protected string|null $secret = null; + protected int $serverTime = 0; + protected int $lastRequestTime = 0; + + /** + * AuthenticatorInterface constructor + */ + public function __construct(SettingsContainerInterface|AuthenticatorOptions $options = new AuthenticatorOptions){ + $this->setOptions($options); + } + + /** + * @inheritDoc + */ + public function setOptions(SettingsContainerInterface $options):AuthenticatorInterface{ + $this->options = $options; + + return $this; + } + + /** + * @inheritDoc + */ + public function setSecret(#[SensitiveParameter] string $encodedSecret):AuthenticatorInterface{ + $this->secret = Base32::decode($this->checkEncodedSecret($encodedSecret)); + + return $this; + } + + /** + * @inheritDoc + */ + public function getSecret():string{ + + if($this->secret === null){ + throw new RuntimeException('No secret set'); + } + + return Base32::encode($this->secret); + } + + /** + * @inheritDoc + */ + public function createSecret(int|null $length = null):string{ + $length ??= $this->options->secret_length; + + if($length < 16){ + throw new InvalidArgumentException('Invalid secret length: '.$length); + } + + $this->secret = random_bytes($length); + + return $this->getSecret(); + } + + /** + * @inheritDoc + */ + public function getServertime():int{ + return time(); + } + + /** + * Get an adjusted time stamp for the given server time + */ + protected function getAdjustedTime(int $serverTime, int $lastRequestTime):int{ + $diff = (time() - $lastRequestTime); + + return ($serverTime + $diff); + } + + /** + * Checks if the encoded secret is non-empty, returns the trimmed string on success + * + * @throws \InvalidArgumentException + */ + protected function checkEncodedSecret(string $encodedSecret):string{ + $encodedSecret = trim($encodedSecret); + + if($encodedSecret === ''){ + throw new InvalidArgumentException('The given secret string is empty'); + } + + return $encodedSecret; + } + +} diff --git a/vendor/chillerlan/php-authenticator/src/Authenticators/AuthenticatorInterface.php b/vendor/chillerlan/php-authenticator/src/Authenticators/AuthenticatorInterface.php new file mode 100644 index 000000000..36e889428 --- /dev/null +++ b/vendor/chillerlan/php-authenticator/src/Authenticators/AuthenticatorInterface.php @@ -0,0 +1,119 @@ + + * @copyright 2023 smiley + * @license MIT + */ +declare(strict_types=1); + +namespace chillerlan\Authenticator\Authenticators; + +use chillerlan\Settings\SettingsContainerInterface; +use SensitiveParameter; + +/** + * + */ +interface AuthenticatorInterface{ + + public const TOTP = 'totp'; + public const HOTP = 'hotp'; + public const STEAM_GUARD = 'steam'; + + public const ALGO_SHA1 = 'SHA1'; + public const ALGO_SHA256 = 'SHA256'; + public const ALGO_SHA512 = 'SHA512'; + + public const MODES = [ + self::HOTP => HOTP::class, + self::TOTP => TOTP::class, + self::STEAM_GUARD => SteamGuard::class, + ]; + + public const HASH_ALGOS = [ + self::ALGO_SHA1, + self::ALGO_SHA256, + self::ALGO_SHA512, + ]; + + /** + * Sets the options + */ + public function setOptions(SettingsContainerInterface $options):AuthenticatorInterface; + + /** + * Sets a secret phrase from an encoded representation + * + * @throws \RuntimeException + */ + public function setSecret(#[SensitiveParameter] string $encodedSecret):AuthenticatorInterface; + + /** + * Returns an encoded representation of the current secret phrase + * + * @throws \RuntimeException + */ + public function getSecret():string; + + /** + * Generates a new (secure random) secret phrase + * + * @throws \InvalidArgumentException + */ + public function createSecret(int|null $length = null):string; + + /** + * Returns the current server time as UNIX timestamp for the given application (or `time()` if not applicable) + */ + public function getServertime():int; + + /** + * Prepares the given $data value and returns an integer that will be passed as counter value to the hash function + * + * @internal + */ + public function getCounter(int|null $data = null):int; + + /** + * HMAC hashes the given $data integer with the given secret + * + * @internal + */ + public function getHMAC(int $counter):string; + + /** + * Extracts the intermediate code from the given $hmac hash + * + * @internal + */ + public function getCode(#[SensitiveParameter] string $hmac):int; + + /** + * Formats the final output OTP from the given intermediate $code + * + * @internal + */ + public function getOTP(#[SensitiveParameter] int $code):string; + + /** + * Creates a new OTP code with the given secret + * + * $data may be + * - a UNIX timestamp (TOTP) + * - a counter value (HOTP) + */ + public function code(int|null $data = null):string; + + /** + * Checks the given $code against the secret + * + * $data may be + * - a UNIX timestamp (TOTP) + * - a counter value (HOTP) + */ + public function verify(#[SensitiveParameter] string $otp, int|null $data = null):bool; + +} diff --git a/vendor/chillerlan/php-authenticator/src/Authenticators/HOTP.php b/vendor/chillerlan/php-authenticator/src/Authenticators/HOTP.php new file mode 100644 index 000000000..956efc3a5 --- /dev/null +++ b/vendor/chillerlan/php-authenticator/src/Authenticators/HOTP.php @@ -0,0 +1,93 @@ + + * @copyright 2023 smiley + * @license MIT + */ +declare(strict_types=1); + +namespace chillerlan\Authenticator\Authenticators; + +use RuntimeException; +use SensitiveParameter; +use function hash_equals; +use function hash_hmac; +use function pack; +use function str_pad; +use function strlen; +use function unpack; +use const PHP_INT_SIZE; +use const STR_PAD_LEFT; + +/** + * @link https://tools.ietf.org/html/rfc4226 + */ +class HOTP extends AuthenticatorAbstract{ + + /** + * @inheritDoc + */ + public function getCounter(int|null $data = null):int{ + return ($data ?? 0); + } + + /** + * @inheritDoc + */ + public function getHMAC(int $counter):string{ + + if($this->secret === null){ + throw new RuntimeException('No secret given'); + } + // @codeCoverageIgnoreStart + $data = (PHP_INT_SIZE < 8) + ? "\x00\x00\x00\x00".pack('N', $counter) + : pack('J', $counter); + // @codeCoverageIgnoreEnd + return hash_hmac($this->options->algorithm, $data, $this->secret, true); + } + + /** + * @inheritDoc + */ + public function getCode(#[SensitiveParameter] string $hmac):int{ + $data = unpack('C*', $hmac); + + if($data === false){ + throw new RuntimeException('error while unpacking HMAC'); // @codeCoverageIgnore + } + + $b = ($data[strlen($hmac)] & 0xF); + // phpcs:ignore + return (($data[$b + 1] & 0x7F) << 24) | ($data[$b + 2] << 16) | ($data[$b + 3] << 8) | $data[$b + 4]; + } + + /** + * @inheritDoc + */ + public function getOTP(#[SensitiveParameter] int $code):string{ + $code %= (10 ** $this->options->digits); + + return str_pad((string)$code, $this->options->digits, '0', STR_PAD_LEFT); + } + + /** + * @inheritDoc + */ + public function code(int|null $data = null):string{ + $hmac = $this->getHMAC($this->getCounter($data)); + + return $this->getOTP($this->getCode($hmac)); + } + + /** + * @inheritDoc + */ + public function verify(#[SensitiveParameter] string $otp, int|null $data = null):bool{ + return hash_equals($this->code($data), $otp); + } + +} diff --git a/vendor/chillerlan/php-authenticator/src/Authenticators/SteamGuard.php b/vendor/chillerlan/php-authenticator/src/Authenticators/SteamGuard.php new file mode 100644 index 000000000..f168c5ea8 --- /dev/null +++ b/vendor/chillerlan/php-authenticator/src/Authenticators/SteamGuard.php @@ -0,0 +1,162 @@ + + * @copyright 2023 smiley + * @license MIT + * + * @noinspection PhpComposerExtensionStubsInspection + */ +declare(strict_types=1); + +namespace chillerlan\Authenticator\Authenticators; + +use chillerlan\Authenticator\Common\Base64; +use RuntimeException; +use SensitiveParameter; +use function curl_close; +use function curl_exec; +use function curl_getinfo; +use function curl_init; +use function curl_setopt_array; +use function floor; +use function intdiv; +use function is_array; +use function json_decode; +use function sprintf; +use function time; +use const CURLOPT_HTTPHEADER; +use const CURLOPT_POST; +use const CURLOPT_POSTFIELDS; +use const CURLOPT_RETURNTRANSFER; + +/** + * /data/data/com.valvesoftware.android.steam.community/f/Steamguard-STEAMID64 + * + * @see https://help.steampowered.com/en/faqs/view/7EFD-3CAE-64D3-1C31 + * @see https://github.com/SoftCreatR/php-steam-guard + */ +final class SteamGuard extends TOTP{ + + private const steamCodeChars = '23456789BCDFGHJKMNPQRTVWXY'; + private const steamTimeURL = 'https://api.steampowered.com/ITwoFactorService/QueryTime/v0001'; + + /** + * @inheritDoc + */ + public function setSecret(#[SensitiveParameter] string $encodedSecret):AuthenticatorInterface{ + $this->secret = Base64::decode($this->checkEncodedSecret($encodedSecret)); + + return $this; + } + + /** + * @inheritDoc + */ + public function getSecret():string{ + + if($this->secret === null){ + throw new RuntimeException('No secret set'); + } + + return Base64::encode($this->secret); + } + + /** + * @inheritDoc + * @codeCoverageIgnore + */ + public function createSecret(int|null $length = null):string{ + throw new RuntimeException('Not implemented'); + } + + /** + * @inheritDoc + */ + public function getCounter(int|null $data = null):int{ + // the period is fixed to 30 seconds for Steam Guard + $this->options->period = 30; + + return parent::getCounter($data); + } + + /** + * @inheritDoc + */ + public function getHMAC(int $counter):string{ + // algorithm is fixed to sha1 for Steam Guard + $this->options->algorithm = self::ALGO_SHA1; + + return parent::getHMAC($counter); + } + + /** + * @inheritDoc + */ + public function getOTP(#[SensitiveParameter] int $code):string{ + $str = ''; + $len = 26; // strlen($this::steamCodeChars) + + // length is fixed to 5 for Steam + for($i = 0; $i < 5; $i++){ + $str .= $this::steamCodeChars[($code % $len)]; + $code = intdiv($code, $len); + } + + return $str; + } + + /** + * @inheritDoc + * @throws \RuntimeException + */ + public function getServerTime():int{ + + if($this->options->forceTimeRefresh === false && $this->serverTime !== 0){ + return $this->getAdjustedTime($this->serverTime, $this->lastRequestTime); + } + + $this->serverTime = 0; + $this->lastRequestTime = 0; + + $options = [ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => 'steamid=0', + CURLOPT_HTTPHEADER => [sprintf('User-Agent: %s', $this::userAgent)], + ]; + + $ch = curl_init($this::steamTimeURL); + + // it's almost impossible to run into this, but hey, phpstan happy + if($ch === false){ + throw new RuntimeException('curl_init error'); // @codeCoverageIgnore + } + + curl_setopt_array($ch, $options); + + $response = curl_exec($ch); + $info = curl_getinfo($ch); + + curl_close($ch); + + if($info['http_code'] !== 200 || $response === false){ + // I'm not going to investigate the error further as this shouldn't happen usually + throw new RuntimeException(sprintf('Steam API request error: HTTP/%s', $info['http_code'])); // @codeCoverageIgnore + } + + $json = json_decode($response, true); + + if(!is_array($json) || !isset($json['response']['server_time'])){ + throw new RuntimeException('Unable to decode Steam API response'); // @codeCoverageIgnore + } + + $this->serverTime = (int)$json['response']['server_time']; + $this->lastRequestTime = (time() - (int)floor($info['total_time'])); + + return $this->getAdjustedTime($this->serverTime, $this->lastRequestTime); + } + +} diff --git a/vendor/chillerlan/php-authenticator/src/Authenticators/TOTP.php b/vendor/chillerlan/php-authenticator/src/Authenticators/TOTP.php new file mode 100644 index 000000000..e52e201c3 --- /dev/null +++ b/vendor/chillerlan/php-authenticator/src/Authenticators/TOTP.php @@ -0,0 +1,61 @@ + + * @copyright 2023 smiley + * @license MIT + */ +declare(strict_types=1); + +namespace chillerlan\Authenticator\Authenticators; + +use SensitiveParameter; +use function floor; +use function hash_equals; +use function time; + +/** + * @link https://tools.ietf.org/html/rfc6238 + */ +class TOTP extends HOTP{ + + /** + * @inheritDoc + */ + public function getCounter(int|null $data = null):int{ + $data ??= time(); + + if($this->options->useLocalTime === false){ + $data = $this->getServerTime(); + } + + return (int)floor(($data + $this->options->time_offset) / $this->options->period); + } + + /** + * @inheritDoc + */ + public function verify(#[SensitiveParameter] string $otp, int|null $data = null):bool{ + $limit = $this->options->adjacent; + + if($limit === 0){ + return parent::verify($otp, $data); // @codeCoverageIgnore + } + + $timeslice = $this->getCounter($data); + // phpcs:ignore + for($i = -$limit; $i <= $limit; $i++){ + $hash = $this->getHMAC($timeslice + $i); + $code = $this->getOTP($this->getCode($hash)); + + if(hash_equals($code, $otp)){ + return true; + } + } + + return false; + } + +} diff --git a/vendor/chillerlan/php-authenticator/src/Common/Base32.php b/vendor/chillerlan/php-authenticator/src/Common/Base32.php new file mode 100644 index 000000000..028593df2 --- /dev/null +++ b/vendor/chillerlan/php-authenticator/src/Common/Base32.php @@ -0,0 +1,61 @@ + + * @copyright 2023 smiley + * @license MIT + */ +declare(strict_types=1); + +namespace chillerlan\Authenticator\Common; + +use InvalidArgumentException; +use ParagonIE\ConstantTime\Base32 as ConstantTimeBase32; +use SensitiveParameter; +use function preg_match; + +/** + * Class to provide base32 encoding/decoding of strings using constant time functions + */ +final class Base32{ + + /** + * The Base32 character set as defined by RFC3548 + * + * @see https://datatracker.ietf.org/doc/html/rfc3548#section-5 + * @see https://datatracker.ietf.org/doc/html/rfc4648#section-6 + * + * @var string + */ + public const CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'; + + /** + * Encode a string to Base32 + */ + public static function encode(#[SensitiveParameter] string $str):string{ + return ConstantTimeBase32::encodeUpperUnpadded($str); + } + + /** + * Decode a string from Base32 + */ + public static function decode(#[SensitiveParameter] string $base32):string{ + self::checkCharacterSet($base32); + + return ConstantTimeBase32::decodeNoPadding($base32, true); + } + + /** + * @throws \InvalidArgumentException + */ + public static function checkCharacterSet(#[SensitiveParameter] string $base32):void{ + + if(!preg_match('/^['.self::CHARSET.']+$/', $base32)){ + throw new InvalidArgumentException('Base32 must match RFC3548 character set'); + } + + } + +} diff --git a/vendor/chillerlan/php-authenticator/src/Common/Base64.php b/vendor/chillerlan/php-authenticator/src/Common/Base64.php new file mode 100644 index 000000000..ed9b75c4e --- /dev/null +++ b/vendor/chillerlan/php-authenticator/src/Common/Base64.php @@ -0,0 +1,71 @@ + + * @copyright 2023 smiley + * @license MIT + */ +declare(strict_types=1); + +namespace chillerlan\Authenticator\Common; + +use InvalidArgumentException; +use ParagonIE\ConstantTime\Base64 as ConstantTimeBase64; +use SensitiveParameter; +use function function_exists; +use function preg_match; + +/** + * Class to provide base64 encoding/decoding of strings using constant time functions + */ +class Base64{ + + /** + * The Base64 character set as defined by RFC3548 + * + * @see https://datatracker.ietf.org/doc/html/rfc3548#section-3 + * @see https://datatracker.ietf.org/doc/html/rfc4648#section-4 + * + * @var string + */ + public const CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + + /** + * Encode a string to Base64 + */ + public static function encode(#[SensitiveParameter] string $str):string{ + + if(function_exists('sodium_bin2base64')){ + return \sodium_bin2base64($str, \SODIUM_BASE64_VARIANT_ORIGINAL); + } + + return ConstantTimeBase64::encode($str); + } + + /** + * Decode a string from Base64 + */ + public static function decode(#[SensitiveParameter] string $base64):string{ + self::checkCharacterSet($base64); + + if(function_exists('sodium_base642bin')){ + return \sodium_base642bin($base64, \SODIUM_BASE64_VARIANT_ORIGINAL); + } + + return ConstantTimeBase64::decode($base64); + } + + /** + * @throws \InvalidArgumentException + */ + public static function checkCharacterSet(#[SensitiveParameter] string $base64):void{ + + if(!preg_match('#^[a-z\d/=+]+$#i', $base64)){ + throw new InvalidArgumentException('Base64 must match RFC4648 character set'); + } + + } + +} diff --git a/vendor/chillerlan/php-authenticator/src/Common/Hex.php b/vendor/chillerlan/php-authenticator/src/Common/Hex.php new file mode 100644 index 000000000..b051b8df2 --- /dev/null +++ b/vendor/chillerlan/php-authenticator/src/Common/Hex.php @@ -0,0 +1,71 @@ + + * @copyright 2023 smiley + * @license MIT + */ +declare(strict_types=1); + +namespace chillerlan\Authenticator\Common; + +use InvalidArgumentException; +use ParagonIE\ConstantTime\Hex as ConstantTimeHex; +use SensitiveParameter; +use function preg_match; + +/** + * + */ +class Hex{ + + /** + * The allowed hex character set (either upper or lower case) + * + * @var string + */ + public const CHARSET = '1234567890ABCDEFabcdef'; + + /** + * Encode a string to hexadecimal + * + * @codeCoverageIgnore + */ + public static function encode(#[SensitiveParameter] string $str):string{ + + if(function_exists('sodium_bin2hex')){ + return \sodium_bin2hex($str); + } + + return ConstantTimeHex::encode($str); + } + + /** + * Decode a string from hexadecimal + * + * @codeCoverageIgnore + */ + public static function decode(#[SensitiveParameter] string $hex):string{ + self::checkCharacterSet($hex); + + if(function_exists('sodium_hex2bin')){ + return \sodium_hex2bin($hex); + } + + return ConstantTimeHex::decode($hex); + } + + /** + * @throws \InvalidArgumentException + */ + public static function checkCharacterSet(#[SensitiveParameter] string $hex):void{ + + if(!preg_match('#^[a-f\d]+$#i', $hex)){ + throw new InvalidArgumentException('hex string must match hexadecimal character set: 0-9, A-F, a-f'); + } + + } + +} diff --git a/vendor/chillerlan/php-settings-container/LICENSE b/vendor/chillerlan/php-settings-container/LICENSE new file mode 100644 index 000000000..25d371fc3 --- /dev/null +++ b/vendor/chillerlan/php-settings-container/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Smiley + +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. diff --git a/vendor/chillerlan/php-settings-container/README.md b/vendor/chillerlan/php-settings-container/README.md new file mode 100644 index 000000000..3fb122d14 --- /dev/null +++ b/vendor/chillerlan/php-settings-container/README.md @@ -0,0 +1,167 @@ +# chillerlan/php-settings-container + +A container class for settings objects - decouple configuration logic from your application! Not a DI container. +- [`SettingsContainerInterface`](https://github.com/chillerlan/php-settings-container/blob/main/src/SettingsContainerInterface.php) provides immutable properties with magic getter & setter and some fancy. + +[![PHP Version Support][php-badge]][php] +[![version][packagist-badge]][packagist] +[![license][license-badge]][license] +[![Continuous Integration][gh-action-badge]][gh-action] +[![Coverage][coverage-badge]][coverage] +[![Codacy][codacy-badge]][codacy] +[![Packagist downloads][downloads-badge]][downloads] + +[php-badge]: https://img.shields.io/packagist/php-v/chillerlan/php-settings-container?logo=php&color=8892BF +[php]: https://www.php.net/supported-versions.php +[packagist-badge]: https://img.shields.io/packagist/v/chillerlan/php-settings-container.svg?logo=packagist +[packagist]: https://packagist.org/packages/chillerlan/php-settings-container +[license-badge]: https://img.shields.io/github/license/chillerlan/php-settings-container.svg +[license]: https://github.com/chillerlan/php-settings-container/blob/main/LICENSE +[coverage-badge]: https://img.shields.io/codecov/c/github/chillerlan/php-settings-container.svg?logo=codecov +[coverage]: https://codecov.io/github/chillerlan/php-settings-container +[codacy-badge]: https://img.shields.io/codacy/grade/bd2467799e2943d2853ce3ebad5af490/main?logo=codacy +[codacy]: https://www.codacy.com/gh/chillerlan/php-settings-container/dashboard?branch=main +[downloads-badge]: https://img.shields.io/packagist/dt/chillerlan/php-settings-container.svg?logo=packagist +[downloads]: https://packagist.org/packages/chillerlan/php-settings-container/stats +[gh-action-badge]: https://img.shields.io/github/actions/workflow/status/chillerlan/php-settings-container/ci.yml?branch=main&logo=github +[gh-action]: https://github.com/chillerlan/php-settings-container/actions/workflows/ci.yml?query=branch%3Amain + +## Documentation + +### Installation +**requires [composer](https://getcomposer.org)** + +*composer.json* (note: replace `dev-main` with a [version constraint](https://getcomposer.org/doc/articles/versions.md#writing-version-constraints), e.g. `^3.0` - see [releases](https://github.com/chillerlan/php-settings-container/releases) for valid versions) +```json +{ + "require": { + "php": "^8.1", + "chillerlan/php-settings-container": "dev-main" + } +} +``` + +Profit! + +## Usage + +The `SettingsContainerInterface` (wrapped in`SettingsContainerAbstract`) provides plug-in functionality for immutable object properties and adds some fancy, like loading/saving JSON, arrays etc. +It takes an `iterable` as the only constructor argument and calls a method with the trait's name on invocation (`MyTrait::MyTrait()`) for each used trait. + +A PHPStan ruleset to exclude errors generated by accessing magic properties on `SettingsContainerInterface` can be found in `rules-magic-access.neon`. + + +### Simple usage +```php +class MyContainer extends SettingsContainerAbstract{ + protected string $foo; + protected string $bar; +} +``` + +```php +// use it just like a \stdClass (except the properties are fixed) +$container = new MyContainer; +$container->foo = 'what'; +$container->bar = 'foo'; + +// which is equivalent to +$container = new MyContainer(['bar' => 'foo', 'foo' => 'what']); +// ...or try +$container->fromJSON('{"foo": "what", "bar": "foo"}'); + + +// fetch all properties as array +$container->toArray(); // -> ['foo' => 'what', 'bar' => 'foo'] +// or JSON +$container->toJSON(); // -> {"foo": "what", "bar": "foo"} +// JSON via JsonSerializable +$json = json_encode($container); // -> {"foo": "what", "bar": "foo"} + +//non-existing properties will be ignored: +$container->nope = 'what'; + +var_dump($container->nope); // -> null +``` + +### Advanced usage +```php +// from library 1 +trait SomeOptions{ + protected string $foo; + protected string $what; + + // this method will be called in SettingsContainerAbstract::construct() + // after the properties have been set + protected function SomeOptions():void{ + // just some constructor stuff... + $this->foo = strtoupper($this->foo); + } + + /* + * special prefixed magic setters & getters + */ + + // this method will be called from __set() when property $what is set + protected function set_what(string $value):void{ + $this->what = md5($value); + } + + // this method is called on __get() for the property $what + protected function get_what():string{ + return 'hash: '.$this->what; + } +} + +// from library 2 +trait MoreOptions{ + protected string $bar = 'whatever'; // provide default values +} +``` + +```php +$commonOptions = [ + // SomeOptions + 'foo' => 'whatever', + // MoreOptions + 'bar' => 'nothing', +]; + +// now plug the several library options together to a single object +$container = new class ($commonOptions) extends SettingsContainerAbstract{ + use SomeOptions, MoreOptions; +}; + +var_dump($container->foo); // -> WHATEVER (constructor ran strtoupper on the value) +var_dump($container->bar); // -> nothing + +$container->what = 'some value'; +var_dump($container->what); // -> hash: 5946210c9e93ae37891dfe96c3e39614 (custom getter added "hash: ") +``` + +### API + +#### [`SettingsContainerAbstract`](https://github.com/chillerlan/php-settings-container/blob/main/src/SettingsContainerAbstract.php) + +| method | return | info | +|--------------------------------------------|------------------------------|---------------------------------------------------------------------------------------------------------------------| +| `__construct(iterable $properties = null)` | - | calls `construct()` internally after the properties have been set | +| (protected) `construct()` | void | calls a method with trait name as replacement constructor for each used trait | +| `__get(string $property)` | mixed | calls `$this->{'get_'.$property}()` if such a method exists | +| `__set(string $property, $value)` | void | calls `$this->{'set_'.$property}($value)` if such a method exists | +| `__isset(string $property)` | bool | | +| `__unset(string $property)` | void | | +| `__toString()` | string | a JSON string | +| `toArray()` | array | | +| `fromIterable(iterable $properties)` | `SettingsContainerInterface` | | +| `toJSON(int $jsonOptions = null)` | string | accepts [JSON options constants](http://php.net/manual/json.constants.php) | +| `fromJSON(string $json)` | `SettingsContainerInterface` | | +| `jsonSerialize()` | mixed | implements the [`JsonSerializable`](https://www.php.net/manual/en/jsonserializable.jsonserialize.php) interface | +| `serialize()` | string | implements the [`Serializable`](https://www.php.net/manual/en/serializable.serialize.php) interface | +| `unserialize(string $data)` | void | implements the [`Serializable`](https://www.php.net/manual/en/serializable.unserialize.php) interface | +| `__serialize()` | array | implements the [`Serializable`](https://www.php.net/manual/en/language.oop5.magic.php#object.serialize) interface | +| `__unserialize(array $data)` | void | implements the [`Serializable`](https://www.php.net/manual/en/language.oop5.magic.php#object.unserialize) interface | + +## Disclaimer +This might be either an utterly genius or completely stupid idea - you decide. However, i like it and it works. +Also, this is not a dependency injection container. Stop using DI containers FFS. diff --git a/vendor/chillerlan/php-settings-container/composer.json b/vendor/chillerlan/php-settings-container/composer.json new file mode 100644 index 000000000..16b8e5ecb --- /dev/null +++ b/vendor/chillerlan/php-settings-container/composer.json @@ -0,0 +1,52 @@ +{ + "name": "chillerlan/php-settings-container", + "description": "A container class for immutable settings objects. Not a DI container.", + "homepage": "https://github.com/chillerlan/php-settings-container", + "license": "MIT", + "type": "library", + "minimum-stability": "stable", + "keywords": [ + "helper", "container", "settings", "configuration" + ], + "authors": [ + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" + } + ], + "support": { + "issues": "https://github.com/chillerlan/php-settings-container/issues", + "source": "https://github.com/chillerlan/php-settings-container" + }, + "require": { + "php": "^8.1", + "ext-json": "*" + }, + "require-dev": { + "phpmd/phpmd": "^2.15", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-deprecation-rules": "^1.2", + "phpunit/phpunit": "^10.5", + "squizlabs/php_codesniffer": "^3.10" + }, + "autoload": { + "psr-4": { + "chillerlan\\Settings\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "chillerlan\\SettingsTest\\": "tests" + } + }, + "scripts": { + "phpunit": "@php vendor/bin/phpunit", + "phpstan": "@php vendor/bin/phpstan" + }, + "config": { + "lock": false, + "sort-packages": true, + "platform-check": true + } +} diff --git a/vendor/chillerlan/php-settings-container/rules-magic-access.neon b/vendor/chillerlan/php-settings-container/rules-magic-access.neon new file mode 100644 index 000000000..5a98d3a81 --- /dev/null +++ b/vendor/chillerlan/php-settings-container/rules-magic-access.neon @@ -0,0 +1,4 @@ +parameters: + ignoreErrors: + # yes, these are magic + - message: "#^Access to an undefined property chillerlan\\\\Settings\\\\SettingsContainerInterface\\:\\:\\$[\\w]+\\.$#" diff --git a/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php b/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php new file mode 100644 index 000000000..826faaf25 --- /dev/null +++ b/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php @@ -0,0 +1,252 @@ + + * @copyright 2018 Smiley + * @license MIT + */ +declare(strict_types=1); + +namespace chillerlan\Settings; + +use InvalidArgumentException, JsonException, ReflectionClass, ReflectionProperty; +use function array_keys, get_object_vars, is_object, json_decode, json_encode, + json_last_error_msg, method_exists, property_exists, serialize, unserialize; +use const JSON_THROW_ON_ERROR; + +abstract class SettingsContainerAbstract implements SettingsContainerInterface{ + + /** + * SettingsContainerAbstract constructor. + * + * @phpstan-param array $properties + */ + public function __construct(iterable|null $properties = null){ + + if(!empty($properties)){ + $this->fromIterable($properties); + } + + $this->construct(); + } + + /** + * calls a method with trait name as replacement constructor for each used trait + * (remember pre-php5 classname constructors? yeah, basically this.) + */ + protected function construct():void{ + $traits = (new ReflectionClass($this))->getTraits(); + + foreach($traits as $trait){ + $method = $trait->getShortName(); + + if(method_exists($this, $method)){ + $this->{$method}(); + } + } + + } + + /** + * @inheritdoc + */ + public function __get(string $property):mixed{ + + if(!property_exists($this, $property) || $this->isPrivate($property)){ + return null; + } + + $method = 'get_'.$property; + + if(method_exists($this, $method)){ + return $this->{$method}(); + } + + return $this->{$property}; + } + + /** + * @inheritdoc + */ + public function __set(string $property, mixed $value):void{ + + if(!property_exists($this, $property) || $this->isPrivate($property)){ + return; + } + + $method = 'set_'.$property; + + if(method_exists($this, $method)){ + $this->{$method}($value); + + return; + } + + $this->{$property} = $value; + } + + /** + * @inheritdoc + */ + public function __isset(string $property):bool{ + return isset($this->{$property}) && !$this->isPrivate($property); + } + + /** + * @internal Checks if a property is private + */ + protected function isPrivate(string $property):bool{ + return (new ReflectionProperty($this, $property))->isPrivate(); + } + + /** + * @inheritdoc + */ + public function __unset(string $property):void{ + + if($this->__isset($property)){ + unset($this->{$property}); + } + + } + + /** + * @inheritdoc + */ + public function __toString():string{ + return $this->toJSON(); + } + + /** + * @inheritdoc + */ + public function toArray():array{ + $properties = []; + + foreach(array_keys(get_object_vars($this)) as $key){ + $properties[$key] = $this->__get($key); + } + + return $properties; + } + + /** + * @inheritdoc + */ + public function fromIterable(iterable $properties):static{ + + foreach($properties as $key => $value){ + $this->__set($key, $value); + } + + return $this; + } + + /** + * @inheritdoc + */ + public function toJSON(int|null $jsonOptions = null):string{ + $json = json_encode($this, ($jsonOptions ?? 0)); + + if($json === false){ + throw new JsonException(json_last_error_msg()); + } + + return $json; + } + + /** + * @inheritdoc + */ + public function fromJSON(string $json):static{ + /** @phpstan-var array $data */ + $data = json_decode($json, true, 512, JSON_THROW_ON_ERROR); + + return $this->fromIterable($data); + } + + /** + * @inheritdoc + * @return array + */ + public function jsonSerialize():array{ + return $this->toArray(); + } + + /** + * Returns a serialized string representation of the object in its current state (except static/readonly properties) + * + * @inheritdoc + * @see \chillerlan\Settings\SettingsContainerInterface::toArray() + */ + public function serialize():string{ + return serialize($this); + } + + /** + * Restores the data (except static/readonly properties) from the given serialized object to the current instance + * + * @inheritdoc + * @see \chillerlan\Settings\SettingsContainerInterface::fromIterable() + */ + public function unserialize(string $data):void{ + $obj = unserialize($data); + + if($obj === false || !is_object($obj)){ + throw new InvalidArgumentException('The given serialized string is invalid'); + } + + $reflection = new ReflectionClass($obj); + + if(!$reflection->isInstance($this)){ + throw new InvalidArgumentException('The unserialized object does not match the class of this container'); + } + + $properties = $reflection->getProperties(~(ReflectionProperty::IS_STATIC | ReflectionProperty::IS_READONLY)); + + foreach($properties as $reflectionProperty){ + $this->{$reflectionProperty->name} = $reflectionProperty->getValue($obj); + } + + } + + /** + * Returns a serialized string representation of the object in its current state (except static/readonly properties) + * + * @inheritdoc + * @see \chillerlan\Settings\SettingsContainerInterface::toArray() + */ + public function __serialize():array{ + + $properties = (new ReflectionClass($this)) + ->getProperties(~(ReflectionProperty::IS_STATIC | ReflectionProperty::IS_READONLY)) + ; + + $data = []; + + foreach($properties as $reflectionProperty){ + $data[$reflectionProperty->name] = $reflectionProperty->getValue($this); + } + + return $data; + } + + /** + * Restores the data from the given array to the current instance + * + * @inheritdoc + * @see \chillerlan\Settings\SettingsContainerInterface::fromIterable() + * + * @param array $data + */ + public function __unserialize(array $data):void{ + + foreach($data as $key => $value){ + $this->{$key} = $value; + } + + } + +} diff --git a/vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php b/vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php new file mode 100644 index 000000000..6f3cc1a4d --- /dev/null +++ b/vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php @@ -0,0 +1,86 @@ + + * @copyright 2018 Smiley + * @license MIT + */ +declare(strict_types=1); + +namespace chillerlan\Settings; + +use JsonSerializable, Serializable; + +/** + * a generic container with magic getter and setter + */ +interface SettingsContainerInterface extends JsonSerializable, Serializable{ + + /** + * Retrieve the value of $property + * + * @return mixed|null + */ + public function __get(string $property):mixed; + + /** + * Set $property to $value while avoiding private and non-existing properties + */ + public function __set(string $property, mixed $value):void; + + /** + * Checks if $property is set (aka. not null), excluding private properties + */ + public function __isset(string $property):bool; + + /** + * Unsets $property while avoiding private and non-existing properties + */ + public function __unset(string $property):void; + + /** + * @see \chillerlan\Settings\SettingsContainerInterface::toJSON() + */ + public function __toString():string; + + /** + * Returns an array representation of the settings object + * + * The values will be run through the magic __get(), which may also call custom getters. + * + * @return array + */ + public function toArray():array; + + /** + * Sets properties from a given iterable + * + * The values will be run through the magic __set(), which may also call custom setters. + * + * @phpstan-param array $properties + */ + public function fromIterable(iterable $properties):static; + + /** + * Returns a JSON representation of the settings object + * + * @see \json_encode() + * @see \chillerlan\Settings\SettingsContainerInterface::toArray() + * + * @throws \JsonException + */ + public function toJSON(int|null $jsonOptions = null):string; + + /** + * Sets properties from a given JSON string + * + * @see \chillerlan\Settings\SettingsContainerInterface::fromIterable() + * + * @throws \Exception + * @throws \JsonException + */ + public function fromJSON(string $json):static; + +} diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php new file mode 100644 index 000000000..a72151c77 --- /dev/null +++ b/vendor/composer/ClassLoader.php @@ -0,0 +1,585 @@ + + * Jordi Boggiano + * + * 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 + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var \Closure(string):void */ + private static $includeFile; + + /** @var ?string */ + private $vendorDir; + + // PSR-4 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array[] + * @psalm-var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixesPsr0 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var string[] + * @psalm-var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var bool[] + * @psalm-var array + */ + private $missingClasses = array(); + + /** @var ?string */ + private $apcuPrefix; + + /** + * @var self[] + */ + private static $registeredLoaders = array(); + + /** + * @param ?string $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + self::initializeIncludeClosure(); + } + + /** + * @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> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return string[] Array of classname => path + * @psalm-return array + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param string[] $classMap Class to filename map + * @psalm-param array $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 = self::$includeFile; + $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; + } + + /** + * @return void + */ + private static function initializeIncludeClosure() + { + if (self::$includeFile !== null) { + return; + } + + /** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + */ + self::$includeFile = \Closure::bind(static function($file) { + include $file; + }, null, null); + } +} diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php new file mode 100644 index 000000000..51e734a77 --- /dev/null +++ b/vendor/composer/InstalledVersions.php @@ -0,0 +1,359 @@ + + * Jordi Boggiano + * + * 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` + * + * @final + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + 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 + */ + 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 + */ + 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 || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; + } + } + + 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((string) $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, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + */ + 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, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} + */ + 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}> + */ + 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, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + 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')) { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require $vendorDir.'/composer/installed.php'; + $installed[] = self::$installedByVendor[$vendorDir] = $required; + 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') { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; + } else { + self::$installed = array(); + } + } + + if (self::$installed !== array()) { + $installed[] = self::$installed; + } + + return $installed; + } +} diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE new file mode 100644 index 000000000..62ecfd8d0 --- /dev/null +++ b/vendor/composer/LICENSE @@ -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. diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php new file mode 100644 index 000000000..0b386b126 --- /dev/null +++ b/vendor/composer/autoload_classmap.php @@ -0,0 +1,123 @@ + $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', + 'ezcBase' => $vendorDir . '/zetacomponents/base/src/base.php', + 'ezcBaseAutoloadException' => $vendorDir . '/zetacomponents/base/src/exceptions/autoload.php', + 'ezcBaseAutoloadOptions' => $vendorDir . '/zetacomponents/base/src/options/autoload.php', + 'ezcBaseConfigurationInitializer' => $vendorDir . '/zetacomponents/base/src/interfaces/configuration_initializer.php', + 'ezcBaseDoubleClassRepositoryPrefixException' => $vendorDir . '/zetacomponents/base/src/exceptions/double_class_repository_prefix.php', + 'ezcBaseException' => $vendorDir . '/zetacomponents/base/src/exceptions/exception.php', + 'ezcBaseExportable' => $vendorDir . '/zetacomponents/base/src/interfaces/exportable.php', + 'ezcBaseExtensionNotFoundException' => $vendorDir . '/zetacomponents/base/src/exceptions/extension_not_found.php', + 'ezcBaseFeatures' => $vendorDir . '/zetacomponents/base/src/features.php', + 'ezcBaseFile' => $vendorDir . '/zetacomponents/base/src/file.php', + 'ezcBaseFileException' => $vendorDir . '/zetacomponents/base/src/exceptions/file_exception.php', + 'ezcBaseFileFindContext' => $vendorDir . '/zetacomponents/base/src/structs/file_find_context.php', + 'ezcBaseFileIoException' => $vendorDir . '/zetacomponents/base/src/exceptions/file_io.php', + 'ezcBaseFileNotFoundException' => $vendorDir . '/zetacomponents/base/src/exceptions/file_not_found.php', + 'ezcBaseFilePermissionException' => $vendorDir . '/zetacomponents/base/src/exceptions/file_permission.php', + 'ezcBaseFunctionalityNotSupportedException' => $vendorDir . '/zetacomponents/base/src/exceptions/functionality_not_supported.php', + 'ezcBaseInit' => $vendorDir . '/zetacomponents/base/src/init.php', + 'ezcBaseInitCallbackConfiguredException' => $vendorDir . '/zetacomponents/base/src/exceptions/init_callback_configured.php', + 'ezcBaseInitInvalidCallbackClassException' => $vendorDir . '/zetacomponents/base/src/exceptions/invalid_callback_class.php', + 'ezcBaseInvalidParentClassException' => $vendorDir . '/zetacomponents/base/src/exceptions/invalid_parent_class.php', + 'ezcBaseMetaData' => $vendorDir . '/zetacomponents/base/src/metadata.php', + 'ezcBaseMetaDataPearReader' => $vendorDir . '/zetacomponents/base/src/metadata/pear.php', + 'ezcBaseMetaDataTarballReader' => $vendorDir . '/zetacomponents/base/src/metadata/tarball.php', + 'ezcBaseOptions' => $vendorDir . '/zetacomponents/base/src/options.php', + 'ezcBasePersistable' => $vendorDir . '/zetacomponents/base/src/interfaces/persistable.php', + 'ezcBasePropertyNotFoundException' => $vendorDir . '/zetacomponents/base/src/exceptions/property_not_found.php', + 'ezcBasePropertyPermissionException' => $vendorDir . '/zetacomponents/base/src/exceptions/property_permission.php', + 'ezcBaseRepositoryDirectory' => $vendorDir . '/zetacomponents/base/src/structs/repository_directory.php', + 'ezcBaseSettingNotFoundException' => $vendorDir . '/zetacomponents/base/src/exceptions/setting_not_found.php', + 'ezcBaseSettingValueException' => $vendorDir . '/zetacomponents/base/src/exceptions/setting_value.php', + 'ezcBaseStruct' => $vendorDir . '/zetacomponents/base/src/struct.php', + 'ezcBaseValueException' => $vendorDir . '/zetacomponents/base/src/exceptions/value.php', + 'ezcBaseWhateverException' => $vendorDir . '/zetacomponents/base/src/exceptions/whatever.php', + 'ezcMail' => $vendorDir . '/zetacomponents/mail/src/mail.php', + 'ezcMailAddress' => $vendorDir . '/zetacomponents/mail/src/structs/mail_address.php', + 'ezcMailCharsetConverter' => $vendorDir . '/zetacomponents/mail/src/internal/charset_convert.php', + 'ezcMailComposer' => $vendorDir . '/zetacomponents/mail/src/composer.php', + 'ezcMailComposerOptions' => $vendorDir . '/zetacomponents/mail/src/options/composer_options.php', + 'ezcMailContentDispositionHeader' => $vendorDir . '/zetacomponents/mail/src/structs/content_disposition_header.php', + 'ezcMailDeliveryStatus' => $vendorDir . '/zetacomponents/mail/src/parts/delivery_status.php', + 'ezcMailDeliveryStatusParser' => $vendorDir . '/zetacomponents/mail/src/parser/parts/delivery_status_parser.php', + 'ezcMailException' => $vendorDir . '/zetacomponents/mail/src/exceptions/mail_exception.php', + 'ezcMailFile' => $vendorDir . '/zetacomponents/mail/src/parts/fileparts/disk_file.php', + 'ezcMailFileParser' => $vendorDir . '/zetacomponents/mail/src/parser/parts/file_parser.php', + 'ezcMailFilePart' => $vendorDir . '/zetacomponents/mail/src/parts/file.php', + 'ezcMailFileSet' => $vendorDir . '/zetacomponents/mail/src/transports/file/file_set.php', + 'ezcMailHeaderFolder' => $vendorDir . '/zetacomponents/mail/src/internal/header_folder.php', + 'ezcMailHeadersHolder' => $vendorDir . '/zetacomponents/mail/src/parser/headers_holder.php', + 'ezcMailImapSet' => $vendorDir . '/zetacomponents/mail/src/transports/imap/imap_set.php', + 'ezcMailImapSetOptions' => $vendorDir . '/zetacomponents/mail/src/options/imap_set_options.php', + 'ezcMailImapTransport' => $vendorDir . '/zetacomponents/mail/src/transports/imap/imap_transport.php', + 'ezcMailImapTransportOptions' => $vendorDir . '/zetacomponents/mail/src/options/imap_options.php', + 'ezcMailInvalidLimitException' => $vendorDir . '/zetacomponents/mail/src/exceptions/invalid_limit.php', + 'ezcMailMboxSet' => $vendorDir . '/zetacomponents/mail/src/transports/mbox/mbox_set.php', + 'ezcMailMboxTransport' => $vendorDir . '/zetacomponents/mail/src/transports/mbox/mbox_transport.php', + 'ezcMailMtaTransport' => $vendorDir . '/zetacomponents/mail/src/transports/mta/mta_transport.php', + 'ezcMailMultipart' => $vendorDir . '/zetacomponents/mail/src/parts/multipart.php', + 'ezcMailMultipartAlternative' => $vendorDir . '/zetacomponents/mail/src/parts/multiparts/multipart_alternative.php', + 'ezcMailMultipartAlternativeParser' => $vendorDir . '/zetacomponents/mail/src/parser/parts/multipart_alternative_parser.php', + 'ezcMailMultipartDigest' => $vendorDir . '/zetacomponents/mail/src/parts/multiparts/multipart_digest.php', + 'ezcMailMultipartDigestParser' => $vendorDir . '/zetacomponents/mail/src/parser/parts/multipart_digest_parser.php', + 'ezcMailMultipartMixed' => $vendorDir . '/zetacomponents/mail/src/parts/multiparts/multipart_mixed.php', + 'ezcMailMultipartMixedParser' => $vendorDir . '/zetacomponents/mail/src/parser/parts/multipart_mixed_parser.php', + 'ezcMailMultipartParser' => $vendorDir . '/zetacomponents/mail/src/parser/parts/multipart_parser.php', + 'ezcMailMultipartRelated' => $vendorDir . '/zetacomponents/mail/src/parts/multiparts/multipart_related.php', + 'ezcMailMultipartRelatedParser' => $vendorDir . '/zetacomponents/mail/src/parser/parts/multipart_related_parser.php', + 'ezcMailMultipartReport' => $vendorDir . '/zetacomponents/mail/src/parts/multiparts/multipart_report.php', + 'ezcMailMultipartReportParser' => $vendorDir . '/zetacomponents/mail/src/parser/parts/multipart_report_parser.php', + 'ezcMailNoSuchMessageException' => $vendorDir . '/zetacomponents/mail/src/exceptions/no_such_message.php', + 'ezcMailOffsetOutOfRangeException' => $vendorDir . '/zetacomponents/mail/src/exceptions/offset_out_of_range.php', + 'ezcMailOptions' => $vendorDir . '/zetacomponents/mail/src/options/mail_options.php', + 'ezcMailParser' => $vendorDir . '/zetacomponents/mail/src/parser/parser.php', + 'ezcMailParserOptions' => $vendorDir . '/zetacomponents/mail/src/options/parser_options.php', + 'ezcMailParserSet' => $vendorDir . '/zetacomponents/mail/src/parser/interfaces/parser_set.php', + 'ezcMailParserShutdownHandler' => $vendorDir . '/zetacomponents/mail/src/parser/shutdown_handler.php', + 'ezcMailPart' => $vendorDir . '/zetacomponents/mail/src/interfaces/part.php', + 'ezcMailPartParser' => $vendorDir . '/zetacomponents/mail/src/parser/interfaces/part_parser.php', + 'ezcMailPartWalkContext' => $vendorDir . '/zetacomponents/mail/src/structs/walk_context.php', + 'ezcMailPop3Set' => $vendorDir . '/zetacomponents/mail/src/transports/pop3/pop3_set.php', + 'ezcMailPop3Transport' => $vendorDir . '/zetacomponents/mail/src/transports/pop3/pop3_transport.php', + 'ezcMailPop3TransportOptions' => $vendorDir . '/zetacomponents/mail/src/options/pop3_options.php', + 'ezcMailRfc2231Implementation' => $vendorDir . '/zetacomponents/mail/src/parser/rfc2231_implementation.php', + 'ezcMailRfc822Digest' => $vendorDir . '/zetacomponents/mail/src/parts/rfc822_digest.php', + 'ezcMailRfc822DigestParser' => $vendorDir . '/zetacomponents/mail/src/parser/parts/rfc822_digest_parser.php', + 'ezcMailRfc822Parser' => $vendorDir . '/zetacomponents/mail/src/parser/parts/rfc822_parser.php', + 'ezcMailSmtpTransport' => $vendorDir . '/zetacomponents/mail/src/transports/smtp/smtp_transport.php', + 'ezcMailSmtpTransportOptions' => $vendorDir . '/zetacomponents/mail/src/options/smtp_options.php', + 'ezcMailStorageSet' => $vendorDir . '/zetacomponents/mail/src/transports/storage/storage_set.php', + 'ezcMailStreamFile' => $vendorDir . '/zetacomponents/mail/src/parts/fileparts/stream_file.php', + 'ezcMailText' => $vendorDir . '/zetacomponents/mail/src/parts/text.php', + 'ezcMailTextParser' => $vendorDir . '/zetacomponents/mail/src/parser/parts/text_parser.php', + 'ezcMailTools' => $vendorDir . '/zetacomponents/mail/src/tools.php', + 'ezcMailTransport' => $vendorDir . '/zetacomponents/mail/src/interfaces/transport.php', + 'ezcMailTransportConnection' => $vendorDir . '/zetacomponents/mail/src/transports/transport_connection.php', + 'ezcMailTransportException' => $vendorDir . '/zetacomponents/mail/src/exceptions/transport_exception.php', + 'ezcMailTransportMta' => $vendorDir . '/zetacomponents/mail/src/transports/mta/transport_mta.php', + 'ezcMailTransportOptions' => $vendorDir . '/zetacomponents/mail/src/options/transport_options.php', + 'ezcMailTransportSmtp' => $vendorDir . '/zetacomponents/mail/src/transports/smtp/transport_smtp.php', + 'ezcMailTransportSmtpException' => $vendorDir . '/zetacomponents/mail/src/exceptions/transport_smtp_exception.php', + 'ezcMailVariableSet' => $vendorDir . '/zetacomponents/mail/src/transports/variable/var_set.php', + 'ezcMailVirtualFile' => $vendorDir . '/zetacomponents/mail/src/parts/fileparts/virtual_file.php', +); diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php new file mode 100644 index 000000000..3d1a40890 --- /dev/null +++ b/vendor/composer/autoload_files.php @@ -0,0 +1,16 @@ + $vendorDir . '/symfony/deprecation-contracts/function.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', + '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', + '383eaff206634a77a1be54e64e6459c7' => $vendorDir . '/sabre/uri/lib/functions.php', + '662a729f963d39afe703c9d9b7ab4a8c' => $vendorDir . '/symfony/polyfill-php83/bootstrap.php', + '3569eecfeed3bcf0bad3c998a494ecb8' => $vendorDir . '/sabre/xml/lib/Deserializer/functions.php', + '93aa591bc4ca510c520999e34229ee79' => $vendorDir . '/sabre/xml/lib/Serializer/functions.php', +); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php new file mode 100644 index 000000000..27020d2c9 --- /dev/null +++ b/vendor/composer/autoload_namespaces.php @@ -0,0 +1,10 @@ + array($vendorDir . '/smalot/pdfparser/src'), +); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php new file mode 100644 index 000000000..dd4792858 --- /dev/null +++ b/vendor/composer/autoload_psr4.php @@ -0,0 +1,38 @@ + array($vendorDir . '/setasign/fpdi/src'), + 'horstoeko\\zugferd\\' => array($vendorDir . '/horstoeko/zugferd/src'), + 'horstoeko\\stringmanagement\\' => array($vendorDir . '/horstoeko/stringmanagement/src'), + 'horstoeko\\mimedb\\' => array($vendorDir . '/horstoeko/mimedb/src'), + 'chillerlan\\Settings\\' => array($vendorDir . '/chillerlan/php-settings-container/src'), + 'chillerlan\\Authenticator\\' => array($vendorDir . '/chillerlan/php-authenticator/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'), + 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), + 'Sabre\\Xml\\' => array($vendorDir . '/sabre/xml/lib'), + 'Sabre\\Uri\\' => array($vendorDir . '/sabre/uri/lib'), + 'ParagonIE\\ConstantTime\\' => array($vendorDir . '/paragonie/constant_time_encoding/src'), + 'PHPStan\\PhpDocParser\\' => array($vendorDir . '/phpstan/phpdoc-parser/src'), + 'NumNum\\UBL\\Tests\\' => array($vendorDir . '/num-num/ubl-invoice/tests'), + 'NumNum\\UBL\\' => array($vendorDir . '/num-num/ubl-invoice/src'), + 'Metadata\\' => array($vendorDir . '/jms/metadata/src'), + 'JMS\\Serializer\\' => array($vendorDir . '/jms/serializer/src'), + 'GoetasWebservices\\Xsd\\XsdToPhpRuntime\\' => array($vendorDir . '/goetas-webservices/xsd2php-runtime/src'), + 'Endroid\\QrCode\\' => array($vendorDir . '/endroid/qr-code/src'), + 'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'), + 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/src'), + 'DASPRiD\\Enum\\' => array($vendorDir . '/dasprid/enum/src'), + 'Curl\\' => array($vendorDir . '/php-curl-class/php-curl-class/src/Curl'), + 'BaconQrCode\\' => array($vendorDir . '/bacon/bacon-qr-code/src'), +); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php new file mode 100644 index 000000000..5f4b79ff5 --- /dev/null +++ b/vendor/composer/autoload_real.php @@ -0,0 +1,50 @@ +register(true); + + $filesToLoad = \Composer\Autoload\ComposerStaticInit1a0e4ea3fb1d108a445b9e95a7c251ad::$files; + $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; + } + }, null, null); + foreach ($filesToLoad as $fileIdentifier => $file) { + $requireFile($fileIdentifier, $file); + } + + return $loader; + } +} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php new file mode 100644 index 000000000..6d5170bf7 --- /dev/null +++ b/vendor/composer/autoload_static.php @@ -0,0 +1,346 @@ + __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', + '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', + '383eaff206634a77a1be54e64e6459c7' => __DIR__ . '/..' . '/sabre/uri/lib/functions.php', + '662a729f963d39afe703c9d9b7ab4a8c' => __DIR__ . '/..' . '/symfony/polyfill-php83/bootstrap.php', + '3569eecfeed3bcf0bad3c998a494ecb8' => __DIR__ . '/..' . '/sabre/xml/lib/Deserializer/functions.php', + '93aa591bc4ca510c520999e34229ee79' => __DIR__ . '/..' . '/sabre/xml/lib/Serializer/functions.php', + ); + + public static $prefixLengthsPsr4 = array ( + 's' => + array ( + 'setasign\\Fpdi\\' => 14, + ), + 'h' => + array ( + 'horstoeko\\zugferd\\' => 18, + 'horstoeko\\stringmanagement\\' => 27, + 'horstoeko\\mimedb\\' => 17, + ), + 'c' => + array ( + 'chillerlan\\Settings\\' => 20, + 'chillerlan\\Authenticator\\' => 25, + ), + '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, + 'Symfony\\Component\\Finder\\' => 25, + 'Sabre\\Xml\\' => 10, + 'Sabre\\Uri\\' => 10, + ), + 'P' => + array ( + 'ParagonIE\\ConstantTime\\' => 23, + 'PHPStan\\PhpDocParser\\' => 21, + ), + 'N' => + array ( + 'NumNum\\UBL\\Tests\\' => 17, + 'NumNum\\UBL\\' => 11, + ), + 'M' => + array ( + 'Metadata\\' => 9, + ), + 'J' => + array ( + 'JMS\\Serializer\\' => 15, + ), + 'G' => + array ( + 'GoetasWebservices\\Xsd\\XsdToPhpRuntime\\' => 38, + ), + 'E' => + array ( + 'Endroid\\QrCode\\' => 15, + ), + 'D' => + array ( + 'Doctrine\\Instantiator\\' => 22, + 'Doctrine\\Common\\Lexer\\' => 22, + 'DASPRiD\\Enum\\' => 13, + ), + 'C' => + array ( + 'Curl\\' => 5, + ), + 'B' => + array ( + 'BaconQrCode\\' => 12, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'setasign\\Fpdi\\' => + array ( + 0 => __DIR__ . '/..' . '/setasign/fpdi/src', + ), + 'horstoeko\\zugferd\\' => + array ( + 0 => __DIR__ . '/..' . '/horstoeko/zugferd/src', + ), + 'horstoeko\\stringmanagement\\' => + array ( + 0 => __DIR__ . '/..' . '/horstoeko/stringmanagement/src', + ), + 'horstoeko\\mimedb\\' => + array ( + 0 => __DIR__ . '/..' . '/horstoeko/mimedb/src', + ), + 'chillerlan\\Settings\\' => + array ( + 0 => __DIR__ . '/..' . '/chillerlan/php-settings-container/src', + ), + 'chillerlan\\Authenticator\\' => + array ( + 0 => __DIR__ . '/..' . '/chillerlan/php-authenticator/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', + ), + 'Symfony\\Component\\Finder\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/finder', + ), + 'Sabre\\Xml\\' => + array ( + 0 => __DIR__ . '/..' . '/sabre/xml/lib', + ), + 'Sabre\\Uri\\' => + array ( + 0 => __DIR__ . '/..' . '/sabre/uri/lib', + ), + 'ParagonIE\\ConstantTime\\' => + array ( + 0 => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src', + ), + 'PHPStan\\PhpDocParser\\' => + array ( + 0 => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src', + ), + 'NumNum\\UBL\\Tests\\' => + array ( + 0 => __DIR__ . '/..' . '/num-num/ubl-invoice/tests', + ), + 'NumNum\\UBL\\' => + array ( + 0 => __DIR__ . '/..' . '/num-num/ubl-invoice/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', + ), + 'Endroid\\QrCode\\' => + array ( + 0 => __DIR__ . '/..' . '/endroid/qr-code/src', + ), + 'Doctrine\\Instantiator\\' => + array ( + 0 => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator', + ), + 'Doctrine\\Common\\Lexer\\' => + array ( + 0 => __DIR__ . '/..' . '/doctrine/lexer/src', + ), + 'DASPRiD\\Enum\\' => + array ( + 0 => __DIR__ . '/..' . '/dasprid/enum/src', + ), + 'Curl\\' => + array ( + 0 => __DIR__ . '/..' . '/php-curl-class/php-curl-class/src/Curl', + ), + 'BaconQrCode\\' => + array ( + 0 => __DIR__ . '/..' . '/bacon/bacon-qr-code/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', + 'ezcBase' => __DIR__ . '/..' . '/zetacomponents/base/src/base.php', + 'ezcBaseAutoloadException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/autoload.php', + 'ezcBaseAutoloadOptions' => __DIR__ . '/..' . '/zetacomponents/base/src/options/autoload.php', + 'ezcBaseConfigurationInitializer' => __DIR__ . '/..' . '/zetacomponents/base/src/interfaces/configuration_initializer.php', + 'ezcBaseDoubleClassRepositoryPrefixException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/double_class_repository_prefix.php', + 'ezcBaseException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/exception.php', + 'ezcBaseExportable' => __DIR__ . '/..' . '/zetacomponents/base/src/interfaces/exportable.php', + 'ezcBaseExtensionNotFoundException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/extension_not_found.php', + 'ezcBaseFeatures' => __DIR__ . '/..' . '/zetacomponents/base/src/features.php', + 'ezcBaseFile' => __DIR__ . '/..' . '/zetacomponents/base/src/file.php', + 'ezcBaseFileException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/file_exception.php', + 'ezcBaseFileFindContext' => __DIR__ . '/..' . '/zetacomponents/base/src/structs/file_find_context.php', + 'ezcBaseFileIoException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/file_io.php', + 'ezcBaseFileNotFoundException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/file_not_found.php', + 'ezcBaseFilePermissionException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/file_permission.php', + 'ezcBaseFunctionalityNotSupportedException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/functionality_not_supported.php', + 'ezcBaseInit' => __DIR__ . '/..' . '/zetacomponents/base/src/init.php', + 'ezcBaseInitCallbackConfiguredException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/init_callback_configured.php', + 'ezcBaseInitInvalidCallbackClassException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/invalid_callback_class.php', + 'ezcBaseInvalidParentClassException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/invalid_parent_class.php', + 'ezcBaseMetaData' => __DIR__ . '/..' . '/zetacomponents/base/src/metadata.php', + 'ezcBaseMetaDataPearReader' => __DIR__ . '/..' . '/zetacomponents/base/src/metadata/pear.php', + 'ezcBaseMetaDataTarballReader' => __DIR__ . '/..' . '/zetacomponents/base/src/metadata/tarball.php', + 'ezcBaseOptions' => __DIR__ . '/..' . '/zetacomponents/base/src/options.php', + 'ezcBasePersistable' => __DIR__ . '/..' . '/zetacomponents/base/src/interfaces/persistable.php', + 'ezcBasePropertyNotFoundException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/property_not_found.php', + 'ezcBasePropertyPermissionException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/property_permission.php', + 'ezcBaseRepositoryDirectory' => __DIR__ . '/..' . '/zetacomponents/base/src/structs/repository_directory.php', + 'ezcBaseSettingNotFoundException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/setting_not_found.php', + 'ezcBaseSettingValueException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/setting_value.php', + 'ezcBaseStruct' => __DIR__ . '/..' . '/zetacomponents/base/src/struct.php', + 'ezcBaseValueException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/value.php', + 'ezcBaseWhateverException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/whatever.php', + 'ezcMail' => __DIR__ . '/..' . '/zetacomponents/mail/src/mail.php', + 'ezcMailAddress' => __DIR__ . '/..' . '/zetacomponents/mail/src/structs/mail_address.php', + 'ezcMailCharsetConverter' => __DIR__ . '/..' . '/zetacomponents/mail/src/internal/charset_convert.php', + 'ezcMailComposer' => __DIR__ . '/..' . '/zetacomponents/mail/src/composer.php', + 'ezcMailComposerOptions' => __DIR__ . '/..' . '/zetacomponents/mail/src/options/composer_options.php', + 'ezcMailContentDispositionHeader' => __DIR__ . '/..' . '/zetacomponents/mail/src/structs/content_disposition_header.php', + 'ezcMailDeliveryStatus' => __DIR__ . '/..' . '/zetacomponents/mail/src/parts/delivery_status.php', + 'ezcMailDeliveryStatusParser' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/parts/delivery_status_parser.php', + 'ezcMailException' => __DIR__ . '/..' . '/zetacomponents/mail/src/exceptions/mail_exception.php', + 'ezcMailFile' => __DIR__ . '/..' . '/zetacomponents/mail/src/parts/fileparts/disk_file.php', + 'ezcMailFileParser' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/parts/file_parser.php', + 'ezcMailFilePart' => __DIR__ . '/..' . '/zetacomponents/mail/src/parts/file.php', + 'ezcMailFileSet' => __DIR__ . '/..' . '/zetacomponents/mail/src/transports/file/file_set.php', + 'ezcMailHeaderFolder' => __DIR__ . '/..' . '/zetacomponents/mail/src/internal/header_folder.php', + 'ezcMailHeadersHolder' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/headers_holder.php', + 'ezcMailImapSet' => __DIR__ . '/..' . '/zetacomponents/mail/src/transports/imap/imap_set.php', + 'ezcMailImapSetOptions' => __DIR__ . '/..' . '/zetacomponents/mail/src/options/imap_set_options.php', + 'ezcMailImapTransport' => __DIR__ . '/..' . '/zetacomponents/mail/src/transports/imap/imap_transport.php', + 'ezcMailImapTransportOptions' => __DIR__ . '/..' . '/zetacomponents/mail/src/options/imap_options.php', + 'ezcMailInvalidLimitException' => __DIR__ . '/..' . '/zetacomponents/mail/src/exceptions/invalid_limit.php', + 'ezcMailMboxSet' => __DIR__ . '/..' . '/zetacomponents/mail/src/transports/mbox/mbox_set.php', + 'ezcMailMboxTransport' => __DIR__ . '/..' . '/zetacomponents/mail/src/transports/mbox/mbox_transport.php', + 'ezcMailMtaTransport' => __DIR__ . '/..' . '/zetacomponents/mail/src/transports/mta/mta_transport.php', + 'ezcMailMultipart' => __DIR__ . '/..' . '/zetacomponents/mail/src/parts/multipart.php', + 'ezcMailMultipartAlternative' => __DIR__ . '/..' . '/zetacomponents/mail/src/parts/multiparts/multipart_alternative.php', + 'ezcMailMultipartAlternativeParser' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/parts/multipart_alternative_parser.php', + 'ezcMailMultipartDigest' => __DIR__ . '/..' . '/zetacomponents/mail/src/parts/multiparts/multipart_digest.php', + 'ezcMailMultipartDigestParser' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/parts/multipart_digest_parser.php', + 'ezcMailMultipartMixed' => __DIR__ . '/..' . '/zetacomponents/mail/src/parts/multiparts/multipart_mixed.php', + 'ezcMailMultipartMixedParser' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/parts/multipart_mixed_parser.php', + 'ezcMailMultipartParser' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/parts/multipart_parser.php', + 'ezcMailMultipartRelated' => __DIR__ . '/..' . '/zetacomponents/mail/src/parts/multiparts/multipart_related.php', + 'ezcMailMultipartRelatedParser' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/parts/multipart_related_parser.php', + 'ezcMailMultipartReport' => __DIR__ . '/..' . '/zetacomponents/mail/src/parts/multiparts/multipart_report.php', + 'ezcMailMultipartReportParser' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/parts/multipart_report_parser.php', + 'ezcMailNoSuchMessageException' => __DIR__ . '/..' . '/zetacomponents/mail/src/exceptions/no_such_message.php', + 'ezcMailOffsetOutOfRangeException' => __DIR__ . '/..' . '/zetacomponents/mail/src/exceptions/offset_out_of_range.php', + 'ezcMailOptions' => __DIR__ . '/..' . '/zetacomponents/mail/src/options/mail_options.php', + 'ezcMailParser' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/parser.php', + 'ezcMailParserOptions' => __DIR__ . '/..' . '/zetacomponents/mail/src/options/parser_options.php', + 'ezcMailParserSet' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/interfaces/parser_set.php', + 'ezcMailParserShutdownHandler' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/shutdown_handler.php', + 'ezcMailPart' => __DIR__ . '/..' . '/zetacomponents/mail/src/interfaces/part.php', + 'ezcMailPartParser' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/interfaces/part_parser.php', + 'ezcMailPartWalkContext' => __DIR__ . '/..' . '/zetacomponents/mail/src/structs/walk_context.php', + 'ezcMailPop3Set' => __DIR__ . '/..' . '/zetacomponents/mail/src/transports/pop3/pop3_set.php', + 'ezcMailPop3Transport' => __DIR__ . '/..' . '/zetacomponents/mail/src/transports/pop3/pop3_transport.php', + 'ezcMailPop3TransportOptions' => __DIR__ . '/..' . '/zetacomponents/mail/src/options/pop3_options.php', + 'ezcMailRfc2231Implementation' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/rfc2231_implementation.php', + 'ezcMailRfc822Digest' => __DIR__ . '/..' . '/zetacomponents/mail/src/parts/rfc822_digest.php', + 'ezcMailRfc822DigestParser' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/parts/rfc822_digest_parser.php', + 'ezcMailRfc822Parser' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/parts/rfc822_parser.php', + 'ezcMailSmtpTransport' => __DIR__ . '/..' . '/zetacomponents/mail/src/transports/smtp/smtp_transport.php', + 'ezcMailSmtpTransportOptions' => __DIR__ . '/..' . '/zetacomponents/mail/src/options/smtp_options.php', + 'ezcMailStorageSet' => __DIR__ . '/..' . '/zetacomponents/mail/src/transports/storage/storage_set.php', + 'ezcMailStreamFile' => __DIR__ . '/..' . '/zetacomponents/mail/src/parts/fileparts/stream_file.php', + 'ezcMailText' => __DIR__ . '/..' . '/zetacomponents/mail/src/parts/text.php', + 'ezcMailTextParser' => __DIR__ . '/..' . '/zetacomponents/mail/src/parser/parts/text_parser.php', + 'ezcMailTools' => __DIR__ . '/..' . '/zetacomponents/mail/src/tools.php', + 'ezcMailTransport' => __DIR__ . '/..' . '/zetacomponents/mail/src/interfaces/transport.php', + 'ezcMailTransportConnection' => __DIR__ . '/..' . '/zetacomponents/mail/src/transports/transport_connection.php', + 'ezcMailTransportException' => __DIR__ . '/..' . '/zetacomponents/mail/src/exceptions/transport_exception.php', + 'ezcMailTransportMta' => __DIR__ . '/..' . '/zetacomponents/mail/src/transports/mta/transport_mta.php', + 'ezcMailTransportOptions' => __DIR__ . '/..' . '/zetacomponents/mail/src/options/transport_options.php', + 'ezcMailTransportSmtp' => __DIR__ . '/..' . '/zetacomponents/mail/src/transports/smtp/transport_smtp.php', + 'ezcMailTransportSmtpException' => __DIR__ . '/..' . '/zetacomponents/mail/src/exceptions/transport_smtp_exception.php', + 'ezcMailVariableSet' => __DIR__ . '/..' . '/zetacomponents/mail/src/transports/variable/var_set.php', + 'ezcMailVirtualFile' => __DIR__ . '/..' . '/zetacomponents/mail/src/parts/fileparts/virtual_file.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit1a0e4ea3fb1d108a445b9e95a7c251ad::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit1a0e4ea3fb1d108a445b9e95a7c251ad::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInit1a0e4ea3fb1d108a445b9e95a7c251ad::$prefixesPsr0; + $loader->classMap = ComposerStaticInit1a0e4ea3fb1d108a445b9e95a7c251ad::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json new file mode 100644 index 000000000..eef81dec9 --- /dev/null +++ b/vendor/composer/installed.json @@ -0,0 +1,2376 @@ +{ + "packages": [ + { + "name": "bacon/bacon-qr-code", + "version": "v3.0.1", + "version_normalized": "3.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/Bacon/BaconQrCode.git", + "reference": "f9cc1f52b5a463062251d666761178dbdb6b544f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/f9cc1f52b5a463062251d666761178dbdb6b544f", + "reference": "f9cc1f52b5a463062251d666761178dbdb6b544f", + "shasum": "" + }, + "require": { + "dasprid/enum": "^1.0.3", + "ext-iconv": "*", + "php": "^8.1" + }, + "require-dev": { + "phly/keep-a-changelog": "^2.12", + "phpunit/phpunit": "^10.5.11 || 11.0.4", + "spatie/phpunit-snapshot-assertions": "^5.1.5", + "squizlabs/php_codesniffer": "^3.9" + }, + "suggest": { + "ext-imagick": "to generate QR code images" + }, + "time": "2024-10-01T13:55:55+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "BaconQrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "BaconQrCode is a QR code generator for PHP.", + "homepage": "https://github.com/Bacon/BaconQrCode", + "support": { + "issues": "https://github.com/Bacon/BaconQrCode/issues", + "source": "https://github.com/Bacon/BaconQrCode/tree/v3.0.1" + }, + "install-path": "../bacon/bacon-qr-code" + }, + { + "name": "chillerlan/php-authenticator", + "version": "5.2.1", + "version_normalized": "5.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/chillerlan/php-authenticator.git", + "reference": "040318f0055421ff1ee52f6afa13e5f60a88ade9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/chillerlan/php-authenticator/zipball/040318f0055421ff1ee52f6afa13e5f60a88ade9", + "reference": "040318f0055421ff1ee52f6afa13e5f60a88ade9", + "shasum": "" + }, + "require": { + "chillerlan/php-settings-container": "^3.2.1", + "paragonie/constant_time_encoding": "^3.0", + "php": "^8.2" + }, + "require-dev": { + "ext-curl": "*", + "ext-json": "*", + "ext-sodium": "*", + "phpmd/phpmd": "^2.15", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-deprecation-rules": "^1.2", + "phpunit/phpunit": "^11.2", + "squizlabs/php_codesniffer": "^3.10" + }, + "suggest": { + "chillerlan/php-qrcode": "Create QR Codes for use with an authenticator app." + }, + "time": "2024-07-16T23:53:16+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "chillerlan\\Authenticator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" + }, + { + "name": "Contributors", + "homepage": "https://github.com/chillerlan/php-authenticator/graphs/contributors" + } + ], + "description": "A generator for counter- and time based 2-factor authentication codes (Google Authenticator). PHP 8.2+", + "homepage": "https://github.com/chillerlan/php-authenticator", + "keywords": [ + "2fa", + "MFA", + "authenticator", + "google2fa", + "hotp", + "otp", + "rfc4226", + "rfc6238", + "tfa", + "totp", + "two factor" + ], + "support": { + "issues": "https://github.com/chillerlan/php-authenticator/issues", + "source": "https://github.com/chillerlan/php-authenticator" + }, + "funding": [ + { + "url": "https://ko-fi.com/codemasher", + "type": "Ko-Fi" + } + ], + "install-path": "../chillerlan/php-authenticator" + }, + { + "name": "chillerlan/php-settings-container", + "version": "3.2.1", + "version_normalized": "3.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/chillerlan/php-settings-container.git", + "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/95ed3e9676a1d47cab2e3174d19b43f5dbf52681", + "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^8.1" + }, + "require-dev": { + "phpmd/phpmd": "^2.15", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-deprecation-rules": "^1.2", + "phpunit/phpunit": "^10.5", + "squizlabs/php_codesniffer": "^3.10" + }, + "time": "2024-07-16T11:13:48+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "chillerlan\\Settings\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" + } + ], + "description": "A container class for immutable settings objects. Not a DI container.", + "homepage": "https://github.com/chillerlan/php-settings-container", + "keywords": [ + "Settings", + "configuration", + "container", + "helper" + ], + "support": { + "issues": "https://github.com/chillerlan/php-settings-container/issues", + "source": "https://github.com/chillerlan/php-settings-container" + }, + "funding": [ + { + "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4", + "type": "custom" + }, + { + "url": "https://ko-fi.com/codemasher", + "type": "ko_fi" + } + ], + "install-path": "../chillerlan/php-settings-container" + }, + { + "name": "dasprid/enum", + "version": "1.0.6", + "version_normalized": "1.0.6.0", + "source": { + "type": "git", + "url": "https://github.com/DASPRiD/Enum.git", + "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/8dfd07c6d2cf31c8da90c53b83c026c7696dda90", + "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90", + "shasum": "" + }, + "require": { + "php": ">=7.1 <9.0" + }, + "require-dev": { + "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11", + "squizlabs/php_codesniffer": "*" + }, + "time": "2024-08-09T14:30:48+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "DASPRiD\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "PHP 7.1 enum implementation", + "keywords": [ + "enum", + "map" + ], + "support": { + "issues": "https://github.com/DASPRiD/Enum/issues", + "source": "https://github.com/DASPRiD/Enum/tree/1.0.6" + }, + "install-path": "../dasprid/enum" + }, + { + "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": "endroid/qr-code", + "version": "6.0.9", + "version_normalized": "6.0.9.0", + "source": { + "type": "git", + "url": "https://github.com/endroid/qr-code.git", + "reference": "21e888e8597440b2205e2e5c484b6c8e556bcd1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/endroid/qr-code/zipball/21e888e8597440b2205e2e5c484b6c8e556bcd1a", + "reference": "21e888e8597440b2205e2e5c484b6c8e556bcd1a", + "shasum": "" + }, + "require": { + "bacon/bacon-qr-code": "^3.0", + "php": "^8.2" + }, + "require-dev": { + "endroid/quality": "dev-main", + "ext-gd": "*", + "khanamiryan/qrcode-detector-decoder": "^2.0.2", + "setasign/fpdf": "^1.8.2" + }, + "suggest": { + "ext-gd": "Enables you to write PNG images", + "khanamiryan/qrcode-detector-decoder": "Enables you to use the image validator", + "roave/security-advisories": "Makes sure package versions with known security issues are not installed", + "setasign/fpdf": "Enables you to use the PDF writer" + }, + "time": "2025-07-13T19:59:45+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Endroid\\QrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeroen van den Enden", + "email": "info@endroid.nl" + } + ], + "description": "Endroid QR Code", + "homepage": "https://github.com/endroid/qr-code", + "keywords": [ + "code", + "endroid", + "php", + "qr", + "qrcode" + ], + "support": { + "issues": "https://github.com/endroid/qr-code/issues", + "source": "https://github.com/endroid/qr-code/tree/6.0.9" + }, + "funding": [ + { + "url": "https://github.com/endroid", + "type": "github" + } + ], + "install-path": "../endroid/qr-code" + }, + { + "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.8", + "version_normalized": "1.0.8.0", + "source": { + "type": "git", + "url": "https://github.com/horstoeko/mimedb.git", + "reference": "2d50f2b6bf63f14741514682869b53fc97232308" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/horstoeko/mimedb/zipball/2d50f2b6bf63f14741514682869b53fc97232308", + "reference": "2d50f2b6bf63f14741514682869b53fc97232308", + "shasum": "" + }, + "require": { + "php": ">=7.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": "2024-12-03T10:57:28+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.8" + }, + "install-path": "../horstoeko/mimedb" + }, + { + "name": "horstoeko/stringmanagement", + "version": "v1.0.12", + "version_normalized": "1.0.12.0", + "source": { + "type": "git", + "url": "https://github.com/horstoeko/stringmanagement.git", + "reference": "d304a094e34c39d35f275bccf4944176dd8f1722" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/horstoeko/stringmanagement/zipball/d304a094e34c39d35f275bccf4944176dd8f1722", + "reference": "d304a094e34c39d35f275bccf4944176dd8f1722", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "nette/php-generator": "*", + "pdepend/pdepend": "^2", + "phpdocumentor/reflection-docblock": "^5", + "phploc/phploc": "^7", + "phpmd/phpmd": "^2", + "phpstan/phpstan": "^1|^2", + "phpunit/phpunit": "^9", + "rector/rector": "*", + "sebastian/phpcpd": "^6", + "squizlabs/php_codesniffer": "^3" + }, + "time": "2025-03-15T09:04:46+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.12" + }, + "install-path": "../horstoeko/stringmanagement" + }, + { + "name": "horstoeko/zugferd", + "version": "v1.0.115", + "version_normalized": "1.0.115.0", + "source": { + "type": "git", + "url": "https://github.com/horstoeko/zugferd.git", + "reference": "9bbf0c06942645001d10e88d6e26ff6d8983da2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/horstoeko/zugferd/zipball/9bbf0c06942645001d10e88d6e26ff6d8983da2c", + "reference": "9bbf0c06942645001d10e88d6e26ff6d8983da2c", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "goetas-webservices/xsd2php-runtime": "^0.2.13", + "horstoeko/mimedb": "^1", + "horstoeko/stringmanagement": "^1", + "jms/serializer": "^3", + "php": ">=7.3", + "setasign/fpdf": "^1", + "setasign/fpdi": "^2", + "smalot/pdfparser": "^0|^2", + "symfony/finder": "^5|^6|^7", + "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", + "phpdocumentor/reflection-docblock": "^5", + "phploc/phploc": "^7", + "phpmd/phpmd": "^2", + "phpstan/phpstan": "^1|^2", + "phpunit/phpunit": "^9", + "rector/rector": "*", + "sebastian/phpcpd": "^6", + "squizlabs/php_codesniffer": "^3" + }, + "time": "2025-06-06T08:14:02+00:00", + "type": "package", + "installation-source": "dist", + "autoload": { + "psr-4": { + "horstoeko\\zugferd\\": "src" + } + }, + "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.115" + }, + "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.32.5", + "version_normalized": "3.32.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/serializer.git", + "reference": "7c88b1b02ff868eecc870eeddbb3b1250e4bd89c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/7c88b1b02ff868eecc870eeddbb3b1250e4bd89c", + "reference": "7c88b1b02ff868eecc870eeddbb3b1250e4bd89c", + "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 || ^2.0" + }, + "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": "^2.0", + "phpunit/phpunit": "^9.0 || ^10.0 || ^11.0", + "psr/container": "^1.0 || ^2.0", + "rector/rector": "^1.0.0 || ^2.0@dev", + "slevomat/coding-standard": "dev-master#f2cc4c553eae68772624ffd7dd99022343b69c31 as 8.11.9999", + "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": "2025-05-26T15:55:41+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.32.5" + }, + "funding": [ + { + "url": "https://github.com/goetas", + "type": "github" + }, + { + "url": "https://github.com/scyzoryck", + "type": "github" + } + ], + "install-path": "../jms/serializer" + }, + { + "name": "num-num/ubl-invoice", + "version": "v1.21.2", + "version_normalized": "1.21.2.0", + "source": { + "type": "git", + "url": "https://github.com/num-num/ubl-invoice.git", + "reference": "195712b3071e23c5aaa6fe95cb9e2de55c3d1348" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/num-num/ubl-invoice/zipball/195712b3071e23c5aaa6fe95cb9e2de55c3d1348", + "reference": "195712b3071e23c5aaa6fe95cb9e2de55c3d1348", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0", + "sabre/xml": "^4.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "time": "2025-07-01T11:58:25+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "NumNum\\UBL\\": [ + "src" + ], + "NumNum\\UBL\\Tests\\": [ + "tests" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bert Devriese", + "email": "bert@numnum.be", + "homepage": "https://www.numnum.be", + "role": "Developer" + } + ], + "description": "A modern object-oriented PHP library to create valid UBL and Peppol BIS 3.0 files", + "homepage": "https://github.com/num-num/ubl-invoice", + "keywords": [ + "E-Invoice", + "digital invoice", + "efff", + "einvoice", + "electronic invoice", + "euinvoice", + "invoice", + "peppol", + "peppol bis", + "peppol invoice", + "peppolbis", + "ubl", + "ubl invoice", + "ublinvoice", + "xml", + "xml invoice" + ], + "support": { + "issues": "https://github.com/num-num/ubl-invoice/issues", + "source": "https://github.com/num-num/ubl-invoice/tree/v1.21.2" + }, + "install-path": "../num-num/ubl-invoice" + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v3.0.0", + "version_normalized": "3.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512", + "shasum": "" + }, + "require": { + "php": "^8" + }, + "require-dev": { + "phpunit/phpunit": "^9", + "vimeo/psalm": "^4|^5" + }, + "time": "2024-05-08T12:36:18+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + }, + "install-path": "../paragonie/constant_time_encoding" + }, + { + "name": "php-curl-class/php-curl-class", + "version": "12.0.0", + "version_normalized": "12.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-curl-class/php-curl-class.git", + "reference": "7a8f05efb18bb865dbce864b8fd34d4f5d920c74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-curl-class/php-curl-class/zipball/7a8f05efb18bb865dbce864b8fd34d4f5d920c74", + "reference": "7a8f05efb18bb865dbce864b8fd34d4f5d920c74", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "*", + "ext-gd": "*", + "friendsofphp/php-cs-fixer": "*", + "phpcompatibility/php-compatibility": "dev-develop", + "phpcsstandards/phpcsutils": "@alpha", + "phpstan/phpstan": "*", + "phpunit/phpunit": "*", + "squizlabs/php_codesniffer": "*" + }, + "suggest": { + "ext-mbstring": "*" + }, + "time": "2025-03-25T18:04:16+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Curl\\": "src/Curl/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Unlicense" + ], + "authors": [ + { + "name": "Zach Borboa" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-curl-class/php-curl-class/graphs/contributors" + } + ], + "description": "PHP Curl Class makes it easy to send HTTP requests and integrate with web APIs.", + "homepage": "https://github.com/php-curl-class/php-curl-class", + "keywords": [ + "API-Client", + "api", + "class", + "client", + "curl", + "framework", + "http", + "http-client", + "http-proxy", + "json", + "php", + "php-curl", + "php-curl-library", + "proxy", + "requests", + "restful", + "web-scraper", + "web-scraping ", + "web-service", + "xml" + ], + "support": { + "issues": "https://github.com/php-curl-class/php-curl-class/issues", + "source": "https://github.com/php-curl-class/php-curl-class/tree/12.0.0" + }, + "install-path": "../php-curl-class/php-curl-class" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "2.2.0", + "version_normalized": "2.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/b9e61a61e39e02dd90944e9115241c7f7e76bfd8", + "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" + }, + "time": "2025-07-13T07:04:09+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/2.2.0" + }, + "install-path": "../phpstan/phpdoc-parser" + }, + { + "name": "sabre/uri", + "version": "3.0.2", + "version_normalized": "3.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/sabre-io/uri.git", + "reference": "38eeab6ed9eec435a2188db489d4649c56272c51" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabre-io/uri/zipball/38eeab6ed9eec435a2188db489d4649c56272c51", + "reference": "38eeab6ed9eec435a2188db489d4649c56272c51", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.64", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^1.12", + "phpstan/phpstan-phpunit": "^1.4", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "^9.6" + }, + "time": "2024-09-04T15:30:08+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "lib/functions.php" + ], + "psr-4": { + "Sabre\\Uri\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + } + ], + "description": "Functions for making sense out of URIs.", + "homepage": "http://sabre.io/uri/", + "keywords": [ + "rfc3986", + "uri", + "url" + ], + "support": { + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/uri/issues", + "source": "https://github.com/fruux/sabre-uri" + }, + "install-path": "../sabre/uri" + }, + { + "name": "sabre/xml", + "version": "4.0.6", + "version_normalized": "4.0.6.0", + "source": { + "type": "git", + "url": "https://github.com/sabre-io/xml.git", + "reference": "a89257fd188ce30e456b841b6915f27905dfdbe3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabre-io/xml/zipball/a89257fd188ce30e456b841b6915f27905dfdbe3", + "reference": "a89257fd188ce30e456b841b6915f27905dfdbe3", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "lib-libxml": ">=2.6.20", + "php": "^7.4 || ^8.0", + "sabre/uri": ">=2.0,<4.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.64", + "phpstan/phpstan": "^1.12", + "phpunit/phpunit": "^9.6" + }, + "time": "2024-09-06T08:00:55+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "lib/Deserializer/functions.php", + "lib/Serializer/functions.php" + ], + "psr-4": { + "Sabre\\Xml\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + }, + { + "name": "Markus Staab", + "email": "markus.staab@redaxo.de", + "role": "Developer" + } + ], + "description": "sabre/xml is an XML library that you may not hate.", + "homepage": "https://sabre.io/xml/", + "keywords": [ + "XMLReader", + "XMLWriter", + "dom", + "xml" + ], + "support": { + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/xml/issues", + "source": "https://github.com/fruux/sabre-xml" + }, + "install-path": "../sabre/xml" + }, + { + "name": "setasign/fpdf", + "version": "1.8.6", + "version_normalized": "1.8.6.0", + "source": { + "type": "git", + "url": "https://github.com/Setasign/FPDF.git", + "reference": "0838e0ee4925716fcbbc50ad9e1799b5edfae0a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Setasign/FPDF/zipball/0838e0ee4925716fcbbc50ad9e1799b5edfae0a0", + "reference": "0838e0ee4925716fcbbc50ad9e1799b5edfae0a0", + "shasum": "" + }, + "require": { + "ext-gd": "*", + "ext-zlib": "*" + }, + "time": "2023-06-26T14:44:25+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.6" + }, + "install-path": "../setasign/fpdf" + }, + { + "name": "setasign/fpdi", + "version": "v2.6.3", + "version_normalized": "2.6.3.0", + "source": { + "type": "git", + "url": "https://github.com/Setasign/FPDI.git", + "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/67c31f5e50c93c20579ca9e23035d8c540b51941", + "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941", + "shasum": "" + }, + "require": { + "ext-zlib": "*", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "setasign/tfpdf": "<1.31" + }, + "require-dev": { + "phpunit/phpunit": "^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": "2025-02-05T13:22:35+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.3" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/setasign/fpdi", + "type": "tidelift" + } + ], + "install-path": "../setasign/fpdi" + }, + { + "name": "smalot/pdfparser", + "version": "v2.12.0", + "version_normalized": "2.12.0.0", + "source": { + "type": "git", + "url": "https://github.com/smalot/pdfparser.git", + "reference": "8440edbf58c8596074e78ada38dcb0bd041a5948" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/smalot/pdfparser/zipball/8440edbf58c8596074e78ada38dcb0bd041a5948", + "reference": "8440edbf58c8596074e78ada38dcb0bd041a5948", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "ext-zlib": "*", + "php": ">=7.1", + "symfony/polyfill-mbstring": "^1.18" + }, + "time": "2025-03-31T13:16:09+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.12.0" + }, + "install-path": "../smalot/pdfparser" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "version_normalized": "3.6.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "time": "2024-09-25T14:21:43+00:00", + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "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.6.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/finder", + "version": "v7.3.0", + "version_normalized": "7.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d", + "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" + }, + "time": "2024-12-30T19:00:26+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "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": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.3.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/finder" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.32.0", + "version_normalized": "1.32.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "time": "2024-09-09T11:45:10+00:00", + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "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.32.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.32.0", + "version_normalized": "1.32.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "time": "2024-12-23T08:48:59+00:00", + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "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.32.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.32.0", + "version_normalized": "1.32.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "time": "2024-09-09T11:45:10+00:00", + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "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.32.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": "v7.3.0", + "version_normalized": "7.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "time": "2025-04-17T09:11:12+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/v7.3.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/process" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.6.0", + "version_normalized": "3.6.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "time": "2024-09-27T08:32:26+00:00", + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "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.6.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": "v7.3.1", + "version_normalized": "7.3.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "e2f2497c869fc57446f735fbf00cff4de32ae8c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/e2f2497c869fc57446f735fbf00cff4de32ae8c3", + "reference": "e2f2497c869fc57446f735fbf00cff4de32ae8c3", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "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/lexer": "<1.1", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<7.0", + "symfony/expression-language": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/intl": "<6.4", + "symfony/property-info": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", + "symfony/translation": "^6.4.3|^7.0.3", + "symfony/type-info": "^7.1", + "symfony/yaml": "^6.4|^7.0" + }, + "time": "2025-06-26T13:22:23+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/v7.3.1" + }, + "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": "v7.3.1", + "version_normalized": "7.3.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "0c3555045a46ab3cd4cc5a69d161225195230edb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0c3555045a46ab3cd4cc5a69d161225195230edb", + "reference": "0c3555045a46ab3cd4cc5a69d161225195230edb", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "time": "2025-06-03T06:57:57+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/v7.3.1" + }, + "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" + }, + { + "name": "zetacomponents/base", + "version": "1.9.4", + "version_normalized": "1.9.4.0", + "source": { + "type": "git", + "url": "https://github.com/zetacomponents/Base.git", + "reference": "b6ae5f6177f6e51c5fc3514800e1c3fb076ec4be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zetacomponents/Base/zipball/b6ae5f6177f6e51c5fc3514800e1c3fb076ec4be", + "reference": "b6ae5f6177f6e51c5fc3514800e1c3fb076ec4be", + "shasum": "" + }, + "require-dev": { + "phpunit/php-invoker": "^2.0|^3.1", + "phpunit/phpunit": "~9.0", + "zetacomponents/coding-standard": "dev-main", + "zetacomponents/unit-test": "~1.2.3" + }, + "time": "2022-11-30T16:16:25+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "src" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Sergey Alexeev" + }, + { + "name": "Sebastian Bergmann" + }, + { + "name": "Jan Borsodi" + }, + { + "name": "Raymond Bosman" + }, + { + "name": "Frederik Holljen" + }, + { + "name": "Kore Nordmann" + }, + { + "name": "Derick Rethans" + }, + { + "name": "Vadym Savchuk" + }, + { + "name": "Tobias Schlitt" + }, + { + "name": "Alexandru Stanoi" + } + ], + "description": "The Base package provides the basic infrastructure that all packages rely on. Therefore every component relies on this package.", + "homepage": "https://github.com/zetacomponents", + "support": { + "issues": "https://github.com/zetacomponents/Base/issues", + "source": "https://github.com/zetacomponents/Base/tree/1.9.4" + }, + "install-path": "../zetacomponents/base" + }, + { + "name": "zetacomponents/mail", + "version": "1.10.1", + "version_normalized": "1.10.1.0", + "source": { + "type": "git", + "url": "https://github.com/zetacomponents/Mail.git", + "reference": "644fe50cf9f05a455cc576e2d763bc7cd967769f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zetacomponents/Mail/zipball/644fe50cf9f05a455cc576e2d763bc7cd967769f", + "reference": "644fe50cf9f05a455cc576e2d763bc7cd967769f", + "shasum": "" + }, + "require": { + "zetacomponents/base": "~1.8" + }, + "require-dev": { + "phpunit/phpunit": "~9.0", + "zetacomponents/unit-test": "*" + }, + "time": "2025-03-17T11:33:59+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "src" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Sergey Alexeev" + }, + { + "name": "Sebastian Bergmann" + }, + { + "name": "Jan Borsodi" + }, + { + "name": "Raymond Bosman" + }, + { + "name": "Frederik Holljen" + }, + { + "name": "Kore Nordmann" + }, + { + "name": "Derick Rethans" + }, + { + "name": "Vadym Savchuk" + }, + { + "name": "Tobias Schlitt" + }, + { + "name": "Alexandru Stanoi" + }, + { + "name": "Sinisa Dukaric" + }, + { + "name": "Mikko Koppanen" + }, + { + "name": "Christian Michel" + } + ], + "description": "The component allows you construct and/or parse Mail messages conforming to the mail standard. It has support for attachments, multipart messages and HTML mail. It also interfaces with SMTP to send mail or IMAP, POP3 or mbox to retrieve e-mail.", + "homepage": "https://github.com/zetacomponents", + "support": { + "issues": "https://github.com/zetacomponents/Mail/issues", + "source": "https://github.com/zetacomponents/Mail/tree/1.10.1" + }, + "install-path": "../zetacomponents/mail" + } + ], + "dev": true, + "dev-package-names": [] +} diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php new file mode 100644 index 000000000..260aa5258 --- /dev/null +++ b/vendor/composer/installed.php @@ -0,0 +1,320 @@ + array( + 'name' => '__root__', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => '9584a3090ab8e976441fa6e8ab7798db0a361830', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev' => true, + ), + 'versions' => array( + '__root__' => array( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => '9584a3090ab8e976441fa6e8ab7798db0a361830', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'bacon/bacon-qr-code' => array( + 'pretty_version' => 'v3.0.1', + 'version' => '3.0.1.0', + 'reference' => 'f9cc1f52b5a463062251d666761178dbdb6b544f', + 'type' => 'library', + 'install_path' => __DIR__ . '/../bacon/bacon-qr-code', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'chillerlan/php-authenticator' => array( + 'pretty_version' => '5.2.1', + 'version' => '5.2.1.0', + 'reference' => '040318f0055421ff1ee52f6afa13e5f60a88ade9', + 'type' => 'library', + 'install_path' => __DIR__ . '/../chillerlan/php-authenticator', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'chillerlan/php-settings-container' => array( + 'pretty_version' => '3.2.1', + 'version' => '3.2.1.0', + 'reference' => '95ed3e9676a1d47cab2e3174d19b43f5dbf52681', + 'type' => 'library', + 'install_path' => __DIR__ . '/../chillerlan/php-settings-container', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'dasprid/enum' => array( + 'pretty_version' => '1.0.6', + 'version' => '1.0.6.0', + 'reference' => '8dfd07c6d2cf31c8da90c53b83c026c7696dda90', + 'type' => 'library', + 'install_path' => __DIR__ . '/../dasprid/enum', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'doctrine/instantiator' => array( + 'pretty_version' => '2.0.0', + 'version' => '2.0.0.0', + 'reference' => 'c6222283fa3f4ac679f8b9ced9a4e23f163e80d0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../doctrine/instantiator', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'doctrine/lexer' => array( + 'pretty_version' => '3.0.1', + 'version' => '3.0.1.0', + 'reference' => '31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd', + 'type' => 'library', + 'install_path' => __DIR__ . '/../doctrine/lexer', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'endroid/qr-code' => array( + 'pretty_version' => '6.0.9', + 'version' => '6.0.9.0', + 'reference' => '21e888e8597440b2205e2e5c484b6c8e556bcd1a', + 'type' => 'library', + 'install_path' => __DIR__ . '/../endroid/qr-code', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'goetas-webservices/xsd2php-runtime' => array( + 'pretty_version' => 'v0.2.17', + 'version' => '0.2.17.0', + 'reference' => 'be15c48cda6adfab82e180a69dfa1937e208cfe1', + 'type' => 'library', + 'install_path' => __DIR__ . '/../goetas-webservices/xsd2php-runtime', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'horstoeko/mimedb' => array( + 'pretty_version' => 'v1.0.8', + 'version' => '1.0.8.0', + 'reference' => '2d50f2b6bf63f14741514682869b53fc97232308', + 'type' => 'package', + 'install_path' => __DIR__ . '/../horstoeko/mimedb', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'horstoeko/stringmanagement' => array( + 'pretty_version' => 'v1.0.12', + 'version' => '1.0.12.0', + 'reference' => 'd304a094e34c39d35f275bccf4944176dd8f1722', + 'type' => 'package', + 'install_path' => __DIR__ . '/../horstoeko/stringmanagement', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'horstoeko/zugferd' => array( + 'pretty_version' => 'v1.0.115', + 'version' => '1.0.115.0', + 'reference' => '9bbf0c06942645001d10e88d6e26ff6d8983da2c', + 'type' => 'package', + 'install_path' => __DIR__ . '/../horstoeko/zugferd', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'jms/metadata' => array( + 'pretty_version' => '2.8.0', + 'version' => '2.8.0.0', + 'reference' => '7ca240dcac0c655eb15933ee55736ccd2ea0d7a6', + 'type' => 'library', + 'install_path' => __DIR__ . '/../jms/metadata', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'jms/serializer' => array( + 'pretty_version' => '3.32.5', + 'version' => '3.32.5.0', + 'reference' => '7c88b1b02ff868eecc870eeddbb3b1250e4bd89c', + 'type' => 'library', + 'install_path' => __DIR__ . '/../jms/serializer', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'num-num/ubl-invoice' => array( + 'pretty_version' => 'v1.21.2', + 'version' => '1.21.2.0', + 'reference' => '195712b3071e23c5aaa6fe95cb9e2de55c3d1348', + 'type' => 'library', + 'install_path' => __DIR__ . '/../num-num/ubl-invoice', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'paragonie/constant_time_encoding' => array( + 'pretty_version' => 'v3.0.0', + 'version' => '3.0.0.0', + 'reference' => 'df1e7fde177501eee2037dd159cf04f5f301a512', + 'type' => 'library', + 'install_path' => __DIR__ . '/../paragonie/constant_time_encoding', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'php-curl-class/php-curl-class' => array( + 'pretty_version' => '12.0.0', + 'version' => '12.0.0.0', + 'reference' => '7a8f05efb18bb865dbce864b8fd34d4f5d920c74', + 'type' => 'library', + 'install_path' => __DIR__ . '/../php-curl-class/php-curl-class', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'phpstan/phpdoc-parser' => array( + 'pretty_version' => '2.2.0', + 'version' => '2.2.0.0', + 'reference' => 'b9e61a61e39e02dd90944e9115241c7f7e76bfd8', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpstan/phpdoc-parser', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'sabre/uri' => array( + 'pretty_version' => '3.0.2', + 'version' => '3.0.2.0', + 'reference' => '38eeab6ed9eec435a2188db489d4649c56272c51', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sabre/uri', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'sabre/xml' => array( + 'pretty_version' => '4.0.6', + 'version' => '4.0.6.0', + 'reference' => 'a89257fd188ce30e456b841b6915f27905dfdbe3', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sabre/xml', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'setasign/fpdf' => array( + 'pretty_version' => '1.8.6', + 'version' => '1.8.6.0', + 'reference' => '0838e0ee4925716fcbbc50ad9e1799b5edfae0a0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../setasign/fpdf', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'setasign/fpdi' => array( + 'pretty_version' => 'v2.6.3', + 'version' => '2.6.3.0', + 'reference' => '67c31f5e50c93c20579ca9e23035d8c540b51941', + 'type' => 'library', + 'install_path' => __DIR__ . '/../setasign/fpdi', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'smalot/pdfparser' => array( + 'pretty_version' => 'v2.12.0', + 'version' => '2.12.0.0', + 'reference' => '8440edbf58c8596074e78ada38dcb0bd041a5948', + 'type' => 'library', + 'install_path' => __DIR__ . '/../smalot/pdfparser', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/deprecation-contracts' => array( + 'pretty_version' => 'v3.6.0', + 'version' => '3.6.0.0', + 'reference' => '63afe740e99a13ba87ec199bb07bbdee937a5b62', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/finder' => array( + 'pretty_version' => 'v7.3.0', + 'version' => '7.3.0.0', + 'reference' => 'ec2344cf77a48253bbca6939aa3d2477773ea63d', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/finder', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/polyfill-ctype' => array( + 'pretty_version' => 'v1.32.0', + 'version' => '1.32.0.0', + 'reference' => 'a3cc8b044a6ea513310cbd48ef7333b384945638', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/polyfill-mbstring' => array( + 'pretty_version' => 'v1.32.0', + 'version' => '1.32.0.0', + 'reference' => '6d857f4d76bd4b343eac26d6b539585d2bc56493', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/polyfill-php83' => array( + 'pretty_version' => 'v1.32.0', + 'version' => '1.32.0.0', + 'reference' => '2fb86d65e2d424369ad2905e83b236a8805ba491', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-php83', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/process' => array( + 'pretty_version' => 'v7.3.0', + 'version' => '7.3.0.0', + 'reference' => '40c295f2deb408d5e9d2d32b8ba1dd61e36f05af', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/process', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/translation-contracts' => array( + 'pretty_version' => 'v3.6.0', + 'version' => '3.6.0.0', + 'reference' => 'df210c7a2573f1913b2d17cc95f90f53a73d8f7d', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/translation-contracts', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/validator' => array( + 'pretty_version' => 'v7.3.1', + 'version' => '7.3.1.0', + 'reference' => 'e2f2497c869fc57446f735fbf00cff4de32ae8c3', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/validator', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/yaml' => array( + 'pretty_version' => 'v7.3.1', + 'version' => '7.3.1.0', + 'reference' => '0c3555045a46ab3cd4cc5a69d161225195230edb', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/yaml', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'zetacomponents/base' => array( + 'pretty_version' => '1.9.4', + 'version' => '1.9.4.0', + 'reference' => 'b6ae5f6177f6e51c5fc3514800e1c3fb076ec4be', + 'type' => 'library', + 'install_path' => __DIR__ . '/../zetacomponents/base', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'zetacomponents/mail' => array( + 'pretty_version' => '1.10.1', + 'version' => '1.10.1.0', + 'reference' => '644fe50cf9f05a455cc576e2d763bc7cd967769f', + 'type' => 'library', + 'install_path' => __DIR__ . '/../zetacomponents/mail', + 'aliases' => array(), + 'dev_requirement' => false, + ), + ), +); diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php new file mode 100644 index 000000000..d32d90c6a --- /dev/null +++ b/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 80200)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 8.2.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 + ); +} diff --git a/vendor/dasprid/enum/LICENSE b/vendor/dasprid/enum/LICENSE new file mode 100644 index 000000000..d45a35647 --- /dev/null +++ b/vendor/dasprid/enum/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2017, Ben Scholzen 'DASPRiD' +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/dasprid/enum/README.md b/vendor/dasprid/enum/README.md new file mode 100644 index 000000000..da37045e3 --- /dev/null +++ b/vendor/dasprid/enum/README.md @@ -0,0 +1,164 @@ +# PHP 7.1 enums + +[![Build Status](https://github.com/DASPRiD/Enum/actions/workflows/tests.yml/badge.svg)](https://github.com/DASPRiD/Enum/actions?query=workflow%3Atests) +[![Coverage Status](https://coveralls.io/repos/github/DASPRiD/Enum/badge.svg?branch=master)](https://coveralls.io/github/DASPRiD/Enum?branch=master) +[![Latest Stable Version](https://poser.pugx.org/dasprid/enum/v/stable)](https://packagist.org/packages/dasprid/enum) +[![Total Downloads](https://poser.pugx.org/dasprid/enum/downloads)](https://packagist.org/packages/dasprid/enum) +[![License](https://poser.pugx.org/dasprid/enum/license)](https://packagist.org/packages/dasprid/enum) + +It is a well known fact that PHP is missing a basic enum type, ignoring the rather incomplete `SplEnum` implementation +which is only available as a PECL extension. There are also quite a few other userland enum implementations around, +but all of them have one or another compromise. This library tries to close that gap as far as PHP allows it to. + +## Usage + +### Basics + +At its core, there is the `DASPRiD\Enum\AbstractEnum` class, which by default will work with constants like any other +enum implementation you might know. The first clear difference is that you should define all the constants as protected +(so nobody outside your class can read them but the `AbstractEnum` can still do so). The other even mightier difference +is that, for simple enums, the value of the constant doesn't matter at all. Let's have a look at a simple example: + +```php +use DASPRiD\Enum\AbstractEnum; + +/** + * @method static self MONDAY() + * @method static self TUESDAY() + * @method static self WEDNESDAY() + * @method static self THURSDAY() + * @method static self FRIDAY() + * @method static self SATURDAY() + * @method static self SUNDAY() + */ +final class WeekDay extends AbstractEnum +{ + protected const MONDAY = null; + protected const TUESDAY = null; + protected const WEDNESDAY = null; + protected const THURSDAY = null; + protected const FRIDAY = null; + protected const SATURDAY = null; + protected const SUNDAY = null; +} +``` + +If you need to provide constants for either internal use or public use, you can mark them as either private or public, +in which case they will be ignored by the enum, which only considers protected constants as valid values. As you can +see, we specifically defined the generated magic methods in a class level doc block, so anyone using this class will +automatically have proper auto-completion in their IDE. Now since you have defined the enum, you can simply use it like +that: + +```php +function tellItLikeItIs(WeekDay $weekDay) +{ + switch ($weekDay) { + case WeekDay::MONDAY(): + echo 'Mondays are bad.'; + break; + + case WeekDay::FRIDAY(): + echo 'Fridays are better.'; + break; + + case WeekDay::SATURDAY(): + case WeekDay::SUNDAY(): + echo 'Weekends are best.'; + break; + + default: + echo 'Midweek days are so-so.'; + } +} + +tellItLikeItIs(WeekDay::MONDAY()); +tellItLikeItIs(WeekDay::WEDNESDAY()); +tellItLikeItIs(WeekDay::FRIDAY()); +tellItLikeItIs(WeekDay::SATURDAY()); +tellItLikeItIs(WeekDay::SUNDAY()); +``` + +### More complex example + +Of course, all enums are singletons, which are not cloneable or serializable. Thus you can be sure that there is always +just one instance of the same type. Of course, the values of constants are not completely useless, let's have a look at +a more complex example: + +```php +use DASPRiD\Enum\AbstractEnum; + +/** + * @method static self MERCURY() + * @method static self VENUS() + * @method static self EARTH() + * @method static self MARS() + * @method static self JUPITER() + * @method static self SATURN() + * @method static self URANUS() + * @method static self NEPTUNE() + */ +final class Planet extends AbstractEnum +{ + protected const MERCURY = [3.303e+23, 2.4397e6]; + protected const VENUS = [4.869e+24, 6.0518e6]; + protected const EARTH = [5.976e+24, 6.37814e6]; + protected const MARS = [6.421e+23, 3.3972e6]; + protected const JUPITER = [1.9e+27, 7.1492e7]; + protected const SATURN = [5.688e+26, 6.0268e7]; + protected const URANUS = [8.686e+25, 2.5559e7]; + protected const NEPTUNE = [1.024e+26, 2.4746e7]; + + /** + * Universal gravitational constant. + * + * @var float + */ + private const G = 6.67300E-11; + + /** + * Mass in kilograms. + * + * @var float + */ + private $mass; + + /** + * Radius in meters. + * + * @var float + */ + private $radius; + + protected function __construct(float $mass, float $radius) + { + $this->mass = $mass; + $this->radius = $radius; + } + + public function mass() : float + { + return $this->mass; + } + + public function radius() : float + { + return $this->radius; + } + + public function surfaceGravity() : float + { + return self::G * $this->mass / ($this->radius * $this->radius); + } + + public function surfaceWeight(float $otherMass) : float + { + return $otherMass * $this->surfaceGravity(); + } +} + +$myMass = 80; + +foreach (Planet::values() as $planet) { + printf("Your weight on %s is %f\n", $planet, $planet->surfaceWeight($myMass)); +} +``` diff --git a/vendor/dasprid/enum/composer.json b/vendor/dasprid/enum/composer.json new file mode 100644 index 000000000..a099aba54 --- /dev/null +++ b/vendor/dasprid/enum/composer.json @@ -0,0 +1,34 @@ +{ + "name": "dasprid/enum", + "description": "PHP 7.1 enum implementation", + "license": "BSD-2-Clause", + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "keywords": [ + "enum", + "map" + ], + "require": { + "php": ">=7.1 <9.0" + }, + "require-dev": { + "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11", + "squizlabs/php_codesniffer": "*" + }, + "autoload": { + "psr-4": { + "DASPRiD\\Enum\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "DASPRiD\\EnumTest\\": "test/" + } + } +} diff --git a/vendor/dasprid/enum/src/AbstractEnum.php b/vendor/dasprid/enum/src/AbstractEnum.php new file mode 100644 index 000000000..79fe81c2b --- /dev/null +++ b/vendor/dasprid/enum/src/AbstractEnum.php @@ -0,0 +1,241 @@ +> + */ + private static $values = []; + + /** + * @var array + */ + private static $allValuesLoaded = []; + + /** + * @var array + */ + private static $constants = []; + + /** + * The constructor is private by default to avoid arbitrary enum creation. + * + * When creating your own constructor for a parameterized enum, make sure to declare it as protected, so that + * the static methods are able to construct it. Avoid making it public, as that would allow creation of + * non-singleton enum instances. + */ + private function __construct() + { + } + + /** + * Magic getter which forwards all calls to {@see self::valueOf()}. + * + * @return static + */ + final public static function __callStatic(string $name, array $arguments) : self + { + return static::valueOf($name); + } + + /** + * Returns an enum with the specified name. + * + * The name must match exactly an identifier used to declare an enum in this type (extraneous whitespace characters + * are not permitted). + * + * @return static + * @throws IllegalArgumentException if the enum has no constant with the specified name + */ + final public static function valueOf(string $name) : self + { + if (isset(self::$values[static::class][$name])) { + return self::$values[static::class][$name]; + } + + $constants = self::constants(); + + if (array_key_exists($name, $constants)) { + return self::createValue($name, $constants[$name][0], $constants[$name][1]); + } + + throw new IllegalArgumentException(sprintf('No enum constant %s::%s', static::class, $name)); + } + + /** + * @return static + */ + private static function createValue(string $name, int $ordinal, array $arguments) : self + { + $instance = new static(...$arguments); + $instance->name = $name; + $instance->ordinal = $ordinal; + self::$values[static::class][$name] = $instance; + return $instance; + } + + /** + * Obtains all possible types defined by this enum. + * + * @return static[] + */ + final public static function values() : array + { + if (isset(self::$allValuesLoaded[static::class])) { + return self::$values[static::class]; + } + + if (! isset(self::$values[static::class])) { + self::$values[static::class] = []; + } + + foreach (self::constants() as $name => $constant) { + if (array_key_exists($name, self::$values[static::class])) { + continue; + } + + static::createValue($name, $constant[0], $constant[1]); + } + + uasort(self::$values[static::class], function (self $a, self $b) { + return $a->ordinal() <=> $b->ordinal(); + }); + + self::$allValuesLoaded[static::class] = true; + return self::$values[static::class]; + } + + private static function constants() : array + { + if (isset(self::$constants[static::class])) { + return self::$constants[static::class]; + } + + self::$constants[static::class] = []; + $reflectionClass = new ReflectionClass(static::class); + $ordinal = -1; + + foreach ($reflectionClass->getReflectionConstants() as $reflectionConstant) { + if (! $reflectionConstant->isProtected()) { + continue; + } + + $value = $reflectionConstant->getValue(); + + self::$constants[static::class][$reflectionConstant->name] = [ + ++$ordinal, + is_array($value) ? $value : [] + ]; + } + + return self::$constants[static::class]; + } + + /** + * Returns the name of this enum constant, exactly as declared in its enum declaration. + * + * Most programmers should use the {@see self::__toString()} method in preference to this one, as the toString + * method may return a more user-friendly name. This method is designed primarily for use in specialized situations + * where correctness depends on getting the exact name, which will not vary from release to release. + */ + final public function name() : string + { + return $this->name; + } + + /** + * Returns the ordinal of this enumeration constant (its position in its enum declaration, where the initial + * constant is assigned an ordinal of zero). + * + * Most programmers will have no use for this method. It is designed for use by sophisticated enum-based data + * structures. + */ + final public function ordinal() : int + { + return $this->ordinal; + } + + /** + * Compares this enum with the specified object for order. + * + * Returns negative integer, zero or positive integer as this object is less than, equal to or greater than the + * specified object. + * + * Enums are only comparable to other enums of the same type. The natural order implemented by this method is the + * order in which the constants are declared. + * + * @throws MismatchException if the passed enum is not of the same type + */ + final public function compareTo(self $other) : int + { + if (! $other instanceof static) { + throw new MismatchException(sprintf( + 'The passed enum %s is not of the same type as %s', + get_class($other), + static::class + )); + } + + return $this->ordinal - $other->ordinal; + } + + /** + * Forbid cloning enums. + * + * @throws CloneNotSupportedException + */ + final public function __clone() + { + throw new CloneNotSupportedException(); + } + + /** + * Forbid serializing enums. + * + * @throws SerializeNotSupportedException + */ + final public function __sleep() : array + { + throw new SerializeNotSupportedException(); + } + + /** + * Forbid unserializing enums. + * + * @throws UnserializeNotSupportedException + */ + final public function __wakeup() : void + { + throw new UnserializeNotSupportedException(); + } + + /** + * Turns the enum into a string representation. + * + * You may override this method to give a more user-friendly version. + */ + public function __toString() : string + { + return $this->name; + } +} diff --git a/vendor/dasprid/enum/src/EnumMap.php b/vendor/dasprid/enum/src/EnumMap.php new file mode 100644 index 000000000..95b88568d --- /dev/null +++ b/vendor/dasprid/enum/src/EnumMap.php @@ -0,0 +1,385 @@ + + */ + private $keyUniverse; + + /** + * Array representation of this map. The ith element is the value to which universe[i] is currently mapped, or null + * if it isn't mapped to anything, or NullValue if it's mapped to null. + * + * @var array + */ + private $values; + + /** + * @var int + */ + private $size = 0; + + /** + * Creates a new enum map. + * + * @param string $keyType the type of the keys, must extend AbstractEnum + * @param string $valueType the type of the values + * @param bool $allowNullValues whether to allow null values + * @throws IllegalArgumentException when key type does not extend AbstractEnum + */ + public function __construct(string $keyType, string $valueType, bool $allowNullValues) + { + if (! is_subclass_of($keyType, AbstractEnum::class)) { + throw new IllegalArgumentException(sprintf( + 'Class %s does not extend %s', + $keyType, + AbstractEnum::class + )); + } + + $this->keyType = $keyType; + $this->valueType = $valueType; + $this->allowNullValues = $allowNullValues; + $this->keyUniverse = $keyType::values(); + $this->values = array_fill(0, count($this->keyUniverse), null); + } + + public function __serialize(): array + { + $values = []; + + foreach ($this->values as $ordinal => $value) { + if (null === $value) { + continue; + } + + $values[$ordinal] = $this->unmaskNull($value); + } + + return [ + 'keyType' => $this->keyType, + 'valueType' => $this->valueType, + 'allowNullValues' => $this->allowNullValues, + 'values' => $values, + ]; + } + + public function __unserialize(array $data): void + { + $this->unserialize(serialize($data)); + } + + /** + * Checks whether the map types match the supplied ones. + * + * You should call this method when an EnumMap is passed to you and you want to ensure that it's made up of the + * correct types. + * + * @throws ExpectationException when supplied key type mismatches local key type + * @throws ExpectationException when supplied value type mismatches local value type + * @throws ExpectationException when the supplied map allows null values, abut should not + */ + public function expect(string $keyType, string $valueType, bool $allowNullValues) : void + { + if ($keyType !== $this->keyType) { + throw new ExpectationException(sprintf( + 'Callee expected an EnumMap with key type %s, but got %s', + $keyType, + $this->keyType + )); + } + + if ($valueType !== $this->valueType) { + throw new ExpectationException(sprintf( + 'Callee expected an EnumMap with value type %s, but got %s', + $keyType, + $this->keyType + )); + } + + if ($allowNullValues !== $this->allowNullValues) { + throw new ExpectationException(sprintf( + 'Callee expected an EnumMap with nullable flag %s, but got %s', + ($allowNullValues ? 'true' : 'false'), + ($this->allowNullValues ? 'true' : 'false') + )); + } + } + + /** + * Returns the number of key-value mappings in this map. + */ + public function size() : int + { + return $this->size; + } + + /** + * Returns true if this map maps one or more keys to the specified value. + */ + public function containsValue($value) : bool + { + return in_array($this->maskNull($value), $this->values, true); + } + + /** + * Returns true if this map contains a mapping for the specified key. + */ + public function containsKey(AbstractEnum $key) : bool + { + $this->checkKeyType($key); + return null !== $this->values[$key->ordinal()]; + } + + /** + * Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. + * + * More formally, if this map contains a mapping from a key to a value, then this method returns the value; + * otherwise it returns null (there can be at most one such mapping). + * + * A return value of null does not necessarily indicate that the map contains no mapping for the key; it's also + * possible that hte map explicitly maps the key to null. The {@see self::containsKey()} operation may be used to + * distinguish these two cases. + * + * @return mixed + */ + public function get(AbstractEnum $key) + { + $this->checkKeyType($key); + return $this->unmaskNull($this->values[$key->ordinal()]); + } + + /** + * Associates the specified value with the specified key in this map. + * + * If the map previously contained a mapping for this key, the old value is replaced. + * + * @return mixed the previous value associated with the specified key, or null if there was no mapping for the key. + * (a null return can also indicate that the map previously associated null with the specified key.) + * @throws IllegalArgumentException when the passed values does not match the internal value type + */ + public function put(AbstractEnum $key, $value) + { + $this->checkKeyType($key); + + if (! $this->isValidValue($value)) { + throw new IllegalArgumentException(sprintf('Value is not of type %s', $this->valueType)); + } + + $index = $key->ordinal(); + $oldValue = $this->values[$index]; + $this->values[$index] = $this->maskNull($value); + + if (null === $oldValue) { + ++$this->size; + } + + return $this->unmaskNull($oldValue); + } + + /** + * Removes the mapping for this key frm this map if present. + * + * @return mixed the previous value associated with the specified key, or null if there was no mapping for the key. + * (a null return can also indicate that the map previously associated null with the specified key.) + */ + public function remove(AbstractEnum $key) + { + $this->checkKeyType($key); + + $index = $key->ordinal(); + $oldValue = $this->values[$index]; + $this->values[$index] = null; + + if (null !== $oldValue) { + --$this->size; + } + + return $this->unmaskNull($oldValue); + } + + /** + * Removes all mappings from this map. + */ + public function clear() : void + { + $this->values = array_fill(0, count($this->keyUniverse), null); + $this->size = 0; + } + + /** + * Compares the specified map with this map for quality. + * + * Returns true if the two maps represent the same mappings. + */ + public function equals(self $other) : bool + { + if ($this === $other) { + return true; + } + + if ($this->size !== $other->size) { + return false; + } + + return $this->values === $other->values; + } + + /** + * Returns the values contained in this map. + * + * The array will contain the values in the order their corresponding keys appear in the map, which is their natural + * order (the order in which the num constants are declared). + */ + public function values() : array + { + return array_values(array_map(function ($value) { + return $this->unmaskNull($value); + }, array_filter($this->values, function ($value) : bool { + return null !== $value; + }))); + } + + public function serialize() : string + { + return serialize($this->__serialize()); + } + + public function unserialize($serialized) : void + { + $data = unserialize($serialized); + $this->__construct($data['keyType'], $data['valueType'], $data['allowNullValues']); + + foreach ($this->keyUniverse as $key) { + if (array_key_exists($key->ordinal(), $data['values'])) { + $this->put($key, $data['values'][$key->ordinal()]); + } + } + } + + public function getIterator() : Traversable + { + foreach ($this->keyUniverse as $key) { + if (null === $this->values[$key->ordinal()]) { + continue; + } + + yield $key => $this->unmaskNull($this->values[$key->ordinal()]); + } + } + + private function maskNull($value) + { + if (null === $value) { + return NullValue::instance(); + } + + return $value; + } + + private function unmaskNull($value) + { + if ($value instanceof NullValue) { + return null; + } + + return $value; + } + + /** + * @throws IllegalArgumentException when the passed key does not match the internal key type + */ + private function checkKeyType(AbstractEnum $key) : void + { + if (get_class($key) !== $this->keyType) { + throw new IllegalArgumentException(sprintf( + 'Object of type %s is not the same type as %s', + get_class($key), + $this->keyType + )); + } + } + + private function isValidValue($value) : bool + { + if (null === $value) { + if ($this->allowNullValues) { + return true; + } + + return false; + } + + switch ($this->valueType) { + case 'mixed': + return true; + + case 'bool': + case 'boolean': + return is_bool($value); + + case 'int': + case 'integer': + return is_int($value); + + case 'float': + case 'double': + return is_float($value); + + case 'string': + return is_string($value); + + case 'object': + return is_object($value); + + case 'array': + return is_array($value); + } + + return $value instanceof $this->valueType; + } +} diff --git a/vendor/dasprid/enum/src/Exception/CloneNotSupportedException.php b/vendor/dasprid/enum/src/Exception/CloneNotSupportedException.php new file mode 100644 index 000000000..4b37dbebe --- /dev/null +++ b/vendor/dasprid/enum/src/Exception/CloneNotSupportedException.php @@ -0,0 +1,10 @@ +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. diff --git a/vendor/doctrine/instantiator/composer.json b/vendor/doctrine/instantiator/composer.json new file mode 100644 index 000000000..179145e87 --- /dev/null +++ b/vendor/doctrine/instantiator/composer.json @@ -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 + } + } +} diff --git a/vendor/doctrine/instantiator/docs/en/index.rst b/vendor/doctrine/instantiator/docs/en/index.rst new file mode 100644 index 000000000..0c85da0bc --- /dev/null +++ b/vendor/doctrine/instantiator/docs/en/index.rst @@ -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 + + 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 diff --git a/vendor/doctrine/instantiator/docs/en/sidebar.rst b/vendor/doctrine/instantiator/docs/en/sidebar.rst new file mode 100644 index 000000000..0c3647914 --- /dev/null +++ b/vendor/doctrine/instantiator/docs/en/sidebar.rst @@ -0,0 +1,4 @@ +.. toctree:: + :depth: 3 + + index diff --git a/vendor/doctrine/instantiator/psalm.xml b/vendor/doctrine/instantiator/psalm.xml new file mode 100644 index 000000000..e9b622b3b --- /dev/null +++ b/vendor/doctrine/instantiator/psalm.xml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php new file mode 100644 index 000000000..1e591928d --- /dev/null +++ b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php @@ -0,0 +1,14 @@ + $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, + )); + } +} diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php new file mode 100644 index 000000000..4f70ded20 --- /dev/null +++ b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php @@ -0,0 +1,61 @@ + $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 $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), + ); + } +} diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php new file mode 100644 index 000000000..f803f89aa --- /dev/null +++ b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php @@ -0,0 +1,255 @@ + $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 $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 $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 $className + * + * @phpstan-return ReflectionClass + * + * @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 $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 $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 $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 $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 $reflectionClass + * + * @template T of object + */ + private function isSafeToClone(ReflectionClass $reflectionClass): bool + { + return $reflectionClass->isCloneable() + && ! $reflectionClass->hasMethod('__clone') + && ! $reflectionClass->isSubclassOf(ArrayIterator::class); + } +} diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php new file mode 100644 index 000000000..c6ebe351b --- /dev/null +++ b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php @@ -0,0 +1,24 @@ + $className + * + * @phpstan-return T + * + * @throws ExceptionInterface + * + * @template T of object + */ + public function instantiate(string $className): object; +} diff --git a/vendor/doctrine/lexer/LICENSE b/vendor/doctrine/lexer/LICENSE new file mode 100644 index 000000000..e8fdec4af --- /dev/null +++ b/vendor/doctrine/lexer/LICENSE @@ -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. diff --git a/vendor/doctrine/lexer/README.md b/vendor/doctrine/lexer/README.md new file mode 100644 index 000000000..784f2a271 --- /dev/null +++ b/vendor/doctrine/lexer/README.md @@ -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 diff --git a/vendor/doctrine/lexer/UPGRADE.md b/vendor/doctrine/lexer/UPGRADE.md new file mode 100644 index 000000000..1933fcb2e --- /dev/null +++ b/vendor/doctrine/lexer/UPGRADE.md @@ -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. diff --git a/vendor/doctrine/lexer/composer.json b/vendor/doctrine/lexer/composer.json new file mode 100644 index 000000000..995dafa0d --- /dev/null +++ b/vendor/doctrine/lexer/composer.json @@ -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 + } +} diff --git a/vendor/doctrine/lexer/src/AbstractLexer.php b/vendor/doctrine/lexer/src/AbstractLexer.php new file mode 100644 index 000000000..2436885e4 --- /dev/null +++ b/vendor/doctrine/lexer/src/AbstractLexer.php @@ -0,0 +1,328 @@ +> + */ + 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|null + */ + public Token|null $lookahead; + + /** + * The last matched/seen token. + * + * @var Token|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 $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|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|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); +} diff --git a/vendor/doctrine/lexer/src/Token.php b/vendor/doctrine/lexer/src/Token.php new file mode 100644 index 000000000..b6df69465 --- /dev/null +++ b/vendor/doctrine/lexer/src/Token.php @@ -0,0 +1,56 @@ +value = $value; + $this->type = $type; + $this->position = $position; + } + + /** @param T ...$types */ + public function isA(...$types): bool + { + return in_array($this->type, $types, true); + } +} diff --git a/vendor/endroid/qr-code/LICENSE b/vendor/endroid/qr-code/LICENSE new file mode 100644 index 000000000..7f8b69ac9 --- /dev/null +++ b/vendor/endroid/qr-code/LICENSE @@ -0,0 +1,19 @@ +Copyright 2025 (c) Jeroen van den Enden + +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. diff --git a/vendor/endroid/qr-code/README.md b/vendor/endroid/qr-code/README.md new file mode 100644 index 000000000..c743596d7 --- /dev/null +++ b/vendor/endroid/qr-code/README.md @@ -0,0 +1,230 @@ +# QR Code + +*By [endroid](https://endroid.nl/)* + +All my work is coffeerighted :coffee: :wink: +If you like my work please support me by visiting the [sponsor page](https://github.com/sponsors/endroid) or you can [buy me a coffee](https://www.buymeacoffee.com/endroid) :coffee: + +[![Latest Stable Version](http://img.shields.io/packagist/v/endroid/qr-code.svg)](https://packagist.org/packages/endroid/qr-code) +[![Build Status](https://github.com/endroid/qr-code/workflows/CI/badge.svg)](https://github.com/endroid/qr-code/actions) +[![Total Downloads](http://img.shields.io/packagist/dt/endroid/qr-code.svg)](https://packagist.org/packages/endroid/qr-code) +[![Monthly Downloads](http://img.shields.io/packagist/dm/endroid/qr-code.svg)](https://packagist.org/packages/endroid/qr-code) +[![License](http://img.shields.io/packagist/l/endroid/qr-code.svg)](https://packagist.org/packages/endroid/qr-code) + +This library helps you generate QR codes in a jiffy. Makes use of [bacon/bacon-qr-code](https://github.com/Bacon/BaconQrCode) +to generate the matrix and [khanamiryan/qrcode-detector-decoder](https://github.com/khanamiryan/php-qrcode-detector-decoder) +for validating generated QR codes. Further extended with Twig extensions, generation routes, a factory and a +Symfony bundle for easy installation and configuration. Different writers are provided to generate the QR code +as PNG, WebP, SVG, EPS or in binary format. + +## Sponsored by + +[![Blackfire.io](.github/blackfire.png)](https://www.blackfire.io) + +## Installation + +Use [Composer](https://getcomposer.org/) to install the library. Also make sure you have enabled and configured the +[GD extension](https://www.php.net/manual/en/book.image.php) if you want to generate images. + +``` bash + composer require endroid/qr-code +``` + +## Usage: using the builder + +```php +use Endroid\QrCode\Builder\Builder; +use Endroid\QrCode\Encoding\Encoding; +use Endroid\QrCode\ErrorCorrectionLevel; +use Endroid\QrCode\Label\LabelAlignment; +use Endroid\QrCode\Label\Font\OpenSans; +use Endroid\QrCode\RoundBlockSizeMode; +use Endroid\QrCode\Writer\PngWriter; + +$builder = new Builder( + writer: new PngWriter(), + writerOptions: [], + validateResult: false, + data: 'Custom QR code contents', + encoding: new Encoding('UTF-8'), + errorCorrectionLevel: ErrorCorrectionLevel::High, + size: 300, + margin: 10, + roundBlockSizeMode: RoundBlockSizeMode::Margin, + logoPath: __DIR__.'/assets/bender.png', + logoResizeToWidth: 50, + logoPunchoutBackground: true, + labelText: 'This is the label', + labelFont: new OpenSans(20), + labelAlignment: LabelAlignment::Center +); + +$result = $builder->build(); +``` + +## Usage: without using the builder + +```php +use Endroid\QrCode\Color\Color; +use Endroid\QrCode\Encoding\Encoding; +use Endroid\QrCode\ErrorCorrectionLevel; +use Endroid\QrCode\QrCode; +use Endroid\QrCode\Label\Label; +use Endroid\QrCode\Logo\Logo; +use Endroid\QrCode\RoundBlockSizeMode; +use Endroid\QrCode\Writer\PngWriter; +use Endroid\QrCode\Writer\ValidationException; + +$writer = new PngWriter(); + +// Create QR code +$qrCode = new QrCode( + data: 'Life is too short to be generating QR codes', + encoding: new Encoding('UTF-8'), + errorCorrectionLevel: ErrorCorrectionLevel::Low, + size: 300, + margin: 10, + roundBlockSizeMode: RoundBlockSizeMode::Margin, + foregroundColor: new Color(0, 0, 0), + backgroundColor: new Color(255, 255, 255) +); + +// Create generic logo +$logo = new Logo( + path: __DIR__.'/assets/bender.png', + resizeToWidth: 50, + punchoutBackground: true +); + +// Create generic label +$label = new Label( + text: 'Label', + textColor: new Color(255, 0, 0) +); + +$result = $writer->write($qrCode, $logo, $label); + +// Validate the result +$writer->validateResult($result, 'Life is too short to be generating QR codes'); +``` + +## Usage: working with results + +```php + +// Directly output the QR code +header('Content-Type: '.$result->getMimeType()); +echo $result->getString(); + +// Save it to a file +$result->saveToFile(__DIR__.'/qrcode.png'); + +// Generate a data URI to include image data inline (i.e. inside an tag) +$dataUri = $result->getDataUri(); +``` + +![QR Code](.github/example.png) + +### Writer options + +Some writers provide writer options. Each available writer option is can be +found as a constant prefixed with WRITER_OPTION_ in the writer class. + +* `PdfWriter` + * `unit`: unit of measurement (default: mm) + * `fpdf`: PDF to place the image in (default: new PDF) + * `x`: image offset (default: 0) + * `y`: image offset (default: 0) + * `link`: a URL or an identifier returned by `AddLink()`. +* `PngWriter` + * `compression_level`: compression level (0-9, default: -1 = zlib default) + * `number_of_colors`: number of colors (1-256, null for true color and transparency) +* `SvgWriter` + * `block_id`: id of the block element for external reference (default: block) + * `exclude_xml_declaration`: exclude XML declaration (default: false) + * `exclude_svg_width_and_height`: exclude width and height (default: false) + * `force_xlink_href`: forces xlink namespace in case of compatibility issues (default: false) + * `compact`: create using `path` element, otherwise use `defs` and `use` (default: true) +* `WebPWriter` + * `quality`: image quality (0-100, default: 80) + +You can provide any writer options like this. + +```php +use Endroid\QrCode\Writer\SvgWriter; + +$builder = new Builder( + writer: new SvgWriter(), + writerOptions: [ + SvgWriter::WRITER_OPTION_EXCLUDE_XML_DECLARATION => true + ] +); +``` + +### Encoding + +If you use a barcode scanner you can have some troubles while reading the +generated QR codes. Depending on the encoding you chose you will have an extra +amount of data corresponding to the ECI block. Some barcode scanner are not +programmed to interpret this block of information. To ensure a maximum +compatibility you can use the `ISO-8859-1` encoding that is the default +encoding used by barcode scanners (if your character set supports it, +i.e. no Chinese characters are present). + +### Round block size mode + +By default block sizes are rounded to guarantee sharp images and improve +readability. However some other rounding variants are available. + +* `margin (default)`: the size of the QR code is shrunk if necessary but the size + of the final image remains unchanged due to additional margin being added. +* `enlarge`: the size of the QR code and the final image are enlarged when + rounding differences occur. +* `shrink`: the size of the QR code and the final image are + shrunk when rounding differences occur. +* `none`: No rounding. This mode can be used when blocks don't need to be rounded + to pixels (for instance SVG). + +## Readability + +The readability of a QR code is primarily determined by the size, the input +length, the error correction level and any possible logo over the image so you +can tweak these parameters if you are looking for optimal results. You can also +check $qrCode->getRoundBlockSize() value to see if block dimensions are rounded +so that the image is more sharp and readable. Please note that rounding block +size can result in additional padding to compensate for the rounding difference. +And finally the encoding (default UTF-8 to support large character sets) can be +set to `ISO-8859-1` if possible to improve readability. + +## Validating the generated QR code + +If you need to be extra sure the QR code you generated is readable and contains +the exact data you requested you can enable the validation reader, which is +disabled by default. You can do this either via the builder or directly on any +writer that supports validation. See the examples above. + +Please note that validation affects performance so only use it in case of problems. + +## Symfony integration + +The [endroid/qr-code-bundle](https://github.com/endroid/qr-code-bundle) +integrates the QR code library in Symfony for an even better experience. + +* Configure your defaults (like image size, default writer etc.) +* Support for multiple configurations and injection via aliases +* Generate QR codes for defined configurations via URL like /qr-code//Hello +* Generate QR codes or URLs directly from Twig using dedicated functions + +Read the [bundle documentation](https://github.com/endroid/qr-code-bundle) +for more information. + +## Versioning + +Version numbers follow the MAJOR.MINOR.PATCH scheme. Backwards compatibility +breaking changes will be kept to a minimum but be aware that these can occur. +Lock your dependencies for production and test your code when upgrading. + +## License + +This bundle is under the MIT license. For the full copyright and license +information please view the LICENSE file that was distributed with this source code. diff --git a/vendor/endroid/qr-code/assets/open_sans.ttf b/vendor/endroid/qr-code/assets/open_sans.ttf new file mode 100644 index 0000000000000000000000000000000000000000..db433349b7047f72f40072630c1bc110620bf09e GIT binary patch literal 217360 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 !}#gv~NV!5|5YF|kE)J0y^zWbk4>=%|6F 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 literal 0 HcmV?d00001 diff --git a/vendor/endroid/qr-code/composer.json b/vendor/endroid/qr-code/composer.json new file mode 100644 index 000000000..03a54d696 --- /dev/null +++ b/vendor/endroid/qr-code/composer.json @@ -0,0 +1,54 @@ +{ + "name": "endroid/qr-code", + "description": "Endroid QR Code", + "keywords": ["endroid", "qrcode", "qr", "code", "php"], + "homepage": "https://github.com/endroid/qr-code", + "type": "library", + "license": "MIT", + "authors": [ + { + "name": "Jeroen van den Enden", + "email": "info@endroid.nl" + } + ], + "require": { + "php": "^8.2", + "bacon/bacon-qr-code": "^3.0" + }, + "require-dev": { + "ext-gd": "*", + "endroid/quality": "dev-main", + "khanamiryan/qrcode-detector-decoder": "^2.0.2", + "setasign/fpdf": "^1.8.2" + }, + "suggest": { + "ext-gd": "Enables you to write PNG images", + "khanamiryan/qrcode-detector-decoder": "Enables you to use the image validator", + "roave/security-advisories": "Makes sure package versions with known security issues are not installed", + "setasign/fpdf": "Enables you to use the PDF writer" + }, + "autoload": { + "psr-4": { + "Endroid\\QrCode\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Endroid\\QrCode\\Tests\\": "tests/" + } + }, + "config": { + "sort-packages": true, + "preferred-install": { + "endroid/*": "source" + }, + "allow-plugins": { + "endroid/installer": true + } + }, + "extra": { + "branch-alias": { + "dev-main": "6.x-dev" + } + } +} diff --git a/vendor/endroid/qr-code/src/Bacon/ErrorCorrectionLevelConverter.php b/vendor/endroid/qr-code/src/Bacon/ErrorCorrectionLevelConverter.php new file mode 100644 index 000000000..ae2be5944 --- /dev/null +++ b/vendor/endroid/qr-code/src/Bacon/ErrorCorrectionLevelConverter.php @@ -0,0 +1,21 @@ + BaconErrorCorrectionLevel::valueOf('L'), + ErrorCorrectionLevel::Medium => BaconErrorCorrectionLevel::valueOf('M'), + ErrorCorrectionLevel::Quartile => BaconErrorCorrectionLevel::valueOf('Q'), + ErrorCorrectionLevel::High => BaconErrorCorrectionLevel::valueOf('H'), + }; + } +} diff --git a/vendor/endroid/qr-code/src/Bacon/MatrixFactory.php b/vendor/endroid/qr-code/src/Bacon/MatrixFactory.php new file mode 100644 index 000000000..1d6a9a296 --- /dev/null +++ b/vendor/endroid/qr-code/src/Bacon/MatrixFactory.php @@ -0,0 +1,32 @@ +getErrorCorrectionLevel()); + $baconMatrix = Encoder::encode($qrCode->getData(), $baconErrorCorrectionLevel, strval($qrCode->getEncoding()))->getMatrix(); + + $blockValues = []; + $columnCount = $baconMatrix->getWidth(); + $rowCount = $baconMatrix->getHeight(); + for ($rowIndex = 0; $rowIndex < $rowCount; ++$rowIndex) { + $blockValues[$rowIndex] = []; + for ($columnIndex = 0; $columnIndex < $columnCount; ++$columnIndex) { + $blockValues[$rowIndex][$columnIndex] = $baconMatrix->get($columnIndex, $rowIndex); + } + } + + return new Matrix($blockValues, $qrCode->getSize(), $qrCode->getMargin(), $qrCode->getRoundBlockSizeMode()); + } +} diff --git a/vendor/endroid/qr-code/src/Builder/Builder.php b/vendor/endroid/qr-code/src/Builder/Builder.php new file mode 100644 index 000000000..89c6441ef --- /dev/null +++ b/vendor/endroid/qr-code/src/Builder/Builder.php @@ -0,0 +1,128 @@ + */ + private array $writerOptions = [], + private bool $validateResult = false, + // QrCode options + private string $data = '', + private EncodingInterface $encoding = new Encoding('UTF-8'), + private ErrorCorrectionLevel $errorCorrectionLevel = ErrorCorrectionLevel::Low, + private int $size = 300, + private int $margin = 10, + private RoundBlockSizeMode $roundBlockSizeMode = RoundBlockSizeMode::Margin, + private ColorInterface $foregroundColor = new Color(0, 0, 0), + private ColorInterface $backgroundColor = new Color(255, 255, 255), + // Label options + private string $labelText = '', + private FontInterface $labelFont = new Font(__DIR__.'/../../assets/open_sans.ttf', 16), + private LabelAlignment $labelAlignment = LabelAlignment::Center, + private MarginInterface $labelMargin = new Margin(0, 10, 10, 10), + private ColorInterface $labelTextColor = new Color(0, 0, 0), + // Logo options + private string $logoPath = '', + private ?int $logoResizeToWidth = null, + private ?int $logoResizeToHeight = null, + private bool $logoPunchoutBackground = false, + ) { + } + + /** @param array|null $writerOptions */ + public function build( + ?WriterInterface $writer = null, + ?array $writerOptions = null, + ?bool $validateResult = null, + // QrCode options + ?string $data = null, + ?EncodingInterface $encoding = null, + ?ErrorCorrectionLevel $errorCorrectionLevel = null, + ?int $size = null, + ?int $margin = null, + ?RoundBlockSizeMode $roundBlockSizeMode = null, + ?ColorInterface $foregroundColor = null, + ?ColorInterface $backgroundColor = null, + // Label options + ?string $labelText = null, + ?FontInterface $labelFont = null, + ?LabelAlignment $labelAlignment = null, + ?MarginInterface $labelMargin = null, + ?ColorInterface $labelTextColor = null, + // Logo options + ?string $logoPath = null, + ?int $logoResizeToWidth = null, + ?int $logoResizeToHeight = null, + ?bool $logoPunchoutBackground = null, + ): ResultInterface { + if ($this->validateResult && !$this->writer instanceof ValidatingWriterInterface) { + throw ValidationException::createForUnsupportedWriter(get_class($this->writer)); + } + + $writer = $writer ?? $this->writer; + $writerOptions = $writerOptions ?? $this->writerOptions; + $validateResult = $validateResult ?? $this->validateResult; + + $createLabel = $this->labelText || $labelText; + $createLogo = $this->logoPath || $logoPath; + + $qrCode = new QrCode( + data: $data ?? $this->data, + encoding: $encoding ?? $this->encoding, + errorCorrectionLevel: $errorCorrectionLevel ?? $this->errorCorrectionLevel, + size: $size ?? $this->size, + margin: $margin ?? $this->margin, + roundBlockSizeMode: $roundBlockSizeMode ?? $this->roundBlockSizeMode, + foregroundColor: $foregroundColor ?? $this->foregroundColor, + backgroundColor: $backgroundColor ?? $this->backgroundColor + ); + + $logo = $createLogo ? new Logo( + path: $logoPath ?? $this->logoPath, + resizeToWidth: $logoResizeToWidth ?? $this->logoResizeToWidth, + resizeToHeight: $logoResizeToHeight ?? $this->logoResizeToHeight, + punchoutBackground: $logoPunchoutBackground ?? $this->logoPunchoutBackground + ) : null; + + $label = $createLabel ? new Label( + text: $labelText ?? $this->labelText, + font: $labelFont ?? $this->labelFont, + alignment: $labelAlignment ?? $this->labelAlignment, + margin: $labelMargin ?? $this->labelMargin, + textColor: $labelTextColor ?? $this->labelTextColor + ) : null; + + $result = $writer->write($qrCode, $logo, $label, $writerOptions); + + if ($validateResult && $writer instanceof ValidatingWriterInterface) { + $writer->validateResult($result, $qrCode->getData()); + } + + return $result; + } +} diff --git a/vendor/endroid/qr-code/src/Builder/BuilderInterface.php b/vendor/endroid/qr-code/src/Builder/BuilderInterface.php new file mode 100644 index 000000000..9a14dc002 --- /dev/null +++ b/vendor/endroid/qr-code/src/Builder/BuilderInterface.php @@ -0,0 +1,45 @@ +|null $writerOptions */ + public function build( + ?WriterInterface $writer = null, + ?array $writerOptions = null, + ?bool $validateResult = null, + // QrCode options + ?string $data = null, + ?EncodingInterface $encoding = null, + ?ErrorCorrectionLevel $errorCorrectionLevel = null, + ?int $size = null, + ?int $margin = null, + ?RoundBlockSizeMode $roundBlockSizeMode = null, + ?ColorInterface $foregroundColor = null, + ?ColorInterface $backgroundColor = null, + // Label options + ?string $labelText = null, + ?FontInterface $labelFont = null, + ?LabelAlignment $labelAlignment = null, + ?MarginInterface $labelMargin = null, + ?ColorInterface $labelTextColor = null, + // Logo options + ?string $logoPath = null, + ?int $logoResizeToWidth = null, + ?int $logoResizeToHeight = null, + ?bool $logoPunchoutBackground = null, + ): ResultInterface; +} diff --git a/vendor/endroid/qr-code/src/Builder/BuilderRegistry.php b/vendor/endroid/qr-code/src/Builder/BuilderRegistry.php new file mode 100644 index 000000000..13b9c96f0 --- /dev/null +++ b/vendor/endroid/qr-code/src/Builder/BuilderRegistry.php @@ -0,0 +1,25 @@ + */ + private array $builders = []; + + public function set(string $name, BuilderInterface $builder): void + { + $this->builders[$name] = $builder; + } + + public function get(string $name): BuilderInterface + { + if (!isset($this->builders[$name])) { + throw new \Exception(sprintf('Builder with name "%s" not available from registry', $name)); + } + + return $this->builders[$name]; + } +} diff --git a/vendor/endroid/qr-code/src/Builder/BuilderRegistryInterface.php b/vendor/endroid/qr-code/src/Builder/BuilderRegistryInterface.php new file mode 100644 index 000000000..0d9fb3799 --- /dev/null +++ b/vendor/endroid/qr-code/src/Builder/BuilderRegistryInterface.php @@ -0,0 +1,12 @@ +red; + } + + public function getGreen(): int + { + return $this->green; + } + + public function getBlue(): int + { + return $this->blue; + } + + public function getAlpha(): int + { + return $this->alpha; + } + + public function getOpacity(): float + { + return 1 - $this->alpha / 127; + } + + public function getHex(): string + { + return sprintf('#%02x%02x%02x', $this->red, $this->green, $this->blue); + } + + public function toArray(): array + { + return [ + 'red' => $this->red, + 'green' => $this->green, + 'blue' => $this->blue, + 'alpha' => $this->alpha, + ]; + } +} diff --git a/vendor/endroid/qr-code/src/Color/ColorInterface.php b/vendor/endroid/qr-code/src/Color/ColorInterface.php new file mode 100644 index 000000000..398be260d --- /dev/null +++ b/vendor/endroid/qr-code/src/Color/ColorInterface.php @@ -0,0 +1,23 @@ + */ + public function toArray(): array; +} diff --git a/vendor/endroid/qr-code/src/Encoding/Encoding.php b/vendor/endroid/qr-code/src/Encoding/Encoding.php new file mode 100644 index 000000000..d6da27b5f --- /dev/null +++ b/vendor/endroid/qr-code/src/Encoding/Encoding.php @@ -0,0 +1,27 @@ +value; + } +} diff --git a/vendor/endroid/qr-code/src/Encoding/EncodingInterface.php b/vendor/endroid/qr-code/src/Encoding/EncodingInterface.php new file mode 100644 index 000000000..17748a4b2 --- /dev/null +++ b/vendor/endroid/qr-code/src/Encoding/EncodingInterface.php @@ -0,0 +1,10 @@ +getText(), "\n")) { + throw new \Exception('Label does not support line breaks'); + } + + if (!function_exists('imagettfbbox')) { + throw new \Exception('Function "imagettfbbox" does not exist: check your FreeType installation'); + } + + $labelBox = imagettfbbox($label->getFont()->getSize(), 0, $label->getFont()->getPath(), $label->getText()); + + if (!is_array($labelBox)) { + throw new \Exception('Unable to generate label image box: check your FreeType installation'); + } + + return new self( + intval($labelBox[2] - $labelBox[0]), + intval($labelBox[0] - $labelBox[7]) + ); + } + + public function getWidth(): int + { + return $this->width; + } + + public function getHeight(): int + { + return $this->height; + } +} diff --git a/vendor/endroid/qr-code/src/ImageData/LogoImageData.php b/vendor/endroid/qr-code/src/ImageData/LogoImageData.php new file mode 100644 index 000000000..2e3358e67 --- /dev/null +++ b/vendor/endroid/qr-code/src/ImageData/LogoImageData.php @@ -0,0 +1,159 @@ +getPath()); + + if (!is_string($data)) { + $errorDetails = error_get_last()['message'] ?? 'invalid data'; + throw new \Exception(sprintf('Could not read logo image data from path "%s": %s', $logo->getPath(), $errorDetails)); + } + + if (false !== filter_var($logo->getPath(), FILTER_VALIDATE_URL)) { + $mimeType = self::detectMimeTypeFromUrl($logo->getPath()); + } else { + $mimeType = self::detectMimeTypeFromPath($logo->getPath()); + } + + $width = $logo->getResizeToWidth(); + $height = $logo->getResizeToHeight(); + + if ('image/svg+xml' === $mimeType) { + if (null === $width || null === $height) { + throw new \Exception('SVG Logos require an explicitly set resize width and height'); + } + + return new self($data, null, $mimeType, $width, $height, $logo->getPunchoutBackground()); + } + + if (!function_exists('imagecreatefromstring')) { + throw new \Exception('Function "imagecreatefromstring" does not exist: check your GD installation'); + } + + error_clear_last(); + $image = @imagecreatefromstring($data); + + if (!$image) { + $errorDetails = error_get_last()['message'] ?? 'invalid data'; + throw new \Exception(sprintf('Unable to parse image data at path "%s": %s', $logo->getPath(), $errorDetails)); + } + + // No target width and height specified: use from original image + if (null !== $width && null !== $height) { + return new self($data, $image, $mimeType, $width, $height, $logo->getPunchoutBackground()); + } + + // Only target width specified: calculate height + if (null !== $width && null === $height) { + return new self($data, $image, $mimeType, $width, intval(imagesy($image) * $width / imagesx($image)), $logo->getPunchoutBackground()); + } + + // Only target height specified: calculate width + if (null === $width && null !== $height) { + return new self($data, $image, $mimeType, intval(imagesx($image) * $height / imagesy($image)), $height, $logo->getPunchoutBackground()); + } + + return new self($data, $image, $mimeType, imagesx($image), imagesy($image), $logo->getPunchoutBackground()); + } + + public function getData(): string + { + return $this->data; + } + + public function getImage(): \GdImage + { + if (!$this->image instanceof \GdImage) { + throw new \Exception('SVG Images have no image resource'); + } + + return $this->image; + } + + public function getMimeType(): string + { + return $this->mimeType; + } + + public function getWidth(): int + { + return $this->width; + } + + public function getHeight(): int + { + return $this->height; + } + + public function getPunchoutBackground(): bool + { + return $this->punchoutBackground; + } + + public function createDataUri(): string + { + return 'data:'.$this->mimeType.';base64,'.base64_encode($this->data); + } + + private static function detectMimeTypeFromUrl(string $url): string + { + $headers = get_headers($url, true); + + if (!is_array($headers)) { + throw new \Exception(sprintf('Could not retrieve headers to determine content type for logo URL "%s"', $url)); + } + + $headers = array_combine(array_map('strtolower', array_keys($headers)), $headers); + + if (!isset($headers['content-type'])) { + throw new \Exception(sprintf('Content type could not be determined for logo URL "%s"', $url)); + } + + return is_array($headers['content-type']) ? $headers['content-type'][1] : $headers['content-type']; + } + + private static function detectMimeTypeFromPath(string $path): string + { + if (!function_exists('mime_content_type')) { + throw new \Exception('You need the ext-fileinfo extension to determine logo mime type'); + } + + error_clear_last(); + $mimeType = @mime_content_type($path); + + if (!is_string($mimeType)) { + $errorDetails = error_get_last()['message'] ?? 'invalid data'; + throw new \Exception(sprintf('Could not determine mime type: %s', $errorDetails)); + } + + if (!preg_match('#^image/#', $mimeType)) { + throw new \Exception('Logo path is not an image'); + } + + // Passing mime type image/svg results in invisible images + if ('image/svg' === $mimeType) { + return 'image/svg+xml'; + } + + return $mimeType; + } +} diff --git a/vendor/endroid/qr-code/src/Label/Font/Font.php b/vendor/endroid/qr-code/src/Label/Font/Font.php new file mode 100644 index 000000000..e796c556c --- /dev/null +++ b/vendor/endroid/qr-code/src/Label/Font/Font.php @@ -0,0 +1,32 @@ +assertValidPath($path); + } + + private function assertValidPath(string $path): void + { + if (!file_exists($path)) { + throw new \Exception(sprintf('Invalid font path "%s"', $path)); + } + } + + public function getPath(): string + { + return $this->path; + } + + public function getSize(): int + { + return $this->size; + } +} diff --git a/vendor/endroid/qr-code/src/Label/Font/FontInterface.php b/vendor/endroid/qr-code/src/Label/Font/FontInterface.php new file mode 100644 index 000000000..1c0de9aa5 --- /dev/null +++ b/vendor/endroid/qr-code/src/Label/Font/FontInterface.php @@ -0,0 +1,12 @@ +size; + } +} diff --git a/vendor/endroid/qr-code/src/Label/Label.php b/vendor/endroid/qr-code/src/Label/Label.php new file mode 100644 index 000000000..d7a7abaa8 --- /dev/null +++ b/vendor/endroid/qr-code/src/Label/Label.php @@ -0,0 +1,49 @@ +text; + } + + public function getFont(): FontInterface + { + return $this->font; + } + + public function getAlignment(): LabelAlignment + { + return $this->alignment; + } + + public function getMargin(): MarginInterface + { + return $this->margin; + } + + public function getTextColor(): ColorInterface + { + return $this->textColor; + } +} diff --git a/vendor/endroid/qr-code/src/Label/LabelAlignment.php b/vendor/endroid/qr-code/src/Label/LabelAlignment.php new file mode 100644 index 000000000..b609fe450 --- /dev/null +++ b/vendor/endroid/qr-code/src/Label/LabelAlignment.php @@ -0,0 +1,12 @@ +top; + } + + public function getRight(): int + { + return $this->right; + } + + public function getBottom(): int + { + return $this->bottom; + } + + public function getLeft(): int + { + return $this->left; + } + + /** @return array */ + public function toArray(): array + { + return [ + 'top' => $this->top, + 'right' => $this->right, + 'bottom' => $this->bottom, + 'left' => $this->left, + ]; + } +} diff --git a/vendor/endroid/qr-code/src/Label/Margin/MarginInterface.php b/vendor/endroid/qr-code/src/Label/Margin/MarginInterface.php new file mode 100644 index 000000000..bc428bd79 --- /dev/null +++ b/vendor/endroid/qr-code/src/Label/Margin/MarginInterface.php @@ -0,0 +1,19 @@ + */ + public function toArray(): array; +} diff --git a/vendor/endroid/qr-code/src/Logo/Logo.php b/vendor/endroid/qr-code/src/Logo/Logo.php new file mode 100644 index 000000000..bc4691fd7 --- /dev/null +++ b/vendor/endroid/qr-code/src/Logo/Logo.php @@ -0,0 +1,36 @@ +path; + } + + public function getResizeToWidth(): ?int + { + return $this->resizeToWidth; + } + + public function getResizeToHeight(): ?int + { + return $this->resizeToHeight; + } + + public function getPunchoutBackground(): bool + { + return $this->punchoutBackground; + } +} diff --git a/vendor/endroid/qr-code/src/Logo/LogoInterface.php b/vendor/endroid/qr-code/src/Logo/LogoInterface.php new file mode 100644 index 000000000..13d940c1e --- /dev/null +++ b/vendor/endroid/qr-code/src/Logo/LogoInterface.php @@ -0,0 +1,16 @@ +> $blockValues */ + public function __construct( + private array $blockValues, + int $size, + int $margin, + RoundBlockSizeMode $roundBlockSizeMode, + ) { + $blockSize = $size / $this->getBlockCount(); + $innerSize = $size; + $outerSize = $size + 2 * $margin; + + switch ($roundBlockSizeMode) { + case RoundBlockSizeMode::Enlarge: + $blockSize = intval(ceil($blockSize)); + $innerSize = intval($blockSize * $this->getBlockCount()); + $outerSize = $innerSize + 2 * $margin; + break; + case RoundBlockSizeMode::Shrink: + $blockSize = intval(floor($blockSize)); + $innerSize = intval($blockSize * $this->getBlockCount()); + $outerSize = $innerSize + 2 * $margin; + break; + case RoundBlockSizeMode::Margin: + $blockSize = intval(floor($blockSize)); + $innerSize = intval($blockSize * $this->getBlockCount()); + break; + } + + if ($blockSize < 1) { + throw new BlockSizeTooSmallException('Too much data: increase image dimensions or lower error correction level'); + } + + $this->blockSize = $blockSize; + $this->innerSize = $innerSize; + $this->outerSize = $outerSize; + $this->marginLeft = intval(($this->outerSize - $this->innerSize) / 2); + $this->marginRight = $this->outerSize - $this->innerSize - $this->marginLeft; + } + + public function getBlockValue(int $rowIndex, int $columnIndex): int + { + return $this->blockValues[$rowIndex][$columnIndex]; + } + + public function getBlockCount(): int + { + return count($this->blockValues[0]); + } + + public function getBlockSize(): float + { + return $this->blockSize; + } + + public function getInnerSize(): int + { + return $this->innerSize; + } + + public function getOuterSize(): int + { + return $this->outerSize; + } + + public function getMarginLeft(): int + { + return $this->marginLeft; + } + + public function getMarginRight(): int + { + return $this->marginRight; + } +} diff --git a/vendor/endroid/qr-code/src/Matrix/MatrixFactoryInterface.php b/vendor/endroid/qr-code/src/Matrix/MatrixFactoryInterface.php new file mode 100644 index 000000000..be501f190 --- /dev/null +++ b/vendor/endroid/qr-code/src/Matrix/MatrixFactoryInterface.php @@ -0,0 +1,12 @@ +data; + } + + public function getEncoding(): EncodingInterface + { + return $this->encoding; + } + + public function getErrorCorrectionLevel(): ErrorCorrectionLevel + { + return $this->errorCorrectionLevel; + } + + public function getSize(): int + { + return $this->size; + } + + public function getMargin(): int + { + return $this->margin; + } + + public function getRoundBlockSizeMode(): RoundBlockSizeMode + { + return $this->roundBlockSizeMode; + } + + public function getForegroundColor(): ColorInterface + { + return $this->foregroundColor; + } + + public function getBackgroundColor(): ColorInterface + { + return $this->backgroundColor; + } +} diff --git a/vendor/endroid/qr-code/src/QrCodeInterface.php b/vendor/endroid/qr-code/src/QrCodeInterface.php new file mode 100644 index 000000000..1a7572624 --- /dev/null +++ b/vendor/endroid/qr-code/src/QrCodeInterface.php @@ -0,0 +1,27 @@ +create($qrCode); + } + + public function write(QrCodeInterface $qrCode, ?LogoInterface $logo = null, ?LabelInterface $label = null, array $options = []): ResultInterface + { + if (!extension_loaded('gd')) { + throw new \Exception('Unable to generate image: please check if the GD extension is enabled and configured correctly'); + } + + $matrix = $this->getMatrix($qrCode); + + $baseBlockSize = RoundBlockSizeMode::None === $qrCode->getRoundBlockSizeMode() ? 10 : intval($matrix->getBlockSize()); + $baseImage = imagecreatetruecolor($matrix->getBlockCount() * $baseBlockSize, $matrix->getBlockCount() * $baseBlockSize); + + if (!$baseImage) { + throw new \Exception('Unable to generate image: please check if the GD extension is enabled and configured correctly'); + } + + /** @var int $foregroundColor */ + $foregroundColor = imagecolorallocatealpha( + $baseImage, + $qrCode->getForegroundColor()->getRed(), + $qrCode->getForegroundColor()->getGreen(), + $qrCode->getForegroundColor()->getBlue(), + $qrCode->getForegroundColor()->getAlpha() + ); + + /** @var int $transparentColor */ + $transparentColor = imagecolorallocatealpha($baseImage, 255, 255, 255, 127); + + imagefill($baseImage, 0, 0, $transparentColor); + + for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) { + for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) { + if (1 === $matrix->getBlockValue($rowIndex, $columnIndex)) { + imagefilledrectangle( + $baseImage, + $columnIndex * $baseBlockSize, + $rowIndex * $baseBlockSize, + ($columnIndex + 1) * $baseBlockSize - 1, + ($rowIndex + 1) * $baseBlockSize - 1, + $foregroundColor + ); + } + } + } + + $targetWidth = $matrix->getOuterSize(); + $targetHeight = $matrix->getOuterSize(); + + if ($label instanceof LabelInterface) { + $labelImageData = LabelImageData::createForLabel($label); + $targetHeight += $labelImageData->getHeight() + $label->getMargin()->getTop() + $label->getMargin()->getBottom(); + } + + $targetImage = imagecreatetruecolor($targetWidth, $targetHeight); + + if (!$targetImage) { + throw new \Exception('Unable to generate image: please check if the GD extension is enabled and configured correctly'); + } + + /** @var int $backgroundColor */ + $backgroundColor = imagecolorallocatealpha( + $targetImage, + $qrCode->getBackgroundColor()->getRed(), + $qrCode->getBackgroundColor()->getGreen(), + $qrCode->getBackgroundColor()->getBlue(), + $qrCode->getBackgroundColor()->getAlpha() + ); + + imagefill($targetImage, 0, 0, $backgroundColor); + + imagecopyresampled( + $targetImage, + $baseImage, + $matrix->getMarginLeft(), + $matrix->getMarginLeft(), + 0, + 0, + $matrix->getInnerSize(), + $matrix->getInnerSize(), + imagesx($baseImage), + imagesy($baseImage) + ); + + if ($qrCode->getBackgroundColor()->getAlpha() > 0) { + imagesavealpha($targetImage, true); + } + + $result = new GdResult($matrix, $targetImage); + + if ($logo instanceof LogoInterface) { + $result = $this->addLogo($logo, $result); + } + + if ($label instanceof LabelInterface) { + $result = $this->addLabel($label, $result); + } + + return $result; + } + + private function addLogo(LogoInterface $logo, GdResult $result): GdResult + { + $logoImageData = LogoImageData::createForLogo($logo); + + if ('image/svg+xml' === $logoImageData->getMimeType()) { + throw new \Exception('PNG Writer does not support SVG logo'); + } + + $targetImage = $result->getImage(); + $matrix = $result->getMatrix(); + + if ($logoImageData->getPunchoutBackground()) { + /** @var int $transparent */ + $transparent = imagecolorallocatealpha($targetImage, 255, 255, 255, 127); + imagealphablending($targetImage, false); + $xOffsetStart = intval($matrix->getOuterSize() / 2 - $logoImageData->getWidth() / 2); + $yOffsetStart = intval($matrix->getOuterSize() / 2 - $logoImageData->getHeight() / 2); + for ($xOffset = $xOffsetStart; $xOffset < $xOffsetStart + $logoImageData->getWidth(); ++$xOffset) { + for ($yOffset = $yOffsetStart; $yOffset < $yOffsetStart + $logoImageData->getHeight(); ++$yOffset) { + imagesetpixel($targetImage, $xOffset, $yOffset, $transparent); + } + } + } + + imagecopyresampled( + $targetImage, + $logoImageData->getImage(), + intval($matrix->getOuterSize() / 2 - $logoImageData->getWidth() / 2), + intval($matrix->getOuterSize() / 2 - $logoImageData->getHeight() / 2), + 0, + 0, + $logoImageData->getWidth(), + $logoImageData->getHeight(), + imagesx($logoImageData->getImage()), + imagesy($logoImageData->getImage()) + ); + + return new GdResult($matrix, $targetImage); + } + + private function addLabel(LabelInterface $label, GdResult $result): GdResult + { + $targetImage = $result->getImage(); + + $labelImageData = LabelImageData::createForLabel($label); + + /** @var int $textColor */ + $textColor = imagecolorallocatealpha( + $targetImage, + $label->getTextColor()->getRed(), + $label->getTextColor()->getGreen(), + $label->getTextColor()->getBlue(), + $label->getTextColor()->getAlpha() + ); + + $x = intval(imagesx($targetImage) / 2 - $labelImageData->getWidth() / 2); + $y = imagesy($targetImage) - $label->getMargin()->getBottom(); + + if (LabelAlignment::Left === $label->getAlignment()) { + $x = $label->getMargin()->getLeft(); + } elseif (LabelAlignment::Right === $label->getAlignment()) { + $x = imagesx($targetImage) - $labelImageData->getWidth() - $label->getMargin()->getRight(); + } + + imagettftext($targetImage, $label->getFont()->getSize(), 0, $x, $y, $textColor, $label->getFont()->getPath(), $label->getText()); + + return new GdResult($result->getMatrix(), $targetImage); + } + + public function validateResult(ResultInterface $result, string $expectedData): void + { + $string = $result->getString(); + + if (!class_exists(QrReader::class)) { + throw ValidationException::createForMissingPackage('khanamiryan/qrcode-detector-decoder'); + } + + $reader = new QrReader($string, QrReader::SOURCE_TYPE_BLOB); + if ($reader->text() !== $expectedData) { + throw ValidationException::createForInvalidData($expectedData, strval($reader->text())); + } + } +} diff --git a/vendor/endroid/qr-code/src/Writer/BinaryWriter.php b/vendor/endroid/qr-code/src/Writer/BinaryWriter.php new file mode 100644 index 000000000..8e0c7e8ca --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/BinaryWriter.php @@ -0,0 +1,23 @@ +create($qrCode); + + return new BinaryResult($matrix); + } +} diff --git a/vendor/endroid/qr-code/src/Writer/ConsoleWriter.php b/vendor/endroid/qr-code/src/Writer/ConsoleWriter.php new file mode 100644 index 000000000..e3bb7c311 --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/ConsoleWriter.php @@ -0,0 +1,23 @@ +create($qrCode); + + return new ConsoleResult($matrix, $qrCode->getForegroundColor(), $qrCode->getBackgroundColor()); + } +} diff --git a/vendor/endroid/qr-code/src/Writer/DebugWriter.php b/vendor/endroid/qr-code/src/Writer/DebugWriter.php new file mode 100644 index 000000000..8910a809d --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/DebugWriter.php @@ -0,0 +1,32 @@ +create($qrCode); + + return new DebugResult($matrix, $qrCode, $logo, $label, $options); + } + + public function validateResult(ResultInterface $result, string $expectedData): void + { + if (!$result instanceof DebugResult) { + throw new \Exception('Unable to write logo: instance of DebugResult expected'); + } + + $result->setValidateResult(true); + } +} diff --git a/vendor/endroid/qr-code/src/Writer/EpsWriter.php b/vendor/endroid/qr-code/src/Writer/EpsWriter.php new file mode 100644 index 000000000..2f4196751 --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/EpsWriter.php @@ -0,0 +1,44 @@ +create($qrCode); + + $lines = [ + '%!PS-Adobe-3.0 EPSF-3.0', + '%%BoundingBox: 0 0 '.$matrix->getOuterSize().' '.$matrix->getOuterSize(), + '/F { rectfill } def', + number_format($qrCode->getBackgroundColor()->getRed() / 100, 2, '.', ',').' '.number_format($qrCode->getBackgroundColor()->getGreen() / 100, 2, '.', ',').' '.number_format($qrCode->getBackgroundColor()->getBlue() / 100, 2, '.', ',').' setrgbcolor', + '0 0 '.$matrix->getOuterSize().' '.$matrix->getOuterSize().' F', + number_format($qrCode->getForegroundColor()->getRed() / 100, 2, '.', ',').' '.number_format($qrCode->getForegroundColor()->getGreen() / 100, 2, '.', ',').' '.number_format($qrCode->getForegroundColor()->getBlue() / 100, 2, '.', ',').' setrgbcolor', + ]; + + for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) { + for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) { + if (1 === $matrix->getBlockValue($matrix->getBlockCount() - 1 - $rowIndex, $columnIndex)) { + $x = $matrix->getMarginLeft() + $matrix->getBlockSize() * $columnIndex; + $y = $matrix->getMarginLeft() + $matrix->getBlockSize() * $rowIndex; + $lines[] = number_format($x, self::DECIMAL_PRECISION, '.', '').' '.number_format($y, self::DECIMAL_PRECISION, '.', '').' '.number_format($matrix->getBlockSize(), self::DECIMAL_PRECISION, '.', '').' '.number_format($matrix->getBlockSize(), self::DECIMAL_PRECISION, '.', '').' F'; + } + } + } + + return new EpsResult($matrix, $lines); + } +} diff --git a/vendor/endroid/qr-code/src/Writer/GifWriter.php b/vendor/endroid/qr-code/src/Writer/GifWriter.php new file mode 100644 index 000000000..031e02c3a --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/GifWriter.php @@ -0,0 +1,23 @@ +getMatrix(), $gdResult->getImage()); + } +} diff --git a/vendor/endroid/qr-code/src/Writer/PdfWriter.php b/vendor/endroid/qr-code/src/Writer/PdfWriter.php new file mode 100644 index 000000000..3f0cd734e --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/PdfWriter.php @@ -0,0 +1,139 @@ +create($qrCode); + + $unit = 'mm'; + if (isset($options[self::WRITER_OPTION_UNIT])) { + $unit = $options[self::WRITER_OPTION_UNIT]; + } + + $allowedUnits = ['mm', 'pt', 'cm', 'in']; + if (!in_array($unit, $allowedUnits)) { + throw new \Exception(sprintf('PDF Measure unit should be one of [%s]', implode(', ', $allowedUnits))); + } + + $labelSpace = 0; + if ($label instanceof LabelInterface) { + $labelSpace = 30; + } + + if (!class_exists(\FPDF::class)) { + throw new \Exception('Unable to find FPDF: check your installation'); + } + + $foregroundColor = $qrCode->getForegroundColor(); + if ($foregroundColor->getAlpha() > 0) { + throw new \Exception('PDF Writer does not support alpha channels'); + } + $backgroundColor = $qrCode->getBackgroundColor(); + if ($backgroundColor->getAlpha() > 0) { + throw new \Exception('PDF Writer does not support alpha channels'); + } + + if (isset($options[self::WRITER_OPTION_PDF])) { + $fpdf = $options[self::WRITER_OPTION_PDF]; + if (!$fpdf instanceof \FPDF) { + throw new \Exception('pdf option must be an instance of FPDF'); + } + } else { + // @todo Check how to add label height later + $fpdf = new \FPDF('P', $unit, [$matrix->getOuterSize(), $matrix->getOuterSize() + $labelSpace]); + $fpdf->AddPage(); + } + + $x = 0; + if (isset($options[self::WRITER_OPTION_X])) { + $x = $options[self::WRITER_OPTION_X]; + } + $y = 0; + if (isset($options[self::WRITER_OPTION_Y])) { + $y = $options[self::WRITER_OPTION_Y]; + } + + $fpdf->SetFillColor($backgroundColor->getRed(), $backgroundColor->getGreen(), $backgroundColor->getBlue()); + $fpdf->Rect($x, $y, $matrix->getOuterSize(), $matrix->getOuterSize(), 'F'); + $fpdf->SetFillColor($foregroundColor->getRed(), $foregroundColor->getGreen(), $foregroundColor->getBlue()); + + for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) { + for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) { + if (1 === $matrix->getBlockValue($rowIndex, $columnIndex)) { + $fpdf->Rect( + $x + $matrix->getMarginLeft() + ($columnIndex * $matrix->getBlockSize()), + $y + $matrix->getMarginLeft() + ($rowIndex * $matrix->getBlockSize()), + $matrix->getBlockSize(), + $matrix->getBlockSize(), + 'F' + ); + } + } + } + + if ($logo instanceof LogoInterface) { + $this->addLogo($logo, $fpdf, $x, $y, $matrix->getOuterSize()); + } + + if ($label instanceof LabelInterface) { + $fpdf->SetXY($x, $y + $matrix->getOuterSize() + $labelSpace - 25); + $fpdf->SetFont('Helvetica', '', $label->getFont()->getSize()); + $fpdf->Cell($matrix->getOuterSize(), 0, $label->getText(), 0, 0, 'C'); + } + + if (isset($options[self::WRITER_OPTION_LINK])) { + $link = $options[self::WRITER_OPTION_LINK]; + $fpdf->Link($x, $y, $x + $matrix->getOuterSize(), $y + $matrix->getOuterSize(), $link); + } + + return new PdfResult($matrix, $fpdf); + } + + private function addLogo(LogoInterface $logo, \FPDF $fpdf, float $x, float $y, float $size): void + { + $logoPath = $logo->getPath(); + $logoHeight = $logo->getResizeToHeight(); + $logoWidth = $logo->getResizeToWidth(); + + if (null === $logoHeight || null === $logoWidth) { + $imageSize = \getimagesize($logoPath); + if (!$imageSize) { + throw new \Exception(sprintf('Unable to read image size for logo "%s"', $logoPath)); + } + [$logoSourceWidth, $logoSourceHeight] = $imageSize; + + if (null === $logoWidth) { + $logoWidth = (int) $logoSourceWidth; + } + + if (null === $logoHeight) { + $aspectRatio = $logoWidth / $logoSourceWidth; + $logoHeight = (int) ($logoSourceHeight * $aspectRatio); + } + } + + $logoX = $x + $size / 2 - $logoWidth / 2; + $logoY = $y + $size / 2 - $logoHeight / 2; + + $fpdf->Image($logoPath, $logoX, $logoY, $logoWidth, $logoHeight); + } +} diff --git a/vendor/endroid/qr-code/src/Writer/PngWriter.php b/vendor/endroid/qr-code/src/Writer/PngWriter.php new file mode 100644 index 000000000..2bfcd97a5 --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/PngWriter.php @@ -0,0 +1,43 @@ +getBackgroundColor()->getAlpha() > 0 || $qrCode->getForegroundColor()->getAlpha() > 0 => null, + $logo instanceof LogoInterface => null, + default => 16, + }; + } + + /** @var GdResult $gdResult */ + $gdResult = parent::write($qrCode, $logo, $label, $options); + + return new PngResult( + $gdResult->getMatrix(), + $gdResult->getImage(), + $options[self::WRITER_OPTION_COMPRESSION_LEVEL], + $options[self::WRITER_OPTION_NUMBER_OF_COLORS] + ); + } +} diff --git a/vendor/endroid/qr-code/src/Writer/Result/AbstractResult.php b/vendor/endroid/qr-code/src/Writer/Result/AbstractResult.php new file mode 100644 index 000000000..b6547d266 --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/Result/AbstractResult.php @@ -0,0 +1,31 @@ +matrix; + } + + public function getDataUri(): string + { + return 'data:'.$this->getMimeType().';base64,'.base64_encode($this->getString()); + } + + public function saveToFile(string $path): void + { + $string = $this->getString(); + file_put_contents($path, $string); + } +} diff --git a/vendor/endroid/qr-code/src/Writer/Result/BinaryResult.php b/vendor/endroid/qr-code/src/Writer/Result/BinaryResult.php new file mode 100644 index 000000000..386fb6a0b --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/Result/BinaryResult.php @@ -0,0 +1,35 @@ +getMatrix(); + + $binaryString = ''; + for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) { + for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) { + $binaryString .= $matrix->getBlockValue($rowIndex, $columnIndex); + } + $binaryString .= "\n"; + } + + return $binaryString; + } + + public function getMimeType(): string + { + return 'text/plain'; + } +} diff --git a/vendor/endroid/qr-code/src/Writer/Result/ConsoleResult.php b/vendor/endroid/qr-code/src/Writer/Result/ConsoleResult.php new file mode 100644 index 000000000..d3644dbbc --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/Result/ConsoleResult.php @@ -0,0 +1,69 @@ + ' ', + 1 => "\xe2\x96\x80", + 2 => "\xe2\x96\x84", + 3 => "\xe2\x96\x88", + ]; + + private string $colorEscapeCode; + + public function __construct( + MatrixInterface $matrix, + ColorInterface $foreground, + ColorInterface $background, + ) { + parent::__construct($matrix); + + $this->colorEscapeCode = sprintf( + "\e[38;2;%d;%d;%dm\e[48;2;%d;%d;%dm", + $foreground->getRed(), + $foreground->getGreen(), + $foreground->getBlue(), + $background->getRed(), + $background->getGreen(), + $background->getBlue() + ); + } + + public function getMimeType(): string + { + return 'text/plain'; + } + + public function getString(): string + { + $matrix = $this->getMatrix(); + + $side = $matrix->getBlockCount(); + $marginLeft = $this->colorEscapeCode.self::TWO_BLOCKS[0].self::TWO_BLOCKS[0]; + $marginRight = self::TWO_BLOCKS[0].self::TWO_BLOCKS[0]."\e[0m".PHP_EOL; + $marginVertical = $marginLeft.str_repeat(self::TWO_BLOCKS[0], $side).$marginRight; + + $qrCodeString = $marginVertical; + for ($rowIndex = 0; $rowIndex < $side; $rowIndex += 2) { + $qrCodeString .= $marginLeft; + for ($columnIndex = 0; $columnIndex < $side; ++$columnIndex) { + $combined = $matrix->getBlockValue($rowIndex, $columnIndex); + if ($rowIndex + 1 < $side) { + $combined |= $matrix->getBlockValue($rowIndex + 1, $columnIndex) << 1; + } + $qrCodeString .= self::TWO_BLOCKS[$combined]; + } + $qrCodeString .= $marginRight; + } + $qrCodeString .= $marginVertical; + + return $qrCodeString; + } +} diff --git a/vendor/endroid/qr-code/src/Writer/Result/DebugResult.php b/vendor/endroid/qr-code/src/Writer/Result/DebugResult.php new file mode 100644 index 000000000..b632993ce --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/Result/DebugResult.php @@ -0,0 +1,74 @@ + $options */ + private readonly array $options = [], + ) { + parent::__construct($matrix); + } + + public function setValidateResult(bool $validateResult): void + { + $this->validateResult = $validateResult; + } + + public function getString(): string + { + $debugLines = []; + + $debugLines[] = 'Data: '.$this->qrCode->getData(); + $debugLines[] = 'Encoding: '.$this->qrCode->getEncoding(); + $debugLines[] = 'Error Correction Level: '.get_class($this->qrCode->getErrorCorrectionLevel()); + $debugLines[] = 'Size: '.$this->qrCode->getSize(); + $debugLines[] = 'Margin: '.$this->qrCode->getMargin(); + $debugLines[] = 'Round block size mode: '.get_class($this->qrCode->getRoundBlockSizeMode()); + $debugLines[] = 'Foreground color: ['.implode(', ', $this->qrCode->getForegroundColor()->toArray()).']'; + $debugLines[] = 'Background color: ['.implode(', ', $this->qrCode->getBackgroundColor()->toArray()).']'; + + foreach ($this->options as $key => $value) { + $debugLines[] = 'Writer option: '.$key.': '.$value; + } + + if (isset($this->logo)) { + $debugLines[] = 'Logo path: '.$this->logo->getPath(); + $debugLines[] = 'Logo resize to width: '.$this->logo->getResizeToWidth(); + $debugLines[] = 'Logo resize to height: '.$this->logo->getResizeToHeight(); + $debugLines[] = 'Logo punchout background: '.($this->logo->getPunchoutBackground() ? 'true' : 'false'); + } + + if (isset($this->label)) { + $debugLines[] = 'Label text: '.$this->label->getText(); + $debugLines[] = 'Label font path: '.$this->label->getFont()->getPath(); + $debugLines[] = 'Label font size: '.$this->label->getFont()->getSize(); + $debugLines[] = 'Label alignment: '.get_class($this->label->getAlignment()); + $debugLines[] = 'Label margin: ['.implode(', ', $this->label->getMargin()->toArray()).']'; + $debugLines[] = 'Label text color: ['.implode(', ', $this->label->getTextColor()->toArray()).']'; + } + + $debugLines[] = 'Validate result: '.($this->validateResult ? 'true' : 'false'); + + return implode("\n", $debugLines); + } + + public function getMimeType(): string + { + return 'text/plain'; + } +} diff --git a/vendor/endroid/qr-code/src/Writer/Result/EpsResult.php b/vendor/endroid/qr-code/src/Writer/Result/EpsResult.php new file mode 100644 index 000000000..d801fd6eb --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/Result/EpsResult.php @@ -0,0 +1,28 @@ + $lines */ + private readonly array $lines, + ) { + parent::__construct($matrix); + } + + public function getString(): string + { + return implode("\n", $this->lines); + } + + public function getMimeType(): string + { + return 'image/eps'; + } +} diff --git a/vendor/endroid/qr-code/src/Writer/Result/GdResult.php b/vendor/endroid/qr-code/src/Writer/Result/GdResult.php new file mode 100644 index 000000000..a58c3e402 --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/Result/GdResult.php @@ -0,0 +1,32 @@ +image; + } + + public function getString(): string + { + throw new \Exception('You can only use this method in a concrete implementation'); + } + + public function getMimeType(): string + { + throw new \Exception('You can only use this method in a concrete implementation'); + } +} diff --git a/vendor/endroid/qr-code/src/Writer/Result/GifResult.php b/vendor/endroid/qr-code/src/Writer/Result/GifResult.php new file mode 100644 index 000000000..84b249717 --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/Result/GifResult.php @@ -0,0 +1,21 @@ +image); + + return strval(ob_get_clean()); + } + + public function getMimeType(): string + { + return 'image/gif'; + } +} diff --git a/vendor/endroid/qr-code/src/Writer/Result/PdfResult.php b/vendor/endroid/qr-code/src/Writer/Result/PdfResult.php new file mode 100644 index 000000000..f7746a200 --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/Result/PdfResult.php @@ -0,0 +1,32 @@ +fpdf; + } + + public function getString(): string + { + return $this->fpdf->Output('S'); + } + + public function getMimeType(): string + { + return 'application/pdf'; + } +} diff --git a/vendor/endroid/qr-code/src/Writer/Result/PngResult.php b/vendor/endroid/qr-code/src/Writer/Result/PngResult.php new file mode 100644 index 000000000..8cdbc53b8 --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/Result/PngResult.php @@ -0,0 +1,35 @@ +numberOfColors) { + imagetruecolortopalette($this->image, false, $this->numberOfColors); + } + imagepng($this->image, quality: $this->quality); + + return strval(ob_get_clean()); + } + + public function getMimeType(): string + { + return 'image/png'; + } +} diff --git a/vendor/endroid/qr-code/src/Writer/Result/ResultInterface.php b/vendor/endroid/qr-code/src/Writer/Result/ResultInterface.php new file mode 100644 index 000000000..2cd387e52 --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/Result/ResultInterface.php @@ -0,0 +1,20 @@ +xml; + } + + public function getString(): string + { + $string = $this->xml->asXML(); + + if (!is_string($string)) { + throw new \Exception('Could not save SVG XML to string'); + } + + if ($this->excludeXmlDeclaration) { + $string = str_replace("\n", '', $string); + } + + return $string; + } + + public function getMimeType(): string + { + return 'image/svg+xml'; + } +} diff --git a/vendor/endroid/qr-code/src/Writer/Result/WebPResult.php b/vendor/endroid/qr-code/src/Writer/Result/WebPResult.php new file mode 100644 index 000000000..735f1284c --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/Result/WebPResult.php @@ -0,0 +1,35 @@ +image, quality: $this->quality); + + return strval(ob_get_clean()); + } + + public function getMimeType(): string + { + return 'image/webp'; + } +} diff --git a/vendor/endroid/qr-code/src/Writer/SvgWriter.php b/vendor/endroid/qr-code/src/Writer/SvgWriter.php new file mode 100644 index 000000000..9001279e3 --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/SvgWriter.php @@ -0,0 +1,174 @@ +create($qrCode); + + $xml = new \SimpleXMLElement(''); + $xml->addAttribute('version', '1.1'); + if (!$options[self::WRITER_OPTION_EXCLUDE_SVG_WIDTH_AND_HEIGHT]) { + $xml->addAttribute('width', $matrix->getOuterSize().'px'); + $xml->addAttribute('height', $matrix->getOuterSize().'px'); + } + $xml->addAttribute('viewBox', '0 0 '.$matrix->getOuterSize().' '.$matrix->getOuterSize()); + + $background = $xml->addChild('rect'); + $background->addAttribute('x', '0'); + $background->addAttribute('y', '0'); + $background->addAttribute('width', strval($matrix->getOuterSize())); + $background->addAttribute('height', strval($matrix->getOuterSize())); + $background->addAttribute('fill', '#'.sprintf('%02x%02x%02x', $qrCode->getBackgroundColor()->getRed(), $qrCode->getBackgroundColor()->getGreen(), $qrCode->getBackgroundColor()->getBlue())); + $background->addAttribute('fill-opacity', strval($qrCode->getBackgroundColor()->getOpacity())); + + if ($options[self::WRITER_OPTION_COMPACT]) { + $this->writePath($xml, $qrCode, $matrix); + } else { + $this->writeBlockDefinitions($xml, $qrCode, $matrix, $options); + } + + $result = new SvgResult($matrix, $xml, boolval($options[self::WRITER_OPTION_EXCLUDE_XML_DECLARATION])); + + if ($logo instanceof LogoInterface) { + $this->addLogo($logo, $result, $options); + } + + return $result; + } + + private function writePath(\SimpleXMLElement $xml, QrCodeInterface $qrCode, MatrixInterface $matrix): void + { + $path = ''; + for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) { + $left = $matrix->getMarginLeft(); + for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) { + if (1 === $matrix->getBlockValue($rowIndex, $columnIndex)) { + // When we are at the first column or when the previous column was 0 set new left + if (0 === $columnIndex || 0 === $matrix->getBlockValue($rowIndex, $columnIndex - 1)) { + $left = $matrix->getMarginLeft() + $matrix->getBlockSize() * $columnIndex; + } + // When we are at the + if ($columnIndex === $matrix->getBlockCount() - 1 || 0 === $matrix->getBlockValue($rowIndex, $columnIndex + 1)) { + $top = $matrix->getMarginLeft() + $matrix->getBlockSize() * $rowIndex; + $bottom = $matrix->getMarginLeft() + $matrix->getBlockSize() * ($rowIndex + 1); + $right = $matrix->getMarginLeft() + $matrix->getBlockSize() * ($columnIndex + 1); + $path .= 'M'.$this->formatNumber($left).','.$this->formatNumber($top); + $path .= 'L'.$this->formatNumber($right).','.$this->formatNumber($top); + $path .= 'L'.$this->formatNumber($right).','.$this->formatNumber($bottom); + $path .= 'L'.$this->formatNumber($left).','.$this->formatNumber($bottom).'Z'; + } + } + } + } + + $pathDefinition = $xml->addChild('path'); + $pathDefinition->addAttribute('fill', '#'.sprintf('%02x%02x%02x', $qrCode->getForegroundColor()->getRed(), $qrCode->getForegroundColor()->getGreen(), $qrCode->getForegroundColor()->getBlue())); + $pathDefinition->addAttribute('fill-opacity', strval($qrCode->getForegroundColor()->getOpacity())); + $pathDefinition->addAttribute('d', $path); + } + + /** @param array $options */ + private function writeBlockDefinitions(\SimpleXMLElement $xml, QrCodeInterface $qrCode, MatrixInterface $matrix, array $options): void + { + $xml->addChild('defs'); + + $blockDefinition = $xml->defs->addChild('rect'); + $blockDefinition->addAttribute('id', strval($options[self::WRITER_OPTION_BLOCK_ID])); + $blockDefinition->addAttribute('width', $this->formatNumber($matrix->getBlockSize())); + $blockDefinition->addAttribute('height', $this->formatNumber($matrix->getBlockSize())); + $blockDefinition->addAttribute('fill', '#'.sprintf('%02x%02x%02x', $qrCode->getForegroundColor()->getRed(), $qrCode->getForegroundColor()->getGreen(), $qrCode->getForegroundColor()->getBlue())); + $blockDefinition->addAttribute('fill-opacity', strval($qrCode->getForegroundColor()->getOpacity())); + + for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) { + for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) { + if (1 === $matrix->getBlockValue($rowIndex, $columnIndex)) { + $block = $xml->addChild('use'); + $block->addAttribute('x', $this->formatNumber($matrix->getMarginLeft() + $matrix->getBlockSize() * $columnIndex)); + $block->addAttribute('y', $this->formatNumber($matrix->getMarginLeft() + $matrix->getBlockSize() * $rowIndex)); + $block->addAttribute('xlink:href', '#'.$options[self::WRITER_OPTION_BLOCK_ID], 'http://www.w3.org/1999/xlink'); + } + } + } + } + + /** @param array $options */ + private function addLogo(LogoInterface $logo, SvgResult $result, array $options): void + { + if ($logo->getPunchoutBackground()) { + throw new \Exception('The SVG writer does not support logo punchout background'); + } + + $logoImageData = LogoImageData::createForLogo($logo); + + if (!isset($options[self::WRITER_OPTION_FORCE_XLINK_HREF])) { + $options[self::WRITER_OPTION_FORCE_XLINK_HREF] = false; + } + + $xml = $result->getXml(); + + /** @var \SimpleXMLElement $xmlAttributes */ + $xmlAttributes = $xml->attributes(); + + $x = intval($xmlAttributes->width) / 2 - $logoImageData->getWidth() / 2; + $y = intval($xmlAttributes->height) / 2 - $logoImageData->getHeight() / 2; + + $imageDefinition = $xml->addChild('image'); + $imageDefinition->addAttribute('x', strval($x)); + $imageDefinition->addAttribute('y', strval($y)); + $imageDefinition->addAttribute('width', strval($logoImageData->getWidth())); + $imageDefinition->addAttribute('height', strval($logoImageData->getHeight())); + $imageDefinition->addAttribute('preserveAspectRatio', 'none'); + + if ($options[self::WRITER_OPTION_FORCE_XLINK_HREF]) { + $imageDefinition->addAttribute('xlink:href', $logoImageData->createDataUri(), 'http://www.w3.org/1999/xlink'); + } else { + $imageDefinition->addAttribute('href', $logoImageData->createDataUri()); + } + } + + private function formatNumber(float $number): string + { + $string = number_format($number, self::DECIMAL_PRECISION, '.', ''); + $string = rtrim($string, '0'); + + return rtrim($string, '.'); + } +} diff --git a/vendor/endroid/qr-code/src/Writer/ValidatingWriterInterface.php b/vendor/endroid/qr-code/src/Writer/ValidatingWriterInterface.php new file mode 100644 index 000000000..4f400485f --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/ValidatingWriterInterface.php @@ -0,0 +1,12 @@ +getMatrix(), $gdResult->getImage(), $options[self::WRITER_OPTION_QUALITY]); + } +} diff --git a/vendor/endroid/qr-code/src/Writer/WriterInterface.php b/vendor/endroid/qr-code/src/Writer/WriterInterface.php new file mode 100644 index 000000000..66b233f95 --- /dev/null +++ b/vendor/endroid/qr-code/src/Writer/WriterInterface.php @@ -0,0 +1,16 @@ + $options */ + public function write(QrCodeInterface $qrCode, ?LogoInterface $logo = null, ?LabelInterface $label = null, array $options = []): ResultInterface; +} diff --git a/vendor/goetas-webservices/xsd2php-runtime/.gitignore b/vendor/goetas-webservices/xsd2php-runtime/.gitignore new file mode 100755 index 000000000..809dc4fc1 --- /dev/null +++ b/vendor/goetas-webservices/xsd2php-runtime/.gitignore @@ -0,0 +1,8 @@ +/.buildpath +/.project +/.settings +/.idea +composer.lock +vendor/ +/.phpunit.result.cache + diff --git a/vendor/goetas-webservices/xsd2php-runtime/.scrutinizer.yml b/vendor/goetas-webservices/xsd2php-runtime/.scrutinizer.yml new file mode 100644 index 000000000..85da64b6d --- /dev/null +++ b/vendor/goetas-webservices/xsd2php-runtime/.scrutinizer.yml @@ -0,0 +1,10 @@ +tools: + external_code_coverage: + timeout: 600 +checks: + php: + code_rating: true + duplication: true +filter: + paths: + - src/* diff --git a/vendor/goetas-webservices/xsd2php-runtime/.travis.yml b/vendor/goetas-webservices/xsd2php-runtime/.travis.yml new file mode 100644 index 000000000..65c2e628e --- /dev/null +++ b/vendor/goetas-webservices/xsd2php-runtime/.travis.yml @@ -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 + diff --git a/vendor/goetas-webservices/xsd2php-runtime/LICENSE b/vendor/goetas-webservices/xsd2php-runtime/LICENSE new file mode 100644 index 000000000..66caf0353 --- /dev/null +++ b/vendor/goetas-webservices/xsd2php-runtime/LICENSE @@ -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. diff --git a/vendor/goetas-webservices/xsd2php-runtime/README.md b/vendor/goetas-webservices/xsd2php-runtime/README.md new file mode 100644 index 000000000..4019c5da0 --- /dev/null +++ b/vendor/goetas-webservices/xsd2php-runtime/README.md @@ -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) + diff --git a/vendor/goetas-webservices/xsd2php-runtime/composer.json b/vendor/goetas-webservices/xsd2php-runtime/composer.json new file mode 100644 index 000000000..8399a3fbd --- /dev/null +++ b/vendor/goetas-webservices/xsd2php-runtime/composer.json @@ -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" + } + } +} diff --git a/vendor/goetas-webservices/xsd2php-runtime/phpunit.xml.dist b/vendor/goetas-webservices/xsd2php-runtime/phpunit.xml.dist new file mode 100644 index 000000000..09b3508bc --- /dev/null +++ b/vendor/goetas-webservices/xsd2php-runtime/phpunit.xml.dist @@ -0,0 +1,33 @@ + + + + + + ./tests + + + + + + src + + + + + + diff --git a/vendor/goetas-webservices/xsd2php-runtime/src/Jms/Handler/BaseTypesHandler.php b/vendor/goetas-webservices/xsd2php-runtime/src/Jms/Handler/BaseTypesHandler.php new file mode 100644 index 000000000..9592d96ee --- /dev/null +++ b/vendor/goetas-webservices/xsd2php-runtime/src/Jms/Handler/BaseTypesHandler.php @@ -0,0 +1,91 @@ + 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; + } +} + diff --git a/vendor/goetas-webservices/xsd2php-runtime/src/Jms/Handler/XmlSchemaDateHandler.php b/vendor/goetas-webservices/xsd2php-runtime/src/Jms/Handler/XmlSchemaDateHandler.php new file mode 100644 index 000000000..8d9944474 --- /dev/null +++ b/vendor/goetas-webservices/xsd2php-runtime/src/Jms/Handler/XmlSchemaDateHandler.php @@ -0,0 +1,168 @@ + 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; + } +} + diff --git a/vendor/goetas-webservices/xsd2php-runtime/tests/XmlSchemaDateHandlerDeserializationTest.php b/vendor/goetas-webservices/xsd2php-runtime/tests/XmlSchemaDateHandlerDeserializationTest.php new file mode 100644 index 000000000..bf91d6686 --- /dev/null +++ b/vendor/goetas-webservices/xsd2php-runtime/tests/XmlSchemaDateHandlerDeserializationTest.php @@ -0,0 +1,120 @@ +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"); + $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"); + $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("2015-01-01T"); + $this->handler->deserializeDate($this->visitor, $element, [], $this->context); + } +} diff --git a/vendor/goetas-webservices/xsd2php-runtime/tests/XmlSchemaDateHandlerSerializationTest.php b/vendor/goetas-webservices/xsd2php-runtime/tests/XmlSchemaDateHandlerSerializationTest.php new file mode 100644 index 000000000..6a2ae73a7 --- /dev/null +++ b/vendor/goetas-webservices/xsd2php-runtime/tests/XmlSchemaDateHandlerSerializationTest.php @@ -0,0 +1,114 @@ +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'], + ]; + } +} diff --git a/vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/bug_report.md b/vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..16b0ea64b --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,28 @@ +--- +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. + +**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. diff --git a/vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/config.yml b/vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..3ba13e0ce --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/feature.md b/vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/feature.md new file mode 100644 index 000000000..9c759bf6f --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/feature.md @@ -0,0 +1,20 @@ +--- +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. + +**Additional context** +Add any other context about the feature request here. diff --git a/vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/question.md b/vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 000000000..e7e07f4bf --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,17 @@ +--- +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. + +**Additional context** +Add any other context about the question here. diff --git a/vendor/horstoeko/mimedb/.github/dependabot.yml b/vendor/horstoeko/mimedb/.github/dependabot.yml new file mode 100644 index 000000000..be006de9a --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/dependabot.yml @@ -0,0 +1,13 @@ +# Keep GitHub Actions up to date with GitHub's Dependabot... +# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot +# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#package-ecosystem +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + groups: + github-actions: + patterns: + - "*" # Group all Actions updates into a single larger pull request + schedule: + interval: weekly diff --git a/vendor/horstoeko/mimedb/.github/pull_request_template.md b/vendor/horstoeko/mimedb/.github/pull_request_template.md new file mode 100644 index 000000000..ab105e889 --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/pull_request_template.md @@ -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 \ No newline at end of file diff --git a/vendor/horstoeko/mimedb/.github/workflows/build.ci.yml b/vendor/horstoeko/mimedb/.github/workflows/build.ci.yml new file mode 100644 index 000000000..415103a0e --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/workflows/build.ci.yml @@ -0,0 +1,124 @@ +name: Continuous Integration + +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: ${{ matrix.operating-system }} + strategy: + matrix: + operating-system: ["ubuntu-22.04", "ubuntu-24.04"] + phpversion: ["7.3", "7.4", "8.0", "8.1", "8.2", "8.3"] + + steps: + - name: Checkout Sources + uses: actions/checkout@v4 + + - name: Setup PHP with PECL extension + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.phpversion }} + extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, bcmath, intl, gd, exif, iconv, imagick, json, xdebug + coverage: xdebug + + - name: Get Composer Cache Directory + id: composer-cache + run: | + echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v4 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-${{ matrix.phpversion }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-${{ matrix.phpversion }}-composer- + + - name: Install composer dependencies + run: | + composer config -g github-oauth.github.com ${{ secrets.GITHUB_TOKEN }} + composer install + + - name: Prepare Directories + run: | + mkdir build/builddoc + mkdir build/doc + mkdir build/coverage + mkdir build/coverage-html + mkdir build/logs + mkdir build/pdepend + mkdir build/dist + mkdir build/phpdoc + + - name: Run Lint + run: | + for afile in $(find . -type f -name '*.php' -path './src*/*' -print); do + php -l $afile + done + for afile in $(find . -type f -name '*.php' -path './tests*/*' -print); do + php -l $afile + done + + - name: Run PHPLOC + continue-on-error: true + run: | + vendor/bin/phploc --count-tests --log-csv build/logs/phploc.csv --log-xml build/logs/phploc.xml src tests + + - name: Run PDEPEND + continue-on-error: true + run: | + vendor/bin/pdepend --jdepend-xml=build/logs/jdepend.xml --jdepend-chart=build/pdepend/dependencies.svg --overview-pyramid=build/pdepend/overview-pyramid.svg src + + - name: Run PHPMD + continue-on-error: true + run: | + vendor/bin/phpmd src xml build/phpmd.xml --reportfile build/logs/pmd.xml --exclude src/entities/ + vendor/bin/phpmd src github build/phpmd.xml --exclude src/entities/ + + - name: Run PHPCS + continue-on-error: true + run: | + vendor/bin/phpcs --report=checkstyle --report-file=build/logs/checkstyle.xml --standard=build/phpcsrules.xml --extensions=php --ignore=autoload.php src tests + + - name: Run PHPSTAN + continue-on-error: true + run: | + vendor/bin/phpstan analyze -c build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --error-format=checkstyle > build/logs/checkstyle_phpstan.xml + + - name: Run PHPCPD + continue-on-error: true + run: | + vendor/bin/phpcpd --log-pmd build/logs/pmd-cpd.xml --exclude src/entities/ src + + - name: Run Tests (PHPUnit) + run: | + vendor/bin/phpunit --stop-on-failure --configuration build/phpunit.xml + env: + XDEBUG_MODE: coverage + + - 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" + + - name: Publish Build Logs + uses: actions/upload-artifact@v4 + with: + name: Build log artifacts for ${{ matrix.operating-system }} PHP ${{ matrix.phpversion }} + path: build/logs diff --git a/vendor/horstoeko/mimedb/.github/workflows/build.doc.yml b/vendor/horstoeko/mimedb/.github/workflows/build.doc.yml new file mode 100644 index 000000000..a8551b8dd --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/workflows/build.doc.yml @@ -0,0 +1,50 @@ +name: Documentation + +on: + workflow_dispatch: + +env: + PHPDOCUMENTORURL: https://phpdoc.org/phpDocumentor.phar + PHPDOCUMENTORFILENAME: phpDocumentor.phar + +jobs: + build: + permissions: write-all + runs-on: "ubuntu-24.04" + + steps: + - name: Checkout Sources + uses: actions/checkout@v4 + + - name: Setup PHP with PECL extension + uses: shivammathur/setup-php@v2 + with: + php-version: "8.3" + extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, bcmath, intl, gd, exif, iconv, imagick, json, xdebug + coverage: xdebug + + - name: Prepare Directories + run: | + mkdir build/builddoc + mkdir build/doc + mkdir build/coverage + mkdir build/coverage-html + mkdir build/logs + mkdir build/pdepend + mkdir build/dist + mkdir build/phpdoc + + - name: Documentation + continue-on-error: true + run: | + wget $PHPDOCUMENTORURL -O $PHPDOCUMENTORFILENAME + chmod +x $PHPDOCUMENTORFILENAME + cd build + php ../$PHPDOCUMENTORFILENAME + cd .. + rm -f $PHPDOCUMENTORFILENAME + + - name: Deploy + continue-on-error: true + run: | + zip -r build/dist/doc.zip build/doc diff --git a/vendor/horstoeko/mimedb/.github/workflows/build.php73.ant.yml b/vendor/horstoeko/mimedb/.github/workflows/build.php73.ant.yml new file mode 100644 index 000000000..33b6d708d --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/workflows/build.php73.ant.yml @@ -0,0 +1,33 @@ +name: CI (Ant, PHP 7.3) + +on: + push: + tags-ignore: + - '**' + branches: + - '**' + 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: '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@v2 + if: always() + with: + files: "./build/logs/junit.xml" diff --git a/vendor/horstoeko/mimedb/.github/workflows/build.php74.ant.yml b/vendor/horstoeko/mimedb/.github/workflows/build.php74.ant.yml new file mode 100644 index 000000000..ee3cf6a27 --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/workflows/build.php74.ant.yml @@ -0,0 +1,33 @@ +name: CI (Ant, PHP 7.4) + +on: + push: + tags-ignore: + - '**' + branches: + - '**' + 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: '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@v2 + if: always() + with: + files: "./build/logs/junit.xml" diff --git a/vendor/horstoeko/mimedb/.github/workflows/build.php80.ant.yml b/vendor/horstoeko/mimedb/.github/workflows/build.php80.ant.yml new file mode 100644 index 000000000..9ae1d09b8 --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/workflows/build.php80.ant.yml @@ -0,0 +1,33 @@ +name: CI (Ant, PHP 8.0) + +on: + push: + tags-ignore: + - '**' + branches: + - '**' + 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.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@v2 + if: always() + with: + files: "./build/logs/junit.xml" diff --git a/vendor/horstoeko/mimedb/.github/workflows/build.php81.ant.yml b/vendor/horstoeko/mimedb/.github/workflows/build.php81.ant.yml new file mode 100644 index 000000000..395c34c24 --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/workflows/build.php81.ant.yml @@ -0,0 +1,33 @@ +name: CI (Ant, PHP 8.1) + +on: + push: + tags-ignore: + - '**' + branches: + - '**' + 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: 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" diff --git a/vendor/horstoeko/mimedb/.github/workflows/build.php81.release.ant.yml b/vendor/horstoeko/mimedb/.github/workflows/build.php81.release.ant.yml new file mode 100644 index 000000000..16651ac8d --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/workflows/build.php81.release.ant.yml @@ -0,0 +1,39 @@ +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: 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 diff --git a/vendor/horstoeko/mimedb/.github/workflows/build.php82.ant.yml b/vendor/horstoeko/mimedb/.github/workflows/build.php82.ant.yml new file mode 100644 index 000000000..a4822b48d --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/workflows/build.php82.ant.yml @@ -0,0 +1,33 @@ +name: CI (Ant, PHP 8.2) + +on: + push: + tags-ignore: + - '**' + branches: + - '**' + 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.2' + 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@v2 + if: always() + with: + files: "./build/logs/junit.xml" diff --git a/vendor/horstoeko/mimedb/.github/workflows/build.php83.ant.yml b/vendor/horstoeko/mimedb/.github/workflows/build.php83.ant.yml new file mode 100644 index 000000000..257b4a35e --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/workflows/build.php83.ant.yml @@ -0,0 +1,33 @@ +name: CI (Ant, PHP 8.3) + +on: + push: + tags-ignore: + - '**' + branches: + - '**' + 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.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@v2 + if: always() + with: + files: "./build/logs/junit.xml" diff --git a/vendor/horstoeko/mimedb/.github/workflows/build.release.yml b/vendor/horstoeko/mimedb/.github/workflows/build.release.yml new file mode 100644 index 000000000..fa0331f14 --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/workflows/build.release.yml @@ -0,0 +1,132 @@ +name: Release + +on: + push: + tags: + - "v*" + paths-ignore: + - "**.md" + - ".github/**" + - "examples/**" + +env: + PHPDOCUMENTORURL: https://phpdoc.org/phpDocumentor.phar + PHPDOCUMENTORFILENAME: phpDocumentor.phar + +jobs: + build: + permissions: write-all + runs-on: "ubuntu-24.04" + + steps: + - name: Checkout Sources + uses: actions/checkout@v4 + + - name: Setup PHP with PECL extension + uses: shivammathur/setup-php@v2 + with: + php-version: "8.3" + extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, bcmath, intl, gd, exif, iconv, imagick, json, xdebug + coverage: xdebug + + - name: Get Composer Cache Directory + id: composer-cache + run: | + echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v4 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-8.3-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-8.3-composer- + + - name: Install composer dependencies + run: | + composer config -g github-oauth.github.com ${{ secrets.GITHUB_TOKEN }} + composer install + + - name: Prepare Directories + run: | + mkdir build/builddoc + mkdir build/doc + mkdir build/coverage + mkdir build/coverage-html + mkdir build/logs + mkdir build/pdepend + mkdir build/dist + mkdir build/phpdoc + + - name: Run Lint + run: | + for afile in $(find . -type f -name '*.php' -path './src*/*' -print); do + php -l $afile + done + for afile in $(find . -type f -name '*.php' -path './tests*/*' -print); do + php -l $afile + done + + - name: Run PHPLOC + continue-on-error: true + run: | + vendor/bin/phploc --count-tests --log-csv build/logs/phploc.csv --log-xml build/logs/phploc.xml src tests + + - name: Run PDEPEND + continue-on-error: true + run: | + vendor/bin/pdepend --jdepend-xml=build/logs/jdepend.xml --jdepend-chart=build/pdepend/dependencies.svg --overview-pyramid=build/pdepend/overview-pyramid.svg src + + - name: Run PHPMD + continue-on-error: true + run: | + vendor/bin/phpmd src xml build/phpmd.xml --reportfile build/logs/pmd.xml --exclude src/entities/ + vendor/bin/phpmd src github build/phpmd.xml --exclude src/entities/ + + - name: Run PHPCS + continue-on-error: true + run: | + vendor/bin/phpcs --report=checkstyle --report-file=build/logs/checkstyle.xml --standard=build/phpcsrules.xml --extensions=php --ignore=autoload.php src tests + + - name: Run PHPSTAN + continue-on-error: true + run: | + vendor/bin/phpstan analyze -c build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --error-format=checkstyle > build/logs/checkstyle_phpstan.xml + + - name: Run PHPCPD + continue-on-error: true + run: | + vendor/bin/phpcpd --log-pmd build/logs/pmd-cpd.xml --exclude src/entities/ src + + - name: Run Tests (PHPUnit) + run: | + vendor/bin/phpunit --stop-on-failure --configuration build/phpunit.xml + env: + XDEBUG_MODE: coverage + + - name: Documentation + continue-on-error: true + run: | + wget $PHPDOCUMENTORURL -O $PHPDOCUMENTORFILENAME + chmod +x $PHPDOCUMENTORFILENAME + cd build + php ../$PHPDOCUMENTORFILENAME + cd .. + rm -f $PHPDOCUMENTORFILENAME + + - name: Deploy + continue-on-error: true + run: | + zip -r build/dist/doc.zip build/doc + + - name: Publish Unit Test Results + uses: EnricoMi/publish-unit-test-result-action@v2 + 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 diff --git a/vendor/horstoeko/mimedb/.github/workflows/maintain-issues-stale.yml b/vendor/horstoeko/mimedb/.github/workflows/maintain-issues-stale.yml new file mode 100644 index 000000000..91878399a --- /dev/null +++ b/vendor/horstoeko/mimedb/.github/workflows/maintain-issues-stale.yml @@ -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@v9 + with: + days-before-issue-stale: 7 + days-before-issue-close: 5 + 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 }} diff --git a/vendor/horstoeko/mimedb/.gitignore b/vendor/horstoeko/mimedb/.gitignore new file mode 100644 index 000000000..abcc7ae2e --- /dev/null +++ b/vendor/horstoeko/mimedb/.gitignore @@ -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 diff --git a/vendor/horstoeko/mimedb/CODE_OF_CONDUCT.md b/vendor/horstoeko/mimedb/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..18c914718 --- /dev/null +++ b/vendor/horstoeko/mimedb/CODE_OF_CONDUCT.md @@ -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. diff --git a/vendor/horstoeko/mimedb/CONTRIBUTING.md b/vendor/horstoeko/mimedb/CONTRIBUTING.md new file mode 100644 index 000000000..cd8cdf9da --- /dev/null +++ b/vendor/horstoeko/mimedb/CONTRIBUTING.md @@ -0,0 +1,116 @@ + +# Contributing to horstoeko/mimedb + +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 + + +## 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/mimedb). + +Before you ask a question, it is best to search for existing [Issues](https://github.com/horstoeko/mimedb/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/mimedb/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 +> 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 + + +#### 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/mimedb). 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/mimedb/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? + + +#### 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 . + + +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/mimedb/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). + + + + +### Suggesting Enhancements + +This section guides you through submitting an enhancement suggestion for horstoeko/mimedb, **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. + + +#### Before Submitting an Enhancement + +- Make sure that you are using the latest version. +- Read the [documentation](https://github.com/horstoeko/mimedb) carefully and find out if the functionality is already covered, maybe by an individual configuration. +- Perform a [search](https://github.com/horstoeko/mimedb/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. + + +#### How Do I Submit a Good Enhancement Suggestion? + +- Open an [issue](https://github.com/horstoeko/mimedb/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. +- **Explain why this enhancement would be useful** to most horstoeko/mimedb users. You may also want to point out the other projects that solved it better and which could serve as inspiration. + diff --git a/vendor/horstoeko/mimedb/LICENSE b/vendor/horstoeko/mimedb/LICENSE new file mode 100644 index 000000000..df7f05164 --- /dev/null +++ b/vendor/horstoeko/mimedb/LICENSE @@ -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. diff --git a/vendor/horstoeko/mimedb/README.md b/vendor/horstoeko/mimedb/README.md new file mode 100644 index 000000000..8e419452e --- /dev/null +++ b/vendor/horstoeko/mimedb/README.md @@ -0,0 +1,104 @@ +# MimeDB + +[![Latest Stable Version](https://img.shields.io/packagist/v/horstoeko/mimedb.svg?style=plastic)](https://packagist.org/packages/horstoeko/mimedb) +[![PHP version](https://img.shields.io/packagist/php-v/horstoeko/mimedb.svg?style=plastic)](https://packagist.org/packages/horstoeko/mimedb) +[![License](https://img.shields.io/packagist/l/horstoeko/mimedb.svg?style=plastic)](https://packagist.org/packages/horstoeko/mimedb) + +[![Build Status](https://github.com/horstoeko/mimedb/actions/workflows/build.ci.yml/badge.svg)](https://github.com/horstoeko/mimedb/actions/workflows/build.ci.yml) +[![Release Status](https://github.com/horstoeko/mimedb/actions/workflows/build.release.yml/badge.svg)](https://github.com/horstoeko/mimedb/actions/workflows/build.release.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; +} +``` \ No newline at end of file diff --git a/vendor/horstoeko/mimedb/SECURITY.md b/vendor/horstoeko/mimedb/SECURITY.md new file mode 100644 index 000000000..13d5e8153 --- /dev/null +++ b/vendor/horstoeko/mimedb/SECURITY.md @@ -0,0 +1,10 @@ +# Security Policy + +## Supported Versions + +Only the latest released version of horstoeko/mimedb 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-mimedb@erling.com.de. diff --git a/vendor/horstoeko/mimedb/build.ant.xml b/vendor/horstoeko/mimedb/build.ant.xml new file mode 100644 index 000000000..14a8a4f23 --- /dev/null +++ b/vendor/horstoeko/mimedb/build.ant.xml @@ -0,0 +1,263 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/horstoeko/mimedb/build.xml b/vendor/horstoeko/mimedb/build.xml new file mode 100644 index 000000000..d02cbcbe8 --- /dev/null +++ b/vendor/horstoeko/mimedb/build.xml @@ -0,0 +1,281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/mimedb/build/phpcsrules.xml b/vendor/horstoeko/mimedb/build/phpcsrules.xml new file mode 100644 index 000000000..71bb6e88d --- /dev/null +++ b/vendor/horstoeko/mimedb/build/phpcsrules.xml @@ -0,0 +1,351 @@ + + + The PSR-12 coding standard. + + */src/entities/* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + error + Method name "%s" must not be prefixed with an underscore to indicate visibility + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/mimedb/build/phpcsrules_psr1.xml b/vendor/horstoeko/mimedb/build/phpcsrules_psr1.xml new file mode 100644 index 000000000..65cbe20e9 --- /dev/null +++ b/vendor/horstoeko/mimedb/build/phpcsrules_psr1.xml @@ -0,0 +1,47 @@ + + + The PSR1 coding standard. + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/mimedb/build/phpcsrules_psr12.xml b/vendor/horstoeko/mimedb/build/phpcsrules_psr12.xml new file mode 100644 index 000000000..4f4dad3b6 --- /dev/null +++ b/vendor/horstoeko/mimedb/build/phpcsrules_psr12.xml @@ -0,0 +1,268 @@ + + + The PSR-12 coding standard. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + error + Method name "%s" must not be prefixed with an underscore to indicate visibility + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/mimedb/build/phpcsrules_psr2.xml b/vendor/horstoeko/mimedb/build/phpcsrules_psr2.xml new file mode 100644 index 000000000..ba5bd4e0b --- /dev/null +++ b/vendor/horstoeko/mimedb/build/phpcsrules_psr2.xml @@ -0,0 +1,218 @@ + + + The PSR-2 coding standard. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + 0 + + + 0 + + + + + + + 0 + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/mimedb/build/phpcsrules_squiz.xml b/vendor/horstoeko/mimedb/build/phpcsrules_squiz.xml new file mode 100644 index 000000000..87ab4c3e8 --- /dev/null +++ b/vendor/horstoeko/mimedb/build/phpcsrules_squiz.xml @@ -0,0 +1,132 @@ + + + The Squiz coding standard. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + %2$s + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + + + + + + 0 + + + error + + + + + 0 + + + error + + diff --git a/vendor/horstoeko/mimedb/build/phpdoc.xml b/vendor/horstoeko/mimedb/build/phpdoc.xml new file mode 100644 index 000000000..ea3016362 --- /dev/null +++ b/vendor/horstoeko/mimedb/build/phpdoc.xml @@ -0,0 +1,26 @@ + + + ../build/doc + ./phpdoc + + + + + + src + + + + php + + true + + TODO + FIXME + + + + diff --git a/vendor/horstoeko/mimedb/build/phpmd.xml b/vendor/horstoeko/mimedb/build/phpmd.xml new file mode 100644 index 000000000..55b7588f7 --- /dev/null +++ b/vendor/horstoeko/mimedb/build/phpmd.xml @@ -0,0 +1,20 @@ + + + Custom rule sets that checks your PHP code. + + + + + + + + + + + diff --git a/vendor/horstoeko/mimedb/build/phpstan.neon b/vendor/horstoeko/mimedb/build/phpstan.neon new file mode 100644 index 000000000..505961417 --- /dev/null +++ b/vendor/horstoeko/mimedb/build/phpstan.neon @@ -0,0 +1,8 @@ +parameters: + paths: + - ../src + - ../tests + level: 5 + treatPhpDocTypesAsCertain: false + excludePaths: + - ../src/entities/* diff --git a/vendor/horstoeko/mimedb/build/phpunit.xml b/vendor/horstoeko/mimedb/build/phpunit.xml new file mode 100644 index 000000000..986810878 --- /dev/null +++ b/vendor/horstoeko/mimedb/build/phpunit.xml @@ -0,0 +1,26 @@ + + + + + ../tests/testcases/BasicTest.php + ../tests/testcases/MimeDbTest.php + + + + + ../src + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/horstoeko/mimedb/composer.json b/vendor/horstoeko/mimedb/composer.json new file mode 100644 index 000000000..ee0ac714d --- /dev/null +++ b/vendor/horstoeko/mimedb/composer.json @@ -0,0 +1,68 @@ +{ + "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" + }, + "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", + "checkstyle": [ + "Composer\\Config::disableProcessTimeout", + "vendor/bin/phploc --count-tests --log-csv build/logs/phploc.csv --log-xml build/logs/phploc.xml src tests", + "vendor/bin/pdepend --jdepend-xml=build/logs/jdepend.xml --jdepend-chart=build/pdepend/dependencies.svg --overview-pyramid=build/pdepend/overview-pyramid.svg src", + "vendor/bin/phpmd src xml build/phpmd.xml --reportfile build/logs/pmd.xml --exclude src/entities/", + "vendor/bin/phpcs --report=checkstyle --report-file=build/logs/checkstyle.xml --standard=build/phpcsrules.xml --extensions=php --ignore=autoload.php src tests", + "vendor/bin/phpstan analyze -c build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --error-format=checkstyle > build/logs/checkstyle_phpstan.xml", + "vendor/bin/phpcpd --log-pmd build/logs/pmd-cpd.xml --exclude src/entities/ src" + ] + } +} diff --git a/vendor/horstoeko/mimedb/examples/FindExtensionByMimeType.php b/vendor/horstoeko/mimedb/examples/FindExtensionByMimeType.php new file mode 100644 index 000000000..839b7f93f --- /dev/null +++ b/vendor/horstoeko/mimedb/examples/FindExtensionByMimeType.php @@ -0,0 +1,30 @@ +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; +} diff --git a/vendor/horstoeko/mimedb/examples/FindMimeTypeByExtension.php b/vendor/horstoeko/mimedb/examples/FindMimeTypeByExtension.php new file mode 100644 index 000000000..91a3fc7ce --- /dev/null +++ b/vendor/horstoeko/mimedb/examples/FindMimeTypeByExtension.php @@ -0,0 +1,21 @@ +findFirstMimeTypeByExtension('.docx') . PHP_EOL; + +// OUTPUT: +// application/vnd.openxmlformats-officedocument.wordprocessingml.document + +foreach ($mimeDb->findAllMimeTypesByExtension('.docx') as $mimetype) { + echo $mimetype . PHP_EOL; +} diff --git a/vendor/horstoeko/mimedb/src/MimeDb.php b/vendor/horstoeko/mimedb/src/MimeDb.php new file mode 100644 index 000000000..f146a6a1b --- /dev/null +++ b/vendor/horstoeko/mimedb/src/MimeDb.php @@ -0,0 +1,187 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/mimedb + */ +class MimeDb +{ + /** + * Instance + * + * @var 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 MimeDb(); + } + + return static::$singleton; + } + + /** + * Load mime db + * + * @return MimeDb + */ + protected function initializeDatabase(): MimeDb + { + if (!$this->loadedDatabase()) { + $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 $lookupFileExtension + * @return string|null + */ + public function findFirstMimeTypeByExtension(string $lookupFileExtension): ?string + { + $mimeTypes = $this->findAllMimeTypesByExtension($lookupFileExtension); + + if (is_null($mimeTypes)) { + return null; + } + + return $mimeTypes[0]; + } + + /** + * Get all mimetypes by file extension + * + * @param string $lookupFileExtension + * @return array|null + */ + public function findAllMimeTypesByExtension(string $lookupFileExtension): ?array + { + $this->initializeDatabase(); + + $foundDbEntries = array_filter( + $this->mimeDatabase, + function ($mimetypeDefinition) use ($lookupFileExtension) { + return in_array(strtolower(ltrim($lookupFileExtension, ".")), $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 ($_, $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"; + } +} diff --git a/vendor/horstoeko/mimedb/src/assets/mimetypes.json b/vendor/horstoeko/mimedb/src/assets/mimetypes.json new file mode 100644 index 000000000..0a5a8a7bb --- /dev/null +++ b/vendor/horstoeko/mimedb/src/assets/mimetypes.json @@ -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 + } +} diff --git a/vendor/horstoeko/mimedb/tests/TestCase.php b/vendor/horstoeko/mimedb/tests/TestCase.php new file mode 100644 index 000000000..852985d30 --- /dev/null +++ b/vendor/horstoeko/mimedb/tests/TestCase.php @@ -0,0 +1,170 @@ +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; + } +} diff --git a/vendor/horstoeko/mimedb/tests/testcases/BasicTest.php b/vendor/horstoeko/mimedb/tests/testcases/BasicTest.php new file mode 100644 index 000000000..61993e6a3 --- /dev/null +++ b/vendor/horstoeko/mimedb/tests/testcases/BasicTest.php @@ -0,0 +1,13 @@ +assertTrue(true); + } +} diff --git a/vendor/horstoeko/mimedb/tests/testcases/MimeDbTest.php b/vendor/horstoeko/mimedb/tests/testcases/MimeDbTest.php new file mode 100644 index 000000000..7b1b0b4ec --- /dev/null +++ b/vendor/horstoeko/mimedb/tests/testcases/MimeDbTest.php @@ -0,0 +1,157 @@ +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')); + } +} diff --git a/vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/bug_report.md b/vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..16b0ea64b --- /dev/null +++ b/vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,28 @@ +--- +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. + +**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. diff --git a/vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/config.yml b/vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..3ba13e0ce --- /dev/null +++ b/vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/feature.md b/vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/feature.md new file mode 100644 index 000000000..9c759bf6f --- /dev/null +++ b/vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/feature.md @@ -0,0 +1,20 @@ +--- +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. + +**Additional context** +Add any other context about the feature request here. diff --git a/vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/question.md b/vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 000000000..e7e07f4bf --- /dev/null +++ b/vendor/horstoeko/stringmanagement/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,17 @@ +--- +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. + +**Additional context** +Add any other context about the question here. diff --git a/vendor/horstoeko/stringmanagement/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/vendor/horstoeko/stringmanagement/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md new file mode 100644 index 000000000..ab105e889 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -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 \ No newline at end of file diff --git a/vendor/horstoeko/stringmanagement/.github/workflows/build.php73.ant.yml b/vendor/horstoeko/stringmanagement/.github/workflows/build.php73.ant.yml new file mode 100644 index 000000000..7adb31623 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/.github/workflows/build.php73.ant.yml @@ -0,0 +1,32 @@ +name: CI (Ant, PHP 7.3) + +on: + push: + tags-ignore: + - '**' + branches: + - '**' + paths-ignore: + - '**.md' + - '.github/**' + +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" diff --git a/vendor/horstoeko/stringmanagement/.github/workflows/build.php74.ant.yml b/vendor/horstoeko/stringmanagement/.github/workflows/build.php74.ant.yml new file mode 100644 index 000000000..09b78581a --- /dev/null +++ b/vendor/horstoeko/stringmanagement/.github/workflows/build.php74.ant.yml @@ -0,0 +1,32 @@ +name: CI (Ant, PHP 7.4) + +on: + push: + tags-ignore: + - '**' + branches: + - '**' + paths-ignore: + - '**.md' + - '.github/**' + +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" diff --git a/vendor/horstoeko/stringmanagement/.github/workflows/build.php80.ant.yml b/vendor/horstoeko/stringmanagement/.github/workflows/build.php80.ant.yml new file mode 100644 index 000000000..5859e341a --- /dev/null +++ b/vendor/horstoeko/stringmanagement/.github/workflows/build.php80.ant.yml @@ -0,0 +1,32 @@ +name: CI (Ant, PHP 8.0) + +on: + push: + tags-ignore: + - '**' + branches: + - '**' + paths-ignore: + - '**.md' + - '.github/**' + +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" diff --git a/vendor/horstoeko/stringmanagement/.github/workflows/build.php81.ant.yml b/vendor/horstoeko/stringmanagement/.github/workflows/build.php81.ant.yml new file mode 100644 index 000000000..98881bc03 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/.github/workflows/build.php81.ant.yml @@ -0,0 +1,32 @@ +name: CI (Ant, PHP 8.1) + +on: + push: + tags-ignore: + - '**' + branches: + - '**' + paths-ignore: + - '**.md' + - '.github/**' + +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" diff --git a/vendor/horstoeko/stringmanagement/.github/workflows/build.php81.release.ant.yml b/vendor/horstoeko/stringmanagement/.github/workflows/build.php81.release.ant.yml new file mode 100644 index 000000000..f46e45101 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/.github/workflows/build.php81.release.ant.yml @@ -0,0 +1,38 @@ +name: Release + +on: + push: + tags: + - "v*" + paths-ignore: + - '**.md' + - '.github/**' + +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 diff --git a/vendor/horstoeko/stringmanagement/.gitignore b/vendor/horstoeko/stringmanagement/.gitignore new file mode 100644 index 000000000..f0b071ee2 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/.gitignore @@ -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 diff --git a/vendor/horstoeko/stringmanagement/CODE_OF_CONDUCT.md b/vendor/horstoeko/stringmanagement/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..18c914718 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/CODE_OF_CONDUCT.md @@ -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. diff --git a/vendor/horstoeko/stringmanagement/CONTRIBUTING.md b/vendor/horstoeko/stringmanagement/CONTRIBUTING.md new file mode 100644 index 000000000..11af02bd1 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/CONTRIBUTING.md @@ -0,0 +1,116 @@ + +# Contributing to horstoeko/stringmanagement + +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 + + +## 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/stringmanagement). + +Before you ask a question, it is best to search for existing [Issues](https://github.com/horstoeko/stringmanagement/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/stringmanagement/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 +> 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 + + +#### 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/stringmanagement). 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/stringmanagement/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? + + +#### 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 . + + +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/stringmanagement/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). + + + + +### Suggesting Enhancements + +This section guides you through submitting an enhancement suggestion for horstoeko/stringmanagement, **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. + + +#### Before Submitting an Enhancement + +- Make sure that you are using the latest version. +- Read the [documentation](https://github.com/horstoeko/stringmanagement) carefully and find out if the functionality is already covered, maybe by an individual configuration. +- Perform a [search](https://github.com/horstoeko/stringmanagement/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. + + +#### How Do I Submit a Good Enhancement Suggestion? + +- Open an [issue](https://github.com/horstoeko/stringmanagement/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. +- **Explain why this enhancement would be useful** to most horstoeko/stringmanagement users. You may also want to point out the other projects that solved it better and which could serve as inspiration. + diff --git a/vendor/horstoeko/stringmanagement/LICENSE b/vendor/horstoeko/stringmanagement/LICENSE new file mode 100644 index 000000000..67877be1c --- /dev/null +++ b/vendor/horstoeko/stringmanagement/LICENSE @@ -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. diff --git a/vendor/horstoeko/stringmanagement/README.md b/vendor/horstoeko/stringmanagement/README.md new file mode 100644 index 000000000..f22a96480 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/README.md @@ -0,0 +1,10 @@ +# 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) + +[![CI (Ant, PHP 7.3)](https://github.com/horstoeko/stringmanagement/actions/workflows/build.php73.ant.yml/badge.svg)](https://github.com/horstoeko/stringmanagement/actions/workflows/build.php73.ant.yml) +[![CI (Ant, PHP 7.4)](https://github.com/horstoeko/stringmanagement/actions/workflows/build.php74.ant.yml/badge.svg)](https://github.com/horstoeko/stringmanagement/actions/workflows/build.php74.ant.yml) +[![CI (Ant, PHP 8.0)](https://github.com/horstoeko/stringmanagement/actions/workflows/build.php80.ant.yml/badge.svg)](https://github.com/horstoeko/stringmanagement/actions/workflows/build.php80.ant.yml) +[![CI (Ant, PHP 8.1)](https://github.com/horstoeko/stringmanagement/actions/workflows/build.php81.ant.yml/badge.svg)](https://github.com/horstoeko/stringmanagement/actions/workflows/build.php81.ant.yml) + +[![Release](https://github.com/horstoeko/stringmanagement/actions/workflows/build.php81.release.ant.yml/badge.svg)](https://github.com/horstoeko/stringmanagement/actions/workflows/build.php81.release.ant.yml) diff --git a/vendor/horstoeko/stringmanagement/SECURITY.md b/vendor/horstoeko/stringmanagement/SECURITY.md new file mode 100644 index 000000000..4db4a7b08 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/SECURITY.md @@ -0,0 +1,10 @@ +# Security Policy + +## Supported Versions + +Only the latest released version of horstoeko/stringmanagement 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-stringmanagement@erling.com.de. diff --git a/vendor/horstoeko/stringmanagement/build.ant.xml b/vendor/horstoeko/stringmanagement/build.ant.xml new file mode 100644 index 000000000..14a8a4f23 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/build.ant.xml @@ -0,0 +1,263 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/horstoeko/stringmanagement/build.xml b/vendor/horstoeko/stringmanagement/build.xml new file mode 100644 index 000000000..d02cbcbe8 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/build.xml @@ -0,0 +1,281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/stringmanagement/build/phpcsrules.xml b/vendor/horstoeko/stringmanagement/build/phpcsrules.xml new file mode 100644 index 000000000..71bb6e88d --- /dev/null +++ b/vendor/horstoeko/stringmanagement/build/phpcsrules.xml @@ -0,0 +1,351 @@ + + + The PSR-12 coding standard. + + */src/entities/* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + error + Method name "%s" must not be prefixed with an underscore to indicate visibility + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/stringmanagement/build/phpcsrules_psr1.xml b/vendor/horstoeko/stringmanagement/build/phpcsrules_psr1.xml new file mode 100644 index 000000000..65cbe20e9 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/build/phpcsrules_psr1.xml @@ -0,0 +1,47 @@ + + + The PSR1 coding standard. + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/stringmanagement/build/phpcsrules_psr12.xml b/vendor/horstoeko/stringmanagement/build/phpcsrules_psr12.xml new file mode 100644 index 000000000..4f4dad3b6 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/build/phpcsrules_psr12.xml @@ -0,0 +1,268 @@ + + + The PSR-12 coding standard. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + error + Method name "%s" must not be prefixed with an underscore to indicate visibility + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/stringmanagement/build/phpcsrules_psr2.xml b/vendor/horstoeko/stringmanagement/build/phpcsrules_psr2.xml new file mode 100644 index 000000000..ba5bd4e0b --- /dev/null +++ b/vendor/horstoeko/stringmanagement/build/phpcsrules_psr2.xml @@ -0,0 +1,218 @@ + + + The PSR-2 coding standard. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + 0 + + + 0 + + + + + + + 0 + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/stringmanagement/build/phpcsrules_squiz.xml b/vendor/horstoeko/stringmanagement/build/phpcsrules_squiz.xml new file mode 100644 index 000000000..87ab4c3e8 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/build/phpcsrules_squiz.xml @@ -0,0 +1,132 @@ + + + The Squiz coding standard. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + %2$s + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + + + + + + 0 + + + error + + + + + 0 + + + error + + diff --git a/vendor/horstoeko/stringmanagement/build/phpdoc.xml b/vendor/horstoeko/stringmanagement/build/phpdoc.xml new file mode 100644 index 000000000..ea3016362 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/build/phpdoc.xml @@ -0,0 +1,26 @@ + + + ../build/doc + ./phpdoc + + + + + + src + + + + php + + true + + TODO + FIXME + + + + diff --git a/vendor/horstoeko/stringmanagement/build/phpdocumentor.xml b/vendor/horstoeko/stringmanagement/build/phpdocumentor.xml new file mode 100644 index 000000000..ced6086c9 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/build/phpdocumentor.xml @@ -0,0 +1,12 @@ + + + + ../build/phpdocumentor + + + ../doc + + + ../src + + \ No newline at end of file diff --git a/vendor/horstoeko/stringmanagement/build/phpmd.xml b/vendor/horstoeko/stringmanagement/build/phpmd.xml new file mode 100644 index 000000000..55b7588f7 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/build/phpmd.xml @@ -0,0 +1,20 @@ + + + Custom rule sets that checks your PHP code. + + + + + + + + + + + diff --git a/vendor/horstoeko/stringmanagement/build/phprectorconfig.php b/vendor/horstoeko/stringmanagement/build/phprectorconfig.php new file mode 100644 index 000000000..38688e42f --- /dev/null +++ b/vendor/horstoeko/stringmanagement/build/phprectorconfig.php @@ -0,0 +1,40 @@ +withPaths([ + __DIR__ . '/../src', + __DIR__ . '/../tests', + ]) + ->withSkip([ + __DIR__ . '/../src/entities', + __DIR__ . '/../src/codelistsenum', + ]) + ->withSkip([ + RemoveUselessParamTagRector::class, + RemoveUselessReturnTagRector::class, + ]) + ->withPhp73Sets() + ->withPreparedSets( + codeQuality: true, + codingStyle: true, + strictBooleans: true, + instanceOf: true, + earlyReturn: true, + phpunitCodeQuality: true, + privatization: true, + deadCode: true, + // + carbon: false, + doctrineCodeQuality: false, + naming: false, + rectorPreset: false, + symfonyCodeQuality: false, + symfonyConfigs: false, + typeDeclarations: false, + ); \ No newline at end of file diff --git a/vendor/horstoeko/stringmanagement/build/phpstan.neon b/vendor/horstoeko/stringmanagement/build/phpstan.neon new file mode 100644 index 000000000..0fe0826bb --- /dev/null +++ b/vendor/horstoeko/stringmanagement/build/phpstan.neon @@ -0,0 +1,6 @@ +parameters: + paths: + - ../src + - ../tests + level: 5 + treatPhpDocTypesAsCertain: false diff --git a/vendor/horstoeko/stringmanagement/build/phpunit.xml b/vendor/horstoeko/stringmanagement/build/phpunit.xml new file mode 100644 index 000000000..dee5336f7 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/build/phpunit.xml @@ -0,0 +1,25 @@ + + + + + ../tests + + + + + ../src + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/horstoeko/stringmanagement/composer.json b/vendor/horstoeko/stringmanagement/composer.json new file mode 100644 index 000000000..1fa46539d --- /dev/null +++ b/vendor/horstoeko/stringmanagement/composer.json @@ -0,0 +1,69 @@ +{ + "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" + }, + "require-dev": { + "nette/php-generator": "*", + "pdepend/pdepend": "^2", + "phpdocumentor/reflection-docblock": "^5", + "phploc/phploc": "^7", + "phpmd/phpmd": "^2", + "phpstan/phpstan": "^1|^2", + "phpunit/phpunit": "^9", + "rector/rector": "*", + "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", + "checkstyle": [ + "Composer\\Config::disableProcessTimeout", + "vendor/bin/phploc --count-tests --log-csv build/logs/phploc.csv --log-xml build/logs/phploc.xml src tests", + "vendor/bin/pdepend --jdepend-xml=build/logs/jdepend.xml --jdepend-chart=build/pdepend/dependencies.svg --overview-pyramid=build/pdepend/overview-pyramid.svg src", + "vendor/bin/phpmd src xml build/phpmd.xml --reportfile build/logs/pmd.xml --exclude src/entities/", + "vendor/bin/phpcs --report=checkstyle --report-file=build/logs/checkstyle.xml --standard=build/phpcsrules.xml --extensions=php --ignore=autoload.php src tests", + "vendor/bin/phpstan analyze -c build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --error-format=checkstyle > build/logs/checkstyle_phpstan.xml", + "vendor/bin/phpcpd --log-pmd build/logs/pmd-cpd.xml --exclude src/entities/ src" + ], + "rector": "vendor/bin/rector --config=./build/phprectorconfig.php" + } +} diff --git a/vendor/horstoeko/stringmanagement/src/FileUtils.php b/vendor/horstoeko/stringmanagement/src/FileUtils.php new file mode 100644 index 000000000..fede4ba19 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/src/FileUtils.php @@ -0,0 +1,250 @@ + + * @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 && $checkreadable) { + return 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; + } + + return file_put_contents($toFilename, $base64String) !== false; + } + + /** + * 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) { + return "." . $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); + } +} diff --git a/vendor/horstoeko/stringmanagement/src/PathUtils.php b/vendor/horstoeko/stringmanagement/src/PathUtils.php new file mode 100644 index 000000000..5caaeaf21 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/src/PathUtils.php @@ -0,0 +1,134 @@ + + * @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 ($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(random_int(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); + } +} diff --git a/vendor/horstoeko/stringmanagement/src/StringUtils.php b/vendor/horstoeko/stringmanagement/src/StringUtils.php new file mode 100644 index 000000000..3bb3cdbb6 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/src/StringUtils.php @@ -0,0 +1,51 @@ + + * @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 + ? stripos($astring, $astartswith) === 0 + : strpos($astring, $astartswith) === 0; + } +} diff --git a/vendor/horstoeko/stringmanagement/tests/FileUtilsTest.php b/vendor/horstoeko/stringmanagement/tests/FileUtilsTest.php new file mode 100644 index 000000000..baaebc8e8 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/tests/FileUtilsTest.php @@ -0,0 +1,166 @@ +assertTrue(FileUtils::fileExists(__FILE__, true)); + $this->assertFalse(FileUtils::fileExists(__FILE__ . ".xxx", true)); + } + + /** + * @covers \horstoeko\stringmanagement\FileUtils::fileToBase64 + */ + public function testFileToBase64(): void + { + $this->assertSame("SSBhbSBhIHRlc3RmaWxl", substr(FileUtils::fileToBase64(__DIR__ . "/data/tobase64.txt"), 0, 20)); + $this->assertEquals(false, FileUtils::fileToBase64(__FILE__ . ".xxx")); + } + + /** + * @covers \horstoeko\stringmanagement\FileUtils::fileToBase64File + */ + public function testFileToBase64File(): void + { + $sourceFilename = __DIR__ . "/data/tobase64.txt"; + $destinationFilename = __DIR__ . "/data/encbase64.txt"; + $this->assertTrue(FileUtils::fileToBase64File($sourceFilename, $destinationFilename)); + $this->assertTrue(FileUtils::fileExists($destinationFilename)); + $destinationFilenameContent = file_get_contents($destinationFilename); + $this->assertSame("SSBhbSBhIHRlc3RmaWxl", substr($destinationFilenameContent, 0, 20)); + @unlink($destinationFilename); + } + + /** + * @covers \horstoeko\stringmanagement\FileUtils::fileToBase64File + */ + public function testFileToBase64FileSourceNotExisting(): void + { + $sourceFilename = __DIR__ . "/data/tobase64_2.txt"; + $destinationFilename = __DIR__ . "/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 = __DIR__ . "/data/decbase64.txt"; + $this->assertTrue(FileUtils::base64ToFile($sourceData, $destinationFilename)); + $this->assertTrue(FileUtils::fileExists($destinationFilename)); + $destinationFilenameContent = file_get_contents($destinationFilename); + $this->assertSame("I am a testfile. Don", substr($destinationFilenameContent, 0, 20)); + @unlink($destinationFilename); + } + + /** + * @covers \horstoeko\stringmanagement\FileUtils::base64FileToFile + */ + public function testBase64FileToFile(): void + { + $sourceFilename = __DIR__ . "/data/base64.txt"; + $destinationFilename = __DIR__ . "/data/decbase64.txt"; + $this->assertTrue(FileUtils::base64FileToFile($sourceFilename, $destinationFilename)); + $this->assertTrue(FileUtils::fileExists($destinationFilename)); + $destinationFilenameContent = file_get_contents($destinationFilename); + $this->assertSame("I am a testfile. Don", substr($destinationFilenameContent, 0, 20)); + @unlink($destinationFilename); + } + + /** + * @covers \horstoeko\stringmanagement\FileUtils::combineFilenameWithFileextension + */ + public function testCombineFilenameWithFileextension(): void + { + $this->assertSame("file.txt", FileUtils::combineFilenameWithFileextension("file", "txt")); + $this->assertSame("file.txt", FileUtils::combineFilenameWithFileextension("file.", "txt")); + $this->assertSame("file.txt", FileUtils::combineFilenameWithFileextension("file.", ".txt")); + $this->assertSame("file.txt", FileUtils::combineFilenameWithFileextension("file..", "txt")); + $this->assertSame("file.txt", FileUtils::combineFilenameWithFileextension("file..", "..txt")); + $this->assertSame("file.x.txt", FileUtils::combineFilenameWithFileextension("file.x", "txt")); + $this->assertSame("file.x.txt", FileUtils::combineFilenameWithFileextension("file.x", ".txt")); + $this->assertSame("/home/john/file.txt", FileUtils::combineFilenameWithFileextension("/home/john/file", "txt")); + } + + /** + * @covers \horstoeko\stringmanagement\FileUtils::getFileDirectory + */ + public function testGetFileDirectory(): void + { + $this->assertSame("/home/john", FileUtils::getFileDirectory("/home/john/file.txt")); + $this->assertSame("/home/john", FileUtils::getFileDirectory("/home/john/file.x.txt")); + } + + /** + * @covers \horstoeko\stringmanagement\FileUtils::getFilenameWithExtension + */ + public function testGetFilenameWithExtension(): void + { + $this->assertSame("file.txt", FileUtils::getFilenameWithExtension("/home/john/file.txt")); + $this->assertSame("file.x.txt", FileUtils::getFilenameWithExtension("/home/john/file.x.txt")); + } + + /** + * @covers \horstoeko\stringmanagement\FileUtils::getFilenameWithoutExtension + */ + public function testGetFilenameWithoutExtension(): void + { + $this->assertSame("file", FileUtils::getFilenameWithoutExtension("/home/john/file.txt")); + $this->assertSame("file.x", FileUtils::getFilenameWithoutExtension("/home/john/file.x.txt")); + } + + /** + * @covers \horstoeko\stringmanagement\FileUtils::getFileExtension + */ + public function testGetFileExtension(): void + { + $this->assertSame(".txt", FileUtils::getFileExtension("file.txt", true)); + $this->assertSame(".txt", FileUtils::getFileExtension("file.x.txt", true)); + $this->assertSame(".txt", FileUtils::getFileExtension("/home/john/file.x.txt", true)); + $this->assertSame("txt", FileUtils::getFileExtension("file.txt")); + $this->assertSame("txt", FileUtils::getFileExtension("file.x.txt")); + $this->assertSame("txt", FileUtils::getFileExtension("/home/john/file.x.txt")); + } + + /** + * @covers \horstoeko\stringmanagement\FileUtils::changeFileExtension + */ + public function testChangeFileExtension(): void + { + $ds = DIRECTORY_SEPARATOR; + + $this->assertSame(sprintf('.%sfile.new', $ds), FileUtils::changeFileExtension("file.txt", "new")); + $this->assertSame(sprintf('.%sfile.new', $ds), FileUtils::changeFileExtension("file.txt", ".new")); + $this->assertSame(sprintf('%shome%sjohn%sfile.new', $ds, $ds, $ds), FileUtils::changeFileExtension(sprintf('%shome%sjohn%sfile.txt', $ds, $ds, $ds), "new")); + $this->assertSame(sprintf('%shome%sjohn%sfile.new', $ds, $ds, $ds), FileUtils::changeFileExtension(sprintf('%shome%sjohn%sfile.txt', $ds, $ds, $ds), ".new")); + } + + /** + * @covers \horstoeko\stringmanagement\FileUtils::getFileSize + */ + public function testGetFileSize(): void + { + $this->assertSame(35, FileUtils::getFileSize(__DIR__ . "/data/tobase64.txt")); + $this->assertSame(0, FileUtils::getFileSize(__DIR__ . "/data/filenotexists.txt")); + } + + /** + * @covers \horstoeko\stringmanagement\FileUtils::getFileSizeFromBase64String + */ + public function testGetFileSizeFromBase64String(): void + { + $this->assertSame(35, FileUtils::getFileSizeFromBase64String("SSBhbSBhIHRlc3RmaWxlLiBEb24ndCBtb2RpZnkgbWUuLi4=")); + $this->assertSame(0, FileUtils::getFileSizeFromBase64String("")); + } +} diff --git a/vendor/horstoeko/stringmanagement/tests/PathUtilsTest.php b/vendor/horstoeko/stringmanagement/tests/PathUtilsTest.php new file mode 100644 index 000000000..6fc446150 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/tests/PathUtilsTest.php @@ -0,0 +1,88 @@ +assertSame(sprintf('%shome%suser%stest.txt', $ds, $ds, $ds), PathUtils::combinePathWithFile(sprintf('%shome%suser', $ds, $ds), "test.txt")); + $this->assertSame(sprintf('%shome%suser%stest.txt', $ds, $ds, $ds), PathUtils::combinePathWithFile(sprintf('%shome%suser%s', $ds, $ds, $ds), "test.txt")); + $this->assertSame(sprintf('%shome%suser%stest.txt', $ds, $ds, $ds), PathUtils::combinePathWithFile(sprintf('%shome%suser', $ds, $ds), $ds . 'test.txt')); + } + + /** + * @covers \horstoeko\stringmanagement\PathUtils::combinePathWithPath + */ + public function testCombinePathWithPath(): void + { + $ds = DIRECTORY_SEPARATOR; + + $this->assertSame(sprintf('%shome%suser', $ds, $ds), PathUtils::combinePathWithPath($ds . 'home', "user")); + $this->assertSame(sprintf('%shome%suser', $ds, $ds), PathUtils::combinePathWithPath($ds . 'home', $ds . 'user')); + $this->assertSame(sprintf('%shome%suser', $ds, $ds), PathUtils::combinePathWithPath(sprintf('%shome%s%s', $ds, $ds, $ds), $ds . 'user')); + $this->assertSame(sprintf('%shome%suser', $ds, $ds), PathUtils::combinePathWithPath(sprintf('%shome%s%s', $ds, $ds, $ds), "user")); + } + + /** + * @covers \horstoeko\stringmanagement\PathUtils::combineAllPaths + */ + public function testCombineAllPaths(): void + { + $ds = DIRECTORY_SEPARATOR; + + $this->assertSame(sprintf('home%suser%sjohn', $ds, $ds), PathUtils::combineAllPaths("home", "user", "john")); + $this->assertSame(sprintf('%shome%suser%sjohn', $ds, $ds, $ds), PathUtils::combineAllPaths($ds . 'home', "user", "john")); + $this->assertSame(sprintf('%shome%suser%sjohn', $ds, $ds, $ds), PathUtils::combineAllPaths($ds . 'home', $ds . 'user', "john")); + $this->assertSame(sprintf('%shome%suser%sjohn', $ds, $ds, $ds), PathUtils::combineAllPaths($ds . 'home', $ds . 'user', $ds . 'john')); + $this->assertSame(sprintf('%shome%suser%sjohn', $ds, $ds, $ds), PathUtils::combineAllPaths(sprintf('%shome%s%s', $ds, $ds, $ds), "user", "john")); + $this->assertSame(sprintf('%shome%suser%sjohn', $ds, $ds, $ds), PathUtils::combineAllPaths(sprintf('%shome%s%s', $ds, $ds, $ds), sprintf('%suser%s%s', $ds, $ds, $ds), "john")); + $this->assertSame(sprintf('%shome%suser%sjohn', $ds, $ds, $ds), PathUtils::combineAllPaths(sprintf('%shome%s%s', $ds, $ds, $ds), sprintf('%suser%s%s', $ds, $ds, $ds), $ds . 'john')); + } + + /** + * @covers \horstoeko\stringmanagement\PathUtils::getHashedDirectory + */ + public function testGetHashedDirectory(): void + { + $this->assertNotSame("", PathUtils::getHashedDirectory(3)); + $this->assertSame(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->assertNotSame("", PathUtils::getHashedDirectory(3)); + $this->assertSame(3, substr_count(PathUtils::getHashedDirectory(3), DIRECTORY_SEPARATOR)); + $this->assertStringStartsWith($ds, PathUtils::getHashedDirectory(3)); + $this->assertStringEndsNotWith($ds, PathUtils::getHashedDirectory(3)); + $this->assertDirectoryExists($createdDirectory); + $this->assertFileExists($createdDirectory); + + PathUtils::recursiveRemoveDirectory($baseDirectory); + + $this->assertDirectoryDoesNotExist($createdDirectory); + $this->assertFileDoesNotExist($createdDirectory); + } +} diff --git a/vendor/horstoeko/stringmanagement/tests/StringUtilsTest.php b/vendor/horstoeko/stringmanagement/tests/StringUtilsTest.php new file mode 100644 index 000000000..0d4f63d66 --- /dev/null +++ b/vendor/horstoeko/stringmanagement/tests/StringUtilsTest.php @@ -0,0 +1,34 @@ +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)); + } +} diff --git a/vendor/horstoeko/stringmanagement/tests/data/base64.txt b/vendor/horstoeko/stringmanagement/tests/data/base64.txt new file mode 100644 index 000000000..1ef6ea1fb --- /dev/null +++ b/vendor/horstoeko/stringmanagement/tests/data/base64.txt @@ -0,0 +1 @@ +SSBhbSBhIHRlc3RmaWxlLiBEb24ndCBtb2RpZnkgbWUuLi4= \ No newline at end of file diff --git a/vendor/horstoeko/stringmanagement/tests/data/tobase64.txt b/vendor/horstoeko/stringmanagement/tests/data/tobase64.txt new file mode 100644 index 000000000..827cc204e --- /dev/null +++ b/vendor/horstoeko/stringmanagement/tests/data/tobase64.txt @@ -0,0 +1 @@ +I am a testfile. Don't modify me... \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/bug_report.md b/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..628516f74 --- /dev/null +++ b/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,41 @@ +--- +name: Bug Report +about: Create a report to help us improve +title: "[BUG]" +labels: bug +assignees: horstoeko + +--- + +### Before Submitting an Issue + +Thank you for contributing to our project! :tada: Before opening a new issue, please review our [Contributing Guidelines](https://github.com/horstoeko/zugferd/blob/master/CONTRIBUTING.md). + +To help us assist you efficiently, we require confirmation of the following: +- [ ] I have read the [documentation](https://github.com/horstoeko/zugferd/wiki) and could not find a solution to my issue. +- [ ] I have searched open and closed [issues](https://github.com/horstoeko/zugferd/issues) to ensure my issue has not already been reported. + +Issues that do not meet these requirements may be closed without further action. Thank you for your understanding and support! :pray: + +**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. diff --git a/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/config.yml b/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..3ba13e0ce --- /dev/null +++ b/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/feature.md b/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/feature.md new file mode 100644 index 000000000..c24cd7dd0 --- /dev/null +++ b/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/feature.md @@ -0,0 +1,33 @@ +--- +name: Feature Request +about: Create a feature request +title: "[FEATURE]" +labels: enhancement +assignees: horstoeko + +--- + +### Before Submitting an Issue + +Thank you for contributing to our project! :tada: Before opening a new issue, please review our [Contributing Guidelines](https://github.com/horstoeko/zugferd/blob/master/CONTRIBUTING.md). + +To help us assist you efficiently, we require confirmation of the following: +- [ ] I have read the [documentation](https://github.com/horstoeko/zugferd/wiki) and could not find a solution to my issue. +- [ ] I have searched open and closed [issues](https://github.com/horstoeko/zugferd/issues) to ensure my issue has not already been reported. + +Issues that do not meet these requirements may be closed without further action. Thank you for your understanding and support! :pray: + +**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. diff --git a/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/question.md b/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 000000000..6196bff5c --- /dev/null +++ b/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,30 @@ +--- +name: Question +about: Ask a question +title: "[QUESTION]" +labels: question +assignees: horstoeko + +--- + +### Before Submitting an Issue + +Thank you for contributing to our project! :tada: Before opening a new issue, please review our [Contributing Guidelines](https://github.com/horstoeko/zugferd/blob/master/CONTRIBUTING.md). + +To help us assist you efficiently, we require confirmation of the following: +- [ ] I have read the [documentation](https://github.com/horstoeko/zugferd/wiki) and could not find a solution to my issue. +- [ ] I have searched open and closed [issues](https://github.com/horstoeko/zugferd/issues) to ensure my issue has not already been reported. + +Issues that do not meet these requirements may be closed without further action. Thank you for your understanding and support! :pray: + +**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. diff --git a/vendor/horstoeko/zugferd/.github/dependabot.yml b/vendor/horstoeko/zugferd/.github/dependabot.yml new file mode 100644 index 000000000..be006de9a --- /dev/null +++ b/vendor/horstoeko/zugferd/.github/dependabot.yml @@ -0,0 +1,13 @@ +# Keep GitHub Actions up to date with GitHub's Dependabot... +# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot +# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#package-ecosystem +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + groups: + github-actions: + patterns: + - "*" # Group all Actions updates into a single larger pull request + schedule: + interval: weekly diff --git a/vendor/horstoeko/zugferd/.github/pull_request_template.md b/vendor/horstoeko/zugferd/.github/pull_request_template.md new file mode 100644 index 000000000..ab105e889 --- /dev/null +++ b/vendor/horstoeko/zugferd/.github/pull_request_template.md @@ -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 \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/.github/workflows/build.changelog.yml b/vendor/horstoeko/zugferd/.github/workflows/build.changelog.yml new file mode 100644 index 000000000..766051972 --- /dev/null +++ b/vendor/horstoeko/zugferd/.github/workflows/build.changelog.yml @@ -0,0 +1,67 @@ +name: Update ChangeLog + +on: + workflow_run: + workflows: + - Release + types: + - completed + workflow_dispatch: + +env: + GH_PAT: ${{ secrets.UPDATEWIKITOKEN }} + +jobs: + updatechangelog: + permissions: write-all + runs-on: "ubuntu-24.04" + + steps: + - name: Checkout Sources + uses: actions/checkout@v4 + with: + token: ${{ secrets.UPDATEWIKITOKEN }} + fetch-depth: 0 + fetch-tags: true + ref: ${{ github.head_ref }} + + - name: Setup PHP with PECL extension + uses: shivammathur/setup-php@v2 + with: + php-version: "8.4" + extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, bcmath, intl, gd, exif, iconv, imagick, json, xdebug + coverage: xdebug + + - name: Get Composer Cache Directory + id: composer-cache + run: | + echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v4 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-8.4-composer-${{ hashFiles('**/composer.json') }} + restore-keys: | + ${{ runner.os }}-8.4-composer-${{ hashFiles('**/composer.json') }} + ${{ runner.os }}-8.4-composer- + + - name: Install composer dependencies + run: | + composer config -g github-oauth.github.com ${{ secrets.GITHUB_TOKEN }} + composer update --no-interaction --prefer-dist + + - name: Update ChangeLog + continue-on-error: true + run: | + php -f make/genchangelog.php all + rm -f CHANGELOG.md + mv -f make/CHANGELOG.md . + git config user.name "HorstOeko" + git config user.email "horstoeko@erling.com.de" + if [ -n "$(git status --porcelain)" ]; then + git add ./CHANGELOG.md + git commit -m "[DOC] Updated CHANGELOG.md" + git push + else + echo "No changes found. Skipping." + fi diff --git a/vendor/horstoeko/zugferd/.github/workflows/build.ci.yml b/vendor/horstoeko/zugferd/.github/workflows/build.ci.yml new file mode 100644 index 000000000..f3e0212a7 --- /dev/null +++ b/vendor/horstoeko/zugferd/.github/workflows/build.ci.yml @@ -0,0 +1,249 @@ +name: Continuous Integration + +on: + push: + tags-ignore: + - "**" + branches: + - "**" + paths-ignore: + - "**.md" + - ".github/**" + - "examples/**" + - "make/**" + pull_request: + types: + - opened + branches: + - "master" + workflow_dispatch: + +env: + VALIDATORURL: https://github.com/itplr-kosit/validator/releases/download/v1.5.0/validator-1.5.0-distribution.zip + VALIDATORSCENARIOURL: https://github.com/itplr-kosit/validator-configuration-xrechnung/releases/download/release-2025-03-21/validator-configuration-xrechnung_3.0.2_2025-03-21.zip + VALIDATORPATH: build/validator + VALIDATORZIPFILENAME: validator.zip + VALIDATORSCENARIOZIPFILENAME: validator-configuration.zip + VALIDATORJARFILENAME: validationtool-1.5.0-standalone.jar + VALIDATORSCENARIOFILENAME: scenarios.xml + PHPDOCUMENTORURL: https://phpdoc.org/phpDocumentor.phar + PHPDOCUMENTORFILENAME: phpDocumentor.phar + VERAPDFURL: https://software.verapdf.org/rel/verapdf-installer.zip + VERAPDFPATH: build/verapdf + VERAPDFZIPFILENAME: verapdf.zip + +jobs: + build: + permissions: write-all + runs-on: ${{ matrix.operating-system }} + strategy: + matrix: + operating-system: ["ubuntu-22.04", "ubuntu-24.04"] + phpversion: ["7.3", "7.4", "8.0", "8.1", "8.2", "8.3", "8.4"] + + steps: + - name: Checkout Sources + uses: actions/checkout@v4 + + - name: Setup PHP with PECL extension + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.phpversion }} + extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, bcmath, intl, gd, exif, iconv, imagick, json, xdebug + coverage: xdebug + + - name: Set up JDK 11 + uses: actions/setup-java@v4 + with: + java-version: "11" + distribution: "temurin" + + - name: Get Composer Cache Directory + id: composer-cache + run: | + echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v4 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-${{ matrix.phpversion }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: | + ${{ runner.os }}-${{ matrix.phpversion }}-composer-${{ hashFiles('**/composer.json') }} + ${{ runner.os }}-${{ matrix.phpversion }}-composer- + + - name: Install composer dependencies + run: | + composer config -g github-oauth.github.com ${{ secrets.GITHUB_TOKEN }} + composer update --no-interaction --prefer-dist + + - name: Prepare Directories + run: | + mkdir build/builddoc + mkdir build/doc + mkdir build/coverage + mkdir build/coverage-html + mkdir build/logs + mkdir build/pdepend + mkdir build/dist + mkdir build/phpdoc + + - name: Run Lint (PHP 8.0 and lower) + if: ${{ matrix.phpversion < '8.1' }} + run: | + for afile in $(find . -type f -name '*.php' -path './src*/*' -not -path "*codes*" -not -path "*codelistsenum*" -print); do + php -l $afile + done + for afile in $(find . -type f -name '*.php' -path './tests*/*' -print); do + php -l $afile + done + + - name: Run Lint (PHP 8.1 and higher) + if: ${{ matrix.phpversion >= '8.1' }} + run: | + for afile in $(find . -type f -name '*.php' -path './src*/*' -print); do + php -l $afile + done + for afile in $(find . -type f -name '*.php' -path './tests*/*' -print); do + php -l $afile + done + + - name: Run PHPLOC + continue-on-error: true + run: | + vendor/bin/phploc --count-tests --log-csv build/logs/phploc.csv --log-xml build/logs/phploc.xml src tests + + - name: Run PDEPEND + continue-on-error: true + run: | + vendor/bin/pdepend --jdepend-xml=build/logs/jdepend.xml --jdepend-chart=build/pdepend/dependencies.svg --overview-pyramid=build/pdepend/overview-pyramid.svg src + + - name: Run PHPMD + continue-on-error: true + run: | + vendor/bin/phpmd src xml build/phpmd.xml --reportfile build/logs/pmd.xml --exclude src/entities/ + vendor/bin/phpmd src github build/phpmd.xml --exclude src/entities/ + + - name: Run PHPCS + continue-on-error: true + run: | + vendor/bin/phpcs --report=checkstyle --report-file=build/logs/checkstyle.xml --standard=build/phpcsrules_psr12.xml --extensions=php --colors --ignore=autoload.php,./src/entities src tests + + - name: Run PHPSTAN + continue-on-error: true + run: | + vendor/bin/phpstan analyze -c build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --error-format=checkstyle > build/logs/checkstyle_phpstan.xml + + - name: Run PHPCPD + continue-on-error: true + run: | + vendor/bin/phpcpd --log-pmd build/logs/pmd-cpd.xml --exclude src/entities/ src + + - name: Run Tests (PHPUnit) + run: | + vendor/bin/phpunit --stop-on-failure --configuration build/phpunit.xml + env: + XDEBUG_MODE: coverage + + - name: Cache Key (Schematron) + id: hash-validator + run: | + echo "hash=$(echo '${{ env.VALIDATORURL }} ${{ env.VALIDATORSCENARIOURL }}' | sha256sum | cut -c1-16)" >> $GITHUB_OUTPUT + + - name: Cache Application (Schematron) + id: cache-validator + uses: actions/cache@v4 + with: + path: ${{ env.VALIDATORPATH }} + key: ${{ runner.os }}-${{ matrix.phpversion }}-validator-${{ steps.hash-validator.outputs.hash }} + + - name: Download Application (Schematron) + if: steps.cache-validator.outputs.cache-hit != 'true' + run: | + rm -rf $VALIDATORPATH + mkdir -p $VALIDATORPATH + wget $VALIDATORURL -O $VALIDATORPATH/$VALIDATORZIPFILENAME + wget $VALIDATORSCENARIOURL -O $VALIDATORPATH/$VALIDATORSCENARIOZIPFILENAME + unzip $VALIDATORPATH/$VALIDATORZIPFILENAME -d $VALIDATORPATH + unzip $VALIDATORPATH/$VALIDATORSCENARIOZIPFILENAME -d $VALIDATORPATH + + - name: Run Tests (Schematron) + run: | + set -e + rm -f examples/factur-x.xml + php -f examples/01_ZugferdDocumentBuilder_EN16931.php + java -jar $VALIDATORPATH/$VALIDATORJARFILENAME -r $VALIDATORPATH -s $VALIDATORPATH/$VALIDATORSCENARIOFILENAME examples/factur-x.xml + rm -f examples/factur-x.xml + php -f examples/01_ZugferdDocumentBuilder_XRECHNUNG3.php + java -jar $VALIDATORPATH/$VALIDATORJARFILENAME -r $VALIDATORPATH -s $VALIDATORPATH/$VALIDATORSCENARIOFILENAME examples/factur-x.xml + + - name: Cache Key (VeraPDF) + id: hash-verapdf + run: | + echo "hash=$(echo '${{ env.VERAPDFURL }}' | sha256sum | cut -c1-16)" >> $GITHUB_OUTPUT + + - name: Cache Application (VeraPDF) + id: cache-verapdf + uses: actions/cache@v4 + with: + path: ${{ env.VERAPDFPATH }} + key: ${{ runner.os }}-${{ matrix.phpversion }}-verapdf-${{ steps.hash-verapdf.outputs.hash }} + + - name: Download Application (VeraPDF) + if: steps.cache-verapdf.outputs.cache-hit != 'true' + run: | + rm -rf $VERAPDFPATH + mkdir -p $VERAPDFPATH + wget $VERAPDFURL -O $VERAPDFPATH/$VERAPDFZIPFILENAME + unzip -j $VERAPDFPATH/$VERAPDFZIPFILENAME -d $VERAPDFPATH + rm -f $VERAPDFPATH/$VERAPDFZIPFILENAME + + - name: Run Tests (VeraPDF) + continue-on-error: true + run: | + set -e + echo "Creating veraPDF install config" + echo " + + + + $(pwd)/$VERAPDFPATH + + + + + + + + + + " > $VERAPDFPATH/install.xml + echo "Installing veraPDF" + VERAPDFINSTALLJAR=$(find $VERAPDFPATH -type f -name "*.jar" | head -n 1); [[ -z "$VERAPDFINSTALLJAR" ]] && { echo "No veraPDF installer found" >&2; exit 1; } || echo "veraPDF installer fount at $VERAPDFINSTALLJAR" + java -jar $VERAPDFINSTALLJAR $VERAPDFPATH/install.xml + echo "Creating test PDF (1)" + php -f examples/02_ZugferdDocumentPdfBuilder_EN16931.php + echo "Running PDF validation" + VERAPDFRESULT=$($VERAPDFPATH/verapdf --format text --flavour 3b --loglevel 0 examples/02_ZugferdDocumentPdfBuilder_PrintLayout_Merged.pdf) + echo "Result of validation" + echo $VERAPDFRESULT + [[ $VERAPDFRESULT == PASS* ]] && echo "PDF validation passed" || { echo "Error: PDF validation not passed" >&2; exit 1; } + echo "Creating test PDF (2)" + php -f examples/02_ZugferdDocumentPdfBuilder_XRECHNUNG.php + echo "Running PDF validation" + VERAPDFRESULT=$($VERAPDFPATH/verapdf --format text --flavour 3b --loglevel 0 examples/02_ZugferdDocumentPdfBuilder_PrintLayout_Merged.pdf) + echo "Result of validation" + echo $VERAPDFRESULT + [[ $VERAPDFRESULT == PASS* ]] && echo "PDF validation passed" || { echo "Error: PDF validation not passed" >&2; exit 1; } + + - 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" + comment_mode: ${{ ((github.event.workflow_run && github.event.workflow_run.event == 'pull_request') || github.event_name == 'pull_request') && 'failures' || 'always' }} + + - name: Publish Build Logs + uses: actions/upload-artifact@v4 + with: + name: Build log artifacts for ${{ matrix.operating-system }} PHP ${{ matrix.phpversion }} + path: build/logs diff --git a/vendor/horstoeko/zugferd/.github/workflows/build.doc.yml b/vendor/horstoeko/zugferd/.github/workflows/build.doc.yml new file mode 100644 index 000000000..5d3da64a5 --- /dev/null +++ b/vendor/horstoeko/zugferd/.github/workflows/build.doc.yml @@ -0,0 +1,68 @@ +name: Update Documentation + +on: + workflow_dispatch: + +env: + PHPDOCUMENTORURL: https://phpdoc.org/phpDocumentor.phar + PHPDOCUMENTORFILENAME: phpDocumentor.phar + +jobs: + build: + permissions: write-all + runs-on: "ubuntu-24.04" + + steps: + - name: Checkout Sources + uses: actions/checkout@v4 + + - name: Setup PHP with PECL extension + uses: shivammathur/setup-php@v2 + with: + php-version: "8.3" + extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, bcmath, intl, gd, exif, iconv, imagick, json, xdebug + coverage: xdebug + + - name: Get Composer Cache Directory + id: composer-cache + run: | + echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v4 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-8.3-composer-${{ hashFiles('**/composer.json') }} + restore-keys: | + ${{ runner.os }}-8.3-composer-${{ hashFiles('**/composer.json') }} + ${{ runner.os }}-8.3-composer- + + - name: Install composer dependencies + run: | + composer config -g github-oauth.github.com ${{ secrets.GITHUB_TOKEN }} + composer update --no-interaction --prefer-dist + + - name: Prepare Directories + run: | + mkdir build/builddoc + mkdir build/doc + mkdir build/coverage + mkdir build/coverage-html + mkdir build/logs + mkdir build/pdepend + mkdir build/dist + mkdir build/phpdoc + + - name: Documentation + continue-on-error: true + run: | + wget $PHPDOCUMENTORURL -O $PHPDOCUMENTORFILENAME + chmod +x $PHPDOCUMENTORFILENAME + cd build + php ../$PHPDOCUMENTORFILENAME + cd .. + rm -f $PHPDOCUMENTORFILENAME + + - name: Deploy + continue-on-error: true + run: | + zip -r build/dist/doc.zip build/doc diff --git a/vendor/horstoeko/zugferd/.github/workflows/build.release.yml b/vendor/horstoeko/zugferd/.github/workflows/build.release.yml new file mode 100644 index 000000000..a55a47a27 --- /dev/null +++ b/vendor/horstoeko/zugferd/.github/workflows/build.release.yml @@ -0,0 +1,268 @@ +name: Release + +on: + push: + tags: + - "v*" + paths-ignore: + - "**.md" + - ".github/**" + - "examples/**" + - "make/**" + +env: + VALIDATORURL: https://github.com/itplr-kosit/validator/releases/download/v1.5.0/validator-1.5.0-distribution.zip + VALIDATORSCENARIOURL: https://github.com/itplr-kosit/validator-configuration-xrechnung/releases/download/release-2025-03-21/validator-configuration-xrechnung_3.0.2_2025-03-21.zip + VALIDATORPATH: build/validator + VALIDATORZIPFILENAME: validator.zip + VALIDATORSCENARIOZIPFILENAME: validator-configuration.zip + VALIDATORJARFILENAME: validationtool-1.5.0-standalone.jar + VALIDATORSCENARIOFILENAME: scenarios.xml + PHPDOCUMENTORURL: https://phpdoc.org/phpDocumentor.phar + PHPDOCUMENTORFILENAME: phpDocumentor.phar + VERAPDFURL: https://software.verapdf.org/rel/verapdf-installer.zip + VERAPDFPATH: build/verapdf + VERAPDFZIPFILENAME: verapdf.zip + GH_PAT: ${{ secrets.UPDATEWIKITOKEN }} + +jobs: + build: + permissions: write-all + runs-on: "ubuntu-24.04" + + steps: + - name: Checkout Sources + uses: actions/checkout@v4 + with: + fetch-depth: 0 + fetch-tags: true + + - name: Setup PHP with PECL extension + uses: shivammathur/setup-php@v2 + with: + php-version: "8.3" + extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, bcmath, intl, gd, exif, iconv, imagick, json, xdebug + coverage: xdebug + + - name: Set up JDK 11 + uses: actions/setup-java@v4 + with: + java-version: "11" + distribution: "temurin" + + - name: Get Composer Cache Directory + id: composer-cache + run: | + echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v4 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-8.3-composer-${{ hashFiles('**/composer.json') }} + restore-keys: | + ${{ runner.os }}-8.3-composer-${{ hashFiles('**/composer.json') }} + ${{ runner.os }}-8.3-composer- + + - name: Install composer dependencies + run: | + composer config -g github-oauth.github.com ${{ secrets.GITHUB_TOKEN }} + composer update --no-interaction --prefer-dist + + - name: Prepare Directories + run: | + mkdir build/builddoc + mkdir build/doc + mkdir build/coverage + mkdir build/coverage-html + mkdir build/logs + mkdir build/pdepend + mkdir build/dist + mkdir build/phpdoc + + - name: Run Lint (PHP 8.1 and higher) + run: | + for afile in $(find . -type f -name '*.php' -path './src*/*' -print); do + php -l $afile + done + for afile in $(find . -type f -name '*.php' -path './tests*/*' -print); do + php -l $afile + done + + - name: Run PHPLOC + continue-on-error: true + run: | + vendor/bin/phploc --count-tests --log-csv build/logs/phploc.csv --log-xml build/logs/phploc.xml src tests + + - name: Run PDEPEND + continue-on-error: true + run: | + vendor/bin/pdepend --jdepend-xml=build/logs/jdepend.xml --jdepend-chart=build/pdepend/dependencies.svg --overview-pyramid=build/pdepend/overview-pyramid.svg src + + - name: Run PHPMD + continue-on-error: true + run: | + vendor/bin/phpmd src xml build/phpmd.xml --reportfile build/logs/pmd.xml --exclude src/entities/ + vendor/bin/phpmd src github build/phpmd.xml --exclude src/entities/ + + - name: Run PHPCS + continue-on-error: true + run: | + vendor/bin/phpcs --report=checkstyle --report-file=build/logs/checkstyle.xml --standard=build/phpcsrules_psr12.xml --extensions=php --colors --ignore=autoload.php,./src/entities src tests + + - name: Run PHPSTAN + continue-on-error: true + run: | + vendor/bin/phpstan analyze -c build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --error-format=checkstyle > build/logs/checkstyle_phpstan.xml + + - name: Run PHPCPD + continue-on-error: true + run: | + vendor/bin/phpcpd --log-pmd build/logs/pmd-cpd.xml --exclude src/entities/ src + + - name: Run Tests (PHPUnit) + run: | + vendor/bin/phpunit --stop-on-failure --configuration build/phpunit.xml + env: + XDEBUG_MODE: coverage + + - name: Cache Key (Schematron) + id: hash-validator + run: | + echo "hash=$(echo '${{ env.VALIDATORURL }} ${{ env.VALIDATORSCENARIOURL }}' | sha256sum | cut -c1-16)" >> $GITHUB_OUTPUT + + - name: Cache Application (Schematron) + id: cache-validator + uses: actions/cache@v4 + with: + path: ${{ env.VALIDATORPATH }} + key: ${{ runner.os }}-8.3-validator-${{ steps.hash-validator.outputs.hash }} + + - name: Download Application (Schematron) + if: steps.cache-validator.outputs.cache-hit != 'true' + run: | + rm -rf $VALIDATORPATH + mkdir -p $VALIDATORPATH + wget $VALIDATORURL -O $VALIDATORPATH/$VALIDATORZIPFILENAME + wget $VALIDATORSCENARIOURL -O $VALIDATORPATH/$VALIDATORSCENARIOZIPFILENAME + unzip $VALIDATORPATH/$VALIDATORZIPFILENAME -d $VALIDATORPATH + unzip $VALIDATORPATH/$VALIDATORSCENARIOZIPFILENAME -d $VALIDATORPATH + + - name: Run Tests (Schematron) + run: | + set -e + rm -f examples/factur-x.xml + php -f examples/01_ZugferdDocumentBuilder_EN16931.php + java -jar $VALIDATORPATH/$VALIDATORJARFILENAME -r $VALIDATORPATH -s $VALIDATORPATH/$VALIDATORSCENARIOFILENAME examples/factur-x.xml + rm -f examples/factur-x.xml + php -f examples/01_ZugferdDocumentBuilder_XRECHNUNG3.php + java -jar $VALIDATORPATH/$VALIDATORJARFILENAME -r $VALIDATORPATH -s $VALIDATORPATH/$VALIDATORSCENARIOFILENAME examples/factur-x.xml + + - name: Cache Key (VeraPDF) + id: hash-verapdf + run: | + echo "hash=$(echo '${{ env.VERAPDFURL }}' | sha256sum | cut -c1-16)" >> $GITHUB_OUTPUT + + - name: Cache Application (VeraPDF) + id: cache-verapdf + uses: actions/cache@v4 + with: + path: ${{ env.VERAPDFPATH }} + key: ${{ runner.os }}-8.3-verapdf-${{ steps.hash-verapdf.outputs.hash }} + + - name: Download Application (VeraPDF) + if: steps.cache-verapdf.outputs.cache-hit != 'true' + run: | + rm -rf $VERAPDFPATH + mkdir -p $VERAPDFPATH + wget $VERAPDFURL -O $VERAPDFPATH/$VERAPDFZIPFILENAME + unzip -j $VERAPDFPATH/$VERAPDFZIPFILENAME -d $VERAPDFPATH + rm -f $VERAPDFPATH/$VERAPDFZIPFILENAME + + - name: Run Tests (VeraPDF) + continue-on-error: true + run: | + set -e + echo "Creating veraPDF install config" + echo " + + + + $(pwd)/$VERAPDFPATH + + + + + + + + + + " > $VERAPDFPATH/install.xml + echo "Installing veraPDF" + VERAPDFINSTALLJAR=$(find $VERAPDFPATH -type f -name "*.jar" | head -n 1); [[ -z "$VERAPDFINSTALLJAR" ]] && { echo "No veraPDF installer found" >&2; exit 1; } || echo "veraPDF installer fount at $VERAPDFINSTALLJAR" + java -jar $VERAPDFINSTALLJAR $VERAPDFPATH/install.xml + echo "Creating test PDF (1)" + php -f examples/02_ZugferdDocumentPdfBuilder_EN16931.php + echo "Running PDF validation" + VERAPDFRESULT=$($VERAPDFPATH/verapdf --format text --flavour 3b --loglevel 0 examples/02_ZugferdDocumentPdfBuilder_PrintLayout_Merged.pdf) + echo "Result of validation" + echo $VERAPDFRESULT + [[ $VERAPDFRESULT == PASS* ]] && echo "PDF validation passed" || { echo "Error: PDF validation not passed" >&2; exit 1; } + echo "Creating test PDF (2)" + php -f examples/02_ZugferdDocumentPdfBuilder_XRECHNUNG.php + echo "Running PDF validation" + VERAPDFRESULT=$($VERAPDFPATH/verapdf --format text --flavour 3b --loglevel 0 examples/02_ZugferdDocumentPdfBuilder_PrintLayout_Merged.pdf) + echo "Result of validation" + echo $VERAPDFRESULT + [[ $VERAPDFRESULT == PASS* ]] && echo "PDF validation passed" || { echo "Error: PDF validation not passed" >&2; exit 1; } + + - name: Documentation + continue-on-error: true + run: | + wget $PHPDOCUMENTORURL -O $PHPDOCUMENTORFILENAME + chmod +x $PHPDOCUMENTORFILENAME + cd build + php ../$PHPDOCUMENTORFILENAME + cd .. + rm -f $PHPDOCUMENTORFILENAME + + - name: Deploy + continue-on-error: true + run: | + zip -r build/dist/doc.zip build/doc + zip -r build/dist/builddoc.zip build/builddoc build/coverage build/coverage-html build/logs build/pdepend build/phpdoc + + - name: Publish Unit Test Results + uses: EnricoMi/publish-unit-test-result-action@v2 + with: + files: "build/logs/junit.xml" + + - name: Publish Build Logs + uses: actions/upload-artifact@v4 + with: + name: Build log artifacts for ubuntu-24.04 PHP 8.3 (Release) + path: build/logs + + - name: Generate Release Notes + id: changelog + run: | + prev_tag=$(git tag -l --sort=-v:refname | sed -n '2p') + curr_tag=$(git tag -l --sort=-v:refname | sed -n '1p') + if [ -z "$prev_tag" ]; then + prev_tag=$(git rev-list --max-parents=0 HEAD) + fi + if [ -z "$curr_tag" ]; then + curr_tag=$(git rev-parse HEAD) + fi + echo "Previous Tag .... $prev_tag" + echo "Current Tag ..... $curr_tag" + git log --no-merges --pretty=format:"- %s (%an)" $prev_tag..$curr_tag | grep -Ev '^\- \[INFR\]|\- \[CS\] |\- \[DOC\] ' | sed -E 's/^- (#.*)/- [ENH] \1/' > build/releasenotes.txt + ls -l build/ + ls -l build/releasenotes.txt + cat build/releasenotes.txt + + - name: Make Release + uses: ncipollo/release-action@v1 + with: + artifacts: "build/dist/doc.zip,build/dist/builddoc.zip" + bodyFile: "build/releasenotes.txt" diff --git a/vendor/horstoeko/zugferd/.github/workflows/build.wiki.yml b/vendor/horstoeko/zugferd/.github/workflows/build.wiki.yml new file mode 100644 index 000000000..9851851ea --- /dev/null +++ b/vendor/horstoeko/zugferd/.github/workflows/build.wiki.yml @@ -0,0 +1,63 @@ +name: Update Wiki + +on: + workflow_run: + workflows: + - Release + types: + - completed + workflow_dispatch: + +env: + GH_PAT: ${{ secrets.UPDATEWIKITOKEN }} + +jobs: + updatewiki: + permissions: write-all + runs-on: "ubuntu-24.04" + + steps: + - name: Checkout Sources + uses: actions/checkout@v4 + + - name: Setup PHP with PECL extension + uses: shivammathur/setup-php@v2 + with: + php-version: "8.4" + extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, bcmath, intl, gd, exif, iconv, imagick, json, xdebug + coverage: xdebug + + - name: Get Composer Cache Directory + id: composer-cache + run: | + echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v4 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-8.4-composer-${{ hashFiles('**/composer.json') }} + restore-keys: | + ${{ runner.os }}-8.4-composer-${{ hashFiles('**/composer.json') }} + ${{ runner.os }}-8.4-composer- + + - name: Install composer dependencies + run: | + composer config -g github-oauth.github.com ${{ secrets.GITHUB_TOKEN }} + composer update --no-interaction --prefer-dist + + - name: Update Wiki + continue-on-error: true + run: | + php -f make/genmethoddocs.php + git clone https://$GH_PAT@github.com/horstoeko/zugferd.wiki.git wiki + mv make/*.md wiki + cd wiki + git config user.name "HorstOeko" + git config user.email "horstoeko@erling.com.de" + if [ -n "$(git status --porcelain)" ]; then + git add -A + git commit -m "Automatische Aktualisierung des Wikis" + git push + else + echo "No changes found. Skipping." + fi diff --git a/vendor/horstoeko/zugferd/.github/workflows/maintain-issues-stale.yml b/vendor/horstoeko/zugferd/.github/workflows/maintain-issues-stale.yml new file mode 100644 index 000000000..ae33de7a9 --- /dev/null +++ b/vendor/horstoeko/zugferd/.github/workflows/maintain-issues-stale.yml @@ -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@v9 + with: + days-before-issue-stale: 7 + days-before-issue-close: 5 + stale-issue-label: "stale" + stale-issue-message: "This issue is stale because it has been open for 7 days with no activity." + close-issue-message: "This issue was closed because it has been inactive for 5 days since being marked as stale." + days-before-pr-stale: -1 + days-before-pr-close: -1 + repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/vendor/horstoeko/zugferd/.gitignore b/vendor/horstoeko/zugferd/.gitignore new file mode 100644 index 000000000..7d01bc9e9 --- /dev/null +++ b/vendor/horstoeko/zugferd/.gitignore @@ -0,0 +1,93 @@ +#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/* +/make/*.md +.phpunit.result.cache +/.phpdoc/ +/build/api/ +/build/coverage/ +/build/coverage-html/ +/build/doc/ +/build/logs/ +/build/pdepend/ +/build/phpdox/ +/build/phpdoc/ +/build/releasenotes.txt +/*.phar +/composer.lock +/examples/fullpdf.pdf +/examples/factur-x.xml +/examples/filetovalidate-report.xml +/examples/filetovalidate-report.html +myfile_dbg.xml +/examples/*report*.* + +02_ZugferdDocumentPdfBuilder_PrintLayout_Merged.pdf diff --git a/vendor/horstoeko/zugferd/CHANGELOG.md b/vendor/horstoeko/zugferd/CHANGELOG.md new file mode 100644 index 000000000..0bce5e07b --- /dev/null +++ b/vendor/horstoeko/zugferd/CHANGELOG.md @@ -0,0 +1,1261 @@ +## v1.0.114 + +``Previous version v1.0.113`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :bug: | [e7869f7](https://github.com/horstoeko/zugferd/commit/e7869f7) | 2025-04-29 17:50:06 CEST | HorstOeko | [FIX] Fix xmpversion for Profile XRechnung 1.2 | [#288](https://github.com/horstoeko/zugferd/issues/288) +| :bug: | [58b98f8](https://github.com/horstoeko/zugferd/commit/58b98f8) | 2025-04-29 17:42:47 CEST | HorstOeko | [FIX] Fix xmpversion for Profile XRechnung 1.2 | [#288](https://github.com/horstoeko/zugferd/issues/288) +| :new: | [1599ee8](https://github.com/horstoeko/zugferd/commit/1599ee8) | 2025-04-29 14:58:54 CEST | HorstOeko | [ENH] XMP Version should reflect the version of the XRechnung | [#288](https://github.com/horstoeko/zugferd/issues/288) +| :new_moon: | [f8d3daf](https://github.com/horstoeko/zugferd/commit/f8d3daf) | 2025-04-29 09:21:40 CEST | HorstOeko | Changed PDF Conformancelevel for Profile XRechnung to "XRECHNUNG" | [#286](https://github.com/horstoeko/zugferd/issues/286) + +:exclamation: _There are 4 internal commit(s)_ + +## v1.0.113 + +``Previous version v1.0.112`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new: | [c249d9a](https://github.com/horstoeko/zugferd/commit/c249d9a) | 2025-04-18 13:11:43 CEST | HorstOeko | [ENH] Updated KOSiT Validator Scenario URL | +| :new_moon: | [0dbee49](https://github.com/horstoeko/zugferd/commit/0dbee49) | 2025-04-12 08:08:55 CEST | HorstOeko | First Prototype of ZugferdDocumentProfileConverter -> Added tests | [#263](https://github.com/horstoeko/zugferd/issues/263) +| :new_moon: | [47c1f22](https://github.com/horstoeko/zugferd/commit/47c1f22) | 2025-04-11 20:29:20 CEST | HorstOeko | First Prototype of ZugferdDocumentProfileConverter | [#263](https://github.com/horstoeko/zugferd/issues/263) + +:exclamation: _There are 19 internal commit(s)_ + +## v1.0.112 + +``Previous version v1.0.111`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new: | [07f9f0e](https://github.com/horstoeko/zugferd/commit/07f9f0e) | 2025-03-29 12:29:37 CET | HorstOeko | [ENH] Updated ZugferdProfiles | +| :new: | [109731d](https://github.com/horstoeko/zugferd/commit/109731d) | 2025-03-29 12:24:55 CET | HorstOeko | [ENH] Added XSLT files to scheme-directory | + +:exclamation: _There are 3 internal commit(s)_ + +## v1.0.111 + +``Previous version v1.0.110`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [4375885](https://github.com/horstoeko/zugferd/commit/4375885) | 2025-03-29 09:48:51 CET | HorstOeko | Add support for ApplicableTradePaymentPenaltyTerms (BG-X-43) | [#279](https://github.com/horstoeko/zugferd/issues/279) +| :new_moon: | [d184fdf](https://github.com/horstoeko/zugferd/commit/d184fdf) | 2025-03-29 08:11:14 CET | HorstOeko | Added support for PartialPaymentAmount (BT-X-275) on PaymentTerms (EXTENDED-Profile only) | [#277](https://github.com/horstoeko/zugferd/issues/277) +| :new_moon: | [37f26aa](https://github.com/horstoeko/zugferd/commit/37f26aa) | 2025-03-27 15:13:45 CET | HorstOeko | Fix namespaces (Removed unused old namespaces) | [#274](https://github.com/horstoeko/zugferd/issues/274) +| :new: | [ea00365](https://github.com/horstoeko/zugferd/commit/ea00365) | 2025-03-15 08:56:09 CET | HorstOeko | [ENH] Update build and cs config | +| :new: | [0c72f1a](https://github.com/horstoeko/zugferd/commit/0c72f1a) | 2025-03-14 21:46:13 CET | HorstOeko | [ENH] Update build and cs config | + +:exclamation: _There are 5 internal commit(s)_ + +## v1.0.110 + +``Previous version v1.0.109`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new: | [7323d94](https://github.com/horstoeko/zugferd/commit/7323d94) | 2025-03-13 02:48:45 CET | HorstOeko | [ENH] Added ZugferdDocumentBuilder::addDocumentPositionAdditionalReferencedObjDocument, deprecated ZugferdDocumentBuilder::addDocumentPositionAdditionalReferencedDocumentObj | +| :new: | [c895d6b](https://github.com/horstoeko/zugferd/commit/c895d6b) | 2025-03-12 11:04:02 CET | HorstOeko | [ENH] Added getDocumentPositionAdditionalReferencedDocument to ZugferdDocumentReader (BT-X-31) | +| :new: | [72008f1](https://github.com/horstoeko/zugferd/commit/72008f1) | 2025-03-12 09:05:07 CET | HorstOeko | [ENH] Added method for BG-X-48 to ZugferdDocumentBuilder and ZugferdDocumentReader | + +:exclamation: _There are 7 internal commit(s)_ + +## v1.0.109 + +``Previous version v1.0.108`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :bug: | [af678af](https://github.com/horstoeko/zugferd/commit/af678af) | 2025-03-11 12:36:08 CET | HorstOeko | [FIX] Fixed naming of TradeAccountingAccount-Methods in ZugferdDocumentReader | [#270](https://github.com/horstoeko/zugferd/issues/270) +| :new: | [66b73d0](https://github.com/horstoeko/zugferd/commit/66b73d0) | 2025-03-11 12:13:43 CET | HorstOeko | [ENH] Added methods to read ReceivableSpecifiedTradeAccountingAccounts on document- and position-level | [#270](https://github.com/horstoeko/zugferd/issues/270) +| :bug: | [498f1a3](https://github.com/horstoeko/zugferd/commit/498f1a3) | 2025-03-11 10:47:18 CET | HorstOeko | [FIX] TradeAccountingAccount in ZugferdDocumentBuilder | + +:exclamation: _There are 5 internal commit(s)_ + +## v1.0.108 + +``Previous version v1.0.107`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new: | [a9866c6](https://github.com/horstoeko/zugferd/commit/a9866c6) | 2025-03-11 01:44:23 CET | HorstOeko | [ENH] Added method for BT-128 to ZugferdDocumentBuilder | + +:exclamation: _There is one internal commit_ + +## v1.0.107 + +``Previous version v1.0.106`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [9a66046](https://github.com/horstoeko/zugferd/commit/9a66046) | 2025-03-10 16:09:49 CET | HorstOeko | Added missing methods for BT-128 to ZugferdDocumentReader | [#268](https://github.com/horstoeko/zugferd/issues/268) +| :new: | [278a744](https://github.com/horstoeko/zugferd/commit/278a744) | 2025-02-20 12:50:38 CET | HorstOeko | [ENH] Added support for Date-Format 610 | [#259](https://github.com/horstoeko/zugferd/issues/259) +| :new_moon: | [2a21fc5](https://github.com/horstoeko/zugferd/commit/2a21fc5) | 2025-02-11 16:36:44 CET | wurst-hans | Add creator tool name to meta data | + +:exclamation: _There are 2 internal commit(s)_ + +## v1.0.106 + +``Previous version v1.0.105`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :bug: | [2283f2e](https://github.com/horstoeko/zugferd/commit/2283f2e) | 2025-02-03 13:58:02 CET | HorstOeko | [FIX] Fixed issues regarding the use of is_file | [#253](https://github.com/horstoeko/zugferd/issues/253) + +:exclamation: _There is one internal commit_ + +## v1.0.105 + +``Previous version v1.0.104`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [95489fd](https://github.com/horstoeko/zugferd/commit/95489fd) | 2025-01-30 14:20:18 CET | HorstOeko | Getting package version fail-safe | [#250](https://github.com/horstoeko/zugferd/issues/250) +| :new: | [563f9da](https://github.com/horstoeko/zugferd/commit/563f9da) | 2025-01-28 11:26:46 CET | HorstOeko | [ENH] Add Support for Setting SerializerBuilder Cache Directory | [#245](https://github.com/horstoeko/zugferd/issues/245) +| :new: | [69a94f2](https://github.com/horstoeko/zugferd/commit/69a94f2) | 2025-01-28 09:33:06 CET | HorstOeko | [ENH] Make isFile() and xmlDataIsFile() methods overridable | [#244](https://github.com/horstoeko/zugferd/issues/244) +| :new: | [4efdc37](https://github.com/horstoeko/zugferd/commit/4efdc37) | 2025-01-28 09:27:42 CET | HorstOeko | [ENH] Make isFile() and xmlDataIsFile() methods overridable | [#244](https://github.com/horstoeko/zugferd/issues/244) +| :new: | [d3fcfc4](https://github.com/horstoeko/zugferd/commit/d3fcfc4) | 2025-01-28 08:45:12 CET | HorstOeko | [ENH] Make isFile() and xmlDataIsFile() methods overridable | [#244](https://github.com/horstoeko/zugferd/issues/244) +| :new_moon: | [45524d7](https://github.com/horstoeko/zugferd/commit/45524d7) | 2025-01-28 05:17:19 CET | HorstOeko | Make isFile() and xmlDataIsFile() methods overridable | [#244](https://github.com/horstoeko/zugferd/issues/244) +| :new_moon: | [dfc2b17](https://github.com/horstoeko/zugferd/commit/dfc2b17) | 2025-01-22 16:54:08 CET | HorstOeko | Added Codelist UNTDID 1229 (ZugferdLineStatusCodes) | + +:exclamation: _There are 8 internal commit(s)_ + +## v1.0.104 + +``Previous version v1.0.103`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new: | [9c37fbe](https://github.com/horstoeko/zugferd/commit/9c37fbe) | 2025-01-19 10:23:02 CET | HorstOeko | [ENH] Added tests for ZugferdDocumentBuilder::addDocumentPaymentTermXRechnung | +| :new: | [7989261](https://github.com/horstoeko/zugferd/commit/7989261) | 2025-01-13 05:46:45 CET | HorstOeko | [ENH] ZugferdDocumentPdfReader uses internally the ZugferdDocumentPdfReaderExt | + +:exclamation: _There are 12 internal commit(s)_ + +## v1.0.103 + +``Previous version v1.0.102`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [ce07a05](https://github.com/horstoeko/zugferd/commit/ce07a05) | 2025-01-10 17:31:05 CET | wurst-hans | Fixed incompatible PDF/A header bytes | +| :bug: | [04a2814](https://github.com/horstoeko/zugferd/commit/04a2814) | 2025-01-10 06:17:05 CET | HorstOeko | [FIX] Fix getters in getDocumentShipToContact | + +:exclamation: _There are 12 internal commit(s)_ + +## v1.0.102 + +``Previous version v1.0.101`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :bug: | [c43788a](https://github.com/horstoeko/zugferd/commit/c43788a) | 2025-01-03 11:49:47 CET | HorstOeko | [FIX] Fixed dependency for symfony/finder | +| :bug: | [8273bb2](https://github.com/horstoeko/zugferd/commit/8273bb2) | 2024-12-31 10:15:41 CET | HorstOeko | [FIX] Updated ZugferdDocumentPdfBuilderAbstract -> Remove useless parameter from 'downloadString', Updated DocBlocks | + +:exclamation: _There are 21 internal commit(s)_ + +## v1.0.101 + +``Previous version v1.0.100`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new: | [3095bd3](https://github.com/horstoeko/zugferd/commit/3095bd3) | 2024-12-29 19:15:59 CET | HorstOeko | [ENH] UNTDID 5153 Duty or tax or fee type name code | +| :new: | [9bde1f2](https://github.com/horstoeko/zugferd/commit/9bde1f2) | 2024-12-29 19:06:57 CET | HorstOeko | [ENH] Added codelist UNTDID 5305 Duty or tax or fee category code | +| :new: | [188a155](https://github.com/horstoeko/zugferd/commit/188a155) | 2024-12-29 18:36:48 CET | HorstOeko | [ENH] Added new methods to ZugferdDocumentBuilder to add an invoice supporting additional document, a tender or lot document reference or a reference of the calculated object | +| :new: | [ae4a8e3](https://github.com/horstoeko/zugferd/commit/ae4a8e3) | 2024-12-29 18:34:00 CET | HorstOeko | [ENH] Added Codelist ZugferdDocumentType which holds the type codes for "AdditionalReferencedDocument" | +| :new: | [d4c2b5b](https://github.com/horstoeko/zugferd/commit/d4c2b5b) | 2024-12-28 21:51:37 CET | HorstOeko | [ENH] Introducing ZugferdPdfValidator | +| :new: | [8115b1f](https://github.com/horstoeko/zugferd/commit/8115b1f) | 2024-12-28 21:50:53 CET | HorstOeko | [ENH] ZugferdKositValidator -> Temp.-File handling, Codestyle | + +:exclamation: _There are 18 internal commit(s)_ + +## v1.0.100 + +``Previous version v1.0.99`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new: | [d3498b0](https://github.com/horstoeko/zugferd/commit/d3498b0) | 2024-12-25 13:55:35 CET | HorstOeko | [ENH] Introducing new ZugferdDocumentPdfReaderExt (Extended PDF Reader) | +| :new: | [84bc90d](https://github.com/horstoeko/zugferd/commit/84bc90d) | 2024-12-23 08:41:52 CET | HorstOeko | [ENH] ZugferdKositValidator uses the configuration-release from 2024-10-31 | +| :new: | [e38c9ce](https://github.com/horstoeko/zugferd/commit/e38c9ce) | 2024-12-18 17:32:32 CET | HorstOeko | [ENH] Added Shortcut methods addDocumentBuyerVATRegistrationNumber and addDocumentBuyerTaxNumber | +| :new: | [388bb36](https://github.com/horstoeko/zugferd/commit/388bb36) | 2024-12-18 15:14:45 CET | HorstOeko | [ENH] Added Codelists as Enum (see PR ) | [#223](https://github.com/horstoeko/zugferd/issues/223) +| :bug: | [eef01c1](https://github.com/horstoeko/zugferd/commit/eef01c1) | 2024-12-18 14:53:30 CET | HorstOeko | [FIX] Removed Bugs from PR - Removed feature temporary | [#223](https://github.com/horstoeko/zugferd/issues/223) +| :bug: | [87dc563](https://github.com/horstoeko/zugferd/commit/87dc563) | 2024-12-18 14:43:57 CET | HorstOeko | [FIX] Removed Bugs from PR | [#223](https://github.com/horstoeko/zugferd/issues/223) +| :new_moon: | [5429be9](https://github.com/horstoeko/zugferd/commit/5429be9) | 2024-12-18 12:30:48 CET | Marc Krämer | adding backed enums for codelists | + +:exclamation: _There are 16 internal commit(s)_ + +## v1.0.99 + +``Previous version v1.0.98`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :bug: | [bd0894d](https://github.com/horstoeko/zugferd/commit/bd0894d) | 2024-12-17 17:03:43 CET | HorstOeko | [FIX] Make payment card number unrecognizable | + +:exclamation: _There are 4 internal commit(s)_ + +## v1.0.98 + +``Previous version v1.0.97`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new: | [6e3a1da](https://github.com/horstoeko/zugferd/commit/6e3a1da) | 2024-12-17 04:57:36 CET | HorstOeko | [ENH] More improvemets to ZugferdKositValidator | +| :new: | [05544c5](https://github.com/horstoeko/zugferd/commit/05544c5) | 2024-12-16 16:35:59 CET | HorstOeko | [ENH] More improvemets to ZugferdKositValidator | +| :new: | [a0bc48c](https://github.com/horstoeko/zugferd/commit/a0bc48c) | 2024-12-16 06:04:39 CET | HorstOeko | [ENH] ZugferdKositValidator can now also accept a string (containing the XML to be validated) instead of an instance of ZugferdDocument | + +:exclamation: _There is one internal commit_ + +## v1.0.97 + +``Previous version v1.0.96`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new: | [c09ef7e](https://github.com/horstoeko/zugferd/commit/c09ef7e) | 2024-12-15 17:59:11 CET | HorstOeko | [ENH] Improved KositValidator remote validation | + +:exclamation: _There are 3 internal commit(s)_ + +## v1.0.96 + +``Previous version v1.0.95`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new: | [8a63f49](https://github.com/horstoeko/zugferd/commit/8a63f49) | 2024-12-15 12:54:22 CET | HorstOeko | [ENH] ZugferdKositValidator can optionally call a running Validator in Daemon-Mode via HTTP | +| :new_moon: | [8c68d09](https://github.com/horstoeko/zugferd/commit/8c68d09) | 2024-12-13 14:14:30 CET | HorstOeko | Revert "Automatische Aktualisierung des ChangeLogs" | +| :new_moon: | [7443f2c](https://github.com/horstoeko/zugferd/commit/7443f2c) | 2024-12-13 14:11:42 CET | HorstOeko | Automatische Aktualisierung des ChangeLogs | + +:exclamation: _There are 34 internal commit(s)_ + +## v1.0.95 + +``Previous version v1.0.94`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [e2ee3d1](https://github.com/horstoeko/zugferd/commit/e2ee3d1) | 2024-12-11 17:15:15 CET | HorstOeko | Significantly increased PDF file size -> Changed to smaller ICC profile | [#211](https://github.com/horstoeko/zugferd/issues/211) + +:exclamation: _There is one internal commit_ + +## v1.0.94 + +``Previous version v1.0.93`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [3735ae8](https://github.com/horstoeko/zugferd/commit/3735ae8) | 2024-12-11 06:01:52 CET | HorstOeko | Customizable PDF Metadata -> Additionally using FPDF-BuiltIn-Metadata methods (Fix UTF8) | [#208](https://github.com/horstoeko/zugferd/issues/208) +| :new_moon: | [17edaa7](https://github.com/horstoeko/zugferd/commit/17edaa7) | 2024-12-11 05:52:04 CET | HorstOeko | Customizable PDF Metadata -> Additionally using FPDF-BuiltIn-Metadata methods | [#208](https://github.com/horstoeko/zugferd/issues/208) +| :new_moon: | [7a9ade1](https://github.com/horstoeko/zugferd/commit/7a9ade1) | 2024-12-11 05:29:46 CET | HorstOeko | Customizable PDF Metadata -> Removed unused variable in PdfBuilderEn16931Test::testCustomMetaInformation | [#208](https://github.com/horstoeko/zugferd/issues/208) +| :new_moon: | [fa686e9](https://github.com/horstoeko/zugferd/commit/fa686e9) | 2024-12-11 05:02:40 CET | HorstOeko | Customizable PDF Metadata -> Added Templates and Callback Function | [#208](https://github.com/horstoeko/zugferd/issues/208) + +## v1.0.93 + +``Previous version v1.0.92`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new: | [d1f0782](https://github.com/horstoeko/zugferd/commit/d1f0782) | 2024-12-09 18:04:39 CET | HorstOeko | [ENH] Added tests for deterministic mode | +| :new: | [9aaebf3](https://github.com/horstoeko/zugferd/commit/9aaebf3) | 2024-12-09 17:50:12 CET | HorstOeko | [ENH] Improved PDF-Tests | +| :new: | [3ed50a4](https://github.com/horstoeko/zugferd/commit/3ed50a4) | 2024-12-09 16:39:59 CET | HorstOeko | [ENH] Use DateTime values with correct timezone | +| :new_moon: | [28f312c](https://github.com/horstoeko/zugferd/commit/28f312c) | 2024-12-09 14:43:34 CET | HorstOeko | Fix DateTime-Handling (strings with linebreaks) | [#206](https://github.com/horstoeko/zugferd/issues/206) + +:exclamation: _There are 2 internal commit(s)_ + +## v1.0.92 + +``Previous version v1.0.91`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new: | [fcf7ffc](https://github.com/horstoeko/zugferd/commit/fcf7ffc) | 2024-12-07 10:36:47 CET | HorstOeko | [ENH] Add deterministic Mode to ZugferdDocumentPdfBuilderAbstract (and derived classes). This mode should only used for testing purposes | +| :new: | [d799b4c](https://github.com/horstoeko/zugferd/commit/d799b4c) | 2024-12-08 10:00:57 CET | HorstOeko | [ENH] Changed InvalidArgumentException to ZugferdInvalidArgumentException | +| :new: | [38ea3f7](https://github.com/horstoeko/zugferd/commit/38ea3f7) | 2024-12-07 10:36:47 CET | HorstOeko | [ENH] Add deterministic Mode to ZugferdDocumentPdfBuilderAbstract (and derived classes). This mode should only used for testing purposes | +| :new: | [e5e0498](https://github.com/horstoeko/zugferd/commit/e5e0498) | 2024-12-06 14:16:47 CET | HorstOeko | [ENH] Added ZugferdSpecificationVersions to get the latest used specification versions | +| :bug: | [2a2ff79](https://github.com/horstoeko/zugferd/commit/2a2ff79) | 2024-12-06 05:06:00 CET | HorstOeko | [FIX] Typo in variable Name | + +:exclamation: _There is one internal commit_ + +## v1.0.91 + +``Previous version v1.0.90`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new: | [d66ee79](https://github.com/horstoeko/zugferd/commit/d66ee79) | 2024-12-05 05:40:27 CET | HorstOeko | [ENH] Added new methods addDocumentPaymentMeanToCreditTransferNonSepa and addDocumentPaymentMeanToDirectDebitNonSepa to ZugferdDocumentBuilder | +| :new_moon: | [dc5a881](https://github.com/horstoeko/zugferd/commit/dc5a881) | 2024-12-02 17:04:33 CET | Carsten Schmitz | Fixed issue: Using addDocumentAllowanceCharge with Code SERVICE_OUTSIDE_SCOPE_OF_TAX never passes validation as the Taxtype is omitted if you pass no VAT rate | + +:exclamation: _There are 5 internal commit(s)_ + +## v1.0.90 + +``Previous version v1.0.89`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new: | [2dfebcb](https://github.com/horstoeko/zugferd/commit/2dfebcb) | 2024-12-03 05:52:07 CET | HorstOeko | [ENH] Added ZugferdDocumentReader::getDocumentPositionLineSummationExt to satisfy the EXTENDED profile | +| :new: | [ea74726](https://github.com/horstoeko/zugferd/commit/ea74726) | 2024-12-03 05:45:20 CET | HorstOeko | [ENH] Added ZugferdDocumentBuilder::setDocumentPositionLineSummationExt to satisfy the EXTENDED profile | +| :new: | [75ae647](https://github.com/horstoeko/zugferd/commit/75ae647) | 2024-12-03 05:35:33 CET | HorstOeko | [ENH] More parameters for LineMonetarySummation to satisfy the EXTENDED profile | + +## v1.0.89 + +:exclamation: _There are 5 internal commit(s)_ + +## v1.0.88 + +``Previous version v1.0.87`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :closed_book: | [015544a](https://github.com/horstoeko/zugferd/commit/015544a) | 2024-12-02 05:00:26 CET | HorstOeko | [DEPR] deprecated ZugferdDocumentReader::getDocumentPositionLineSummation, use ZugferdDocumentReader::getDocumentPositionLineSummationSimple | + +## v1.0.87 + +``Previous version v1.0.86`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new: | [513d3b8](https://github.com/horstoeko/zugferd/commit/513d3b8) | 2024-12-01 12:37:49 CET | HorstOeko | [FEAT] Added methods ZugferdDocumentReader::getDocumentQuotationReferencedDocument and ZugferdDocumentReader::getDocumentPositionQuotationReferencedDocument | +| :new_moon: | [f408494](https://github.com/horstoeko/zugferd/commit/f408494) | 2024-12-01 12:08:28 CET | HorstOeko | Added methods ZugferdDocumentBuiler::setDocumentQuotationReferencedDocument and ZugferdDocumentBuiler::setDocumentPositionQuotationReferencedDocument | +| :new: | [7bd41ae](https://github.com/horstoeko/zugferd/commit/7bd41ae) | 2024-12-01 11:44:23 CET | HorstOeko | [FEAT] Added method ZugferdDocumentReader::getDocumentPositionSellerOrderReferencedDocument | +| :new: | [c35cdda](https://github.com/horstoeko/zugferd/commit/c35cdda) | 2024-12-01 11:36:24 CET | HorstOeko | [FEAT] Added method ZugferdDocumentBuilder::setDocumentPositionSellerOrderReferencedDocument | +| :new_moon: | [dee76ec](https://github.com/horstoeko/zugferd/commit/dee76ec) | 2024-12-01 11:24:28 CET | HorstOeko | Added industryAssignedID to ZugferdDocumentReader::getDocumentPositionReferencedProduct | +| :new: | [8ebd056](https://github.com/horstoeko/zugferd/commit/8ebd056) | 2024-12-01 11:13:32 CET | HorstOeko | [FEAT] Added industryAssignedID to ZugferdDocumentBuilder::addDocumentPositionReferencedProduct | + +:exclamation: _There is one internal commit_ + +## v1.0.86 + +``Previous version v1.0.85`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [02d0e4c](https://github.com/horstoeko/zugferd/commit/02d0e4c) | 2024-11-29 05:36:43 CET | HorstOeko | Added addDocumentSellerVATRegistrationNumber and addDocumentSellerTaxNumber to ZugferdDocumentBuilder | +| :new_moon: | [9d6d67a](https://github.com/horstoeko/zugferd/commit/9d6d67a) | 2024-11-29 05:02:54 CET | HorstOeko | Fix method visibillity in ZugferdDocumentPdfMerger | +| :new_moon: | [f7e2293](https://github.com/horstoeko/zugferd/commit/f7e2293) | 2024-11-28 09:58:36 CET | Fabian Boensch | Fix composer autoload psr-4 mapping | +| :new_moon: | [c2f6b17](https://github.com/horstoeko/zugferd/commit/c2f6b17) | 2024-11-28 05:22:40 CET | HorstOeko | Use DeliveryTermsCodeType in getTradeDeliveryTermsType | + +:exclamation: _There is one internal commit_ + +## v1.0.85 + +``Previous version v1.0.84`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [0ef5615](https://github.com/horstoeko/zugferd/commit/0ef5615) | 2024-11-27 17:38:17 CET | HorstOeko | Allow adding empty ShipTo nodes to the document without enforcing a TradeParty name | [#189](https://github.com/horstoeko/zugferd/issues/189) +| :new_moon: | [380709c](https://github.com/horstoeko/zugferd/commit/380709c) | 2024-11-27 17:01:45 CET | HorstOeko | Allow adding empty ShipTo nodes to the document without enforcing a TradeParty name | [#189](https://github.com/horstoeko/zugferd/issues/189) +| :new_moon: | [90f7072](https://github.com/horstoeko/zugferd/commit/90f7072) | 2024-11-27 16:07:52 CET | HorstOeko | Updated DocBlocks in ZugferdQuickDescriptor | +| :new_moon: | [2bf73cb](https://github.com/horstoeko/zugferd/commit/2bf73cb) | 2024-11-27 04:59:52 CET | HorstOeko | Updated XRechnung Quick Examples | + +## v1.0.84 + +``Previous version v1.0.83`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [fe84c3a](https://github.com/horstoeko/zugferd/commit/fe84c3a) | 2024-11-26 18:26:40 CET | HorstOeko | Added ZugferdQuickDescriptor::doSetSupplyChainEvent | + +:exclamation: _There are 4 internal commit(s)_ + +## v1.0.83 + +``Previous version v1.0.82`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [3a7aeec](https://github.com/horstoeko/zugferd/commit/3a7aeec) | 2024-11-26 11:10:41 CET | HorstOeko | Fixed duplicated VAT Breakdown in QuickDescriptor | [#185](https://github.com/horstoeko/zugferd/issues/185) + +:exclamation: _There is one internal commit_ + +## v1.0.82 + +``Previous version v1.0.81`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [ed98443](https://github.com/horstoeko/zugferd/commit/ed98443) | 2024-11-25 20:16:38 CET | GM | Removed implicitly nullable parameter declarations | + +:exclamation: _There are 3 internal commit(s)_ + +## v1.0.81 + +``Previous version v1.0.80`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [a8ae46f](https://github.com/horstoeko/zugferd/commit/a8ae46f) | 2024-11-25 17:23:59 CET | HorstOeko | Add method for adding payment terms in special XRechnung-Syntax | [#181](https://github.com/horstoeko/zugferd/issues/181) +| :new_moon: | [31fc364](https://github.com/horstoeko/zugferd/commit/31fc364) | 2024-11-25 05:28:47 CET | HorstOeko | Updated example for XRechnung 3 | +| :new_moon: | [0976dd4](https://github.com/horstoeko/zugferd/commit/0976dd4) | 2024-11-22 15:16:53 CET | HorstOeko | Fixed Inconsistent Naming in Parameters | [#177](https://github.com/horstoeko/zugferd/issues/177) +| :new_moon: | [43dff88](https://github.com/horstoeko/zugferd/commit/43dff88) | 2024-11-22 15:15:57 CET | HorstOeko | Fixed Inconsistent Naming in Parameters | [#177](https://github.com/horstoeko/zugferd/issues/177) +| :new_moon: | [aee61fe](https://github.com/horstoeko/zugferd/commit/aee61fe) | 2024-11-22 05:45:16 CET | HorstOeko | Better handling of mimetypes in ReferencedDocumentType | +| :new_moon: | [2ebe0d3](https://github.com/horstoeko/zugferd/commit/2ebe0d3) | 2024-11-21 15:16:21 CET | HorstOeko | Better handling of not readable files | + +:exclamation: _There are 25 internal commit(s)_ + +## v1.0.80 + +``Previous version v1.0.79`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [1542533](https://github.com/horstoeko/zugferd/commit/1542533) | 2024-11-16 13:01:47 CET | HorstOeko | Fix method visibillity in ZugferdKositValidator | + +:exclamation: _There are 11 internal commit(s)_ + +## v1.0.79 + +``Previous version v1.0.78`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [0b101f8](https://github.com/horstoeko/zugferd/commit/0b101f8) | 2024-11-16 07:34:43 CET | HorstOeko | Handle Decimals of the measure type | [#169](https://github.com/horstoeko/zugferd/issues/169) +| :new_moon: | [cf43e13](https://github.com/horstoeko/zugferd/commit/cf43e13) | 2024-11-14 16:12:56 CET | HorstOeko | Fix Exception in ZugferdDocumentPdfMerger | +| :new_moon: | [7d8f01d](https://github.com/horstoeko/zugferd/commit/7d8f01d) | 2024-11-12 16:58:21 CET | HorstOeko | Better message handling in ZugferdKositValidator | + +:exclamation: _There are 2 internal commit(s)_ + +## v1.0.78 + +``Previous version v1.0.77`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [bacbe67](https://github.com/horstoeko/zugferd/commit/bacbe67) | 2024-11-11 11:59:22 CET | HorstOeko | Reset internal pointers | +| :new_moon: | [6c102e6](https://github.com/horstoeko/zugferd/commit/6c102e6) | 2024-11-11 11:58:44 CET | HorstOeko | Reset internal pointers | + +## v1.0.77 + +``Previous version v1.0.76`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [f615cf4](https://github.com/horstoeko/zugferd/commit/f615cf4) | 2024-11-05 16:34:37 CET | HorstOeko | Removed duplicate context parameter | [#164](https://github.com/horstoeko/zugferd/issues/164) +| :new_moon: | [d209690](https://github.com/horstoeko/zugferd/commit/d209690) | 2024-11-04 16:30:49 CET | HorstOeko | Pre-assignment of 'BusinessProcessSpecifiedDocumentContextParameter' with 'urn:fdc:peppol.eu:2017:poacc:billing:01:1.0' in extended profile | [#159](https://github.com/horstoeko/zugferd/issues/159) +| :new_moon: | [1646873](https://github.com/horstoeko/zugferd/commit/1646873) | 2024-11-04 05:42:51 CET | HorstOeko | Pre-assignment of 'BusinessProcessSpecifiedDocumentContextParameter' with 'urn:fdc:peppol.eu:2017:poacc:billing:01:1.0' in all profiles | [#159](https://github.com/horstoeko/zugferd/issues/159) + +:exclamation: _There is one internal commit_ + +## v1.0.76 + +``Previous version v1.0.75`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [74bd98c](https://github.com/horstoeko/zugferd/commit/74bd98c) | 2024-11-03 10:05:21 CET | HorstOeko | Breaking Change: ZugferdPdfReader does not return null-values for "readAndGuessFromFile", "readAndGuessFromContent", "getXmlFromFile" and "getXmlFromContent" anymore. Now always exceptions are raised. | + +## v1.0.75 + +``Previous version v1.0.74`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [f3b99d7](https://github.com/horstoeko/zugferd/commit/f3b99d7) | 2024-11-02 08:13:19 CET | HorstOeko | Reverted changes to ZugferdKositValidator | +| :new_moon: | [6a9ba32](https://github.com/horstoeko/zugferd/commit/6a9ba32) | 2024-11-01 14:13:47 CET | HorstOeko | Improved ZugferdKositValidator -> added direct content validation, deprecated direct call of constructor, added new methods fromDocument and fromString | +| :new_moon: | [4cfa20f](https://github.com/horstoeko/zugferd/commit/4cfa20f) | 2024-11-01 12:59:28 CET | HorstOeko | Deprecated addNewTextPosition by version >= 1.0.75 | +| :new_moon: | [ce20454](https://github.com/horstoeko/zugferd/commit/ce20454) | 2024-11-01 12:29:11 CET | HorstOeko | Added more validation calls to example/XsdValidator | + +:exclamation: _There are 3 internal commit(s)_ + +## v1.0.74 + +``Previous version v1.0.73`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [7a54537](https://github.com/horstoeko/zugferd/commit/7a54537) | 2024-11-01 09:52:25 CET | HorstOeko | Possibility to add additional documents (attachments) to a PDF in the classes ``ZugferdDocumentPdfBuilder`` and ``ZugferdDocumentPdfMerger``. (See Issue ) | [#153](https://github.com/horstoeko/zugferd/issues/153) +| :new_moon: | [0d97519](https://github.com/horstoeko/zugferd/commit/0d97519) | 2024-11-01 09:14:42 CET | HorstOeko | Possibility to add additional documents (attachments) to a PDF in the classes ``ZugferdDocumentPdfBuilder`` and ``ZugferdDocumentPdfMerger``. (See Issue ) | [#153](https://github.com/horstoeko/zugferd/issues/153) +| :new_moon: | [e03f663](https://github.com/horstoeko/zugferd/commit/e03f663) | 2024-10-31 15:53:18 CET | HorstOeko | Fix sample file | [#155](https://github.com/horstoeko/zugferd/issues/155) + +:exclamation: _There is one internal commit_ + +## v1.0.73 + +``Previous version v1.0.72`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [0a1420f](https://github.com/horstoeko/zugferd/commit/0a1420f) | 2024-10-30 16:27:17 CET | HorstOeko | Added support for alternative context parameters | + +:exclamation: _There are 4 internal commit(s)_ + +## v1.0.72 + +``Previous version v1.0.71`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [9f550dc](https://github.com/horstoeko/zugferd/commit/9f550dc) | 2024-10-24 16:07:15 CEST | HorstOeko | Allow "Source" for XML attachment relationship, added quick accessor to switch to "Data", "Alternative" or "Source" relation ship | [#147](https://github.com/horstoeko/zugferd/issues/147) + +## v1.0.71 + +``Previous version v1.0.70`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [0da33d0](https://github.com/horstoeko/zugferd/commit/0da33d0) | 2024-10-24 16:07:15 CEST | HorstOeko | Added "setAttachmentRelationshipType" to ZugferdDocumentPdfBuilderAbstract for setting up an alternative relationship type for the XML attachment. Allowed values are 'Data' and 'Alternative' | [#147](https://github.com/horstoeko/zugferd/issues/147) + +## v1.0.70 + +``Previous version v1.0.69`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [78a896e](https://github.com/horstoeko/zugferd/commit/78a896e) | 2024-10-23 20:23:47 CEST | HorstOeko | Fix result type of DocumentLanguage in ZugferdDocumentReader::getDocumentInformation | +| :new_moon: | [65ce898](https://github.com/horstoeko/zugferd/commit/65ce898) | 2024-10-23 19:56:46 CEST | HorstOeko | Fix result type of DocumentNo in ZugferdDocumentReader::getDocumentInformation | + +## v1.0.69 + +``Previous version v1.0.68`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [31877c6](https://github.com/horstoeko/zugferd/commit/31877c6) | 2024-10-22 05:33:57 CEST | HorstOeko | Fixed typo in TestCase method | +| :new_moon: | [629c879](https://github.com/horstoeko/zugferd/commit/629c879) | 2024-10-22 04:50:46 CEST | HorstOeko | Sealed class ZugferdDocument | +| :new_moon: | [509f503](https://github.com/horstoeko/zugferd/commit/509f503) | 2024-10-19 09:27:59 CEST | HorstOeko | Update Codelist "ZugferdReferenceCodeQualifiers" (UNTDID 1153) | +| :new_moon: | [6c9ce73](https://github.com/horstoeko/zugferd/commit/6c9ce73) | 2024-10-19 09:22:44 CEST | HorstOeko | Update Codelist "ZugferdReferenceCodeQualifiers" (UNTDID 1153) | + +:exclamation: _There are 2 internal commit(s)_ + +## v1.0.68 + +``Previous version v1.0.67`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [c61b141](https://github.com/horstoeko/zugferd/commit/c61b141) | 2024-10-16 05:44:12 CEST | HorstOeko | Fixed ZugferdDocumentPdfBuilder brakes Hyperlink | [#139](https://github.com/horstoeko/zugferd/issues/139) + +:exclamation: _There are 2 internal commit(s)_ + +## v1.0.67 + +``Previous version v1.0.66`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [ef86636](https://github.com/horstoeko/zugferd/commit/ef86636) | 2024-10-13 15:23:56 CEST | HorstOeko | Consolidated exceptions with horstoeko/orderx | + +:exclamation: _There is one internal commit_ + +## v1.0.66 + +``Previous version v1.0.65`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [765fb73](https://github.com/horstoeko/zugferd/commit/765fb73) | 2024-10-11 11:23:09 CEST | HorstOeko | Added "getDocumentSellerCommunication" and "getDocumentBuyerCommunication" to ZugferdDocumentReader | [#136](https://github.com/horstoeko/zugferd/issues/136) +| :new_moon: | [1140e93](https://github.com/horstoeko/zugferd/commit/1140e93) | 2024-10-06 12:05:26 CEST | HorstOeko | Fix ProfileResolverTest | + +:exclamation: _There are 3 internal commit(s)_ + +## v1.0.65 + +``Previous version v1.0.64`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [ccafcda](https://github.com/horstoeko/zugferd/commit/ccafcda) | 2024-10-06 11:56:35 CEST | HorstOeko | Added test for Issue | [#133](https://github.com/horstoeko/zugferd/issues/133) +| :new_moon: | [1f2910a](https://github.com/horstoeko/zugferd/commit/1f2910a) | 2024-10-06 11:37:51 CEST | HorstOeko | Fix ZugferdDocumentPdfBuilder::getXmlContent | +| :new_moon: | [a913361](https://github.com/horstoeko/zugferd/commit/a913361) | 2024-10-06 10:12:03 CEST | HorstOeko | Fix imports (Namespaces) | +| :new_moon: | [32f641b](https://github.com/horstoeko/zugferd/commit/32f641b) | 2024-10-06 10:01:43 CEST | HorstOeko | Added more PDF tests | +| :new_moon: | [eaa7907](https://github.com/horstoeko/zugferd/commit/eaa7907) | 2024-10-05 18:24:16 CEST | HorstOeko | Added new evaluation methods hasNoValidationErrors and hasValidationErrors to ZugferdXsdValidator, deprecated validationPased and validationFailed | + +:exclamation: _There are 4 internal commit(s)_ + +## v1.0.64 + +``Previous version v1.0.63`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [ef1bb65](https://github.com/horstoeko/zugferd/commit/ef1bb65) | 2024-10-04 16:47:55 CEST | Daniel Marschall | Update ZugferdProfileResolver.php | + +:exclamation: _There are 3 internal commit(s)_ + +## v1.0.63 + +``Previous version v1.0.62`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [dddad3d](https://github.com/horstoeko/zugferd/commit/dddad3d) | 2024-10-02 17:18:59 CEST | HorstOeko | Fix name parameter in additional referenced documents -> Improved tests | [#130](https://github.com/horstoeko/zugferd/issues/130) +| :new_moon: | [73c0eb3](https://github.com/horstoeko/zugferd/commit/73c0eb3) | 2024-10-02 17:01:37 CEST | HorstOeko | Fix name parameter in additional referenced documents | [#130](https://github.com/horstoeko/zugferd/issues/130) + +:exclamation: _There are 2 internal commit(s)_ + +## v1.0.62 + +``Previous version v1.0.61`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [552600e](https://github.com/horstoeko/zugferd/commit/552600e) | 2024-09-26 05:16:45 CEST | HorstOeko | Improved tests for LogisticsServiceCharge | +| :new_moon: | [f46e964](https://github.com/horstoeko/zugferd/commit/f46e964) | 2024-09-25 05:32:32 CEST | HorstOeko | Added exchangeRate parameter to ZugferdDocumentBuilder::setForeignCurrency | +| :new_moon: | [f2766ed](https://github.com/horstoeko/zugferd/commit/f2766ed) | 2024-09-24 17:13:44 CEST | HorstOeko | Added tests for foreign currency | +| :new_moon: | [c44f617](https://github.com/horstoeko/zugferd/commit/c44f617) | 2024-09-24 16:07:22 CEST | HorstOeko | ZugferdDocumentPdfReader now contains additional methods for extracting the XML content -> better method names | [#120](https://github.com/horstoeko/zugferd/issues/120) +| :new_moon: | [10fc7d3](https://github.com/horstoeko/zugferd/commit/10fc7d3) | 2024-09-24 05:21:35 CEST | HorstOeko | ZugferdDocumentPdfReader now contains additional methods for extracting the XML content | [#120](https://github.com/horstoeko/zugferd/issues/120) +| :new_moon: | [42cbe91](https://github.com/horstoeko/zugferd/commit/42cbe91) | 2024-09-23 06:16:24 CEST | HorstOeko | Update to ZUGFeRD 2.3 (PHPCS, PHPStan) | [#119](https://github.com/horstoeko/zugferd/issues/119) +| :new_moon: | [10520c3](https://github.com/horstoeko/zugferd/commit/10520c3) | 2024-09-23 05:23:56 CEST | HorstOeko | Update to ZUGFeRD 2.3 (Support for InvoiceReferencedDocument) | [#119](https://github.com/horstoeko/zugferd/issues/119) +| :new_moon: | [d7fe3bd](https://github.com/horstoeko/zugferd/commit/d7fe3bd) | 2024-09-21 13:45:10 CEST | HorstOeko | Update to ZUGFeRD 2.3 | [#119](https://github.com/horstoeko/zugferd/issues/119) + +:exclamation: _There are 4 internal commit(s)_ + +## v1.0.61 + +``Previous version v1.0.60`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [178a51b](https://github.com/horstoeko/zugferd/commit/178a51b) | 2024-09-12 16:04:09 CEST | HorstOeko | Fix provided (Tests) | [#113](https://github.com/horstoeko/zugferd/issues/113) +| :new_moon: | [a160f93](https://github.com/horstoeko/zugferd/commit/a160f93) | 2024-09-12 16:03:45 CEST | HorstOeko | Fix provided | [#113](https://github.com/horstoeko/zugferd/issues/113) + +:exclamation: _There are 4 internal commit(s)_ + +## v1.0.60 + +``Previous version v1.0.59`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [be7780f](https://github.com/horstoeko/zugferd/commit/be7780f) | 2024-09-06 12:21:15 CEST | HorstOeko | Added missing call to libxml_clear_errors in ZugferdProfileResolver | [#108](https://github.com/horstoeko/zugferd/issues/108) +| :new_moon: | [1355220](https://github.com/horstoeko/zugferd/commit/1355220) | 2024-09-06 12:13:26 CEST | HorstOeko | Added readAndGuessFromContent to ZugferdDocumentPdfReader | [#107](https://github.com/horstoeko/zugferd/issues/107) + +:exclamation: _There is one internal commit_ + +## v1.0.59 + +``Previous version v1.0.58`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [c05d6d4](https://github.com/horstoeko/zugferd/commit/c05d6d4) | 2024-09-03 17:08:19 CEST | HorstOeko | Use LibXML Internal errors in ProfileResolver | [#104](https://github.com/horstoeko/zugferd/issues/104) + +:exclamation: _There are 7 internal commit(s)_ + +## v1.0.58 + +``Previous version v1.0.57`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [702b12e](https://github.com/horstoeko/zugferd/commit/702b12e) | 2024-09-02 17:11:36 CEST | HorstOeko | ProfileResolver should raise ZugferdUnknownXmlContentException when XML content is not valid | [#104](https://github.com/horstoeko/zugferd/issues/104) + +:exclamation: _There are 16 internal commit(s)_ + +## v1.0.57 + +``Previous version v1.0.56`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [7401eca](https://github.com/horstoeko/zugferd/commit/7401eca) | 2024-07-09 22:07:13 CEST | Daniel Marschall | Fix ZugferdPdfWriter not outputting metadata if there are no files | + +:exclamation: _There are 2 internal commit(s)_ + +## v1.0.56 + +``Previous version v1.0.55`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [34b7698](https://github.com/horstoeko/zugferd/commit/34b7698) | 2024-06-15 07:36:21 CEST | HorstOeko | Add multiple IDs for several trade parties () | [#96](https://github.com/horstoeko/zugferd/issues/96) + +## v1.0.55 + +``Previous version v1.0.54`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [deba063](https://github.com/horstoeko/zugferd/commit/deba063) | 2024-06-14 22:18:41 CEST | HorstOeko | Added methods "addDocumentSellerId" and "addDocumentBuyerId" for addings additional ids (not global ids) for seller and buyer () | [#90](https://github.com/horstoeko/zugferd/issues/90) +| :new_moon: | [e2938a4](https://github.com/horstoeko/zugferd/commit/e2938a4) | 2024-06-14 20:31:12 CEST | HorstOeko | Multiple Deprecation Warnings in 1.0.54 () | [#89](https://github.com/horstoeko/zugferd/issues/89) +| :new_moon: | [c9875bb](https://github.com/horstoeko/zugferd/commit/c9875bb) | 2024-06-14 18:11:00 CEST | HorstOeko | Revert "Update ZugferdDocumentBuilder.php" | +| :new_moon: | [00cc2fb](https://github.com/horstoeko/zugferd/commit/00cc2fb) | 2024-06-14 17:01:18 CEST | OLLIVAULT | Update ZugferdDocumentBuilder.php | +| :new_moon: | [116fc5f](https://github.com/horstoeko/zugferd/commit/116fc5f) | 2024-06-12 05:27:52 CEST | HorstOeko | Added example for how to handle AdditionalReferencedDocument | +| :new_moon: | [15da379](https://github.com/horstoeko/zugferd/commit/15da379) | 2024-06-11 15:52:16 CEST | HorstOeko | Added example for BASIC Profile | +| :new_moon: | [56af827](https://github.com/horstoeko/zugferd/commit/56af827) | 2024-06-10 16:42:16 CEST | OLLIVAULT | Update ZugferdDocumentBuilder.php | + +## v1.0.54 + +``Previous version v1.0.53`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [fa2691d](https://github.com/horstoeko/zugferd/commit/fa2691d) | 2024-06-06 19:13:44 CEST | OLLIVAULT | Update ZugferdDocumentBuilder.php | + +## v1.0.53 + +``Previous version v1.0.52`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [66e1f9c](https://github.com/horstoeko/zugferd/commit/66e1f9c) | 2024-06-05 17:00:35 CEST | OLLIVAULT | Create ZugferdElectronicAddressScheme.php | +| :new_moon: | [67af479](https://github.com/horstoeko/zugferd/commit/67af479) | 2024-06-05 16:42:18 CEST | OLLIVAULT | Create ZugferdVATExemptionReasonCode.php | +| :new_moon: | [c30973f](https://github.com/horstoeko/zugferd/commit/c30973f) | 2024-06-05 16:07:05 CEST | OLLIVAULT | Update ZugferdInvoiceType.php | +| :new_moon: | [296022d](https://github.com/horstoeko/zugferd/commit/296022d) | 2024-06-05 16:02:33 CEST | OLLIVAULT | Update ZugferdInvoiceType.php | +| :new_moon: | [2069cf8](https://github.com/horstoeko/zugferd/commit/2069cf8) | 2024-06-05 15:46:53 CEST | OLLIVAULT | Update ZugferdSchemeIdentifiers.php | +| :new_moon: | [15fbe68](https://github.com/horstoeko/zugferd/commit/15fbe68) | 2024-06-05 15:09:28 CEST | OLLIVAULT | Detailed Input Value References in DocumentBuilder | +| :new_moon: | [99af9f9](https://github.com/horstoeko/zugferd/commit/99af9f9) | 2024-06-05 15:03:53 CEST | OLLIVAULT | Detailed Input Value References in DocumentBuilder | + +## v1.0.52 + +``Previous version v1.0.51`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [63d1108](https://github.com/horstoeko/zugferd/commit/63d1108) | 2024-05-31 19:29:34 CEST | HorstOeko | ZugferdDocumentPdfBuilder -> Clean | + +## v1.0.51 + +``Previous version v1.0.49`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [9e036d4](https://github.com/horstoeko/zugferd/commit/9e036d4) | 2024-05-31 19:20:07 CEST | HorstOeko | Fix ZugferdDocumentPdfBuilder -> static::fromPdfFile | +| :new_moon: | [8f7e8f1](https://github.com/horstoeko/zugferd/commit/8f7e8f1) | 2024-05-31 16:55:28 CEST | OLLIVAULT | Detailed Input Value References in DocumentBuilder (Up to EN 16931, Work in Progress) | +| :new_moon: | [ac76dba](https://github.com/horstoeko/zugferd/commit/ac76dba) | 2024-05-30 14:31:22 CEST | OLLIVAULT | Detailed Input Value References in DocumentBuilder | + +## v1.0.50 + +``Previous version v1.0.48`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [04a4d79](https://github.com/horstoeko/zugferd/commit/04a4d79) | 2024-05-30 15:47:58 CEST | Daniel Marschall | Fixed problem with ZugferdSettings special decimal places. Fixes | [#73](https://github.com/horstoeko/zugferd/issues/73) +| :new_moon: | [3aa3fc8](https://github.com/horstoeko/zugferd/commit/3aa3fc8) | 2024-05-29 19:24:15 CEST | Daniel Marschall | Fix typo | + +:exclamation: _There are 2 internal commit(s)_ + +## v1.0.48 + +``Previous version v1.0.47`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [c018035](https://github.com/horstoeko/zugferd/commit/c018035) | 2024-05-29 17:03:11 CEST | HorstOeko | Fix for "Cannot access private property" | +| :new_moon: | [41f69cd](https://github.com/horstoeko/zugferd/commit/41f69cd) | 2024-05-29 15:57:22 CEST | Daniel Marschall | Remove unnecessary comment | +| :new_moon: | [ffa5204](https://github.com/horstoeko/zugferd/commit/ffa5204) | 2024-05-29 15:56:06 CEST | Daniel Marschall | Fix CI | +| :new_moon: | [538397b](https://github.com/horstoeko/zugferd/commit/538397b) | 2024-05-29 15:16:57 CEST | Daniel Marschall | Fixed problem with Country ID at profile minimum (Fixes ) | [#66](https://github.com/horstoeko/zugferd/issues/66) +| :new_moon: | [a0f8b04](https://github.com/horstoeko/zugferd/commit/a0f8b04) | 2024-05-29 05:12:17 CEST | HorstOeko | Added method setUnitAmountDecimals to ZugferdSettings | +| :new_moon: | [d5b192a](https://github.com/horstoeko/zugferd/commit/d5b192a) | 2024-05-28 17:59:58 CEST | HorstOeko | Define decimal places for node paths | +| :new_moon: | [3efed44](https://github.com/horstoeko/zugferd/commit/3efed44) | 2024-05-28 16:29:18 CEST | Fabian Blechschmidt | Fix typo taxCategpryCodes -> taxCategoryCodes | +| :new_moon: | [d292f8a](https://github.com/horstoeko/zugferd/commit/d292f8a) | 2024-05-26 10:16:55 CEST | Daniel Marschall | ZugferdDocumentPdfReader aceepts ZUGFeRD 1.0 filenames on unix systems | +| :new_moon: | [4d9485a](https://github.com/horstoeko/zugferd/commit/4d9485a) | 2024-05-24 12:41:22 CEST | Fabian Blechschmidt | Add second static factory | +| :new_moon: | [07adeac](https://github.com/horstoeko/zugferd/commit/07adeac) | 2024-05-24 10:28:18 CEST | Fabian Blechschmidt | Add static factory for existing files | + +:exclamation: _There is one internal commit_ + +## v1.0.47 + +``Previous version v1.0.45`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [7a5a8b7](https://github.com/horstoeko/zugferd/commit/7a5a8b7) | 2024-05-23 05:12:53 CEST | Daniel Marschall | Added $paymentReference to addDocumentPaymentMeanToCreditTransfer() () | [#55](https://github.com/horstoeko/zugferd/issues/55) +| :new_moon: | [8f86816](https://github.com/horstoeko/zugferd/commit/8f86816) | 2024-05-23 05:07:08 CEST | Daniel Marschall | addDocumentPaymentMeanToDirectDebit() now contains $creditorReferenceID parameter () | [#54](https://github.com/horstoeko/zugferd/issues/54) + +## v1.0.46 + +``Previous version v1.0.44`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [c9eb2f2](https://github.com/horstoeko/zugferd/commit/c9eb2f2) | 2024-05-21 16:19:59 CEST | Daniel Marschall | Typo | +| :new_moon: | [a60c731](https://github.com/horstoeko/zugferd/commit/a60c731) | 2024-05-21 16:18:43 CEST | Daniel Marschall | Introduced ZugferdDocumentPdfBuilderAbstract::getCreatorToolName() | +| :new_moon: | [a40ce4f](https://github.com/horstoeko/zugferd/commit/a40ce4f) | 2024-05-21 11:48:40 CEST | Daniel Marschall | Added setAdditionalCreatorTool() to the PDF builder | + +:exclamation: _There is one internal commit_ + +## v1.0.44 + +``Previous version v1.0.43`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [a0d82cc](https://github.com/horstoeko/zugferd/commit/a0d82cc) | 2024-05-16 18:19:44 CEST | HorstOeko | More granular eception (class) for several error situations | +| :new_moon: | [5daa391](https://github.com/horstoeko/zugferd/commit/5daa391) | 2024-05-16 11:41:32 CEST | HorstOeko | Fix filename of ExtendedPdfReader,php example | +| :new_moon: | [e87f749](https://github.com/horstoeko/zugferd/commit/e87f749) | 2024-05-16 05:41:43 CEST | HorstOeko | Example with the different possibilities to work with discounts/surcharges added | + +## v1.0.43 + +:exclamation: _There is one internal commit_ + +## v1.0.42 + +``Previous version v1.0.41`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [2c1f188](https://github.com/horstoeko/zugferd/commit/2c1f188) | 2024-05-11 11:26:10 CEST | HorstOeko | Added Seeker and Getter to ZugferdDocumentReader for Product Characteristics, Product Classifications and Referenced Products (at position level) | +| :new_moon: | [5ed8d50](https://github.com/horstoeko/zugferd/commit/5ed8d50) | 2024-05-07 17:02:07 CEST | HorstOeko | Added Test for Issue | [#43](https://github.com/horstoeko/zugferd/issues/43) +| :new_moon: | [bfa1560](https://github.com/horstoeko/zugferd/commit/bfa1560) | 2024-05-07 05:50:06 CEST | HorstOeko | ZugferdKositValidator -> Made message bag type constants private | +| :new_moon: | [e077217](https://github.com/horstoeko/zugferd/commit/e077217) | 2024-05-06 11:18:29 CEST | Markus Gärtner | Wrong Tax | + +:exclamation: _There is one internal commit_ + +## v1.0.41 + +``Previous version v1.0.40`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [fdc381c](https://github.com/horstoeko/zugferd/commit/fdc381c) | 2024-04-18 05:54:58 CEST | HorstOeko | Added codelist for "Accounting Accounts Classification" (EDIFICASEU_AccountingAccountsClassificationType_D10A) | + +:exclamation: _There is one internal commit_ + +## v1.0.40 + +``Previous version v1.0.39`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [ac81ad1](https://github.com/horstoeko/zugferd/commit/ac81ad1) | 2024-04-13 08:45:07 CEST | HorstOeko | KositValidator -> Better message handling, New method to retrieve the output of the JAVA-Validator-Output (getProcessOutput) | + +## v1.0.39 + +``Previous version v1.0.38`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [30c593c](https://github.com/horstoeko/zugferd/commit/30c593c) | 2024-04-12 12:58:48 CEST | HorstOeko | KositValidator -> Cache downloaded versions | +| :new_moon: | [e802b0a](https://github.com/horstoeko/zugferd/commit/e802b0a) | 2024-04-12 11:11:54 CEST | HorstOeko | KositValidator -> Fix download filename | +| :new_moon: | [fc27ef7](https://github.com/horstoeko/zugferd/commit/fc27ef7) | 2024-04-12 08:48:43 CEST | HorstOeko | KostValidator -> Improvements, Better message handling, Updated usage example | +| :new_moon: | [dd4e4cc](https://github.com/horstoeko/zugferd/commit/dd4e4cc) | 2024-04-10 05:19:37 CEST | HorstOeko | KositValidator Optimizations | +| :new_moon: | [d8f3dfe](https://github.com/horstoeko/zugferd/commit/d8f3dfe) | 2024-04-09 05:44:07 CEST | HorstOeko | Made more options configurable in KositValidator | +| :new_moon: | [0ff5c09](https://github.com/horstoeko/zugferd/commit/0ff5c09) | 2024-04-09 05:36:27 CEST | HorstOeko | Improvements, Restructuring on ZugferdKositValidator | +| :new_moon: | [5b25a3d](https://github.com/horstoeko/zugferd/commit/5b25a3d) | 2024-04-08 05:47:25 CEST | HorstOeko | Added prototype of kosIT Validator | + +:exclamation: _There are 3 internal commit(s)_ + +## v1.0.38 + +``Previous version v1.0.37`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [47730d3](https://github.com/horstoeko/zugferd/commit/47730d3) | 2024-04-05 05:38:38 CEST | HorstOeko | Added method "setDocumentBusinessProcess" to ZugferdDocumentBuilder for setting the BusinessProcessSpecifiedDocumentContextParameter-Element | +| :new_moon: | [a4acca4](https://github.com/horstoeko/zugferd/commit/a4acca4) | 2024-03-28 14:41:16 CET | HorstOeko | Added moew unit tests for better test coverage | + +## v1.0.37 + +``Previous version v1.0.36`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [6e1d4d0](https://github.com/horstoeko/zugferd/commit/6e1d4d0) | 2024-03-24 12:26:00 CET | HorstOeko | Added Fix and a Test for Issue 32 | +| :new_moon: | [eb570a0](https://github.com/horstoeko/zugferd/commit/eb570a0) | 2024-03-24 11:17:34 CET | HorstOeko | Added Scripts for generating Codelists | +| :new_moon: | [f05021f](https://github.com/horstoeko/zugferd/commit/f05021f) | 2024-03-12 05:20:50 CET | HorstOeko | Fix some PHPStan issues | + +## v1.0.36 + +``Previous version v1.0.35`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [0d15c30](https://github.com/horstoeko/zugferd/commit/0d15c30) | 2024-03-11 05:34:59 CET | HorstOeko | Added new ZugferdXsdValidator | + +## v1.0.35 + +``Previous version v1.0.34`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [56bc31d](https://github.com/horstoeko/zugferd/commit/56bc31d) | 2024-03-10 08:15:59 CET | HorstOeko | Internal changes of InvoiceObject Handling | +| :new_moon: | [bd47b83](https://github.com/horstoeko/zugferd/commit/bd47b83) | 2024-03-10 08:02:00 CET | HorstOeko | Members "invoiceObject" and "objectHelper" of ZugferdDocument now private (changed visibillity) | +| :new_moon: | [f25afe1](https://github.com/horstoeko/zugferd/commit/f25afe1) | 2024-03-09 09:34:28 CET | HorstOeko | Adding method "getProfileDefinitionParameter" to ZugferdDocument for resolving options for the specific profile | +| :new_moon: | [32a3ab3](https://github.com/horstoeko/zugferd/commit/32a3ab3) | 2024-03-09 08:50:29 CET | HorstOeko | Made properties "profileId", "profileDefinition", "serializerBuilder" and "serializer" private | + +:exclamation: _There is one internal commit_ + +## v1.0.34 + +``Previous version v1.0.33`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [963b8ab](https://github.com/horstoeko/zugferd/commit/963b8ab) | 2024-01-27 10:14:13 CET | HorstOeko | Make XMP Meta Data filename configurable | + +:exclamation: _There is one internal commit_ + +## v1.0.33 + +``Previous version v1.0.32`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [9663fa5](https://github.com/horstoeko/zugferd/commit/9663fa5) | 2024-01-23 10:18:35 CET | Dominik Kohler | Fixed php requirement (caret constraint) | +| :new_moon: | [abd8f69](https://github.com/horstoeko/zugferd/commit/abd8f69) | 2024-01-23 09:53:12 CET | Dominik Kohler | Run tests also for newer PHP releases | + +:exclamation: _There is one internal commit_ + +## v1.0.32 + +``Previous version v1.0.31`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [aa6db69](https://github.com/horstoeko/zugferd/commit/aa6db69) | 2024-01-22 10:47:46 CET | Daniel Khalil | Add inline file output | +| :new_moon: | [6dfbc96](https://github.com/horstoeko/zugferd/commit/6dfbc96) | 2023-12-17 13:50:08 CET | HorstOeko | Renamed file | +| :new_moon: | [19deb90](https://github.com/horstoeko/zugferd/commit/19deb90) | 2023-10-18 06:15:01 CEST | HorstOeko | Fix type in variable name in ZugferdDocumentPdfBuilder | + +:exclamation: _There are 6 internal commit(s)_ + +## v1.0.31 + +``Previous version v1.0.30`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [d1cdb21](https://github.com/horstoeko/zugferd/commit/d1cdb21) | 2023-10-12 18:05:51 CEST | HorstOeko | Centralisation of profile recognition -> Fix self vs. static | [#25](https://github.com/horstoeko/zugferd/issues/25) +| :new_moon: | [ebb3357](https://github.com/horstoeko/zugferd/commit/ebb3357) | 2023-10-12 17:46:52 CEST | HorstOeko | Centralisation of profile recognition -> Renamed variables | [#25](https://github.com/horstoeko/zugferd/issues/25) +| :new_moon: | [bf6765c](https://github.com/horstoeko/zugferd/commit/bf6765c) | 2023-10-12 17:45:44 CEST | HorstOeko | Centralisation of profile recognition -> Removed constructor from ZugferdDocumentBuilder | [#25](https://github.com/horstoeko/zugferd/issues/25) +| :new_moon: | [9c69850](https://github.com/horstoeko/zugferd/commit/9c69850) | 2023-10-12 17:41:33 CEST | HorstOeko | Centralisation of profile recognition -> Fixed malformed use clauses | [#25](https://github.com/horstoeko/zugferd/issues/25) +| :new_moon: | [170ebb0](https://github.com/horstoeko/zugferd/commit/170ebb0) | 2023-10-12 17:38:29 CEST | HorstOeko | Centralisation of profile recognition -> Some internal fixes | [#25](https://github.com/horstoeko/zugferd/issues/25) +| :new_moon: | [cc3bc1a](https://github.com/horstoeko/zugferd/commit/cc3bc1a) | 2023-10-12 17:26:18 CEST | HorstOeko | Centralisation of profile recognition -> Use in ZugferdDocument and ZugferdObjectHelper | [#25](https://github.com/horstoeko/zugferd/issues/25) +| :new_moon: | [e13d6e0](https://github.com/horstoeko/zugferd/commit/e13d6e0) | 2023-10-12 06:23:28 CEST | HorstOeko | Centralisation of profile recognition -> Added methods to ZugferdProfileResolver for resolving profile definition by profile id | [#25](https://github.com/horstoeko/zugferd/issues/25) +| :new_moon: | [e3c1953](https://github.com/horstoeko/zugferd/commit/e3c1953) | 2023-10-12 06:06:09 CEST | HorstOeko | Centralisation of profile recognition -> Using ZugferdProfileResolver in ZugferdDocumentPdfMerger and ZugferdDocumentReader | [#25](https://github.com/horstoeko/zugferd/issues/25) +| :new_moon: | [7af4d01](https://github.com/horstoeko/zugferd/commit/7af4d01) | 2023-10-12 05:52:26 CEST | HorstOeko | Centralisation of profile recognition -> Added tests to phpunit.xml | [#25](https://github.com/horstoeko/zugferd/issues/25) +| :new_moon: | [8db2564](https://github.com/horstoeko/zugferd/commit/8db2564) | 2023-10-12 05:48:53 CEST | HorstOeko | Centralisation of profile recognition -> Added ZugferdProfileResolver, Added tests for the new ZugferdProfileResolver | [#25](https://github.com/horstoeko/zugferd/issues/25) +| :new_moon: | [6fe3b13](https://github.com/horstoeko/zugferd/commit/6fe3b13) | 2023-10-09 05:50:54 CEST | HorstOeko | For more clarity, internal variables have been renamed | +| :new_moon: | [8090763](https://github.com/horstoeko/zugferd/commit/8090763) | 2023-10-09 05:24:57 CEST | HorstOeko | Creating new pdf builder tests (internal methods) | +| :new_moon: | [1d8899c](https://github.com/horstoeko/zugferd/commit/1d8899c) | 2023-10-03 14:36:08 CEST | HorstOeko | Removed is_writable in ZugferdDocumentReader::setBinaryDataDirectory | + +:exclamation: _There are 4 internal commit(s)_ + +## v1.0.30 + +``Previous version v1.0.29`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [b5e8565](https://github.com/horstoeko/zugferd/commit/b5e8565) | 2023-09-30 15:42:02 CEST | HorstOeko | Added __toString-Tests for all Builder-Tests | +| :new_moon: | [73b0ace](https://github.com/horstoeko/zugferd/commit/73b0ace) | 2023-09-30 15:17:12 CEST | HorstOeko | Added magic method __toString to ZugferdDocumentBuilder to receive the XML content | +| :new_moon: | [85a4a19](https://github.com/horstoeko/zugferd/commit/85a4a19) | 2023-09-30 07:00:26 CEST | HorstOeko | More clarity in the ZugferdDocumentPdfMerger example | + +:exclamation: _There are 33 internal commit(s)_ + +## v1.0.29 + +``Previous version v1.0.28`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [9fb81e2](https://github.com/horstoeko/zugferd/commit/9fb81e2) | 2023-09-23 08:15:04 CEST | HorstOeko | Removed dependency to adrienrn/php-mimetyper and replaced it with horstoeko/mimedb | +| :new_moon: | [22d8422](https://github.com/horstoeko/zugferd/commit/22d8422) | 2023-09-22 05:35:14 CEST | HorstOeko | Fix parameter declarations in ObjectHelper | +| :new_moon: | [7e30f6a](https://github.com/horstoeko/zugferd/commit/7e30f6a) | 2023-09-14 16:16:49 CEST | HorstOeko | Added new CI.YML for multiple php versions | +| :new_moon: | [0b8f201](https://github.com/horstoeko/zugferd/commit/0b8f201) | 2023-09-14 16:16:05 CEST | HorstOeko | Added new CI.YML for multiple php versions | +| :new_moon: | [562cc39](https://github.com/horstoeko/zugferd/commit/562cc39) | 2023-09-14 06:23:31 CEST | HorstOeko | Rework/Cleanup Examples | +| :new_moon: | [25736f4](https://github.com/horstoeko/zugferd/commit/25736f4) | 2023-09-13 06:09:14 CEST | HorstOeko | Added Example for the JSON Exporter | + +:exclamation: _There are 4 internal commit(s)_ + +## v1.0.28 + +``Previous version v1.0.27`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [be78b1b](https://github.com/horstoeko/zugferd/commit/be78b1b) | 2023-09-12 16:54:01 CEST | HorstOeko | Added methods for buyers and sellers electronic communication information in QuickDescriptors | +| :new_moon: | [55135c2](https://github.com/horstoeko/zugferd/commit/55135c2) | 2023-09-12 16:25:59 CEST | HorstOeko | Better Schematron-Checks-Cleanup | + +:exclamation: _There is one internal commit_ + +## v1.0.27 + +``Previous version v1.0.26`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [ef6c00f](https://github.com/horstoeko/zugferd/commit/ef6c00f) | 2023-09-12 07:15:56 CEST | HorstOeko | Failonerror="false" for Schematron Checks | +| :new_moon: | [295ada2](https://github.com/horstoeko/zugferd/commit/295ada2) | 2023-09-12 07:08:52 CEST | HorstOeko | Added QuickDescriptor for XRechnung 3 | +| :new_moon: | [dc8e42a](https://github.com/horstoeko/zugferd/commit/dc8e42a) | 2023-09-12 06:49:49 CEST | HorstOeko | Updated to Validation Tool 1.5.0, New validation config | +| :new_moon: | [d63c94e](https://github.com/horstoeko/zugferd/commit/d63c94e) | 2023-09-11 18:26:46 CEST | HorstOeko | Revert "Updated to validationtool-1.5.0-standalone.jar" | +| :new_moon: | [89001a1](https://github.com/horstoeko/zugferd/commit/89001a1) | 2023-09-11 18:22:15 CEST | HorstOeko | Updated to validationtool-1.5.0-standalone.jar | +| :new_moon: | [d4bfa66](https://github.com/horstoeko/zugferd/commit/d4bfa66) | 2023-09-11 18:09:01 CEST | HorstOeko | Revert "Actions -< use 2.3.1 validation config" | +| :new_moon: | [bdff92c](https://github.com/horstoeko/zugferd/commit/bdff92c) | 2023-09-11 18:06:06 CEST | HorstOeko | Actions -< use 2.3.1 validation config | +| :new_moon: | [4e44b09](https://github.com/horstoeko/zugferd/commit/4e44b09) | 2023-09-11 17:59:41 CEST | HorstOeko | Revert "Use the latest Kosit-Validation tool" | +| :new_moon: | [7ca201b](https://github.com/horstoeko/zugferd/commit/7ca201b) | 2023-09-11 17:55:46 CEST | HorstOeko | Use older validation tool | +| :new_moon: | [86026ac](https://github.com/horstoeko/zugferd/commit/86026ac) | 2023-09-11 17:40:24 CEST | HorstOeko | Use the latest Kosit-Validation tool | +| :new_moon: | [aa68cc2](https://github.com/horstoeko/zugferd/commit/aa68cc2) | 2023-09-08 15:26:09 CEST | HorstOeko | Set DocumentFileName in XMP-Metadata by profile definition | +| :new_moon: | [9b4474e](https://github.com/horstoeko/zugferd/commit/9b4474e) | 2023-09-07 07:07:12 CEST | HorstOeko | Add support for UniversalCommunication (Seller and Buyer) | +| :new_moon: | [c7f6e7f](https://github.com/horstoeko/zugferd/commit/c7f6e7f) | 2023-09-06 15:30:11 CEST | HorstOeko | Define businessprocess in profiles | +| :new_moon: | [ed2106c](https://github.com/horstoeko/zugferd/commit/ed2106c) | 2023-09-06 13:30:49 CEST | HorstOeko | Added Profile "PROFILE_XRECHNUNG_3" | [#18](https://github.com/horstoeko/zugferd/issues/18) +| :new_moon: | [d89d4a4](https://github.com/horstoeko/zugferd/commit/d89d4a4) | 2023-09-06 13:22:57 CEST | HorstOeko | Added Profile "PROFILE_XRECHNUNG_2_3" | [#18](https://github.com/horstoeko/zugferd/issues/18) + +:exclamation: _There are 5 internal commit(s)_ + +## v1.0.26 + +``Previous version v1.0.25`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [2a7541a](https://github.com/horstoeko/zugferd/commit/2a7541a) | 2023-08-18 05:05:43 CEST | HorstOeko | Fix ZugferdDocumentPdfBuilderAbstract | + +## v1.0.25 + +``Previous version v1.0.24`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [04aeb4f](https://github.com/horstoeko/zugferd/commit/04aeb4f) | 2023-08-18 04:59:52 CEST | HorstOeko | Renamed ZugferdDocumentAbstractPdfBuilder to ZugferdDocumentPdfBuilderAbstract | + +## v1.0.24 + +``Previous version v1.0.23`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [be26511](https://github.com/horstoeko/zugferd/commit/be26511) | 2023-08-17 05:11:15 CEST | HorstOeko | Adding XMLDataCache to ZugferdDocumentPdfBuilder (like ZugferdDocumentPdfMerger) | + +:exclamation: _There is one internal commit_ + +## v1.0.23 + +``Previous version v1.0.21`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [bb55417](https://github.com/horstoeko/zugferd/commit/bb55417) | 2023-08-16 19:39:36 CEST | HorstOeko | Removed useless cache-options from ZugferdDocumentPdfMerger | + +## v1.0.22 + +``Previous version v1.0.20`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [a0eaa90](https://github.com/horstoeko/zugferd/commit/a0eaa90) | 2023-08-16 16:37:49 CEST | HorstOeko | Added Example for ZugferdDocumentPdfMerger (En16931PdfMerger) | [#14](https://github.com/horstoeko/zugferd/issues/14) +| :new_moon: | [75e7ff6](https://github.com/horstoeko/zugferd/commit/75e7ff6) | 2023-08-16 16:29:29 CEST | HorstOeko | Final ZugferdDocumentPdfMerger | [#14](https://github.com/horstoeko/zugferd/issues/14) +| :new_moon: | [cec9e77](https://github.com/horstoeko/zugferd/commit/cec9e77) | 2023-08-16 16:24:25 CEST | HorstOeko | Introducing the ZugferdDocumentPdfMerger | [#14](https://github.com/horstoeko/zugferd/issues/14) +| :new_moon: | [2d27efa](https://github.com/horstoeko/zugferd/commit/2d27efa) | 2023-08-16 12:23:41 CEST | David Bomba | Add string output as option | + +## v1.0.20 + +``Previous version v1.0.19`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [4a5446e](https://github.com/horstoeko/zugferd/commit/4a5446e) | 2023-07-04 17:10:47 CEST | HorstOeko | Added method setDocumentRoutingId to ZugferdDocumentBuilder | [#12](https://github.com/horstoeko/zugferd/issues/12) +| :new_moon: | [ff48359](https://github.com/horstoeko/zugferd/commit/ff48359) | 2023-07-04 16:59:06 CEST | HorstOeko | Added \minimum\udt\AmountType to ZugferdTypesHandler | [#11](https://github.com/horstoeko/zugferd/issues/11) +| :new_moon: | [e87cdd8](https://github.com/horstoeko/zugferd/commit/e87cdd8) | 2023-07-03 16:47:16 CEST | HorstOeko | Removed useless code from Issue10Test | +| :new_moon: | [b8fad9a](https://github.com/horstoeko/zugferd/commit/b8fad9a) | 2023-07-03 16:40:53 CEST | HorstOeko | Added Unit-Testss | [#10](https://github.com/horstoeko/zugferd/issues/10) + +:exclamation: _There is one internal commit_ + +## v1.0.19 + +``Previous version v1.0.18`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [2432b4f](https://github.com/horstoeko/zugferd/commit/2432b4f) | 2023-05-16 06:16:15 CEST | HorstOeko | Added Tests for MINIMUM-Profile, Fix YAML Definitions | +| :new_moon: | [0ab1a9b](https://github.com/horstoeko/zugferd/commit/0ab1a9b) | 2023-05-15 17:22:12 CEST | HorstOeko | Added missing FACTUR-X_MINIMUM_codedb.xml | +| :new_moon: | [f1bc40e](https://github.com/horstoeko/zugferd/commit/f1bc40e) | 2023-05-15 06:05:57 CEST | HorstOeko | Always enable auto resizing | [#9](https://github.com/horstoeko/zugferd/issues/9) +| :new_moon: | [de15bc4](https://github.com/horstoeko/zugferd/commit/de15bc4) | 2023-05-15 05:49:17 CEST | HorstOeko | Add minimum profile, no tests | + +## v1.0.18 + +``Previous version v1.0.17`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [569b4f5](https://github.com/horstoeko/zugferd/commit/569b4f5) | 2023-04-17 10:54:05 CEST | UP | Version bump of smalot/pdfparser to allow php >=8.0 | +| :new_moon: | [bce6df1](https://github.com/horstoeko/zugferd/commit/bce6df1) | 2023-02-17 20:09:24 CET | HorstOeko | Fix namespace for ReaderXRechnungSimpleTest | + +## v1.0.17 + +``Previous version v1.0.16`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [35ce9d0](https://github.com/horstoeko/zugferd/commit/35ce9d0) | 2023-02-17 16:45:17 CET | HorstOeko | Fixed several code issues issued by PHPStan | +| :new_moon: | [0d609d3](https://github.com/horstoeko/zugferd/commit/0d609d3) | 2023-02-17 16:20:04 CET | HorstOeko | Merge with PDFWriter of Order-X-Library | +| :new_moon: | [c7712a4](https://github.com/horstoeko/zugferd/commit/c7712a4) | 2023-02-17 05:31:39 CET | HorstOeko | Wrapper for deprecated utf8_encode function in PdfWriter | +| :new_moon: | [2c2e360](https://github.com/horstoeko/zugferd/commit/2c2e360) | 2023-02-17 05:26:00 CET | HorstOeko | Wrapper for deprecated utf8_encode function in PdfWriter | +| :new_moon: | [bf68404](https://github.com/horstoeko/zugferd/commit/bf68404) | 2023-02-16 05:33:51 CET | HorstOeko | Removed direct access to document properties | +| :new_moon: | [cee9070](https://github.com/horstoeko/zugferd/commit/cee9070) | 2023-02-16 05:33:09 CET | HorstOeko | Rework JSON exporter | +| :new_moon: | [83ab16a](https://github.com/horstoeko/zugferd/commit/83ab16a) | 2023-02-15 17:00:50 CET | HorstOeko | Optimized PDF Build | + +:exclamation: _There are 7 internal commit(s)_ + +## v1.0.16 + +``Previous version v1.0.15`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [7f05d1b](https://github.com/horstoeko/zugferd/commit/7f05d1b) | 2023-02-14 06:22:14 CET | HorstOeko | Fix null-value for CardID in addDocumentPaymentMean of ZugferdDocumentBuilder | +| :new_moon: | [51741fc](https://github.com/horstoeko/zugferd/commit/51741fc) | 2023-02-14 05:24:32 CET | HorstOeko | Added missing tests for ZugferdSettings and ZugferdPackageVersion classes | +| :new_moon: | [8275a2b](https://github.com/horstoeko/zugferd/commit/8275a2b) | 2023-02-13 19:59:06 CET | HorstOeko | Introducing ZugferdSettings class for configuring the library | + +:exclamation: _There are 6 internal commit(s)_ + +## v1.0.15 + +``Previous version v1.0.14`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [008dd6d](https://github.com/horstoeko/zugferd/commit/008dd6d) | 2023-02-12 13:05:32 CET | HorstOeko | Removed docs - the will be deployed within the release process | + +:exclamation: _There are 5 internal commit(s)_ + +## v1.0.14 + +:exclamation: _There are 19 internal commit(s)_ + +## v1.0.13 + +``Previous version v1.0.12`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [0a99d41](https://github.com/horstoeko/zugferd/commit/0a99d41) | 2023-01-26 06:10:45 CET | HorstOeko | Publish package version to PDF, Therefore add a new class ZugferdPackageVersion | + +:exclamation: _There are 4 internal commit(s)_ + +## v1.0.12 + +``Previous version v1.0.11`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [9849ef3](https://github.com/horstoeko/zugferd/commit/9849ef3) | 2022-12-25 21:03:21 CET | HorstOeko | Fix for getDocumentSummation -> taxTotalAmount | + +:exclamation: _There are 4 internal commit(s)_ + +## v1.0.11 + +``Previous version v1.0.10`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [efeb516](https://github.com/horstoeko/zugferd/commit/efeb516) | 2022-09-26 10:36:04 CEST | Brice Flaceliere | Fix context parameter for wasic-wl profile | + +:exclamation: _There is one internal commit_ + +## v1.0.10 + +``Previous version v1.0.9`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [1fc45b6](https://github.com/horstoeko/zugferd/commit/1fc45b6) | 2022-06-18 10:08:50 CEST | HorstOeko | Added a json export class for exporting ZugferdDocument as a json string, a json object or a pretty printed json string, Added an example for this feature | +| :new_moon: | [2e90762](https://github.com/horstoeko/zugferd/commit/2e90762) | 2022-06-18 10:04:42 CEST | HorstOeko | Added a json export class for exporting ZugferdDocument as a json string, a json object or a pretty printed json string, Added an example for this feature | +| :new_moon: | [d9fb576](https://github.com/horstoeko/zugferd/commit/d9fb576) | 2022-06-18 09:07:20 CEST | HorstOeko | Fix example En16931ReaderPdf | +| :new_moon: | [6abf0fb](https://github.com/horstoeko/zugferd/commit/6abf0fb) | 2022-06-16 18:46:09 CEST | HorstOeko | Added new example: Read a PDF-document with embedded XML | + +:exclamation: _There are 3 internal commit(s)_ + +## v1.0.9 + +``Previous version v1.0.8`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [5a0b24b](https://github.com/horstoeko/zugferd/commit/5a0b24b) | 2022-03-29 13:49:37 CEST | HorstOeko | Make tests compatible to PHP 7.x and PHP 8.x | +| :new_moon: | [a66d02c](https://github.com/horstoeko/zugferd/commit/a66d02c) | 2022-03-29 13:41:15 CEST | HorstOeko | Make tests compatible to PHP 7.x and PHP 8.x | +| :new_moon: | [483042c](https://github.com/horstoeko/zugferd/commit/483042c) | 2022-03-29 13:16:14 CEST | HorstOeko | Fixing PHP8 issues -> filemtime issues | +| :new_moon: | [a958238](https://github.com/horstoeko/zugferd/commit/a958238) | 2022-03-29 12:47:32 CEST | HorstOeko | Fixing PHP8 issues -> is_file issues | +| :new_moon: | [734acf3](https://github.com/horstoeko/zugferd/commit/734acf3) | 2022-03-29 12:21:31 CEST | HorstOeko | Fixing PHP8 issues -> method_exists wrapped | +| :new_moon: | [9835961](https://github.com/horstoeko/zugferd/commit/9835961) | 2022-03-29 12:12:57 CEST | HorstOeko | Fixing PHP8 issues | +| :new_moon: | [11a47e4](https://github.com/horstoeko/zugferd/commit/11a47e4) | 2022-03-29 12:08:01 CEST | HorstOeko | Fixing PHP8 issues | +| :new_moon: | [9975990](https://github.com/horstoeko/zugferd/commit/9975990) | 2022-03-29 12:04:19 CEST | HorstOeko | Revert "Fixing PHP8 issues" | +| :new_moon: | [0cdd79a](https://github.com/horstoeko/zugferd/commit/0cdd79a) | 2022-03-29 12:00:27 CEST | HorstOeko | Fixing PHP8 issues | +| :new_moon: | [ef2673a](https://github.com/horstoeko/zugferd/commit/ef2673a) | 2022-03-29 11:09:02 CEST | HorstOeko | Require PHP 7.3 or 8.0 or 8.1 | +| :new_moon: | [eea7a80](https://github.com/horstoeko/zugferd/commit/eea7a80) | 2022-03-29 10:52:24 CEST | HorstOeko | Removed restriction to php 7.3 -> Fix Action Title | +| :new_moon: | [ad7bd75](https://github.com/horstoeko/zugferd/commit/ad7bd75) | 2022-03-29 10:51:22 CEST | HorstOeko | Removed restriction to php 7.3 | + +:exclamation: _There is one internal commit_ + +## v1.0.8 + +``Previous version v1.0.7`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [ac004db](https://github.com/horstoeko/zugferd/commit/ac004db) | 2022-03-08 11:21:02 CET | HorstOeko | Added tests for payment means (EN16931, Extended) | +| :new_moon: | [39df44f](https://github.com/horstoeko/zugferd/commit/39df44f) | 2022-03-08 09:21:53 CET | HorstOeko | Added more Builder-Tests for other tradeparty contacts | +| :new_moon: | [c9c2921](https://github.com/horstoeko/zugferd/commit/c9c2921) | 2022-03-08 07:45:46 CET | HorstOeko | Added more Builder-Tests for Seller- and Buyer-Contact handling | +| :new_moon: | [305ae87](https://github.com/horstoeko/zugferd/commit/305ae87) | 2022-03-06 14:57:48 CET | HorstOeko | Removed unused code | +| :new_moon: | [9424557](https://github.com/horstoeko/zugferd/commit/9424557) | 2022-03-06 14:39:33 CET | HorstOeko | Method call fixtures | +| :new_moon: | [ea2f8fb](https://github.com/horstoeko/zugferd/commit/ea2f8fb) | 2022-03-06 12:00:55 CET | HorstOeko | Added seekers (first/next) for tradeparty contact information. Useful in EXTENDED Profile which allows multiple contacts per TradeParty | +| :new_moon: | [94541cf](https://github.com/horstoeko/zugferd/commit/94541cf) | 2022-03-05 09:21:44 CET | HorstOeko | TradeContact Handling | +| :new_moon: | [7442316](https://github.com/horstoeko/zugferd/commit/7442316) | 2022-03-04 20:45:43 CET | HorstOeko | Code optimization in Document Pdf Builder | +| :new_moon: | [7815f90](https://github.com/horstoeko/zugferd/commit/7815f90) | 2022-03-04 20:45:43 CET | HorstOeko | Code optimization in Document Pdf Builder | +| :new_moon: | [d36f713](https://github.com/horstoeko/zugferd/commit/d36f713) | 2022-03-04 18:34:47 CET | HorstOeko | Removed changes | +| :new_moon: | [117049d](https://github.com/horstoeko/zugferd/commit/117049d) | 2022-03-04 18:07:37 CET | HorstOeko | Initial Commit for ZUGFeRD 2.2 and Factur-X 1.0.06 | +| :new_moon: | [e1b6ba4](https://github.com/horstoeko/zugferd/commit/e1b6ba4) | 2022-03-04 15:24:49 CET | HorstOeko | Reset Counters for position-subinformation on firstDocumentPosition and nextDocumentPosition | +| :new_moon: | [6ccdfe5](https://github.com/horstoeko/zugferd/commit/6ccdfe5) | 2022-03-04 12:53:14 CET | HorstOeko | genclasses Script for WIndows | +| :new_moon: | [23be2d3](https://github.com/horstoeko/zugferd/commit/23be2d3) | 2022-03-04 12:06:30 CET | HorstOeko | Fixed Directory Separator in Test | + +:exclamation: _There are 14 internal commit(s)_ + +## v1.0.7 + +``Previous version v1.0.6`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [066c308](https://github.com/horstoeko/zugferd/commit/066c308) | 2022-02-20 10:05:06 CET | HorstOeko | Fix test code (BuilderEn16931Test) | +| :new_moon: | [66fbbe8](https://github.com/horstoeko/zugferd/commit/66fbbe8) | 2022-02-20 09:05:43 CET | HorstOeko | Added profile XRechnung 2.1 and XRechnung 2.2 | +| :new_moon: | [d6f2738](https://github.com/horstoeko/zugferd/commit/d6f2738) | 2022-02-19 16:30:57 CET | HorstOeko | Fix codelists | +| :new_moon: | [17c380f](https://github.com/horstoeko/zugferd/commit/17c380f) | 2022-02-19 16:30:21 CET | HorstOeko | Fixed method names | + +:exclamation: _There are 7 internal commit(s)_ + +## v1.0.6 + +``Previous version v1.0.5`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [f87212e](https://github.com/horstoeko/zugferd/commit/f87212e) | 2021-01-07 17:05:36 CET | HorstOeko | Added three new methods to the builder for adding quick payment means for SEPA Direct Debit, SEPA Credit Transfer and Payment Card | +| :new_moon: | [cda68a9](https://github.com/horstoeko/zugferd/commit/cda68a9) | 2020-12-22 01:01:54 CET | HorstOeko | Some more test for empty value | + +:exclamation: _There are 4 internal commit(s)_ + +## v1.0.5 + +``Previous version v1.0.4`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [8421903](https://github.com/horstoeko/zugferd/commit/8421903) | 2020-12-12 11:26:31 CET | HorstOeko | Fix type hinting in PDFReader | +| :new_moon: | [d7ef4d5](https://github.com/horstoeko/zugferd/commit/d7ef4d5) | 2020-12-10 09:30:21 CET | HorstOeko | Charge Indicator fixes | +| :new_moon: | [b4995e9](https://github.com/horstoeko/zugferd/commit/b4995e9) | 2020-12-09 06:41:50 CET | HorstOeko | More PDF builder tests | +| :new_moon: | [65b8dd8](https://github.com/horstoeko/zugferd/commit/65b8dd8) | 2020-12-08 17:44:34 CET | HorstOeko | Added simple test for pdf builder | +| :new_moon: | [c5043bd](https://github.com/horstoeko/zugferd/commit/c5043bd) | 2020-12-08 06:47:10 CET | HorstOeko | Added Test for the Basic Profile | +| :new_moon: | [5c55159](https://github.com/horstoeko/zugferd/commit/5c55159) | 2020-12-07 06:15:56 CET | HorstOeko | Added more tests for BinaryAttachedObjects | +| :new_moon: | [cdd0de9](https://github.com/horstoeko/zugferd/commit/cdd0de9) | 2020-12-06 14:18:17 CET | HorstOeko | Added tests for AdditionalReferencedDocuments (binary data) | +| :new_moon: | [3c34218](https://github.com/horstoeko/zugferd/commit/3c34218) | 2020-12-06 13:05:06 CET | HorstOeko | Using StringManagement package | + +:exclamation: _There are 8 internal commit(s)_ + +## v1.0.4 + +``Previous version v1.0.2`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [24f10df](https://github.com/horstoeko/zugferd/commit/24f10df) | 2020-12-05 11:50:11 CET | HorstOeko | Added mimetype restrictions for binary attached objects | +| :new_moon: | [b530c10](https://github.com/horstoeko/zugferd/commit/b530c10) | 2020-12-05 10:48:43 CET | HorstOeko | Removed validation from Reader -> looking for a better and more generic solutions | +| :new_moon: | [1191015](https://github.com/horstoeko/zugferd/commit/1191015) | 2020-12-05 10:42:38 CET | HorstOeko | Removed validation from Reader -> looking for a better and more generic solutions | + +:exclamation: _There are 2 internal commit(s)_ + +## v1.0.2 + +``Previous version v1.0.1`` + +| Type | Hash | Date | Author | Subject | Issue(s) +| :--- | :------ | :------ | :------ | :------- | :-----------: +| :new_moon: | [066daba](https://github.com/horstoeko/zugferd/commit/066daba) | 2020-12-03 17:01:16 CET | HorstOeko | Added XRechnung_2-Profile for XRechnung version 2.0, Added examples for XRechnung 2.0 | +| :new_moon: | [fc9d629](https://github.com/horstoeko/zugferd/commit/fc9d629) | 2020-12-03 06:36:53 CET | HorstOeko | Switched profile of XRechnung back to 1.2 due errors | +| :new_moon: | [d79f28c](https://github.com/horstoeko/zugferd/commit/d79f28c) | 2020-12-03 06:24:19 CET | HorstOeko | Added schematron validation to ANT buildscript, Changed XRechnung Profile from 1.2 to 2.0 | +| :new_moon: | [8a26dbf](https://github.com/horstoeko/zugferd/commit/8a26dbf) | 2020-12-02 06:17:41 CET | HorstOeko | Added Quick-Descriptor for the Extended-Profile | +| :new_moon: | [69eaf2f](https://github.com/horstoeko/zugferd/commit/69eaf2f) | 2020-12-02 06:14:29 CET | HorstOeko | Added Quick-Descriptor for the Extended-Profile | +| :new_moon: | [928f917](https://github.com/horstoeko/zugferd/commit/928f917) | 2020-12-01 17:39:56 CET | HorstOeko | Added position note for the quick descriptor | +| :new_moon: | [6a3e50d](https://github.com/horstoeko/zugferd/commit/6a3e50d) | 2020-12-01 17:29:58 CET | HorstOeko | Added position note for the quick descriptor | +| :new_moon: | [0dc02e7](https://github.com/horstoeko/zugferd/commit/0dc02e7) | 2020-12-01 17:07:58 CET | HorstOeko | Removed non-working schemaValidate for schematron -> replace by TODO | + +:exclamation: _There are 3 internal commit(s)_ diff --git a/vendor/horstoeko/zugferd/CODE_OF_CONDUCT.md b/vendor/horstoeko/zugferd/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..18c914718 --- /dev/null +++ b/vendor/horstoeko/zugferd/CODE_OF_CONDUCT.md @@ -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. diff --git a/vendor/horstoeko/zugferd/CONTRIBUTING.md b/vendor/horstoeko/zugferd/CONTRIBUTING.md new file mode 100644 index 000000000..dbb32255f --- /dev/null +++ b/vendor/horstoeko/zugferd/CONTRIBUTING.md @@ -0,0 +1,114 @@ + +# 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 + + +## 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/wiki). + +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 +> 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 + + +#### 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/wiki). 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? + + +#### 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 . + + +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). + + + + +### 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. + + +#### Before Submitting an Enhancement + +- Make sure that you are using the latest version. +- Read the [documentation](https://github.com/horstoeko/zugferd/wiki) 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. + + +#### 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. +- **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. + diff --git a/vendor/horstoeko/zugferd/LICENSE b/vendor/horstoeko/zugferd/LICENSE new file mode 100644 index 000000000..67877be1c --- /dev/null +++ b/vendor/horstoeko/zugferd/LICENSE @@ -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. diff --git a/vendor/horstoeko/zugferd/README.md b/vendor/horstoeko/zugferd/README.md new file mode 100644 index 000000000..a25b2e884 --- /dev/null +++ b/vendor/horstoeko/zugferd/README.md @@ -0,0 +1,91 @@ + +# ZUGFeRD/XRechnung/Factur-X + + +## Status + +[![Latest Stable Version](https://img.shields.io/packagist/v/horstoeko/zugferd.svg?style=plastic)](https://packagist.org/packages/horstoeko/zugferd) +[![PHP version](https://img.shields.io/packagist/php-v/horstoeko/zugferd.svg?style=plastic)](https://packagist.org/packages/horstoeko/zugferd) +[![License](https://img.shields.io/packagist/l/horstoeko/zugferd.svg?style=plastic)](https://packagist.org/packages/horstoeko/zugferd) + +[![Continuous Integration](https://github.com/horstoeko/zugferd/actions/workflows/build.ci.yml/badge.svg?branch=master)](https://github.com/horstoeko/zugferd/actions/workflows/build.ci.yml) +[![Release Status](https://github.com/horstoeko/zugferd/actions/workflows/build.release.yml/badge.svg)](https://github.com/horstoeko/zugferd/actions/workflows/build.release.yml) + + +## Table of Contents + +- [License](#license) +- [Overview](#overview) +- [Supported profiles](#supported-profiles) +- [Further information](#further-information) +- [Related projects](#related-projects) +- [Dependencies](#dependencies) +- [Resources](#resources) +- [Guide](#guide) + +## 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 + +> [!IMPORTANT] +> This package provides only support for CII-Syntax - not UBL-Syntax + +## 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 Bridge](https://github.com/horstoeko/zugferdublbridge) +* [ZUGFeRD Mail](https://github.com/horstoeko/zugferdmail) +* [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). + +## Resources + +- [Official documentaries (Version Archive)](https://www.ferd-net.de/ueber-uns/ressourcen-1/veroeffentlichungen) + +## Guide + +For detailed explanation you may have a look in the [examples](https://github.com/horstoeko/zugferd/tree/master/examples) +of this package, the documentation attached to every release or our [wiki](https://github.com/horstoeko/zugferd/wiki). + +The following parts are documentated in our [Wiki](https://github.com/horstoeko/zugferd/wiki/Configuration): + +- [Installation](https://github.com/horstoeko/zugferd/wiki/Installation) +- [Configuration](https://github.com/horstoeko/zugferd/wiki/Configuration) +- [Read a xml file](https://github.com/horstoeko/zugferd/wiki/Reading-XML-Documents) +- [Read a pdf file with attached xml file](https://github.com/horstoeko/zugferd/wiki/Reading-PDF-Documents) +- [Write a xml file](https://github.com/horstoeko/zugferd/wiki/Creating-XML-Documents) +- [Write a pdf file with attached xml file file](https://github.com/horstoeko/zugferd/wiki/Creating-PDF-Documents) +- [Merge existing PDF and XML](https://github.com/horstoeko/zugferd/wiki/Merging-XML-and-PDF-Documents) +- [Validation](https://github.com/horstoeko/zugferd/wiki/Validation) diff --git a/vendor/horstoeko/zugferd/SECURITY.md b/vendor/horstoeko/zugferd/SECURITY.md new file mode 100644 index 000000000..d25ca0cc3 --- /dev/null +++ b/vendor/horstoeko/zugferd/SECURITY.md @@ -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. diff --git a/vendor/horstoeko/zugferd/build.ant.xml b/vendor/horstoeko/zugferd/build.ant.xml new file mode 100644 index 000000000..3d5beb7e1 --- /dev/null +++ b/vendor/horstoeko/zugferd/build.ant.xml @@ -0,0 +1,363 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/build.xml b/vendor/horstoeko/zugferd/build.xml new file mode 100644 index 000000000..d02cbcbe8 --- /dev/null +++ b/vendor/horstoeko/zugferd/build.xml @@ -0,0 +1,281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/build/phpcsrules.xml b/vendor/horstoeko/zugferd/build/phpcsrules.xml new file mode 100644 index 000000000..71bb6e88d --- /dev/null +++ b/vendor/horstoeko/zugferd/build/phpcsrules.xml @@ -0,0 +1,351 @@ + + + The PSR-12 coding standard. + + */src/entities/* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + error + Method name "%s" must not be prefixed with an underscore to indicate visibility + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/build/phpcsrules_psr1.xml b/vendor/horstoeko/zugferd/build/phpcsrules_psr1.xml new file mode 100644 index 000000000..65cbe20e9 --- /dev/null +++ b/vendor/horstoeko/zugferd/build/phpcsrules_psr1.xml @@ -0,0 +1,47 @@ + + + The PSR1 coding standard. + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/build/phpcsrules_psr12.xml b/vendor/horstoeko/zugferd/build/phpcsrules_psr12.xml new file mode 100644 index 000000000..ec7eb721e --- /dev/null +++ b/vendor/horstoeko/zugferd/build/phpcsrules_psr12.xml @@ -0,0 +1,122 @@ + + + The PSR-12 coding standard. + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + error + Method name "%s" must not be prefixed with an underscore to indicate visibility + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + 0 + + + 0 + + + + + 0 + + + + + + + 0 + + + 0 + + + + + + + + diff --git a/vendor/horstoeko/zugferd/build/phpcsrules_psr2.xml b/vendor/horstoeko/zugferd/build/phpcsrules_psr2.xml new file mode 100644 index 000000000..ba5bd4e0b --- /dev/null +++ b/vendor/horstoeko/zugferd/build/phpcsrules_psr2.xml @@ -0,0 +1,218 @@ + + + The PSR-2 coding standard. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + 0 + + + 0 + + + + + + + 0 + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/build/phpcsrules_squiz.xml b/vendor/horstoeko/zugferd/build/phpcsrules_squiz.xml new file mode 100644 index 000000000..87ab4c3e8 --- /dev/null +++ b/vendor/horstoeko/zugferd/build/phpcsrules_squiz.xml @@ -0,0 +1,132 @@ + + + The Squiz coding standard. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + %2$s + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + + + + + + 0 + + + error + + + + + 0 + + + error + + diff --git a/vendor/horstoeko/zugferd/build/phpdoc.xml b/vendor/horstoeko/zugferd/build/phpdoc.xml new file mode 100644 index 000000000..ea3016362 --- /dev/null +++ b/vendor/horstoeko/zugferd/build/phpdoc.xml @@ -0,0 +1,26 @@ + + + ../build/doc + ./phpdoc + + + + + + src + + + + php + + true + + TODO + FIXME + + + + diff --git a/vendor/horstoeko/zugferd/build/phpmd.xml b/vendor/horstoeko/zugferd/build/phpmd.xml new file mode 100644 index 000000000..55b7588f7 --- /dev/null +++ b/vendor/horstoeko/zugferd/build/phpmd.xml @@ -0,0 +1,20 @@ + + + Custom rule sets that checks your PHP code. + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/build/phprectorconfig.php b/vendor/horstoeko/zugferd/build/phprectorconfig.php new file mode 100644 index 000000000..03d19783c --- /dev/null +++ b/vendor/horstoeko/zugferd/build/phprectorconfig.php @@ -0,0 +1,47 @@ +withPaths([ + __DIR__ . '/../examples', + __DIR__ . '/../make', + __DIR__ . '/../src', + __DIR__ . '/../tests', + ]) + ->withSkip([ + __DIR__ . '/../src/entities', + __DIR__ . '/../src/codelistsenum', + ]) + ->withSkip([ + RemoveUselessParamTagRector::class, + RemoveUselessReturnTagRector::class, + ]) + ->withPhp73Sets() + ->withPreparedSets( + codeQuality: true, + codingStyle: true, + strictBooleans: true, + instanceOf: true, + earlyReturn: true, + phpunitCodeQuality: true, + privatization: true, + deadCode: true, + // + carbon: false, + doctrineCodeQuality: false, + naming: false, + rectorPreset: false, + symfonyCodeQuality: false, + symfonyConfigs: false, + typeDeclarations: false, + ); \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/build/phpstan.neon b/vendor/horstoeko/zugferd/build/phpstan.neon new file mode 100644 index 000000000..d42f23e1a --- /dev/null +++ b/vendor/horstoeko/zugferd/build/phpstan.neon @@ -0,0 +1,12 @@ +parameters: + paths: + - ../src + - ../tests + level: 3 + treatPhpDocTypesAsCertain: false + excludePaths: + - ../src/entities/* + - ../src/codelistsenum/* + - ../tests/testcases/issues/Issue32Test.php + - ../src/quick/ZugferdQuickDescriptor.php + - ../tests/traits/HandlesXmlTests.php diff --git a/vendor/horstoeko/zugferd/build/phpunit.xml b/vendor/horstoeko/zugferd/build/phpunit.xml new file mode 100644 index 000000000..ea4850fa6 --- /dev/null +++ b/vendor/horstoeko/zugferd/build/phpunit.xml @@ -0,0 +1,91 @@ + + + + + ../tests/testcases/SettingsTest.php + ../tests/testcases/PackageVersionTest.php + + + ../tests/testcases/ObjectHelperEn16931Test.php + ../tests/testcases/ObjectHelperExtendedTest.php + + + ../tests/testcases/ProfileResolverTest.php + ../tests/testcases/DocumentTest.php + + + ../tests/testcases/ReaderBasicTest.php + ../tests/testcases/ReaderEn16931Test.php + ../tests/testcases/ReaderEn16931AllowanceChargeTest.php + ../tests/testcases/ReaderEn16931Bank1Test.php + ../tests/testcases/ReaderExtendedTest.php + ../tests/testcases/ReaderExtended2Test.php + ../tests/testcases/ReaderXRechnungTest.php + ../tests/testcases/ReaderXRechnungAttachedBinaryObjectTest.php + + + ../tests/testcases/BuilderMinimumTest.php + ../tests/testcases/BuilderEn16931Test.php + ../tests/testcases/BuilderExtendedTest.php + + + ../tests/testcases/ProfileConverterTest.php + + + ../tests/testcases/PdfReaderGeneralTest.php + ../tests/testcases/PdfReaderMinimumTest.php + ../tests/testcases/PdfReaderEn16931Test.php + ../tests/testcases/PdfReaderEn16931AllowanceChargeTest.php + ../tests/testcases/PdfReaderExtendedTest.php + ../tests/testcases/PdfReaderExtended2Test.php + ../tests/testcases/PdfReaderXRechnungTest.php + ../tests/testcases/PdfReaderMultipleAttachmentsTest.php + ../tests/testcases/PdfReaderExtGeneralTest.php + + + ../tests/testcases/PdfBuilderEn16931Test.php + + + ../tests/testcases/PdfMergerTest.php + + + ../tests/testcases/ValidatorValidTest.php + ../tests/testcases/ValidatorInvalidTest.php + + + ../tests/testcases/JsonExporterTest.php + + + ../tests/testcases/issues/Issue10Test.php + ../tests/testcases/issues/Issue18Test.php + ../tests/testcases/issues/Issue32Test.php + ../tests/testcases/issues/Issue43Test.php + ../tests/testcases/issues/Issue104Test.php + ../tests/testcases/issues/Issue113Test.php + ../tests/testcases/issues/Issue206Test.php + ../tests/testcases/issues/Issue268Test.php + ../tests/testcases/issues/Issue270Test.php + + + + + ../src + + + ../src/codelists + ../src/codelistsenum + ../src/exception + ../src/ZugferdProfiles.php + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/composer.json b/vendor/horstoeko/zugferd/composer.json new file mode 100644 index 000000000..8c34c1c83 --- /dev/null +++ b/vendor/horstoeko/zugferd/composer.json @@ -0,0 +1,78 @@ +{ + "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" + } + }, + "autoload-dev": { + "psr-4": { + "horstoeko\\zugferd\\tests\\": "tests" + } + }, + "require": { + "php": ">=7.3", + "ext-simplexml": "*", + "goetas-webservices/xsd2php-runtime": "^0.2.13", + "horstoeko/mimedb": "^1", + "horstoeko/stringmanagement": "^1", + "jms/serializer": "^3", + "setasign/fpdf": "^1", + "setasign/fpdi": "^2", + "smalot/pdfparser": "^0|^2", + "symfony/finder": "^5|^6|^7", + "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", + "phpdocumentor/reflection-docblock": "^5", + "phploc/phploc": "^7", + "phpmd/phpmd": "^2", + "phpstan/phpstan": "^1|^2", + "phpunit/phpunit": "^9", + "rector/rector": "*", + "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/entities ./src ./tests", + "phpcs12": "./vendor/bin/phpcs --standard=./build/phpcsrules_psr12.xml --extensions=php --ignore=autoload.php,./src/entities ./src ./tests", + "phpcbf": "./vendor/bin/phpcbf -q --extensions=php --ignore=autoload.php,./src/entities ./src ./tests", + "phpcbf1": "./vendor/bin/phpcbf --standard=./build/phpcsrules_psr1.xml -q --extensions=php --ignore=autoload.php,./src/entities ./src ./tests", + "phpcbf2": "./vendor/bin/phpcbf --standard=./build/phpcsrules_psr2.xml -q --extensions=php --ignore=autoload.php,./src/entities ./src ./tests", + "phpcbf12": "./vendor/bin/phpcbf --standard=./build/phpcsrules_psr12.xml -q --extensions=php --ignore=autoload.php,./src/entities ./src ./tests", + "phpcbfsq": "./vendor/bin/phpcbf --standard=./build/phpcsrules_squiz.xml -q --extensions=php --ignore=autoload.php,./src/entities ./src ./tests", + "phpstan": "./vendor/bin/phpstan analyze -c ./build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress", + "phpstan_cs": "./vendor/bin/phpstan analyze -c ./build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --error-format=checkstyle", + "makedoc": "phing -f ./build.xml projectdoc", + "checkstyle": [ + "Composer\\Config::disableProcessTimeout", + "vendor/bin/phpcs --report=checkstyle --report-file=build/logs/checkstyle.xml --standard=build/phpcsrules_psr12.xml --extensions=php --ignore=autoload.php,./src/entities src tests", + "vendor/bin/phpstan analyze -c build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --error-format=checkstyle > build/logs/checkstyle_phpstan.xml" + ], + "rector": "vendor/bin/rector --config=./build/phprectorconfig.php" + } +} diff --git a/vendor/horstoeko/zugferd/examples/00_ExampleHelpers.php b/vendor/horstoeko/zugferd/examples/00_ExampleHelpers.php new file mode 100644 index 000000000..220f47922 --- /dev/null +++ b/vendor/horstoeko/zugferd/examples/00_ExampleHelpers.php @@ -0,0 +1,104 @@ +setDocument($zugferdDocument); + $kositValidator->enableRemoteMode(); + $kositValidator->setRemoteModeHost(getKositValidatorRemoteHost()); + $kositValidator->setRemoteModePort(getKositValidatorRemotePort()); + $kositValidator->validate(); + + return $kositValidator->hasNoValidationErrors() ? 1 : 2; +} + +/** + * Outputs a line to CLI. It uses sprintf. + * + * @param string $message + * @param mixed ...$args + * @return void + */ +function writeLnToCli(string $message, ...$args): void +{ + $output = sprintf($message, ...$args); + + if (trim($output) !== '' && trim($output) !== '0') { + echo $output . PHP_EOL; + } +} + +/** + * Write an empty line to CLI + * + * @return void + */ +function writeNewLineToCli(): void +{ + echo PHP_EOL; +} + +/** + * Implode an associative array to form key=value + * + * @param string $separator + * @param array $array + * @return string + */ +function implodeAssocArray(string $separator, array $array): string +{ + return + implode( + $separator, + array_map(function ($key, $value) { + return sprintf("%s=%s", $key, $value); + }, array_keys($array), $array) + ); +} diff --git a/vendor/horstoeko/zugferd/examples/01_ZugferdDocumentBuilder_EN16931.php b/vendor/horstoeko/zugferd/examples/01_ZugferdDocumentBuilder_EN16931.php new file mode 100644 index 000000000..3dd95dcae --- /dev/null +++ b/vendor/horstoeko/zugferd/examples/01_ZugferdDocumentBuilder_EN16931.php @@ -0,0 +1,196 @@ +setDocumentInformation( + 'R-2024/00001', // Invoice number (BT-1) + ZugferdInvoiceType::INVOICE, // Type "Invoice" (BT-3) + DateTime::createFromFormat('Ymd', '20241231'), // Invoice fate (BT-2) + ZugferdCurrencyCodes::EURO // Invoice currency is EUR (Euro) (BT-5) +); + +// Not mandatory, but welcome are details such as managing director, commercial register entry or similar + +$documentBuilder->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'); + +// Indication of when the period covered by the invoice begins and when it ends. Also referred to as the delivery period + +$documentBuilder->setDocumentBillingPeriod(DateTime::createFromFormat('Ymd', '20250101'), DateTime::createFromFormat('Ymd', '20250131'), '01.01.2025 - 31.01.2025'); + +// Add additional documents supporting the invoice +// Type code 916 is used without exception for invoice justifying documents +// First example: Specification of an external resource including the intended primary access method, e.g. http:// or ftp:// +// Second example: Specification of a local file to be included in the document as a BASE64-encoded attachment + +$documentBuilder->addDocumentInvoiceSupportingDocumentWithUri('REFDOC-2024/00001-1', 'http.//some.url', 'Inhaltsstoffe Joghurt'); +$documentBuilder->addDocumentInvoiceSupportingDocumentWithFile('REFDOC-2024/00001-2', __DIR__ . '/assets/00_AdditionalDocument.csv', 'Herkunftsnachweis Trennblätter'); + +// Add details to the tender or lot reference. In some countries, a reference to the tender that led to the contract must be provided. +// Type code 50 is used exclusively for the specification of the tender or lot reference + +$documentBuilder->addDocumentTenderOrLotReferenceDocument('LOS 738625'); + +// Add details of the calculated object. Only the type code 130 is used to transmit an object identifier. Depending on the application, +// an object identifier can be a subscription number, a telephone number, a meter reading, a vehicle, a person, etc. +// Note: Additional documents of type code 130 may only be specified once. + +$documentBuilder->addDocumentInvoicedObjectReferenceDocument('125', ZugferdReferenceCodeQualifiers::SALE_PERS_NUMB); // Sales person number + +// Adding details to the associated contract +// The contract reference should be assigned once in the context of the specific trading relationship and for a defined period of time. + +$documentBuilder->setDocumentContractReferencedDocument('CON-2024/2025-001'); + +// Adding a detail to a project reference +// Enter the identifier of the project to which the invoice refers and the name of the project. + +$documentBuilder->setDocumentProcuringProject('PROJ-2025-001-1', 'Allgemeine Dienstleistungen'); + +// We should also define how payments are handled. In our case we want to use +// a SEPA direct debit. We book from the IBAN DE12500105170648489890. We also provide a Creditor-Reference +// We also need a creditor reference as the second parameter which is required for direct debit + +$documentBuilder->addDocumentPaymentMeanToDirectDebit('DE12500105170648489890', 'R-2024/00001'); + +// We should also define the payment terms as a textual information +// The first parameter defines the textual description of our payment terms. +// The second parameter defines the due date of the invoice. As you have chosen a direct debit procedure, this is the date of the direct debit. +// The third parameter defines the mandant reference which is required for direct debit + +$documentBuilder->addDocumentPaymentTerm('Wird von Konto DE12500105170648489890 abgebucht', DateTime::createFromFormat('Ymd', '20250131'), 'MANDATE-2024/000001'); + +// An indispensable part of an invoice is the indication of the seller (supplier). Let's do that now. + +$documentBuilder->setDocumentSeller('Lieferant GmbH', '549910'); +$documentBuilder->addDocumentSellerGlobalId('4000001123452', '0088'); +$documentBuilder->addDocumentSellerTaxNumber('201/113/40209'); +$documentBuilder->addDocumentSellerVATRegistrationNumber('DE123456789'); +$documentBuilder->setDocumentSellerAddress('Lieferantenstraße 20', '', '', '80333', 'München', ZugferdCountryCodes::GERMANY); +$documentBuilder->setDocumentSellerContact('H. Müller', 'Verkauf', '+49-111-2222222', '+49-111-3333333', 'hm@lieferant.de'); +$documentBuilder->setDocumentSellerCommunication(ZugferdElectronicAddressScheme::UNECE3155_EM, 'sales@lieferant.de'); + +// The buyer (customer) details are also an important part of the invoice. + +$documentBuilder->setDocumentBuyer('Kunden AG Mitte', 'GE2020211'); +$documentBuilder->setDocumentBuyerAddress('Kundenstraße 15', '', '', '69876', 'Frankfurt', ZugferdCountryCodes::GERMANY); +$documentBuilder->setDocumentBuyerContact('H. Meier', 'Einkauf', '+49-333-4444444', '+49-333-5555555', 'hm@kunde.de'); +$documentBuilder->setDocumentBuyerCommunication(ZugferdElectronicAddressScheme::UNECE3155_EM, 'purchase@kunde.de'); + +// You can specify a different payee. It is possible to enter a postal address and +// a contact, but some validators issue a warning. + +$documentBuilder->setDocumentPayee('Kunden AG Zahlungsdienstleistung'); + +// Sometimes it happens that you want to refer to an order (order number) transmitted by the buyer (customer) when +// issuing the invoice. We enter the buyer (customer) order number here: + +$documentBuilder->setDocumentBuyerOrderReferencedDocument('PO-2024-0003324'); + +// Sometimes the seller (supplier) wants to provide his buyer (customer) a reference to the internal sales order number + +$documentBuilder->setDocumentSellerOrderReferencedDocument('SO-2024-000993337'); + +// It is also possible to specify a different delivery point in the invoice +// It is possible to specify a contact at the different delivery point, but some validators issue a warning + +$documentBuilder->setDocumentShipTo('Kunden AG Ost'); +$documentBuilder->setDocumentShipToAddress('Lieferstraße 1', '', '', '04109', 'Leipzig', ZugferdCountryCodes::GERMANY); + +// A delivery date can also be specified within the invoice + +$documentBuilder->setDocumentSupplyChainEvent(DateTime::createFromFormat('Ymd', '20250115')); + +// It is now time to add our first invoice line. This is defined as follows +// - The product name is "Trennblätter A4" and has a seller (supplier) assigned item number "TB100A4" (setDocumentPositionProductDetails) +// - The unit price is 9.90 EUR (setDocumentPositionNetPrice) +// - The quantity is 20 pieces (setDocumentPositionQuantity) +// - The VAT is calculated with 19% (addDocumentPositionTax) +// - The line amount is 20 * 9.90 EUR = 198.00 EUR (setDocumentPositionLineSummation) + +$documentBuilder->addNewPosition('1'); +$documentBuilder->setDocumentPositionProductDetails('Trennblätter A4', '50er Pack', 'TB100A4'); +$documentBuilder->setDocumentPositionNetPrice(9.9000); +$documentBuilder->setDocumentPositionQuantity(20, ZugferdUnitCodes::REC20_PIECE); +$documentBuilder->addDocumentPositionTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 19); +$documentBuilder->setDocumentPositionLineSummation(198.0); + +// We now add a second invoice line. +// - The product name is "Joghurt Banane" and has a seller (supplier) assigned item number "ARNR2" (setDocumentPositionProductDetails) +// - The unit price is 5.50 EUR (setDocumentPositionNetPrice) +// - The quantity is 50 pieces (setDocumentPositionQuantity) +// - The VAT is calculated with 7% (addDocumentPositionTax) +// - The line amount is 50 * 5.50 EUR = 275.00 EUR (setDocumentPositionLineSummation) + +$documentBuilder->addNewPosition('2'); +$documentBuilder->setDocumentPositionProductDetails('Joghurt Banane', 'B-Ware', 'ARNR2'); +$documentBuilder->setDocumentPositionNetPrice(5.5000); +$documentBuilder->setDocumentPositionQuantity(50, ZugferdUnitCodes::REC20_PIECE); +$documentBuilder->addDocumentPositionTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 7); +$documentBuilder->setDocumentPositionLineSummation(275.0); + +// Last but not least, we add a third and final invoice line. This should essentially also serve to clarify the VAT calculation in the following +// - The product name is "Joghurt Erdbeer" and has a seller (supplier) assigned item number "ARNR3" (setDocumentPositionProductDetails) +// - The unit price is 4.00 EUR (setDocumentPositionNetPrice) +// - The quantity is 100 pieces (setDocumentPositionQuantity) +// - The VAT is calculated with 7% (addDocumentPositionTax) +// - The line amount is 100 * 4.00 EUR = 400.00 EUR (setDocumentPositionLineSummation) + +$documentBuilder->addNewPosition('3'); +$documentBuilder->setDocumentPositionProductDetails('Joghurt Erdbeer', '', 'ARNR3'); +$documentBuilder->setDocumentPositionNetPrice(4.0000); +$documentBuilder->setDocumentPositionQuantity(100, ZugferdUnitCodes::REC20_PIECE); +$documentBuilder->addDocumentPositionTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 7); +$documentBuilder->setDocumentPositionLineSummation(400.0); + +// Now we need to generate the VAT breakdown. This is an essential part of the invoice. +// You have to group the VAT base amounts by VAT-Category ("S"), VAT-Type ("VAT") and VAT-Percent (19%, 7%) +// The calculation is as follows: +// - The first VAT summation comes at least from invoice line 1 - 19% VAT from 198.00 EUR (Net-Amount) = 37.62 +// - The second VAT summation comes at least from invoice line 2 & 3 - 7% VAT from 275.00 EUR + 400.00 EUR = 675.00 EUR (Net-Amount) = 47.25 + +$documentBuilder->addDocumentTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 198.0, 37.62, 19.0); +$documentBuilder->addDocumentTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 675.0, 47.25, 7.0); + +// Finally, there is an equally important part of the invoice - the totals. +// 1. Grand total amount = 198.00 EUR + 37.62 EUR (VAT) + 675.00 EUR + 47.25 EUR (VAT) = 957.87 +// 2. Amount to pay = We assume that there was no pre-payment and set the amount to be paid equal to the grand total amount +// 3. Net total amount = 198.EUR (Position 1) + 675.00 EUR (Position 2 & 3) = 873.00 EUR +// 4. Charge total amount = 0.00 EUR since we don't have any charges in the invoice +// 5. Discount total amount = 0.00 EUR since we don't have any discounts in the invoice +// 6. VAT basis total amount = As a rule, this amount corresponds to 3. +// 7. VAT total amount = 19 % from 198.00 EUR = 37.62 EUR + 7% from 675.00 EUR = 47.28 EUR is 84.87 EUR + +$documentBuilder->setDocumentSummation(957.87, 957.87, 873.00, 0.0, 0.0, 873.00, 84.87); + +// We can now generate the invoice as a file... + +$documentBuilder->writeFile(__DIR__ . '/factur-x.xml'); + +// ... or have the generated XML returned as a string + +$someStringVariable = $documentBuilder->getContent(); + +// Optionally validate XML. For details see 00_ExampleHelpers.php + +$validationResult = validateUsingKositValidator($documentBuilder); + +echo $validationResult === 0 ? 'Validation is disabled' : ($validationResult == 1 ? 'The document is valid' : 'The document is not valid'); + diff --git a/vendor/horstoeko/zugferd/examples/01_ZugferdDocumentBuilder_XRECHNUNG3.php b/vendor/horstoeko/zugferd/examples/01_ZugferdDocumentBuilder_XRECHNUNG3.php new file mode 100644 index 000000000..bb253b39b --- /dev/null +++ b/vendor/horstoeko/zugferd/examples/01_ZugferdDocumentBuilder_XRECHNUNG3.php @@ -0,0 +1,201 @@ +setDocumentInformation( + 'R-2024/00001', // Invoice number (BT-1) + ZugferdInvoiceType::INVOICE, // Type "Invoice" (BT-3) + DateTime::createFromFormat('Ymd', '20241231'), // Invoice fate (BT-2) + ZugferdCurrencyCodes::EURO // Invoice currency is EUR (Euro) (BT-5) +); + +// Not mandatory, but welcome are details such as managing director, commercial register entry or similar + +$documentBuilder->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'); + +// Indication of when the period covered by the invoice begins and when it ends. Also referred to as the delivery period + +$documentBuilder->setDocumentBillingPeriod(DateTime::createFromFormat('Ymd', '20250101'), DateTime::createFromFormat('Ymd', '20250131'), '01.01.2025 - 31.01.2025'); + +// Add additional documents supporting the invoice +// Type code 916 is used without exception for invoice justifying documents +// First example: Specification of an external resource including the intended primary access method, e.g. http:// or ftp:// +// Second example: Specification of a local file to be included in the document as a BASE64-encoded attachment + +$documentBuilder->addDocumentInvoiceSupportingDocumentWithUri('REFDOC-2024/00001-1', 'http.//some.url', 'Inhaltsstoffe Joghurt'); +$documentBuilder->addDocumentInvoiceSupportingDocumentWithFile('REFDOC-2024/00001-2', __DIR__ . '/assets/00_AdditionalDocument.csv', 'Herkunftsnachweis Trennblätter'); + +// Add details to the tender or lot reference. In some countries, a reference to the tender that led to the contract must be provided. +// Type code 50 is used exclusively for the specification of the tender or lot reference + +$documentBuilder->addDocumentTenderOrLotReferenceDocument('LOS 738625'); + +// Add details of the calculated object. Only the type code 130 is used to transmit an object identifier. Depending on the application, +// an object identifier can be a subscription number, a telephone number, a meter reading, a vehicle, a person, etc. +// Note: Additional documents of type code 130 may only be specified once. + +$documentBuilder->addDocumentInvoicedObjectReferenceDocument('125', ZugferdReferenceCodeQualifiers::SALE_PERS_NUMB); // Sales person number + +// Adding details to the associated contract +// The contract reference should be assigned once in the context of the specific trading relationship and for a defined period of time. + +$documentBuilder->setDocumentContractReferencedDocument('CON-2024/2025-001'); + +// Adding a detail to a project reference +// Enter the identifier of the project to which the invoice refers and the name of the project. + +$documentBuilder->setDocumentProcuringProject('PROJ-2025-001-1', 'Allgemeine Dienstleistungen'); + +// We should also define how payments are handled. In our case we want to use +// a SEPA direct debit. We book from the IBAN DE12500105170648489890. We also provide a Creditor-Reference +// We also need a creditor reference as the second parameter which is required for direct debit + +$documentBuilder->addDocumentPaymentMeanToDirectDebit('DE12500105170648489890', 'R-2024/00001'); + +// We should also define the payment terms as a textual information +// The first parameter defines the textual description of our payment terms. +// The second parameter defines the due date of the invoice. As you have chosen a direct debit procedure, this is the date of the direct debit. +// The third parameter defines the mandant reference which is required for direct debit + +$documentBuilder->addDocumentPaymentTerm('Wird von Konto DE12500105170648489890 abgebucht', DateTime::createFromFormat('Ymd', '20250131'), 'MANDATE-2024/000001'); + +// An indispensable part of an invoice is the indication of the seller (supplier). Let's do that now. + +$documentBuilder->setDocumentSeller('Lieferant GmbH', '549910'); +$documentBuilder->addDocumentSellerGlobalId('4000001123452', '0088'); +$documentBuilder->addDocumentSellerTaxNumber('201/113/40209'); +$documentBuilder->addDocumentSellerVATRegistrationNumber('DE123456789'); +$documentBuilder->setDocumentSellerAddress('Lieferantenstraße 20', '', '', '80333', 'München', ZugferdCountryCodes::GERMANY); +$documentBuilder->setDocumentSellerContact('H. Müller', 'Verkauf', '+49-111-2222222', '+49-111-3333333', 'hm@lieferant.de'); +$documentBuilder->setDocumentSellerCommunication(ZugferdElectronicAddressScheme::UNECE3155_EM, 'sales@lieferant.de'); + +// The buyer (customer) details are also an important part of the invoice. + +$documentBuilder->setDocumentBuyer('Kunden AG Mitte', 'GE2020211'); +$documentBuilder->setDocumentBuyerAddress('Kundenstraße 15', '', '', '69876', 'Frankfurt', ZugferdCountryCodes::GERMANY); +$documentBuilder->setDocumentBuyerContact('H. Meier', 'Einkauf', '+49-333-4444444', '+49-333-5555555', 'hm@kunde.de'); +$documentBuilder->setDocumentBuyerCommunication(ZugferdElectronicAddressScheme::UNECE3155_EM, 'purchase@kunde.de'); + +// You can specify a different payee. It is possible to enter a postal address and +// a contact, but some validators issue a warning. + +$documentBuilder->setDocumentPayee('Kunden AG Zahlungsdienstleistung'); + +// Specify a Routing ID (German: Leitweg-ID) +// In the XRECHNUNG it is required to provide a routing ID ("Leitweg ID") + +$documentBuilder->setDocumentBuyerReference('34676-342323'); + +// Sometimes it happens that you want to refer to an order (order number) transmitted by the buyer (customer) when +// issuing the invoice. We enter the buyer (customer) order number here: + +$documentBuilder->setDocumentBuyerOrderReferencedDocument('PO-2024-0003324'); + +// Sometimes the seller (supplier) wants to provide his buyer (customer) a reference to the internal sales order number + +$documentBuilder->setDocumentSellerOrderReferencedDocument('SO-2024-000993337'); + +// It is also possible to specify a different delivery point in the invoice +// It is possible to specify a contact at the different delivery point, but some validators issue a warning + +$documentBuilder->setDocumentShipTo('Kunden AG Ost'); +$documentBuilder->setDocumentShipToAddress('Lieferstraße 1', '', '', '04109', 'Leipzig', ZugferdCountryCodes::GERMANY); + +// A delivery date can also be specified within the invoice + +$documentBuilder->setDocumentSupplyChainEvent(DateTime::createFromFormat('Ymd', '20250115')); + +// It is now time to add our first invoice line. This is defined as follows +// - The product name is "Trennblätter A4" and has a seller (supplier) assigned item number "TB100A4" (setDocumentPositionProductDetails) +// - The unit price is 9.90 EUR (setDocumentPositionNetPrice) +// - The quantity is 20 pieces (setDocumentPositionQuantity) +// - The VAT is calculated with 19% (addDocumentPositionTax) +// - The line amount is 20 * 9.90 EUR = 198.00 EUR (setDocumentPositionLineSummation) + +$documentBuilder->addNewPosition('1'); +$documentBuilder->setDocumentPositionProductDetails('Trennblätter A4', '50er Pack', 'TB100A4'); +$documentBuilder->setDocumentPositionNetPrice(9.9000); +$documentBuilder->setDocumentPositionQuantity(20, ZugferdUnitCodes::REC20_PIECE); +$documentBuilder->addDocumentPositionTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 19); +$documentBuilder->setDocumentPositionLineSummation(198.0); + +// We now add a second invoice line. +// - The product name is "Joghurt Banane" and has a seller (supplier) assigned item number "ARNR2" (setDocumentPositionProductDetails) +// - The unit price is 5.50 EUR (setDocumentPositionNetPrice) +// - The quantity is 50 pieces (setDocumentPositionQuantity) +// - The VAT is calculated with 7% (addDocumentPositionTax) +// - The line amount is 50 * 5.50 EUR = 275.00 EUR (setDocumentPositionLineSummation) + +$documentBuilder->addNewPosition('2'); +$documentBuilder->setDocumentPositionProductDetails('Joghurt Banane', 'B-Ware', 'ARNR2'); +$documentBuilder->setDocumentPositionNetPrice(5.5000); +$documentBuilder->setDocumentPositionQuantity(50, ZugferdUnitCodes::REC20_PIECE); +$documentBuilder->addDocumentPositionTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 7); +$documentBuilder->setDocumentPositionLineSummation(275.0); + +// Last but not least, we add a third and final invoice line. This should essentially also serve to clarify the VAT calculation in the following +// - The product name is "Joghurt Erdbeer" and has a seller (supplier) assigned item number "ARNR3" (setDocumentPositionProductDetails) +// - The unit price is 4.00 EUR (setDocumentPositionNetPrice) +// - The quantity is 100 pieces (setDocumentPositionQuantity) +// - The VAT is calculated with 7% (addDocumentPositionTax) +// - The line amount is 100 * 4.00 EUR = 400.00 EUR (setDocumentPositionLineSummation) + +$documentBuilder->addNewPosition('3'); +$documentBuilder->setDocumentPositionProductDetails('Joghurt Erdbeer', '', 'ARNR3'); +$documentBuilder->setDocumentPositionNetPrice(4.0000); +$documentBuilder->setDocumentPositionQuantity(100, ZugferdUnitCodes::REC20_PIECE); +$documentBuilder->addDocumentPositionTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 7); +$documentBuilder->setDocumentPositionLineSummation(400.0); + +// Now we need to generate the VAT breakdown. This is an essential part of the invoice. +// You have to group the VAT base amounts by VAT-Category ("S"), VAT-Type ("VAT") and VAT-Percent (19%, 7%) +// The calculation is as follows: +// - The first VAT summation comes at least from invoice line 1 - 19% VAT from 198.00 EUR (Net-Amount) = 37.62 +// - The second VAT summation comes at least from invoice line 2 & 3 - 7% VAT from 275.00 EUR + 400.00 EUR = 675.00 EUR (Net-Amount) = 47.25 + +$documentBuilder->addDocumentTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 198.0, 37.62, 19.0); +$documentBuilder->addDocumentTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 675.0, 47.25, 7.0); + +// Finally, there is an equally important part of the invoice - the totals. +// 1. Grand total amount = 198.00 EUR + 37.62 EUR (VAT) + 675.00 EUR + 47.25 EUR (VAT) = 957.87 +// 2. Amount to pay = We assume that there was no pre-payment and set the amount to be paid equal to the grand total amount +// 3. Net total amount = 198.EUR (Position 1) + 675.00 EUR (Position 2 & 3) = 873.00 EUR +// 4. Charge total amount = 0.00 EUR since we don't have any charges in the invoice +// 5. Discount total amount = 0.00 EUR since we don't have any discounts in the invoice +// 6. VAT basis total amount = As a rule, this amount corresponds to 3. +// 7. VAT total amount = 19 % from 198.00 EUR = 37.62 EUR + 7% from 675.00 EUR = 47.28 EUR is 84.87 EUR + +$documentBuilder->setDocumentSummation(957.87, 957.87, 873.00, 0.0, 0.0, 873.00, 84.87); + +// We can now generate the invoice as a file... + +$documentBuilder->writeFile(__DIR__ . '/factur-x.xml'); + +// ... or have the generated XML returned as a string + +$someStringVariable = $documentBuilder->getContent(); + +// Optionally validate XML. For details see 00_ExampleHelpers.php + +$validationResult = validateUsingKositValidator($documentBuilder); + +echo $validationResult === 0 ? 'Validation is disabled' : ($validationResult == 1 ? 'The document is valid' : 'The document is not valid'); + diff --git a/vendor/horstoeko/zugferd/examples/02_ZugferdDocumentPdfBuilder_EN16931.php b/vendor/horstoeko/zugferd/examples/02_ZugferdDocumentPdfBuilder_EN16931.php new file mode 100644 index 000000000..4661e2a53 --- /dev/null +++ b/vendor/horstoeko/zugferd/examples/02_ZugferdDocumentPdfBuilder_EN16931.php @@ -0,0 +1,212 @@ +setDocumentInformation( + 'R-2024/00001', // Invoice Number (BT-1) + ZugferdInvoiceType::INVOICE, // Type "Invoice" (BT-3) + DateTime::createFromFormat("Ymd", "20241231"), // Invoice Date (BT-2) + ZugferdCurrencyCodes::EURO // Invoice currency is EUR (Euro) (BT-5) +); + +$documentBuilder->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'); +$documentBuilder->setDocumentBillingPeriod(DateTime::createFromFormat("Ymd", "20250101"), DateTime::createFromFormat("Ymd", "20250131"), "01.01.2025 - 31.01.2025"); +$documentBuilder->addDocumentInvoiceSupportingDocumentWithUri('REFDOC-2024/00001-1', 'http.//some.url', 'Inhaltsstoffe Joghurt'); +$documentBuilder->addDocumentInvoiceSupportingDocumentWithFile('REFDOC-2024/00001-2', __DIR__ . '/assets/00_AdditionalDocument.csv', 'Herkunftsnachweis Trennblätter'); +$documentBuilder->addDocumentTenderOrLotReferenceDocument('LOS 738625'); +$documentBuilder->addDocumentInvoicedObjectReferenceDocument('125', ZugferdReferenceCodeQualifiers::SALE_PERS_NUMB); // Sales person number +$documentBuilder->setDocumentContractReferencedDocument('CON-2024/2025-001'); +$documentBuilder->setDocumentProcuringProject('PROJ-2025-001-1', 'Allgemeine Dienstleistungen'); +$documentBuilder->addDocumentPaymentMeanToDirectDebit("DE12500105170648489890", "R-2024/00001"); +$documentBuilder->addDocumentPaymentTerm('Wird von Konto DE12500105170648489890 abgebucht', DateTime::createFromFormat("Ymd", "20250131"), 'MANDATE-2024/000001'); +$documentBuilder->setDocumentSeller("Lieferant GmbH", "549910"); +$documentBuilder->addDocumentSellerGlobalId("4000001123452", "0088"); +$documentBuilder->addDocumentSellerTaxNumber("201/113/40209"); +$documentBuilder->addDocumentSellerVATRegistrationNumber("DE123456789"); +$documentBuilder->setDocumentSellerAddress("Lieferantenstraße 20", "", "", "80333", "München", ZugferdCountryCodes::GERMANY); +$documentBuilder->setDocumentSellerContact("H. Müller", "Verkauf", "+49-111-2222222", "+49-111-3333333", "hm@lieferant.de"); +$documentBuilder->setDocumentSellerCommunication(ZugferdElectronicAddressScheme::UNECE3155_EM, 'sales@lieferant.de'); +$documentBuilder->setDocumentBuyer("Kunden AG Mitte", "GE2020211"); +$documentBuilder->setDocumentBuyerAddress("Kundenstraße 15", "", "", "69876", "Frankfurt", ZugferdCountryCodes::GERMANY); +$documentBuilder->setDocumentBuyerContact("H. Meier", "Einkauf", "+49-333-4444444", "+49-333-5555555", "hm@kunde.de"); +$documentBuilder->setDocumentBuyerCommunication(ZugferdElectronicAddressScheme::UNECE3155_EM, 'purchase@kunde.de'); +$documentBuilder->setDocumentPayee('Kunden AG Zahlungsdienstleistung'); +$documentBuilder->setDocumentBuyerOrderReferencedDocument("PO-2024-0003324"); +$documentBuilder->setDocumentSellerOrderReferencedDocument('SO-2024-000993337'); +$documentBuilder->setDocumentShipTo("Kunden AG Ost"); +$documentBuilder->setDocumentShipToAddress("Lieferstraße 1", "", "", "04109", "Leipzig", ZugferdCountryCodes::GERMANY); +$documentBuilder->setDocumentSupplyChainEvent(DateTime::createFromFormat("Ymd", "20250115")); +$documentBuilder->addNewPosition("1"); +$documentBuilder->setDocumentPositionProductDetails("Trennblätter A4", "50er Pack", "TB100A4"); +$documentBuilder->setDocumentPositionNetPrice(9.9000); +$documentBuilder->setDocumentPositionQuantity(20, ZugferdUnitCodes::REC20_PIECE); +$documentBuilder->addDocumentPositionTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 19); +$documentBuilder->setDocumentPositionLineSummation(198.0); +$documentBuilder->addNewPosition("2"); +$documentBuilder->setDocumentPositionProductDetails("Joghurt Banane", "B-Ware", "ARNR2"); +$documentBuilder->setDocumentPositionNetPrice(5.5000); +$documentBuilder->setDocumentPositionQuantity(50, ZugferdUnitCodes::REC20_PIECE); +$documentBuilder->addDocumentPositionTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 7); +$documentBuilder->setDocumentPositionLineSummation(275.0); +$documentBuilder->addNewPosition("3"); +$documentBuilder->setDocumentPositionProductDetails("Joghurt Erdbeer", "", "ARNR3"); +$documentBuilder->setDocumentPositionNetPrice(4.0000); +$documentBuilder->setDocumentPositionQuantity(100, ZugferdUnitCodes::REC20_PIECE); +$documentBuilder->addDocumentPositionTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 7); +$documentBuilder->setDocumentPositionLineSummation(400.0); +$documentBuilder->addDocumentTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 198.0, 37.62, 19.0); +$documentBuilder->addDocumentTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 675.0, 47.25, 7.0); +$documentBuilder->setDocumentSummation(957.87, 957.87, 873.00, 0.0, 0.0, 873.00, 84.87); + +// Next let's do the ZugferddocumentPdfBuilder it's job - let's attach the XML to the PDF. The attachment filename will be factur-x.xml +// since whe choosed the profile EN16931 in the ZugferdDocumentBuilder (see above) +// In the following there are multiple methods how you can build a conform PDF from an existing print layout + +$existingPdfFilename = __DIR__ . "/assets/00_ZugferdDocumentPdfBuilder_PrintLayout.pdf"; +$newPdfFilename = __DIR__ . "/02_ZugferdDocumentPdfBuilder_PrintLayout_Merged.pdf"; + +// First method: Merge the generated XML from ZugferdDocumentBuilder with an existing print layout file to a new PDF file + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($documentBuilder, $existingPdfFilename); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// Second method: Merge the generated XML from ZugferdDocumentBuilder with an stream (string) which contains the PDF to a new PDF file +// Note: We simulate the PDF stream (string) by calling file_get_contents. + +$pdfContent = file_get_contents($existingPdfFilename); + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfString($documentBuilder, $pdfContent); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// There is not only the saveDocument method of the ZugferdDocumentPdfBuilder. It is also possible to receive the merged +// content (PDF with embedded XML) as a stream (string) + +$mergedPdfContent = $zugferdDocumentPdfBuilder->downloadString(); + +// If you would like to brand the merged PDF with the name of you own solution you can call +// the method setAdditionalCreatorTool. Before calling this method the creator of the PDF is identified as 'Factur-X library 1.x.x by HorstOeko'. +// After calling this method you get 'MyERPSolution 1.0 / Factur-X PHP library 1.x.x by HorstOeko' as the creator + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfString($documentBuilder, $pdfContent); +$zugferdDocumentPdfBuilder->setAdditionalCreatorTool('MyERPSolution 1.0'); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// And last but not least, it is also possible to add additional attachments to the merged PDF. These can be any files that can help the invoice +// recipient with processing. For example, a time sheet as an Excel file would be conceivable. +// The method attachAdditionalFileByRealFile has 3 parameters: +// - The file to attach which must exist and must be readable +// - (Optional) A name to display in the attachments of the PDF +// - (Optional) The type of the relationship of the attachment. Valid values are defined in the class ZugferdDocumentPdfBuilderAbstract. The constants are starting with AF_ +// If you omit the last 2 parameters the following will happen: +// - The displayname is calculated from the filename you specified +// - The type of the relationship of the attachment will be AF_RELATIONSHIP_SUPPLEMENT (Supplement) + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfString($documentBuilder, $pdfContent); +$zugferdDocumentPdfBuilder->attachAdditionalFileByRealFile(__DIR__ . '/assets/00_AdditionalDocument.csv', "Some display Name", ZugferdDocumentPdfBuilderAbstract::AF_RELATIONSHIP_SUPPLEMENT); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// You can also add an attachment to the PDF as an stream (string). The conditions are the same as above for the attachAdditionalFileByRealFile method +// The only difference to attachAdditionalFileByRealFile is that the attachAdditionalFileByContent method accepts 4 parameters, whereby here (as with attachAdditionalFileByRealFile) +// the last two can be omitted. You only need to specify a file name under which the file is to be embedded +// Note: We simulate the attachment stream (string) by calling file_get_contents. + +$attachmentContent = file_get_contents(__DIR__ . '/assets/00_AdditionalDocument.csv'); + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfString($documentBuilder, $pdfContent); +$zugferdDocumentPdfBuilder->attachAdditionalFileByContent($attachmentContent, 'additionalDocument.csv', "Some other display Name", ZugferdDocumentPdfBuilderAbstract::AF_RELATIONSHIP_SUPPLEMENT); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// Set values for metadata-fields +// We can change some meta information such as the title, the subject, the author and the keywords. This library essentially provides 4 methods for this. +// These methods use so-called templates. These methods are: + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($documentBuilder, $existingPdfFilename); +$zugferdDocumentPdfBuilder->setAuthorTemplate('.....'); +$zugferdDocumentPdfBuilder->setTitleTemplate('.....'); +$zugferdDocumentPdfBuilder->setSubjectTemplate('.....'); +$zugferdDocumentPdfBuilder->setKeywordTemplate('.....'); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// The 4 methods just mentioned accept a free text that can accept the following placeholders: +// - %1$s .... contains the invoice number (is extracted from the XML data) +// - %2$s .... contains the type of XML document, such as ‘Invoice’ (is extracted from the XML data) +// - %3$s .... contains the name of the seller (extracted from the XML data) +// - %4$s .... contains the invoice date (extracted from the XML data) +// The following example generates... +// - the author: .... Issued by seller with name Lieferant GmbH +// - the title .... Lieferant GmbH : Invoice R-2024/00001 +// - the subject .... Invoice-Document, Issued by Lieferant GmbH +// - the keywords .... R-2024/00001, Invoice, Lieferant GmbH, 2024-12-31 + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($documentBuilder, $existingPdfFilename); +$zugferdDocumentPdfBuilder->setAuthorTemplate('Issued by seller with name %3$s'); +$zugferdDocumentPdfBuilder->setTitleTemplate('%3$s : %2$s %1$s'); +$zugferdDocumentPdfBuilder->setSubjectTemplate('%2$s-Document, Issued by %3$s'); +$zugferdDocumentPdfBuilder->setKeywordTemplate('%1$s, %2$s, %3$s, %4$s'); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// If the previously mentioned options for manipulating the meta information are not sufficient, +// you can also use a callback function. The following 4 parameters are passed to the callback +// function in the specified order: +// - $which .... one of "author", "title", "subject" and "keywords" +// - $xmlContent .... the content of the xml as a string +// - $invoiceInformation .... an array with some information about the invoice +// - $default .... The default value for the specified field (see $which + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($documentBuilder, $existingPdfFilename); +$zugferdDocumentPdfBuilder->setMetaInformationCallback( + function ($which) { + if ($which === 'title') { + return "DummyTitle"; + } + + if ($which === 'author') { + return "DummyAuthor"; + } + + if ($which === 'subject') { + return "DummySubject"; + } + + if ($which === 'keywords') { + return "DummyKeywords"; + } + } +); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// To remove the callback you can call the setMetaInformationCallback +// method with a null value + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($documentBuilder, $existingPdfFilename); +$zugferdDocumentPdfBuilder->setMetaInformationCallback(null); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); diff --git a/vendor/horstoeko/zugferd/examples/02_ZugferdDocumentPdfBuilder_XRECHNUNG.php b/vendor/horstoeko/zugferd/examples/02_ZugferdDocumentPdfBuilder_XRECHNUNG.php new file mode 100644 index 000000000..faa927498 --- /dev/null +++ b/vendor/horstoeko/zugferd/examples/02_ZugferdDocumentPdfBuilder_XRECHNUNG.php @@ -0,0 +1,212 @@ +setDocumentInformation( + 'R-2024/00001', // Invoice Number (BT-1) + ZugferdInvoiceType::INVOICE, // Type "Invoice" (BT-3) + DateTime::createFromFormat("Ymd", "20241231"), // Invoice Date (BT-2) + ZugferdCurrencyCodes::EURO // Invoice currency is EUR (Euro) (BT-5) +); + +$documentBuilder->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'); +$documentBuilder->setDocumentBillingPeriod(DateTime::createFromFormat("Ymd", "20250101"), DateTime::createFromFormat("Ymd", "20250131"), "01.01.2025 - 31.01.2025"); +$documentBuilder->addDocumentInvoiceSupportingDocumentWithUri('REFDOC-2024/00001-1', 'http.//some.url', 'Inhaltsstoffe Joghurt'); +$documentBuilder->addDocumentInvoiceSupportingDocumentWithFile('REFDOC-2024/00001-2', __DIR__ . '/assets/00_AdditionalDocument.csv', 'Herkunftsnachweis Trennblätter'); +$documentBuilder->addDocumentTenderOrLotReferenceDocument('LOS 738625'); +$documentBuilder->addDocumentInvoicedObjectReferenceDocument('125', ZugferdReferenceCodeQualifiers::SALE_PERS_NUMB); // Sales person number +$documentBuilder->setDocumentContractReferencedDocument('CON-2024/2025-001'); +$documentBuilder->setDocumentProcuringProject('PROJ-2025-001-1', 'Allgemeine Dienstleistungen'); +$documentBuilder->addDocumentPaymentMeanToDirectDebit("DE12500105170648489890", "R-2024/00001"); +$documentBuilder->addDocumentPaymentTerm('Wird von Konto DE12500105170648489890 abgebucht', DateTime::createFromFormat("Ymd", "20250131"), 'MANDATE-2024/000001'); +$documentBuilder->setDocumentSeller("Lieferant GmbH", "549910"); +$documentBuilder->addDocumentSellerGlobalId("4000001123452", "0088"); +$documentBuilder->addDocumentSellerTaxNumber("201/113/40209"); +$documentBuilder->addDocumentSellerVATRegistrationNumber("DE123456789"); +$documentBuilder->setDocumentSellerAddress("Lieferantenstraße 20", "", "", "80333", "München", ZugferdCountryCodes::GERMANY); +$documentBuilder->setDocumentSellerContact("H. Müller", "Verkauf", "+49-111-2222222", "+49-111-3333333", "hm@lieferant.de"); +$documentBuilder->setDocumentSellerCommunication(ZugferdElectronicAddressScheme::UNECE3155_EM, 'sales@lieferant.de'); +$documentBuilder->setDocumentBuyer("Kunden AG Mitte", "GE2020211"); +$documentBuilder->setDocumentBuyerAddress("Kundenstraße 15", "", "", "69876", "Frankfurt", ZugferdCountryCodes::GERMANY); +$documentBuilder->setDocumentBuyerContact("H. Meier", "Einkauf", "+49-333-4444444", "+49-333-5555555", "hm@kunde.de"); +$documentBuilder->setDocumentBuyerCommunication(ZugferdElectronicAddressScheme::UNECE3155_EM, 'purchase@kunde.de'); +$documentBuilder->setDocumentPayee('Kunden AG Zahlungsdienstleistung'); +$documentBuilder->setDocumentBuyerOrderReferencedDocument("PO-2024-0003324"); +$documentBuilder->setDocumentSellerOrderReferencedDocument('SO-2024-000993337'); +$documentBuilder->setDocumentShipTo("Kunden AG Ost"); +$documentBuilder->setDocumentShipToAddress("Lieferstraße 1", "", "", "04109", "Leipzig", ZugferdCountryCodes::GERMANY); +$documentBuilder->setDocumentSupplyChainEvent(DateTime::createFromFormat("Ymd", "20250115")); +$documentBuilder->addNewPosition("1"); +$documentBuilder->setDocumentPositionProductDetails("Trennblätter A4", "50er Pack", "TB100A4"); +$documentBuilder->setDocumentPositionNetPrice(9.9000); +$documentBuilder->setDocumentPositionQuantity(20, ZugferdUnitCodes::REC20_PIECE); +$documentBuilder->addDocumentPositionTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 19); +$documentBuilder->setDocumentPositionLineSummation(198.0); +$documentBuilder->addNewPosition("2"); +$documentBuilder->setDocumentPositionProductDetails("Joghurt Banane", "B-Ware", "ARNR2"); +$documentBuilder->setDocumentPositionNetPrice(5.5000); +$documentBuilder->setDocumentPositionQuantity(50, ZugferdUnitCodes::REC20_PIECE); +$documentBuilder->addDocumentPositionTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 7); +$documentBuilder->setDocumentPositionLineSummation(275.0); +$documentBuilder->addNewPosition("3"); +$documentBuilder->setDocumentPositionProductDetails("Joghurt Erdbeer", "", "ARNR3"); +$documentBuilder->setDocumentPositionNetPrice(4.0000); +$documentBuilder->setDocumentPositionQuantity(100, ZugferdUnitCodes::REC20_PIECE); +$documentBuilder->addDocumentPositionTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 7); +$documentBuilder->setDocumentPositionLineSummation(400.0); +$documentBuilder->addDocumentTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 198.0, 37.62, 19.0); +$documentBuilder->addDocumentTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 675.0, 47.25, 7.0); +$documentBuilder->setDocumentSummation(957.87, 957.87, 873.00, 0.0, 0.0, 873.00, 84.87); + +// Next let's do the ZugferddocumentPdfBuilder it's job - let's attach the XML to the PDF. The attachment filename will be xrechnung.xml +// since whe choosed the profile XRECHNUNG 3.x in the ZugferdDocumentBuilder (see above) +// In the following there are multiple methods how you can build a conform PDF from an existing print layout + +$existingPdfFilename = __DIR__ . "/assets/00_ZugferdDocumentPdfBuilder_PrintLayout.pdf"; +$newPdfFilename = __DIR__ . "/02_ZugferdDocumentPdfBuilder_PrintLayout_Merged.pdf"; + +// First method: Merge the generated XML from ZugferdDocumentBuilder with an existing print layout file to a new PDF file + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($documentBuilder, $existingPdfFilename); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// Second method: Merge the generated XML from ZugferdDocumentBuilder with an stream (string) which contains the PDF to a new PDF file +// Note: We simulate the PDF stream (string) by calling file_get_contents. + +$pdfContent = file_get_contents($existingPdfFilename); + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfString($documentBuilder, $pdfContent); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// There is not only the saveDocument method of the ZugferdDocumentPdfBuilder. It is also possible to receive the merged +// content (PDF with embedded XML) as a stream (string) + +$mergedPdfContent = $zugferdDocumentPdfBuilder->downloadString(); + +// If you would like to brand the merged PDF with the name of you own solution you can call +// the method setAdditionalCreatorTool. Before calling this method the creator of the PDF is identified as 'Factur-X library 1.x.x by HorstOeko'. +// After calling this method you get 'MyERPSolution 1.0 / Factur-X PHP library 1.x.x by HorstOeko' as the creator + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfString($documentBuilder, $pdfContent); +$zugferdDocumentPdfBuilder->setAdditionalCreatorTool('MyERPSolution 1.0'); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// And last but not least, it is also possible to add additional attachments to the merged PDF. These can be any files that can help the invoice +// recipient with processing. For example, a time sheet as an Excel file would be conceivable. +// The method attachAdditionalFileByRealFile has 3 parameters: +// - The file to attach which must exist and must be readable +// - (Optional) A name to display in the attachments of the PDF +// - (Optional) The type of the relationship of the attachment. Valid values are defined in the class ZugferdDocumentPdfBuilderAbstract. The constants are starting with AF_ +// If you omit the last 2 parameters the following will happen: +// - The displayname is calculated from the filename you specified +// - The type of the relationship of the attachment will be AF_RELATIONSHIP_SUPPLEMENT (Supplement) + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfString($documentBuilder, $pdfContent); +$zugferdDocumentPdfBuilder->attachAdditionalFileByRealFile(__DIR__ . '/assets/00_AdditionalDocument.csv', "Some display Name", ZugferdDocumentPdfBuilderAbstract::AF_RELATIONSHIP_SUPPLEMENT); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// You can also add an attachment to the PDF as an stream (string). The conditions are the same as above for the attachAdditionalFileByRealFile method +// The only difference to attachAdditionalFileByRealFile is that the attachAdditionalFileByContent method accepts 4 parameters, whereby here (as with attachAdditionalFileByRealFile) +// the last two can be omitted. You only need to specify a file name under which the file is to be embedded +// Note: We simulate the attachment stream (string) by calling file_get_contents. + +$attachmentContent = file_get_contents(__DIR__ . '/assets/00_AdditionalDocument.csv'); + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfString($documentBuilder, $pdfContent); +$zugferdDocumentPdfBuilder->attachAdditionalFileByContent($attachmentContent, 'additionalDocument.csv', "Some other display Name", ZugferdDocumentPdfBuilderAbstract::AF_RELATIONSHIP_SUPPLEMENT); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// Set values for metadata-fields +// We can change some meta information such as the title, the subject, the author and the keywords. This library essentially provides 4 methods for this. +// These methods use so-called templates. These methods are: + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($documentBuilder, $existingPdfFilename); +$zugferdDocumentPdfBuilder->setAuthorTemplate('.....'); +$zugferdDocumentPdfBuilder->setTitleTemplate('.....'); +$zugferdDocumentPdfBuilder->setSubjectTemplate('.....'); +$zugferdDocumentPdfBuilder->setKeywordTemplate('.....'); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// The 4 methods just mentioned accept a free text that can accept the following placeholders: +// - %1$s .... contains the invoice number (is extracted from the XML data) +// - %2$s .... contains the type of XML document, such as ‘Invoice’ (is extracted from the XML data) +// - %3$s .... contains the name of the seller (extracted from the XML data) +// - %4$s .... contains the invoice date (extracted from the XML data) +// The following example generates... +// - the author: .... Issued by seller with name Lieferant GmbH +// - the title .... Lieferant GmbH : Invoice R-2024/00001 +// - the subject .... Invoice-Document, Issued by Lieferant GmbH +// - the keywords .... R-2024/00001, Invoice, Lieferant GmbH, 2024-12-31 + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($documentBuilder, $existingPdfFilename); +$zugferdDocumentPdfBuilder->setAuthorTemplate('Issued by seller with name %3$s'); +$zugferdDocumentPdfBuilder->setTitleTemplate('%3$s : %2$s %1$s'); +$zugferdDocumentPdfBuilder->setSubjectTemplate('%2$s-Document, Issued by %3$s'); +$zugferdDocumentPdfBuilder->setKeywordTemplate('%1$s, %2$s, %3$s, %4$s'); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// If the previously mentioned options for manipulating the meta information are not sufficient, +// you can also use a callback function. The following 4 parameters are passed to the callback +// function in the specified order: +// - $which .... one of "author", "title", "subject" and "keywords" +// - $xmlContent .... the content of the xml as a string +// - $invoiceInformation .... an array with some information about the invoice +// - $default .... The default value for the specified field (see $which + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($documentBuilder, $existingPdfFilename); +$zugferdDocumentPdfBuilder->setMetaInformationCallback( + function ($which) { + if ($which === 'title') { + return "DummyTitle"; + } + + if ($which === 'author') { + return "DummyAuthor"; + } + + if ($which === 'subject') { + return "DummySubject"; + } + + if ($which === 'keywords') { + return "DummyKeywords"; + } + } +); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); + +// To remove the callback you can call the setMetaInformationCallback +// method with a null value + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($documentBuilder, $existingPdfFilename); +$zugferdDocumentPdfBuilder->setMetaInformationCallback(null); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument($newPdfFilename); diff --git a/vendor/horstoeko/zugferd/examples/03_ZugferdDocumentReader_EN16931.php b/vendor/horstoeko/zugferd/examples/03_ZugferdDocumentReader_EN16931.php new file mode 100644 index 000000000..c5b6ddf95 --- /dev/null +++ b/vendor/horstoeko/zugferd/examples/03_ZugferdDocumentReader_EN16931.php @@ -0,0 +1,420 @@ +getDocumentInformation( + $documentNo, + $documentTypeCode, + $documentDate, + $documentCurrency, + $documentTaxCurrency, + $documentName, + $documentLanguage, + $effectiveSpecifiedPeriod +); + +$documentReader->getDocumentSupplyChainEvent( + $documentDeliveryDate +); + +writeNewLineToCli(); +writeLnToCli("Document Information"); +writeLnToCli("--------------------------------------------------------------------------------"); +writeLnToCli(" - Profile ............ %s", $documentReader->getProfileDefinitionParameter("name")); +writeLnToCli(" - Profile Context .... %s", $documentReader->getProfileDefinitionParameter("contextparameter")); +writeLnToCli(" - Document No ........ %s", $documentNo); +writeLnToCli(" - Document Type ...... %s", $documentTypeCode); +writeLnToCli(" - Document Date ...... %s", $documentDate->format("Y-m-d")); +writeLnToCli(" - Invoice currency: .. %s", $documentCurrency); +writeLnToCli(" - Tax currency ....... %s", $documentTaxCurrency); +writeLnToCli(" - Delivery date ...... %s", $documentDeliveryDate->format("Y-m-d")); + +// Now let's get information about the seller. In addition to the methods listed here, +// there are a few more available, but these are rarely required + +$documentReader->getDocumentSeller( + $sellerName, + $sellerIds, + $sellerDescription +); + +$documentReader->getDocumentSellerGlobalId( + $sellerGlobalIds +); + +$documentReader->getDocumentSellerTaxRegistration( + $sellerTaxRegistations +); + +$documentReader->getDocumentSellerAddress( + $sellerAddressLineOne, + $sellerAddressLineTwo, + $sellerAddressLineThree, + $sellerAddressPostCode, + $sellerAddressCity, + $sellerAddressCountry, + $sellerAddressSubDivisions +); + +$documentReader->getDocumentSellerCommunication( + $sellerCommunicationUriScheme, + $sellerCommunicationUri +); + +writeNewLineToCli(); +writeLnToCli("Seller Information"); +writeLnToCli("--------------------------------------------------------------------------------"); +writeLnToCli('%s', $sellerName); +writeLnToCli('%s', $sellerAddressLineOne); +writeLnToCli('%s', $sellerAddressLineTwo); +writeLnToCli('%s', $sellerAddressLineThree); +writeLnToCli('%s %s %s', $sellerAddressCountry, $sellerAddressPostCode, $sellerAddressCity); +writeLnToCli('%s %s', $sellerCommunicationUriScheme, $sellerCommunicationUri); +writeLnToCli('%s', implode(PHP_EOL, $sellerAddressSubDivisions)); +writeNewLineToCli(); +writeLnToCli('%s', implodeAssocArray(", ", $sellerTaxRegistations)); +writeNewLineToCli(); +writeLnToCli('Seller identifications: %s', implode(",", $sellerIds)); +writeLnToCli('Seller global identifications: %s', implodeAssocArray(",", $sellerGlobalIds)); + +// We now want to read out the contact information of our seller. Theoretically, there can be more than one contact, +// which is why we have to iterate over the transmitted contacts: + +writeNewLineToCli(); +writeLnToCli(" Seller contact Information"); +writeLnToCli(" ------------------------------------------------------------------------------"); + +if ($documentReader->firstDocumentSellerContact()) { + do { + $documentReader->getDocumentSellerContact( + $sellerContactPersonname, + $sellerContactDepartmentname, + $sellerContactPhoneNo, + $sellerContactFaxNo, + $sellerContactEmailAddress + ); + writeLnToCli(' %s', $sellerContactPersonname); + writeLnToCli(' %s', $sellerContactDepartmentname); + writeLnToCli(' %s', $sellerContactPhoneNo); + writeLnToCli(' %s', $sellerContactFaxNo); + writeLnToCli(' %s', $sellerContactEmailAddress); + writeNewLineToCli(); + } while ($documentReader->nextDocumentSellerContact()); +} else { + writeLnToCli(' No contact information found'); +} + +// Now let's get information about the buyer. In addition to the methods listed here, +// there are a few more available, but these are rarely required + +$documentReader->getDocumentBuyer( + $buyerName, + $buyerIds, + $buyerDescription +); + +$documentReader->getDocumentBuyerGlobalId( + $buyerGlobalIds +); + +$documentReader->getDocumentBuyerTaxRegistration( + $buyerTaxRegistations +); + +$documentReader->getDocumentBuyerAddress( + $buyerAddressLineOne, + $buyerAddressLineTwo, + $buyerAddressLineThree, + $buyerAddressPostCode, + $buyerAddressCity, + $buyerAddressCountry, + $buyerAddressSubDivisions +); + +$documentReader->getDocumentbuyerCommunication( + $buyerCommunicationUriScheme, + $buyerCommunicationUri +); + +writeNewLineToCli(); +writeLnToCli("Buyer Information"); +writeLnToCli("--------------------------------------------------------------------------------"); +writeLnToCli('%s', $buyerName); +writeLnToCli('%s', $buyerAddressLineOne); +writeLnToCli('%s', $buyerAddressLineTwo); +writeLnToCli('%s', $buyerAddressLineThree); +writeLnToCli('%s %s %s', $buyerAddressCountry, $buyerAddressPostCode, $buyerAddressCity); +writeLnToCli('%s', implode(PHP_EOL, $buyerAddressSubDivisions)); +writeLnToCli('%s %s', $buyerCommunicationUriScheme, $buyerCommunicationUri); +writeNewLineToCli(); +writeLnToCli('%s', implodeAssocArray(", ", $buyerTaxRegistations)); +writeNewLineToCli(); +writeLnToCli('Buyer identifications: %s', implode(",", $buyerIds)); +writeLnToCli('Buyer global identifications: %s', implodeAssocArray(",", $buyerGlobalIds)); + +// We now want to read out the contact information of our buyer. Theoretically, there can be more than one contact, +// which is why we have to iterate over the transmitted contacts: + +writeNewLineToCli(); +writeLnToCli(" Buyer contact Information"); +writeLnToCli(" ------------------------------------------------------------------------------"); + +if ($documentReader->firstDocumentBuyerContact()) { + do { + $documentReader->getDocumentBuyerContact( + $buyerContactPersonname, + $buyerContactDepartmentname, + $buyerContactPhoneNo, + $buyerContactFaxNo, + $buyerContactEmailAddress + ); + writeLnToCli(' %s', $buyerContactPersonname); + writeLnToCli(' %s', $buyerContactDepartmentname); + writeLnToCli(' %s', $buyerContactPhoneNo); + writeLnToCli(' %s', $buyerContactFaxNo); + writeLnToCli(' %s', $buyerContactEmailAddress); + writeNewLineToCli(); + } while ($documentReader->nextDocumentBuyerContact()); +} else { + writeLnToCli(' No contact information found'); +} + +// Next we want to load and show the different shipping location + +$documentReader->getDocumentShipTo( + $shipToName, + $shipToIds, + $shipToDescription +); + +$documentReader->getDocumentShipToGlobalId( + $shipToGlobalIds +); + +$documentReader->getDocumentShipToTaxRegistration( + $shipToTaxRegistations +); + +$documentReader->getDocumentShipToAddress( + $shipToAddressLineOne, + $shipToAddressLineTwo, + $shipToAddressLineThree, + $shipToAddressPostCode, + $shipToAddressCity, + $shipToAddressCountry, + $shipToAddressSubDivisions +); + +writeNewLineToCli(); +writeLnToCli("Shipping location Information"); +writeLnToCli("--------------------------------------------------------------------------------"); +writeLnToCli('%s', $shipToName); +writeLnToCli('%s', $shipToAddressLineOne); +writeLnToCli('%s', $shipToAddressLineTwo); +writeLnToCli('%s', $shipToAddressLineThree); +writeLnToCli('%s %s %s', $shipToAddressCountry, $shipToAddressPostCode, $shipToAddressCity); +writeLnToCli('%s', implode(PHP_EOL, $shipToAddressSubDivisions)); +writeNewLineToCli(); +writeLnToCli('%s', implodeAssocArray(", ", $shipToTaxRegistations)); +writeNewLineToCli(); +writeLnToCli('Shipping location identifications: %s', implode(",", $shipToIds)); +writeLnToCli('Shipping location global identifications: %s', implodeAssocArray(",", $shipToGlobalIds)); + +// We now want to read out the contact information of our shipping location. Theoretically, there can be more than one contact, +// which is why we have to iterate over the transmitted contacts: + +writeNewLineToCli(); +writeLnToCli(" Shipping location contact Information"); +writeLnToCli(" ------------------------------------------------------------------------------"); + +if ($documentReader->firstDocumentShipToContact()) { + do { + $documentReader->getDocumentShipToContact( + $shipToContactPersonname, + $shipToContactDepartmentname, + $shipToContactPhoneNo, + $shipToContactFaxNo, + $shipToContactEmailAddress + ); + writeLnToCli(' %s', $shipToContactPersonname); + writeLnToCli(' %s', $shipToContactDepartmentname); + writeLnToCli(' %s', $shipToContactPhoneNo); + writeLnToCli(' %s', $shipToContactFaxNo); + writeLnToCli(' %s', $ShipToContactEmailAddress); + writeNewLineToCli(); + } while ($documentReader->nextDocumentShipToContact()); +} else { + writeLnToCli(' No contact information found'); +} + +// Let's get the document positions. There are several method names starting with getDocumentPosition*. The methods listed +// here are the most frequently used. We have to use a loop to iterate over the position, similar how we retrieved the party contacts. + +writeNewLineToCli(); +writeLnToCli("Document positions"); +writeLnToCli("--------------------------------------------------------------------------------"); + +if ($documentReader->firstDocumentPosition()) { + do { + // Get the general information of the position + + $documentReader->getDocumentPositionGenerals( + $positionLineId, + $positionLineStatusCode, + $positionLineStatusReasonCode + ); + + // Get the product information + + $documentReader->getDocumentPositionProductDetails( + $positionProductName, + $positionProductDescription, + $positionProductSellerAssignedID, + $positionProductBuyerAssignedID, + $positionProductGlobalIDType, + $positionProductGlobalID + ); + + // Get the net unit price + + $documentReader->getDocumentPositionNetPrice( + $positionNetUnitPrice, + $positionBasisQuantity, + $positionBasisQuantityUnitCode + ); + + // Get the position invoiced quantity + + $documentReader->getDocumentPositionQuantity( + $positionBilledQuantity, + $positionBilledQuantityUnitCode, + $positionChargeFreeQuantity, + $positionChargeFreeQuantityUnitCpde, + $positionPackageQuantity, + $positionPackageQuantityUnitCode + ); + + // Get the position amount summation + + $documentReader->getDocumentPositionLineSummationSimple( + $positionTotalNetAmount + ); + + // Write the position information to CLI + + writeLnToCli(' Position %s', $positionLineId); + writeLnToCli(" ------------------------------------------------------------------------------"); + writeLnToCli(' %s', $positionProductName); + writeLnToCli(' %s', $positionProductDescription); + writeLnToCli(' Unit Price %s %s', number_format($positionNetUnitPrice, 2), $documentCurrency); + writeLnToCli(' Quantity/Unit %s %s', number_format($positionBilledQuantity, 5), $positionBilledQuantityUnitCode); + writeLnToCli(' Line Amount %s %s', number_format($positionTotalNetAmount, 2), $documentCurrency); + + // Get the tax information of the position. + // According to the data model, several tax rates could also be assigned per item. In Germany, for example, this + // is not permitted. We must also use the appropriate first/next method here + + if ($documentReader->firstDocumentPositionTax()) { + $documentReader->getDocumentPositionTax( + $positionTaxCategoryCode, + $positionTaxTypeCode, + $positionTaxRateApplicablePercent, + $positionTaxCalculatedAmount, + $positionTaxExemptionReason, + $positionTaxExemptionReasonCode + ); + + writeLnToCli(' Tax category %s', $positionTaxCategoryCode); + writeLnToCli(' Tax type %s', $positionTaxTypeCode); + writeLnToCli(' Tax percent %s %%', number_format($positionTaxRateApplicablePercent, 2)); + } + + writeNewLineToCli(); + } while ($documentReader->nextDocumentPosition()); +} else { + writeLnToCli('No document positions found'); +} + +// Finally, we determine the VAT statement and the total amounts of the document. +// As there could be several tax rates per invoice here, we have to work with the appropriate first/next methods again: + +// Get the VAT statement + +writeNewLineToCli(); +writeLnToCli("VAT Statement"); +writeLnToCli("--------------------------------------------------------------------------------"); + +if ($documentReader->firstDocumentTax()) { + writeLnToCli(" Tax Category Tax Type Tax percent"); + writeLnToCli(" ------------------------------------------------------------------------------"); + do { + $documentReader->getDocumentTax( + $documentTaxcategoryCode, + $documentTaxTypeCode, + $documentTaxBasisAmount, + $documentTaxCalculatedAmount, + $documentTaxRateApplicablePercent, + $documentTaxExemptionReason, + $documentTaxExemptionReasonCode, + $documentTaxLineTotalBasisAmount, + $documentTaxAllowanceChargeBasisAmount, + $documentTaxTaxPointDate, + $documentTaxDueDateTypeCode + ); + + writeLnToCli( + ' %s %s %s', + str_pad($documentTaxcategoryCode, 20, " ", STR_PAD_RIGHT), + str_pad($documentTaxTypeCode, 20, " ", STR_PAD_RIGHT), + str_pad(number_format($documentTaxRateApplicablePercent, 2), 10, " ", STR_PAD_RIGHT), + ); + } while ($documentReader->nextDocumentTax()); +} else { + writeLnToCli(' No tax information found'); +} + +// Get the document totals (summation) + +writeNewLineToCli(); +writeLnToCli("Document totals"); +writeLnToCli("--------------------------------------------------------------------------------"); + +$documentReader->getDocumentSummation( + $documentGrandTotalAmount, + $documentDuePayableAmount, + $documentLineTotalAmount, + $documentChargeTotalAmount, + $documentAllowanceTotalAmount, + $documentTaxBasisTotalAmount, + $documentTaxTotalAmount, + $documentRoundingAmount, + $documentTotalPrepaidAmount +); + +writeLnToCli('Total Net Amount %s %s', str_pad(number_format($documentLineTotalAmount, 2), 10, " ", STR_PAD_LEFT), $documentCurrency); +writeLnToCli('Total Tax Basis Amount %s %s', str_pad(number_format($documentTaxBasisTotalAmount, 2), 10, " ", STR_PAD_LEFT), $documentCurrency); +writeLnToCli('Total Tax Amount %s %s', str_pad(number_format($documentTaxTotalAmount, 2), 10, " ", STR_PAD_LEFT), $documentCurrency); +writeLnToCli('Total Gross Amount %s %s', str_pad(number_format($documentGrandTotalAmount, 2), 10, " ", STR_PAD_LEFT), $documentCurrency); +writeLnToCli('Amount already paid %s %s', str_pad(number_format($documentTotalPrepaidAmount, 2), 10, " ", STR_PAD_LEFT), $documentCurrency); +writeLnToCli('Amount to pay %s %s', str_pad(number_format($documentDuePayableAmount, 2), 10, " ", STR_PAD_LEFT), $documentCurrency); diff --git a/vendor/horstoeko/zugferd/examples/03_ZugferdDocumentReader_XRECHNUNG3.php b/vendor/horstoeko/zugferd/examples/03_ZugferdDocumentReader_XRECHNUNG3.php new file mode 100644 index 000000000..9e34ffb10 --- /dev/null +++ b/vendor/horstoeko/zugferd/examples/03_ZugferdDocumentReader_XRECHNUNG3.php @@ -0,0 +1,420 @@ +getDocumentInformation( + $documentNo, + $documentTypeCode, + $documentDate, + $documentCurrency, + $documentTaxCurrency, + $documentName, + $documentLanguage, + $effectiveSpecifiedPeriod +); + +$documentReader->getDocumentSupplyChainEvent( + $documentDeliveryDate +); + +writeNewLineToCli(); +writeLnToCli("Document Information"); +writeLnToCli("--------------------------------------------------------------------------------"); +writeLnToCli(" - Profile ............ %s", $documentReader->getProfileDefinitionParameter("name")); +writeLnToCli(" - Profile Context .... %s", $documentReader->getProfileDefinitionParameter("contextparameter")); +writeLnToCli(" - Document No ........ %s", $documentNo); +writeLnToCli(" - Document Type ...... %s", $documentTypeCode); +writeLnToCli(" - Document Date ...... %s", $documentDate->format("Y-m-d")); +writeLnToCli(" - Invoice currency: .. %s", $documentCurrency); +writeLnToCli(" - Tax currency ....... %s", $documentTaxCurrency); +writeLnToCli(" - Delivery date ...... %s", $documentDeliveryDate->format("Y-m-d")); + +// Now let's get information about the seller. In addition to the methods listed here, +// there are a few more available, but these are rarely required + +$documentReader->getDocumentSeller( + $sellerName, + $sellerIds, + $sellerDescription +); + +$documentReader->getDocumentSellerGlobalId( + $sellerGlobalIds +); + +$documentReader->getDocumentSellerTaxRegistration( + $sellerTaxRegistations +); + +$documentReader->getDocumentSellerAddress( + $sellerAddressLineOne, + $sellerAddressLineTwo, + $sellerAddressLineThree, + $sellerAddressPostCode, + $sellerAddressCity, + $sellerAddressCountry, + $sellerAddressSubDivisions +); + +$documentReader->getDocumentSellerCommunication( + $sellerCommunicationUriScheme, + $sellerCommunicationUri +); + +writeNewLineToCli(); +writeLnToCli("Seller Information"); +writeLnToCli("--------------------------------------------------------------------------------"); +writeLnToCli('%s', $sellerName); +writeLnToCli('%s', $sellerAddressLineOne); +writeLnToCli('%s', $sellerAddressLineTwo); +writeLnToCli('%s', $sellerAddressLineThree); +writeLnToCli('%s %s %s', $sellerAddressCountry, $sellerAddressPostCode, $sellerAddressCity); +writeLnToCli('%s %s', $sellerCommunicationUriScheme, $sellerCommunicationUri); +writeLnToCli('%s', implode(PHP_EOL, $sellerAddressSubDivisions)); +writeNewLineToCli(); +writeLnToCli('%s', implodeAssocArray(", ", $sellerTaxRegistations)); +writeNewLineToCli(); +writeLnToCli('Seller identifications: %s', implode(",", $sellerIds)); +writeLnToCli('Seller global identifications: %s', implodeAssocArray(",", $sellerGlobalIds)); + +// We now want to read out the contact information of our seller. Theoretically, there can be more than one contact, +// which is why we have to iterate over the transmitted contacts: + +writeNewLineToCli(); +writeLnToCli(" Seller contact Information"); +writeLnToCli(" ------------------------------------------------------------------------------"); + +if ($documentReader->firstDocumentSellerContact()) { + do { + $documentReader->getDocumentSellerContact( + $sellerContactPersonname, + $sellerContactDepartmentname, + $sellerContactPhoneNo, + $sellerContactFaxNo, + $sellerContactEmailAddress + ); + writeLnToCli(' %s', $sellerContactPersonname); + writeLnToCli(' %s', $sellerContactDepartmentname); + writeLnToCli(' %s', $sellerContactPhoneNo); + writeLnToCli(' %s', $sellerContactFaxNo); + writeLnToCli(' %s', $sellerContactEmailAddress); + writeNewLineToCli(); + } while ($documentReader->nextDocumentSellerContact()); +} else { + writeLnToCli(' No contact information found'); +} + +// Now let's get information about the buyer. In addition to the methods listed here, +// there are a few more available, but these are rarely required + +$documentReader->getDocumentBuyer( + $buyerName, + $buyerIds, + $buyerDescription +); + +$documentReader->getDocumentBuyerGlobalId( + $buyerGlobalIds +); + +$documentReader->getDocumentBuyerTaxRegistration( + $buyerTaxRegistations +); + +$documentReader->getDocumentBuyerAddress( + $buyerAddressLineOne, + $buyerAddressLineTwo, + $buyerAddressLineThree, + $buyerAddressPostCode, + $buyerAddressCity, + $buyerAddressCountry, + $buyerAddressSubDivisions +); + +$documentReader->getDocumentbuyerCommunication( + $buyerCommunicationUriScheme, + $buyerCommunicationUri +); + +writeNewLineToCli(); +writeLnToCli("Buyer Information"); +writeLnToCli("--------------------------------------------------------------------------------"); +writeLnToCli('%s', $buyerName); +writeLnToCli('%s', $buyerAddressLineOne); +writeLnToCli('%s', $buyerAddressLineTwo); +writeLnToCli('%s', $buyerAddressLineThree); +writeLnToCli('%s %s %s', $buyerAddressCountry, $buyerAddressPostCode, $buyerAddressCity); +writeLnToCli('%s', implode(PHP_EOL, $buyerAddressSubDivisions)); +writeLnToCli('%s %s', $buyerCommunicationUriScheme, $buyerCommunicationUri); +writeNewLineToCli(); +writeLnToCli('%s', implodeAssocArray(", ", $buyerTaxRegistations)); +writeNewLineToCli(); +writeLnToCli('Buyer identifications: %s', implode(",", $buyerIds)); +writeLnToCli('Buyer global identifications: %s', implodeAssocArray(",", $buyerGlobalIds)); + +// We now want to read out the contact information of our buyer. Theoretically, there can be more than one contact, +// which is why we have to iterate over the transmitted contacts: + +writeNewLineToCli(); +writeLnToCli(" Buyer contact Information"); +writeLnToCli(" ------------------------------------------------------------------------------"); + +if ($documentReader->firstDocumentBuyerContact()) { + do { + $documentReader->getDocumentBuyerContact( + $buyerContactPersonname, + $buyerContactDepartmentname, + $buyerContactPhoneNo, + $buyerContactFaxNo, + $buyerContactEmailAddress + ); + writeLnToCli(' %s', $buyerContactPersonname); + writeLnToCli(' %s', $buyerContactDepartmentname); + writeLnToCli(' %s', $buyerContactPhoneNo); + writeLnToCli(' %s', $buyerContactFaxNo); + writeLnToCli(' %s', $buyerContactEmailAddress); + writeNewLineToCli(); + } while ($documentReader->nextDocumentBuyerContact()); +} else { + writeLnToCli(' No contact information found'); +} + +// Next we want to load and show the different shipping location + +$documentReader->getDocumentShipTo( + $shipToName, + $shipToIds, + $shipToDescription +); + +$documentReader->getDocumentShipToGlobalId( + $shipToGlobalIds +); + +$documentReader->getDocumentShipToTaxRegistration( + $shipToTaxRegistations +); + +$documentReader->getDocumentShipToAddress( + $shipToAddressLineOne, + $shipToAddressLineTwo, + $shipToAddressLineThree, + $shipToAddressPostCode, + $shipToAddressCity, + $shipToAddressCountry, + $shipToAddressSubDivisions +); + +writeNewLineToCli(); +writeLnToCli("Shipping location Information"); +writeLnToCli("--------------------------------------------------------------------------------"); +writeLnToCli('%s', $shipToName); +writeLnToCli('%s', $shipToAddressLineOne); +writeLnToCli('%s', $shipToAddressLineTwo); +writeLnToCli('%s', $shipToAddressLineThree); +writeLnToCli('%s %s %s', $shipToAddressCountry, $shipToAddressPostCode, $shipToAddressCity); +writeLnToCli('%s', implode(PHP_EOL, $shipToAddressSubDivisions)); +writeNewLineToCli(); +writeLnToCli('%s', implodeAssocArray(", ", $shipToTaxRegistations)); +writeNewLineToCli(); +writeLnToCli('Shipping location identifications: %s', implode(",", $shipToIds)); +writeLnToCli('Shipping location global identifications: %s', implodeAssocArray(",", $shipToGlobalIds)); + +// We now want to read out the contact information of our shipping location. Theoretically, there can be more than one contact, +// which is why we have to iterate over the transmitted contacts: + +writeNewLineToCli(); +writeLnToCli(" Shipping location contact Information"); +writeLnToCli(" ------------------------------------------------------------------------------"); + +if ($documentReader->firstDocumentShipToContact()) { + do { + $documentReader->getDocumentShipToContact( + $shipToContactPersonname, + $shipToContactDepartmentname, + $shipToContactPhoneNo, + $shipToContactFaxNo, + $shipToContactEmailAddress + ); + writeLnToCli(' %s', $shipToContactPersonname); + writeLnToCli(' %s', $shipToContactDepartmentname); + writeLnToCli(' %s', $shipToContactPhoneNo); + writeLnToCli(' %s', $shipToContactFaxNo); + writeLnToCli(' %s', $ShipToContactEmailAddress); + writeNewLineToCli(); + } while ($documentReader->nextDocumentShipToContact()); +} else { + writeLnToCli(' No contact information found'); +} + +// Let's get the document positions. There are several method names starting with getDocumentPosition*. The methods listed +// here are the most frequently used. We have to use a loop to iterate over the position, similar how we retrieved the party contacts. + +writeNewLineToCli(); +writeLnToCli("Document positions"); +writeLnToCli("--------------------------------------------------------------------------------"); + +if ($documentReader->firstDocumentPosition()) { + do { + // Get the general information of the position + + $documentReader->getDocumentPositionGenerals( + $positionLineId, + $positionLineStatusCode, + $positionLineStatusReasonCode + ); + + // Get the product information + + $documentReader->getDocumentPositionProductDetails( + $positionProductName, + $positionProductDescription, + $positionProductSellerAssignedID, + $positionProductBuyerAssignedID, + $positionProductGlobalIDType, + $positionProductGlobalID + ); + + // Get the net unit price + + $documentReader->getDocumentPositionNetPrice( + $positionNetUnitPrice, + $positionBasisQuantity, + $positionBasisQuantityUnitCode + ); + + // Get the position invoiced quantity + + $documentReader->getDocumentPositionQuantity( + $positionBilledQuantity, + $positionBilledQuantityUnitCode, + $positionChargeFreeQuantity, + $positionChargeFreeQuantityUnitCpde, + $positionPackageQuantity, + $positionPackageQuantityUnitCode + ); + + // Get the position amount summation + + $documentReader->getDocumentPositionLineSummationSimple( + $positionTotalNetAmount + ); + + // Write the position information to CLI + + writeLnToCli(' Position %s', $positionLineId); + writeLnToCli(" ------------------------------------------------------------------------------"); + writeLnToCli(' %s', $positionProductName); + writeLnToCli(' %s', $positionProductDescription); + writeLnToCli(' Unit Price %s %s', number_format($positionNetUnitPrice, 2), $documentCurrency); + writeLnToCli(' Quantity/Unit %s %s', number_format($positionBilledQuantity, 5), $positionBilledQuantityUnitCode); + writeLnToCli(' Line Amount %s %s', number_format($positionTotalNetAmount, 2), $documentCurrency); + + // Get the tax information of the position. + // According to the data model, several tax rates could also be assigned per item. In Germany, for example, this + // is not permitted. We must also use the appropriate first/next method here + + if ($documentReader->firstDocumentPositionTax()) { + $documentReader->getDocumentPositionTax( + $positionTaxCategoryCode, + $positionTaxTypeCode, + $positionTaxRateApplicablePercent, + $positionTaxCalculatedAmount, + $positionTaxExemptionReason, + $positionTaxExemptionReasonCode + ); + + writeLnToCli(' Tax category %s', $positionTaxCategoryCode); + writeLnToCli(' Tax type %s', $positionTaxTypeCode); + writeLnToCli(' Tax percent %s %%', number_format($positionTaxRateApplicablePercent, 2)); + } + + writeNewLineToCli(); + } while ($documentReader->nextDocumentPosition()); +} else { + writeLnToCli('No document positions found'); +} + +// Finally, we determine the VAT statement and the total amounts of the document. +// As there could be several tax rates per invoice here, we have to work with the appropriate first/next methods again: + +// Get the VAT statement + +writeNewLineToCli(); +writeLnToCli("VAT Statement"); +writeLnToCli("--------------------------------------------------------------------------------"); + +if ($documentReader->firstDocumentTax()) { + writeLnToCli(" Tax Category Tax Type Tax percent"); + writeLnToCli(" ------------------------------------------------------------------------------"); + do { + $documentReader->getDocumentTax( + $documentTaxcategoryCode, + $documentTaxTypeCode, + $documentTaxBasisAmount, + $documentTaxCalculatedAmount, + $documentTaxRateApplicablePercent, + $documentTaxExemptionReason, + $documentTaxExemptionReasonCode, + $documentTaxLineTotalBasisAmount, + $documentTaxAllowanceChargeBasisAmount, + $documentTaxTaxPointDate, + $documentTaxDueDateTypeCode + ); + + writeLnToCli( + ' %s %s %s', + str_pad($documentTaxcategoryCode, 20, " ", STR_PAD_RIGHT), + str_pad($documentTaxTypeCode, 20, " ", STR_PAD_RIGHT), + str_pad(number_format($documentTaxRateApplicablePercent, 2), 10, " ", STR_PAD_RIGHT), + ); + } while ($documentReader->nextDocumentTax()); +} else { + writeLnToCli(' No tax information found'); +} + +// Get the document totals (summation) + +writeNewLineToCli(); +writeLnToCli("Document totals"); +writeLnToCli("--------------------------------------------------------------------------------"); + +$documentReader->getDocumentSummation( + $documentGrandTotalAmount, + $documentDuePayableAmount, + $documentLineTotalAmount, + $documentChargeTotalAmount, + $documentAllowanceTotalAmount, + $documentTaxBasisTotalAmount, + $documentTaxTotalAmount, + $documentRoundingAmount, + $documentTotalPrepaidAmount +); + +writeLnToCli('Total Net Amount %s %s', str_pad(number_format($documentLineTotalAmount, 2), 10, " ", STR_PAD_LEFT), $documentCurrency); +writeLnToCli('Total Tax Basis Amount %s %s', str_pad(number_format($documentTaxBasisTotalAmount, 2), 10, " ", STR_PAD_LEFT), $documentCurrency); +writeLnToCli('Total Tax Amount %s %s', str_pad(number_format($documentTaxTotalAmount, 2), 10, " ", STR_PAD_LEFT), $documentCurrency); +writeLnToCli('Total Gross Amount %s %s', str_pad(number_format($documentGrandTotalAmount, 2), 10, " ", STR_PAD_LEFT), $documentCurrency); +writeLnToCli('Amount already paid %s %s', str_pad(number_format($documentTotalPrepaidAmount, 2), 10, " ", STR_PAD_LEFT), $documentCurrency); +writeLnToCli('Amount to pay %s %s', str_pad(number_format($documentDuePayableAmount, 2), 10, " ", STR_PAD_LEFT), $documentCurrency); diff --git a/vendor/horstoeko/zugferd/examples/assets/00_AdditionalDocument.csv b/vendor/horstoeko/zugferd/examples/assets/00_AdditionalDocument.csv new file mode 100644 index 000000000..41bfe81b8 --- /dev/null +++ b/vendor/horstoeko/zugferd/examples/assets/00_AdditionalDocument.csv @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/examples/assets/00_ZugferdDocumentPdfBuilder_PrintLayout.pdf b/vendor/horstoeko/zugferd/examples/assets/00_ZugferdDocumentPdfBuilder_PrintLayout.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f4cb31549e2b1efda6a941535334d5997877f816 GIT binary patch literal 419608 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

l?tg$Ac5!X^&6W&NHsMYfeGB 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

$)%Rgu=ULTb_D===I;$?HsJc8q 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�GVv?!PWeao zGGM07}KoJA&NY|3-_*W1!qtvK1{R z=RM^}vHaGu#WTf8H)o(oR*b-AU4XjpqWHDOO2;8IieS1rl=Iko3dbiIT;m6CtFfuZ zQtKvt@zCM__S6rp=u`myL_d6QeL`yz4I2fa@aD^0gK$n9ps@x#%4{edrF#Dk_^~p5 zHhv{KJ@~;;k2Wisn^8J?mw!?m?XkrSp6{{Iiub(yurJ&uX+0(SOqfN(aD)BA)N|uy zxTytB^-bQtQOC{#<`A0`$(z{7x+BjCPkFpa2aVWxROt;{$wMy%1yxoT zIG+~Q>?^uL@@m7hIn}1jHui`pV_*r_d)!GAjGyimmY=3xF^P;iR1_t zg5uSN(63a%fr2rFjFZ;6{0uz)2JQ1?E??qB-k*_Y%!EnHTXlITQ990@@&pX&JZECb z=fViH!gRso=iK;v&M=)WoIU@2W6n@rIN?WR#s^x=z+|sZVrpjJntEekXL~||kd`@O zWM(|@s}3fw>^gE}D~bu#o(l~@6}yfe*+R~TqKWgmufqYrbaK$IljgZQsgmiObtQjk z^1ON7J$>mrgjrB_yM0yJ|ggNl8V(+D(2kY5)Z3`V?7L?l-wE-XBJ=1IdM75=wSXX?OE1p&_^g5eRR^TioZfnjb=X}Z|1`b zg9Q+9PR}AxM{Zt`|LR1Qq1R`R z;%L{Hymvm`9$2Jv5dR|%`Of#5?<1D`TqlHgTubi_Ldul)H_;FfJYJ zKo6*^9c+p9f5?~kA7SA~aTZk0S?IC5bM88H_iwMQUHi}J`G-7#`dEPmLpmSyX*(IA ze9$ut^_CJgFUX=7EqV)Er!GRSSpK6_2_KQ~kWISW%UhoD#(&74tE*P7dTkl1UkP{k zPj)O@_8Q!O|L43?a#dWuaKG>wm(4kW^Kz~e*Olu9xn*{E7Yoq|K{ls6BMY=knxaJ~ zAnU{F)E8+27n}5N)9UFIXa+KB9n`+_Y+jeh=5gT{Rwi333W5S(tURFCAE>Z&Ab3|Y z!J}r4DygU}hFfq@eym3MsTV%7q_RWF$XO$U7<{3i&{^7}8B5z+bP54ptYu{R(lV<~ zfr{eIiSg~r6B5k{bXp5n$qf)z2s1P(QwL+5h6o`gHbEu92#h4nZk5oT0MSu z!SnkNxAT>4l$%LtElxlqiQD}-iF2*K$RTK#(s0W-K^o`G;(wKRQLT`8{T2B6Rp!T} z2f|857{80m+uq&W%ze6c0p(}`Y2$wVH?$p{N4xo6KJpPgeM3|-JV(rKmuj-ShyH&e z2YLL}1d>H3-JEjS-}}f()fB%xXu)}hn0e0a3h08&*Xe)-!tXE~pY;9WpFZDsBtG9k zW;cf@(rW3vG<3p!Q8)teurrX^mWO}`uBaYgC+FwPK8bYX!iY4J`=WB%U#nJ<-?A** z8Eq|5;_J#;?3@g+YLPUs&69Fz*2UXV7NoS#s5zNF-I=>!xtJQ*KJC|OVb z?XJWxygs)~Kq$Jyv}1U;yNdkva53YDgabdbr1M(XA_^^A_@c$vO=%-gB)RhaygABQ zH@0uLWRc%iF2AYlBd6mUyi2st)NVzlv0$op`MLz&dasla1 z&YlA)oCh?KX635CZalzf{y>z%TXGt~iqkZP)5CSO?7U5yMrR&=vN(A-ikeV*x}@ZM z;RJGicp5%pDt;IR;Y048$EI~4=a5h~_jPx7{0h>pFOht)aNuW_EOWLNN6S`npdV1w zoO$1qD<~3V4ykqQ^|3KIUdnHDjvhs%T6TT5XRm!>g|v^5MLML0HM30) zdT@=r2mTDS(5=E74!Ms$`6Rx+f*n?a9&ug3Z<7A>U=C>xoB|C0N5V1BUf*n-jdt7M zA*@^S9lQ-EH5Jq26A?E7{K}!=S1P#}@GBK6-hcu$CoXHKU-=@pMxah5xRg4rbPCCY zt2pv1Ny5)jH`3i(Zd>AT;hZ8FT9wHVGn)(2e3@{D6O`^KwXzk9#oaKCRtc++L?H$Kwun;3cPg7=#c=l4w!ck?IjH_`0(O=-Sy z()&%3?Ds7o`R{K%-zt5-HTZqwpZ592zvBNb!1r6U-#0wU=Nq2u_YHmE^9`N!|CZ|e zt*zfT?g7s?yEc5Q=Tmbt9xbI0@+}L`WBty-KIv-l0i#(DG@UJw$+1(Is3v$c;{ST* zcW!f?ef;sqUFWv)F?V{D^nzXEy-ySVGZ^bD_vTX=)Xe!@4aZLGGikHset-Gj{|FK) zx1o0Ah|iVyI0*Qt&t+~6NZi^A05T^{{{Q|r2=#Hj>5XK&ZP8t2(!t+l`D>OhHsyhK z(b3;XI?v`#SNK-?hkkq<{%?b1JpMSIyKNge`uOAY@;-A^;OMw?QNjQHttSJ-m!v26 zD!5j+JWF;#G|T!09+T2cVL}Js{Vapog$AZ`lHQN@Dc5+Ow_GzFJuiKuHWTnX9}%@X zc(iYMnFof*#~z%AZ=&=~`Z|whMAK!80d~@h!+a`U&Ul9BULsMtofcDyaN(AFiF=8{ zOUn;Os_%vK63XA-3gMDXq-m7n^QJ{+xHT`-^h-PgC-W#;(`DgKX_Nc{;e3-qN}eY! z@E7+%9WaB&Mf)-p!aH4rV@<_U{owtklur1dX`e~^NT&$zB=M)4UXW3JaOu1UPS-Lq zLCgFq#^x zstX(Q>cGkEY#+Wnwny%Xb=>w(8slO8y8ahS=adOk#!MLt|Hk|iT^p1EzSRYE&rFzb zV$2x$|KqrE@GBAIPrDNQFW@=qjU41bN!o z;ah&!|7#fS44*m1`*&iT_wPp^sL$gB@1HA1c!%FSh8!MC4vi&;$B>sM@B#n(>uE`= z0$RyT%jv~PT|jO=s_M81p;q_?v?N4YCVdpu~PJBWX%+BI%F{?q;B z4)hB7e8*~6{CbvIIO_rO3I1!7dmG|USG&g4@(;R0AHw}e??obnp%W6BAdc9mzTYG_CwKcVes*`HW{M4Gn&M(z; zsQIb3rsfy;a=xaf_B6cXBh|5qKh@Mq!0OuC(@9<8YH(5qbL@or#=<*Q zNwsF)mROrW7R1(eNJOC>YNH_14(?-#9cp4&tSLcK5_ueZID~`gBrU&6N&`-D9LklREq$=_}%X;O^u9;^}xXM?18C;G^#2 zqg>~ieQf!rWV`fBGYmT8JokrF_^6w3ua|MbCUd_DAMtdAgJDV|slVYW$!GU`lU6>l z@nE5^D_$B5LqpIovSkXzMW~{AAHPbn?QE#40$0h#9s7Lq<>w_iw6Ae*#Sb#^54k3y zTz(zn=yslTCSIgigI{y^cn$w7;rjCB)ng1LNQD%%x#8i<=bK3D92LKhpGd0QTPac! zKf#s25L;voG@L4EPpv|$WMN~UZ|uYaUWL&zbnGW`55>BPj=4XSMcs-QEt0A~_g4Qp zP2xp`crBXAPjsz=+OH8ELWi2pdvN{vf%YcLdU6lP-Np|}r*u$fbc{e{5ruMo`pLb{ zgG*(7AIQ=}2l(-!)ACJZE3z0rd9DwEA0IM)X%dkMkD`N{kgVI&WMPdyJPI9htwS$U zv`zd3n(?=#$wJY{JuF#wNRy5Zs1sCxmv*pOEKg_It4oZCfy zV$<^!iB$2ENR^E0&kJCJd~rBh)v9bsyog#6Y0;Y!2RQsE$a#k8CtD9MUK)O~m1&sy zJc$`!8ZG{kPKBB7x*wxya&HAyplR9<->1uS*Hwyh(mWqYfhndmzlY3~Lr7yi&4%Y}efkwRwyN#l(gHU`N_vnle} zlnEuLv9Ku>8j*fG@$OLgd+$B^OMbjI8~*W5+W{gedcs&Ux?6ha zjF3rmaueLheE%fyMxRMd?r2}GrFve9L&ZjvZSrdFj*ug?I}Ip+@tVUXRY@PR&j3xV0m$W$z?fewX}dk8F*sU!8iRT%Mm) zby|ZofeZd=jEIf{JGCHuBc0FXqyxq9q*3^bJ65f=!k>20kRhlpIywseqL0{Yq3~xr zIPygw@$*l(z7JFx)chv3K{a_c*)p5gyD|ix|B5%cMyZVfDn3;eV0^&6WiA@WN%O3H z_1)Q8C&J`I5ZQ@{O6*q}guCiXLwTYp(Ns|ZKZ*Nhm%!hgIrNuA{DU5m_czL-hu>BH>cwn_hv!z(Z6&uC{X(|rzLK4(ET_?5>+vY5*t)m+ld?%g)OEn0 znN~FEoCGSqq}ym-yLLNG0d-tSOaH37(G1`WKvT*Hg%#6&i?(#~(*{4n_(Wj(yPXFZ)GS>Fl|$#J3l zO`9qC&6|X|l;jHyv_GNwGV3Ff)~$xK^A~eGdmc!u$wS#>GsNZPI5#KHVb59OdR9?AY13)oI{Zf%0bpB4|L*Ig+}93bewd^DFJN9Pp1& zxy-pXYfewfJ1s`chJk#jKGWS`vnT^fV463}DlL4pof*>8XuC%ikP5t{43#b+1P$C* zU%$`C7Ggb{d*~^4cBw=pX=R(d-IF^|irv)SBHkm)+kAKA+jVspzy6NjObXdK_V-m; zSC}vzf`HS4*6?2lgV+gicP%5zTne#!cC1mdNe=K8Ri!1Tjw&b`os!xnEiHL;Vd03h zlr~jPd)~sTPD^qedCpw>QmNeFTg9UQt4(Uk=%RvAsmW=nDS!`1c86594f3t}P9#oc4)AvL zGU??0hW<*SXm6R9nU=7g`J}lmYu=#Y!lR$MbbpPd53nNNvp#9XzQpICbgaGg>%9tk54Mwu{-#rW4Y$}3l}Wpnw#Nw zK3R;~Zr%3y<8+wd@yEAq}Zs^o$1FnT%*SGk`L;d<4awo!XEBS@UJzw5I2dSS6 z#K)hef|UBSHbZL;`8s;zoB056pf;I{9#qUc#wyGwSv@EqNaQQjXf#I!-jE{{X4x`oVzX z+&>w=??1pdQd>x#)MjEa=Y^m>|5u!tt(;)TsY3P0j(TYo=gZgn55Vz;6Es$o-haRk zM$*GCp(#*P=7nI>Z;({iWJtBVAItw4FFQt@t|4KYR<%y+%dEou!RS6Spg;cJaH5rX zX{?aWtJoZpN7nxai6vd{RKA$)@bqJR3Qcag|DhG0wDRB6CKm*{$;FgA_8Iy1izLCl z-eUs>b0NY+A==*#e#xi0j!zLn7r=d(5Zd&IR7bSnvc9~*LTHHm5p#REeu9brq*dRU z39oifnZi%`1nwL^#U<^D+JejI?BS>MlfT_&lh{f2a{7GuR&j~klfoV`8)BnpGbD1U zTn<;rm2sWu9DAcyX|`!aqh4vV7?ozL%^~K*qwtoq;YAaCGua##`L47ZD6+$1_uLo- z+@)9$ibeEF#?dVI)5kLLV`g;li4K7eI+K>y#;nP8pG5(pNN$MyY!nI)e+c>fsJ@v; zNgmF4D+@ivLW|iV`L`e-?W}D4ZuTqh^JiHK_-hq1E3 zDMppBxDp|*JwiG=FCGM9PtZX;AVq5$IO`BA6gzFW8YN~ThZDXVicn5Fqy+iTdYA&G5}2BOJzg7B?5YDE2LJxGUs zH-m_b26JLNL{-lLc|+CDp2GvG{XfJ-x8dFmH7g$d7i8J5K3udq7`9V>*ZqIR+TC$+ zUDudMap8PbM9Se*#HZPKo?J@d`Ltx7FSTOcmW1(#bN}A+!i~AZA840ZHm`r+^AT=#OEx2R!JW{EUV8B=m;L0 z1LFWbDpCLhJ*Gr>15i~&M2afx`ojYJ0mokc1R)910Q@BhSmF=!OU2XF-N*ox1g}^3Fj8Yk+ z!Ab>I1z|A&tD^z}qSQD*#6c>oP`YceCE1qxBetX@r(*UiOx4B(1jK1^fD#1-V-akB zj7k-wMJj<04#J86lI>wC0JsLG_*lwREKivV7nB-WPpP?BE=zb(oC5WN32KFMt|vE~ zo6gD}95_N79FkvV zX&j$aQi(#1s$jtwDw+a$qgrv%pb8cZp^8M6U{EX08&yG~K`lyem*I_Js`!Xdh5H@) zk-i3Dcs)u#MuduqKqgdymKan)3IoLz3>xuO88uNw<2V|@=qMPf($(3(KGG=RcdLO# zsW4Miako(wC`N<;b2N^JSR5e`kiOCSw~$i{4+(bf{)g<$vqJRT(tFW!a!CNZi!XZon>!W0QZ!rZSQ>*Yl1e9Jygh_8cKh3vxUNl6_jA8L@>Q8AVaTo0_ z2y9n*1A{UL!;#C`b2#ugf+lzET9Dt>^<;isU4DMou6&|STe))R&<85o_Uhlvk+scS z)bC9<%%E_~McQeY#^N5*w zL$p^SoJ|#$oFtns&>+;;ISaaUncUT#(WSuIwJW^vHnQvQzsRosp`jff7!1iNAK1t> zqX}GdW3RRq4-6T)qJvgfFH}|x8B)<<@Zb*gsu(<&r2Rq;qmI8kyEIhW>yKT#{^-?% zAG7+|OP8KqGg?*Kn?ic)HH)RTQyzzeN5v1hAl9$zlLd6hN<+EVfRv5Mh}*6C;Da@* zKX~sAUD(4QhHuEHDD(S4JyGape(3vaSAX!q>b36|X>^Z}I=W0B?L|4U=*zxTRv8>G zJRyF><|1daSfs-qIeDMvTtv^4G$&%vN49{F<}EyhF(}IMZ<{i;4xtrckKc38HhAv_)$EC9e|r}G;|6wjpY1v9AZbSE;L8XtslTS zC=P`pTLyBrMM4}>O3!&od5|X(lBMM_54A-`50cL38IKTA@qMeqi;idLOVZr?+qBhZ z9xn=CeII(YX2C4iqS^Cn8|L<@pEIYveh%u?Av?PRy?SbcgTumtgSDRf_z*rYFhUt1 z1P1=3&!taLx#=sz6$soe}p$qPN;NF0H45h;qieaUOdjjr#;J$g}^|td$GP_(P z6VUpLT{27NwI!v?-+F8L{YQ@6*LmEy&RxcieJLy^CQKI-4H?3=7jL6eeAm7_1G`(a!#`u=f@4$)sez zoVL&$oXpFYnP1>`ws2jsazq|a>;d-QyV zT(|f<^B!EK!l3hccHXA6Hd&(q$70BFg0357U3Y@_2fiOQUztccIhZ=A)6XI6(ojs?%&)hl7hji#Lq{FaCt=98@U7(;0fIOx-eHfmVH17kH5#+J}nnU#@ zB*=jBg&=rQ(jRg}Fa!q&@&eT?RLa9GNMOIe%Q_eV>i3EK9H~?a8C5fUS#`+L z&f<8#Ly{7z^t_O$V3c?7Qe{%b2M&OTraMfg7qXMZ1y46e#Wp`ZUy+=>Cn3SnhL57- z+quVR<#h}mrsfvCw)EatU%hwfYpX_W8Z~Ou=_pH7l!cht4SgGwqzP4mHmE}tWMFWT zhAKspS|i>FGbu!kPMaty!k*Wf6bfw;{Ae zAh?V|4c{OrMVC?#_?sPF8~L%4pD?u9Elgnh6b7*~uYE!)<+bVxvo#Glzf8dQ%x@k zxs6l1&tK9@iuYdd3u^iAS-esH@j{!&s6u)rG9$B1g;wydLjuZ$PQ2aSfI?7kTXGEr z7n46Q`HL?`!Q>kMo#1kaBL7i^>vg`op8SP^ipihk4^)hT$lpa^T0@x6^#Rvc2oNjS z-nMoGEeNN*B_hN*kQEGQFiI1YLIZgVl{S(in7qk1q6+ewSnj^8LQR?m_gVKZd|zyI zUuwh=Sg!=@5Yy}u4vG#|-$ij|t_@g-w%mLg3vF3J`^9qGgYoVVpHKhabv&VXtS=Q( z&=V-UOh`s^;7v?^UV_cx^<_fJr$|>OCYNG(P9_6V1cY*r#UV{dq%D4QSJ60TV70z9 z3aTVQ*+yv%6*d%0-BimnD~+KzdD%1H3t8)wk;ry)tr&@|kFQg}?_&CFJHdXd*9uYC z`Xsp-SM2FN`^_reU zq3D1H@rsbnMkTKM^ac_m%G~{;aOeG1A%d$f=<4cVo}5a;d`QtltE_y4(K@^&qN^oS z40d-Bl(;#7cZ(ry0tB3&EGRSZ8fR^GcfCMPM`-ooua20Hs`7hix<$venO$W;1r>QA zu_0yM$wO&wV5xxRhgH!}c^Eoq6)<4WYDS zL+b0!L}5yE9`AXD-1na8V8q>@$}f+JEpK1mrekVghlg*B>K`4IrwAEdWC)0ClNA}= zt?;q<303#UJyui~9hsFDrP3D-4^iYrMK_Md^KbQR=#v{(U*DJ*KXSmC?kNd@21lM& zn_(N+A0#bDUvNPltoT(^29)E3Ys*tb9{1b^bE- z+bMc=5)PSKty2eQ6sg`5`C;}E%4X6g(QZ=&_O1v_{`nChp<`{Pv#6-e$e_a!!c<{E zr9L*vaI!dXwX(LtirTe3R-fDb{Sb^ynE||6m(VG&9a^dpmM7G;)5KSpQaY3K)7#<= zavq{kNW*L{hpr`IZVm|6P7M)jQx+ko*#k8>O;SVCZldPN1g?=V%6-k0q1T0mrtl+^ zbP)!dZaF$;&ob)NT7N>QvvACVQ6QlJ7S zCo>|YATTO3GBqXw2l1-l%&6o-sr?m-qJ*~v6KA5WVWgwm-GZxX)rZ?nN>d`cnc-H1 z*v+n_J@QPP^kz!5Nn*6+Q5jMR^1|>UTQoV7rgKj!FUJ!D$?5WPu37nFdHHHhPI? z^lVH)Z*)jEEmdPJogWA;DLjF+ExPA;eNt{AuI^M@Th+CusrM@95b zHVN3>AEExPuS{iRMQYm`{3y!{HRQ!nAwkLuohiqW3wGWv-RPUy#BPv1W_qL>$}%xc zqIv`ck}8p&>Jn&;q&(r{aC~`rj%Iav`HM=fxxAd54#X47%iWW7Y2-|_4NrDISCW&6 zvht$vgEgqyy@5xTT2#}_;lnh49uSIaQBF}w+rpAknh_;9BPGr~67R9(U?=28FzVS$ zje7LNLFgHl56w3rACAiWhua|^oqFk}g_}dmZjdt$dP==$v(VG)6-sS5Xq8q8PgVzW z@}Q+6-Ja`IQ(INjwW_wZQ#CHkO>$j|XoYJ$jUcztE${ zNfmjwM-Mb4#Ep9N;BCe{G}x3?ol?^_m8@u=;QESY0CoxFVVVJ`5TB*@T|zazanPO$ zZYIJz!kb)IZXvX!)^d+?FF*_YHSQDcOK4I3$o<5f=Pq(rxj(q;+%1kEjI<~gnUDpg zpmdat9Bj@L>(+&uTxrj9A50XeL6NR~!V`La2919;U|C-X7bc29r@v5R`}>JpVA z6dR}B3E5+WR-DtOWS5<7Z9`#3cDFl3fEx7DxV+V&u+XhYj6lI^R$7!shH7KzPDYMi zc-pTM+jJIn!tBIoMOI#TR>kX?`yHJMa|D}XZQ+t-dE2asL8*lmh0kB;k*mn#<06wX zhU-+_qCV(CeshS%fWW}ez)1D9+|Ct)H%5j>1sZimA@8{%y}IS%gwvkJNC=7m;(d5sb?wDgA957`q{;fHU0Ly+SN#o4jNe2FFi$_G}U>3U~Oc2Qh1=g zHZQj1;RWhMttuvYRd{)|c~|$uV_DCJ6fPF#cMNDhXMP7Vag3k{D2~ew=+RH}W<#7l zKu`}3s@0b}VuQp*DS;WiENKl^Wy%ur$&TPhox|f-6^C`IEgRf9ZeoqyUQ^mJFDOY! z5|RU~!O4Qnrm%|HI8#W6znl~yIVd?@Oimsq2$~FAde3$daS>f>@_Qx)n|j*S!p>wd zy*OD+jKG&Xh#pQdp=PY!*Rx>0k>-U1l47 z1vRzfYf~Fjhr54Kb;Tc)Dto!hm(&|3qnjF4oyy%KLsb_fez~f1*A+wD+uHVx`eHEO z_uUs9`4KC|VP|x-p)TR$y13F{X?){|4pZ`fGuXbw;9A7&*`6XBJ%J6h=C?IlN%PB- zQPk{ZAt>S{-j!B`QX?bC@s4%S&x#-{w|BN7N$j&$Hfap z8Ad9XMDS_%2$}Nwf_$!y8x3-4i)h6OW|_BA+nh(o>BDJNlYyKDB>A$kQ%ie$z$`h9 z3h-Ze@PO%D4zN-g$V^utumgy#Y-l0RXrrz~D57J03Zv4hv?}n4ETL8-*;y$W8Rcyrd-jBlqy2bso#hgXOS<$X9_}<-?L*p~}*gT7^>VA|Lklu6NfQ2Y2cC0f{=>AYtG`cTZ zjMs$cC~d}fog<9V5vIq=1kzX}M$SU*vQ3Vx_8q1!jY~Ae%pTjVNKj{Oo;*#N)%db< z;$r3K*g~DdFtP3_cY{_t=AL>1RStfuuKH-lanVH)xlzLfG=}4hT$ko%Xgdzzc#tVw z=bjDP)(={b4{#f~%}~oc$vq1-%>nKZ_d0i!dyo5=`+{?U)D=#v(F*3=X`@XED)=O5 zTbiv--T;POPo?d!I@v48O!5%sr6&lImW__L$A~joiQIoHl6qwehqUTUs)oa0cap^jQ z$d3A$P}Fr$i7w$pU_?AL--M#nlzga(6L4t6*b34t;OUulkMSZ}FA8JRtAkNZ1=)** zQ5^?=7^1=zNLVpw6TbAfh(@-r*n}?f!nU})og&^{QBgr2N5QX^*oXD3=+j2U<3|;W zZG|KMfTr+9ZJahHMiZ|^4~77$ zzDxJ(lljjQ3}M4^0^>vV#)=UBo`N_{K$u$-pI@H9_lrmjaLvt)$hAh>+ZckyaIGz8 zfc^3A!9A1Pw~Gx6Fq&-z<>?_oVJ1DAwJ3PLxgk4Tr%=acwe8XlYD}Z$p}4-eF+s|> z6ia27cDj(j*yNb#IYH=$X#w}>M&Bdw#Rh$7LZCg_I-qBmIy5pX7CW@Dn&P(VIA>8C zb8dLQ!uYPq)629YI^NeoIkoSa_WvK|{sXX$Vrv+NcV>6B>e8zBUTjIOvLtsqjvd>H zTb%0j9;f%-doMr|0)!R_5K4dmp+g7|dhhK*Ak<3<{X(qqH?xu*Cxm!ZShf<0*5?#=KnxN#$z4)!g) zu@6}h>_e6a*+!$*!BzU`iS(cNIo zJx^_Z?HnSCA+8hA!V@&^+`(AFO|D5vL}O5XOmwG6bSH>&9C}`KOoUz(i9o>-mOaA0#9k@d zBbqJR&vtBNS$ZkEA3OGlt`zb}P=L9TnIPC^B%p~QphQZgk6clhQu#}es|rb$WF^tf z;~?-9sArhP;C8l|#UC_qF~gwy8D=#azz$}Z!7R9AHN#9`+c33W!m{XomR*PjGc64M zfLj-`EU0JMCE!M;4dc~8(ab$;kg^J`8_maq#YN+Zoi#)gdV%A`Q+^E3_#`Z<$4qOG z^Tram55O7fJ8xnhMQ0B61}Z1&7!SV$7QWturrk}?Jfxa2gT8wvO$lei#Q5tu<_XGxrHygq>^mSF zGkIcBVHwaP7?Lg^5?#KYj>fTA8%t@7aAcuX5FNN6nF2_f)ZL&J*c5cOYEHwLUR$rB3H_WthV(|U2`;L_ddTrE? zE}6m?7B0w|l{cuGy@ZOk)aWmGI79-=K3r3Xf+Wp$YX6C>H=&NTS z+^N~>VGH{odh*dDp!Crp1K+=?h=%6jd+rL{zNd;6_1<|E1Q{n&Yxa||yg8K}P7S0+ z6YCS0e2mPeN}m6p~VKN#RD-M|j7QO*tZ?bmew zu$q|*FFAH_3cvq5^gH_Wx=hO^e<&^ve2}%Z_w;yTYVD@McX?pESY5n#>hP7Limu!)jJuS+gGX2oOR=OzE@huw zPm@&~qO^)TPmpj9SOmn>Hr6Fcdbl{e?Xkm)Cmfgq_ingz%e>d%AzBX%TG8-TS1vg+ zguR@5_mX9VMeQxc^&(`xevs6lBvsp)&$nL=LoCK|CP=80}P$w}Q4` zeg$pl=3jq7H!mIyTHuxFyUp7!hyAYKh~5Ju+R(Q*!T!I3Vdy3t<1iTV%e|w)HZYDx z-z9(C&VbL6S+oYHKRxt`r+}75*Qdsz5|`yk<{?}X2bDn;5Xvu{oWXhGqHrmLr#&{! zS+ZrC(zQtISCE3kDdKD9FT5VzbNU;-rO24@TpdNOK)^q* ztZdhqioWvl7UPgeWC%Z`Le{Th^zO2%RQq1W6nBBUuWz00C_$^cE8cub2sfqLp7Wc^;nY-8m!PaO7 zmJka`A5Eke_fxC)iS+qhp{sBrfSD7GpV4Ce`~p>G_ieZR`15VI-g?{5Ki+oR!Y!MR zKe1&C`u>UIo40^BZY+zdfE+NYSW|E?%?uxa=eX=a3_HA)W#KnJ-*)@$Bo$8kEHil*$r5>W_@(j0RH>3zjhNYJNg+V zRnh*S>Ax@hBFT&Bj8Y4v&x7D!N>9e*x$>uOEdNXC{ay|0(*{LBQ5To!Pye1*Tu@N1 z0VSYXQ`zsCqfjIoKU2g`o`x#e2{T!yecE{?{0=>8;6Xk7mrM%Yo+cK}p2Bf6r=)%< zJpQ`M^w;wZL;v4A;XtP}+eyoiu?!o@DFg;Q5;>8RJoI!feZUKj-BKsLqA;+d*}f;9 z{0vAi=kq&5FHaqKU=wgkTdr{6;fWk@qmbG@Q5zp?4ouXCRy&=)S1E2S|q1&#%ihUaGxb;c2GC4*mYC7@^5QD8BHmhl= zvWz}~Y-s*z6Vtly%eK@3J=xszPd zk%$Qgr9^gICPS3I5-mjEw}b6RkLG5#pl?@R37R&K+LwU}K}$q5_`0uJZD81q*KlCT z9VfwN0LH7h=DS}&zoOZvn$?U{Sx!FsXy+J4$KHlz z|0-dBEp@HCKB4D~Ud(YsyDxVSkR>BQOGeOf5Z=j#P>P#N587aWZVq@>ET6RL#aF@7 z#~+8=Ca+lG31F{{gZj_(&FDX9;|kB8zM1_84IaE~@!-LO`ZJ|w&$4^&UNB1eG#mvU zKR)7V#pnfh-?PkPHhP!eEtW1F)GQJ;4_Yb}-@V-1CTbqIY-#_Nmi|kZ4Qv+5e@W+6 zOeI^6=bucXahRHD1cg1^x6^x{=T#~wREoZ1%;@!-Mvs1M)B4e4lC!pL-TL$iObO;( z_VH=B3BL9kxPqRxY2>I;BR6e4+Sc~OnkS#$yk*Pgr=MKYu6hqlhOfOb={@Cn`OC@8 zE5bSW?lX0QasDWWB{aR^9E~7Ff>XP)9y9t`@Y-uQ%hMlUHV4z96Hjm5x@`_T)HW3T z^w7wWKsmH+F{C0hOb;TqD`z`cMLqZb`4y&_UO?ez=HlU1FW5m zzHB1rl7|uMhlaO-VZ(nzEvr|rxt~6^ZVe~u57cl5T0I+h(GLTUrq3kTQXyt5dqj}e zV%^3gaR2odbhSWKu$$tlRkn&RLi_TGhxE6TW*=M`{p@w z*6-?Fb?KDJ_4T`$1-ov&br-s9^3o-D4|;blTrqog_5ABv`p-k7g|_TXZD4k?128@l zskS8iRH|Dix?3zIgF~${_&1tys8l`Gn28f%D2Mm(SHqTy}TOf_W=f&Rb9e zmk;ixhW+NxUA1cN{NyopB~g=1h1D~6ESsR6yF5i#-l0PDpSZm==1SG6>gbW%+6be zDwdl2T~(;Y_%LDl{Xy1ERwVptqAP3k3f!;@v*_`JMp&ERym1o3!;+Vlj>v2rTeYAa z$VRga&5j1LDf6qwHfD@m@)Cp!cq2N!bN=@EHztRNz1}c9bR%}`1h(XeM_ezZGalOb59)e^_cILV_D^8Vda*L{TSo&W67GwbBNEy#^MzqZsbKlkiB^uu)wLn zxNFm-5&C4Ife~eiZT3lbhG^p*kMH^V&x9{QzFVXAiK6*Xobqc6_=4w`j z>uaTagi|}Gm>dCE;%9G8QyDy%P^?J#hkk zH@2=8ZWTh7!~QUsF|XNygSMSGv2Dwkdcnq9S!a^jgZqS(j1sC#@6%||rVqeFOpA%3 zA)$1d?pt<=f^bT8IIZ;(4}j|RMP|#|s;WYZ<)x>tx%_x1y|7|P@$7L!R(9;3KYM+q z!KL(MO`7yvrp}Z#dH!sDe^41+*Q-~t#j>VXZ#Z?w-6yU(gleyuK{r)QnL6%HaMNuI zFWEddwkkg4c@SK={G@i;k#f z3AZNTu^m(baz|VN*_{wxf|zqF2Y`=jv7bi-p2!+t-xiA$c}C=h`=DPYFLW0ySiWh9 z2zoL{MWz|d_Em~0(j`422ej>AK|G44TuD<2U(Zlb44L$Q~-5%%iCbmuA z`zE;aCjf4`B3TSi{MHJt>zlEy(y@a%hFJDT5-d;j|N599(J8U_^dvL$ycDU&Hc z@dhw*xQHXeh1hg06cJK(m^k{@<6X$4Od*>KIZV|qcOYAuBVwtm{$bLTDWiYxWkxK(i=;}wE=+yas@CL%O?a7cLu_X1cDxzKeV@Q*tHW@ zELgB=f^YJitt%%C&Me5auV>fHpT2m#JK*p6Da3g+cxF@4`vgBER{vF>hq zETBPw0&Yh0ZiTOc%h~2*pB}2~x2)rxMF-cYaJkw*C9{}5f@yFs+}^@`oH+N*VV1;0 z_!80}A}mLwgL;O0dq!ycvehN=E-T9j^8RH``_QJ|HA~BzHG!q&!3^H}GZXl-)hWf{ z&Fa81hrLY*4rXZmLJATNHXpZ5oS2_KaiaMX-*eOB@o5wCqZ6L10WHUE6DCBX6DDB) z=cgyIf3#rY^EIT6MqycD9_yuS*ug=X!~HhqhQO%NMm5?5MY}n-1_U7uUw^~)^CduG zLP|PZ`JP)|(K&0V|$}8uT zmJ|go0H9l7b#jHv9%~(Vc}rQb%_LO}7|=3cfLv;_m6WzzKCrdG;X*^TUS8|b;t%iD z!f$Bk*1O8*mY2_V$V4KUV|F=qxb$vFqh4Qqg+2g&DWAEob-?BQP0*UB5Yd_Os;YP< zEmGuJp{f7n16ucG@>28xJzM9};g80n(Fm7EiOKEh%ra&vRYx^ZtyDX;oZ3wtq8`S5 zE)W!u;2_tAX=zUnmlXugcg4=RXl)Odmlz>nW0)_oLyTG@eGcKI6$s{{+LUkFGvx;o zS_469mnUg15T*0aOHDkr>4@k19&1`|G4Dy)}0`7PLLb)}Nk zp=;1UaQjEM7iC}XU%3)6E^ry7#a5gF&RC5zLvu~A4}@Z?ofH*+C7;y6On_f)N~O(i z71J>J2wW)^3$axsrC0=$m%G3sNFb0{#18^ImS*EVGM2Rq7Tbe@U0({MF1YgQIo_xj zF1jKcI^G}|EBYuPcS|Mk7v`C9STM#Dt3BWSwC~%AEiDr}R1^CH(0}4rdtr6QY$1jNP$gL!Q5)rovxv4C>Jprbtef(UfH{g+X;BCoim&I}1vB(N(489+^aG za(TSv9#6T~<1(qlGEaGF72T^O>XIwNdASjqMvs7gKr^Xr;>5N|=zD*ux6{RyJeVdUZ^KqOr3 z9gNXN%-(y-0G|4SBBIM|z{pAvCHI7ZG3tzd2=XzvAp}BB7OG$20z3U3|CEASu0Gqp zTI`);=_?PG@KWc%$a-fJ<1OSxG|Lu?jqbbb<=#A9u8*(R4Q#T_G!CwcphHjspK+p@ zfOhc}ey@t5bxmWZPCD4V_!?z?iZ3 zM{{ZT?!bmns9|7ZM#l4UolK^a%M2J?hk|hU;l&>otL1uoVR`u+r;JnS9Ti0`S5bvS zui|9RIpyVrcD-C({Ndtoc>JhA!^VvpHfR)~{Zl(Tn8}R4#~j&CEuprO^`7%)$`bg0 zVWK23h;DH=45FP9Eg%QO&ZY9g1T_0%v)W6GV`}v;6Mp8^1;r&(3ga=q3D2cZKuhvA zyEU(|X-D6pxY;O?H#YWdY?Mn3mUv;`9Zik7Hal9Vaj7*fo_A@~E)58y+)JNP$iq3g zgR&wKyB^*S_4aTidthEpM6NiAowP$|FPd6Z+-{SKL{eLOF?QH>4jQ7d@4SP~0JTIN z*xt~%y`KSCvJ@-~=9iV_2O+D-vH(NB?TroF18NC6L+5FnJnz)-F16Z~JiK$~WvtjV zI45Ulj*&M*{AcEk*pV~XBqle_#3_ck3e&PWssZ=S|2Jn}w{QjFjz*~|Vl+mKO!kRT zZ=4v~k3NXp&A^Y+l3 zrp(U{bWJo%%0+RoI~&xoy@O1HXIrp#wF01bI!@)~ZwFNSe$jencpr1!=MRh-?(@$w zPWxDC3EM-3XoB9X$aa8#HT^R=9)3mSg@w2;497BOHbo`=XLNU!WaA>I%fx$X$_*yH zLgTG;W2|d1*3D%#ZjH(5T(n6l%FbE)eI+k9Im&uhFZIa9DwDH@Ot&>olbVxzmR9#J zbC?wB%J0|aki{r!HMN21&o&G9#|us0WfjDWc>`|@W6axa&x5J}a9ZQtPqMBJk%CoC zp6a{%Kv$s8lq)K@D*@~a+2$>uozCe~<=)b)IVSyj8N2)&x_-v(rGb4ngR;#qbv^^< z_axg$nYwrI^HVY($(Q21DfR}pmXRDGEK9A*(;~e$y(kRI?ipibr6ZrXeS-5C+L_NH z#rPYm9=Q!{q`|v`t}4lSuU5>K3^=fBsDo|%v`SZuj#O4j-+C04Bw+ic`|gH`@q)cuO6s-J{}VH zsibR6d3Tkt%@2jM$E?pY-W1QjWw4a}RE)l8W7#P{15e*nm~*^ZYJ??)!>iiw=9u7`v z2PJ*>*fKPW`s1!q>&fmjM6<594j%rYX%hOTO1wnlQH*QeC$dxzQq75pZ+dh=flSUS z*p>&;=DD-r?UjmqWM8aem;W$e%&vHW4BmJr2$tT6?w>aEiU@a4@scfWv-y%+zwM~h z_N^AyM`ResCoztVX&gu6-8(iQ-H|}a&7-{#+WWQ5y1m_U8){@x{?;37*ybl1GB*ru zd!V}X<%g2L!T8~OaL*tx&$T~peS;nZa7*B}zorOfN>Tm@+~Qx>$dcEJ;BeVog2z0J z$LrX^xV^`ub#{bAkQ-G;LiGV>gHJBe8h5B7|1Qk;4;k z#!Z9uqcrAx&x;L;J8Y#V2g2UBlb-Ry)r0geBtouybARLAB`3E@hmPf*%@@tiue@WF zLL+ii_g%ZSkMz|DJ9g+)i~fo%_x|d4jrm4)@ZqAI8Jo52-PyT!v`R&vap?3ghM5Yq z^cOc5<(%j(Wk+1%x_Ph){jmCGDJ{M;v82)YvmrKa){FxIFMEHG7SpqbSNQhTDi3w+ zFgDZuH7UBCO>xW(nBFNdKN_LPH5BKc6!o9)WY2eM1ty7c`2-3X#gh`|uw3P&(*?mw z*+OtgBr|RZ%9*Wzl`VodvohoQ3^~0Om}HB&_juFsW!LThY2Prp`gVWnn`iiM(7xx#zqzO;t z6mm`=-^jywtJr+QXY&|a(K|zoZ^k}<)-Zekd#lJFEvZ_!Ww;}!xvF>2+@aYWx@Nh) zl-Z48PwgDdOlA*Z8Hoa{kxvOdLeY4Cs-#^`@E+U_?~6Wnv%i01^6btE^9$Ey4(!Js zdYn0%xHRJ`W|59g(63$FVO$gAF6HLA=n7^>ie~cEa^^T5GbUjbjAVj&IdYzzTx^vp zJ%(?@{0;Lc{q}Ly@wQ%cvYdN{e)B|YT|GR(Hq&Q+zKh>9N1lg?=o`1$FPW?;VBoE* zR}1h#HRY#wutx+f1p&iRa)cPNL0-%I_&A=^>%$Cv{pNQx*5sS80Bn=*pUoa&I~IIG z|Ab}@fb7~1HM)BgaNZym;N4AyXcv2@VBb`L=TECTc*(7Je%=d?1x26)G65EyfcXF@ zAbTf^>i5I5H?b^u{&J=+`3Smf6VZex@Ddo_l^9+|N)OY>CkX$<6CKPHT;ZF;XyCnE zEFoxv`gwpG0R9$XXVdiTd0;LZVbB>i$Sz$97ca%XKu!2?lJBV^xPdD~*A=X0D$rL9 z1K@h}ApXfI+9)al6JzVjfr_U8wF(p`A4CV%fzhN-jp;FrswUtrasRG2M?AQa%->K)gu7j0a~2Va9)|#h~fvSfFjVQyem_)S6SC@WPW+y_CJp+t<;8{;WeE)i#p(q5t@ zlc1x*5dm_|64CD`s3u!%%D0=poc-l1av1ezF7%_bK%x8~DrcIMz*YM#ZM$8;DX;RL_iF9^GMj%5-fqyeV zB>^*_kYXr;DiV)aBGo)SYD2Ki>)P$QQJ0u+~H8?@)tPYOi#BEza<`GOKNJ645sRDvNPe2&@L=oDkHxiW$OnS6Y zV=TxLb!B3`A*Dr()8ME&8;gJF`o_f zGrhrc_4SPCF14=(y(mJxbC_!5%S=;za+v*`VH7UrUn-tvq~rYJ9~A3E@Ews?1JI8$ zxK6T9N`Eo+t(i?PC|-4`ila*LPqggKW?eY8Y+U~vOQlTYpBA-)(SNSP0{jGL7Q@&X zDHQD!>z)7-5xwqnW~i9~>Q2K*`a>zbnMJ?TlkAe&flBe%#vnU_wtAoFJXh;`ssK zHcoKC1lj-K=%ALItNd`q=F3K|K-Zu(E?ZgFZJMk)mDN53WT0ykAvYr{U%lkYD|d&q zn!L-#-)&7kx~xxGw&u1-oh>UnxM#v$_6#p*17U5g0d4EOv9KtXm}+Ty*s>zi?-$KC z>1wBQv6(ZX;*3Zg0LAF#+?))0G?+HU@<@|qg`44;I;kR%pKH>k=KX$@gxSd0@Qjd0 zRZ~NR)l_$^9HgwbpSyfMWwQN0);b6LrPeAS)EZX)gtlZ~%6l!bkf**P-s~AZ!|IWa zPk!#SmPT&o!?j9_Z4hvwTVk0m`b_EaMSJ(|$kgyTyT{&PNxrb8x-`Py9ImxSB7sZB z-e${igYv3U?;MpqsI~cdYm-Jq1mWKN+%Yr^1JIAE0X%|PQP0bev z!?k}FqPKIh19Tmj+-|wQ!Mx1HiW>eb1fd+GR=`I!Zu1>X2+t8^R0}m8<0Ewv-h+o| zS~-_kf$27Obq+n?{{T0?iK~~-@i*lc)CGH2l@+xNh!(^P95vasSy5xM5ai?-brehaFu!;QGXZlI3M`w%1dfr5(t?tV-Wzkr z{v$g6et^I=ciySmG-AYJ^bz{XW3SA)N0Z%8ZF39}862ZCHKnwU3 zzO%)Nd04gy<@6&abe_o1&!jhiS+i_U^|!9`FkCD8wFFe=oApAUD92;uGA4@oK0*bE z&ZQey(sRz*{<*F}dc^;x=IM?Ao(FYb03Sbb;gXrYhWteDU}^8(rM8lMwAW=#kqV^+ zlZqg^E|KYBB$!lOamDVCMoUPACHXiZ71~<`QW4lY{w~}F-~%R%fn6P6xApKc{u{nV9CwEm}Y1M z%i9U6FEui)Eh8KlO6b$8&gamR(hT@N86P8qxIm$toay0wQ+Y4QR%HwrGhyJU2}>qh z6UnRpw*=&a?15QX1GA6Usif5b*4|pvd%%Kela`5-AD$y28Qv5LnZgxJzmSBqPbMT} zsf$UGkZhASMN_jVIdda36!Sz@%rEp3`U~yVy8jP`1UL%Tyg2i5^d~ytwpZlbt;z1I zvO3y8F4|id_AnWh>sDNI&7O!>lYjZ7W47e&tLiFpw0CCpwP)uBub6bNBjkn01E?R^ zgKWhm@xqzbmM5%hLjIs=ky%$iQ=FJPJ0{M|?hC}F=wyCg2E7o>m|=aQzh#YwSl6@IkRID zp#ml7WL{n-y$H;lZhfM~vKDvV7WA(YP(msoqKY~@nf*)=rKT*n21S@|wRZDw#FzzU z)#!ki!)}2sjRS+;m}b%93D#f~m@+R-g2*8~GFxH>Oh*&;%bNqzyjMX2nt(52PV{9L z%28)My~iSLYTO14gOd2;w_FmN{w8Rl{kU8?JM8}tB>VK%^h z8q*c@%36kbZ-@_zaD^2kGvUi>CW8YKEnU;=_j#%l1}{4PD(`5Bh~)p|2kPFH=Kf3W z)C0z38sm_JA?g^S5xE zcOQrM*05tYK{;F3*y51XIO%_+^b!&j!(7Qs7WSrcaIdezeP#?b_1u|#Z`b)fHH(Ed zmo^?Fmnpeukzk&m$d}$&0yF+z(yhGdeq|@-rh|TB<|ydJ7!HtbgIRi_sjkNYKd1Kw z1r2@Dq2h2V$UEAIK3jG*dge$i2&_g+fpp<2A5h+2gU&48iaxrf20Z=G3{AMKRrg}? zOs%fC+UTAKZ&S4C-Qds3>i+!}BoDqa1Huxxf{`qMy-Hv?`>RT`mS4rN6VaEa80LX8 zI}4b}=*NxMpc8lY2F4|aK*e1Z$(PWZ2de{bR+o z=)_(1AiM_5T3*$6<~9h?RdCdc?2$1a(?7&2q0?ivM?p9AHhwLYLd(g%IJ zWCwcp);_TI0K94s4Z%V5-KK-+(YvdGZQ0GB_q`Qp487+nc;M2P4Esd#%c@2$0&CZT zMI);&lZ*ECMXw&}4Y(EiK=y4F=wHG)g%(Q8tYQ6>Nzf}LHgk+bFUo6l8?@xI!~pH~ z&;`VlL3YYMHyKL~kWXH~_Kje+{zsXT`B4To$d)Y#F=v!((P&v;@Zk9A(@)MQw1vC| zSij+t_5RWf*0+2Ycz!iKRD^EyF5{Z?U=ch%|Ex7JHVVPQ7CBAT`n2DJspsw z4gVSS;Fk-akd#SDSD^)dr)RlSw~zmA$+iDO|9@YjuP)~K_5Y@p@{2SL5dYh%i*UUG zuJ`bCz0-HC|4-Y@|NlW7qn!Uuf1pj>_;GdP4E4JRrY?k`On02Wq)v*@bsX-3elwa{ zL@lFM{oltR_x~fze*N#s18utqK2gI(daLWd9jDL!TY@9Z-KCu!xD5vPXoFqUWz^+= z-wJ<+ZT|nGehnE>DiikAk@}u{`@cLwVE9~ufBOcqFXD-)e>;HA`N7JIr0)2v zM>`T*>J;W1=2P<2{mmes(WoKg@waFl_U8ln*=BQgevZl1wP(iSGA&7$DgHkxm9Oh98x+LgiFcyzFoU^k$C$$5mUlEOi2X1#hC<83>9IvK1de5;#mIWMLv%A0{@Ru$?d_jGQt3YtRNcEPmtw6_(eb|GV|u*Sp6#*KJ?>?RV>TtaFZa<(uCAcI9X5 zj;~&MeBCMV)DP=-Y;cZquHU)-hwnG++~6ALY(ZaqcxKfT>rby*b$b01Dcs?_n4`=a zST-VZ^aXl#TD`E5P85kKpf!3i|8Fb@37mjY z`cxd;?$A75u^Uft3L?e2AV+Ai(wsGs1IMu#BCTXsyEJu_pm4Itc zN3w<{Hp5((8PFvwL!x}S|NZy<@_bQfWn65q7QxMlp;?jB;ImoDZ=r4$qJb5vWyznQ zQkMJ${T%KCiYDaAZJ9vsIFn(O=S?UAz4HVf`jO5gqi4UxW6VH>gnO8<+;^TOF}+AH z7!sp>c=FVztb?(FaWFop<%2x2Bi7S67)vaR`Ga(q(q>9e6YQxr`2LjJJj^jDx~7r= zeW22I5`86tKz%EWKn8se9}&S5O-)T`A)|b=PvPuQ4de2q4E#wXLi>OQ%F(+`jKO3I z8B8IQNypsh2+Pjysj^q*dU~~*b4-TZibcJ^{r*`Ka;gK-?6$G}b7J18&x7vO(g3Yd zg9X~HyIH2*Vb%l{mC>99Th(Q*GVe?dWXT8(GnoiAmkAcxXy&o>{hv|Xi)6q+9$XhY z(1n3EbxAIke6?<^K?#H*q$OK?1tlP1jFJzt`juB+LDl#R-g#ZfdC4o#=UrRdXH6Y^ zG5P09ux`zcwSF&n`3h6``i#J%W5+%kd3cPrM*0UXs;H$y>(%x z|MEhs!Zmu-E#>CoY0LHwyPZB-JG$bX$>8nEF?CF&T;y0@To#T@jYLW}#+!5U-;07M zvZGRBb3}Na66i}`+;28vny4T*sGP4Ot<^^j@q~`y1iN$rAMF5%XctjQ(-iPZq$Lz? ziDWm0Gh1$CH=Mj2P4MIZe+KRdjg3d%T`4MxRW~$lxnx^YV|6~0Iix8PX&TZJ3ZcoH z!7c9RH?3dv_JLjVRstz_N4`nq3~au9Yu~IuQ5e?5M@DDV}SF!9WxoKcmaNJ((h>_sPbP_CE-ATQU-h1^`5F9bH zv2kW2slN)3WjS**TOsJ-X)u>rk4ZN!gD^-wxRVCdAT&n^RiWKSVaWmQ`&DjT?Wtk2lIYK+U%G^I)zDwrMt z1)f1rUjP%Ck!VK8Cr01cMz6;?b|4>8R`pR7fJj+Efr0k6MI)J_WNuYeZcgv2W*Vxs zT8~EK)@pb_1CZsT={{QE>(lq+K6y;GHw#F01`cLdtd*|GJbULRaM-~ft$)DbK4f>8Yf6Rp@edzJwC{{fG?X_vWTl%)v#1j zzG=inWA371(cam4RaJS}y)&8slz9B)M3vto!82T=*h|y1v)Pti1_Q6@mF?q_CH=ML zA@D)Ym)%RHvKe=_uvyC_Vh<(E;4)?v^9+8o;5N*r`e2`}m@m49x`{eUJw% zd>kRQDbhqpFGut{Llc)f6NG4sf}{abD$Ie@T%Nkf%9y^3Ad!A2-d3He3FXCH)8L4B3$hMU^a<9SUWGY?jN* zx7qARqPb$mVzbv**XaF$P{<$9_klO59K71b^ENf_P~8>I9#GS#hNiRY8yoAhY1-rM zQ!^lYv&-#tIbEI-lhLTx8;z!{-0UoK>fM}`o%>#WV>r9DrjO6ZFk*PgfdiMoJOH!R z27ms5(PR4O`wi+WCT~}B|NhOp^4To4!58g6W^`*bpjT%@P`<9VzP@&y#p6+6@mr>O36K+`L^xz^m-A58Jok_{7b4-l?k9Bo@-@f&$tz-=) zgn90pSqmkjbd()SS+l8?#O^xK2@Ode5nB+@6OGrnUt}aFh=`A1kw@qjG}&=V85D}A zcB}NHUpWY;mNIM_AblXEz%BBox~f;8FGMFaeW7bybpG+29^zX$fLD5QgIQua;>rwl zQr;k!s|7cRbTOLt15YOv^7|vSJTnsUd{t|)HMK!_-Jbej*s~k#^7t~?zL#AOU|W+- z(`@AP^Yk`H1jvgb1!V&aHd|wHB2p{|Sq_^nFQ3mEerWixL&HbjG-T*asD4{>DV%M~_Kq+s#@*9<2&nEmxmVTr*@=cxRgIt_ch5MPb;RBUBi)M2KxM1H zAB5A}p{U)UY7Q@Y3xKy4g_~tYx*ZE%(;@8VYq2_p9UmHWR#r=Mi!-&3MT;Cj6DrA- z*7R}&h8`d0Sak29;lmHzd-L$&wSBkm-`d!?b^rFhm>c#`khv4fALKT3J>?f}m(ja} zUP?HmLvi_f==IQX?FIA$&SGKl*)<{&jHyuueLspT6Ml_4sPQQ+Dy3D4zf~3{Qgo zxi3uxs!PRe1t9X+8Gu^z1m1sw3iK)Hjkz%kK!=~@o*xYV)f^erywb)qiP zN7j&>z|eKKODZS_oEIbCaE?<;U1yrQ{=w)soVybyl`>_DNTAUUpzY}tV4NQvzHoWV zQk??=PNGqpbq=$|tWl{I5(&>^m&p>TuCz$h3I&8Tl!(=dlCVXilPV<=jn-h!k7^7O zg+wHgL&jupECPlb3Tx#kb8oU(spREKiJWF6oK&H}?@EHZG~DVR;7bvDwUF# zsU$L*m2y%sn0pB$lCr#9ZRAxFu~e#2T69*6&Zt&nm&OWdiHv1=wL+=LHSscDtGDQJ zD9>|ZJ+If9jV3)Wma`I-wxQTyk6k)Q#IT%1E|*JqxkS!(xuj~j4t&XBmrN>`%T#iy zgcH#$&QGq8suWT#wN3>_FgGwV%1q5AbV`$d4sB#@;~Y+baErX36ApKFx6uVnOmz3L zAQ&&ei3QV$=LhE-yBioYMou8yPw(rIi?E5*-E6meZE}SO|0(3QbFZ)xyzXu-J%qk% zo>MAjWl}xwFqN3idYxP%SE}bwEC*eyxgu_=(pH{wh~#ScJL)PNn-N_=CC{gdntvbq_k$Jx!+#sfo(sGkODW$+RZ3-{`cNOj?D^AbJHdEX&fu2j@ZV_#&?i_GQ49^PKR!sHmQ0F@3{> z7EebK5zC4sT`nmLHlF8X&x=|i4Y4$XCr`ChZP00Wgvb{-XA;X4ycW}5twEuZim^+h(Hhkfp4f(}Xeo7H=}?I{hNc;ElbVRZeys>(`us|1fd&pE!B$yoru{i$bb{O&gY#uriBTl;JewXUi38bI_)cCwPZX!$UkgAg9!s zttuVJ$-?uP)WGSvkX&y7l?==4^t@J~6#M{%`2 zCeE2RdCZWONI0B1p#P)^3ujFpJ)|`h4l8miheEc@H22-TOG zLTyRe8w@788_cLp(;>kIkk&|W>W_CdV&H;SI-kI4dp0f+rOt2r;9r~gJn{&9xh9tW zSfo^0%s!Rqn8o92a=UG@KxQZ~=@ZDAa?$rvna^ZZDc{J^>Ivs3mZ;TwZ4REJcrpIt zd0lA2$hN-ye15;bZ{4v;lSUAS&*yEZ9WktZ{?v(s2V(qY3~ik2@6R;~3${5;z z%2Y5jQ7V%^YOwe{UaLvX0Z?Klo6=@XX*sm{Q4wF77{@Sblhy0-n}^~lPovf2s%ZIC zDKNu{`?FS~l7QU-f8Ty>ZBr)_M185os88Z2G6SOH?Pm!lQEyk66#>{@Xu*^Zdr)B7@CRVR7>!AE-qSLi97bi{6IrVp+l8W?%#8A5%}>V%ysnt{Bw~=k7=)5FIw{vQhlgYDbX0(+wl=aF`$}~ z(L0!LsD9K*>OJb~)Sf?K=kiO=$w?{VLRM|#=elH2x(k>gr0I{9XM08@W(qC>M%o`^%$y80Vn;K~~!)R0t9T*)Fc};3O zAJSZgTgnA8c{zw^brCT%P71Ih84y8{NN#k?6k275n1*5zE$#;Z7!9N{03gQ#34myr z(w>{8q=8Z_p`nyv+os52wNoxpaI{n;84qV?WwMqAha@n$pFPikd45K!AAV(%gI7j< z7RAgQRwD7ZO}Tp2vijeQ9*w=u;hkifp_-pxzE@?9BPp6m1{Qpvu3zLR=s4?B`#Z#xxONDcT@5< zlU_vsV38XtZV8%{Zl?`i8{qF~Ey*gESxQG_@g`+!EGurSaeI8@oIXw5=bqz&Uwx?BG_=yKmH3zXGBo-FWAyrwYxYcS zwA^HA(aC^RFTE+yoD;THnnfM**`pVfLI-AUWHw-nI$RR5gt1gN_8Z3PTPL(N#H;s? zZo93jep^hN?KUW(I~bf+YqO;Eq=!)JnWfB4l%BE*bS_E_!14!?H!xPnHF^Y>x)k!` zpaS4QlK@&jNU*?wu?Q%FOTYm`6m;`3T@zf_B$qZtNh0M3>7O`;1-V*NBvPU|&JnRM znXz29Xt`|KJ5aPYc{+Jk38sMCVi0A6K@k>>7y)in%9Gz<(M=)4+%H+H5X&*6r;u|p zG3N2aV*h0Dxl%z*ocdaA%#qFQiig~<%0xY0qPUxHu#iauhb=2 z=c>VdnxYC)G*Cx&!wh<%^RlrZhnbOt8_yBJgqtAB&EQAx_7Q}XgVfShS{x_j(Z~t0 zFoOwMTD(`~^QrcVX%=>T(Ytr=<;&qna4Q;|ykYq_;9HG3`6(RiMON^6asiIcDwGOV z1aV4{@XErSMbKf^faiHEg0Rdmqbg%khSJ!EvB#BO(b9573!rxX^yALAG-|EpR0}^h zjJY`(Sx=D375G&um6K<1okpkDboG^oabNl9FMTDwVqnk=^;_e&N(~ZpKK>3<(e?QE^|9U_qKYjsR{zk-ytBV$zcKOj;JnmM@ZRzFrAg zXxp3oQzZwl!LAGd_Y|$Opy$jjB$rzmWFV>utOnZ!2Ku_jrwFhzYZJ#P3T8n zr_0gl$x?|}!mIVzq2qxH9Yqt?f#-g&r-!^=p%=+HEOLoO3aLq|WCeI~k)iUn!SIhM z)o}0*jhd{7sWJDCQ)^O;o_5Dzn(%3Uz%#egR^e{JRQc0&yqF*_Fv9RF@DyTDe>C(k*+??&sVBVp46&Gg7mttO>hF5)JllIZ1ng%hSa)uUurJ1iK!CoA@s;Y=&TgiGZW6E@!(8;d#!EYEQ3^+ zd}*40LnK$1Ur{y~?j)H^xuO>bbt+SG*^|AEvSkMrgl$0~k2TaBriH1XWW>$~Cm~8R zL|+De0Orj@JJ61KV4m;==Ffve(e}B-ITy?qLczSb0*p%P5vD)$%7rlK7_fbZPNUDi z12%N}J7C35_%v}^g)d8pFsHGO$eSCuZY` z4yeHt$1Gz+r2l~)`N7}8dbAvUhL(f%zz%nz@6k4}0BFEMOe2dZ5wo9}giEg?E7dV? zqDSeV>YjV<0dJ$wy(kRcx)*$S54abFz}xqNw+VgC#lp|^%-nQZoKw$Qg4aL}dJW`) z>(ChV3K|2h19{+jkOR6M*O4+`MbS(q>qwQkN6s&RQRv|7=pY#NI(_{0qyc{OIv9oX zTuA|D0BgfJT2r<)a8^N{+~UT&jl>o*0YdJrqZ`((Lw}-2)~#EQS)=N8cRqps1fnMZ z$LQCgN0Rrf1JADm)qq?7J`kZlpGe*V8=t^6*-bG_FXlvd8^+wk7(Y*728AmJ@Dq)> zX~8}}FBt!$Md;~Ye+4DK-udgVs0hD3v;9}{ekXnPXP==Lk{>}Yi1kAC!pr@q(Utd* zw|hpU0ybx?pth=cq|FhJ)|C&Srwu5tixw7+Y_6&;h&f3FcQn?grlBiB$KF%~ z$k=U#`SqoP=&1us`^4i8D~8!8o-e?3=NE2i7-@CH<9$j8cI+EeTA!b=+ecjxfyf`V z6lAtC-($S;SeiFd7EH}u0*1A2TI-ex8=pqb=uTh>BI*PQnv1etBX(#LUf6yNOh0xE z?ZMC9W5>X>+)bN+V$-HgL+;!$6#w0Yp1gC&Y2l6e9*>lh=xJfBlz`&?Uw`w>*I)1N zzkfeEc}4&IUte(rDA|wk?!kq6~1f9I!$R)_)V{J5ONgm-a1Q@+cKf4NKl%4 zio)K-?#$5eP^P=sv|~i9t-*)?8rotbc9{My01p4#nC2bBNr2x^0*3D}cL${ALtEz$ z%zexjYMsFM5w#UTfv=lmN$I$de{wQbFcTt}ob2Xhx=c-yYxcTgbtlsG1eby?#OhAu z=?M-)hkiMC5QtRJaMU^+X7Xya zX(VbaKOBUd%<|Wy29+2HNhKPa^@5~EmrAY%e_*g`mjQ=ZOb%xshtovDEOuUs!HO|h zp+w&DF0ka?Y?k8^i7{9yZ?};6Ca0s1(_tb|3@!{1C%vA=B{EfbJ>_O2Noq8gd%P7U zTq1bA7~|j4`5kjVvlY`W;g*0&>xs-w7>kB#v7<)rF;tSX< zI-bW+0=`I&Ctw#V85M>C$3;Dv7MVoJ*&9OZXIdxCaO$*3KEf38Yz z#zhv})%eeD!+Ci#ZK=G(TDcVGRgfw&hl`9e3)-!u$X0vM7YXAcbEzWd;rKGSM(l9n z5}QfQeHe@YQ;ciwRFMgbGIoB>Jj84UxoIAy3+v}Mq7rmBl0KS7_Fo(N;@byA`OuIa zHWxG%xdr&&Ci-jhUsN}Pq>g$2eo?!JyJsKy`)!YCtb6kVTo9>8BG_)!=#?t6;;j;^ zv<9O_rxILFvUj7=s$}9%u{41NAC*d{H5jxcSRxT|*rhk~TD6jhGD=>fGw5*`C&CdG z1}*+iMHFKp+g_Dy= zI5jDRQKOQOaIspc(=eMb3>8TwR79L|8B7|jL&9+c#3x(|L=b0Bd~or|{ioutT4@YM z%$o8X36rR_dR<7VkdnMeL?cF)RD4P)mCFcdHO3zIJrVq4}-nJ{QTI1~;JX_?YKe}4OvmLWmx z9586Y6qp&w9MsxAaq)uoaYI`p_^-8X?3DS7CQTkNC^Le2L4W5L%0C)KdS|_8_*I!19v8v|H6x4{;w8v z6*^!6eK(;xFn%+b048n*<53;lI}-Fk4~<0cp|!hqftB!iG!iAzC_tkmI0$IrE-H+t zolFepK~A*MZkG1rkDLAvdttDBDVh%|mx4;r3xA>c%Vtg--P)3wkr5csG=9RY8QreN z2@{xHwCQWK`RlL2;;+GqP)7geapUGrpEz=0OJ*qLnl%f%n!=&f+Dry6(_tnXbAd$u z{(Dsd{Eyi~pp^hEaKrthGc!CM9{+hf8JRsDZJWUZ=<3Y`Nt@Bt-~spmuXXw|LOI!? z46jSe^IDfTBb1#J%J4b0VABOiqA73Z*US;76yqpJP5_*13F_Z(H+Hv^7c741Ww7{P z7PKE-VFC8BnHk|6Ca9MH5 zbF;%4zEsJ58R6{Q5OINRs12P(!vKrUf|~#<$elg=5LqKJMmb}UO9Z3Zb8USNhwU{V z+}-==-M#Prpn4*@56CA28Tpc<`zBq0Lt6U!n%CCg514{Zo--z8a|P~6ES4^0l#()0 zR2GQ&*#w}2emBR{m~eJg8jJ)o)B@x;;+h@;cjKx~oOnTH=bpG@`-wQZ1Qf-$ZwDvQ z$?b3?8g>3q63#U8%nb}nDFiFCtTqR*L0mtrQS0_&0ftVH#b)LpdTPnsf1*$4Ei6G9{f1tJ)4xR9{kOg92lKxG3;gJ=B>MPX^f4B;-S?(={CFo~ zu42{-Hbk-P={G6>=f@H!8_WU;@ZImAcsV*LeEp72E(b;EndP(*Ov575+xOuQ+6$)L z_x7>-1UY?3XD73i8G|uJ%FG#~i6HAwu)MJ+Sg0H}?A~F+&`;=wVPNFFVAL=oeB-Zs zu?KwNs;jTQ>Z<1tya4t9G~&*Kl80WN#~0FhxklURnGMWBa~}G(dbujAL@r&`TEilbUl!w25>L>4UA@%cKcq3`*>e) z4E+Meln5z^zLy1$`}>)VJ^E2fJ|*W!RlptOKn~y&K~MqQ#sqKzp2OYBPb+}dFT>5B z1!$JO{vX4^Lmz(tibj1fd^mdcAHz`X$M2(ON4-C6*isN&0Yd2Q73jUCOVE2O(Ayxi z0tD$fqdpul;{2$f_#Y#{!ykVLn@RL{dq!Wf6lAQR(sxvyX0FA{SrV*AptCG z9}V6`o4^v3F?tlr087zE@GjGdj5nYM(L*;NJ^1Ghpbx0Mff8ijPq6GeFNMqV>jK*c zgSuBp@>kFUg9o7pUcrEtz5?o)xjno#fMwWg5Q$0&^3XQ|4lfFCEpWC2J^E)mI<cs6FdtvC{7vt#HdpdFQdw?wdA~P9v-a`Tg55WPy-Ge#-xCcn%FAf<@65f+q zdx5y$&KGXM!W~shMla_#vTnVb#lKuo%h9+q)A%=-U@=jNx$&?Gk|7RDhOZsC=7(Nq zK(QA+4F=-gTIfY5&-D6!^}x01Aav4;$K??m__P-keoumE7j_*XQJ*=}>&)7L>xQox zwC=~s@6oefkiakopl5KJA1Z%XGic55bp*-}I5H_~9`66wF<(*FUTnQW(9b)^%6BOq zk^j_!v9M^K|5sxGIYg`AFN+&wg6qi=#L}h&$W7`Mf*ozL*+l+(hNkog2;Wdq?u%rP z&yM)Y6=t1yWXzSw3v2jdvzn3BMax-MESc6Sr5WjfX%aEZmPhMkjM`kxYr=U6S7Mml zpi^`KsNguGRz588R|wNvr3@`?y$FP&p%R0Uga49F8CO)<8qCZLwpJERm@H*wTDEXP zsmsRd!Zx2qSCVPZWwBhK7Ucm)X0cA=vxju7%~d+NfYWoVqJ2D0o`L^x^6~8oNJ}+b z!DJzQ$d1z&XF5QxNUc??*<5>O2~KYd3+bojvN{QkDN3UAd*({!Jv=8q_#b$jod2>- z!{EFoO)F>qZ(9^6@7bVfz1F|B=TfiY-2RZFr=zY6H`Lg!mL3svCUS8*72$T0_lcHC zCE{uQr3@n(FjXR!mPPx>aVr(!R?1B{6K!4XOp;fKMJA2BEpaZrtTvUtRl+dR{?o(~ zoW53eE`8AuiQXiF_Y0d+N}gAq+oI}nl}p>l6jk;QW@H5WR~C(%B=ms9_)@1`q$NE- zTbyan5vkNX&*nNZinXKxwIaK-bW)Ub0Quzcg`+ApS)D3nzv4!fRPP(1*5nk{WW>r+tCy%7 zO8O~P4(p(ZS{)i>BPmPz@lu0#1h36b^a+xbv8?JHHCgdGRcRvByD&$i9^unVRgJ|s zq02fbjNT}Yn@wVIR(_s{k?{o*sl`{UcYs}`4tuQS_QVqzSD)){WGy7&0Lje{~PDk80oeaH7!i=DFu_?@h! z$eZo-mSkcv$s!S(A#i1uc%50kVl(Rq_MeHo#x>>oo!Az}Ar_BuJ=Js@q%(aIzLt($yrBSO@UVGS| zYtZ{GUQEU`PH!NPo$C+V{R%wY$uusnKbW2Ci`cv>wOZ@6+cer-f0mWFy27$uA~x;H z%1g&&X`jyE59Q<*#q)APeuGYM<;9C~iA$9!*JxB8M<|e+mErfI1^WE$9FN))W`srV~ zR!-`8M7Qo-Pn~mBN+}$+(=tWC9tq^-WCXl!4bQ85mVm*S=g+eHFb*~DfG;PQooUY} z4XN_kv;5VW^7R<{I`TY)^S_lhe=LKcbkV2yo(&cAo3So@a>I-D%fI{l2^Xfna73K9n|I+TyihN`i+|+0Hmd~hif;e(7Gb(7po@7;?>(kQj;h-` z(X~mHf=LUOY|gpUxsbusg{f4s)Mx^!;nF3i833A7}Szbx*hD)!eD z^xqPYi%}=Aje&P6I8G)Jr;hcAB@zjzxDzthSk?LrUM1x?sfyR>^lB>{2brs^N~2EK z<(*+vTCZZ@?Fv@GbpeowWfE4=@sdrUP{_?@r_<~9;NEODJDjynvN`Iod)!{9(`-;F z6f#H1VYgUiIIdamaRu$Nu0&qfd5N4hx5wjhn$2U>Qp) zk&ztm5Fy)q&z19Vvbj57))B7TBZa`aUckby|}lL(OwyAmMna1=*C!W~G$BzygDq#@NlL%xGJ~?;s%X6 zbb(ih=X)j;(=>oI_Jb_Vk?P_0B`pPY7#fGEvQCq&!&DAKY1CjJi5OEnUA6|3NEL@+ z>0r83$jC+uVBtqLmmB|eH^sR<@pS7MJWj7I;Iu2`7OTza4O*RMqe^Lac-(H%fC{-> zVGCAt?ORs_9YjeNx4Fyhal5QaoXYO-1#C`}MXo^GCDLuu^UyDqNJRww$`+MOMes~c zm#8?2N@fP1D^$%Ysk(=+T58@Vk!_YT64(RzA}Pm+(Pc`~Z$wf8vq!&?Zj*_3nq?{p zrxFgV;QoPg0!w6)ZDy&uhp$?yO7|K`PY?_Saf4h=sJ_!_vl{idqssM0D{xY;YW4ue9Sa*TdVWv|q`B+Z7_27=xf0 zTxcntNJWa2Ek1we$IR`_RLo%&^I5G)BUhF!zcUXLP&D|IMkR`3um;OVK}o zXDM(mSP0xpfd~C#Df*aZc#Q+I6p^f8(Br`DhQ{Fu2D2iVXK`pIn#`G@;&??#Q6dsH znux0?v9z#|H~=3B4H`%e7)=@9HZUB)t^rdf&tEuo+_2WHh)4jwa3T66ovCXf$yCs7 z&d2lWwQLb3rY@rnP&ZRYsVAsc$=cli-^qI_z^Bi^X#L%cAz-^jJ*~fo6d27{fD42_ zPlnlmH{D^DznwG{+PaChvid6@qr7DtgGnVuFD2wA6z2e!ty3MPTDEk%F zE3m-W8d~kiFgdbzfHpgTWUVN0bG^Yt_O4;+zQQe@*pL;?TdcKZ?qo20mTzq2XF8=9Dw=o37uV|C$D7v z#YI8pZgz-pGeX)_0VF;jNFv(qbIFg zMM6in_Y6g=UfPMha3~%Rxt)J9*E9DBcaZyq^KW@nOt?8G!3(9u<>ZBu@sqeEA7PKeOtH)Z%y9wl|6@ESE@&xOG+|{@ zd>j9gfOik}&8x$|@4fS6>)d{M^#?z|0nFnAt9H!!W96soLj%KAJ7zCmIcG<&@WAl8 zQ_Fv!v!iNYYt{BSXP2K^7akbuwR6sj<=8JgFmv6hl^wHpRCVpMe9v6Vyi09L+gj7Zc zK+-AH8JUrO5dl)qRDK+@JDomAfM?QINBpTgB=R|PpA10FscEkc4_en52}jsgypW!C)f$a+#g~WNyLp zEJw*G6{V$&R5n$EXWV(j##_o}9nr3b3E&4o2@HZn;Cv*faZmS{Uwbq|u*dAsqZQa5 z^u9;a!S{QQ?A?1Ls6-!D0$=hZ`lu3k!JmQ)^$}d#!ZIH7C$x+o!pq1DFN;L};mngSKB3+-qSuE)Ik;&ET%$gu4qpSR;cFd&vpz-JPE?cQJE&;66-MPy>in z_AcB5Jc@+}4`K4aix!#u?7pyZf32B;`iNi|Y!)L3c;u`xzA zcKk8nK0a2s3zpThq~{UJqk_Q-VhdBa)CU>`qcAjCP=H(x@gwdWm=KN+6YSan?WKvi zf-cLB9&)drHmb#AfO$}FaEQ?pph9dn>d%fQE>MA*QUmq_<>&(2 z^K0f##!5Kw^v$}oHs0gtBkS*>!R==a(R1f!Xl;+pF)c0X<{I-8ezu2JH`}$`LQDi2 zwW)m`iU+lwT4 zT_H{-0D6##uC}p-RTQyMvA9eHtRCG5)H>id=(7WEk^DrQ zHoD4OW+wiW+V9EM8~hv(6zD!Z8#TLJ=BPvuYSGU;N8-mc>Zjt28AmtL@e^{95MOBo zI&=oq>Lmpxm!Qky>-?3ugDJ$L+)Yth9p;yaL1m8;kUoXqH9m6eCYsM^aM$vBMgtqz z18i%*{_X3vP@>U%f{tGXM4L1k4ZjtLE=9*b<)Ps@^ck=}xB9Db zzz%eF*Qe-2O82X#^9g1}=NsQa8fL(&v>KEPbTm~k3ODh8{$Nn1|GYLJ@CgI(Jt%+FLg?3hP@&c=H_V{y}(}a$6V1) z9M&JbK(A(}b%(7=zQIoWV~prJ9QG0Y3jBqAj}i$dbrMl73V%UguNYUpkbVUifBu=k zeuI7rBKDbd9L}5Yf;U0thAF*QvM15^Km0&-b^?lig?^2FPaTwQp+2H0H7DKD=_SqD z*-8CIKSh7QK7+%yro*|XydN;X) z_TpkP(O?1(n)SpMk627B?CAAIwMwBBabmGTtVp$&K&dRkw51G{oETI z-u!s4%HqL^Vqd04tJMdbiEPkz6__KD@@kX8Y%-YCJh8o|P^i^@UL#YnoWbhL&QBzO zee&?VS3Y_}#tRcV4i2vFUr^+9==AkMXuCbUky<(8=f#)mS3PCM`J_(P-f;4PuVvoA zvPSRJiQ)@aH2=E&0{=tF$G@8@uOIV%PKR2}s~yfjV2D4%LF)7FzQ3&nj9j~}dTOfZ zYPH(o$OuFtfeZ(Rq2}$RdeeHZ>!ffc0-;D=9dHTlq)XId2>z*t1y3{I#UPms~i>ZaPmVvIg z=Pj#{eT;(cS+?5{NbH;+S>8A)HfbX!t;$()@$(+uoL%7I=QoXw(c1&Q0=HEq zH{{r|=ayE+tMVI;j?OLb@10h^YWaqjfoJa0L||KHMP|g|G-}mGzpiXlzcNR5Z?h#o z-lsB8X|U$ z7kf<^W!sA9_sWGTrAnqO8epyQleQ=OIb@|qHvu6|*78cBzzG>^_Z3CM&xm_-I@59EoU_3Et>dIBS_pVy`R(>K-Tr^|;s;yV-->`Z5tOPj( z2f(DxP4qOj74y@$<)B()bO#{jSQ7Nq=~JgpM?WlCvUn-m|6z0)+JbgH^f;Jv>^?C2 zaiN@GCQdt^^$Gflxo(3-D3KeNRSm&RAX&7aq+}ubeM&)e66<>i9k}bRd+vGgzN1IM zbTD2>-@9`Ky^|e8?6tC935WuE$6IJSnEw{qx)%Nuew$3u9#DQ=l(09PWa6UOXd?CIN4NZ;%1>1*een za1VGdb@pNy_O)~H7#ht$qrgFM85;2zT}#(>JV4;R+*!rY?Ca;?y$o)^(JloC(WuAh zIuZ>>1mHRJIW1-vl3PpMWXTE3eX#neAzytp$cHeV;@B#PP_Tdlb2< zlPpTX9jSQCI2`kAIf)5?89hKhz>XsN8Z5c7qYQN2b&TKeWRLyGEsi420q_s*mk(Ti zbaCUvNMusO;-i=6O(^Tt+}x{d!pXH8o_S~Ul-2DU-+gBNn&wp>?^ta#t=|6es%Bib zKhRzDyX+Jy1J^ALm<-_@FSe}ybmtngp;xb6r`EKrt*(0RgG~jowNtjf_gpoZEU5t?hgnH~PKk*Qv{%r6 zjxsCIq0fLQse(VEKR<(8(IFtZ6^MkfGM~DX8Of|5yp{wcfED;@b#lTUIO?IY>cvdtbLhDg+$S*H+fs0Y zAPdm+q~yUp@BsP|jwqu?CMWELBOfYH-iYI7f$NzY=~JZ4T6d6P88+e0hPu^20^UU# z==ashZ{ZI=9Un91_)kKa>p>>7nJJ_4$vOZYGK6G$x=Bg}aC^u|FG!TbsJolclnYD` zFff}ri5$Ht*YH8NLdkKQSg|cRM(ehUMIy1)t%cWZQ;4y*QsEBr8aaq4;mLqnqrgeT z*psM}=&*CU(xOpge~W6HLc?pdY95CPkd;)b9gbmK1yVdL77sA4`XrU`Cy+qT!Pg6c zRX`M}`(oxsM%NWDhT{$Hc$dxqjp!aY_m)4=QFN5-_r$>h<|@I$AmQ;fY~)-f^} zv6yPCC#%7^*C4G zY+ySq)E81?z_b$09w%zbR;!5E(13*gBf2s zKIeDi`0C?u05YND^amY&c>0MaKqWekj;CnxeWnWuGP$4ctbzG2tHzK2(hdAMfln zJozqoD*5gjm@#Y)8V0XkW?Y6&FGEjV3h37_J$shGT0wol3}hN9DLMJ#4`Nz?D@g7w z5^Bi9%SzCke&G35FtZ=JbS%h6FQfPei}r!<7okh{VJW(P5y%Jmi_lgKYaq3jS;3U2 zVBu++!<8fwy%A##gM<5qf$ja#{9#DlAKaCT)Zh$gK=(4`Xx>3IZw)lva2icr0~$a- z3@aZrG1oE+@TkRORvSze${WO$O>l0ZY&Xn?8wP-xespPTAbFktzClnZUh-O+`yCe! z7q@Su;rEAAjQy+x1ny>u=epI1~t|Ni7UT!4VVw+uTHIP4#l`x zLL0i*K^&L^3{WBA7FsTv@b-LSL5%)1$>Z=G8T1-^JWxD0JZIJ1(A?E?!@@Io16aKQ z7?y3@whVo<0j&mih316qp}8Sjcy8E^AE>`A{a5tNGbcBW7`gG}Gk{8a;S$ZK9>nwE z!ES0RSQ#avO(K{e6SY5vyXw)MBJcbS@uFR?WTQo3*ca#~JlNa7WxI;v8|HgN*c*h< zEnsNQ7wG2CQ?_0PfY&hHotCEK-Bdir;#wte9qAo2*RGw}NntX5>rOOy=T7_sAG&*E zZSBUp3yXI?yK7ep&H`!;GeWq#E>*rD5jjX1gIo}|5TLyvO0U~l6vG8!cjEHB4cgGn zIbVRbFX+d2i98F|r;5E84E+KZQ4fZu=u#7|_d4c#GFSUabp@@gw9XQ^P^GflTCSkB zh+mntD|Q!`Ry2C`=r^;|UF~t1&<=8(G7t*b?JAyE*}*)UL@rmDfRt9cDnt+YMCBeO z1QH8TTrq=rE~Oev{!Twmk`ZvA?RKlj?R7gW=y#o`xxBn&XR4ebu!Xsqt`W}Qh=dzO zy9u}ZLOI#pJ!cS?fw^h>LYrKM9&lQ12EAO4VhWYT&9@X4*iiMcUt59_wc zI+;Reuv*HjKn!;z$Npw5vp6*d89Z@;0bGTA*lp+s$kdk&Jz-E0>&;S?%AhkDbOx1r zPPxUQ#myv}kP#X$l_|9*^Ai%4T2GAD>QyN?a?^>SeFfTR$MfpF^j(yNP!Vmsry>Tf z#W}+l-71mkJ66cMJ!Z0~T`q4R9LmdFPmV{g&uYuebY*LdS|eTKz`Uf&(fra&&B7bp z<;;ny?JAW@V;N9hKEUQwnRNC*j??A!WoG)l&L>BXeA4OlXJ-1msXiM3k1@B=H<7#S zDV<2Lh~8xrrJ_sILogGcQhH30UCbOq5?qi20%`jZ?rxK?2EovJm%uFS>vS~?4rXp+ z*(YgEq!1DN+R#8u6EYa)=OU4aW$1c_W;j-alp>jwg(GQtBqZ@fBJh)l<#1p<&0rUf z&WRWn(zGEJt`KqblPr8tDaX(m2yrYqM@#xkNNkoEKqR)cFO@+2%1UJ__CZ#SAC-)R z;UYlErNsO;2AE2KQ_`Fq2SS|UNj8NmKbVMd^3bW*A_Q^C5U9Mom??B(JC%mVvon|OUlHp z@o5!kaI;clbR`eK9|wdLQmG<50L!EkTtlxP;%fz#0tL7Hs9`Pc20YBB6qU z+KChGaFg9Wabj&W77A1UV;Q%zlh7n)2g|5M;wuEc8la=}YoY*U#*PpO`se_aAT}n6 zzOKi&**&ikIENHz*3h3I#Fghw509x;-@5^fGHQ{~$ zUYya%D*DKb7Xi3`La&yrj(+!}BLigVIU9MI5uye7O+a(`@z{am@GOkDel-w&ZvM)^b`H2NSE5j5>9p# zgJt*u*B?Y*z}wK5z?>Y!9{A&BQU2n^f4saH)50W9b4zy`EFNkFBWdm!oqO=$;^ZJ; zMqdgkZvEFk7UN`;uov_by;`IpYdgZyjvKTBJ5Zxffdid^Ysv0f$Lx#6qgSEN&>0-- zQ=o=xJ7&|n>D^>L?5;B|R> zY+zQ;7>^liFK{#1l>G6HTlhR(6AUh0DnpT^Es$r zjB3;Cuhhp(pRTwZ;CMI8g@)&n-z)+T(2u6#f(I`W7Z;s((`*+sFjz>n7}cfXo>vAV zz~U32q5iq#KXF{>?8<>U4^I+dU4_Wu0;<5nWI+Peq|hZSN*qq1tOqV6!hWZO^l*ZX z!=Ml(4yRE99wLZCeFU_SRf*2KnHSP`no^ zFRu22xKIbqoIR3`d@ioA?vZeV^T5)dq+?zX&z}Oxv|SMGFYzQS9y%|eSn?V;4vtS= z-4{F$o=0&wE_qGzn!o0+1-yj520Y&t9qLe=-t%wblOYUo0`S7wH_jyi&vzxbFuq&D zTtn|YS00Rvp2fjZNmqOpw~hkK(Zueslk%pu5pnbR^~4CG7Jrk6#*bIf?Te;;$ODM4 z;Gcf*H}k?v!{*_?UyfXP@0r2R&c%Ps)ANR1iJeytp1bnJxx+x+kt3k#o_msN5;$zw z+!woiz_@1z&lUa#KZ|R!0S#teW8b3e!Y-dKwWy0(LEh~WjBh!J2?|=^GRz>FA1?@a z!R-Ub1y{a4coeu5xX$j|5$Tl!l<1Lr#fs)>qqZ%X(!Mlv1g{r)I|%Q2mwF)P_KnC7{=)?(5E0k0Nr3n44a`Q1lW>0!W!K8*Hn zo$>1YdEdM{wz(P2EiHYsysWJJ&C*gfe(j&(!{hSvUw9tO1q;FMoZMvF51Te`-gxGR zjhi=bBKAFTJ(uBn5;>9f64L~3D<(#2QEKr#Mz6T$pVuKU=IGsE+yk#JX`Il?+@72V zcbpx_zLlHVOWro5-SUCJVCg%_#aN$hQ0=s=yEgz1V?~v z!!XfN!touu*tgIwFo*g}z5T-Um1fR)H5Bxg&YjUE7R%S84}q^|y}{0N^}hOA_N`R4 z(N44#&Cbb%H}|YIuJ;yP);e6)^ynr3TR;%*Pqw4?aLt}U9ZA7%#O*j<4l_pBf6%8Q zGC9fX&_}=vKl>p0FJ=r{M+y6)6tf%4+y>zWbD`L*+sCUhpP)~Pc)S`5edLPpV1N$n zA2SzCLm#54^VY2~hC|!Hu=qxnwi=nK%l4wT5L-|QegIYT*07($0fSfkFac}^pQ7JH zucO6df7;kso}!Bnb$-qmL|U>B2hR1AAm8JP5?Lr{2L7ZX9l#S*Uz|gjd_H~VtqW0c zav?83A72BQ&nCY-ar9GTrp*myY*=+{z@UwlV|NdztS#QM8GSmTf#+wnFZ^iwjKwVt zaMz%RuX*9CoNV+-?>>WD$}=+Zb8Du~xarf`aqH?@^wDC}rlwg-0mvKJI=-#s@V^T&h%i>BRv^*5hi2Cq#nqJO%zPxKxF@ZLN5 zU+9kj^9$h>k92-ce~;l4uLPH*vzm z=fCiHMh&gjY60-74cT&FLBBH99e0Smeb6t3cH1L|8hTZY7~DHER3?$jl}RTM`)wKF z-X00_CHfp#sdM}doh$G)0P{C#z6RVx7t;qZZz2R`o>W1#0KnMDb9sF1_K+p2{Az0@)&%dz|XI!e7S$8326i4t zDiZ6FN6zNr!2b{r*W;0n3I91BuE!(E{r@>0uE!(j#f!vqlXyhaEEVq&QdbfUw_jJh zRR6#XEzrO_a3pp+u0oG+l3SEd$9M$%C`3Uo;__4H!MSL>R}$Aw#y3vpZseuD?#`#3I}g3NQ?AQ4c&Z>K#6U8hg8pP-huw zCRt;4$6PS|Xbqe}s{yrOl#W>Ga-f~?8KvaN10v~Juq6qGo<-X~A3uW_iX$+vctAgj z=fxC^K>8stj2f^6#C7O-5O<*GVUtR->q=Jo?l142eiwap&DgeE&;ytjJ_uf5Y?x+~ zTIh@{jH%tc5B%DOe%nTmPrgUL`tHX~An#4+LiYheJ0GM5Gd4U2k@)KF_}`69#eWTs zLVw(oPVf;R^E>8i>Qa1-U(I!KGv`c+Gj$_Iyt>3cp+DM%-oyOJ91tuxJ}!Wn(?B>xN9rYnoby5w^g&Z|b!NhYx#wNpM0d zymd+YjupvOB3<&vk(1tdEjh4b+VoR1*QeU%35-J}6V!-^g*)7~n=wb(mo7_>GqQt> z|FIxg4o;89(PIRDY&xoDCgOUFiRMk}CJ>_` z%JKpy?8ftqphs!M^Q^FJpa<8p0w7Upuz!K?q-~45D{n6HvfUDtJqN z;nm4EF;nsGSr~rxTN-47ai=<7JV4sF1wF>>$K_QJeoT;FiKL5PT0j}N4lt9^2P@Dh z)WN=W_DQDfY)n2#doLntFv?!saW8!rExDsjuE22*{ZKePYlo;rGxBj`1BrX|dlLW<^_ zvTl$2wlrMgFST|4?vv-7U-<)`^L@kaA8d&{pR;ma=~JyPxrMR>U*r8yBiRQubrT0+ z9(?R3GEm#$^}Y|kM9fBoG*Sx9CsR>!w;D0q<(15P8ORi|9n(r=@(F>I;rsJSTQd<(lZnZr_#~i64OZr{rwmV zYPT(J{@w1TB`qdU_>nsu(WQgZYj}0UeB)G2+=267fgWFR#zA&shJ3FSxdg8|614xQ z*A9gf1%}Q?Q{0nQAsoT+c!X%E8=1A}9VF$Si3m`x+2c;A>;IzoUJV@iuF|W1{#7^?wojj!mVgG=3%!`3JmoDQ8*f;;mwB2 zeovUG8=Xl9CA;+!w$njuZ#xilpp+RJmRe!f&P?wfzs}p)lXMU_nINk3hv0u*3uimo ze>FVa1H5uxRIs#qnzk4$?b#S_l$2wtkOd)hAoBXj=k=T0RfWty8#OVzlCcK853*zo zwtK&bO#2MnVS!pH@mkO9gy-wz%AY@iZ>Cf@j}97lcwu8t*@Kl#l(yDb^AVQb zM{QbN+lM`&N3U1GcPiw3?j&|k>}*B<;Trh;!eJk^>$9a(gmmNltAIQ6xTVxU1lZ@7 zxt45UR|US_>eaq$5|nK+lvprOMpo+-)v{27xh`BKDosDUGS57Xi68Gi+bfTGG<@Ud z(|;N>r{iBkw9Iup`TYU)pt8@6=mHxN|FUXNtdlRcpD3&2nOK~-L$DwJH~R2da_8>? z+-{~y;kW`{g=Ostv48OTG=^&b^>?~$x~ zXc#$FuIMB2Gx?D_^?MSrJ0f=F%9{NaOF?-TP)5i?MK~yqD0UVlue^SbgPQU&U@tkv zkvdKQK3&eO=-Tglwl61b>}vlW2~pf+e2T`hHsMj}nMp+{t^ z6n(c{T6886KM?&7o`dD(SxAB`UauVY`S42KvFhPwOe&Ek znr{u9;(4>ZTUDlTp@p+DB$*e!CxkR`tLmHQgTmNAkLvFYNh; zfA!l)rzpsE?>&nxyPdi7KJt=??+Ag+4IPY+ z=UmF!+l|ZB`T4${I0#zYJ{iY?`(z@$Qcvhd_-ByR2$^@XF(}a25pvLxUfej2LwoKz z_~=#sW53JzZOc!6?nmA6!`Hh4S=O}ozsh;L|o{k;Bcz+MbG~<)($jD zFkAKvtheg&W1j=^2YGRtw?5a^H5i!ZQ@XJ<7FXi`qo(St5j8ZmJN;U2&gb>PeP-la zroNEr0aM0N?nT8nvXZDPsE&;k`nR;bcrK%Q9XMa`H*EXT50$wj$D76AFISTPFdOkj zi#VKdczcqrF6KF7U-$RB}w)CkVC<0f$KjK&pT z{o7ue?X1WuQJ#{@*BHN11>nfL?8}4v{82;CB#@{5IveJO-0^*T*!$#$5xo4&@3phD zwTp);;8aoqM1#clPuG)MD-0sK{w6cd46R24pD)Xi4@2vD+n$X@D+<~W zh~0Pn`!8Xr-Hj2_u;(S&Q}?bT+N+=Pp#6$>53(^+1!5Jsm5Uok^43QlzGY!04#~|_ zVB0(iJSUoEOTR=D5(GR=df1rE>rvLiz}4;={!ul29X~2;#_2Z?ppdcxZ-!W3HhHt50ESb-kaxZWwCE7F)^G%w$O}Wp=+gHg?I>sqb&UV%@}kv1+ojLJS(c{AN8-;~a7x<;0$@ zaplVy2If^cd#~vGbU0V`VXu4@I*rKW&M6L@cis$uk7`Tr~b38DaMie7m@smn>TC zUciepcW6$n>>!!l>6DH>QT4^;sLLQv6~Yc;#oTc#fDWw-=xer2arXmm8p_&am+4;& z?(kENtJT)9&w4I_zReiS#Zo_kh1fWNr?P6L!EtWU;m1~(5W2KdS~pEK9ShPA-)`;n za%NvZk8h)LeuEw--}enavh{@+&zau_9+qTO2~LHciZ7|!O3P{D47M4VG)Ss%xN_OlOK+p@ zb+mGt{43EsT^%O%QJ6nQClW$0d2wTG-tS~K`!J6?4_H01JBvoP=izJp$9@sis>~dp z_a4sOK^g^77e|)TYy_TG9of_ya^trK^~Jb`1eQ*=6oXNr zA$HN7mwB}p!}q4+PdntBPjbi3D1Fa;zUwwRyp^v`0N^fn#^;lC}v$YD{v zEMIwvbS-J6W%uz%%-jn|GKoavJblUbdneeB(~f$j$*~iG1f8Wjf5u2=7VR)mpBm;5 zr}%BltAcTrL%kv(x$fb<`1&RucB;zOOrQxB2s#k2$bYcoSn*xwm3#loV3?%zyS#FA z;f}t26ghC5Fj|>kj(!Z7tSr1qG;L4W12hcxP+p@~TY(LrMV&v%FWbuX_ zy&pVf^kBNvp9}z6#5S01G)ik|6hsa>;246`h0-cQ3SGp2uw|)fd0N-y+RYi$-HogP zAC&YxuEwKdwH!IS>1dgLt&HNVz7f-9wdF(1=E%IuMs1*6P9%+$QNt%h`PObFK0fPo z5vC5V=yP<#Z3|=PPYNZaBh?#`Y(2>B#Cz!oYw~}lj&~FAf*>6)Lr*hNaHA`T9)&Q* zsYS-}aJ zjsrif-c`!{o%7RJ0oe3U zuDSnZhMumaO|v#@ba3af5T4y2(x*3yV`8Lhztw)OXm?9n7Lc`Slkxa;1>LDqa7hx! zeFtIE92R)&*e72!vF>+ucKq(HEm_VAnp8tQ-;KWP+1K=4`N+89{%H&o*QIR=*7~Mc zRxb-Gd^RDU%n&osH{f%4k8=V`_f<#K*w<)0PqqP^Ul<&`jK%CO53sFk=ZO1zI~!*f zp(?C%ee#zfQ)XZ@T(5p^$cyIX6yG4f^ldauFK7ovwVz;vXZt$Abg3RPQoRo-IrZ`l z{`asnyLe;>nGG z&a;J@-UvIZ(bJLXz`cY9-?5FfnQuQZtL5!O2kjj@V<6_$$ER>%-*Sx!j|w*x?+=?q^1p1Z zG{0R0qCs>FR$v167d-qA_)Q>kY1-P4&-5&1-n1mAqsp{yUZ(`^m9*b0?X_27&D<-4f_TF!Vc@~Nd?a?~sgpVHS_NIo&neR-$#>EG`5BLV~ ziuNxq)29jH2U&E9NhZN|=k-}x3yv^cQ^FhKU3-~I+~Qg zGr!aSn~ie;gPxBCVgxdz>T#rpSxP{Rw33iV9=Fm}z~;hQ)f(bZBj)9AgNsYM{k4ai zP^rZKfL=h~WNd68{Ln}d7O#V8>|Ec`jdZ2l+{ohh1#)Db z>*udt`!ukZnS3j`(pRLLhp&4i-LmC<^z)Oi!^l|N_C8)~YUeusylX)!d=SJc0{ZqT};jV{ycXyuo$2D ztqHv3LAx`3Wz7HJJu;qfEhp1By6&)+SMyyl8qKqg4w64bL>^bVlmNCMULnPy%e9c= zyIEaFEUBhkJ(qDe+oCOpSbLEW`WIWE#VxHo@CiU}qE$@$V8^ukV~%T|VB)O8>`tl? zzYM;s82rf(r+*Ju7bi3DLPKMWLpFw*=9kYsirEYuhfG)Pwwt%=m!Hd^4Y?d4XA_=! zQ_se3t8-2#n)HXDR&ZZ|l^h@Z7bTqx5=j_IAn@JE_V4Pqd z&3Ko|GQ`eUaSH;(P_OrV*3vmpXyhn;-qHI~DYFJq94Sd=7Pz6Q^RgizAk){NB5tAQ zz?`AGE(^*fJBs~U;D^&*E=S4;5hfsEHD2^J`V8Y^9&wF|H354=91GDrusFJ^wxT8h zub>#%xNIiZTQq=6A{HVLG*O?Ui$i~xtBrYR3}8-A;^DPlse}AC{#<%1C_5t}njBX` zm9`%(@{H&Cr?<=HQcQMwTG?`Lgx%{iJMFS8Im@x~7V%L<)D=Hx9iJx)35V%kztHjf zd;Y-*Is63djQY!69EDgI7l|_k`#99q+XwmYC0_>w3lJpS_1akuCDDZ7PsW$&ioBG$ zuBSJ0r<_#I0DQk?#XzgH|A%r&B7cXw#>!vU8`3%pgj<5T)B96%sg(UG(F!Cg{X3In zOvBO4!$1G7cjd?dW?1z(;^lv?u=DtRkgJHFtqY>&G%PRC@F|%$@2`Nlnec^$unX}~ z6v$_Hclq*lxnTl}F6?E7DagGP{A$j7HgIvTrh&Pl*ubeGy9akICymxSfN$UA^xN<3 zBpe_e%MGkAuZ#FQ=9c(O#&ujzY3FYvZ9r)&&Y(2cAW8+YIvFCSSZ7-8pMitHGAZ!nL4B8#e-Y&Ki?4 z*I|*VQ+=bO7F-s@Fd$3g*S3*qAoP2MKFHuv-SXm9A6ft5wa-QDccwov(b+Zh2g4yk zx`THB!Pm9AK*kVlwr9y8ztStikd!*~Xa*T(T^J-_`l>8Is3I})3v3Ny`a**EMfa!X z5#+dfCVl(5eGQ$r=%2;Z)V?O#*P6a?v9iQ73w9Yh={R>%(@b#_(D>M}`*DCFQ;9Hlz$Fv=?wa}NL%9XmfSH6XX0f|MKRok%7F>JE7}zr$GVt?j z!-u+rhOmi1rc|lV$d|80M`f$*vNI`Rj!zF zp6wy;Sh}2w4e24T;)$oA_fnLO&EZjySst_5?tw0v*Q1+$R|YJqZuE=aQ=&>joAK{F z6F~NmvfcTIC+~&SMD`6|iRX6|1G6rA4YN(aJWXsw98*o?(aq&5KEp>74-`jO08}n5 zyHv6SQfXzO;Ya+l07~(D8o#uJB;}(MEOVR3%KrS+ot$%irxwnFexh`xSbluyged>pK3@5Q@T)S;afwwpy8b)!i zHV0_wlIEN?xwII?X2~~X$44F0bDOh9hgfnty30`_o-`MULZR#?#V2bf$BK<#KogS_ zT$z{Ue`&o%e7pMQD}HD#-|IcYxY6v-GBH4NV%0Vy-eO&sEY58Wlt#}NS&t-pa2xwL zFE?xLH0Evqq5DhiUNPg`8%#KDdkmU=p;gaP)7Z~$oKy5jc3ynnskYRTH= zdb5)E3svJD5268Q6f(Z)s`g|2b@;sNzamjt!CFCxqcJN=yH_5k2ahYbVGXPu8$F*1 z7DOE3E*wCLRa1u4A9VW@Yj%3_jh4Iq1G^GJ39@u868fpTjB;`MFU<6mXD2U5*nf{c za&yGIw|F8Q9p2LwYhiAZw=l&)BVHuMA)heoj}mARdt~IhTj_0CC59eg;09t-`v!9T z%z8Cm|Dx&1`*7DZEQMDZph26>pg0kZgY;@BG_6|qvQY;e=k|>=%C6z!@IOj--?~Fj zS}87uV;Hy{~es5v>A{-?aSF9d+7Qq^_&pvEWpuX;q+dW-oj}ryPr;upW1Y{=9 z&rR8B*6(CG_(akD3#QwC%U`JlI;G8N9ZV(RB{H9$l@k&(X`&*AxxizqjdcHULh+Q$ z3FfT&VxBXjP3Pha&MTNu6WQZ0VVOdPHS6KhhmytjwP&)QPJfinbz%XpAH>zM=mWUK z-+xE&c!xmG!;&@=2A_I8+EhkcHzyNc*R)GEI-y4TFN7 z7jW;>mD&4eQQS6xSNhKyRuK$GWm5a;j7>KFb`Me;yfyc)D%FaL#QQ9^Wn5uD4G-r@ zV5Gv~)Q*Z9B@$J5U%lDb6S6<{+H=?iubPyge>&#uF8fJ41XH)*tAHK-r^Wfz{gYGJ z*>w~)cNTcbcoQaz&C&PY&8E9xOY=bgR7af_R3;+6-r%fFr#Ud@gtg!8o95Wev!LLq*LT!#M=Idr9ru7s<=lc9@1H=HYu zj<@V(VtMRUGD$bRToNYa^Rv`xF8$Smi5+dPjDfATQp>~K1cjb0D#TVi%z9{{S*~Xx z&T)=0N4|6`NI%{wj>DyNdu6)hQr_pftAus&#rLyT8D!U<;qP6_(r5r9ld%l`V>A1P zXmHh0RC2j#%=+dd>zPPbnAP{$T9=W=I9^iIn>TZA>w#J3_qDiy;&nRC*^NW6eysxq ztG!!(Dbt5Ie(!wLjhO{Vl2O}Je0Hu!^rpWOQQ!w`l?ehtEw%O{U&aM}LL7OVD=b#^^NLTLcJ}COzqC9_F znODkudZft0h91Vljow%4i$G#?TOLBp-v5%az4|3hxBisT3eVVhUDy$(vtUS4{pX2! zrOVYoS!C0gDT1c_W8Dz!k4{X!`Sn%T*EQb!@qN$N6HO}-0y|@WO82-p0nBrae$XGA zjgz{$){*~BY-&~><}ZL9MyA=>ORU%JG2G1#4zFXbCWjkEnW73Ob-|C#z z=4yXbz5y2!S7+?{>nld~dUQo?0 zj%DkvYfd;HWq(f@8r80Q<|&ghs9@559^Y`uoW$u!&o#6?!M^RnI#DlOk=A;Cup-i) zRP2Nc_$ijN?^5xqRf;h6xAU+AG$5VR)G!31QP=5m0*VAyVFznL@{+JfA?%c z*0{)CmTA_AW<~vs?W{rWuTpSJVMc?@rD~SAwxS=?@WtE5Q*^zSyuAb08eiQG-4Y($ z-T^3r5+VO7c@ebuPiCR&vQJg!e<^G(T}tdfBX&y%K$?U`rPG8hQ>rz>;^=qnU|?6+ zFY7BR@typDYNER6wks=WNi2E*YAi2%wz@hx+C?P^LM@7{pfa566U;run26k?Tnh6> zUXcO`>Qe|48WG7lFQE-~02Al5a0Y8r5li6L+3>zQLoM@i(%<*zB`%g0yfp6W{qn$T z=Op2mlpW-(ZfqXw1$DjokaJngVg9M-BYT3SfMNOh8{^BOrQ^`!lqm#+D7Xh+(xU2I{0*ls z^v+L3N!U~Fnygp53yL=f33YS6%PsZZb&I&Qw(iz`Q|THsicTgPLO8B$eQ!v$PvS+7 zES`=PDK^}x3>J+;`zYD&j~IU$?G~5@w`FB3JV$T2g|sz?9P;aZ7%*!0I-j1dVpAFm z(b;BQ1b!XV%Om!gf$XIhHZ~7}jd-%1O%b?$$w=ZpvIp+C}K`xEo8i6x%YM_d-d+Z~3L>B9)NI zRp~sD;lf;&EptlFR@o}sb?9kCKHE87&Cd-c@lTqzr8=_mtc2d+J@;vAG0@%|boggp z=}biQo1EoqhlBZ!f)|psPRZ?L3O2ws?J=>>5wq{2z@KEtk&hz~>Nk z%L$IE$>NbW6IsV4m>lE10?^gVtXlOFcqIBe)b`CfNNP zy=38HXf|4(&?tmlsg|i>nU|uMhDzrwRF}9*3_InX9xu4hLBO*PeGE5zE=#j%E}{wS zSI_1Q8_44IsXAH(zT`gx`MsC_J>EF?>vJp_Z-pNF6(|9UHl7`M)85*K_L zoi=a3r2h>7EQdHH1^2Oti$X(3tm+H_7qotIevdE7^?QUj?JOJG(~Y}?*8~?N%cHZM z0p`|+pJQ8PJj$9(mv~LMPnS*PPN$b%xbny(wbD4s8EI|V8F!$(4!d0F5Y&SBgMI5I zT34DyZFQKU35ikFKn>Mgv#e+*>~}fMxL`A|siqXYLm9fQbioNl20{T#ZlvQIIq_d` z1^{DkwVYSU~`b5?r z?)1ziLZs*<4axe18513iuzw4K>+27ryl6vh$U^0d9~z>xrUg-8i&a^=c&+#N*DsRJ-le?9pQpOW+`Yr`o}SM*S;=5Lx9;q5 z6Y{y1I`YMo^Q#M;A*@bR8w!jP{&Hd9rvC^Te!Galrt!!29%#USv3m>QDY7}-q}gmE z(v{&NW98>$lh`+pvhjMV+L(N-@8M9hwEgSWldmSvvH{cte?j};)-v8>*RAJV%xry9 zz9EV-^u+?BbUo&p#Ef>K0Ad``kq*|Y!kIjK`P^Z!sBuLk33?tY&-V0$&PDL|oM7`l z$GdWG>dUl>$%QA-caIh^VR=$1c4_TG9OLtXO%Dt?wA6?n!|gaLweaTBpQw!W{T9$p z&~7fLK5k0bwQS@3RIMm0+ zif>dS=^i|U%Wi3-zy@y`R~$*>epysfZXIeW@jbh9YeBLRw0OR?9UgNRnnn-8{6~4c zqgKm!WWI_D2d=LNiqd(@T?9L(gm|h9BnWTrun8C zB-emFG~HBt0+H7HRhDDU#<<&rqwXeyD5a$&-Ao5#qy10JfzVsLulfSOs1U)UGBzz4 z_tr^YzVQszY>K8vAvLApi-K7m1J#lDQgw&!Bv@CzK(8mPn-Yh56tBLUFzXLLj%xLM zjhfI#aXQ_Mk$3a5xkTk`)nN-}iY$`Qz*OTiEdR0eJ-k2D*pcZups-Kt;#Ew3DKRcV z?KSrm`qmNCWdD~cs!uOBoOzPv{lCT0O)Zo6(wndvx7?NC(BS%H-e(AyWJ{^Jubhz5 z)K$8i*t*caL?*|-=xYfbTc%H(5NCs2FMX;%N}0`dL4KuoEN5qlxo91vsfeN24gaE8 zAQ{?wiA6u?pxQ?jrUu@PNRxwU*p%((0rDl={$ zapW*w3;f=c?;t?tNdD$!A#2Q{598!Uovs;0yeoV^aiRXJ)Q;XGTV6pnn)F-xw89jt z32vRJI~F$#QNA={J$@v`Yzl`qcTN%R_@_qY(HLMM&ZAn~r$C(E~L8Z*47AIq~c(b&1`?7UqN5+tHYO^=VT;H9qH5yKH{M(=wA z`ed_m5GPGGYt)%lV_dE{dsQ8A(P$XByV9O=qTq5Z*-@sjtG zA9(})>SLZQHH$G^cnlwy-*8fmPkp^K;ls4S-n~%`V08DB*dOGH#~&{eeb#@yYIzbE zZad`iN~`Dz(6DZ%HcYQ}qlAAK)TcwduV!12BH^rqMH3A(`rhdA!JpUGuG`Yvf)5rz z8{sqmUHqDiW!99^VrgVnk_GF7ciR;XDkjQw!quC?5V6c;r`YZD zu?d*xQS;g3o!~~j3eWhO9zYC83A(kkc=mLs&ppMRA@Psh1>U?_AHJdMix8dQ2AKyd zNh&;4D15D8`VK^Qshtm&$q6E`j&{-{AAj8u9AEY%+;U!`&Yjaka;%!| zm!O}JZC(CdE8xfBnFLXTok(R!(4SADI`F<4z`{%(0i)Sgzda7_d1K>ez<>-OAdX2B zN0OGRn(TL}Z(e?i0!K51GNH;iWJGvbVdM0!?k<<4KZT^}^uwO|7 zFH(3%jnvN_WuZ!5Hhrdb3reFE!WT732)p3XL9;PKA3b+bkD4nSDM8y7*aS0p?CC5p z3m%dc(&?<375a{&JA>6J#`tKmE&6#4>xMf%$a22B|)IlADuaQTjF(P_xo#yQ$q#2m7F zWMJ{PHC}YE^?^?>(s!_~+B5b?#ql}fM22SIma9P;*pP1L^Ru17Rh}qF{nSRR9xZOL zTj9dkZvmj~GF*JXqDyCQ$O>*~ZF@!jyUfBdXUOZBv3;y?x~^s3|xBEN`7SU$%j1y|c!oD*AVXFrE2RW#~xPz(-8N{J(IjSTVlT;nac?d?Wj2j z{vj&%#-@@~d>Ep5H8uF1%{h=+j;OJ)GGOVEFu$>08+`-%YN)Xc+8@Opdy+59LqWYu z7($2R4d_?^AwFZqC877i?8nn;TD%8W3Ka~$Q`4J zy!ZEO-=suvGkYzdnr8_5-2$ZI%zB5P zj`Qz00@Wag2awM&&Z24OA0n?ZADl-yr@bpFQ#1!|xapf1A{{Q2?M=I0JJpNdo&MQP z#TM%-jL3)ts?_UfIJ&hff}@hG0ku#u(vXOZz2*{SD2JZpm|4e!6|)fMO?%u1^U=o( z(q#W5o!;{X-#xN25Dz5y3dqCJ#z>_g&l%D2kjo5H#*8;caf-86==q>d%&zwP246SI zaWT+XH_yw@rU4m3`qwIL{k9j*WKw?CJaW0bXu-TIfUuNgkr4ZlT|IR@w?; zj3Q1Xr^Bde4mbvx#esiu2o* zfx55Ru5a;`3)T=?V_^0bbPK_4Q}841_F%FqT){xXHFOq2Z_c`H!^<0FrH+jmli4!J zSGx5Z6t_8x(>Sl1gTPZ6woaYp(`8T;_hNI)&JoT5%~-OFbLE`iH>XThzRj@N3W(Sv z9sClu7K`53DS+k_pLDb@1@2Qby}$3|mQosWA^9goTu<;`!+Dobq-a-`C?k%-WxTxt z;HBbjV2979NZPjsyNp_180Q=~m45ZoT};IAc)Q_ao4;*DUf-TE+bP#k_nflft51)4 z$vH(toD9rB+s0^=Y`tlllr*+*BC0UIcH%;RG+u{AJxSa@8k_D z&`#6#D`EGlt&d!+F%F{R!(o$x6uYzo4U~|IFa%}&;)C}tWQmQhPCAnZ@V=c+Dd5Af z={4B_AM&K+)s7EB_QC&U@6%$bAHV8+^`iWHtdH@d&9~$)8U1y_O-v;|yDu}>w-CBK zmP6BW{+$J#Tzgc2AoB@S=<-lhDc0v=wArI8UjfRBP~h`P18{AL$uD5-sZ{{fuXP2w z^XX8RAG|7dehhr@^O^VZ-5x8pTsw6uTcoBS8_k$JiGs_-Y}rbX1Kqr{qJm0yepu=j z%&5;96nGmF5U1=yL0SZ1WJpaF z#xfXtc_ysN`VT+R=nx1;`R* z{SO6YPf=&T*?2#AKm@N~_iIh!LtyvGMWfzklJ38^FuhZ*874(1@m6hl7k=VBD8;>D zDc|4komj)Z>Owhef6I+>Z}ip*?W!qd+lW|)NQA0rM2=(_kjdJEzaR4!{*9VLQpK9z zVN=cgdiD1$&-=<66r~?R<^Mm#);=2iNS^a(^*%|-ZP|ybk)cf8^S4QO$rJDHMZ=XM zFCNx26yk+Odkj;pSvGT`mIiK4_^gAcU$*sE4`+tjQwCxljbF*D7 z;oA7cWy=f?pzt;z;rPlX@Rd#TV}W^;QWKY_X|nv^0{tXkDK=iI)n-c1In@=T^uOyN z-2HF4{VT{)ymb9U`sYnhK|I4dmO^6@LT6&*+r`A4VsqBe0g6%x#TAS+$b_W)nF{XB zpx0vu6N;NMv7@SPSeck!g$`aQ(v?*;udHyO>>=W>gO}8m0r_G=!APG&E1SFlX+VaB zs~MS6B}uj$27RD?*o^J-EDs>A5r5N?KbU8uUy|Nv{a4-%Vc;$)j&& zQuU&vqIcdruBMf-G2pTD)tmY5uhr->u@XI%lrs2ESwY%I6!ar}K@erl+&?OaxfDb> zNgeBxLH>bSqZFII(}OdP!8S_FY&f!^n#4)Pi`$`+Y|N*ing01)*o4oj7kBks;gP&W zl^Sec87&WQr9U;H3aE?_nT;3^MEQ~R&r{AU$DSq)R#D~di%UzZXk@=@q{bp?b6qLN zI1B1Hm5G#?F_s*+uyNNHFwQVAueT=?CRh@?XNL-U=8w2@-AGDg8Em3!S&2R~4h!ZS zcGEClrf)t{#sLeefRjhsn1x(8+SCEeiro|$O*n)f`sTQ4AP+(nm%>hX zcm|uPWWk}WtZfJC9S1$K%P}F#RHjP*)Hfbr*HqF$ks*P%<%4g}F<6=?CW0BP-yTp^ z;NgEsEVx6Jcu2;1Q;E8$Yu$SA{d$J*3zfv55vxRT4B8sLvr%v^djtp<$q#+2Q?#6x zdj8Y`L;+Kz%X&xW$94mtOqmEJNWwQHQ9br5I71Z5aPWo;gXJ2|SIg!t2q51$xZS^b z4}-XO>_P6G92&DD?wUshnNX`NPQ^XJu0B}=sDpTVnv|l&y=a4jXs!3z{AHtC2Hx$k z^{1sQY1Fq%8%rziw^tmwl+%|eMvzSD;f@RL8OUiyY=jsj}YLgDrmkmc} z!xyqkiTvI-EdSabjH1P@aNM}`jKy8YVkzeqjOkmxTLcv9fv3k{=>7evHrBXD6a2(h zR#YJEWFaeI?Z_x?Bt?Z^*tN)FI}Q7a8shRDQ4w?Mf8r?|6ooD6L_S4b-^Z@s_r@!2 z1_CxVg9mSv9AFGa=!gym10%56&-IDS3jsf2h>M zg{KXIP?{;lC@E2)^CS9MQ8A)$qIoz}^xE5n?aUH(ngFu19Tx%I6o4QkIvvWy4rTL>@ct^c4;@7vkSGEqDlbGW7g>;xd@$h#?{jm&0gs6E&BV}3 z!mUHlIn0Nz<*%YeQLCbfJskxT9R>LvVgrPitsRp`Tn_mW;}gY) z0f~KLd(nl6z`_4g&ZXv990607$u$jJ8%(M1M0y|ksLPLtdvFf?xc`Iehr$nDt~6HO z;Lu21JQelj{iP4myoamb;|S-FTVLPC-*C&vYlj?DOo-2pIB9_wmL^V zxmi()SGgheR1jaiqc0WXu=P8JeL0p0oVWw$8P$N5_2*FT1o@gK*UCqQW?ri@8iro0 zjj^hvqQdaX$JI3#*1}!(Bg?Nq?n3l817WUQV(Usf2G8o2yghu!p!sQ*N1>id4}1&{;b+`~YTz$Qkv!*!;t=qR8^d>?G8Oj&H7Znx z+P(L}jM!Q-Y$4gzfjcR6n;&@xH}FBB>%iw%rHFf{K9M5w;ppVjX=)$<!OTICYS( zDoh)0D=@f3?E@sKlJwte%eSU3&Av5CZo!wcX7C8b-#%LN!~2Krt4?&dylJOfrWaRF zV5Uz`(;j8uawk|q?2B#((B_by+m9G!tr!~NBf3w`9%yxd2_FwE3~__+(kG0MC5L(m} zo#FE80$rZsDv}IqW)av`#cDlE#S>h*6H|#_?MZ3xZ2A5(LJzBwY+Ddad4*yi;M8>R zUATV*;1iJ~o!p`FWV(J2t~g@BnHE9jq%f0kx#zcKBSL}xLX3O#FF`h{<8Nn%dVOx~ zkf3-&mFNo0ZeghlbjV6GDVpmZsImButKx*}hr0boyJ61ovFMQ6Nomfjg;ZXu=hXx| zmC=(2{jPUyRZzVzfJ}#PSHG{0M3$=+q&)n_pr-5gWRvYqR?h>ZJIcbJfe(XsN4b-` zzYLAJ=Kv%+@Hr%g(-y-i_uZxMv?adGolLc+^_Hc4KCl`jw3kS+ zZBWk{BPT|G*lC-^p3e`xNUP>1Z0dMRx3 zFa-Sbch21NV&ntZI1N(j6lSt-@$iRc#;pcF+FpEtnR|h9f3!W%mzeuH)m{RV;PX5? z+^PKQ!hMv5;PEe2P^Oi$=^gp$f)vLm+4R@HdMHP4EweYJ_=vXB%I8vt*oQ-dP)`Bp zG;jfffm+q$_vBdh)StKI`vWs96-QLroE~B{Ztv8I+1aT?8?qVqvHA7E)y0Q3m0QW> zpN7GnP%OV+>cOUsMQhus?RXVTNF3`%2k0eVFsD|LwtXxrXSDse3cVBTCx`vbaai`y znr^d-grOm|n8mt?-g{fs%>Y;%fJ(bgwI#7J4L$LoIIaq%)eomCzqjzw0eV-$gl?ho zB}h1&hqbVZh0LDX#)OooQYGIkLVm6w=&4PAR*I#|Kt`DKth=)urj_g4ToIuGe%P?; zN8t@64XU^Wc@_#~GaP(52ixw#A8^ak8okZzPDCve? z`f|K9RHX#^u!Gyhb-=%wtR8)f=vRP5zvx(sQ|e%9fidCTS+AOCe4r5%|Kmo%SLpGs z8u&x_obPDV;cPHw#24j6bzH+@4J=6GPW7R}G?BF+NmhK7^SIfvfpAe^=jAedV0m@R z6@_wLU7}lREi7y8nqEf5v=;WXcJ*k(m#DLVDqaE(N91F<1Pz_5K#v!;h`fn815ZfX{MFo{QnLa{w2)=_LixX&}8|SVH3En z9sKH9$Z-JZstpjdl5*nxe^@&Us5qK@?c*9C!CitoBoGKTNC@uk!GgQn;1D3VCAhl; z3(g?H6D+t58U`PHu;C-`yL)%{uH1Xi`Of+EQ~!FptLSE$rlz{P3h?C^{qnxMi-xa` z*s@*1O~CpH?Z--9D+Qld=r6~KWt@yZOfdu>YVl5V)nmkIKZJ{a3`M(Fkq`b$s7wP! zFU4j2Xz^xS?YZ3>N%*cLW&H9BJ0~WMA=bYQ|0C2~zn&dqXe*xo5pwRWsu#`Pk<>~+ zSv#J`6=EO_^besyfroYnK84{SJxHtpFz(QUA84U}niw!V#0RxcfzqJD|1i;mA9w#> z%L6Ht1{rSN9ry$mkNCj520*(T4EisV5*CmA;Ianz{m=D55K4m%-|P^C8UXQ*Ip_fe`d=o}gWMVb^Nu zrQ%ntP$;3dH`Yb2ct&8%KK3TLWPKm+96WhzlD>e0aSEK)>4wdZ2{nBE$b` zVn821h)2mgdNwVJ)F#v2_h%}8g#i)6Ya0(eI?KBi*%OOz8!tRMTU+;m-ip8isJrfc z=JyM~+{-)zQ-(jh###y_6kBIGfU3^c(kA9MM}#oZ0+KzKMs z+5;gha_7OZ%N`!XFUJq2A=Jj=CLI{rofuRdAH=+$`T9N+>B68k2@^9x8dHGurFV}i zbO(}&9a_Tb(tB>%*RF^la4p!3&SYfmktcrI<^fJhCn9_`NEwXqLqHXdw&jg{<3n%< ziaHhOIWtJu;XLm#n0PRN{A^xh28XPILx9TP)I(O4^A49Dy~)VqpiAMkO(V#)(fLd} zS(CiB&M+`32l->g zksRckZ{ix^xhqyj4$=>egl)oeH>@@>R3GKwagDWYLYNS$XikXO>fk-zQ#T;OeE`BT z9^KDK(sY{Ox%g*z{z%kf!AHu4V>UxjRv3)X_ny!JfIe>WP6UY9W)d>U%?s}e=`f)) z7DR3x6Bn?`d#I&5p3A$&fdn9D14F+)ARXy_%x{=@JjN@7p?j*WTU@>_od`t1HT~{G8EWtc#Y_P7X*hPy50xf0@mPoEf4fZ4rm-^G89PIoc0DTaK-BVoz z%5;KV9`Me8&~(EIF4t7P{{T(U1WL_<=)kX2vXKLKCN3$VGRAJYNZRkJt>?EV`DBOdNCR5PXVx zRV2ueqJW+_@m5);x5+x|`a7iDm%?_OvBDP_~x3EhdJaMQ-G5W^63GeLm=HRNesQw~q#0U8zdNUj zZcN*}&F3JhFG2#~e6m^Nb)dla=A~^%^d0b{JVxUba9&}#5>L;`Oc-h$yrx>R~-HKjRU0|usum1LLV1eSOy;ycS=<5x%9YeMMv1YsYU&V^Cx@uY9_TLcK_ zqypDrrfY7b17kdEPmtj}5I53uUdkIX+yFfE&SwdJC^x<+NAUBK^3@OZs3w>0~Zp$8r9W_%1%QYrxbnu8))q{lEnhZwO6_xoOQy$L`#b ztTCJzLjC1EB=%>Q?#IHD1XGbOXW{~Q7feB8DCeUnYbprb1d~<-`F&9=xfq|B%Vj67 z7@#~jjircA8$PjJRW(|DG@ z*ef7P=^HG2&j&AY8rkMj!oRB&>LkI3xUHT%34e#!nWArM@ykk{Ksf z@Q3P9TsbAcoWbyP@fz*^=Un<)ijCp(clKkwsvA65V5}@He7qnAN9NqiBBhF zF!d8Nd(WW!T5az&8^n$1i*{)IOp7s&P-Sof`F$grxi!wn?7OO3!~yc5CSp>%d{7gq zpIy(s{)7>Fc9qmaO`o7K`r~Ec*QN();haRy{sd^>B~Wy)79C8{J&Fdgq#t=D`877d zfqr27?Z<}LyryRzhIlyw5~Z2lJMSTIrjMi5qWLnh;xAwj-RrD(_h$#yxUQ0!pR=BFKMyt*#$$H(jwcYx z2U;~MwS*GjoBRqZTFIJVB(iyl5Ame>(D;d<4QD&dB8wRie2&cQt|Cz(DcMe)2S(lz zWv0(w4>Qh7pGqaT$=VL%TPqDN3BE;xd8N|^*H{6Vy?a7QL~igCw4bkc(O3e9w$a}T zS(i%1JxQ_TkU|oLd6}-sDwBrsk-DOEtGsenT8l-=R+|_n9pWXv8bB1**$z9&6Ge1Y zdDAJ^o%uvaBd?h?j~~^eG;1@gJi&^Mrv%B3&00C!v83QmeWHWV)g=1s&w=Op_BZ=k zJjk$@6PGV0GNShVr-#uG{hoblWq_uYMBn{jJY~ex#Gj?-@*T_$r z6t6jW8Wg=?n8*x0eZAK3#JuQ9fEwDJ>lRU-UNF2oEUu#aYCEBh+_wyo1}Y_qV?CD_ zz{7Ce$z%S!i7Wyqc?pvLM*W=-K~pqAid`G%-iTA+~{LnC+QWj zxd;bZXMeYTh^NAYBPP#U3<~TyVwbG$DK@iV=&Lz#fjRLbJ6bS*f;p>&LG;O2!g@~B zz|p)=%LF?z=k$DgvR~gG?*~zKaG~dp((Sl@EVkQm>&2Qj3Wgg5zi#{84*{2lSTc_2 zghZyUIWaDF$78YwH{*9yq2#jDZORX|V7;hCQmM>Ch6$Pyop)i0)P{&u1~p*$*M=zT zNUY8z*zv>kV}ZIj3))ggGmzVvZWEk4e$q@k+BtHF56(cp{-?#<4DhIDL%|n$oz(T!k@gg{OK3x15&iAOGjS$H z-$JoLEQWYwHG`izsr^mx$ZBOW_b1;IEZQSI_U*qX*t3_+R$6l-a25z2V49c@;|1*^ zGn`Mp{~r5;v=3U^`~H0Nmk2}S!sD-%Y}4lDp3~d=AEYvwJ&$(?KoqK1Xw#jDFIEsf zJBqJR(2nCI?4S)bpz<{b{UZKe%n5nmoR}eoenD+pL^5*d5dkCJadv}vu`mMy=zrbD zc6U9S7brMVN?2z)-&E@EAp0bMeD?m`>XYx8YCG>6L1c%`1^3$T98hTt=r*;7T8JJi z$oZPT@(SWc;ogAL)=KoqO~<3+>@?>)IiklmhYl|FY#w%ZQi-hMl6&Q?QgwrnPnR)$ zj!*`&%lw%4RxzoMdM}L1Kvb}$o(E4Ti0aM>-DxSfld5eASL~~l*HV7_VS@SNv*XF8n*72K%<8SWAk|i4{%M)hoAaMY#OJ4V{WfZ ztH6=^FLYqvmXC&i|(z`%v$$K(}Kjdor!PjkcLftJ-+mwSZs8-%Sugv}eokA>)C zcW#Tw0Y?(KM~DEw{Hx9cE1H`t3Frf@w=aez9^x_G_v%QAW78ox&lhU6F(9;wCZLYy z^gzbsSY`on`ZdBTZcsCFix)y8O;1(;N{1*`HdUA-9?}&roY+JrDQG@(ux%6S!7TE#@P)fc&Y)M(ZKVH+$ReLL@EP2SP$5E^wi2 z1w+E|$=2^pTb=GTu0O6_h2~o0?&yT#JsoU+Ksv~Fb`72G6&4DxbyOBuW?ygO>mp^J zWsMB{Z0)`8{8 z#q9>iJ5Xy<_x7uain?0KAt~#ZB!Mxi8k?@puP6waTs_LvKD1rusoT#fcDG6c5H;DL z%_G1~&=Z~T7B(c%cA4qQPeHEsdRqw(8y7hT$@tzJ%(u1`!ujtcB(-fElpH)*Kq8E$ zy3(fLFmXLS$r`OnCOQF4f{Gjpw!O;ju=hJERSGN|!?i59GYnfgk@)iL_!WCtBl6e; z(QKn<3haDG&y@$4{PjiRkZ6czGjHF#_XkQV^_GobrC8**Jo)IVmue~f@G?AX0FC6Q zJPaglT2TE!Ze2Y!TOMreZ1A9c@=eu4$;MJTWODAX^(hMy0phM3?}uP{!Wnsu3*rH=J#e4d`;5Z7rbt0?TKUpRmaTCconQ@VALt{H*+nE^BhT`KHNQ z-@sr7WCD8rG}~aVxum|PjfbzYzD;ntxz{(d+rC%ALR=c{5`<^5ZybAnlgmF}o&NaQ z_>|e<>^}&HHr3uQBnL`*3Nh1IDfz&!qRJPzz2Ldj#5WHV$@jTUD=coTHoQGuxlZxH zt_GEEs@hRG54qlT3>0=h*_+Gxaor+4qXM|!xDqX~5M7pW)bD<;KaL=u$fEXqYY_cI zr}&3y_)1rFNm8gPW<}F&W77l&eWr5lp%cO__&GrL(*pU4v%cW_oB%W!Mx*@oo zY04~Wy&sFndjV#;@<+CoEt*oe<>cwm|Z44p?#H?*&$oZki zY2Bw1O?(u#TxArW*<;D=Y>_j*DtxgVE6riE{<4%<_shDkZtMD?7{Km8lOi5q;@l|O8ytg|LQZnC(@!jJsve_Kc!8?fp= zEq#|Bz5%Jk)jU1)d=?dLuUrkUur7!-yQSCHD%1EGL|B)9eF2=yl`1uctal^b->r)k=&e$J|!XSJEr7LBjnthS_qCEYn!sY>3}h1XAaqgq=G zZt%#lUCtatbtXR6^sal?`7hN+kn8gu21f2Yh?&dVE9Ac0;s0hnM6LGV(;+x@pN!Ld zG`rBmH4O#W@aISU%D7yA*v+cWmlX65@S;f|j^jQQF-`6`GP>ZbhT>fODaX<@(1SEouSG6N{RF@f$&zko$#s z-iaHYH(&{dN)x0@s(oORC z1SzCC?Xv~ccNN;)VX|KU=VbPz$Z2=8gX8%2*Jr9pR#!?0=k)IM=2jn+Of~xiGv1Ao ze7WEmcso>otf$|2{<=Q@y<@WR@Yf5=i_CtXxLCq3{4d}%j8UrXU%cQp?r)w(%%7q< zD8)9~#Ya+ymI12rzmdiF+3PjPHRCE-Eeo5QSr8n)UwWZ0DvVnuL9T&l;6)<8{{3mp z!&}xYYK#f+0h5s3!TscP`vOjY=m53lLrtpOrQwssCL~Xjc&CXFn{lw(x9cz_dXA}h z0&D*`o3#VU`?tT;idG*6JOvw{&y!rfixbUxiyyg3(Rc#*>0z()6j(iBd_4VX{t#Q# z>nEg+m(77Zu!OI!Nr@hD5DTwvKg~q5wr;v^JZ{|9@Qg2Z9X{+Ptv#%)2qwLMTYxv{ zDQs6*GU=2^RVrNfPDx600~S9LF=UYw&^%cxT-oE={`TjEacu0qthNj%SIPFb^lQ(? zclk4Sp|2h?Bip>gbuDlG&@FQUj1>~27)_{Vnnr3{thEdSCM)&=_d-8#JS4*_58*Wh z{95JJrtCQf3htGyLpN1w%xP#@r6$`X7rvX2hO&ztt~e=9Dnfzvjt{=eK1uIQZ7Ho5 z@iwa>b7zsKBhX7RMQtVX!$MT`wmWhH2;d~~^0&77=9^LZdv_?2u6@Y*)#HKpDnH@l zG}}yuVTM@51h$oDF_PQYGj8~7Rz`}_KL;WzMiuN1WOB=l@GEc;D_ev>1+O$yl6We~ zdke`>YPfKV8K$+FwsbgT%doWO@+2%JI8nH&Sn&$*gSQ?}|}9n&>hkvB`__(y>POqB)d*rOu{l&d!8&vv45AaV?t|X zi8>(dA?ai30io$vE;CXk%1Fh_>%!F_S>=4}zMkZ+P+ zEflf?ZtH~Bw$NK8KLt~#&63bQ)mN{XLh`H_@|W>JpHHGBa*W? zGC86V)BJl_H-r_FJ|cEZP7Xtv zI+KDDAZDuQ*!xAzTm~1rzV9rNngL9v(sILbu7Pom!dT{HI^`G{#H*YgGY!tLBReyB&>?|4W>ox6QK@?l!L@z z(?WH8SENEDsgO+yi7HzLFE&Ft5vg} z?^MX1)$lji3ImuEr87Q-Q6`n~RrP^1RArV;Oo(nF!HKkjt7eI&+v+-{ z^g^Tr*2)@o{l0!XyY`!<31ams45Bmfz7P>jZRxDyc3<-?EKg8Ks&Z(MbNuq#J>?%+jJZmf3xLGO#$w%M>E9 ze6SKu+Gx=>w5!3HON-fAbUAFrHI#WA7MiTb=6U)zkM%a!l@^N{;knTL z;foDldg!5f;MwerZI$Um#NoDoR<6R%i@X}dW$`0?$EO0HMjO+U7cT3^8)+n;Y(}`z z=LM-b>NiFf06t##oxFe%yYdW+uG-#OOVb12OW?{?T)T~~H?T6!26YhGq^Z<|To z)_tz&?3Gu^-JH(He>r8zC3HjKen_M%W;o2bRkMNX>g5{KQrX(SjDN&&MRg@e@M(yF z>1BBNvJcmHLq&6;n2kNM!2-RP#C@bOmOu2cXOsHtw5#~-`WEZGXXBc7;A?OTDqWe` zD3AA;9Epr|TvhD*?*j)r(f5aa>sFUdmfJbPFH8gU0BIvrpL&+R_jP<9yyM8W`~qJt zUAD4EpcvvZ4V{0NHjKnEdh?1K`$aO2sni0GBh3{p#n{^~iS~pPKL)$jRV%j*CE*-lW-K)p9-0`(XsLUD`D76Ph zTDee5dn;eL>5fu04a(ET%Qv9n^8_sYpnm5!Z~Qf0bcosvui^e6=;9bqA9}!hDJc9c=bcJ@>HN*Fe;hiJK=Cut1^O*;no*|t-R!xuVujb`EqdUjN z-qF;@&kr6DcxD8Qh?(a$aL=b7uzN-X{OB@$Ftb`{J`lbXy$!w}0-6CDOy+A31TKYd zL+^*H0)Id#g~xlVa(282&N{kdI=+o|^j3Dn%z0WjkH2~SB7nUSi#qQ0+HOA?_V?;S2PYr*U;Wa6iTRs!(d3Slo}eB7 z675L8IsuAhkFVXHA;W_281HC-Jh{W@Fb=WI@%7M-VZ8Oo(>~bx9R`pA5KZ$VetqzC z6J`h$$sJT#V?IrW4c`$0*#cPsvAJX8YuuYwr`P_7CPO4AbU8|*&dJ#|>K)Nt>Ydh|B-|GG4D`vQ*QAeoJN;zz+U}a@P98`E z$}s7x-JUy{JK4X+xqA!uJrX_Q14V(qgS(y9owl4doPIT*Hba+S2G>h1SFLz0c&#ce z$;*Rxhj&zW*>^^Fo1MWiar0)9efbhqs7amvw z69PX5W&yqddH}`p^*|k%1n38i2X+Sz1%3Pp@iC{2h2Q5YcEoOZlM#UOFp9D!k zn05Z=r}W>jeuNWCD$vEX8(A|p5-(yngnQ>_PZ&dJ-3f&-v%^v7)MWA7FpR<-CF>`Q zAav)1zAnueo#BM}@e?`_<{~Vc5V{uB_%$N`5EEIF7h&*T1k*g{C>~i-4ht+qI)x!( z*RZ^ISW;p6y*#EZJd&iWAMxK}n}^l)3exG2a&KW0ghll-nAY=1e_}IaQzR(Cei=3z z_F1w^m6i}oT2l5CBOx}UWI2z)C;Al3ZOL#|R!z)w>>0^eRrYC2w{V|cf74*+aOYy@ z)Gw+n`nn7p#Az6F7z*K*y{_x}rr}@Ibs4LOXEE%;J$gNQeN98ZsI?f+GuRV5KK+Uz zfF*z_fNc`kZ79g__&zJE2%`umC2`KP9HJb8IE-;@nQ-%7mvz*2>2=0+ z%XOl4t#$r&k9C}NrFG8rFz8ok9JB_So*um{j>(AoP;LqXzJd0S2NQ^*?r0Z!H zVHf@wh6y$p;{ksR3ycNE1Y-j*09XJ_05%8%gayI`VFzLaVg+IbV()~VN$Qr7yiSbj zVEItM5>;RJp#p->uSQb%&ARS0Dg8k7kA7k^1zu%)#;?Rn9~}C<>$2yK4`@9Jg`=|j zQFzr9@!LNb^*fr?&l?@kT@w05b@mh1#n0;;FqcHz6wtLv$3ut$3QQD9UVejbAh_gt zM+wSOa=ed5@08@?`~ zEovRc%M6ahPEVUZ2t*4+3B(xm8+>!vsNQhcINYGx$lfs8@N|jvZf?=&kXdG2WnX1p z&d3yE1uRmZTbVF*RZv%J|1p5Fh^H%j&^fwe?5Tg@g6=M|Rq$bXNmP?dN5dUF3 zMyB6&}plDDOC?@bjV02(q zV9d_9Gc(<)bipXO4hGo*2D$no*@~?sKDqRQBJ1+cg!KLLKZ=Rf6y*gygb|QCQXFliFmBiXGMKr;YaLE>e8uI*SR*1Pe39{;t zb8pKL6h%!j*wph$XRsNuDJ7REyet|m`mEliNlPRztuC9vNTk51Ue0HbL7ytOtsbt) zswJ1MFryx;$vz|JR_rt7Zxieu?q2Mk+Nj#5ug}1lmL@wVt59q?<+`hH6W*w<&sd!{ zD{EKmG37DkYZKb2)@HoO;E?8+@KshoUO-Mj!Jycn$YH8_%34a4PLx%YQIwM^ zEhjN2H77Yvc3eTG*nG-m7j;*9mvPr}muOdOmw(q|7iU*#mvcAl{Oft#dChr_ySfl# zCwBmC080Qv07t;{>@=}dv1GCIu7s|XuB0(p69usBL(-T$SRO0~RshHX;v_AS5d+pXK}l~d$XYMaq`T?4M}+nY;y7>#g$V^a@uX|qA5A@ z+{MjF1?OrvZ1*Xej7q$O%^PYR(JCkGyUS9`eew}gCS={By`m#jYG|&vt;ow~BaF-Z z%MHs|mQTGvFFpxZSg;{7DhzA8rsSEqs<^1IOQqzG@L0CIkR&VrsQ#ASJf&_#kWq)M zc8irDC2EAhvi^ni=L*9LMU4{nmnowupXIyM^9b3byijDX?Wp>dMSx9!Re;?f)gZ-TS$|u5`_;DRHtx3aHkW04 zy;Q5gLiuvxf%=iwk;ajZCp#XCUrOhQ*tWzr-L|PE$W`3ujgRK*GLaII8cOvX)f~+n z^&D+n_HmYRwsBUOl%3SV5#H^V(~#4G)1=e-)9BNR(~Q%$(}>fO(==B}9|Ip59~~c+ z*X3F2t2$z;Vwz&=V%lPA%IvvpxvaVDCM+gwCahK|wW&@ifvi@kPN~N!$Eh?aG^x2M zxv3^8CaK^Qa4H}LkP1oxrMivyFjh@hW{qeX6KSfYYU*ieYI&4rR8*?jHZCg0s+rIH zvc+yHCNKS}Zcynk{nfT(QQ4u^Q&qSkdwR?^Bx7i$h^gFYx@MWHDKn$WQ^&7NbjH}$ z$&uab8BHyMfX@d8in3cRmN$!&79cg2uWm@DXTMAYD|~!74PwR zv}1Z@6qoS?nzwmUbtK&+=Sf}-K5+!`sxO}4bToy7A+8~rPhis zADkhXCYec}PM^`4)|r``o|_Sv7MN+CCfHlr6W(jz^V^fVNV(~{3BJj{NxZ4MiSpII z*SuG}H@ug;SHG7REd*8r3*ic)mB311DXf}@CtYdyat{RFNYVyt8+BQ zD@~hLZ%TQLIux9vxP}?q3DfsnTlvzDqFtriGg{3I>uP@05Z9#D2iO6)$^mDzo=Yq1NnE3!+mYqa}l zS7n#QKF7bBy7M?86(nOT;~--rW3O$R{|EmHf1k%^yApP=)*72TQLAK)UX7VfROK}P z691sqFE%f&7B(ZTno*;fW%C+xo$AUl{yF|}esEK_NBF+{oK{VEO{GzcVT_T2;ap2v zTUu*cdyPl6bG3W5Yqe*!OSMO}o6(N`@#5Mdq;0inxM{&7)GlWK?VM6grjdbBbIaFO zM~{_XZ7Uv;`^s}hHHS4+HSI>iMprGKtw$a!J8j^mrHdfDc)MD=+dJ3<@2s~*!H-#wNuLiVNS6l&6qYFmsw zI)C}DTtw_E%^B1X)HE9%x2$?}?g;G)ZTo^Rg7>B7WNPA#a$A(!#XJIj-7H^(?<>sd z)V!>zH3GN5w}tj^W-qe${pRp$Xp8`@K+pS)o0*HueXlv18h}w?E8H{NE!!*H=;Dv@ zdQp_78I)!Tm1YbxN_O>Ah^zU3nln7pyQZ`9;eddb)PYqBFl<;-qZKVsH|A`fSp zYZA>Sv`LXO&(dZ=KaO}>(c!}@O^OnnxwqEzkJI^DJA8blO;NgSyV)e-5b{bbvq)*S z#9E_Cp~+^^-66vB^DB+fIjly>YFTWXhDNjMH|#U-?c5q)R2x=Kur;wAx>oB~PTDpJ zIn=yT$*g^RTX3Rgx@L;lR>v-;v40W&kldmCtD-@TQDyanwryqO%p$o%^;hL~WrJFW ziC4CBcA1So7I7Ad58oa#9lm#{^o;qc)UMU8)Na%+)vnR5uvBw6aWv~`du83;=+|`H zc-yqHh`dPcQ2SNIPt{M>Pj{)7YJz%_dIr}v-X`8IvXQxwxv8|Vw5f0Lu;_Qjl+11I_nbn`lwxx|%O?ZuXP4SKK zO)8B)7fTnd7Izj&7Sk7X7Re6n4k->z7WEDd4uuc>4$%)~4w(9AMj8{r;FWg0?j%)EI(D%|Iq31omCDaoQ=k}s9czY#cZ)hs;en#%opC{h11T>1h zrKybn>2`7An`W{c_MmX6PnKy)BFdpf(=7nK*%H)a7*z}PNLlM?Q^+8G@P z`-RqxZ9r_7wn?c;Y3-Z|XEw_5BBU2T&7GLNjMFVKQwpWio3rX)R$TYVs-M+tE`6=VfJOkh1q`ylQo7 zKMM8VG<}SYu_c-js!-BgDub1IsvQ;zz47?CM>zAEjgF0%jkQ8SbFR!$ZCGuk(D%*7 z$33DMVK&AJ6-{s%P_10eMlGW9y|%+}NJWxrI6libcU4W5>S?wiE}>@RuZS&wVGX3z z{#2s;*YaJ-`wQX4GvOZF4I`3g7rg^+ob6@xuRvdTG}S7JUS*BE4!tQ zC>unF^h79#PWWd?Y?vfYseHmb#_Lu}cb13)MVhIw@(m_M9GfDoWoL5!qA&FwBDq}A znT8Ol%n4Q-5t2yaEu9!f7(HGkCnr1BaIt5}6M8v$xg^s#hT^!rh-c%)%42vGW9ehF zkpexRR=lbC3s`mBxLR0haKqU~PT8a7v9}Yi!yj)3wtgQgc>AhaXLd`HdY7f_``EX{ z1Y?dq8lT3WUA;DdHk;e%l0zBcLv~73oh==$*=cPZvu=!@XfrxZwW^PF>+Etc-p9eg zJc&h1ifRf3L2Wf19H5$4ZS}jUS^H4cLukTMO61<-2(>~Yn!*d-rCPDsyPKJ1btO^c zXBq014)UDibQ=5C4C9aYC@K}01&#D~+;>ruD&mSV)?~G;tfs>DrlQTt$8IP@*O4&y zGmKdY%J%oIXBBOG4?CE4G%~WdtwqvHh3bt>trn*TO#P+%$~Cq1)C>!!wNgq-ic8gV z-nL4#X1d~S8;=B}+_I{aiiDmbZ0n_1Y2--xB)I+@eu)7Hg}%fP2zCDVqG+QiXXz2H zX>;!}g2dn!^aVMLiuM4(6dglYeExA<>ZhK6vBXs~-kHzxo4rr$&B_w=Hgca*s*xk%6LiWk(!e^NFCyDYpPu*@ zW)qhC4+1YcQK~jqO2)2`$SQiqZ1YWy+$HJl?-0$!>?t!E9YvV^(|U;{3WnB43A1{d zBjJsS}jR|e}TTmvcGXb)r zS+~>^?+=K0h<+IJQr*-An{-0PwmZe1#%9Y3hn>@_k5VMa%{r#w?-%97eR9ay)fu)E zyY>uhys;z$6YITt))fy82s@_tr&+(n0RIb11qSTBBIwG6-iIAC`vcZ*F~R?AnF6=ilLMx61YEUAMJltJ(JMF8|KW#{d$7B^>6UzLCGI&>HUw*xsFFOigt= zs0J(Pqq2+_h-98pj)bNN3%Mo>{|ic=k=X2}Sg9(*w!)VGnTThog-#&Jy3Hn|7tGG%LW~ zI&|?d&;)ind|?FtIzt58o0_IOG}JfY8PQbHAB@PK3D+F; zmc*%g`qg#gSIpzfvtgyq{9=Ej(9w%O+@@z2WAQBc*ZlL;h3Bt@hDLs|@4>E%b@i8A zF=rT4U1J$FGc2qmIW6e@^RZlsp0BG{G!jzJXwLDH)RAc|G&b*LTxwfNIlZ>uDjIo} zX~Sj{H9$xP@QRZ`@yxJqj#(}|QDjFIs3u%)RCoR<-=p+r#zJuAF`ta+@rVY;@hkc{ zK9J%@xS78|Kg==uWQFNOs;+B^0jRh!_&0Hfov404&i@3K;sr&T0r5WT|Be1T>ga1x z3yc3hpsiDcsa(!T{eLGI6p0iV9|;{k^0h`>%SR0wl!8(BUOnxKgo=h8)A{T3cw6_Z zo&3(*Ag<@5hD8!TrPdesw*LFf5cfak|8C_U#q$wXr4TzJkqq%rTd1*|MadFxztQ{| z60Z5ObYG|j?dK!RNg>umB5C8HR#9W=iV}YDWud)5d43^BjU_8enD9HND!!K=G%bZ# z9*LxmCz^Ponzx%TJ|z`g6q(cF4T*|j&V&s!`LIl!TgWUD00?z`S-zaBzT3_3o|5`H zBc);{a?UUy60?z;7EGgixP@N?GPqfhsN{mpoc3Q}E{C_~8!{VPHjPxA_dOxxo9GXro z_=Ij#&DvHygCnD5h_LZ9`2$C)$)AI!(? z|C_M@zPP{Q7{K=@$^m?ji2Y`3Ct#~NU@Jc0JZMM;I4gr^;lK6ZZ*djy?+N7tg*@`j zDFOCmDzu&UMUz2l7DDhvJ=Z^vFY z0u#rL(Yn#01{P*RFO+!L$tbjM;GUxukI(SN4(Bga_JiqJ*nO0wo!POwbla0wrQE z&Qr%AXXG~m;;twd0C5;%68&GJUc9HkAZP;yAm*P%AjY`?SH-K13>9c^0T8Tdig;2Z!)83#> z3do9uZoT|NFu=6_p-`M&X1}Klj|l&-aF>C~8rP#s{O`#COZ-c?C(qtO5=D%Y24zlR zvebW8NHcl$Ea1NhVDgF};7=LeVZOd&pjpVKUC7S+-P+w@76GhZEBPedDP?M zPWrX**-m}SrQXhX>$^?5viEM-U*xnTxnnmhR~hzOPTwbVkTE!+4QERHHC(rP3PgJp zu?3yzxv3Bf8CFLr<-3HHLKu7OMlD}-?G#Iwd?Ac2cB7Inx-voI*1jTF>7qdnZofgF zxu@YzR0Ly@JyA>8D5UL|k%*2DA*4ZNrN&YhAuRHKT%nqYDq-U30)g(8&$YAG?)bwgtKhvUG zsebm+e#tM%E$&0Sz3`X6fz`j?BD&-|UoZ2%L(;{oVc$%PPNn))COxNrQ`3L5-=f6- zK0E$WqFHWsiQ%6s`k(E;?dhNO7g_)KFBt3`llTROGcqlHDAjK~?%7X@e1*H@zdJr@ zCnjm9l6c7N2QfXjM=+2wyI^o!{~*}KgC(QHcfM@)KNFSDUjnB0F67IOZ-{Lp_W zU-HKZ{SVgPcJD9tX9<|aj8b&QU#P!i((_BM>XcJ!_)o0%F&vw!Puo9|B)~hI`H7G} z^G~)c6;EF<`H&@deEdrV#)AyC=6`Pcp1|?d`d@_0hdsF?^|MmTLYTtpD8sR3($$M$ zzt0O{nMy6^jon41s7#`qJi9i*aw_PGzC!Pku3iq`e%`uQJOwiOh$iP?eLC0dX5h9? zBHu~Pf0S|2^m5iMaYm4j+rP_@7m6BKlAVZJn#Ge zyr2K)eV&#lQm zt=;eY)nCt>wh>2a`g`sF@5zObRGGT}fiNmZ3Y72_mvEJr9D6@wD43}u$H!aRn|~tc z*te-7?URmgFS8y##(Mg61P^a`+jUdV%Ly^+2XNfdqCIRwRm!z|IQ|IhZonSHM8sT- zbI5rcukx51Hxu%(11vK!4v3}xM-Ck!oCNCTI@9C`*(?nCK&~u zs^W7+x#c**Je%QSgX&IB`?KlG+Ja|RX$qTOuv(g;ziAVJsE5^E(9)9KMRibQaZ}&DXSk24f_p#2F78p zo%=RZ^|4HXVsQA_XQ5dM>fo`@(n}5o$7%?>mRB2w>m3OS^s6|9`pn8i`U_4*t%~%O zu?o)CXBbJWhO;#-<4~(2sxnrizJtTmnl=#i$?hLW?c6NQ(Lsg_##7m4JfgQ8qoeN| z51e+Wt56J+<9zU~i?!)iX!*rS-hW_~1!V|oF&i}OjfYkC*nc%a@sC^4Xh9zzXa5%r zr}wGmWm#9>5B{%cTiWKczULwbC~m7Uc8NO{G!%IqC@Bs{`d%sg%Ai!hXB}|D#2w|9 z*q_Q&a8cW7o>Hx3`J0XmYML6=C?52YG2zssc|r=d!t}CUvZn7*XopWpU*FI`-$0B- zao~oIW#ek1ImfgiUDCaps;)^wi$C$b!nrg91EmCmt1N1@lAA_Gtaqc|&Y&|K zM9xOYQUycq#7ntjbe3--n2$Ej-UVA|A|bPFr-IFPh5n<c^%~a|%G0DWTbaeUV-YyDzQJN;I_~j(kzQV&n2zoa2>Dx!CpW zGolx)gQ==wX`gA$TF1;iIT~!{BsBZ4FVahIJo~rX(^5DR^af%Lz5D0yn^_6XBEfT3 z(&>;P9O$a%>dO;Pw()n^BOQu}#{Kj_BpBLWq8}&fqJip-wU0`Tr z_nQ~ON$(AikLXXQ$h_ln&e=Lm<#*~u<`y-TpZOn|TZgIqwEp?!M%=V}-1OtEBQbFv z)?Yr>#NUc*bdO8hcc$)f68r8)_STsgT8S!iSF$s4HLiLVAfMr!FrwrUkaMa^-xWBP zx9evls!Uz~;`BEHLu8hfVEI2`Ces{{Q&`r5ac)~je5`rr-mlZAp(cSgqWg>EZ~J&5 z)@d?hraAQ=U5hRHUXLqf>gWO71N!T(;mM(g1s zvh0O?3q>04b|B%>X`ga?S9I)rAeqY7-nf47bFD}@I9JDJ9(g*9=QPDTMl<7PABP{4 zZQHp6#<}nG--4$iECu<)8*6T?5?b2SPMi~@7x3C~1W?horo6U{Bzgfe<2oOQPm{U# zBFIAJjmnXvo@}QU&R?HNcgGf}hHfT$sDyK(r+cV}!*9mvVM9{n3IG9?s?%T9s@6^8 z7B#MK41bzQU0?d7H$@i5x$!@{qm2wfI7*86aAluc_sxJaPV;f_oXmY6mSn&Q37rmp zeKL zts`~^xYmox>iPx~QY>VtzCf3`yl8d~`HQL36aog6lHdNW`gTsy!}^JE~i^vO|| zQl!08sm$McA?bbZ7aw(E+8IZ`7;Yg=9uGgko4=G%d3|I88!L7Yj?NXw?=e5kn$)xQu`FOTf>Fx2wC8WJ~ zxyb4| z_J;JZ67!!f#p@inH2+sn z^GmP8rGKzw{_M+s!yB<+LO=ABugcBHdc2Bjqf0firaSLr?4^hWBl@9gzA8H->%OXv zbemX-ZnoQr3Y&bu0~PtjnIU=z!CdViZrktkI&U>mT#mxg%zkusF6mNGWUBj1pI@T*MPV6U4`XAk< zr1al73F*zhaT8jcSb|EFM~e#Qqdh`3DHZ(9dnRely}cAa{Xt^NwM!yiX=#UROZV@` zVvwd*a17XU`d_`H`xh_d{`MW+u1AX&=dOoihUQ{_VSwlpt^Ccocap)wcG^38I`zSR ziiG~6a?FrfEc{h{FytJp;kQpmRGMI&c7%YqrBwMoaDcETVkpP-HOHbQ%HdqK%JXE6 z;YMe|l1-eKU~0|n3xD-O6#EIsJXZ>j8)J~uteXoVwmt{A8I%JWJcQR6?r|o#+QxZ_ zq}HSk<&1*({#~yT2aZKY)Z8K>ZcI}Ix_F7D){KBSdN~?%Z3!lh9mk=qFwzFtp%AUl zL1UI84qG)U&+|3>QhRcq4yg}oxDZ?&0LNmjqUJZFkPL-C z$^PqS=pD567yGSRmFG`2{7iato=&R|_khS;%{Z^?UN5sj`)BHR)y^ySRsH;APGq@K+jRQE5!`@b#WwxSV928g zJ@ft(clskr^3LVCUop`!zUiCx#HFArXvt?mtf=uwIjmV!^cKO}%;8Fb(Mx>|-#{b0 z(DSNV-zyGHFYk<}9GO0nV1qOc^bC}7_++DyFd#|2^X?B{jj0wF^LImnCngF$#3aDdg()G*qN`zAfQ?(#;@n@{4fLbfv(ht?+d_)1zZnf(;FP=J^MS zm!7LuWY@U`;(tsb5|}e`2%qEh{2F3aqroQz;EFsF?aH~Y=nFSKuqH5{%GsW^F=7dr zdih1&eM(;H6~LRHvm1~+OHa*2!z{%vzL~T#Yu<8+;=Xe9MH*_VGnVW*drA>9;)=`} znK|~9p{2IsMz?v(Kyygy%N7m(5XR@nO@=8`TUx$aSXf>CaGHMLfo1O36ZeP%Z7PFL z=m$z869(FjJ6YXBR*R}QQCWD#S2#|yI_O`$`pmMvW-X@TR%PAfuqz>at|eT3b=b9K z%?3_b^RX~`Sm6^&i~p-l5d5GkKz2;LNKR&w}G=k@X$&DBO+F zZo10HyU3BCajr|a4eK5p4#n9hvwl-16JtWZOUK7{+h{|jn;o5w^?5ulC-)oOB?nbMe_!-$Qne>XX{ysDA`%c_Z}|19$~aNQShyS z`!UHAu{0FNk8^3Q97`K{rII#sJT1nP@&wbB+{dgQp|rzKow%PU+4h`F`XJEs>|I&z zo8C{{W|6UzsV7$Hwc=W9Z_1{gk#&l3YE-bFJ~z25t2UtG_&w=O%juL?3_9!0Ay+>} zB14jG<8qVl$%V{DerT~2~ASzohl;Bq~4SkjnA^i%mC(!riIb@T_tI>Hmntr~y*+Ll`SrLYk7 zi)Bp4_70_utF^nwEgK6Lh;y@aq{P64V9-@uTu{&Vh7C+m(aqI^Qc%~^(qm7AZVFKf z%38SFKt3=*c^gLy15aHGS9c9JS2s#Q1y?IKYX?_5n4pTajjM-)hcCY}B?#qi1yZnZ z^?;sohnZkOIy$D5f_iTHt`6V{8yH*&xZ4@NK;3y#&0tw&a z5hyqefe|6`7!(YFC51r>3BiycEEFCogaAJzna9A82r`cVJQ_{9kH*4~7*d=_47iWM zlI~+c99U8q6c!6ZljA{y5<7wB%7+RRj10B&Kh`ndgB7i5Sg+_w#;0Ni0Mk4oq zdprsQ!-$a5#fTsQPtpy8M8TjR6b6F=_rY(E#~@%B44KCY!7$*rcOMJxgCE3WLEf=K zq-U{07{Fsl_kqq>VN$-ZAWbZq93G8=VX-9r;X)uV91bUig2RPDal^@ZgTqB2KaqVu zpgJ55$_+{r4hMw~$i4(rfeQ#`75A~-XNF7P83t+1t?^hEFLiAF%r0YdTv<^o5PZBPVi1b~n<0}Kk1NcjT{ z7D(ip28=Kyk@5!^BqWh)MFb5>0+2r?G?2)(0vISHf>gSIf#L)N(goBpoJ7bH0+RM) z0VODc2Btvr0|f*uVLx@yj6~36Yek5F4gw)Uu4yy^WP6W5&jBs=2&tyg2m}J$0)*rT zOa(|J&48LBKq9A(Mu6%8N|VYAFigKTdT5Y8kacnjXwbaS=>1sGz^Kq@aw|ro zfr@C15XqJR14$y}yhB|RkjSxMKsNwF?}r3t3ru1^B6fmIk6(aZOfPo}(pAHz%0Sl3PKEQx37$Q)40tQVYWC;sNq_V~cfj$c( z1V$y2A1GZ6oZKD&15$tkgWB_hgJA*#C)X_o4h9E6$SJ^q!WcNY2LlZB9H>&#bD)$k z@cn)t4hATUFwknxPZ-Jr)QOTL5fG;^AY=*XDZHPaFla&;Ve*Is7$_Db$v!c{Kz%^S zx(I{b21xsHVju~Sy*QzkgAv&;K@li*5%TB<7*K-ytqRx;NC7l)@^hdM0TMYD1eAA( z?8OPSBOsAOLIXSoLGEb*1GGkv`#QitA<3f{V1Q;2A;kif5&{si1oYf*e}Dn0Lxki9 z4WkGwxyBICKnjsPKP2e9Fc2Y0P~Gm278oQ{@@O!e?D;``9gxUYfCe2tW`9lq7+^j7 z?GG?OPiSsHdJeRA%zl4{K|{kndcWkM&I^Mf+dKwX4v@&bB49u)nEf(?njU7qRe?DH zNFBRx6Huc85?M1W=xs1q5wg};D0PVJ=>oM5(CWyV?X?apc_hJLp@|3f&zT1pQZV~- z2Ed@9Ne8Kv03!lPq&R^pkVI}(fI$L@JO%(}Pa=&@Sg7Ryvi}_DXn;i06EuEkN<$uj z00T{O$bBSWpw!9ZCSVYdM9KqTus|ZWM!-OR$Nn zd@nsPkJt|nVgmku#s??GN3H_65Y(5EC@DT+Fv$QixxvAO(9rB~kCObskPFG=4i0dj zib#~?k3mB5fo4leA5s;}SV4sQGBoFb3y~`i%yWUYkm%m?U>*sD2QvzCco9fnFeN4# zEX0BG1@tfeAU!Z!-j5#)FhGVVDLxDsx*?fl9)N>p$$;+12l{bHCN~y@Fc|A$fRf7( z;;@jszxV+hSpEouQE@MRgfL_>fRej1h=cqw)LY2`H&H z00$W{p!+fs)IOLRlNSvrBxFs1lDhzi16m+Kq3q=r;=q$63h9SLLNOzex1alH=2P+SLaTWl5FW(r3*(Xj3w;}I zNg_X@M3s*ZEN^#It3rWJn6~Vu~1^(aplb^D*{U^a;q=%tx zfqj3#?q%~&?W{a+-2#g5mBpUUkS-3cHh&h^4YwOm1baV-kP8`b&=$kqrT}@b;Xf`Y zD7w8!pe=-d*s%D^9s}jxo&%{c|8Ca=CMaidL)pf`&fWto>#>wD!K-8mOvHf%?Q_V= zy7|CN_>sW;`Jsg-8qDnAU|2GR{GBcA++j$-$w2!o9-!050D-jY;sN6q7C`|~-Ns^X zXGRF{DjpWj4puU*cFs1Swqb(0V1L8_%mVAe^{3utf`3 zH+R5-tO~(|VU{p3+`zzq4nqJ5G;T>4u;4v?6&;*yK&t@3{(4hquNjaFiEQ;Ku&4!( zI5>OQ+}g{EhmE`qWFOF85V@Xw9xZ-6RKwI+|Jy{B)kv+&U%9k~^dG%qf_Q6TyqGtK z+tN<+llr2cI)$-coQ9{xL9wlbG+cu;n>J(pySK8haiP0{*RuV&q;t2}R zwk*K#+*QriDM0W9cV*uy5HI?jCtI~ZxM*)v?$CmYq)^AC}KWqyWoIh zC_`3z!Ewj%l&qP8BaUIlSpx+p9V3RbHVY2Thl*zP7Mz$5ug_X4pqLNy%Ni>T)Is2n2VYXRA z_S7j6Gg;s54;Y8iXSLZMHx5tCnzlb;9A=R9-u|R<#6Z?p`$NN_sH`6Q6T{)PS&Q}* z!(m=oqxPqUBQ~>s%>E`CN}cs`_LyjRRMzL&!=hoDS^cwAq7l7W>$3;zLj|(BXDRE$ z%d&{GN9)5}vqomA>m!!3c4iOwg)(Qonmz6po}Tq(_K07YS=Qj}Nxz7(tgYEY+o6&c zA#jdl%llaRtCshWs1KG84o&=yIZgdAcp?*Xo;pfyA_hZ89r<#i0&|f%`qD%wh9>Ia zuAaz7Ect_F_c9)O{CP(mqijM>g$-xq8TUd*PU^Fm^zVHcfmEvWFoQdtZU@R zL~R|DYqZ!zR2}Wo!{-xab&N|4TZ-J7XsTmbil&&j>vNj<;e&}RpYzO7 zN)xd@bj*>jCMta{GA}d24`{WzyEH&B|q z!y9a&?BVv7p_ii$!w#sxXp#@J%BTp@JPLuas&LVygs@tuU})0iVP{m>Y4Gx_S5y!* zX{|803Li~sE9*@aaheQv*l`s$TrxYWii$AqQ4Wk-g$I|C!|I?Sic7bKT~Oh`;jLMX zR8Y9IDHv8o0GB$&>Z>A&%bB`kK|fQ(QQM4|bxHtty$1 zRjpIF>QM=dx09zTrG(X~Q?x4G8OGSjQH6JAHR(iEr7gh3It7~b7k<8tHmUkjoYE+T zaAg@074vxNJXTZFXH{hxqo5flGR22g>Ww=w#Rk5-6vsQo^GvZU zj&X|PnSyJa*i_lzI`cCv=9mXlXMEMuWAdji_-dNPBu$<5)fkI;I>qFxB^eVvMXNxk zE6Z&YuPbv|Ur$$#-xKlMN##Rt|3Dl&sT%xt0&)1{oP?R&+cyZRlWH&Dt{@IZDqnir zfuM|3ef)M7aWqoJ>g|W|5p<;7XMztxQbU@SAdi4+$i@+@5m*fwU4kA0sUg=-@IXlP zNQ)5E5h6XZ)dXjRSdWZ5;Ti(nBezcQM@aEYpCHKA2=U8C5G-pj{4#0;of-tcTsPrX zjd-avFF_T2d_uOE;8-JCD&s^ju0fT`5ea@Zk}lGW1jQP-i)<>vwg&4WV?r>fLAuC| z5WH$67Nx}qnl&Pevd;;wHDZf0w+Uu7=ta35LST&)lQacE#zTln_5s1d1H&YvM7ZKn z;}&f-`(fEE_@>8h^v6r%7sc*s=ETifi{8`B?Vt4!4ergUo?Q^!ex2n$CoVcJWhQ-& zpx^;Fl}#epcwkLs3O+55!8*19 zBOK9^U1iTF8u7xi>M9>9;^kzO51*vkA2e0+d~mfET$ME+R_%pOl^!2b?IoeggHNLS z58*0xK9TO0sw!tbvF;bQ{MM%}pZ)4MyWRI`aM1h-{cg#%4ne^MCWWh4 z3?81fyL?r}AUwg==BklFRD#{vs|p5T`nLL4^$jBR?T}YB3?km!dR`svvn_fxUwsrb zmsW;qjuLLC_LOS+lFLqQ#?`12ey3N%)zl@Ih^?YK(Q|7<-^xlDiM@Um=_TigJ=+yc zB`n0gqZN0Z-<&IESukg4xnE_`M7V(pirh$0gfGX1L|Tl0yJ+#bDKzkNT!_YspvG>A z7vbscohO<8ZmUtHO-&;oyaY#IcvYD? zqeotDRs}dqiTy!cCAT0XHu;3f=2f5-^3~9BFI<{s{t&+T*5Gfy|JwOrckY9N zSD2}-;Rk)MNK-rX2Mw=?QCsg1re4vbcBekbZH7wNYJJe%d?;Zj_(5$mywTR}gUM!8 zqaDi!rOmKQQP@xMBE8SP4T&Av*MIN&hk00cUspKMZ4*9b@ocArV){=Q=M|FZ^Wrib-!F)5kDB+amm*u)|ZYsLFw~bUn=IfSCf^#7nze@eO~oF zm>$D98Rkoq9?$u?)0Z+Gmp@tP%aER!|9Q^$zF==ctlcEuH<9IogF$*vlHD&wlc;f) z<#9A;Uz__nSlaZxT3;C4gJMm_Ux=mU!L9M-59^=&53_VC zt-gi6fct876%3>uoZuU`l+Z_Q=fHT{X}3D$Po2^IWtIFj+BW~rbHr<1NvqRfeC;$` zeeZwLynArd3En*|^*Vax@yD$= z@4!bH6P(|<15+|S*?q?brkhWk`+hkPZ~n>fJ2EhBd; zmhy6qP|LO@=fTk5*$WJ^9KAPeC43S4K5L(W(zV9uDyue?{Fi)~64tO{kz z4!38k4`sCszsgn{dTBD;hpkB&MiVa2R;kQ}3%6!_ru>PRp_4;XsK5|wkh9)4r*Jg( ziZu;hfj(B>ns!KmI#zdz=9vO>tl<>xcZCC2wCQN>DV({YM@QSHaQuo+JWZ~`g)0W} zw9^Vlu3XWhNw~M{;(SG4kM_O7$t$|=*4myZFkLZxNBdRb&|7W9nj^z)CE8{Cd8QtD z_qVb&bfxl6Zxw6KF3R72E8{_zCU5sv!QIB^Qzu=TQpT!AC4vuVVl|_Z zXs24;zW(&a#Z6gb6*Lq2r#!H7z46sk&R{Z?us-GgOj;m5g7h`Z?x|bgyJzvmQ;uM2 zl|Y>GdnV%=pE_j=W>^U$Q(n*Hmg1jJxjs``O4ykS^p$3ge=ud?E6<$pYU-x1Yc zmu-qKpK|)H*p#q5b^E(aV0;Fh&ebytXLYX~znq|Be8DC`_kf=CS>+=JGJ4u))sGmm z>M5U9y=P#dclE61Jtbw|KB}`<6m()6#lyYj_224woRw?StJHHotJJ2yD%otz)1;b7 zQzXw*shW)oe2Y`RY{;#rnxL9%;Gk!mp!xj=li>wD#RL@_10y|y1PvQQte$3q+O&bM zo>_v{wBZpw8GYrm1`2vt^wrNAUe;65S4}Xm0iQC|OfWpFr=YK*Zveh(sIQ@Kh}@ki zEp#j#E{ZBDo-f=ky6afLP}mNZ#ziTGGe!3t3ylj0iXt70hYL50g69iF3wyzOxu~AI zdB^OlwuHXm`w_#X$J<4LMa>MEM~h?}D;Tox7g;#gF=Qzgfe$7!tbbWTAPoXm^Rl*k zyc6FaMqbg-iF;3n)Ys7Me@}(f?a`@ze-UZeqq{Ced^X|TSFg>l6Y-wri5|ahccafe z<3fYN_l}Xq#RG+39fOApP=!5?5oqj;7f~5HbztXXSr%l7&^Nrh?l0{k! z4kev}o+;ZpdC%yFe=)`w7&|>)93&2A1Z=%M;33VVOfewiq0OXDG05tn%%u8Yz{2Ay zljeiLGam9xDoQ^ai+=@xCH(dm+i%Zj?WJxXnJ|C+n0Q_^FDloHh!HJ|%KuC}ESja6 zLrY{AE!515BhrcHYUb(^5u&A<`TayH(Z{_xB1AsX;@-S!;ziN?-duO0xM+EA{yOns zeWpOp2_jp4fk0jak)}RJAXkkjTwfxP-%X^f&o0a1CGyl4mE{!^8S3-Oa-E2x^<`!G zMB>rd{IOhb zqJ&@hSpF9A5U7BhQ^ZT#1(JEuMB42f$y_a>$aaZjejo9~c6L*aAdz>ws41_U$he)? zlMt~Rd8E|r&u;OjjP|(ZHY(Zsypbm$0MiJeRW^x zArjPWbldch@6|nZU%o>;QFqaO^$z(}J)r*&1R_%1s=pP1>``~`Z>d3)syp?!*B}?w zZ}-3OK%}YL^|yH-N7cRiUv3~8)!q7EZ6JTB-x2wP3K9JJx=1S(^5yFrA}tRQk6+u1 zv_C|Ce(fXjLLCwJ+FGPd9ohfdL*(UaMD^~V*vMY^; z;GWTUqC{ZjxW4Vzt>HV8)$Jun;%mS1nitN9)YrD=i}cm+okd1^sH^)IgrD~?R}U_T z?DQOPe{)gzLC+cYcNaxo^&EF6JQB|Dx!^wVNMua+<29jkJ(t~wuE7m^knW=&h0s0x z?js-J-aQiTSh5Ql5^h^&8X5EAU+T_0|MyY+~zkAW#-DmyTDV{s#}q5hxUe%0 zDSj6*?A(?Jb3rhUwpYMi_!vjpD{s1pGmZmmaA8aR04mo-IQ1i_D;J*B;k-(R#xrxy zeyJ~PYw*stU>)*g$k{9P@H*b%6pAl5_d0r`C(U`>+E3Cp7>GF!nB67uAqx;>Ii-9^mx7UZ$Cdd z7Yk+&G}T19IE@T#ntxqfAu{~U^5Xv#VVARl$%S)d$g9%S1wAslSs~#fI5M(X8Q>x{ zGTuD+o7fxbs^G=b=7@LH)h`#1i4mfdN}f?)hGr%rg4LIlpQ^!aZ`5`fgbI-Au`H`9_hL1J}QnL=f81cl6pt6#!-%^LoPQ>Mo~{k7jKA-3OpTIym@<6^65C!4T@1# z?+;8jl}6#-AJcAdj&gesr`@z0#d?pK-Z(dU*?Y+Jrr{{kdvx>$dX(RLWb~%@sD$^p z#J8cO^Z&X$Rx;W(zYp<30si=P&Z{VGvwCnPz^gtDd_B*|t2WK*%doFklj-$y!wR5k zER%+9yq=j_7!K=uJu$T!9QO2T9KDVn*6^wxwR}44;`Myg!h6`%>*=V~)^LDVv&8jN z!*ZZ5Eu)96%+r?ZBrLRsbvJ7ytonxCHyawS3l6K9e|_#;?(g1cxQM(xI`)mXtZlgx zy;#aJ?>#bB>Al$4>?iTtZ!6Uwb~f(@*s~11GW#AD;FvM=W%FKugZa?lW@LcV_|Vp7 z@DF<_>{P|2DAAcZT20aE8j)VnF9+*>7l=8r5LA~bkbGiEwk}2>{={NSU4_7-6U%IM zp#r#wh3vWlfs}|P%erKN#E8Yox;laMh-I3(5P?{=1zcT@0A6iLr!HO~L2Z#xS0j+7 zwk%xtP#~^*p{lM#AhmnxR^20kr0&JFx(0!a?q$llAn;Z7h48xUvSi*R)jC{RJnv#x zT~*m5-esP;@G@NSLQ!2&SxWJeV_iyFV)5d9U42=4@iIf*{jyl6g_OFyGQ880ab05B zdqKljPkwgZ5ub4TGF(?%mgcl9x=Zup+{MdJ%Kph)HN-!AA@=WsiTP#SoUQ+DL@{{H z`wx)fe|Y-@h53h9bbqB0c<1_WV2a6#fxv%x#|rR?d#}3o-hKV$r5_BurGwsp3H}#Y zy!Y1pzrf->B!(~ql=&~P7@$r53oQOGuoxhW0hH#yz+!+R0$8g50*gr_#eadt{{K<&aA*c#jKNWYe~vLGZM^*D;5axD^=F~)V~oLZ z-+vEdd=0`FHVEj438!-ojWjQ*ij9|Rh!3!~m zZpjLCob-hWP6h93|3)dx%0;D+$we1DseMpYmYeIOO(tJ_@S64k9@)zURQf*`CL4=n zkpSRToW|#=IF4jnEffH%u60Yy>E`x z%c5tgB{DfTg2vuZY|Bc`o;q|LMiulz=Q0@SU=3MuV!d^~|Z`(g$(U>_W$7gK*c`F~?m?(rh?o zcHuDDY@9v2Xqb#8?kYPfOl}hA!!D^JO@otXhpWiqaMtWt6&W3z9y?M+j)3!Em*|uh z#;LQ5bjnuYoY}=XWp3fFv7&onmY0{xFtKPRe*~)eF;l+A3$?ztdJ@`ugTK1ni{zp?(;G>!f0E z|7isKNd>unAq3w^rI-E35Nwh1m-@L7Jduiz`_CgdA{DIqF$jT3rO*9`5v&^WwEgS| zZVkn_emcZu4F%nP1cF~fslT5Jaj8dMq@NGL+oM?Be-Xjiqu|~zju7loTJJwt1LK!J z(a%=H#jhCAPgBFrub|d1T*Jq&)ZI@BAi;;FdHZ>4cuEzE!6&R{ng`XL-VWDLmx4d} z_V}yAq2U-*cBBLC@H@kShp2phdo=*0&vUUi8SXV1NcYNQa^M`sdu5qApoi18moE?Z zOT8!FekwSex|tQ=AT^vpoq1>uCYns0B{wG|`Y0;%(j1p)N>rBB97Z%?zi+FfD{yL634{wo(ow4`_xao4Y6Bm8TJqrsX41K!7 z^)p87^mqk}D@F+Vw6^PTBR=|_t%07&iaI{#h(4N%5WX{NuW=PQd>7Pubt>Zd&Z_kg zDr)$c)cS-g9`ez4zpkn%;bZLXy;bpu?_75eK$`NgboWtK1eKiTeH~trU2>kcSG59H zLdVO*F}c-P&*MQ_Yc=l(LGyzg4a(BvDGH?Tc`~Q z*FGw}&f9F?9A3JqRc_%lBwCy9vNDaT(rEG#8JUcDTIJ#_Hu6uwqb*TYRtp%h7n)VN z3kb27y;bfD;?MsOs8R!O#9PX$oEAi%zi_QGSwKC1xm0y~;pd&2pA-w93~i!6SZ#(# z{CIIDz4FV#k=vbSm4gc>Z+DMXZY>5#lR5u)3R`4Xg7RyT9sWU1}}#l!($7;`ek zCmCNM=0^`ESbe#ex6MDV3W@Wbdi8Ssm^fSXRFBfk6(2q3NTn}uA9d!4S2H(#t}#cy z`f}VyHa(PcM#V=b{UPTUZXeb3@cbDEALI0>{4W=L6w|}(W{i9c(j)D@V0|=~eV+L& z{hFfuG5%tGrD4oUGJX6u--^D=i$21=-N}|Q?T~ZRZ9X^6f|90keH_g0CrwZL_?q1{ zoJ#PqF}r6t{ocpZEO>D0iI0ofgTWupIerb2ZhtVYDS{XIEvaj^4Oq7qCTj)_NVk_G zYhDc!%YQ)N(CRxG0vTVIyPmHuHBc;f-d-I8$11vaR)6~c#?nC%0N;7>vyj!Fi)BXb z}v?@r=H6KG7!v<`n!Zx9VDx%(fMZZTzw3FAV*3 zi@!NG-7lXee)DU3k-CQ^9rKAmJAZvL+Wz!*wAeSzrikU4+uzKZqL;r=e3JH@R|j`b-sv7+-P%3$t3&GeX?g7zhtJ7&m^TWO z)ZfbkAV1PVw)sl$eYa&Kp49Y_;K@@k)L{#5-EbxkDYs)S5Kf{?SoW1gX~Wh^Vsv)!j0_g-kb0hfJ9_qf#_uK4im=T;xM zj5=Lht2JCf{cL}$2VCwoU3IH7TY76wYTg@u97S2($%G^}GNUzj-<T+dC3FZ0TWNCij5Et6k@s z>D_j_$HKiQ8^2Ac-J#0}98n5lZ%S6>ct$tQV5nM{lc;Ds=kFU0&c$>|3s+E0c2gw0 zu)cAjC5f6_uJeuXLn_{voh!mY<$T!>H`;vu26&3Aw7Gb}usv?o<{)010~cmPgV*DT z>$IUX--#DaQ0MROs1Z&R%rLW!xnRSAH?oa2vO(cZXJW860(g^|SYI1Syg7Z$5gS&c ztMsu7HgKbBi7}ULxQ&bxV{L4(MrH;vXKgMU8EvPxC+gcEjZ6n(kT(40O|{^xK$l-t z6F7F$r8tIbAA8fvnBpfVGIR~#W^8zei~-2SMr_E;D~8F2bI8am7DAbtZpKL12o9NS z#s=6(4VhEN9GZqH6>eHeR16Bjp4ht=1N>z}5= z>h|KQr!Qg+d*jxp4?fcdkbr5LXL{fb|1{+@9q___n&Fv2SsZct=(8)XxYTL-XZo&j zBh%E+`frz+-g^4+(pFc%t!8o9sV=#-3edH7S*_KHe=3#Y*6QqEdnnG^*SWqH1fcSr z-D}|uJmueK{7lDU(9`_BCS$8JOI^3un!uc^OKGjrpDm-yZta;rt9h5<+7tgv<6Yis zjpgGM->>+2ryf+G(^tQFIbKiI!3}@K06TrEO!b`FX3V2e&%Pb3$c@oPP4Yk;cFg#`9`IE(md9qYPa*n-Xv(|>!r%%wg(H+vKPSBm!d8W^tU^uP&UH^c-_F0{K z`e*d@&g!=5AJ^AO(8<-mpg%BD{)nfXry#rtS5#6|P*jvsROVQaQj|FU?TJ25%iV^m7B%>XHjC| zwBtVqoeme(7A`tI7%ucG9CeHyF5WEsG5@=00d?U^a5}Uos_^rC2mopp_Rl{An9RcU z`5*wlEbInHMvKY{iSzdXsIqWmJ__I`3wP%40;pu+D{zjqD82B@{5=4GEF7GV1X#zy zt@&U8Yjk)cuiJwdlvM+NYFN=^u||pF%>hps(^ZPMGM++A*B-oK_2gnQe(=`96T`$T zecN1Q4^+C@ex-r6C@Sx7aHLz`-xF3n52k5z62d%b(l#PetVN%J>Fd0n=o8Jy{qr8f z%fITtJa%4Pw7NIDdfr*|IhfAQUlV=W`*?lcU$hy_YUgF^D+ID5<}K^%z~pvbr@ltu zargW!@Dch<-g(vfsvv?aEw|dv;;bvYRy;Qt2_tWop<^qbj7vRWh z(Sx~9ej&_-N^@`hUT2Ir_?7&eRFV5JYM1!+u*4NDLflt634N{p{;yOLx_yM|uNNf@ z`})_VoSsdb0#IT>Lc~{^Mm@p)?#A!`9A7%THLBRC;kMN#wxQXmwmfjVW_*3iFJr9y zl>NBK*X=jxUXKrqQL~S?lO@ZvX5+TwB^P<69{0_=Z#M{n8TPxRhE6YWIL*QMl zaaYBj2H(mNrs9ahPjTE+anQlPYV+$-EG52UR>F?;*ES7k(`-sL-AV-<20$=vaiG&%0mf;D{g2 ziz;-Q$8YD|b+Bi^x95d9IHurd^6oh}7~==>A|0HD@tb+UbM~V6-n@u8$9nuy-h(*@ zKm1r;^qkW+{-^El7wnJXU)Y9TaJ-NIWE*n9K@tDf_TdGmcKoVs5Z;~x-)S3;cg(}j z+1|%H*y4w5qwr2M`0uuNjqK_1ZMI=Xj*0kb+j~Y12Ke{3kw#7f_^-CXL-r_qk8Q+| zV=aEs_Q8;Y7k<<>ddO)L|6}HNtUWdU(ZNCJ@W|bCXgI4 zgL~#&mRvlO^32sWIdvxSnafi0^O^K#Zp_IKz$oXOo}52}_jNT(PMS&Zbs0;3I+Nz> zCYc;P6L&<7@5$?1yd^bVj!q>{di|V#V|;V8>aNRa#&<`nU$`7&B;2pcayid9aKHMK z%VEa1idC^Lbd2v6tKYg%G4{7_Z~418Grnqnvg+)g`Ugi%n6qVSE60;g=UdI&bf{^! z!Ee~quDqYcTMOph0DxG?=+ z?Ol01l-=8(D4y)<36V@9O3Y$rn6dO&S|}71WlCcV1~Vfw_NYjkRuOGOS|x-h(#R-e z%bI;jvXy;_h>zw;K*L|J&oa;X4e80A}HL0UC z{>E}#%4yo-#wuKD2~D`MGA$*6Cf8V#mfA-XY^?BGx3a$URe7G*!{+-f98_bDoL|G< zwDdmmWJ6#YH;Hvf-dV8zsn>CNmt*y ze`;xvX+=UyC(60R-d|m z`|H7C#L<~i0?5D8EHa0zCSUj;pxf0&j#ZakQ#PD&8yl6zx3r}7 z*-n;br7L8)Ob$7f2z|~bz6{6zf1Iwn@Tompa-%%6X`#wBkA|gA*O<$tU$-O>|BxP@eR^Zdsr_Usb^Hp<_OG zkNG~@=yP+U@1OZT_w#*q*)aAY_8;tQHk=*9-p78;mSCS_Z)KOWk?aR-clIFrH}-M% zCUyZ^m3^1(%zn$3VMnoT*mZ1e_9M0rdz?L=eS~ey&gJ@D`XB6kU%P+X!BG*Y8SiI8 zLOWw;y75!`(m8poWTKmNexBzL@jzs@GV27}w z3hNTlF*1+hSx@we%;{id5b2Tm9i9`!KlTq}{XD|6 zgXnAhbO$Sf*pbw*WB(2=zQrZ+aeS-Gv}oiT@r>PxW8x3v+qxh7B~G{KDIAgbxP!=F zTaNWOy=O7wahz-CWsVfs#?i5xgG)?s?P}nNCEn<1CvY?p<9j+EbC!d>9UXog{lui6 zu8*8~;7wG!0A~gLu3YC)jwIOd(XoMpqTiS6dd^u$kG;~qinE%2?@H%w&Qh=oq{9*X zBqmf|f{uddpqILh=m+s=!eC17hv$4(BGo?zQm!x5$5Xl%!E)amh!ooO6-uwSIZ zi=#(RYU~>0@Pl_`oy9P(C{~o6^ks}9o zmUPfLI{k^9u6~YS|8@WNDW7&SbD|o(?D<_?nBKJ=0LOHhatO+ z89vz}qji5>5IYAT<_o5eEn=(j1~_6n#RmZWn9xX06vNM-MxQ@T0FV&0CKbT1fG+@L zZFW8B2C#MxT3^cpS3#`zVQsWxkysE&ix6U?6$;K<4GYZ*ew!Bom~vm{MT8(wAqP(Y z&jVMTo`KO|TVckq4KO%N8>Rt6gFh?)1Tq4^z$_|*ZVc6{YD@r-e;9z2iU%O8XiY6O zBuWK|Q~`Qs42OTAGRFo8es|6aT!a~gMRFjqNM9g^5jJL908-6oJS6lSKqTFDJ^)b2 z6#yaeaE|m82RK|sIMqQ<(Hd)pG;=qiI8!(Ic~GqU%(s*MT*-I`#dZ2Za9tmQ56zth zZUgtBxzU*fA3a491c5{V-ytzV5zbR#x#}ruYM|7$kSIk^4zBCr;7G6pPiM9mIMY*f zX0hA}2!yw{w}!W-2E)S%fdZgs2qYSTMymr2b*3+!Me2J$R-pJM`@ zsljW72AM%afC~teh9+Y6o^V}oPWbYG^=VLqX=|W0u)2`qw+o<+a9sps&>RDymjB;c z4ZQ!=ao<_(LvjaJBfnY=6bZbTqd?)L4~3gL3ayUDZ$~2unrH$q<_JinF5(AG$Yk)G zL2(d@R7c-`Qhbi)oZ_E@@gG$%SNA{UN(b^+Pr7@0xbXtefsCNc!geu%H&I``=|Cnp zGCXJ`mOcsKdQr)|t_%f$F5=sz|B&6_t|X|V&gniRDwW2wAG(I1GZ9n=&=Gmj$BSQ} zPjDxBu=G*9sQr36`>O)zGVJs~_c6Jz~<{9D269A;*7%l@}5obCMJCk{9Pl>72KIr|Wx zKK1WBcu(fvc>}2KUpM(F5C3x4FL(Wv2YyQVS9JYy*H3xir<8w1*U!1@TRH{sOZ61J zp=9YVz^DMP_q%irjhE=>_CQLfD%IR2v$^?mKzP>ChLuG zD1hs&j@CdyShKuRMhvo26;LLO?-JVeydF78YOhvF=MFgy>?)*eQ5XwPEZVV^uCX zNmz=hBRy`Bp-6XDx_35)fI=M(eH9WNU3^A8c7hn>tgnwTN0xcVHm${k1wWVAy)}_z zGsCw%WQ3o^^gv?&L}Do^QAbZj*=*Q^QNf&CA<|(yVy`%zgP9h7!L3!aQWJ!E;9ylP z;${*`8ZHtr*~6VNqR!%v55;F=V-#dy0>Q*{05ogfqXk>|Q?rTgT92gH@@;;K9#pd7 z-wQjqAn8zT_Rc{mAL(8J|7-(ynPvQThZ))8uSLd1cMGhLm>2s;*tuo7hcIyY0ts}m z8(gqJbhl_i$kYn4-{%djkPH{180cI#d@I2cAuPOhSi|7-R$-RhWARagobvhar9Sd~ zIwWZ$axo}kpIIF&?NHx7tte5!Y!Xu86`#{H-@(9fRpNr$XQv0v#+NqW zXrq#(vIE}!RGnh~afN3FvFDW>KHO2YI9Uil=%yI=MqN&VKUW*a(`ZpR8NR#?go<81K+wuy{p~$)8rdN z15SJj3f^z2EqZlz>4L6fq1no|KMKc{?Z3#kr&@;HmET!I<9(vkR@Sv zI4LK+O>od^9M2aKvjM5%BY~5ge}rhbx|Q#GM7fcV*|@>)DlQTU$6w_l?a}+ihm?kd zl0&sOOqniP8FzlINxVtxO-$uHOVPMXRhus_;?HZ(wXsjMe`;@H@1J`wFEMoVxY-5C zltuO7nU|NDlqyA@LtGd*mtWAb+Vb~+lXA*O!ZzTIGd5)y`5H{D&`_hV?N=^cTqcEB z%w6+JZJKR*(`B3d-KSL;7u3Tu4QAJ3Tb*Sw{=1Rtr*|5<#^~J+I2W@CsjRD{sO+_A zyGc{HOvHSp2qo)H0;ac3mY>gDgIAr{VY;)((B;YYuqsmAhPZigNtG zmQ=1pa|`YkX%`w7v=?5D$WR$EzqrO#kzNP7YQf^{L75YrH`kPjy-Po|wD=JDkb@>EP? z!p?-9wY+C}%koa8%2C~%6OuWqju_3oYE}^m5gA1xMW>6%Ym}BSBP1gDA_O9~?FhSf z$>nbM^6L0|h^pLbw<;f(^)3l6jH-9t8r_DYLZklOsj|CeU9oAd#44E@C70bU!2G@ zduqD%ohqYBUpRE)J0F0T$`|&Az1sDJ6mU5!HSk_w!gSQ(Q%~0fuMPGKHZeNdx;v-& zsQOVmo5yR#dXVwOzoAobi)60hWN{a9W9U*89X;&^sD!b2$4as(+7nlTq#*+sw`o%L zURC#Nue$X+W;JIP9(W!^k)-V}vahmy>hYw*pm=hpkD5w6ZD(zQV}e;iNX^3lwY$M`M}Og38r?QIg5KT8d3|G1)K9iyF3ef%Bs`inbzLEn|&GY6UW$l z$&Xi&OK54@jnR7w*~6&O`tFyln@2>4^*Sa46Gj{4T@}U)C)a=}?Ek(^Y`)_(V z__Z6c1rQOnPj&?`yE`Yhb#IH?CLW8u@$!bki063YI6q1Nm4Pa=H?tSEx67^1U6N;( zuamEEHd^w&MQag*%adD-sW7vT(mkSFEB@1b* zPldk^KfFD)DmYG|GV`Uz&Bc|z@A{U?F2ye;+xDgJbkHakDRnEgENZxnO)2rRo$%VH z<1|^~R^8j%8;MWEV>6Br1L+^cYR&}fIC=^6x)qVzDP2z*I+EkP(sTQ7Hd_q$4aW=r zwjgOrPX`#6KkXQ9M!C#!6{#I1%Gl(6)6? zvf#e2gi!_&7T z)y`baW^d9(?JZ1n)1$f%`z(oD^Ux)Q5c9Egb+Hxp&bvD!=4Ca;)gsr1bYHS|&bUqB zyEA&3cBLEH3Yo8cuV>WUP3w;B&70bstz2>IMDgKB&Oy(qhsowi{kaS@cS%+7sLAL{ zQIcq|b!O6^T8Yk6efRpSi(1}s6&@Ysru8+rU3fqp_NyDcQxaJ6!Io%C|8w`lnwE0z z{?6MCB`G*R+X{v7bzUvcni{-Z6ZLKdbfyiCHHro1_vlD^KOZ>SB;PO6z3g#%>)wNr zcGhJ9Et6*-2Rv5Lw;6feYBZK3c((5Ba=o#DrkAN{cappV2KL$QYe}7cJ)JzSKRb6{ z)$8|Lr^>rjOf07TE>DQ~r7@#0nFozs+TSuex~gxys3<0Pl1tjm+q~@_*okC{1maPW zI;fE~ZP?+*g9?>1s?k;KOkE1LdhB_RSqsL=Z&3rCm}^jzRbbgun)e2l3@b`u1k(_0cksyiCilcca=~fc`E7Iq+R}!D zTVyP9Lr;?i?PX@rw`bN5tRu&jDz~hCv+9IY_o>sHr3Muh*NddfNLoweTuM5=_{kt4 zXhJq5nNJdNIH`EwQW+cAA!O6>hwfEq#qQ|V){Km^vamx20RtbNWn^&IbarOlNQE7P z#VEH%n=I^T{hRUeH;5C!WyoVlGy;`ws=Cd7u(oNWNfl0F1Ng6eEV4Cyfr~S3bXKh6COZ9+t@5F*x8-fetu*Rt6?_AdaW+WY7tOtO6Zh z^uSj%poIBB26)}T)D(1l(?daYLf^?yc)(NigG>{U`~aeu@AQBS56DoymjMnTz{B)| z3&mVUU0(>xcUSnI^;r0Ucl30T@M4fGzMx8N|`_7a1TE`B4U_ zkA9FrEQ3GT41A9PKoH-T1w=N0W9SDN4&tQzK?WF`=GemWAc6GA1F(L81dZwk5+$q< z!ji#Y!J$?_U^Ki$jW-<#ofyMyb+L~2C~b;1;Dw|(0v<94EfNNBq)~8MT1c`ZNed6S dJN~5#F9Mk?@Y0?ae;7c`h(!r0E3dcM@L$_W`85Cl literal 0 HcmV?d00001 diff --git a/vendor/horstoeko/zugferd/examples/assets/03_ZugferdDocumentReader_ImportFile_EN16931.xml b/vendor/horstoeko/zugferd/examples/assets/03_ZugferdDocumentReader_ImportFile_EN16931.xml new file mode 100644 index 000000000..78014c58e --- /dev/null +++ b/vendor/horstoeko/zugferd/examples/assets/03_ZugferdDocumentReader_ImportFile_EN16931.xml @@ -0,0 +1,266 @@ + + + + + urn:cen.eu:en16931:2017 + + + + R-2024/00001 + 380 + + 20241231 + + + Lieferant GmbH + Lieferantenstraße 20 + 80333 München + Deutschland + Geschäftsführer: Hans Muster + Handelsregisternummer: H A 123 + + REG + + + + + + 1 + + + TB100A4 + Trennblätter A4 + 50er Pack + + + + 9.90 + + + + 20.00 + + + + VAT + S + 19.00 + + + 198.00 + + + + + + 2 + + + ARNR2 + Joghurt Banane + B-Ware + + + + 5.50 + + + + 50.00 + + + + VAT + S + 7.00 + + + 275.00 + + + + + + 3 + + + ARNR3 + Joghurt Erdbeer + + + + 4.00 + + + + 100.00 + + + + VAT + S + 7.00 + + + 400.00 + + + + + + 549910 + 4000001123452 + Lieferant GmbH + + H. Müller + Verkauf + + +49-111-2222222 + + + hm@lieferant.de + + + + 80333 + Lieferantenstraße 20 + München + DE + + + sales@lieferant.de + + + 201/113/40209 + + + DE123456789 + + + + GE2020211 + Kunden AG Mitte + + H. Meier + Einkauf + + +49-333-4444444 + + + hm@kunde.de + + + + 69876 + Kundenstraße 15 + Frankfurt + DE + + + purchase@kunde.de + + + + SO-2024-000993337 + + + PO-2024-0003324 + + + CON-2024/2025-001 + + + REFDOC-2024/00001-1 + http.//some.url + 916 + Inhaltsstoffe Joghurt + + + REFDOC-2024/00001-2 + 916 + Herkunftsnachweis Trennblätter + TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQu + + + LOS 738625 + 50 + + + 125 + 130 + SA + + + PROJ-2025-001-1 + Allgemeine Dienstleistungen + + + + + Kunden AG Ost + + 04109 + Lieferstraße 1 + Leipzig + DE + + + + + 20250115 + + + + + R-2024/00001 + EUR + + Kunden AG Zahlungsdienstleistung + + + 59 + + DE12500105170648489890 + + + + 37.62 + VAT + 198.00 + S + 19.00 + + + 47.25 + VAT + 675.00 + S + 7.00 + + + + 20250101 + + + 20250131 + + + + Wird von Konto DE12500105170648489890 abgebucht + + 20250131 + + MANDATE-2024/000001 + + + 873.00 + 0.00 + 0.00 + 873.00 + 84.87 + 957.87 + 957.87 + + + + diff --git a/vendor/horstoeko/zugferd/examples/assets/03_ZugferdDocumentReader_ImportFile_XRECHNUNG3.xml b/vendor/horstoeko/zugferd/examples/assets/03_ZugferdDocumentReader_ImportFile_XRECHNUNG3.xml new file mode 100644 index 000000000..5158e88be --- /dev/null +++ b/vendor/horstoeko/zugferd/examples/assets/03_ZugferdDocumentReader_ImportFile_XRECHNUNG3.xml @@ -0,0 +1,271 @@ + + + + + urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 + + + urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0 + + + + R-2024/00001 + 380 + + 20241231 + + + Lieferant GmbH +Lieferantenstraße 20 +80333 München +Deutschland +Geschäftsführer: Hans Muster +Handelsregisternummer: H A 123 + + + REG + + + + + + 1 + + + TB100A4 + Trennblätter A4 + 50er Pack + + + + 9.90 + + + + 20.00 + + + + VAT + S + 19.00 + + + 198.00 + + + + + + 2 + + + ARNR2 + Joghurt Banane + B-Ware + + + + 5.50 + + + + 50.00 + + + + VAT + S + 7.00 + + + 275.00 + + + + + + 3 + + + ARNR3 + Joghurt Erdbeer + + + + 4.00 + + + + 100.00 + + + + VAT + S + 7.00 + + + 400.00 + + + + + 34676-342323 + + 549910 + 4000001123452 + Lieferant GmbH + + H. Müller + Verkauf + + +49-111-2222222 + + + hm@lieferant.de + + + + 80333 + Lieferantenstraße 20 + München + DE + + + sales@lieferant.de + + + 201/113/40209 + + + DE123456789 + + + + GE2020211 + Kunden AG Mitte + + H. Meier + Einkauf + + +49-333-4444444 + + + hm@kunde.de + + + + 69876 + Kundenstraße 15 + Frankfurt + DE + + + purchase@kunde.de + + + + SO-2024-000993337 + + + PO-2024-0003324 + + + CON-2024/2025-001 + + + REFDOC-2024/00001-1 + http.//some.url + 916 + Inhaltsstoffe Joghurt + + + REFDOC-2024/00001-2 + 916 + Herkunftsnachweis Trennblätter + TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQu + + + LOS 738625 + 50 + + + 125 + 130 + SA + + + PROJ-2025-001-1 + Allgemeine Dienstleistungen + + + + + Kunden AG Ost + + 04109 + Lieferstraße 1 + Leipzig + DE + + + + + 20250115 + + + + + R-2024/00001 + EUR + + Kunden AG Zahlungsdienstleistung + + + 59 + + DE12500105170648489890 + + + + 37.62 + VAT + 198.00 + S + 19.00 + + + 47.25 + VAT + 675.00 + S + 7.00 + + + + 20250101 + + + 20250131 + + + + Wird von Konto DE12500105170648489890 abgebucht + + 20250131 + + MANDATE-2024/000001 + + + 873.00 + 0.00 + 0.00 + 873.00 + 84.87 + 957.87 + 957.87 + + + + diff --git a/vendor/horstoeko/zugferd/make/.gitignore b/vendor/horstoeko/zugferd/make/.gitignore new file mode 100644 index 000000000..e5a1774f0 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/.gitignore @@ -0,0 +1,2 @@ +classes/ +download/ diff --git a/vendor/horstoeko/zugferd/make/config_basic.yml b/vendor/horstoeko/zugferd/make/config_basic.yml new file mode 100644 index 000000000..23f3101bd --- /dev/null +++ b/vendor/horstoeko/zugferd/make/config_basic.yml @@ -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' diff --git a/vendor/horstoeko/zugferd/make/config_basic_wl.yml b/vendor/horstoeko/zugferd/make/config_basic_wl.yml new file mode 100644 index 000000000..e04020b86 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/config_basic_wl.yml @@ -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' diff --git a/vendor/horstoeko/zugferd/make/config_en16931.yml b/vendor/horstoeko/zugferd/make/config_en16931.yml new file mode 100644 index 000000000..41515b357 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/config_en16931.yml @@ -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' diff --git a/vendor/horstoeko/zugferd/make/config_extended.yml b/vendor/horstoeko/zugferd/make/config_extended.yml new file mode 100644 index 000000000..f52b21c7d --- /dev/null +++ b/vendor/horstoeko/zugferd/make/config_extended.yml @@ -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' diff --git a/vendor/horstoeko/zugferd/make/config_minimum.yml b/vendor/horstoeko/zugferd/make/config_minimum.yml new file mode 100644 index 000000000..026ed31ae --- /dev/null +++ b/vendor/horstoeko/zugferd/make/config_minimum.yml @@ -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' diff --git a/vendor/horstoeko/zugferd/make/genchangelog.php b/vendor/horstoeko/zugferd/make/genchangelog.php new file mode 100644 index 000000000..08aa522bd --- /dev/null +++ b/vendor/horstoeko/zugferd/make/genchangelog.php @@ -0,0 +1,211 @@ +setTimeStamp(strtotime($commitDate))->setTimezone(new DateTimeZone('Europe/Berlin')); + + $commitDate = $time->format('Y-m-d H:i:s T'); + $commitAuthor = correctAuthor($commitAuthor); + $commitSubject = correctSubject($commitSubject, $commitIssues); + $commitIssuesWithUrls = array_map(function ($issue) { + return sprintf('[%1$s](https://github.com/horstoeko/zugferd/issues/%2$s)', $issue, substr($issue, 1)); + }, $commitIssues); + + $commitSubjectIcons = ""; + $commitSubjectIcons .= str_starts_with($commitSubject, '[ENH] ') ? ':new: ' : ''; + $commitSubjectIcons .= str_starts_with($commitSubject, '[DEPR] ') ? ':closed_book: ' : ''; + $commitSubjectIcons .= str_starts_with($commitSubject, '[FIX] ') ? ':bug: ' : ''; + $commitSubjectIcons .= str_starts_with($commitSubject, '[FEAT] ') ? ':new: ' : ''; + + $commitSubjectIcons .= ($commitSubjectIcons === "" ? ':new_moon: ' : ''); + + $markDown[] = sprintf('| %6$s | [%1$s](https://github.com/horstoeko/zugferd/commit/%1$s) | %2$s | %3$s | %4$s | %5$s', $commitHash, $commitDate, $commitAuthor, $commitSubject, implode(", ", $commitIssuesWithUrls), $commitSubjectIcons); + } + + $markDown[] = ''; + } + + if ($noOfHiddenCommits == 1) { + $markDown[] = ":exclamation: _There is one internal commit_"; + $markDown[] = ''; + } + + if ($noOfHiddenCommits > 1) { + $markDown[] = sprintf(":exclamation: _There are %s internal commit(s)_", $noOfHiddenCommits); + $markDown[] = ''; + } + + return $markDown; +} + +function printMarkdown(array $markDown): void +{ + foreach ($markDown as $_) { + echo $_ . PHP_EOL; + } +} + +echo "----------------------------------------------------------------------" . PHP_EOL; +echo "---- Generating CHANGELOG.md" . PHP_EOL; +echo "----------------------------------------------------------------------" . PHP_EOL; + +if (!isset($argv[1]) && !isset($argv[2])) { + echo "No arguments found using latest and current tag" . PHP_EOL; + $lastHash = trim(shell_exec('git rev-list --tags --skip=1 --max-count=1')); + $prevTag = trim(shell_exec(sprintf('git describe --abbrev=0 --tags %s', $lastHash))); + $currTag = trim(shell_exec('git describe --tags --abbrev=0')); + echo "Found tags..." . PHP_EOL; + echo ' - prevTag: ' . $prevTag . PHP_EOL; + echo ' - currTag: ' . $currTag . PHP_EOL; + file_put_contents(__DIR__ . '/CHANGELOG.md', implode("\n", getMarkDown($prevTag, $currTag))); +} elseif (isset($argv[1]) && $argv[1] === "all") { + echo "All-argument was presented. Looking for all tags" . PHP_EOL; + $completeMarkDown = []; + $allTags = explode("\n", trim(shell_exec('git tag --sort=-creatordate'))); + $allTags = array_filter($allTags, function ($tag) { + return str_starts_with($tag, "v0.") === false; + }); + if ($allTags !== []) { + echo "Found tags..." . implode(', ', $allTags) . PHP_EOL; + foreach ($allTags as $currTagKey => $currTag) { + if (!isset($allTags[$currTagKey + 1])) { + continue; + } + + $prevTag = $allTags[$currTagKey + 1]; + echo sprintf('Looking for tag %s (Previous: %s)', $currTag, $prevTag) . PHP_EOL; + $markDown = getMarkDown($prevTag, $currTag); + foreach ($markDown as $markDownLine) { + $completeMarkDown[] = $markDownLine; + } + } + + file_put_contents(__DIR__ . '/CHANGELOG.md', implode("\n", $completeMarkDown)); + } else { + echo "No tags were found" . PHP_EOL; + } +} else { + echo "First and previous tag were presented" . PHP_EOL; + $prevTag = $argv[1]; + $currTag = $argv[2]; + echo ' - prevTag: ' . $prevTag . PHP_EOL; + echo ' - currTag: ' . $currTag . PHP_EOL; + file_put_contents(__DIR__ . '/CHANGELOG.md', implode("\n", getMarkDown($prevTag, $currTag))); +} diff --git a/vendor/horstoeko/zugferd/make/genclasses b/vendor/horstoeko/zugferd/make/genclasses new file mode 100644 index 000000000..4d6622cc1 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/genclasses @@ -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 diff --git a/vendor/horstoeko/zugferd/make/genclasses.bat b/vendor/horstoeko/zugferd/make/genclasses.bat new file mode 100644 index 000000000..7bfab9635 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/genclasses.bat @@ -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 diff --git a/vendor/horstoeko/zugferd/make/gencodelists b/vendor/horstoeko/zugferd/make/gencodelists new file mode 100644 index 000000000..9cadfc771 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/gencodelists @@ -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/ diff --git a/vendor/horstoeko/zugferd/make/gencodelists.php b/vendor/horstoeko/zugferd/make/gencodelists.php new file mode 100644 index 000000000..9dacc7004 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/gencodelists.php @@ -0,0 +1,905 @@ + $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; + } + + $downloadedContent = file_get_contents($downloadFromUrl); + + if ($downloadedContent=== false) { + throw new \Exception('Failed to download the file.'); + } + + if (file_put_contents($saveToFile, $downloadedContent) === 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 + + $classGenerationEnabled = $fileToDownload[DOWNLOADDEF_KEY_ENABLED] ?? false; + $classNamespace = $fileToDownload[DOWNLOADDEF_KEY_CLASSNAMESPACE]; + $className = $fileToDownload[DOWNLOADDEF_KEY_CLASSNAME]; + $classDir = PathUtils::combineAllPaths(__DIR__, "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]; + $classShortIdentifiersLength = $fileToDownload[DOWNLOADDEF_KEY_SHORTIDENTIFIERS_LENGTH] ?? 4; + $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 enabled + + if ($classGenerationEnabled !== true) { + outputline(sprintf("Generating class %s is disabled", $className)); + return; + } + + // Logging + + outputline(sprintf("Generating class %s", $className)); + + // 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 \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, $classShortIdentifiersLength)), $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, $classShortIdentifiersLength))); + } + } + + $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, $classShortIdentifiersLength), 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 a code class + * + * @return void + */ +function createCodeClassFromCsv(array $fileToDownload): void +{ + // Define some internal variables + + $classGenerationEnabled = $fileToDownload[DOWNLOADDEF_KEY_ENABLED] ?? false; + $classNamespace = $fileToDownload[DOWNLOADDEF_KEY_CLASSNAMESPACE]; + $className = $fileToDownload[DOWNLOADDEF_KEY_CLASSNAME]; + $classDir = PathUtils::combineAllPaths(__DIR__, "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]; + $classShortIdentifiersLength = $fileToDownload[DOWNLOADDEF_KEY_SHORTIDENTIFIERS_LENGTH] ?? 4; + $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 enabled + + if ($classGenerationEnabled !== true) { + outputline(sprintf("Generating class %s is disabled", $className)); + return; + } + + // Logging + + outputline(sprintf("Generating class %s", $className)); + + // 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 \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) { + $downloadedContentObjectData = []; + + if (($handle = fopen($fileToDownload[DOWNLOADDEF_KEY_TOFILE][$idx], "r")) !== false) { + while (($row = fgetcsv($handle, null, "|")) !== false) { + $downloadedContentObjectData[] = $row; + } + + fclose($handle); + } else { + echo "Die Datei konnte nicht geöffnet werden."; + } + + $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, $classShortIdentifiersLength)), $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) { + $downloadedContentObjectData = []; + + if (($handle = fopen($fileToDownload[DOWNLOADDEF_KEY_TOFILE][$idx], "r")) !== false) { + while (($row = fgetcsv($handle, null, "|")) !== false) { + $downloadedContentObjectData[] = $row; + } + + fclose($handle); + } else { + echo "Die Datei konnte nicht geöffnet werden."; + } + + $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, $classShortIdentifiersLength))); + } + } + + $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) { + $downloadedContentObjectData = []; + + if (($handle = fopen($fileToDownload[DOWNLOADDEF_KEY_TOFILE][$idx], "r")) !== false) { + while (($row = fgetcsv($handle, null, "|")) !== false) { + $downloadedContentObjectData[] = $row; + } + + fclose($handle); + } else { + echo "Die Datei konnte nicht geöffnet werden."; + } + + $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, $classShortIdentifiersLength), 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 = $fileToDownload[DOWNLOADDEF_KEY_CLASSCREATORFUNC] ?? DOWNLOADDEF_KEY_CLASSCREATORFUNC_DEFAULT; + $classCreatorFunc($fileToDownload); + } +} + +/* ---------------------------------------------------------------------------------------------------------- + Main + ---------------------------------------------------------------------------------------------------------- */ + +$filesToDownload = [ + [ + DOWNLOADDEF_KEY_ENABLED => true, + 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(__DIR__, "download"), "UNTDID_7161.json"), + PathUtils::combinePathWithFile(PathUtils::combineAllPaths(__DIR__, "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_KEY_ENABLED => true, + 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(__DIR__, "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_KEY_ENABLED => true, + 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(__DIR__, "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_KEY_ENABLED => true, + 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(__DIR__, "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_KEY_ENABLED => true, + 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(__DIR__, "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_KEY_ENABLED => true, + 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(__DIR__, "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_KEY_ENABLED => true, + 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(__DIR__, "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_KEY_ENABLED => true, + 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(__DIR__, "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_KEY_ENABLED => true, + 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(__DIR__, "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_KEY_ENABLED => true, + 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(__DIR__, "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_KEY_ENABLED => true, + 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(__DIR__, "download"), "UNECE_REC_20.json"), + PathUtils::combinePathWithFile(PathUtils::combineAllPaths(__DIR__, "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_"], + ], + [ + DOWNLOADDEF_KEY_ENABLED => true, + 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(__DIR__, "download"), "UNTDID_5305.json"), + ], + DOWNLOADDEF_KEY_URL_HP => "https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:untdid.5305_3", + DOWNLOADDEF_KEY_CLASSNAMESPACE => "horstoeko\zugferd\codelists", + DOWNLOADDEF_KEY_CLASSNAME => "ZugferdVatCategoryCodes", + 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 => true, + DOWNLOADDEF_KEY_ADDMETHODS => DOWNLOADDEF_KEY_ADDMETHODS_DEFAULT, + DOWNLOADDEF_KEY_DATA_SORTINDEX => 1, + DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX => [], + ], + [ + DOWNLOADDEF_KEY_ENABLED => true, + DOWNLOADDEF_LIB_NAME => 'zugferd', + DOWNLOADDEF_LIB_TITLE => 'Zugferd', + DOWNLOADDEF_KEY_URL => [ + PathUtils::combinePathWithFile(PathUtils::combineAllPaths(__DIR__, "download"), "UNTDID_1229.csv"), + ], + DOWNLOADDEF_KEY_TOFILE => [ + PathUtils::combinePathWithFile(PathUtils::combineAllPaths(__DIR__, "download"), "UNTDID_1229.csv"), + ], + DOWNLOADDEF_KEY_URL_HP => "https://service.unece.org/trade/untdid/d05a/tred/tred1229.htm", + DOWNLOADDEF_KEY_CLASSNAMESPACE => "horstoeko\zugferd\codelists", + DOWNLOADDEF_KEY_CLASSNAME => "ZugferdLineStatusCodes", + DOWNLOADDEF_KEY_TITLE => "list of codes specifying an action request/notification", + DOWNLOADDEF_KEY_TITLE_LIST => "UNTDID 1229 Action request/notification description code", + DOWNLOADDEF_KEY_SHORTIDENTIFIERS => true, + DOWNLOADDEF_KEY_SHORTIDENTIFIERS_LENGTH => 6, + DOWNLOADDEF_KEY_ADDMETHODS => DOWNLOADDEF_KEY_ADDMETHODS_DEFAULT, + DOWNLOADDEF_KEY_DATA_SORTINDEX => 0, + DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX => [], + DOWNLOADDEF_KEY_CLASSCREATORFUNC => 'createCodeClassFromCsv', + ], +]; + +outputLine("\n\nCodelist Generator v1.0\n----------------------------------------\n"); + +downloadLists($filesToDownload); +createCodeClasses($filesToDownload); + +outputLine("\n"); diff --git a/vendor/horstoeko/zugferd/make/genmethoddocs.php b/vendor/horstoeko/zugferd/make/genmethoddocs.php new file mode 100644 index 000000000..b6e7d64aa --- /dev/null +++ b/vendor/horstoeko/zugferd/make/genmethoddocs.php @@ -0,0 +1,731 @@ +indentation = ' '; + } +} + +class ExtractClass +{ + /** + * The class to analyze + * + * @var string + */ + protected $className = ""; + + /** + * Class + method name to ignore in inheritance check + * + * @var array + */ + protected $ignoreInheritance = []; + + /** + * Constructor + * + * @param string $className + * @param array $ignoreInheritance + */ + public function __construct(string $className, array $ignoreInheritance = []) + { + $this->className = $className; + $this->ignoreInheritance = $ignoreInheritance; + } + + /** + * Returns the current classnane + * + * @return string + * */ + public function getClassName(): string + { + return $this->className; + } + + /** + * Returns the base name of the current classname + * + * @return string + */ + public function getClassBasename(): string + { + $classParts = explode('\\', $this->className); + return end($classParts); + } + + /** + * Magic method __toString, String converstion + * + * @return string + * @throws InvalidArgumentException + * @throws PcreException + * @throws LogicException + */ + public function __toString() + { + return $this->getJson(); + } + + /** + * Returns the result as array + * + * @return array + * @throws InvalidArgumentException + * @throws PcreException + * @throws LogicException + */ + public function getArray(): array + { + $reflection = new ReflectionClass($this->className); + $classDocComment = $reflection->getDocComment(); + $methods = $reflection->getMethods(ReflectionMethod::IS_PUBLIC); // Only public methods + $docBlockFactory = DocBlockFactory::createInstance(); + $result = []; + $result['methods'] = []; + + if ($classDocComment !== false) { + $classDocBlock = $docBlockFactory->create($classDocComment); + $deprecatedTag = $classDocBlock->getTagsByName('deprecated'); + $result['class'] = [ + 'summary' => in_array($classDocBlock->getSummary(), ['', '0'], true) ? '' : $classDocBlock->getSummary(), + 'description' => (string)$classDocBlock->getDescription() !== '' && (string)$classDocBlock->getDescription() !== '0' ? (string)$classDocBlock->getDescription() : '', + 'deprecated' => $deprecatedTag === [] ? '' : (string)$deprecatedTag[0] + ]; + } else { + $result['class'] = [ + 'summary' => '', + 'description' => '', + 'deprecated' => '' + ]; + } + + foreach ($methods as $method) { + if ($method->getDeclaringClass()->getName() != $this->className && !in_array(sprintf('%s::%s', $this->className, $method->getName()), $this->ignoreInheritance)) { + continue; + } + + $docComment = $method->getDocComment(); + $parameters = []; + $returnDetails = [ + 'type' => 'void', + 'description' => '' + ]; + $methodDetails = [ + 'summary' => '', + 'description' => '', + 'static' => false, + 'abstract' => false, + 'final' => false, + 'hasadditional' => false, + 'deprecated' => '', + ]; + + if ($docComment !== false) { + $docBlock = $docBlockFactory->create($docComment); + + // Extract summary and description + $methodDetails['summary'] = in_array($docBlock->getSummary(), ['', '0'], true) ? 'No summary available.' : $docBlock->getSummary(); + $methodDetails['description'] = (string)$docBlock->getDescription() !== '' && (string)$docBlock->getDescription() !== '0' ? (string)$docBlock->getDescription() : ''; + $methodDetails['static'] = $method->isStatic(); + $methodDetails['abstract'] = $method->isAbstract(); + $methodDetails['final'] = $method->isFinal(); + $methodDetails['hasadditional'] = $method->isStatic() || $method->isAbstract() || $method->isFinal(); + $deprecatedTag = $docBlock->getTagsByName('deprecated'); + if ($deprecatedTag !== []) { + $methodDetails['deprecated'] = (string)$deprecatedTag[0]; + } + + // Parse @param tags + $paramDescriptions = []; + foreach ($docBlock->getTagsByName('param') as $tag) { + if ($tag instanceof Param) { + $paramDescriptions[$tag->getVariableName()] = [ + 'type' => (string) $tag->getType(), + 'description' => (string) $tag->getDescription() + ]; + } + } + + // Parse @return tag + $returnTag = $docBlock->getTagsByName('return'); + if ($returnTag !== [] && $returnTag[0] instanceof Return_) { + $returnDetails['type'] = (string) $returnTag[0]->getType(); + $returnDetails['description'] = (string) $returnTag[0]->getDescription(); + } + } + + // Get method parameters and match them with DocBlock descriptions + foreach ($method->getParameters() as $parameter) { + $parameterName = $parameter->getName(); + $parameterType = $parameter->getType(); + $parameterTypeString = ""; + + if ($parameterType instanceof ReflectionUnionType) { + $types = $parameterType->getTypes(); + foreach ($types as $type) { + $parameterTypeString .= $type->getName() . '|'; + } + + $parameterTypeString = rtrim($parameterTypeString, '|'); + } elseif ($parameterType instanceof ReflectionNamedType) { + $parameterTypeString = $parameterType->getName(); + } else { + $parameterTypeString = 'mixed'; + } + + $parameters[] = [ + 'name' => $parameterName, + 'type' => $parameterTypeString ?: 'mixed', + 'isNullable' => $parameterType && $parameterType->allowsNull(), + 'defaultValueavailable' => $parameter->isOptional() && $parameter->isDefaultValueAvailable(), + 'defaultValue' => $parameter->isOptional() ? ($parameter->isDefaultValueAvailable() ? $parameter->getDefaultValue() : null) : null, + 'description' => $paramDescriptions[$parameterName]['description'] ?? '' + ]; + } + + $result['methods'][$method->getName()] = [ + 'methodDetails' => $methodDetails, + 'parameters' => $parameters, + 'return' => $returnDetails + ]; + } + + return $result; + } + + /** + * Returns the result as JSON string + * + * @return string + * @throws InvalidArgumentException + * @throws PcreException + * @throws LogicException + */ + public function getJson(): string + { + return json_encode($this->getArray(), JSON_PRETTY_PRINT); + } + + /** + * Save Json to file + * + * @param string $filename + * @return void + * @throws InvalidArgumentException + */ + public function saveJson(string $filename): void + { + file_put_contents($filename, $this->getJson()); + } +} + +class MarkDownGenerator +{ + /** + * Extractor + * + * @var ExtractClass + */ + protected $extractor; + + /** + * The lines for the MD + * + * @var string[] + */ + protected $lines = []; + + /** + * Constructor + * + * @param ExtractClass $extractor + */ + public function __construct(ExtractClass $extractor) + { + $this->extractor = $extractor; + } + + /** + * Generate markdown + * + * @return MarkDownGenerator + */ + public function generateMarkdown(): MarkDownGenerator + { + $metaData = $this->extractor->getArray(); + + $this->addLineH2("Summary"); + + $phpPrinter = new CustomPhpPrinter(); + $phpClass = new ClassType($this->extractor->getClassBasename()); + + if (!empty($metaData['class']['summary'])) { + $this->addLine($this->removeSprintfPlaceholder($metaData['class']['summary'] ?? ""))->addEmptyLine(); + } + + if (!empty($metaData['class']['description'])) { + $this->addLine($this->removeSprintfPlaceholder($metaData['class']['description'] ?? ""))->addEmptyLine(); + } + + if (!empty($metaData['class']['deprecated'])) { + $this->addLine("> [!CAUTION]"); + $this->addLine("> Deprecated %s", $metaData['class']['deprecated']); + $this->addEmptyLine(); + } + + $this->addExample(__DIR__ . sprintf('/md/%s.md', $this->extractor->getClassBasename()), true); + + if (!empty($metaData['methods'])) { + $this->addLineH2("Methods"); + } + + foreach ($metaData['methods'] as $methodName => $methodData) { + $this->addLineH3($methodName, $methodData["methodDetails"]["hasadditional"] === false); + + if ($methodData["methodDetails"]["static"] === true) { + $this->addToLastLine('``[static]``', " "); + } + + if ($methodData["methodDetails"]["abstract"] === true) { + $this->addToLastLine('``[abstract]``', " "); + } + + if ($methodData["methodDetails"]["final"] === true) { + $this->addToLastLine('``[final]``', " "); + } + + if ($methodData["methodDetails"]["hasadditional"] === true) { + $this->addEmptyLine(); + } + + if (!empty($methodData["methodDetails"]["deprecated"])) { + $this->addLine("> [!CAUTION]"); + $this->addLine("> Deprecated %s", $methodData["methodDetails"]["deprecated"]); + $this->addEmptyLine(); + } + + $this->addLineH4("Summary"); + + if (!empty($methodData["methodDetails"]["summary"])) { + $this->addLineItalic($this->removeSprintfPlaceholder($methodData["methodDetails"]["summary"]))->addEmptyLine(); + } + + if (!empty($methodData["methodDetails"]["description"])) { + $this->addLineItalic($this->removeSprintfPlaceholder($methodData["methodDetails"]["description"]))->addEmptyLine(); + } + + $this->addLineH4("Signature"); + + $phpMethod = $phpClass->addMethod($methodName); + $phpMethod->setPublic(); + $phpMethod->setStatic($methodData["methodDetails"]["static"] === true); + $phpMethod->setAbstract($methodData["methodDetails"]["abstract"] === true); + $phpMethod->setFinal($methodData["methodDetails"]["final"] === true); + $phpMethod->setReturnType($this->fixPhpType($methodData["return"]["type"])); + //$phpMethod->setBody(null); + + foreach ($methodData["parameters"] as $parameter) { + $phpParameter = $phpMethod + ->addParameter($parameter["name"]) + ->setType($this->fixPhpType($parameter["type"])) + ->setNullable($parameter["isNullable"]); + + if ($parameter['defaultValueavailable'] === true) { + $phpParameter->setDefaultValue($parameter["defaultValue"]); + } + } + + $this->addLineRaw("```php"); + $this->addLineRaw($phpPrinter->printMethod($phpMethod)); + $this->addLineRaw("```"); + + if (!empty($methodData["parameters"])) { + $this->addLineH4("Parameters"); + $this->addLine("| Name | Type | Allows Null | Description"); + $this->addLine("| :------ | :------ | :-----: | :------"); + + foreach ($methodData["parameters"] as $parameter) { + $this->addLine( + "| %s | %s | %s | %s", + $parameter["name"], + $parameter["type"], + $this->boolToMarkDown($parameter["isNullable"] ? "Yes" : "No"), + $parameter["description"] ?? "", + ); + } + + $this->addEmptyLine(); + } else { + $this->addEmptyLine(); + } + + if ($methodData["return"]["type"] && $methodData["return"]["type"] != "void") { + $this->addLineH4("Returns"); + $this->addLineRaw(sprintf("Returns a value of type __%s__", $methodData["return"]["type"])); + $this->addEmptyLine(); + } + + $this->addExample(__DIR__ . sprintf('/md/%s_%s.md', $this->extractor->getClassBasename(), $methodName)); + } + + return $this; + } + + /** + * Save MD to file + * + * @param string $filename + * @return MarkDownGenerator + */ + public function saveToFile(string $filename): MarkDownGenerator + { + file_put_contents($filename, implode(PHP_EOL, $this->lines)); + + return $this; + } + + /** + * Add a line to internal container + * + * @param string $string + * @param mixed ...$args + * @return MarkDownGenerator + */ + private function addLine(string $string, ...$args): MarkDownGenerator + { + if (StringUtils::stringIsNullOrEmpty($string)) { + return $this; + } + + $this->lines[] = $this->sanatizeString(sprintf($string, ...$args)); + + return $this; + } + + /** + * Add a line to internal container + * + * @param string $string + * @param mixed ...$args + * @return MarkDownGenerator + */ + private function addLineRaw(string $string, ...$args): MarkDownGenerator + { + if (StringUtils::stringIsNullOrEmpty($string)) { + return $this; + } + + $this->lines[] = sprintf($string, ...$args); + + return $this; + } + + /** + * Add an empty line to internal container + * + * @return MarkDownGenerator + */ + private function addEmptyLine(): MarkDownGenerator + { + $this->lines[] = ""; + + return $this; + } + + /** + * Add an H2-Line to internal container + * + * @param string $string + * @param boolean $newLine + * @return MarkDownGenerator + */ + private function addLineH2(string $string, bool $newLine = true): MarkDownGenerator + { + $this->addLine("## %s", $string); + + if ($newLine) { + $this->addEmptyLine(); + } + + return $this; + } + + /** + * Add an H3-Line to internal container + * + * @param string $string + * @param boolean $newLine + * @return MarkDownGenerator + */ + private function addLineH3(string $string, bool $newLine = true): MarkDownGenerator + { + $this->addLine("### %s", $string); + + if ($newLine) { + $this->addEmptyLine(); + } + + return $this; + } + + /** + * Add an H4-Line to internal container + * + * @param string $string + * @param boolean $newLine + * @return MarkDownGenerator + */ + private function addLineH4(string $string, bool $newLine = true): MarkDownGenerator + { + $this->addLine("#### %s", $string); + + if ($newLine) { + $this->addEmptyLine(); + } + + return $this; + } + + /** + * Add a string to the latest line which was added + * + * @param string $string + * @param string $delimiter + * @param mixed ...$args + * @return MarkDownGenerator + */ + private function addToLastLine(string $string, string $delimiter = "", ...$args): MarkDownGenerator + { + if ($this->lines === []) { + return $this->addLine($string, ...$args); + } + + $lastIndex = count($this->lines) - 1; + $this->lines[$lastIndex] = $this->lines[$lastIndex] . $delimiter . sprintf($string, ...$args); + + return $this; + } + + /** + * Add line as italic formatted + * + * @param string $string + * @param mixed ...$args + * @return MarkDownGenerator + */ + private function addLineItalic(string $string, ...$args): MarkDownGenerator + { + return $this->addLine(sprintf("_%s_", $string), ...$args); + } + + /** + * Import an example from a markdown file + * + * @param string $exampleFilename + * @param bool $isClass + * @return MarkDownGenerator + */ + private function addExample(string $exampleFilename, bool $isClass = false): MarkDownGenerator + { + if (!file_exists($exampleFilename)) { + return $this; + } + + $exampleFileContent = file_get_contents($exampleFilename); + + if ($exampleFileContent === false) { + return $this; + } + + if ($isClass) { + $this->addLineH2("Example"); + } else { + $this->addLineH4("Example"); + } + + $exampleFileContent = str_replace(["\r\n", "\r", "\n"], "\n", $exampleFileContent); + + foreach (explode("\n", $exampleFileContent) as $exampleFileContentLine) { + $this->lines[] = $exampleFileContentLine; + } + + $this->addEmptyLine(); + + return $this; + } + + /** + * Sanatize a string + * + * @param string $string + * @return string + */ + private function sanatizeString(string $string): string + { + $string = str_replace("\n", "
", $string); + $string = str_replace("__BT-, From __", "", $string); + $string = str_replace("__BT-, From", "__BT-??, From", $string); + + return trim($string); + } + + /** + * Remove sprintf placeholders + * + * @param string $string + * @return string + */ + private function removeSprintfPlaceholder(string $string): string + { + return str_replace("%", "", $string); + } + + /** + * Fix the PHP type + * + * @param string $string + * @return string + */ + private function fixPhpType(string $string): string + { + if (stripos($string, '[]') !== false) { + $string = 'array'; + } + + if (stripos($string, 'array<') === 0) { + $string = 'array'; + } + + if ($string === '$this') { + return 'static'; + } + + return $string; + } + + /** + * Convert yes/no to markdown markup + * + * @param string $boolText + * @return string + */ + private function boolToMarkDown(string $boolText): string + { + return strcasecmp($boolText, "no") === 0 ? ":x:" : ":heavy_check_mark:"; + } +} + +class BatchMarkDownGenerator +{ + /** + * Start a batch documentation creation + * + * @param array $classes + * @return void + * @throws InvalidArgumentException + * @throws PcreException + * @throws LogicException + */ + public static function generate(array $classes, array $ignoreInheritance = []) + { + foreach ($classes as $className => $toFilename) { + $extractor = new ExtractClass($className, $ignoreInheritance); + $generator = new MarkDownGenerator($extractor); + $generator->generateMarkdown(); + $generator->saveToFile($toFilename); + } + } +} + +BatchMarkDownGenerator::generate([ + ZugferdDocument::class => __DIR__ . '/Class-ZugferdDocument.md', + ZugferdSettings::class => __DIR__ . '/Class-ZugferdSettings.md', + ZugferdDocumentBuilder::class => __DIR__ . '/Class-ZugferdDocumentBuilder.md', + ZugferdDocumentReader::class => __DIR__ . '/Class-ZugferdDocumentReader.md', + ZugferdDocumentPdfReader::class => __DIR__ . '/Class-ZugferdDocumentPdfReader.md', + ZugferdDocumentPdfReaderExt::class => __DIR__ . '/Class-ZugferdDocumentPdfReaderExt.md', + ZugferdDocumentPdfBuilder::class => __DIR__ . '/Class-ZugferdDocumentPdfBuilder.md', + ZugferdDocumentPdfMerger::class => __DIR__ . '/Class-ZugferdDocumentPdfMerger.md', + ZugferdDocumentValidator::class => __DIR__ . '/Class-ZugferdDocumentValidator.md', + ZugferdXsdValidator::class => __DIR__ . '/Class-ZugferdXsdValidator.md', + ZugferdKositValidator::class => __DIR__ . '/Class-ZugferdKositValidator.md', + ZugferdPdfValidator::class => __DIR__ . '/Class-ZugferdPdfValidator.md', + ZugferdQuickDescriptor::class => __DIR__ . '/Class-ZugferdQuickDescriptor.md', + ZugferdQuickDescriptorEn16931::class => __DIR__ . '/Class-ZugferdQuickDescriptorEn16931.md', + ZugferdQuickDescriptorExtended::class => __DIR__ . '/Class-ZugferdQuickDescriptorExtended.md', + ZugferdQuickDescriptorXRechnung::class => __DIR__ . '/Class-ZugferdQuickDescriptorXRechnung.md', + ZugferdQuickDescriptorXRechnung2::class => __DIR__ . '/Class-ZugferdQuickDescriptorXRechnung2.md', + ZugferdQuickDescriptorXRechnung3::class => __DIR__ . '/Class-ZugferdQuickDescriptorXRechnung3.md', + ZugferdDocumentProfileConverter::class => __DIR__ . '/Class-ZugferdDocumentProfileConverter.md', +], [ + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::generateDocument', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::generateDocument', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::saveDocument', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::saveDocument', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::saveDocumentInline', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::saveDocumentInline', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::downloadString', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::downloadString', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::setAdditionalCreatorTool', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::setAdditionalCreatorTool', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::setAttachmentRelationshipType', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::setAttachmentRelationshipType', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::setAttachmentRelationshipTypeToData', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::setAttachmentRelationshipTypeToData', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::setAttachmentRelationshipTypeToAlternative', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::setAttachmentRelationshipTypeToAlternative', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::setAttachmentRelationshipTypeToSource', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::setAttachmentRelationshipTypeToSource', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::attachAdditionalFileByRealFile', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::attachAdditionalFileByRealFile', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::attachAdditionalFileByContent', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::attachAdditionalFileByContent', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::setDeterministicModeEnabled', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::setDeterministicModeEnabled', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::setAuthorTemplate', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::setAuthorTemplate', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::setKeywordTemplate', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::setKeywordTemplate', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::setTitleTemplate', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::setTitleTemplate', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::setSubjectTemplate', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::setSubjectTemplate', + \horstoeko\zugferd\ZugferdDocumentPdfBuilder::class . '::setMetaInformationCallback', + \horstoeko\zugferd\ZugferdDocumentPdfMerger::class . '::setMetaInformationCallback', +]); diff --git a/vendor/horstoeko/zugferd/make/md/ZugferdDocumentBuilder.md b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentBuilder.md new file mode 100644 index 000000000..782500be2 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentBuilder.md @@ -0,0 +1,59 @@ +```php + use horstoeko\zugferd\codelists\ZugferdCountryCodes; + use horstoeko\zugferd\codelists\ZugferdCurrencyCodes; + use horstoeko\zugferd\codelists\ZugferdElectronicAddressScheme; + use horstoeko\zugferd\codelists\ZugferdInvoiceType; + use horstoeko\zugferd\codelists\ZugferdReferenceCodeQualifiers; + use horstoeko\zugferd\codelists\ZugferdUnitCodes; + use horstoeko\zugferd\codelists\ZugferdVatCategoryCodes; + use horstoeko\zugferd\codelists\ZugferdVatTypeCodes; + 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('R-2024/00001', ZugferdInvoiceType::INVOICE, DateTime::createFromFormat("Ymd", "20241231"), ZugferdCurrencyCodes::EURO) + ->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') + ->setDocumentBillingPeriod(DateTime::createFromFormat("Ymd", "20250101"), DateTime::createFromFormat("Ymd", "20250131"), "01.01.2025 - 31.01.2025") + ->setDocumentSeller("Lieferant GmbH", "549910") + ->addDocumentSellerGlobalId("4000001123452", "0088") + ->addDocumentSellerTaxNumber("201/113/40209") + ->addDocumentSellerVATRegistrationNumber("DE123456789") + ->setDocumentSellerAddress("Lieferantenstraße 20", "", "", "80333", "München", ZugferdCountryCodes::GERMANY) + ->setDocumentSellerContact("H. Müller", "Verkauf", "+49-111-2222222", "+49-111-3333333", "hm@lieferant.de") + ->setDocumentSellerCommunication(ZugferdElectronicAddressScheme::UNECE3155_EM, 'sales@lieferant.de') + ->setDocumentBuyer("Kunden AG Mitte", "GE2020211") + ->setDocumentBuyerAddress("Kundenstraße 15", "", "", "69876", "Frankfurt", ZugferdCountryCodes::GERMANY) + ->setDocumentBuyerContact("H. Meier", "Einkauf", "+49-333-4444444", "+49-333-5555555", "hm@kunde.de") + ->setDocumentBuyerCommunication(ZugferdElectronicAddressScheme::UNECE3155_EM, 'purchase@kunde.de') + ->setDocumentShipTo("Kunden AG Ost") + ->setDocumentShipToAddress("Lieferstraße 1", "", "", "04109", "Leipzig", ZugferdCountryCodes::GERMANY) + ->setDocumentSupplyChainEvent(DateTime::createFromFormat("Ymd", "20250115")) + ->addDocumentPaymentMeanToDirectDebit("DE12500105170648489890", "R-2024/00001") + ->addDocumentPaymentTerm('Wird von Konto DE12500105170648489890 abgebucht', DateTime::createFromFormat("Ymd", "20250131"), 'MANDATE-2024/000001') + ->addNewPosition("1") + ->setDocumentPositionProductDetails("Trennblätter A4", "50er Pack", "TB100A4") + ->setDocumentPositionNetPrice(9.9000) + ->setDocumentPositionQuantity(20, ZugferdUnitCodes::REC20_PIECE) + ->addDocumentPositionTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 19) + ->setDocumentPositionLineSummation(198.0) + ->addNewPosition("2") + ->setDocumentPositionProductDetails("Joghurt Banane", "B-Ware", "ARNR2") + ->setDocumentPositionNetPrice(5.5000) + ->setDocumentPositionQuantity(50, ZugferdUnitCodes::REC20_PIECE) + ->addDocumentPositionTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 7) + ->setDocumentPositionLineSummation(275.0) + ->addNewPosition("3") + ->setDocumentPositionProductDetails("Joghurt Erdbeer", "", "ARNR3") + ->setDocumentPositionNetPrice(4.0000) + ->setDocumentPositionQuantity(100, ZugferdUnitCodes::REC20_PIECE) + ->addDocumentPositionTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 7) + ->setDocumentPositionLineSummation(400.0) + ->addDocumentTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 198.0, 37.62, 19.0) + ->addDocumentTax(ZugferdVatCategoryCodes::STAN_RATE, ZugferdVatTypeCodes::VALUE_ADDED_TAX, 675.0, 47.25, 7.0) + ->setDocumentSummation(957.87, 957.87, 873.00, 0.0, 0.0, 873.00, 84.87) + ->writeFile(dirname(__FILE__) . "/factur-x.xml"); +``` diff --git a/vendor/horstoeko/zugferd/make/md/ZugferdDocumentBuilder_setDocumentInformation.md b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentBuilder_setDocumentInformation.md new file mode 100644 index 000000000..c7b032af2 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentBuilder_setDocumentInformation.md @@ -0,0 +1,4 @@ +```php +$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_EN16931); +$document->setDocumentInformation('R-2024/00001', ZugferdInvoiceType::INVOICE, DateTime::createFromFormat("Ymd", "20241231"), ZugferdCurrencyCodes::EURO) +``` \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder.md b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder.md new file mode 100644 index 000000000..2a9087c34 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder.md @@ -0,0 +1,123 @@ +```php + +use horstoeko\zugferd\codelists\ZugferdCurrencyCodes; +use horstoeko\zugferd\codelists\ZugferdInvoiceType; +use horstoeko\zugferd\ZugferdDocumentBuilder; +use horstoeko\zugferd\ZugferdDocumentPdfBuilderAbstract; +use horstoeko\zugferd\ZugferdDocumentPdfBuilder; +use horstoeko\zugferd\ZugferdProfiles; + +// Build the XML using ZugferdDocumentBuilder + +$zugferdDocumentBuilder = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_EN16931); +$zugferdDocumentBuilder + ->setDocumentInformation('R-2024/00001', ZugferdInvoiceType::INVOICE, DateTime::createFromFormat('Ymd', '20241231'), ZugferdCurrencyCodes::EURO) + ->...... + +// Create a PDF using the XML content from ZugferdDocumentBuilder and an existing print-output file + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($zugferdDocumentBuilder, '/tmp/existingprintlayout.pdf'); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument('/tmp/merged.pdf'); + +// Create a PDF using the XML content from ZugferdDocumentBuilder and a print-content stream (string) + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfString($documentBuilder, '%PDF-1.5...........'); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument('/tmp/merged.pdf'); + +// Alternatively, you can also return the merged output as a content stream (string) + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($zugferdDocumentBuilder, '/tmp/existingprintlayout.pdf'); +$zugferdDocumentPdfBuilder->generateDocument(); +$pdfBinaryString = $zugferdDocumentPdfBuilder->generateDocument()->downloadString(); + +// If you would like to brand the merged PDF with the name of you own solution you can call +// the method setAdditionalCreatorTool. Before calling this method the creator of the PDF is identified as 'Factur-X library 1.x.x by HorstOeko'. +// After calling this method you get 'MyERPSolution 1.0 / Factur-X PHP library 1.x.x by HorstOeko' as the creator + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($zugferdDocumentBuilder, '/tmp/existingprintlayout.pdf'); +$zugferdDocumentPdfBuilder->setAdditionalCreatorTool('MyERPSolution 1.0'); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument('/tmp/merged.pdf'); + +// It is also possible to add additional attachments to the merged PDF. These can be any files that can help the invoice +// recipient with processing. For example, a time sheet as an Excel file would be conceivable. + +// The method attachAdditionalFileByRealFile has 3 parameters: +// - The file to attach which must exist and must be readable +// - (Optional) A name to display in the attachments of the PDF +// - (Optional) The type of the relationship of the attachment. Valid values are defined in the class +// ZugferdDocumentPdfBuilderAbstract. The constants are starting with AF_ +// +// If you omit the last 2 parameters the following will happen: +// - The displayname is calculated from the filename you specified +// - The type of the relationship of the attachment will be AF_RELATIONSHIP_SUPPLEMENT (Supplement) + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($zugferdDocumentBuilder, '/tmp/existingprintlayout.pdf'); +$zugferdDocumentPdfBuilder->attachAdditionalFileByRealFile('/path/to/existing.file', "Some display Name", ZugferdDocumentPdfBuilderAbstract::AF_RELATIONSHIP_SUPPLEMENT); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument('/tmp/merged.pdf'); + +// You can also add an attachment to the PDF as an stream (string). The conditions are the same as above for the attachAdditionalFileByRealFile method +// The only difference to attachAdditionalFileByRealFile is that the attachAdditionalFileByContent method accepts 4 parameters, whereby here (as with attachAdditionalFileByRealFile) +// the last two can be omitted. You only need to specify a file name under which the file is to be embedded + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($zugferdDocumentBuilder, '/tmp/existingprintlayout.pdf'); +$zugferdDocumentPdfBuilder->attachAdditionalFileByContent('....', 'additionalDocument.csv', "Some other display Name", ZugferdDocumentPdfBuilderAbstract::AF_RELATIONSHIP_SUPPLEMENT); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument('/tmp/merged.pdf'); + +// We can change some meta information such as the title, the subject, the author and the keywords. This library essentially provides 4 methods for this: +// - setAuthorTemplate +// - setTitleTemplate +// - setSubjectTemplate +// - setKeywordTemplate +// The 4 methods just mentioned accept a free text that can accept the following placeholders: +// - %1$s .... contains the invoice number (is extracted from the XML data) +// - %2$s .... contains the type of XML document, such as ‘Invoice’ (is extracted from the XML data) +// - %3$s .... contains the name of the seller (extracted from the XML data) +// - %4$s .... contains the invoice date (extracted from the XML data) +// The following example would generate... +// - the author: .... Issued by seller with name Lieferant GmbH +// - the title .... Lieferant GmbH : Invoice R-2024/00001 +// - the subject .... Invoice-Document, Issued by Lieferant GmbH +// - the keywords .... R-2024/00001, Invoice, Lieferant GmbH, 2024-12-31 + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($zugferdDocumentBuilder, '/tmp/existingprintlayout.pdf'); +$zugferdDocumentPdfBuilder->setAuthorTemplate('Issued by seller with name %3$s'); +$zugferdDocumentPdfBuilder->setTitleTemplate('%3$s : %2$s %1$s'); +$zugferdDocumentPdfBuilder->setSubjectTemplate('%2$s-Document, Issued by %3$s'); +$zugferdDocumentPdfBuilder->setKeywordTemplate('%1$s, %2$s, %3$s, %4$s'); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument('/tmp/merged.pdf'); + +// If the previously mentioned options for manipulating the meta information are not sufficient, +// you can also use a callback function. The following 4 parameters are passed to the callback +// function in the specified order: +// - $which .... one of "author", "title", "subject" and "keywords" +// - $xmlContent .... the content of the xml as a string +// - $invoiceInformation .... an array with some information about the invoice +// - $default .... The default value for the specified field (see $which + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($zugferdDocumentBuilder, '/tmp/existingprintlayout.pdf'); +$zugferdDocumentPdfBuilder->setMetaInformationCallback( + function ($which) { + if ($which === 'title') { + return "DummyTitle"; + } + if ($which === 'author') { + return "DummyAuthor"; + } + if ($which === 'subject') { + return "DummySubject"; + } + if ($which === 'keywords') { + return "DummyKeywords"; + } + } +); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument('/tmp/merged.pdf'); + +``` diff --git a/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_attachAdditionalFileByContent.md b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_attachAdditionalFileByContent.md new file mode 100644 index 000000000..c2b7c067f --- /dev/null +++ b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_attachAdditionalFileByContent.md @@ -0,0 +1,12 @@ +```php + +// You can also add an attachment to the PDF as an stream (string). The conditions are the same as above for the attachAdditionalFileByRealFile method +// The only difference to attachAdditionalFileByRealFile is that the attachAdditionalFileByContent method accepts 4 parameters, whereby here (as with attachAdditionalFileByRealFile) +// the last two can be omitted. You only need to specify a file name under which the file is to be embedded + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($zugferdDocumentBuilder, '/tmp/existingprintlayout.pdf'); +$zugferdDocumentPdfBuilder->attachAdditionalFileByContent('....', 'additionalDocument.csv', "Some other display Name", ZugferdDocumentPdfBuilderAbstract::AF_RELATIONSHIP_SUPPLEMENT); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument('/tmp/merged.pdf'); + +``` \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_attachAdditionalFileByRealFile.md b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_attachAdditionalFileByRealFile.md new file mode 100644 index 000000000..14e90e537 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_attachAdditionalFileByRealFile.md @@ -0,0 +1,18 @@ +```php + +// The method attachAdditionalFileByRealFile has 3 parameters: +// - The file to attach which must exist and must be readable +// - (Optional) A name to display in the attachments of the PDF +// - (Optional) The type of the relationship of the attachment. Valid values are defined in the class +// ZugferdDocumentPdfBuilderAbstract. The constants are starting with AF_ +// +// If you omit the last 2 parameters the following will happen: +// - The displayname is calculated from the filename you specified +// - The type of the relationship of the attachment will be AF_RELATIONSHIP_SUPPLEMENT (Supplement) + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($zugferdDocumentBuilder, '/tmp/existingprintlayout.pdf'); +$zugferdDocumentPdfBuilder->attachAdditionalFileByRealFile('/path/to/existing.file', "Some display Name", ZugferdDocumentPdfBuilderAbstract::AF_RELATIONSHIP_SUPPLEMENT); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument('/tmp/merged.pdf'); + +``` \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setAdditionalCreatorTool.md b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setAdditionalCreatorTool.md new file mode 100644 index 000000000..13128706a --- /dev/null +++ b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setAdditionalCreatorTool.md @@ -0,0 +1,11 @@ +```php + +// Before calling this method the creator of the PDF is identified as 'Factur-X library 1.x.x by HorstOeko'. +// After calling this method you get 'MyERPSolution 1.0 / Factur-X PHP library 1.x.x by HorstOeko' as the creator + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($zugferdDocumentBuilder, '/tmp/existingprintlayout.pdf'); +$zugferdDocumentPdfBuilder->setAdditionalCreatorTool('MyERPSolution 1.0'); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument('/tmp/merged.pdf'); + +``` \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setAuthorTemplate.md b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setAuthorTemplate.md new file mode 100644 index 000000000..6cbe139de --- /dev/null +++ b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setAuthorTemplate.md @@ -0,0 +1,18 @@ +```php + +// Change the author of the generated (merged) PDF + +// This method accepts a free text that can accept the following placeholders: +// - %1$s .... contains the invoice number (is extracted from the XML data) +// - %2$s .... contains the type of XML document, such as ‘Invoice’ (is extracted from the XML data) +// - %3$s .... contains the name of the seller (extracted from the XML data) +// - %4$s .... contains the invoice date (extracted from the XML data) + +// The follwing example will generate: Issued by seller with name Lieferant GmbH + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($zugferdDocumentBuilder, '/tmp/existingprintlayout.pdf'); +$zugferdDocumentPdfBuilder->setAuthorTemplate('Issued by seller with name %3$s'); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument('/tmp/merged.pdf'); + +``` \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setKeywordTemplate.md b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setKeywordTemplate.md new file mode 100644 index 000000000..d9ca5af6e --- /dev/null +++ b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setKeywordTemplate.md @@ -0,0 +1,18 @@ +```php + +// Change the keywords of the generated (merged) PDF + +// This method accepts a free text that can accept the following placeholders: +// - %1$s .... contains the invoice number (is extracted from the XML data) +// - %2$s .... contains the type of XML document, such as ‘Invoice’ (is extracted from the XML data) +// - %3$s .... contains the name of the seller (extracted from the XML data) +// - %4$s .... contains the invoice date (extracted from the XML data) + +// The follwing example will generate: R-2024/00001, Invoice, Lieferant GmbH, 2024-12-31 + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($zugferdDocumentBuilder, '/tmp/existingprintlayout.pdf'); +$zugferdDocumentPdfBuilder->setKeywordTemplate('%1$s, %2$s, %3$s, %4$s'); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument('/tmp/merged.pdf'); + +``` \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setMetaInformationCallback.md b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setMetaInformationCallback.md new file mode 100644 index 000000000..8776e9e23 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setMetaInformationCallback.md @@ -0,0 +1,32 @@ +```php + +// Use a callback function to manipulate the meta information. + +// The following 4 parameters are passed to the callback +// function in the specified order: +// - $which .... one of "author", "title", "subject" and "keywords" +// - $xmlContent .... the content of the xml as a string +// - $invoiceInformation .... an array with some information about the invoice +// - $default .... The default value for the specified field (see $which + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($zugferdDocumentBuilder, '/tmp/existingprintlayout.pdf'); +$zugferdDocumentPdfBuilder->setMetaInformationCallback( + function ($which) { + if ($which === 'title') { + return "DummyTitle"; + } + if ($which === 'author') { + return "DummyAuthor"; + } + if ($which === 'subject') { + return "DummySubject"; + } + if ($which === 'keywords') { + return "DummyKeywords"; + } + } +); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument('/tmp/merged.pdf'); + +``` \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setSubjectTemplate.md b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setSubjectTemplate.md new file mode 100644 index 000000000..36c282295 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setSubjectTemplate.md @@ -0,0 +1,18 @@ +```php + +// Change the subject of the generated (merged) PDF + +// This method accepts a free text that can accept the following placeholders: +// - %1$s .... contains the invoice number (is extracted from the XML data) +// - %2$s .... contains the type of XML document, such as ‘Invoice’ (is extracted from the XML data) +// - %3$s .... contains the name of the seller (extracted from the XML data) +// - %4$s .... contains the invoice date (extracted from the XML data) + +// The follwing example will generate: Invoice-Document, Issued by Lieferant GmbH + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($zugferdDocumentBuilder, '/tmp/existingprintlayout.pdf'); +$zugferdDocumentPdfBuilder->setSubjectTemplate('%2$s-Document, Issued by %3$s'); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument('/tmp/merged.pdf'); + +``` \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setTitleTemplate.md b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setTitleTemplate.md new file mode 100644 index 000000000..8ae552902 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfBuilder_setTitleTemplate.md @@ -0,0 +1,18 @@ +```php + +// Change the title of the generated (merged) PDF + +// This method accepts a free text that can accept the following placeholders: +// - %1$s .... contains the invoice number (is extracted from the XML data) +// - %2$s .... contains the type of XML document, such as ‘Invoice’ (is extracted from the XML data) +// - %3$s .... contains the name of the seller (extracted from the XML data) +// - %4$s .... contains the invoice date (extracted from the XML data) + +// The follwing example will generate: Lieferant GmbH : Invoice R-2024/00001 + +$zugferdDocumentPdfBuilder = ZugferdDocumentPdfBuilder::fromPdfFile($zugferdDocumentBuilder, '/tmp/existingprintlayout.pdf'); +$zugferdDocumentPdfBuilder->setTitleTemplate('%3$s : %2$s %1$s'); +$zugferdDocumentPdfBuilder->generateDocument(); +$zugferdDocumentPdfBuilder->saveDocument('/tmp/merged.pdf'); + +``` \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfMerger.md b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfMerger.md new file mode 100644 index 000000000..c99d82158 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/md/ZugferdDocumentPdfMerger.md @@ -0,0 +1,67 @@ +### Example for merging an existing PDF file with an existing XML file + +```php +use horstoeko\zugferd\ZugferdDocumentPdfMerger; + +$existingXmlFile = "/tmp/invoice_1.xml"; +$existingPdfFile = "/tmp/emptypdf.pdf"; +$mergeToPdf = "/tmp/fullpdf.pdf"; + +if (!file_exists($existingXmlFile) || !file_exists($existingPdfFile)) { + throw new \Exception("XML and/or PDF does not exist"); +} + +(new ZugferdDocumentPdfMerger($existingXmlFile, $existingPdfFile)) + ->generateDocument() + ->saveDocument($mergeToPdf); +``` + +### Example for merging an existing PDF file with a string which contains the XML + +```php +use horstoeko\zugferd\ZugferdDocumentPdfMerger; + +$xmlString= "..."; +$existingPdfFile = "/tmp/emptypdf.pdf"; +$mergeToPdf = "/tmp/fullpdf.pdf"; + +if (!file_exists($existingPdfFile)) { + throw new \Exception("XML and/or PDF does not exist"); +} + +(new ZugferdDocumentPdfMerger($xmlString, $existingPdfFile)) + ->generateDocument() + ->saveDocument($mergeToPdf); +``` + +### Example for merging a string which contains a PDF with an existing XML file + +```php +use horstoeko\zugferd\ZugferdDocumentPdfMerger; + +$existingXmlFile = "/tmp/invoice_1.xml"; +$pdfString = "%PDF-1.4....."; +$mergeToPdf = "/tmp/fullpdf.pdf"; + +if (!file_exists($existingXmlFile)) { + throw new \Exception("XML and/or PDF does not exist"); +} + +(new ZugferdDocumentPdfMerger($existingXmlFile, $pdfString)) + ->generateDocument() + ->saveDocument($mergeToPdf); +``` + +### Example for merging a string which contains a PDF with a string which contains the XML + +```php +use horstoeko\zugferd\ZugferdDocumentPdfMerger; + +$xmlString= "..."; +$pdfString = "%PDF-1.4....."; +$mergeToPdf = "/tmp/fullpdf.pdf"; + +(new ZugferdDocumentPdfMerger($xmlString, $pdfString)) + ->generateDocument() + ->saveDocument($mergeToPdf); +``` diff --git a/vendor/horstoeko/zugferd/make/md/ZugferdKositValidator.md b/vendor/horstoeko/zugferd/make/md/ZugferdKositValidator.md new file mode 100644 index 000000000..1c3832a43 --- /dev/null +++ b/vendor/horstoeko/zugferd/make/md/ZugferdKositValidator.md @@ -0,0 +1,35 @@ +### Validation of a document read by ZugferdDocumentPdfReader + +```php +$kositValidator = new ZugferdKositValidator(); + +$document = ZugferdDocumentPdfReader::readAndGuessFromFile("/tmp/invoice.pdf"); +$kositValidator->setDocument($document)->disableCleanup()->validate(); + +if ($kositValidator->hasValidationErrors()) { + echo "Validation failed"; + foreach ($kositValidator->getValidationErrors() as $validationError) { + echo " - " . $validationError . PHP_EOL; + } +} else { + echo "mValidation passed"; +} +``` + +### Validation of a document read by ZugferdDocumentReader + +```php +$kositValidator = new ZugferdKositValidator(); + +$document = ZugferdDocumentReader::readAndGuessFromFile("/tmp/factur-x.xml"); +$kositValidator->setDocument($document)->disableCleanup()->validate(); + +if ($kositValidator->hasValidationErrors()) { + echo "Validation failed"; + foreach ($kositValidator->getValidationErrors() as $validationError) { + echo " - " . $validationError . PHP_EOL; + } +} else { + echo "mValidation passed"; +} +``` diff --git a/vendor/horstoeko/zugferd/src/ZugferdDocument.php b/vendor/horstoeko/zugferd/src/ZugferdDocument.php new file mode 100644 index 000000000..1c4789578 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdDocument.php @@ -0,0 +1,304 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdDocument +{ + /** + * @var integer $profileId Internal profile id + */ + private $profileId = -1; + + /** + * @var array $profileDefinition Internal profile definition + */ + private $profileDefinition = []; + + /** + * @var SerializerBuilder $serializerBuilder Serializer builder + */ + private $serializerBuilder; + + /** + * @var SerializerInterface $serializer Serializer + */ + private $serializer; + + /** + * @var \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 $invoiceObject The internal invoice object + */ + private $invoiceObject; + + /** + * @var ZugferdObjectHelper $objectHelper Object Helper + */ + private $objectHelper; + + /** + * Constructor + * + * @param integer $profile The ID of the profile of the document + * @return void + * @throws ZugferdUnknownProfileIdException + * @throws ZugferdUnknownProfileParameterException + * @throws InvalidArgumentException + * @throws RuntimeException + */ + 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 + */ + protected 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 + */ + protected function createInvoiceObject() + { + $this->invoiceObject = $this->getObjectHelper()->getCrossIndustryInvoice(); + + return $this->invoiceObject; + } + + /** + * Get the instance of the internal serializuer + * + * @return SerializerInterface + */ + protected function getSerializer() + { + return $this->serializer; + } + + /** + * Get object helper instance + * + * @return \horstoeko\zugferd\ZugferdObjectHelper + */ + protected 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 + * @throws ZugferdUnknownProfileParameterException + */ + public function getProfileDefinitionParameter(string $parameterName) + { + $profileDefinition = $this->getProfileDefinition(); + + if (isset($profileDefinition[$parameterName])) { + return $profileDefinition[$parameterName]; + } + + throw new ZugferdUnknownProfileParameterException($parameterName); + } + + /** + * Sets the internal profile definitions + * + * @param int $profile + * @return ZugferdDocument + * @throws ZugferdUnknownProfileIdException + */ + protected function initProfile(int $profile): ZugferdDocument + { + $this->profileId = $profile; + $this->profileDefinition = ZugferdProfileResolver::resolveProfileDefById($profile); + + return $this; + } + + /** + * Build the internal object helper + * + * @return ZugferdDocument + */ + protected function initObjectHelper(): ZugferdDocument + { + $this->objectHelper = new ZugferdObjectHelper($this->profileId); + + return $this; + } + + /** + * Build the internal serialzer + * + * @return ZugferdDocument + * @throws ZugferdUnknownProfileParameterException + * @throws InvalidArgumentException + * @throws RuntimeException + */ + protected 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") + ) + ); + + if (ZugferdSettings::hasSerializerCacheDirectory()) { + $this->serializerBuilder->setCacheDir(ZugferdSettings::getSerializerCacheDirectory()); + } + + $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 mixed $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 + * @throws ZugferdUnknownProfileParameterException + * @throws RuntimeException + */ + 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 + * @throws RuntimeException + */ + public function serializeAsXml(): string + { + return $this->getSerializer()->serialize($this->getInvoiceObject(), 'xml'); + } + + /** + * Serialize internal invoice object as JSON + * + * @return string + * @throws RuntimeException + */ + public function serializeAsJson(): string + { + return $this->getSerializer()->serialize($this->getInvoiceObject(), 'json'); + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdDocumentBuilder.php b/vendor/horstoeko/zugferd/src/ZugferdDocumentBuilder.php new file mode 100644 index 000000000..17a19827b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdDocumentBuilder.php @@ -0,0 +1,3634 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdDocumentBuilder extends ZugferdDocument +{ + /** + * HeaderTradeAgreement + * + * @var object + */ + protected $headerTradeAgreement; + + /** + * HeaderTradeDelivery + * + * @var object + */ + protected $headerTradeDelivery; + + /** + * HeaderTradeSettlement + * + * @var object + */ + protected $headerTradeSettlement; + + /** + * SupplyChainTradeTransactionType + * + * @var object + */ + protected $headerSupplyChainTradeTransaction; + + /** + * Last added payment terms + * + * @var object + */ + protected $currentPaymentTerms; + + /** + * Last added position (line) to the docuemnt + * + * @var object + */ + protected $currentPosition; + + /** + * 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 + * + * @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 + { + return new DOMXPath($this->getContentAsDomDocument()); + } + + /** + * 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 + * @param string|null $documentName __BT-X-2, From EXTENDED__ Document Type. The documenttype (free text) + * @param string|null $documentLanguage __BT-X-4, From EXTENDED__ Language indicator. The language code in which the document was written + * @param DateTime|null $effectiveSpecifiedPeriod __BT-X-6-000, From EXTENDED__ 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 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; + } + + /** + * 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. + * + * @param string $routingId __BT-10, From MINIMUM__ An identifier assigned by the buyer and used for internal routing + * @return ZugferdDocumentBuilder + */ + public function setDocumentRoutingId(string $routingId): ZugferdDocumentBuilder + { + return $this->setDocumentBuyerReference($routingId); + } + + /** + * 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. + * @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; + } + + /** + * Mark document as a copy from the original one __(BT-X-3-00, BT-X-3, From EXTENDED)__ + * + * @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; + } + + /** + * 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-X-260, From EXTENDED__ Tax total amount in the foreign currency + * @param float|null $exchangeRate __BT-X-260, From EXTENDED__ Exchange Rate + * @return ZugferdDocumentBuilder + */ + public function setForeignCurrency(string $foreignCurrencyCode, float $foreignTaxAmount, ?float $exchangeRate = null): 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); + } + + $calculatedExchangeRate = $exchangeRate; + + if (is_null($calculatedExchangeRate)) { + $calculatedExchangeRate = 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, $calculatedExchangeRate)); + + return $this; + } + + /** + * Add a note to the docuzment + * + * @param string $content __BT-22, From BASIC WL__ A free text containing unstructured information that is relevant to the invoice as a whole + * @param string|null $contentCode __BT-X-5, From EXTENDED__ A code to classify the content of the free text of the invoice + * @param string|null $subjectCode __BT-21, From BASIC WL__ The qualification of the free text for the invoice from BT-22 + * @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; + } + + /** + * 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 $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 MINIMUM/EN 16931__ 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; + } + + /** + * Add information about the seller's VAT Registration Number (Umsatzsteueridentnummer) + * + * @param string|null $vatRegNo __BT-31, From MINIMUM/EN 16931__ VAT Registration Number (Umsatzsteueridentnummer) + * @return ZugferdDocumentBuilder + */ + public function addDocumentSellerVATRegistrationNumber(?string $vatRegNo = null): ZugferdDocumentBuilder + { + return $this->addDocumentSellerTaxRegistration(ZugferdReferenceCodeQualifiers::VAT_REGI_NUMB, $vatRegNo); + } + + /** + * Add information about the seller's Tax Number (Steuernummer) + * + * @param string|null $taxNo __BT-32, From MINIMUM/EN 16931__ Tax Number (Steuernummer) + * @return ZugferdDocumentBuilder + */ + public function addDocumentSellerTaxNumber(?string $taxNo = null): ZugferdDocumentBuilder + { + return $this->addDocumentSellerTaxRegistration(ZugferdReferenceCodeQualifiers::FISC_NUMB, $taxNo); + } + + /** + * 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__ Such as personal name, name of contact person or department or office + * @param string|null $contactDepartmentName __BT-41-0, From EN 16931__ If a contact person is specified, either the name or the department must be transmitted. + * @param string|null $contactPhoneNo __BT-42, From EN 16931__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-107, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-43, From EN 16931__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function setDocumentSellerContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $sellerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCallIfMethodExists($sellerTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact); + + return $this; + } + + /** + * Add an (additional) contact to the seller party (EXTENDED Profile only) + * + * @param string|null $contactPersonName __BT-41, From EN 16931__ Such as personal name, name of contact person or department or office + * @param string|null $contactDepartmentName __BT-41-0, From EN 16931__ If a contact person is specified, either the name or the department must be transmitted. + * @param string|null $contactPhoneNo __BT-42, From EN 16931__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-107, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-43, From EN 16931__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function addDocumentSellerContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $sellerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCall($sellerTradeParty, "addToDefinedTradeContact", $contact); + + return $this; + } + + /** + * Set the seller's electronic communication information + * + * @param string|null $uriScheme __BT-34-1, From BASIC WL__ The identifier for the identification scheme of the seller's electronic address + * @param string|null $uri __BT-34, From BASIC WL__ Specifies the electronic address of the seller to which the response to the invoice can be sent at application level + * @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-X-334, From EXTENDED__ 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 $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-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, 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 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 (FC = Tax number, VA = Sales tax identification number) + * @param string|null $taxRegId __BT-48, From BASIC WL__ Tax number or sales tax identification 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; + } + + /** + * Add information about the buyers's VAT Registration Number (Umsatzsteueridentnummer) + * + * @param string|null $vatRegNo __BT-48, From MINIMUM/EN 16931__ VAT Registration Number (Umsatzsteueridentnummer) + * @return ZugferdDocumentBuilder + */ + public function addDocumentBuyerVATRegistrationNumber(?string $vatRegNo = null): ZugferdDocumentBuilder + { + return $this->addDocumentBuyerTaxRegistration(ZugferdReferenceCodeQualifiers::VAT_REGI_NUMB, $vatRegNo); + } + + /** + * Add information about the buyer's Tax Number (Steuernummer) + * + * @param string|null $taxNo __BT-48, From MINIMUM/EN 16931__ Tax Number (Steuernummer) + * @return ZugferdDocumentBuilder + */ + public function addDocumentBuyerTaxNumber(?string $taxNo = null): ZugferdDocumentBuilder + { + return $this->addDocumentBuyerTaxRegistration(ZugferdReferenceCodeQualifiers::FISC_NUMB, $taxNo); + } + + /** + * 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-56-0, From EN 16931__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-57, From EN 16931__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-115, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-58, From EN 16931__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function setDocumentBuyerContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $buyerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getBuyerTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCallIfMethodExists($buyerTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact); + + return $this; + } + + /** + * Add an (additional) contact to the buyer party contact person (EXTENDED Profile only) + * + * @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-56-0, From EN 16931__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-57, From EN 16931__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-115, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-58, From EN 16931__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function addDocumentBuyerContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $buyerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getBuyerTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCall($buyerTradeParty, "addToDefinedTradeContact", $contact); + + return $this; + } + + /** + * Set the buyers's electronic communication information + * + * @param string|null $uriScheme __BT-49-1, From BASIC WL__ The identifier for the identification scheme of the buyer's electronic address + * @param string|null $uri __BT-49, From BASIC WL__ Specifies the buyer's electronic address to which the invoice is sent + * @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 Information about the seller's tax representative + * + * @param string $name __BT-62, From BASIC WL__ The full name of the seller's tax agent + * @param string|null $id __BT-X-116, From EXTENDED__ 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 seller's Tax representative party + * + * @param string|null $globalID __BT-X-117, From EXTENDED__ 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 __BT-X-117-1, From EXTENDED__ 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 seller's tax representative party + * + * @param string|null $taxRegType __BT-63-0, From BASIC WL__ Type of tax number (FC = Tax number, VA = Sales tax identification number) + * @param string|null $taxRegId __BT-63, From BASIC WL__ Tax number or sales tax identification number + * @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 seller's 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 seller's tax representative party + * + * @param string|null $legalOrgId __BT-, From __ An identifier issued by an official registrar that identifies the seller tax agent as a legal entity or legal person. + * @param string|null $legalOrgType __BT-, From __ 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 __BT-, From __ 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 detailed information on the seller's tax representative party contact person + * + * @param string|null $contactPersonName __BT-X-120, From EXTENDED__ Such as personal name, name of contact person or department or office + * @param string|null $contactDepartmentName __BT-X-121, From EXTENDED__ If a contact person is specified, either the name or the department must be transmitted. + * @param string|null $contactPhoneNo __BT-X-122, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-123, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-124, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function setDocumentSellerTaxRepresentativeContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $taxrepresentativeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTaxRepresentativeTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCallIfMethodExists($taxrepresentativeTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact); + + return $this; + } + + /** + * Add an (additional) contact to the seller's tax representative party (EXTENDED Profile only) + * + * @param string|null $contactPersonName __BT-X-120, From EXTENDED__ Such as personal name, name of contact person or department or office + * @param string|null $contactDepartmentName __BT-X-121, From EXTENDED__ If a contact person is specified, either the name or the department must be transmitted. + * @param string|null $contactPhoneNo __BT-X-122, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-123, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-124, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function addDocumentSellerTaxRepresentativeContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $taxrepresentativeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTaxRepresentativeTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCall($taxrepresentativeTradeParty, "addToDefinedTradeContact", $contact); + + return $this; + } + + /** + * Detailed information on the deviating end user (general informaton) + * + * @param string $name __BT-X-128, From EXTENDED__ Name/company name of the end user + * @param string|null $id __BT-X-126, From EXTENDED__ An identifier of the product end user + * @param string|null $description __BT-, From __ 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 identifier of the deviating end user + * + * @param string|null $globalID __BT-X-127, From EXTENDED__ The identifier is uniquely assigned to a party by a global registration organization. + * @param string|null $globalIDType __BT-X-127-0, From EXTENDED__ 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 the deviating end user + * + * @param string|null $taxRegType __BT-, From __ Type of tax number (FC = Tax number, VA = Sales tax identification number) + * @param string|null $taxRegId __BT-, From __ Tax number or sales tax identification number + * @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 __BT-X-397, From EXTENDED__ 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 __BT-X-398, From EXTENDED__ 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 __BT-X-399, From EXTENDED__ 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 __BT-X-396, From EXTENDED__ Identifier for a group of properties, such as a zip code + * @param string|null $city __BT-X-400, From EXTENDED__ Usual name of the city or municipality in which the product end users address is located + * @param string|null $country __BT-X-401, From EXTENDED__ 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-X-402, From EXTENDED__ 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 __BT-X-129, From EXTENDED__ 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 __BT-X-129-0, From EXTENDED__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 __BT-X-130, From EXTENDED__ 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 __BT-X-131, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-132, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-133, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-134, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-135, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function setDocumentProductEndUserContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $productEndUserTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getProductEndUserTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCallIfMethodExists($productEndUserTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact); + + return $this; + } + + /** + * Add an (additional) contact to the Product Enduser party (EXTENDED Profile only) + * + * @param string|null $contactPersonName __BT-X-131, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-132, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-133, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-134, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-135, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function addDocumentProductEndUserContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $productEndUserTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getProductEndUserTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCall($productEndUserTradeParty, "addToDefinedTradeContact", $contact); + + return $this; + } + + /** + * Ship-To + * + * @param string|null $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 = null, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder + { + $shipToTradeParty = $this->getObjectHelper()->getTradePartyAllowEmpty($name, $id, $description); + + $this->getObjectHelper()->tryCall($this->headerTradeDelivery, "setShipToTradeParty", $shipToTradeParty); + + return $this; + } + + /** + * Add an id to the Ship-to Trade Party + * + * @param string $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 BASIC WL__ Global identifier of the goods recipient + * @param string|null $globalIDType __BT-71-1, From BASIC WL__ 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-X-161-0, From EXTENDED__ Type of tax number (FC = Tax number, VA = Sales tax identification number) + * @param string|null $taxRegId __BT-X-161, From EXTENDED__ Tax number or sales tax identification number + * @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 __BT-X-153, From EXTENDED__ 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-X-153-0, From EXTENDED__ 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-X-154, From EXTENDED__ 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 + * + * @param string|null $contactPersonName __BT-X-155, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-156, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-157, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-158, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-159, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function setDocumentShipToContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipToTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCallIfMethodExists($shipToTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact); + + return $this; + } + + /** + * Add an (additional) contact to the Ship-To party + * + * @param string|null $contactPersonName __BT-X-155, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-156, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-157, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-158, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-159, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function addDocumentShipToContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipToTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCall($shipToTradeParty, "addToDefinedTradeContact", $contact); + + return $this; + } + + /** + * Detailed information on the different end recipient + * + * @param string|null $name __BT-X-164, From EXTENDED__ Name or company name of the different end recipient + * @param string|null $id __BT-X-162, From EXTENDED__ 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 __BT-, From __ Further legal information that is relevant for the different end recipient + * @return ZugferdDocumentBuilder + */ + public function setDocumentUltimateShipTo(?string $name = null, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder + { + $shipToTradeParty = $this->getObjectHelper()->getTradePartyAllowEmpty($name, $id, $description); + + $this->getObjectHelper()->tryCall($this->headerTradeDelivery, "setUltimateShipToTradeParty", $shipToTradeParty); + + return $this; + } + + /** + * Add an id to the different end recipient + * + * @param string $id __BT-X-162, From EXTENDED__ 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 + * + * @param string|null $globalID __BT-X-163, From EXTENDED__ Global identifier of the different end recipient + * @param string|null $globalIDType __BT-X-163-0, From EXTENDED__ 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 + * + * @param string|null $taxRegType __BT-X-180-0, From EXTENDED__ Type of tax number (FC = Tax number, VA = Sales tax identification number) + * @param string|null $taxRegId __BT-X-180, From EXTENDED__ Tax number or sales tax identification number + * @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 + * + * @param string|null $lineOne __BT-X-173, From EXTENDED__ 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 __BT-X-174, From EXTENDED__ 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-X-175, From EXTENDED__ 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-X-172, From EXTENDED__ Identifier for a group of properties, such as a zip code + * @param string|null $city __BT-X-176, From EXTENDED__ Usual name of the city or municipality in which the party's address is located + * @param string|null $country __BT-X-177, From EXTENDED__ 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-X-178, From EXTENDED__ 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 + * + * @param string|null $legalOrgId __BT-X-165, From EXTENDED__ 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-X-165-0, From EXTENDED__ 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-X-166, From EXTENDED__ 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 __BT-X-167, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-168, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-169, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-170, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-171, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function setDocumentUltimateShipToContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $UltimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getUltimateShipToTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCallIfMethodExists($UltimateShipToTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact); + + return $this; + } + + /** + * Add an (additional) contact to the different end recipient. + * + * @param string|null $contactPersonName __BT-X-167, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-168, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-169, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-170, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-171, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function addDocumentUltimateShipToContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $UltimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getUltimateShipToTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCall($UltimateShipToTradeParty, "addToDefinedTradeContact", $contact); + + return $this; + } + + /** + * Set detailed information of the deviating consignor party + * + * @param string|null $name __BT-X-183, From EXTENDED__ The name of the party + * @param string|null $id __BT-X-181, From EXTENDED__ 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 setDocumentShipFrom(?string $name = null, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder + { + $shipToTradeParty = $this->getObjectHelper()->getTradePartyAllowEmpty($name, $id, $description); + + $this->getObjectHelper()->tryCall($this->headerTradeDelivery, "setShipFromTradeParty", $shipToTradeParty); + + return $this; + } + + /** + * Add an id to the deviating consignor party + * + * @param string $id __BT-X-181, From EXTENDED__ 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 + * + * @param string|null $globalID __BT-X-182, From EXTENDED__ Global identifier of the goods recipient + * @param string|null $globalIDType __BT-X-182-0, From EXTENDED__ 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 + * + * @param string|null $taxRegType __BT-, From __ Type of tax number (FC = Tax number, VA = Sales tax identification number) + * @param string|null $taxRegId __BT-, From __ Tax number or sales tax identification number + * @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 + * + * @param string|null $lineOne __BT-X-192, From EXTENDED__ 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-X-193, From EXTENDED__ 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-X-194, From EXTENDED__ 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-X-191, From EXTENDED__ Identifier for a group of properties, such as a zip code + * @param string|null $city __BT-X-195, From EXTENDED__ Usual name of the city or municipality in which the party's address is located + * @param string|null $country __BT-X-196, From EXTENDED__ 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-X-197, From EXTENDED__ 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 + * + * @param string|null $legalOrgId __BT-X-184, From EXTENDED__ 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-X-184-0, From EXTENDED__ 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-X-185, From EXTENDED__ 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 __BT-X-186, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-187, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-188, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-189, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-190, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function setDocumentShipFromContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $shipFromTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipFromTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCallIfMethodExists($shipFromTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact); + + return $this; + } + + /** + * Add an (additional) contact to the deviating consignor party + * + * @param string|null $contactPersonName __BT-X-186, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-187, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-188, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-189, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-190, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function addDocumentShipFromContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $shipFromTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipFromTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCall($shipFromTradeParty, "addToDefinedTradeContact", $contact); + + return $this; + } + + /** + * Detailed information about the Invoicer Party + * + * @param string $name __BT-X-207, From EXTENDED__ The name of the party + * @param string|null $id __BT-X-205, From EXTENDED__ 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 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 Party + * + * @param string $id __BT-X-205, From EXTENDED__ 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 to the Invoicer Party + * + * @param string|null $globalID __BT-X-206, From EXTENDED__ Global identifier of the goods recipient + * @param string|null $globalIDType __BT-X-206-0, From EXTENDED__ 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 Party + * + * @param string|null $taxRegType __BT-, From __ Type of tax number (FC = Tax number, VA = Sales tax identification number) + * @param string|null $taxRegId __BT-, From __ Tax number or sales tax identification number + * @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 Invoicer Party + * + * @param string|null $lineOne __BT-X-216, From EXTENDED__ 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-X-217, From EXTENDED__ 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-X-218, From EXTENDED__ 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-X-215, From EXTENDED__ Identifier for a group of properties, such as a zip code + * @param string|null $city __BT-X-219, From EXTENDED__ Usual name of the city or municipality in which the party's address is located + * @param string|null $country __BT-X-220, From EXTENDED__ 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-X-221, From EXTENDED__ 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 Invoicer Party + * + * @param string|null $legalOrgId __BT-X-208, From EXTENDED__ 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-X-208-0, From EXTENDED__ 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-X-209, From EXTENDED__ 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 Invoicer Party + * + * @param string|null $contactPersonName __BT-X-210, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-211, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-212, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-213, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-214, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function setDocumentInvoicerContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $invoicerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoicerTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCallIfMethodExists($invoicerTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact); + + return $this; + } + + /** + * Add an (additional) contact to the Invoicer Party + * + * @param string|null $contactPersonName __BT-X-210, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-211, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-212, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-213, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-214, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function addDocumentInvoicerContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $invoicerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoicerTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCall($invoicerTradeParty, "addToDefinedTradeContact", $contact); + + return $this; + } + + /** + * Set detailed information on the different invoice recipient + * + * @param string $name __BT-X-226, From EXTENDED__ The name of the party + * @param string|null $id __BT-X-224, From EXTENDED__ 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 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 Party + * + * @param string $id __BT-X-224, From EXTENDED__ 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 Party + * + * @param string|null $globalID __BT-X-225, From EXTENDED__ Global identification number + * @param string|null $globalIDType __BT-X-225-0, From EXTENDED__ 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 the Invoicee Party + * + * @param string|null $taxRegType __BT-X-242-0, From EXTENDED__ Type of tax number (FC = Tax number, VA = Sales tax identification number) + * @param string|null $taxRegId __BT-X-242, From EXTENDED__ Tax number or sales tax identification number + * @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 Invoicee Party + * + * @param string|null $lineOne __BT-X-235, From EXTENDED__ 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-X-236, From EXTENDED__ 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-X-237, From EXTENDED__ 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-X-234, From EXTENDED__ Identifier for a group of properties, such as a zip code + * @param string|null $city __BT-X-238, From EXTENDED__ Usual name of the city or municipality in which the party's address is located + * @param string|null $country __BT-X-239, From EXTENDED__ 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-X-240, From EXTENDED__ 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 Invoicee Party + * + * @param string|null $legalOrgId __BT-X-227, From EXTENDED__ 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-X-227-0, From EXTENDED__ 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-X-228, From EXTENDED__ 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 Invoicee Party + * + * @param string|null $contactPersonName __BT-X-229, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-230, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-231, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-232, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-233, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function setDocumentInvoiceeContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $invoiceeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoiceeTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCallIfMethodExists($invoiceeTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact); + + return $this; + } + + /** + * Add an (additional) contact to the Invoicee Party + * + * @param string|null $contactPersonName __BT-X-229, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-230, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-231, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-232, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-233, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function addDocumentInvoiceeContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $invoiceeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoiceeTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $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 $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 __BT-60-0, From BASIC WL__ Global identification number + * @param string|null $globalIDType __BT-60-1, From BASIC WL__ 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-X-257-0, From EXTENDED__ Type of tax number (FC = Tax number, VA = Sales tax identification number) + * @param string|null $taxRegId __BT-X-257, From EXTENDED Tax number or sales tax identification number + * @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 __BT-X-250, From EXTENDED__ 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-X-251, From EXTENDED__ 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-X-252, From EXTENDED__ 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-X-249, From EXTENDED__ Identifier for a group of properties, such as a zip code + * @param string|null $city __BT-X-253, From EXTENDED__ Usual name of the city or municipality in which the party's address is located + * @param string|null $country __BT-X-254, From EXTENDED__ 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-X-255, From EXTENDED__ 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-61-1, From BASIC WL__ 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-X-243, From EXTENDED__ 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 __BT-X-244, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-245, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-246, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-247, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-248, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function setDocumentPayeeContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $payeeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getPayeeTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCallIfMethodExists($payeeTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact); + + return $this; + } + + /** + * Add an (additional) contact to the payee trade party + * + * @param string|null $contactPersonName __BT-X-244, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-245, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-246, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-247, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-248, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentBuilder + */ + public function addDocumentPayeeContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $payeeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getPayeeTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCall($payeeTradeParty, "addToDefinedTradeContact", $contact); + + return $this; + } + + /** + * Set information on the delivery conditions + * + * @param string|null $code __BT-X-145, From EXTENDED__ The code indicating the type of delivery for these commercial delivery terms. To be selected from the entries in the list UNTDID 4053 + INCOTERMS + * @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 $issueDate __BT-X-146, From EXTENDED__ Order confirmation date + * @return ZugferdDocumentBuilder + */ + public function setDocumentSellerOrderReferencedDocument(string $issuerAssignedId, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $sellerorderrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, null, null, null, null, $issueDate, 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 $issueDate __BT-X-147, From EXTENDED__ Date of order + * @return ZugferdDocumentBuilder + */ + public function setDocumentBuyerOrderReferencedDocument(?string $issuerAssignedId, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $buyerorderrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, null, null, null, null, $issueDate, null); + + $this->getObjectHelper()->tryCall($this->headerTradeAgreement, "setBuyerOrderReferencedDocument", $buyerorderrefdoc); + + return $this; + } + + /** + * Set details of the associated offer + * + * @param string $issuerAssignedId __BT-X-403, From EXTENDED__ Offer number + * @param DateTime|null $issueDate __BT-X-404, From EXTENDED__ Date of offer + * @return ZugferdDocumentBuilder + */ + public function setDocumentQuotationReferencedDocument(?string $issuerAssignedId, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $quotationrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, null, null, null, null, $issueDate, null); + + $this->getObjectHelper()->tryCall($this->headerTradeAgreement, "setQuotationReferencedDocument", $quotationrefdoc); + + 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 $issueDate __BT-X-26, From EXTENDED__ Contract date + * @return ZugferdDocumentBuilder + */ + public function setDocumentContractReferencedDocument(?string $issuerAssignedId, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $contractrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, null, null, null, null, $issueDate, 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 + * + * @param string $issuerAssignedId __BT-122, From EN 16931__ 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 __BT-122-0, From EN 16931__ 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 __BT-124, From EN 16931__ A means of locating the resource, including the primary access method intended for it, e.g. http:// or ftp://. The storage location of the external document must be used if the buyer requires further information as + * supporting documents for the invoiced amounts. External documents are not part of the invoice. Invoice processing should be possible without access to external documents. Access to external documents can entail certain risks. + * @param string|array|null $name __BT-123, From EN 16931__ A description of the document, e.g. Hourly billing, usage or consumption report, etc. + * @param string|null $refTypeCode __BT-18-1, From ENN 16931__ 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 $issueDate __BT-X-149, From EXTENDED__ Document date + * @param string|null $binaryDataFilename __BT-125, From EN 16931__ 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 $issueDate = null, ?string $binaryDataFilename = null): ZugferdDocumentBuilder + { + $additionalrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, $uriId, null, $typeCode, $name, $refTypeCode, $issueDate, $binaryDataFilename); + + $this->getObjectHelper()->tryCall($this->headerTradeAgreement, "addToAdditionalReferencedDocument", $additionalrefdoc); + + return $this; + } + + /** + * Add an invoice supporting additional document reference with an URL which specifies the location where the information can be found + * The invoice supporting documents 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). + * The option of linking to an external document is required, for example, when large attachments and/or sensitive information, e.g. for personal services, are involved, + * which must be separated from the invoice. + * + * @param string $issuerAssignedId __BT-122, From EN 16931__ Identification of the document supporting the invoice + * @param string $uriId __BT-124, From EN 16931__ A means of locating the resource, including the primary access method intended for it, e.g. http:// or ftp://. The storage location of the external document must be used if the buyer requires further information as + * @param string|array|null $name __BT-123, From EN 16931__ A description of the document, e.g. Hourly billing, usage or consumption report, etc. + * @return ZugferdDocumentBuilder + */ + public function addDocumentInvoiceSupportingDocumentWithUri(string $issuerAssignedId, string $uriId, $name = null): ZugferdDocumentBuilder + { + return $this->addDocumentAdditionalReferencedDocument($issuerAssignedId, ZugferdDocumentType::RELATED_DOCUMENT, $uriId, $name); + } + + /** + * Add an invoice supporting additional document reference with an URL which specifies the location where the information can be found + * The invoice supporting documents can be used to reference both a document number, which should be known to the recipient, and an embedded file (such as a timesheet as a PDF file). + * + * @param string $issuerAssignedId __BT-122, From EN 16931__ Identification of the document supporting the invoice + * @param string $binaryDataFilename __BT-125, From EN 16931__ Contains a file name of an attachment document embedded as a binary object + * @param string|array|null $name __BT-123, From EN 16931__ A description of the document, e.g. Hourly billing, usage or consumption report, etc. + * @return ZugferdDocumentBuilder + * @throws ZugferdUnsupportedMimetype + */ + public function addDocumentInvoiceSupportingDocumentWithFile(string $issuerAssignedId, string $binaryDataFilename, $name = null): ZugferdDocumentBuilder + { + return $this->addDocumentAdditionalReferencedDocument($issuerAssignedId, ZugferdDocumentType::RELATED_DOCUMENT, null, $name, null, null, $binaryDataFilename); + } + + /** + * Add a tender or lot document reference + * + * @param string $issuerAssignedId __BT-122, From EN 16931__ Tender or lot reference + * @return ZugferdDocumentBuilder + */ + public function addDocumentTenderOrLotReferenceDocument(string $issuerAssignedId): ZugferdDocumentBuilder + { + return $this->addDocumentAdditionalReferencedDocument($issuerAssignedId, ZugferdDocumentType::VALIDATED_PRICED_TENDER); + } + + /** + * Add details of the calculated object + * + * @param string $issuerAssignedId __BT-122, From EN 16931__ Depending on the application, this can be a subscription number, a telephone number, a meter reading, a vehicle, a person, etc. + * @param string $refTypeCode __BT-18-1, From ENN 16931__ 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. + * @return ZugferdDocumentBuilder + */ + public function addDocumentInvoicedObjectReferenceDocument(string $issuerAssignedId, string $refTypeCode): ZugferdDocumentBuilder + { + return $this->addDocumentAdditionalReferencedDocument($issuerAssignedId, ZugferdDocumentType::INVOICING_DATA_SHEET, null, null, $refTypeCode); + } + + /** + * Set a Reference to the previous invoice + * + * To be used if: + * - a previous invoice is corrected + * - reference is made from a final invoice to previous partial invoices + * - reference is made from a final invoice to previous invoices for advance payments. * + * + * @param string $issuerAssignedId __BT-25, From BASIC WL__ The identification of an invoice previously sent by the seller + * @param string|null $typeCode __BT-X-555, From EXTENDED__ Type of previous invoice (code) + * @param DateTime|null $issueDate __BT-26, From BASIC WL__ Date of the previous invoice + * @return ZugferdDocumentBuilder + */ + public function setDocumentInvoiceReferencedDocument(string $issuerAssignedId, ?string $typeCode = null, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $invoicerefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, null, $typeCode, null, null, $issueDate, null); + + $this->getObjectHelper()->tryCallIfMethodExists($this->headerTradeSettlement, "addToInvoiceReferencedDocument", "setInvoiceReferencedDocument", [$invoicerefdoc], $invoicerefdoc); + + return $this; + } + + /** + * Add a Reference to the previous invoice + * + * To be used if: + * - a previous invoice is corrected + * - reference is made from a final invoice to previous partial invoices + * - reference is made from a final invoice to previous invoices for advance payments. * + * + * @param string $issuerAssignedId __BT-25, From BASIC WL__ The identification of an invoice previously sent by the seller + * @param string|null $typeCode __BT-X-555, From EXTENDED__ Type of previous invoice (code) + * @param DateTime|null $issueDate __BT-26, From BASIC WL__ Date of the previous invoice + * @return ZugferdDocumentBuilder + */ + public function addDocumentInvoiceReferencedDocument(string $issuerAssignedId, ?string $typeCode = null, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $invoicerefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, null, $typeCode, null, null, $issueDate, null); + + $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "addToInvoiceReferencedDocument", $invoicerefdoc); + + return $this; + } + + /** + * Set Details of a project reference + * + * @param string $id __BT-11, From EN 16931__ The identifier of the project to which the invoice relates + * @param string $name __BT-11-0, From EN 16931__ The name of the project to which the invoice relates + * @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; + } + + /** + * Details of the associated end customer order + * + * @param string $issuerAssignedId __BT-X-150, From EXTENDED__ Order number of the end customer + * @param DateTime|null $issueDate __BT-X-151, From EXTENDED__ Date of the order issued by the end customer + * @return ZugferdDocumentBuilder + */ + public function addDocumentUltimateCustomerOrderReferencedDocument(string $issuerAssignedId, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $additionalrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, null, null, null, null, $issueDate, 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 actual delivery + * + * @param string $issuerAssignedId __BT-16, From BASIC WL__ Shipping notification reference + * @param DateTime|null $issueDate __BT-X-200, From EXTENDED__ Shipping notification date + * @return ZugferdDocumentBuilder + */ + public function setDocumentDespatchAdviceReferencedDocument(?string $issuerAssignedId, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $despatchddvicerefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, null, null, null, null, $issueDate, 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 $issueDate __BT-X-201, From EXTENDED__ Goods receipt date + * @return ZugferdDocumentBuilder + */ + public function setDocumentReceivingAdviceReferencedDocument(string $issuerAssignedId, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $receivingadvicerefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, null, null, null, null, $issueDate, null); + + $this->getObjectHelper()->tryCall($this->headerTradeDelivery, "setReceivingAdviceReferencedDocument", $receivingadvicerefdoc); + + return $this; + } + + /** + * Set detailed information on the associated delivery bill + * + * @param string $issuerAssignedId __BT-X-202, From EXTENDED__ Delivery slip number + * @param DateTime|null $issueDate __BT-X-203, From EXTENDED__ Delivery slip date + * @return ZugferdDocumentBuilder + */ + public function setDocumentDeliveryNoteReferencedDocument(string $issuerAssignedId, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $deliverynoterefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, null, null, null, null, $issueDate, 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-87, From EN 16931__ 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-88, From EN 16931__ Name of the payment card holder + * @param string|null $buyerIban __BT-91, From BASIC WL__ The account to be debited by the direct debit + * @param string|null $payeeIban __BT-84, From BASIC WL__ A unique identifier for the financial account held with a payment service provider to which the payment should be made + * @param string|null $payeeAccountName __BT-85, From BASIC WL__ The name of the payment account held with a payment service provider to which the payment should be made + * @param string|null $payeePropId __BT-84-0, From BASIC WL__ National account number (not for SEPA) + * @param string|null $payeeBic __BT-86, From EN 16931__ An identifier for the payment service provider with which the payment account is held + * @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 + { + $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()->tryCall($this->headerTradeSettlement, "addToSpecifiedTradeSettlementPaymentMeans", $paymentMeans); + + return $this; + } + + /** + * Sets the document payment means to _SEPA Credit Transfer_ + * + * @param string $payeeIban __BT-84, From BASIC WL__ A unique identifier for the financial account held with a payment service provider to which the payment should be made + * @param string|null $payeeAccountName __BT-85, From BASIC WL__ The name of the payment account held with a payment service provider to which the payment should be made + * @param string|null $payeePropId __BT-BT-84-0, From BASIC WL__ National account number (not for SEPA) + * @param string|null $payeeBic __BT-86, From EN 16931__ An identifier for the payment service provider with which the payment account is held + * @param string|null $paymentReference __BT-83, From BASIC WL__ A text value used to link the payment to the invoice issued by the seller + * @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()->tryCall($this->headerTradeSettlement, "addToSpecifiedTradeSettlementPaymentMeans", $paymentMeans); + + if (!is_null($paymentReference)) { + $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "setPaymentReference", $this->getObjectHelper()->getIdType($paymentReference)); + } + + return $this; + } + + /** + * Sets the document payment means to _Non-SEPA Credit Transfer_ + * + * @param string $payeeIban __BT-84, From BASIC WL__ A unique identifier for the financial account held with a payment service provider to which the payment should be made + * @param string|null $payeeAccountName __BT-85, From BASIC WL__ The name of the payment account held with a payment service provider to which the payment should be made + * @param string|null $payeePropId __BT-BT-84-0, From BASIC WL__ National account number (not for SEPA) + * @param string|null $payeeBic __BT-86, From EN 16931__ An identifier for the payment service provider with which the payment account is held + * @param string|null $paymentReference __BT-83, From BASIC WL__ A text value used to link the payment to the invoice issued by the seller + * @return ZugferdDocumentBuilder + */ + public function addDocumentPaymentMeanToCreditTransferNonSepa(string $payeeIban, ?string $payeeAccountName = null, ?string $payeePropId = null, ?string $payeeBic = null, ?string $paymentReference = null): ZugferdDocumentBuilder + { + $paymentMeans = $this->getObjectHelper()->getTradeSettlementPaymentMeansType(ZugferdPaymentMeans::UNTDID_4461_30); + $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()->tryCall($this->headerTradeSettlement, "addToSpecifiedTradeSettlementPaymentMeans", $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 __BT-91, From BASIC WL__ The account to be debited by the direct debit + * @param string|null $creditorReferenceID __BT-90, From BASIC WL__ Unique bank identifier of the payee or the seller assigned by the bank of the payee or the seller + * @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()->tryCall($this->headerTradeSettlement, "addToSpecifiedTradeSettlementPaymentMeans", $paymentMeans); + + if (!is_null($creditorReferenceID)) { + $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "setCreditorReferenceID", $this->getObjectHelper()->getIdType($creditorReferenceID)); + } + + return $this; + } + + /** + * Sets the document payment means to _Non-SEPA Direct Debit_ + * + * @param string $buyerIban __BT-91, From BASIC WL__ The account to be debited by the direct debit + * @param string|null $creditorReferenceID __BT-90, From BASIC WL__ Unique bank identifier of the payee or the seller assigned by the bank of the payee or the seller + * @return ZugferdDocumentBuilder + */ + public function addDocumentPaymentMeanToDirectDebitNonSepa(string $buyerIban, ?string $creditorReferenceID = null): ZugferdDocumentBuilder + { + $paymentMeans = $this->getObjectHelper()->getTradeSettlementPaymentMeansType(ZugferdPaymentMeans::UNTDID_4461_49); + $buyerfinancialaccount = $this->getObjectHelper()->getDebtorFinancialAccountType($buyerIban); + + $this->getObjectHelper()->tryCall($paymentMeans, "setPayerPartyDebtorFinancialAccount", $buyerfinancialaccount); + + $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "addToSpecifiedTradeSettlementPaymentMeans", $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 __BT-, From __ The type of the card + * @param string $cardId __BT-87, From EN 16931__ 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-88, From EN 16931__ 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()->tryCall($this->headerTradeSettlement, "addToSpecifiedTradeSettlementPaymentMeans", $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-X-262, From EXTENDED__ An amount used as the basis for calculating sales tax, duty or customs duty + * @param float|null $allowanceChargeBasisAmount __BT-X-263, From EXTENDED__ Total amount Additions and deductions to the tax rate at document level + * @param DateTime|null $taxPointDate __BT-7-00, From EN 16931__ Date on which tax is due. 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 the VAT becomes relevant for settlement for the seller and for the buyer + * @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 __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) + * @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-X-264, From EXTENDED__ Further information of the billing period (Obsolete) + * @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-X-265, From EXTENDED__ 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-X-266, From EXTENDED__ Base quantity of the discount + * @param string|null $basisQuantityUnitCode __BT-X-267, From EXTENDED__ Unit of the price base quantity + * @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 detailed information on logistics service fees + * + * @param string $description __BT-X-271, From EXTENDED__ Identification of the service fee + * @param float $appliedAmount __BT-X-272, From EXTENDED__ Amount of the service fee + * @param array|null $taxTypeCodes __BT-X-273-0, From EXTENDED__ Code of the Tax type. Note: Fixed value = "VAT" + * @param array|null $taxCategoryCodes __BT-X-273, From EXTENDED__ Code of the VAT category + * @param array|null $rateApplicablePercents __BT-X-274, From EXTENDED__ 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. + * @param float|null $partialPaymentAmount __BT-X-275, From EXTENDED__ Amount of the partial payment + * @return ZugferdDocumentBuilder + */ + public function addDocumentPaymentTerm(?string $description = null, ?DateTime $dueDate = null, ?string $directDebitMandateID = null, ?float $partialPaymentAmount = null): ZugferdDocumentBuilder + { + $paymentTerms = $this->getObjectHelper()->getTradePaymentTermsType($description, $dueDate, $directDebitMandateID, $partialPaymentAmount); + + $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 __BT-X-286, From EXTENDED__ Percentage of the down payment + * @param DateTime|null $basisDateTime __BT-X-282, From EXTENDED__ Due date reference date + * @param float|null $basisPeriodMeasureValue __BT-X-283, From EXTENDED__ Maturity period (basis) + * @param string|null $basisPeriodMeasureUnitCode __BT-X-284, From EXTENDED__ Maturity period (unit) + * @param float|null $basisAmount __BT-X-285, From EXTENDED__ Base amount of the payment discount + * @param float|null $actualDiscountAmount __BT-X-287, From EXTENDED__ Amount of the payment discount + * @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 penalty Terms to last added payment term + * + * @param float|null $calculationPercent __BT-X-280, From EXTENDED__ Percentage of the payment surcharge + * @param DateTime|null $basisDateTime __BT-X-276, From EXTENDED__ Due date reference date + * @param float|null $basisPeriodMeasureValue __BT-X-277, From EXTENDED__ Maturity period (basis) + * @param string|null $basisPeriodMeasureUnitCode __BT-X-278, From EXTENDED__ Maturity period (unit) + * @param float|null $basisAmount __BT-X-279, From EXTENDED__ Basic amount of the payment surcharge + * @param float|null $actualPenaltyAmount __BT-X-281, From EXTENDED__ Amount of the payment surcharge + * @return ZugferdDocumentBuilder + */ + public function addPenaltyTermsToPaymentTerms(?float $calculationPercent = null, ?DateTime $basisDateTime = null, ?float $basisPeriodMeasureValue = null, ?string $basisPeriodMeasureUnitCode = null, ?float $basisAmount = null, ?float $actualPenaltyAmount = null): ZugferdDocumentBuilder + { + $penaltyTerms = $this->getObjectHelper()->getTradePaymentPenaltyTermsType($basisDateTime, $basisPeriodMeasureValue, $basisPeriodMeasureUnitCode, $basisAmount, $calculationPercent, $actualPenaltyAmount); + + $this->getObjectHelper()->tryCall($this->currentPaymentTerms, "setApplicableTradePaymentPenaltyTerms", $penaltyTerms); + + return $this; + } + + /** + * Add a payment term in XRechnung-Style (in the Form #SKONTO#TAGE=14#PROZENT=1.00#BASISBETRAG=2.53#) + * + * @param string $description __BT-20, From _EN 16931 XRECHNUNG__ Text to add + * @param int[] $paymentDiscountDays __BT-20, BR-DE-18, From _EN 16931 XRECHNUNG__ Array of Payment discount days (array of integer) + * @param float[] $paymentDiscountPercents __BT-20, BR-DE-18, From _EN 16931 XRECHNUNG__ Array of Payment discount percents (array of decimal) + * @param float[] $paymentDiscountBaseAmounts __BT-20, BR-DE-18, From _EN 16931 XRECHNUNG__ Array of Payment discount base amounts (array of decimal) + * @param DateTime|null $dueDate __BT-9, From EN 16931 XRECHNUNG__ 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 EN 16931 XRECHNUNG__ Unique identifier assigned by the payee to reference the direct debit authorization. + * @return ZugferdDocumentBuilder + */ + public function addDocumentPaymentTermXRechnung(string $description, array $paymentDiscountDays = [], array $paymentDiscountPercents = [], array $paymentDiscountBaseAmounts = [], ?DateTime $dueDate = null, ?string $directDebitMandateID = null): ZugferdDocumentBuilder + { + $paymentTermsDescription = []; + + if ($this->getObjectHelper()->isNullOrEmpty($description)) { + return $this; + } + + $paymentDiscountDays = array_filter( + $paymentDiscountDays, + function ($k) use ($paymentDiscountPercents) { + return isset($paymentDiscountPercents[$k]); + }, + ARRAY_FILTER_USE_KEY + ); + + if ($paymentDiscountDays === []) { + return $this->addDocumentPaymentTerm(trim($description), $dueDate, $directDebitMandateID); + } + + foreach ($paymentDiscountDays as $paymentDiscountDayIndex => $paymentDiscountDay) { + $paymentTermsDescription[] = + sprintf( + isset($paymentDiscountBaseAmounts[$paymentDiscountDayIndex]) + ? "#SKONTO#TAGE=%s#PROZENT=%s#BASISBETRAG=%s#" + : "#SKONTO#TAGE=%s#PROZENT=%s#", + number_format($paymentDiscountDay, 0, ".", ""), + number_format($paymentDiscountPercents[$paymentDiscountDayIndex] ?? 0.0, 2, ".", ""), + number_format($paymentDiscountBaseAmounts[$paymentDiscountDayIndex] ?? 0.0, 2, ".", "") + ); + } + + return $this->addDocumentPaymentTerm( + trim(sprintf("%s\n%s", implode("\n", $paymentTermsDescription), $description)), + $dueDate, + $directDebitMandateID + ); + } + + /** + * Add information on the booking reference + * + * @param string $id __BT-19, From BASIC WL__ Posting reference of the byuer. If required, this reference shall be provided by the Buyer to the Seller prior to the issuing of the Invoice. + * @param string|null $typeCode __BT-X-290, From EXTENDED__ Type of the posting reference. Allowed values: 1 = Financial, 2 = Subsidiary, 3 = Budget, 4 = Cost Accounting, 5 = Payable, 6 = Job Cost Accounting + * @return ZugferdDocumentBuilder + */ + public function addDocumentReceivableSpecifiedTradeAccountingAccount(string $id, ?string $typeCode = null): ZugferdDocumentBuilder + { + $account = $this->getObjectHelper()->getTradeAccountingAccountType($id, $typeCode); + + $this->getObjectHelper()->tryCallAll($this->headerTradeSettlement, ["addToReceivableSpecifiedTradeAccountingAccount", "setReceivableSpecifiedTradeAccountingAccount"], $account); + + 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; + } + + /** + * 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()->ensureArray($this->getObjectHelper()->tryCallAndReturn($summation, "getTaxTotalAmount")); + + if (isset($taxTotalAmount[0])) { + $invoiceCurrencyCode = $this->getObjectHelper()->tryCallByPathAndReturn($this->headerTradeSettlement, "getInvoiceCurrencyCode.value"); + $this->getObjectHelper()->tryCall($taxTotalAmount[0], 'setCurrencyID', $invoiceCurrencyCode); + } + + return $this; + } + + /** + * Adds a new position (line) to document + * + * @param string $lineid __BT-126, From BASIC__ Identification of the invoice item + * @param string|null $lineStatusCode __BT-X-7, From EXTENDED__ Indicates whether the invoice item contains prices that must be taken into account when calculating the invoice amount or whether only information is included. + * @param string|null $lineStatusReasonCode __BT-X-8, From EXTENDED__ Adds the type to specify whether the invoice line is: + * + * - DETAIL: detail (normal position) + * - GROUP: Subtotal + * - INFORMATION: Information only + * + * @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 __BT-126, From BASIC__ Identification of the invoice item + * @param string|null $lineStatusCode __BT-X-7, From EXTENDED__ Indicates whether the invoice item contains prices that must be taken into account when calculating the invoice amount or whether only information is included. + * @param string|null $lineStatusReasonCode __BT-X-8, From EXTENDED__ Adds the type to specify whether the invoice line is: + * @return ZugferdDocumentBuilder + * @deprecated 1.0.75 + */ + 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-X-9, From EXTENDED__ A code to classify the content of the free text of the invoice. The code is agreed bilaterally and must have the same meaning as BT-127. + * @param string|null $subjectCode __BT-X-10, From EXTENDED__ Code for qualifying the free text for the invoice item (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, ...) + * @param string|null $industryAssignedID __BT-X-309, From EXTENDED__ ID assigned by the industry to the contained referenced product + * @param string|null $modelID __BT-X-533, From EXTENDED__ A unique model identifier for this product + * @param string|null $batchID __BT-X-534. From EXTENDED__ Identification of the batch (lot) of the product + * @param string|null $brandName __BT-X-535. From EXTENDED__ The brand name, expressed as text, for this product + * @param string|null $modelName __BT-X-536. From EXTENDED__ Model designation of the product + * @return ZugferdDocumentBuilder + */ + public function setDocumentPositionProductDetails(string $name, ?string $description = null, ?string $sellerAssignedID = null, ?string $buyerAssignedID = null, ?string $globalIDType = null, ?string $globalID = null, ?string $industryAssignedID = null, ?string $modelID = null, ?string $batchID = null, ?string $brandName = null, ?string $modelName = null): ZugferdDocumentBuilder + { + $product = $this->getObjectHelper()->getTradeProductType($name, $description, $sellerAssignedID, $buyerAssignedID, $globalIDType, $globalID, $industryAssignedID, $modelID, $batchID, $brandName, $modelName); + + $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 __BT-160, From EN 16931__ The name of the attribute or property of the product such as "Colour" + * @param string $value __BT-161, From EN 16931__ The value of the attribute or property of the product such as "Red" + * @param string|null $typeCode __BT-X-11, From EXTENDED__ Type of product characteristic (code). The codes must be taken from the UNTDID 6313 codelist. + * @param float|null $valueMeasure __BT-X-12, From EXTENDED__ Value of the product property (numerical measured variable) + * @param string|null $valueMeasureUnitCode __BT-X-12-0, From EXTENDED__ Unit of measurement code + * @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 __BT-158, From EN 16931__ Item classification identifier. Classification codes are used for grouping similar items that can serve different purposes, such as public procurement (according to the Common Procurement Vocabulary ([CPV]), e-commerce (UNSPSC), etc. + * @param string|null $className __BT-X-138, From EXTENDED__ Name with which an article can be classified according to type or quality. + * @param string|null $listId __BT-158-1, From EN 16931__ The identifier for the identification scheme of the item classification identifier. The identification scheme must be selected from the entries in UNTDID 7143 [6]. + * @param string|null $listVersionId __BT-158-2, From EN 16931__ 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; + } + + /** + * Add detailed information on included products. This information relates to the product that has just been added. + * + * @param string $name __BT-X-18, From EXTENDED__ Name of the referenced product contained + * @param string|null $description __BT-X-19, From EXTENDED__ Description of the included referenced product + * @param string|null $sellerAssignedID __BT-X-16, From EXTENDED__ ID assigned by the seller of the contained referenced product + * @param string|null $buyerAssignedID __BT-X-17, From EXTENDED__ ID of the referenced product assigned by the buyer + * @param string|null $globalID __BT-X-15, From EXTENDED__ Global ID of the referenced product contained + * @param string|null $globalIDType __BT-X-15-1, From EXTENDED__ Identification of the scheme + * @param float|null $unitQuantity __BT-X-20, From EXTENDED__ Quantity of the referenced product contained + * @param string|null $unitCode __BT-X-20-1, From EXTENDED__ Unit code of Quantity of the referenced product contained + * @param string|null $industryAssignedID __BT-X-309, From EXTENDED__ ID of the referenced product contained assigned by the industry + * @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, ?string $industryAssignedID = null): ZugferdDocumentBuilder + { + $product = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedTradeProduct"); + $referencedProduct = $this->getObjectHelper()->getReferencedProductType($globalID, $globalIDType, $sellerAssignedID, $buyerAssignedID, $industryAssignedID, $name, $description, $unitQuantity, $unitCode); + + $this->getObjectHelper()->tryCall($product, "addToIncludedReferencedProduct", $referencedProduct); + + 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. 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; + } + + /** + * Set details of a sales order reference. + * + * @param string $issuerAssignedId __BT-X-537, From EXTENDED__ Document number of a sales order reference + * @param string $lineId __BT-X-538, From EXTENDED__ An identifier for a position within a sales order. + * @param DateTime|null $issueDate __BT-X-539, From EXTENDED__ Date of sales order + * @return ZugferdDocumentBuilder + */ + public function setDocumentPositionSellerOrderReferencedDocument(string $issuerAssignedId, string $lineId, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $sellerorderrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, $lineId, null, null, null, $issueDate, null); + $positionagreement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeAgreement"); + + $this->getObjectHelper()->tryCall($positionagreement, "setSellerOrderReferencedDocument", $sellerorderrefdoc); + + return $this; + } + + /** + * Set details of the related buyer order position. + * + * @param string $issuerAssignedId __BT-X-21, From EXTENDED__ 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 $issueDate __BT-X-22, From EXTENDED__ Date of order + * @return ZugferdDocumentBuilder + */ + public function setDocumentPositionBuyerOrderReferencedDocument(string $issuerAssignedId, string $lineId, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $buyerorderrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, $lineId, null, null, null, $issueDate, null); + $positionagreement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeAgreement"); + + $this->getObjectHelper()->tryCall($positionagreement, "setBuyerOrderReferencedDocument", $buyerorderrefdoc); + + return $this; + } + + /** + * Set details of the associated offer position. + * + * @param string $issuerAssignedId __BT-X-310, From EXTENDED__ Offer number + * @param string $lineId __BT-X-311, From EXTENDED__ Position identifier within the offer + * @param DateTime|null $issueDate __BT-X-312, From EXTENDED__ Date of offder + * @return ZugferdDocumentBuilder + */ + public function setDocumentPositionQuotationReferencedDocument(string $issuerAssignedId, string $lineId, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $quotationrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, $lineId, null, null, null, $issueDate, null); + $positionagreement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeAgreement"); + + $this->getObjectHelper()->tryCall($positionagreement, "setQuotationReferencedDocument", $quotationrefdoc); + + return $this; + } + + /** + * Set details of the related contract position. + * + * @param string $issuerAssignedId __BT-X-24, From EXTENDED__ 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 __BT-X-25, From EXTENDED__ Identifier of the according contract position + * @param DateTime|null $issueDate __BT-X-26, From EXTENDED__ Contract date + * @return ZugferdDocumentBuilder + */ + public function setDocumentPositionContractReferencedDocument(string $issuerAssignedId, string $lineId, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $contractrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, $lineId, null, null, null, $issueDate, null); + $positionagreement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeAgreement"); + + $this->getObjectHelper()->tryCall($positionagreement, "setContractReferencedDocument", $contractrefdoc); + + return $this; + } + + /** + * Add an additional Document reference on a position. + * + * 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 + * + * @param string $issuerAssignedId __BT-X-27, From EXTENDED__ 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 __BT-X-30, From EXTENDED__ Type of referenced document (See codelist UNTDID 1001) + * @param string|null $uriId __BT-X-28, From EXTENDED__ 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 __BT-X-29, From EXTENDED__ The referenced position identifier in the additional document + * @param string|null $name __BT-X-299, From EXTENDED__ A description of the document, e.g. Hourly billing, usage or consumption report, etc. + * @param string|null $refTypeCode __BT-X-32, From EXTENDED__ 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 $issueDate __BT-X-33, From EXTENDED__ Document date + * @param string|null $binaryDataFilename __BT-X-31, From EXTENDED__ 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 $issueDate = null, ?string $binaryDataFilename = null): ZugferdDocumentBuilder + { + $addrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, $uriId, $lineId, $typeCode, $name, $refTypeCode, $issueDate, $binaryDataFilename); + $positionagreement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeAgreement"); + + $this->getObjectHelper()->tryCall($positionagreement, "addToAdditionalReferencedDocument", $addrefdoc); + + return $this; + } + + /** + * Add a referennce of a associated end customer order. + * + * @param string $issuerAssignedId __BT-X-43, From EXTENDED__ Order number of the end customer + * @param string $lineId __BT-X-44, From EXTENDED__ Order item (end customer) + * @param DateTime|null $issueDate __BT-X-45, From EXTENDED__ Document date of end customer order + * @return ZugferdDocumentBuilder + */ + public function addDocumentPositionUltimateCustomerOrderReferencedDocument(string $issuerAssignedId, string $lineId, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $ultimaterefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, $lineId, null, null, null, $issueDate, 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. 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-X-34, From EXTENDED__Discount/surcharge in percent. Up to level EN16931, only the final result of the discount (ActualAmount) is transferred + * @param float|null $basisAmount __BT-X-35, From EXTENDED__ Base amount of the discount/surcharge + * @param string|null $reason __BT-X-36, From EXTENDED__ 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-X-313, From EXTENDED__ Reason code for surcharge/discount + * @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 + * @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 + * @param float|null $chargeFreeQuantity __BT-X-46, From EXTENDED__ Quantity, free of charge + * @param string|null $chargeFreeQuantityUnitCpde __BT-X-46-0, From EXTENDED__ Unit of measure code for the quantity free of charge + * @param float|null $packageQuantity __BT-X-47, From EXTENDED__ Number of packages + * @param string|null $packageQuantityUnitCode __BT-X-47-0, From EXTENDED__ 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 position level. + * + * @param string|null $name __BT-X-50, From EXTENDED__ 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-X-48, From EXTENDED__ 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 (Obsolete) + * @return ZugferdDocumentBuilder + */ + public function setDocumentPositionShipTo(?string $name = null, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder + { + $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery"); + $shipToTradeParty = $this->getObjectHelper()->getTradePartyAllowEmpty($name, $id, $description); + + $this->getObjectHelper()->tryCall($positiondelivery, "setShipToTradeParty", $shipToTradeParty); + + return $this; + } + + /** + * Add a global id for the Ship-to Trade Party at position level. + * + * @param string|null $globalID __BT-X-49, From EXTENDED__ The identifier is uniquely assigned to a party by a global registration organization. + * @param string|null $globalIDType __BT-X-49-0, From EXTENDED__ 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 at position level. + * + * @param string|null $taxRegType __BT-X-66-0, From EXTENDED__ Type of tax number (FC = Tax number, VA = Sales tax identification number) + * @param string|null $taxRegId __BT-X-66, From EXTENDED__ Tax number or sales tax identification number + * @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 at position level. + * + * @param string|null $lineOne __BG-X-59, From EXTENDED__ 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 __BG-X-60, From EXTENDED__ 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 __BG-X-61, From EXTENDED__ 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 __BG-X-58, From EXTENDED__ Identifier for a group of properties, such as a zip code + * @param string|null $city __BG-X-62, From EXTENDED__ Usual name of the city or municipality in which the product end users address is located + * @param string|null $country __BG-X-63, From EXTENDED__ 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 __BG-X-64, From EXTENDED__ 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 position level. + * + * @param string|null $legalOrgId __BT-X-51, From EXTENDED__ 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-X-51-0, From EXTENDED__ 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-X-52, From EXTENDED__ 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 on position level. + * + * @param string|null $contactPersonName __BT-X-54, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-54-1, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-55, From EXTENDED__ Detailed information on the party's phone number + * @param string|null $contactFaxNo __BT-X-56, From EXTENDED__ Detailed information on the party's fax number + * @param string|null $contactEmailAddress __BT-X-57, From EXTENDED__ Detailed information on the party's email address + * @return ZugferdDocumentBuilder + */ + public function setDocumentPositionShipToContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery"); + $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getShipToTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCallIfMethodExists($shipToTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact); + + return $this; + } + + /** + * Add an additional contact to the Ship-To party on position level. + * + * @param string|null $contactPersonName __BT-X-54, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-54-1, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-55, From EXTENDED__ Detailed information on the party's phone number + * @param string|null $contactFaxNo __BT-X-56, From EXTENDED__ Detailed information on the party's fax number + * @param string|null $contactEmailAddress __BT-X-57, From EXTENDED__ Detailed information on the party's email address + * @return ZugferdDocumentBuilder + */ + public function addDocumentPositionShipToContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery"); + $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getShipToTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCall($shipToTradeParty, "addToDefinedTradeContact", $contact); + + return $this; + } + + /** + * Detailed information on the different end recipient on position level. + * + * @param string|null $name __BT-X-69, From EXTENDED__ 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-X-67, From EXTENDED__ 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 (Obsolete) + * @return ZugferdDocumentBuilder + */ + public function setDocumentPositionUltimateShipTo(?string $name = null, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder + { + $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery"); + $shipToTradeParty = $this->getObjectHelper()->getTradePartyAllowEmpty($name, $id, $description); + + $this->getObjectHelper()->tryCall($positiondelivery, "setUltimateShipToTradeParty", $shipToTradeParty); + + return $this; + } + + /** + * Add a global id for the Ship-to Trade Party on position level. + * + * @param string|null $globalID __BT-X-68, From EXTENDED__ Global identifier of the parfty + * @param string|null $globalIDType __BT-X-68-0, From EXTENDED__ 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 on position level. + * + * @param string|null $taxRegType __BT-X-84-0, From EXTENDED__ Type of tax number (FC = Tax number, VA = Sales tax identification number) + * @param string|null $taxRegId __BT-X-84, From EXTENDED__ Tax number or sales tax identification number + * @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 on position level. + * + * @param string|null $lineOne __BT_X-77, From EXTENDED__ 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_X-78, From EXTENDED__ 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_X-79, From EXTENDED__ 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_X-76, From EXTENDED__ Identifier for a group of properties, such as a zip code + * @param string|null $city __BT_X-80, From EXTENDED__ Usual name of the city or municipality in which the party's address is located + * @param string|null $country __BT_X-81, From EXTENDED__ 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_X-82, From EXTENDED__ 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 on position level. + * + * @param string|null $legalOrgId __BT_X-70, From EXTENDED__ 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_X-70-0, From EXTENDED__ 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_X-71, From EXTENDED__ 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 on position level. + * + * @param string|null $contactPersonName __BT_X-72, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT_X-72-1, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT_X-73, From EXTENDED__ Detailed information on the party's phone number + * @param string|null $contactFaxNo __BT_X-74, From EXTENDED__ Detailed information on the party's fax number + * @param string|null $contactEmailAddress __BT_X-75, From EXTENDED__ Detailed information on the party's email address + * @return ZugferdDocumentBuilder + */ + public function setDocumentPositionUltimateShipToContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery"); + $ultimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getUltimateShipToTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCallIfMethodExists($ultimateShipToTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact); + + return $this; + } + + /** + * Add an additional contact of the Ship-To party on position level. + * + * @param string|null $contactPersonName __BT_X-72, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT_X-72-1, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT_X-73, From EXTENDED__ Detailed information on the party's phone number + * @param string|null $contactFaxNo __BT_X-74, From EXTENDED__ Detailed information on the party's fax number + * @param string|null $contactEmailAddress __BT_X-75, From EXTENDED__ Detailed information on the party's email address + * @return ZugferdDocumentBuilder + */ + public function addDocumentPositionUltimateShipToContact(?string $contactPersonName, ?string $contactDepartmentName, ?string $contactPhoneNo, ?string $contactFaxNo, ?string $contactEmailAddress): ZugferdDocumentBuilder + { + $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery"); + $ultimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getUltimateShipToTradeParty"); + $contact = $this->getObjectHelper()->getTradeContact($contactPersonName, $contactDepartmentName, $contactPhoneNo, $contactFaxNo, $contactEmailAddress); + + $this->getObjectHelper()->tryCall($ultimateShipToTradeParty, "addToDefinedTradeContact", $contact); + + return $this; + } + + /** + * Detailed information on the actual delivery on position level. + * + * @param DateTime|null $date __BT-X-85, From EXTENDED__ Actual delivery 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 position level. + * + * @param string $issuerAssignedId __BT-X-86, From EXTENDED__ Shipping notification number + * @param string|null $lineId __BT-X-87, From EXTENDED__ Shipping notification position + * @param DateTime|null $issueDate __BT-X-88, From EXTENDED__ Date of Shipping notification number + * @return ZugferdDocumentBuilder + */ + public function setDocumentPositionDespatchAdviceReferencedDocument(string $issuerAssignedId, ?string $lineId = null, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery"); + $despatchddvicerefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, $lineId, null, null, null, $issueDate, null); + + $this->getObjectHelper()->tryCall($positiondelivery, "setDespatchAdviceReferencedDocument", $despatchddvicerefdoc); + + return $this; + } + + /** + * Detailed information on the associated goods receipt notification. + * + * @param string $issuerAssignedId __BT-X-89, From EXTENDED__ Goods receipt number + * @param string|null $lineId __BT-X-90, From EXTENDED__ Goods receipt position + * @param DateTime|null $issueDate __BT-X-91, From EXTENDED__ Date of Goods receipt + * @return ZugferdDocumentBuilder + */ + public function setDocumentPositionReceivingAdviceReferencedDocument(string $issuerAssignedId, ?string $lineId = null, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery"); + $receivingadvicerefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, $lineId, null, null, null, $issueDate, null); + + $this->getObjectHelper()->tryCall($positiondelivery, "setReceivingAdviceReferencedDocument", $receivingadvicerefdoc); + + return $this; + } + + /** + * Detailed information on the associated delivery bill on position level. + * + * @param string $issuerAssignedId __BT-X-92, From EXTENDED__ Delivery note number + * @param string|null $lineId __BT-X-93, From EXTENDED__ Delivery note position + * @param DateTime|null $issueDate __BT-X-94, From EXTENDED__ Date of Delivery note + * @return ZugferdDocumentBuilder + */ + public function setDocumentPositionDeliveryNoteReferencedDocument(string $issuerAssignedId, ?string $lineId = null, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery"); + $deliverynoterefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, $lineId, null, null, null, $issueDate, 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 + * @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 (Obsolete) + * @param string|null $exemptionReason __BT-, From __ Reason for tax exemption (free text) (Obsolete) + * @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. (Obsolete) + * @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. 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 it is a surcharge + * @param float|null $calculationPercent __BT-138, 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-137, From EN 16931__ 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 + * @param string|null $reason __BT-139/BT-144, From BASIC__ The reason given in text form for the invoice item discount/surcharge + * @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. + * @return ZugferdDocumentBuilder + */ + public function setDocumentPositionLineSummation(float $lineTotalAmount): ZugferdDocumentBuilder + { + $positionsettlement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeSettlement"); + $summation = $this->getObjectHelper()->getTradeSettlementLineMonetarySummationType($lineTotalAmount); + + $this->getObjectHelper()->tryCall($positionsettlement, "setSpecifiedTradeSettlementLineMonetarySummation", $summation); + + return $this; + } + + /** + * Set information on item totals (with support for EXTENDED profile). + * + * @param float $lineTotalAmount __BT-131, From BASIC__ The total amount of the invoice item + * @param float $chargeTotalAmount __BT-X-327, From EXTENDED__ Total amount of item surcharges + * @param float $allowanceTotalAmount __BT-X-328, From EXTENDED__ Total amount of item discounts + * @param float $taxTotalAmount __BT-X-329, From EXTENDED__ Total amount of item taxes + * @param float $grandTotalAmount __BT-X-330, From EXTENDED__ Total gross amount of the item + * @param float $totalAllowanceChargeAmount __BT-X-98, From EXTENDED__ Total amount of item surcharges and discounts + * @return ZugferdDocumentBuilder + */ + public function setDocumentPositionLineSummationExt(float $lineTotalAmount, ?float $chargeTotalAmount = null, ?float $allowanceTotalAmount = null, ?float $taxTotalAmount = null, ?float $grandTotalAmount = null, ?float $totalAllowanceChargeAmount = null): ZugferdDocumentBuilder + { + $positionsettlement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeSettlement"); + $summation = $this->getObjectHelper()->getTradeSettlementLineMonetarySummationType($lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxTotalAmount, $grandTotalAmount, $totalAllowanceChargeAmount); + + $this->getObjectHelper()->tryCall($positionsettlement, "setSpecifiedTradeSettlementLineMonetarySummation", $summation); + + return $this; + } + + /** + * Add a Reference to the previous invoice (on position level). + * + * To be used if: + * - a previous invoice is corrected + * - reference is made from a final invoice to previous partial invoices + * - reference is made from a final invoice to previous invoices for advance payments. * + * + * @param string $issuerAssignedId __BT-X-331, From EXTENDED__ The identification of an invoice previously sent by the seller + * @param string $lineid __BT-X-540, From EXTENDED__ Identification of the invoice item + * @param string|null $typeCode __BT-X-332, From EXTENDED__ Type of previous invoice (code) + * @param DateTime|null $issueDate __BT-X-333, From EXTENDED__ Date of the previous invoice + * @return ZugferdDocumentBuilder + */ + public function addDocumentPositionInvoiceReferencedDocument(string $issuerAssignedId, string $lineid, ?string $typeCode = null, ?DateTime $issueDate = null): ZugferdDocumentBuilder + { + $positionsettlement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeSettlement"); + $invoicerefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, $lineid, $typeCode, null, null, $issueDate, null); + + $this->getObjectHelper()->tryCall($positionsettlement, "setInvoiceReferencedDocument", $invoicerefdoc); + + return $this; + } + + /** + * Add an additional Document reference on a position (Object detection). + * + * @param string $issuerAssignedId __BT-128, From EN 16931__ 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 __BT-128-0, From EN 16931__ Type of referenced document (See codelist UNTDID 1001) + * @param string|null $refTypeCode __BT-128-1, From EN 16931__ 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. + * @return ZugferdDocumentBuilder + * @deprecated v1.0.110 Please use addDocumentPositionAdditionalReferencedObjDocument instead + */ + public function addDocumentPositionAdditionalReferencedDocumentObj(string $issuerAssignedId, string $typeCode, ?string $refTypeCode = null): ZugferdDocumentBuilder + { + return $this->addDocumentPositionAdditionalReferencedObjDocument($issuerAssignedId, $typeCode, $refTypeCode); + } + + /** + * Add an additional Document reference on a position (Object detection). + * + * @param string $issuerAssignedId __BT-128, From EN 16931__ 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 __BT-128-0, From EN 16931__ Type of referenced document (See codelist UNTDID 1001) + * @param string|null $refTypeCode __BT-128-1, From EN 16931__ 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. + * @return ZugferdDocumentBuilder + */ + public function addDocumentPositionAdditionalReferencedObjDocument(string $issuerAssignedId, string $typeCode, ?string $refTypeCode = null): ZugferdDocumentBuilder + { + $positionsettlement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeSettlement"); + $addrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerAssignedId, null, null, $typeCode, null, $refTypeCode, null, null); + + $this->getObjectHelper()->tryCallAll($positionsettlement, ["addToAdditionalReferencedDocument", "setAdditionalReferencedDocument"], $addrefdoc); + + return $this; + } + + /** + * Add an AccountingAccount on position level. + * + * @param string $id __BT-133, From EN 16931__ Posting reference of the byuer. If required, this reference shall be provided by the Buyer to the Seller prior to the issuing of the Invoice. + * @param string|null $typeCode __BT-X-99, From EXTENDED__ Type of the posting reference. Allowed values: 1 = Financial, 2 = Subsidiary, 3 = Budget, 4 = Cost Accounting, 5 = Payable, 6 = Job Cost Accounting + * @return ZugferdDocumentBuilder + */ + public function addDocumentPositionReceivableSpecifiedTradeAccountingAccount(string $id, ?string $typeCode = null): ZugferdDocumentBuilder + { + $positionsettlement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeSettlement"); + $account = $this->getObjectHelper()->getTradeAccountingAccountType($id, $typeCode); + + $this->getObjectHelper()->tryCallAll($positionsettlement, ["addToReceivableSpecifiedTradeAccountingAccount", "setReceivableSpecifiedTradeAccountingAccount"], $account); + + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdDocumentJsonExporter.php b/vendor/horstoeko/zugferd/src/ZugferdDocumentJsonExporter.php new file mode 100644 index 000000000..a8e4ae256 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdDocumentJsonExporter.php @@ -0,0 +1,72 @@ + + * @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; + + /** + * Constructor + * + * @param ZugferdDocument $document + */ + 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 + { + return json_decode($this->toJsonString()); + } + + /** + * Returns the invoice object as a pretty printed json string + * + * @return string|boolean + */ + public function toPrettyJsonString() + { + return json_encode($this->toJsonObject(), JSON_PRETTY_PRINT); + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfBuilder.php b/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfBuilder.php new file mode 100644 index 000000000..88c1417e0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfBuilder.php @@ -0,0 +1,112 @@ + + * @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; + + /** + * 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 ZugferdFileNotFoundException($pdfFileName); + } + + 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->getContent(); + + return $this->xmlDataCache; + } + + /** + * @inheritDoc + */ + protected function getXmlAttachmentFilename(): string + { + return $this->documentBuilder->getProfileDefinitionParameter('attachmentfilename'); + } + + /** + * @inheritDoc + */ + protected function getXmlAttachmentXmpName(): string + { + return $this->documentBuilder->getProfileDefinitionParameter("xmpname"); + } + + /** + * @inheritDoc + */ + protected function getXmlAttachmentXmpVersion(): string + { + return $this->documentBuilder->getProfileDefinitionParameter("xmpversion"); + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfBuilderAbstract.php b/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfBuilderAbstract.php new file mode 100644 index 000000000..2d7337499 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfBuilderAbstract.php @@ -0,0 +1,788 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +abstract class ZugferdDocumentPdfBuilderAbstract +{ + /** + * Constants for Relationship types + * 'Data', 'Alternative', 'Source', 'Supplement', 'Unspecified' + */ + public const AF_RELATIONSHIP_DATA = "Data"; + + public const AF_RELATIONSHIP_ALTERNATIVE = "Alternative"; + + public const AF_RELATIONSHIP_SOURCE = "Source"; + + public const AF_RELATIONSHIP_SUPPLEMENT = "Supplement"; + + public const AF_RELATIONSHIP_UNSPECIFIED = "Unspecified"; + + /** + * Additional creator tool (e.g. the ERP software that called the PHP library) + * + * @var string + */ + private $additionalCreatorTool = ""; + + /** + * The relationship type to use for the XML attachment. Detault is Data + * + * @var string + */ + private $attachmentRelationshipType = 'Data'; + + /** + * Instance of the pdfwriter + * + * @var ZugferdPdfWriter + */ + private $pdfWriter; + + /** + * Contains the data of the original PDF document + * + * @var string + */ + private $pdfData = ""; + + /** + * List of files which should be additionally attached to PDF + * + * @var array + */ + private $additionalFilesToAttach = []; + + /** + * User-defined template for the author-metainformation + * + * @var string + */ + private $authorTemplate = ""; + + /** + * User-defined template for the keyword-metainformation + * + * @var string + */ + private $keywordTemplate = ""; + + /** + * User-defined template for the title-metainformation + * + * @var string + */ + private $titleTemplate = ""; + + /** + * User-defined template for the subject-metainformation + * + * @var string + */ + private $subjectTemplate = ""; + + /** + * User-defined callback function for all metainformation + * + * @var callable|null + */ + private $metaInformationCallback; + + /** + * Internal flag which indicate, that attachment pane should be opened + * + * @var boolean + */ + private $attachmentPaneVisibility = true; + + /** + * 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 static + */ + public function generateDocument() + { + $this->startCreatePdf(); + + return $this; + } + + /** + * Saves the generated PDF document to a file + * + * @param string $toFilename The full qualified filename to which the generated PDF (with attachment)is stored + * @return static + */ + public function saveDocument(string $toFilename) + { + $this->pdfWriter->Output('F', $toFilename); + + return $this; + } + + /** + * Starts a HTTP download of the generated PDF document + * + * @param string $toFilename + * @return string + */ + public function saveDocumentInline(string $toFilename): string + { + return $this->pdfWriter->Output('I', $toFilename); + } + + /** + * Returns the content of the generared PDF as a string + * + * @return string + */ + public function downloadString(): string + { + return $this->pdfWriter->Output('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 static + */ + 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; + } + + /** + * Set the type of relationship for the XML attachment. Allowed + * types are 'Data', 'Alternative' and 'Source' + * + * @param string $relationshipType Type of relationship + * @return static + */ + public function setAttachmentRelationshipType(string $relationshipType) + { + if (!in_array($relationshipType, [static::AF_RELATIONSHIP_DATA, static::AF_RELATIONSHIP_ALTERNATIVE, static::AF_RELATIONSHIP_SOURCE])) { + $relationshipType = static::AF_RELATIONSHIP_DATA; + } + + $this->attachmentRelationshipType = $relationshipType; + + return $this; + } + + /** + * Returns the relationship type for the XML attachment. This + * can return 'Data', 'Alternative' + * + * @return string + */ + public function getAttachmentRelationshipType(): string + { + return $this->attachmentRelationshipType; + } + + /** + * Set the type of relationship for the XML attachment to "Data" + * + * @return static + */ + public function setAttachmentRelationshipTypeToData() + { + return $this->setAttachmentRelationshipType(static::AF_RELATIONSHIP_DATA); + } + + /** + * Set the type of relationship for the XML attachment to "Alternative" + * + * @return static + */ + public function setAttachmentRelationshipTypeToAlternative() + { + return $this->setAttachmentRelationshipType(static::AF_RELATIONSHIP_ALTERNATIVE); + } + + /** + * Set the type of relationship for the XML attachment to "Source" + * + * @return static + */ + public function setAttachmentRelationshipTypeToSource() + { + return $this->setAttachmentRelationshipType(static::AF_RELATIONSHIP_SOURCE); + } + + /** + * Attach an additional file to PDF. The file that is specified in $fullFilename + * must exists + * + * @param string $fullFilename + * @param string $displayName + * @param string $relationshipType + * @return static + * @throws ZugferdInvalidArgumentException + * @throws ZugferdFileNotFoundException + * @throws ZugferdFileNotReadableException + * @throws ZugferdUnknownMimetype + */ + public function attachAdditionalFileByRealFile(string $fullFilename, string $displayName = "", string $relationshipType = "") + { + // Checks that the file really exists + + if ($fullFilename === '') { + throw new ZugferdInvalidArgumentException("You must specify a filename for the content to attach"); + } + + if (!file_exists($fullFilename)) { + throw new ZugferdFileNotFoundException($fullFilename); + } + + // Load content + + $content = file_get_contents($fullFilename); + + if ($content === false) { + throw new ZugferdFileNotReadableException($fullFilename); + } + + // Add attachment + + $this->attachAdditionalFileByContent( + $content, + $fullFilename, + $displayName, + $relationshipType, + ); + + return $this; + } + + /** + * Attach an additional file to PDF by a content string + * + * @param string $content + * @param string $filename + * @param string $displayName + * @param string $relationshipType + * @return static + * @throws ZugferdInvalidArgumentException + * @throws ZugferdUnknownMimetype + */ + public function attachAdditionalFileByContent(string $content, string $filename, string $displayName = "", string $relationshipType = "") + { + // Check content. The content must not be empty + + if ($content === '') { + throw new ZugferdInvalidArgumentException("You must specify a content to attach"); + } + + // Check filename. The filename must not be empty + + if ($filename === '') { + throw new ZugferdInvalidArgumentException("You must specify a filename for the content to attach"); + } + + // Mimetype for the file must exist + + $mimeType = (new MimeDb())->findFirstMimeTypeByExtension(FileUtils::getFileExtension($filename)); + + if (is_null($mimeType)) { + throw new ZugferdUnknownMimetype(); + } + + // Sanatize relationship type + + if ($relationshipType === '') { + $relationshipType = static::AF_RELATIONSHIP_SUPPLEMENT; + } + + if (!in_array($relationshipType, [static::AF_RELATIONSHIP_DATA, static::AF_RELATIONSHIP_ALTERNATIVE, static::AF_RELATIONSHIP_SOURCE, static::AF_RELATIONSHIP_SUPPLEMENT, static::AF_RELATIONSHIP_UNSPECIFIED])) { + $relationshipType = static::AF_RELATIONSHIP_SUPPLEMENT; + } + + // Sanatize displayname + + if ($displayName === '') { + $displayName = FileUtils::getFilenameWithExtension($filename); + } + + // Add to attachment list + + $this->additionalFilesToAttach[] = [ + PdfStreamReader::createByString($content), + FileUtils::getFilenameWithExtension($filename), + $displayName, + $relationshipType, + str_replace('/', '#2F', $mimeType) + ]; + + return $this; + } + + /** + * Set the the deterministic mode. This mode should only be used + * for testing purposes + * + * @param bool $deterministicModeEnabled + * @return static + */ + public function setDeterministicModeEnabled(bool $deterministicModeEnabled) + { + $this->pdfWriter->setDeterministicModeEnabled($deterministicModeEnabled); + + return $this; + } + + /** + * Set the template for the author meta information + * + * @param string $authorTemplate + * @return static + */ + public function setAuthorTemplate(string $authorTemplate) + { + $this->authorTemplate = $authorTemplate; + + return $this; + } + + /** + * Set the template for the keyword meta information + * + * @param string $keywordTemplate + * @return static + */ + public function setKeywordTemplate(string $keywordTemplate) + { + $this->keywordTemplate = $keywordTemplate; + + return $this; + } + + /** + * Set the template for the title meta information + * + * @param string $titleTemplate + * @return static + */ + public function setTitleTemplate(string $titleTemplate) + { + $this->titleTemplate = $titleTemplate; + + return $this; + } + + /** + * Set the template for the subject meta information + * + * @param string $subjectTemplate + * @return static + */ + public function setSubjectTemplate(string $subjectTemplate) + { + $this->subjectTemplate = $subjectTemplate; + + return $this; + } + + /** + * Set the user defined callback for generating custom meta information + * + * @param callable|null $callback + * @return static + */ + public function setMetaInformationCallback(?callable $callback = null) + { + $this->metaInformationCallback = is_callable($callback) ? $callback : null; + + return $this; + } + + /** + * Sets the flag that indicates, that the attachment pane should be visible on start (True) + * or hidden (False) + * + * @param boolean $attachmentPaneVisibility Flag that indicates, that the attachment pane should be visible or hidden + * @return static + */ + public function setAttachmentPaneVisibility(bool $attachmentPaneVisibility) + { + $this->attachmentPaneVisibility = $attachmentPaneVisibility; + + return $this; + } + + /** + * Returns true if the attachment pane is visible, otherwise false + * + * @return boolean + */ + public function getAttachmentPaneIsVisible(): bool + { + return $this->attachmentPaneVisibility; + } + + /** + * Show attachment pane on startup + * + * @return static + */ + public function showAttachmentPane() + { + $this->setAttachmentPaneVisibility(true); + + return $this; + } + + /** + * Hide attachment pane on startup + * + * @return static + */ + public function hideAttachmentPane() + { + $this->setAttachmentPaneVisibility(false); + + return $this; + } + + /** + * 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; + + /** + * Get the XMP version for the XML to attach + * + * @return string + */ + abstract protected function getXmlAttachmentXmpVersion(): string; + + /** + * Internal function which sets up the PDF + * + * @return void + */ + private function startCreatePdf(): void + { + // Get PDF data + + $pdfDataRef = null; + + if ($this->isFile($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', + $this->getAttachmentRelationshipType(), + 'text#2Fxml' + ); + + // Add additional attachments + + foreach ($this->additionalFilesToAttach as $fileToAttach) { + $this->pdfWriter->attach( + $fileToAttach[0], + $fileToAttach[1], + $fileToAttach[2], + $fileToAttach[3], + $fileToAttach[4], + ); + } + + // Set flag to always show the attachment pane + + if ($this->getAttachmentPaneIsVisible() === true) { + $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', true, true); + $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 + { + $pdfCreatorToolInfos = $this->getCreatorToolName(); + + $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)->{'Version'} = strtoupper($this->getXmlAttachmentXmpVersion()); + $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'} = $pdfCreatorToolInfos; + $xmpNodes->{'CreateDate'} = $pdfMetadataInfos['createdDate']; + $xmpNodes->{'ModifyDate'} = $pdfMetadataInfos['modifiedDate']; + + $this->pdfWriter->addMetadataDescriptionNode($descXmp->asXML()); + + $this->pdfWriter->SetAuthor($pdfMetadataInfos['author'], true); + $this->pdfWriter->SetKeywords($pdfMetadataInfos['keywords'], true); + $this->pdfWriter->SetTitle($pdfMetadataInfos['title'], true); + $this->pdfWriter->SetSubject($pdfMetadataInfos['subject'], true); + $this->pdfWriter->SetCreator($pdfCreatorToolInfos, true); + } + + /** + * 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'])); + + $author = $invoiceInformations['seller']; + $keywords = sprintf('%s, FacturX/ZUGFeRD', $invoiceInformations['docTypeName']); + $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']); + + return [ + 'author' => $this->buildMetadataField('author', $author, $invoiceInformations), + 'keywords' => $this->buildMetadataField('keywords', $keywords, $invoiceInformations), + 'title' => $this->buildMetadataField('title', $title, $invoiceInformations), + 'subject' => $this->buildMetadataField('subject', $subject, $invoiceInformations), + 'createdDate' => $invoiceInformations['date'], + 'modifiedDate' => (new DateTime())->format('Y-m-d\TH:i:sP'), + ]; + } + + /** + * 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 = (new DateTime())->setTimestamp(strtotime($date))->format('Y-m-d\TH:i:sP'); + + $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; + } + + return [ + 'invoiceId' => $invoiceId, + 'docTypeName' => $docTypeName, + 'seller' => $sellerName, + 'date' => $dateReformatted, + ]; + } + + /** + * Returns true if the submittet parameter $pdfData is a valid file. + * Otherwise it will return false + * + * @param string $pdfData + * @return boolean + */ + protected function isFile($pdfData): bool + { + try { + return @is_file($pdfData); + } catch (Throwable $throwable) { + return false; + } + } + + /** + * Returns the parsed meta-field content + * + * @param string $which + * @param string $default + * @param array $invoiceInformation + * @return string + */ + private function buildMetadataField(string $which, string $default, array $invoiceInformation): string + { + $xmlContent = $this->getXmlContent(); + + if (is_callable($this->metaInformationCallback)) { + $callbackResult = call_user_func($this->metaInformationCallback, $which, $xmlContent, $invoiceInformation, $default); + if (!StringUtils::stringIsNullOrEmpty($callbackResult)) { + return $callbackResult; + } + } + + $templates = [ + 'author' => $this->authorTemplate, + 'keywords' => $this->keywordTemplate, + 'title' => $this->titleTemplate, + 'subject' => $this->subjectTemplate, + ]; + + if (!isset($templates[$which])) { + return $default; + } + + if (StringUtils::stringIsNullOrEmpty($templates[$which])) { + return $default; + } + + return sprintf( + $templates[$which], + $invoiceInformation['invoiceId'], + $invoiceInformation['docTypeName'], + $invoiceInformation['seller'], + $invoiceInformation['date'] + ); + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfMerger.php b/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfMerger.php new file mode 100644 index 000000000..ddaddb684 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfMerger.php @@ -0,0 +1,158 @@ + + * @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($this->xmlDataOrFilename); + } + } 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"); + } + + /** + * @inheritDoc + */ + protected function getXmlAttachmentXmpVersion(): string + { + return $this->getProfileDefinitionParameter("xmpversion"); + } + + /** + * Returns true if the submitted $xmlDataOrFilename is a valid file. + * Otherwise it will return false + * + * @return boolean + */ + protected function xmlDataIsFile(): bool + { + try { + return @is_file($this->xmlDataOrFilename); + } catch (Throwable $throwable) { + return false; + } + } + + /** + * Guess the profile type of the readden xml document + * + * @return array + * @throws ZugferdFileNotReadableException + * @throws ZugferdUnknownXmlContentException + * @throws ZugferdUnknownProfileException + */ + private function getProfileDefinition(): array + { + return ZugferdProfileResolver::resolveProfileDef($this->getXmlContent()); + } + + /** + * Get a parameter from profile definition + * + * @param string $parameterName + * @return mixed + * @throws ZugferdFileNotReadableException + * @throws ZugferdUnknownXmlContentException + * @throws ZugferdUnknownProfileException + * @throws ZugferdUnknownProfileParameterException + */ + private function getProfileDefinitionParameter(string $parameterName) + { + $profileDefinition = $this->getProfileDefinition(); + + if (isset($profileDefinition[$parameterName])) { + return $profileDefinition[$parameterName]; + } + + throw new ZugferdUnknownProfileParameterException($parameterName); + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfReader.php b/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfReader.php new file mode 100644 index 000000000..a0f3dd62d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfReader.php @@ -0,0 +1,96 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdDocumentPdfReader +{ + /** + * Tries to load a PDF file (ZUGFeRD/Factur-X) and return a ZugferdDocumentReader + * + * @param string $pdfFilename + * @return ZugferdDocumentReader + * @throws Exception + * @throws RuntimeException + * @throws ZugferdFileNotFoundException + * @throws ZugferdFileNotReadableException + * @throws ZugferdNoPdfAttachmentFoundException + * @throws ZugferdUnknownProfileException + * @throws ZugferdUnknownProfileParameterException + * @throws ZugferdUnknownXmlContentException + */ + public static function readAndGuessFromFile(string $pdfFilename): ZugferdDocumentReader + { + return ZugferdDocumentPdfReaderExt::readAndGuessFromFile($pdfFilename); + } + + /** + * Tries to load an attachment content from PDF and return a ZugferdDocumentReader + * + * @param string $pdfContent + * @return ZugferdDocumentReader + * @throws Exception + * @throws RuntimeException + * @throws ZugferdNoPdfAttachmentFoundException + * @throws ZugferdUnknownProfileException + * @throws ZugferdUnknownProfileParameterException + * @throws ZugferdUnknownXmlContentException + */ + public static function readAndGuessFromContent(string $pdfContent): ZugferdDocumentReader + { + return ZugferdDocumentPdfReaderExt::readAndGuessFromContent($pdfContent); + } + + /** + * Returns a XML content from a PDF file + * + * @param string $pdfFilename + * @return string + * @throws Exception + * @throws ZugferdFileNotFoundException + * @throws ZugferdFileNotReadableException + * @throws ZugferdNoPdfAttachmentFoundException + */ + public static function getXmlFromFile(string $pdfFilename): string + { + return ZugferdDocumentPdfReaderExt::getInvoiceDocumentContentFromFile($pdfFilename); + } + + /** + * Returns a XML content from a PDF binary stream (string) + * + * @param string $pdfContent + * @return string + * @throws Exception + * @throws ZugferdNoPdfAttachmentFoundException + */ + public static function getXmlFromContent(string $pdfContent): string + { + return ZugferdDocumentPdfReaderExt::getInvoiceDocumentContentFromContent($pdfContent); + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfReaderExt.php b/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfReaderExt.php new file mode 100644 index 000000000..49c920039 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfReaderExt.php @@ -0,0 +1,319 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdDocumentPdfReaderExt +{ + /** + * List of filenames which are possible for an attached XML-Invoice-Document in PDF + */ + public const ATTACHMENT_FILENAMES = [ + 'ZUGFeRD-invoice.xml'/*1.0*/, + 'zugferd-invoice.xml'/*2.0*/, + 'factur-x.xml'/*2.1*/, + 'xrechnung.xml' + ]; + + /** + * Identifier for a XML-Invoice-Docuemnt + */ + private const ATTACHMENT_TYPE_XMLINVOICE = 0; + + /** + * Identifier for an additional document + */ + private const ATTACHMENT_TYPE_ADDITIONAL = 1; + + /** + * Key of the type element in the internal attachment list + */ + public const ATTACHMENT_KEY_TYPE = 'type'; + + /** + * Key of the content element in the internal attachment list + */ + public const ATTACHMENT_KEY_CONTENT = 'content'; + + /** + * Key of the filename element in the internal attachment list + */ + public const ATTACHMENT_KEY_FILENAME = 'filename'; + + /** + * Key of the filename element in the internal attachment list + */ + public const ATTACHMENT_KEY_MIMETYPE = 'mimetype'; + + /** + * Array containing all the attached files found in PDF + * + * @var array + */ + private $attachmentContentList = []; + + /** + * (Hidden) Constructor + */ + final protected function __construct() + { + } + + /** + * Load a PDF file + * + * @param string $pdfFilename Contains a full-qualified filename which must exist and must be readable + * @return ZugferdDocumentPdfReaderExt + * @throws ZugferdFileNotFoundException + * @throws ZugferdFileNotReadableException + * @throws Exception + */ + public static function fromFile(string $pdfFilename): ZugferdDocumentPdfReaderExt + { + if (!file_exists($pdfFilename)) { + throw new ZugferdFileNotFoundException($pdfFilename); + } + + $pdfContent = file_get_contents($pdfFilename); + + if ($pdfContent === false) { + throw new ZugferdFileNotReadableException($pdfFilename); + } + + return static::fromContent($pdfContent); + } + + /** + * Load a PDF content string + * + * @param string $pdfContent Contains the raw data of a PDF + * @return ZugferdDocumentPdfReaderExt + * @throws Exception + */ + public static function fromContent(string $pdfContent): ZugferdDocumentPdfReaderExt + { + return (new ZugferdDocumentPdfReaderExt())->collectAttachmentsFromPdfContent($pdfContent); + } + + /** + * Load a PDF file and return a ZugferDocumentReader-Instance + * + * @param string $pdfFilename Contains a full-qualified filename which must exist and must be readable + * @throws Exception + * @throws RuntimeException + * @return ZugferdDocumentReader + * @throws ZugferdFileNotFoundException + * @throws ZugferdFileNotReadableException + * @throws ZugferdNoPdfAttachmentFoundException + * @throws ZugferdUnknownProfileException + * @throws ZugferdUnknownProfileParameterException + * @throws ZugferdUnknownXmlContentException + * @see \horstoeko\zugferd\ZugferdDocumentPdfReader::readAndGuessFromFile() For a similar purpose in another context. + */ + public static function readAndGuessFromFile(string $pdfFilename): ZugferdDocumentReader + { + return static::fromFile($pdfFilename)->resolveInvoiceDocumentReader(); + } + + /** + * Load a PDF content and return a ZugferDocumentReader-Instance + * + * @param string $pdfContent Contains the raw data of a PDF + * @throws Exception + * @throws RuntimeException + * @return ZugferdDocumentReader + * @throws ZugferdNoPdfAttachmentFoundException + * @throws ZugferdUnknownXmlContentException + * @throws ZugferdUnknownProfileException + * @throws ZugferdUnknownProfileParameterException + * @see \horstoeko\zugferd\ZugferdDocumentPdfReader::readAndGuessFromContent() For a similar purpose in another context. + */ + public static function readAndGuessFromContent(string $pdfContent): ZugferdDocumentReader + { + return static::fromContent($pdfContent)->resolveInvoiceDocumentReader(); + } + + /** + * Returns a invoice document XML content from a PDF file + * similar to ZugferdDocumentPdfReader::getXmlFromContent + * + * @param string $pdfFilename Contains a full-qualified filename which must exist and must be readable + * @return string + * @throws ZugferdFileNotFoundException + * @throws ZugferdFileNotReadableException + * @throws Exception + * @throws ZugferdNoPdfAttachmentFoundException + * @see \horstoeko\zugferd\ZugferdDocumentPdfReader::getXmlFromFile() For a similar purpose in another context. + */ + public static function getInvoiceDocumentContentFromFile(string $pdfFilename): string + { + return static::fromFile($pdfFilename)->resolveInvoiceDocumentContent(); + } + + /** + * Returns a invoice document XML content from a PDF content string + * + * @param string $pdfContent Contains the raw data of a PDF + * @return string + * @throws Exception + * @throws ZugferdNoPdfAttachmentFoundException + * @see \horstoeko\zugferd\ZugferdDocumentPdfReader::getXmlFromContent() For a similar purpose in another context. + */ + public static function getInvoiceDocumentContentFromContent(string $pdfContent): string + { + return static::fromContent($pdfContent)->resolveInvoiceDocumentContent(); + } + + /** + * Returns all additional documents (except the invoice document) from a PDF file + * + * @param string $pdfFilename Contains a full-qualified filename which must exist and must be readable + * @return array + * @throws ZugferdFileNotFoundException + * @throws ZugferdFileNotReadableException + * @throws Exception + */ + public static function getAdditionalDocumentContentsFromFile(string $pdfFilename): array + { + return static::fromFile($pdfFilename)->resolveAdditionalDocumentContents(); + } + + /** + * Returns all additional documents (except the invoice document) from a PDF content string + * + * @param string $pdfContent Contains the raw data of a PDF + * @return array + * @throws Exception + */ + public static function getAdditionalDocumentContentsFromContent(string $pdfContent): array + { + return static::fromContent($pdfContent)->resolveAdditionalDocumentContents(); + } + + /** + * Returns an instance of ZugferdDocumentReader by a valid invoice attachment + * + * @return ZugferdDocumentReader + * @throws ZugferdNoPdfAttachmentFoundException + * @throws ZugferdUnknownXmlContentException + * @throws ZugferdUnknownProfileException + * @throws ZugferdUnknownProfileParameterException + * @throws RuntimeException + */ + public function resolveInvoiceDocumentReader(): ZugferdDocumentReader + { + return ZugferdDocumentReader::readAndGuessFromContent($this->resolveInvoiceDocumentContent()); + } + + /** + * Returns the content as string if a valid invoice attachment was found, otherwise + * an exception will be raised + * + * @return string + * @throws ZugferdNoPdfAttachmentFoundException + */ + public function resolveInvoiceDocumentContent(): string + { + $invoiceContent = + array_values( + array_filter( + $this->attachmentContentList, + function ($attachmentContentItem) { + return $attachmentContentItem[ZugferdDocumentPdfReaderExt::ATTACHMENT_KEY_TYPE] === ZugferdDocumentPdfReaderExt::ATTACHMENT_TYPE_XMLINVOICE; + } + ) + ); + + if ($invoiceContent === []) { + throw new ZugferdNoPdfAttachmentFoundException(); + } + + return $invoiceContent[0][ZugferdDocumentPdfReaderExt::ATTACHMENT_KEY_CONTENT]; + } + + /** + * Returns a list of all additional attached documents except the invoice document + * + * @return array + */ + public function resolveAdditionalDocumentContents(): array + { + return + array_values( + array_filter( + $this->attachmentContentList, + function ($attachmentContentItem) { + return $attachmentContentItem[ZugferdDocumentPdfReaderExt::ATTACHMENT_KEY_TYPE] === ZugferdDocumentPdfReaderExt::ATTACHMENT_TYPE_ADDITIONAL; + } + ) + ); + } + + /** + * Get a list of all the attachments. + * + * @param string $pdfContent Contains the raw data of a PDF + * @return ZugferdDocumentPdfReaderExt + * @throws Exception + */ + protected function collectAttachmentsFromPdfContent(string $pdfContent): ZugferdDocumentPdfReaderExt + { + $this->attachmentContentList = []; + + $pdfParser = new PdfParser(); + $pdfParsed = $pdfParser->parseContent($pdfContent); + $fileSpecs = $pdfParsed->getObjectsByType('Filespec'); + + $fileSpecs = array_filter( + $fileSpecs, + function ($fileSpec) { + return $fileSpec->has('F') && $fileSpec->has('EF'); + } + ); + + $fileSpecs = array_filter( + $fileSpecs, + function ($fileSpec) { + return $fileSpec->get('EF')->has('F'); + } + ); + + foreach ($fileSpecs as $fileSpec) { + $this->attachmentContentList[] = [ + ZugferdDocumentPdfReaderExt::ATTACHMENT_KEY_TYPE => in_array($fileSpec->get('F')->getContent(), ZugferdDocumentPdfReaderExt::ATTACHMENT_FILENAMES) ? ZugferdDocumentPdfReaderExt::ATTACHMENT_TYPE_XMLINVOICE : ZugferdDocumentPdfReaderExt::ATTACHMENT_TYPE_ADDITIONAL, + ZugferdDocumentPdfReaderExt::ATTACHMENT_KEY_CONTENT => $fileSpec->get('EF')->get('F')->getContent(), + ZugferdDocumentPdfReaderExt::ATTACHMENT_KEY_FILENAME => $fileSpec->get('F')->getContent(), + ZugferdDocumentPdfReaderExt::ATTACHMENT_KEY_MIMETYPE => $fileSpec->get('EF')->get('F')->has('Subtype') ? (string)($fileSpec->get('EF')->get('F')->get('Subtype')->getContent()) : "", + ]; + } + + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdDocumentProfileConverter.php b/vendor/horstoeko/zugferd/src/ZugferdDocumentProfileConverter.php new file mode 100644 index 000000000..30083de1e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdDocumentProfileConverter.php @@ -0,0 +1,291 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdDocumentProfileConverter extends ZugferdDocument +{ + /** + * The source + * + * @var string + */ + protected $convertFromContent = ""; + + /** + * The new profile ID + * + * @var int + */ + protected $convertToProfileId = -1; + + /** + * Path to the profile id + */ + protected const PATH_1 = 'getExchangedDocumentContext.getGuidelineSpecifiedDocumentContextParameter.setID'; + + /** + * Path to the context parameter + */ + protected const PATH_2 = 'getExchangedDocumentContext.setBusinessProcessSpecifiedDocumentContextParameter'; + + /** + * Path to the context parameter id + */ + protected const PATH_3 = 'getExchangedDocumentContext.getBusinessProcessSpecifiedDocumentContextParameter.setID'; + + /** + * Convert from file to file + * + * @param string $fromFilename + * @param string $toFile + * @param int $newProfileId + * @return void + * @throws InvalidArgumentException + * @throws RuntimeException + * @throws ZugferdFileNotFoundException + * @throws ZugferdFileNotReadableException + * @throws ZugferdUnknownProfileException + * @throws ZugferdUnknownProfileIdException + * @throws ZugferdUnknownProfileParameterException + * @throws ZugferdUnknownXmlContentException + */ + public static function convertFromFileToFile(string $fromFilename, string $toFile, int $newProfileId): void + { + static::convertFromFile($fromFilename, $newProfileId)->convertToFile($toFile); + } + + /** + * Convert from file to string + * + * @param string $fromFilename + * @param int $newProfileId + * @return string + * @throws InvalidArgumentException + * @throws RuntimeException + * @throws ZugferdFileNotFoundException + * @throws ZugferdFileNotReadableException + * @throws ZugferdUnknownProfileException + * @throws ZugferdUnknownProfileIdException + * @throws ZugferdUnknownProfileParameterException + * @throws ZugferdUnknownXmlContentException + */ + public static function convertFromFileToString(string $fromFilename, int $newProfileId): string + { + return static::convertFromFile($fromFilename, $newProfileId)->convertToString(); + } + + /** + * Convert from content to file + * + * @param string $fromContent + * @param string $toFile + * @param int $newProfileId + * @return void + * @throws InvalidArgumentException + * @throws RuntimeException + * @throws ZugferdUnknownProfileException + * @throws ZugferdUnknownProfileIdException + * @throws ZugferdUnknownProfileParameterException + * @throws ZugferdUnknownXmlContentException + */ + public static function convertFromContentToFile(string $fromContent, string $toFile, int $newProfileId): void + { + static::convertFromContent($fromContent, $newProfileId)->convertToFile($toFile); + } + + /** + * Convert from content to string + * + * @param string $fromContent + * @param int $newProfileId + * @return string + * @throws InvalidArgumentException + * @throws RuntimeException + * @throws ZugferdUnknownProfileException + * @throws ZugferdUnknownProfileIdException + * @throws ZugferdUnknownProfileParameterException + * @throws ZugferdUnknownXmlContentException + */ + public static function convertFromContentToString(string $fromContent, int $newProfileId): string + { + return static::convertFromContent($fromContent, $newProfileId)->convertToString(); + } + + /** + * Create an instance by filename + * + * @param string $fromFilename + * @param int $newProfileId + * @return ZugferdDocumentProfileConverter + * @throws ZugferdFileNotFoundException + * @throws ZugferdFileNotReadableException + * @throws ZugferdUnknownXmlContentException + * @throws ZugferdUnknownProfileException + */ + protected static function convertFromFile(string $fromFilename, int $newProfileId): ZugferdDocumentProfileConverter + { + if (!file_exists($fromFilename)) { + throw new ZugferdFileNotFoundException($fromFilename); + } + + $fromContent = file_get_contents($fromFilename); + + if ($fromContent === false) { + throw new ZugferdFileNotReadableException($fromFilename); + } + + return static::convertFromContent($fromContent, $newProfileId); + } + + /** + * Create an instance by cpntent + * + * @param string $fromContent + * @param int $newProfileId + * @return ZugferdDocumentProfileConverter + * @throws ZugferdUnknownXmlContentException + * @throws ZugferdUnknownProfileException + */ + protected static function convertFromContent(string $fromContent, int $newProfileId): ZugferdDocumentProfileConverter + { + $fromProfileId = ZugferdProfileResolver::resolveProfileId($fromContent); + + $profileConverter = new static($fromProfileId); + $profileConverter->setConvertFromContent($fromContent); + $profileConverter->setConvertToProfileId($newProfileId); + + return $profileConverter; + } + + /** + * Set the destination (the new) profile id + * + * @param int $toProfileId + * @return ZugferdDocumentProfileConverter + */ + protected function setConvertToProfileId(int $toProfileId): ZugferdDocumentProfileConverter + { + $this->convertToProfileId = $toProfileId; + + return $this; + } + + /** + * Set the source-content + * + * @param string $fromContent + * @return ZugferdDocumentProfileConverter + */ + protected function setConvertFromContent(string $fromContent): ZugferdDocumentProfileConverter + { + $this->convertFromContent = $fromContent; + + return $this; + } + + /** + * Convert and save to file + * + * @param string $toFile + * @return ZugferdDocumentProfileConverter + * @throws InvalidArgumentException + * @throws RuntimeException + * @throws ZugferdUnknownProfileIdException + * @throws ZugferdUnknownProfileParameterException + */ + protected function convertToFile(string $toFile): ZugferdDocumentProfileConverter + { + file_put_contents($toFile, $this->performConversion()->convertToString()); + + return $this; + } + + /** + * Convert and get xml content as string + * + * @return string + * @throws InvalidArgumentException + * @throws RuntimeException + * @throws ZugferdUnknownProfileIdException + * @throws ZugferdUnknownProfileParameterException + */ + protected function convertToString(): string + { + return $this->performConversion()->serializeAsXml(); + } + + /** + * Internal conversion method + * + * @return ZugferdDocumentProfileConverter + * @throws InvalidArgumentException + * @throws RuntimeException + * @throws ZugferdUnknownProfileIdException + * @throws ZugferdUnknownProfileParameterException + */ + protected function performConversion(): ZugferdDocumentProfileConverter + { + $this->initProfile($this->convertToProfileId); + $this->initObjectHelper(); + $this->initSerialzer(); + $this->deserialize($this->convertFromContent); + $this->updateProfileInInvoiceObject(); + + return $this; + } + + /** + * Update profile parameters in the internal invoice object + * + * @return void + * @throws ZugferdUnknownProfileIdException + */ + protected function updateProfileInInvoiceObject() + { + $profileDef = ZugferdProfileResolver::resolveProfileDefById($this->convertToProfileId); + + $this->getObjectHelper()->tryCallByPath( + $this->getInvoiceObject(), + static::PATH_1, + $this->getObjectHelper()->getIdType($profileDef['contextparameter']) + ); + + if ($profileDef['businessprocess']) { + $this->getObjectHelper()->tryCallByPath( + $this->getInvoiceObject(), + static::PATH_2, + $this->getObjectHelper()->createClassInstance('ram\DocumentContextParameterType') + ); + $this->getObjectHelper()->tryCallByPath( + $this->getInvoiceObject(), + static::PATH_3, + $this->getObjectHelper()->getIdType($profileDef['businessprocess']) + ); + } + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdDocumentReader.php b/vendor/horstoeko/zugferd/src/ZugferdDocumentReader.php new file mode 100644 index 000000000..e10c626f1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdDocumentReader.php @@ -0,0 +1,4201 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdDocumentReader extends ZugferdDocument +{ + /** + * Internal pointer for documents additional documents + * + * @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 documents invoice reference documents + * + * @var integer + */ + private $documentInvRefDocPointer = 0; + + /** + * Internal pointer for documents trade accounting accounts + * + * @var integer + */ + private $documentTradeAccountingAccountPointer = 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 position's additional referenced document (Object reference) + * + * @var integer + */ + private $positionAddRefObjDocPointer = 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. + * + * @param string $xmlFilename + * @return ZugferdDocumentReader + * @throws ZugferdFileNotFoundException + * @throws ZugferdFileNotReadableException + * @throws ZugferdUnknownXmlContentException + * @throws ZugferdUnknownProfileException + * @throws ZugferdUnknownProfileParameterException + * @throws RuntimeException + */ + public static function readAndGuessFromFile(string $xmlFilename): ZugferdDocumentReader + { + if (!file_exists($xmlFilename)) { + throw new ZugferdFileNotFoundException($xmlFilename); + } + + $xmlContent = file_get_contents($xmlFilename); + + if ($xmlContent === false) { + throw new ZugferdFileNotReadableException($xmlFilename); + } + + return self::readAndGuessFromContent($xmlContent); + } + + /** + * Guess the profile type of the readden xml document. + * + * @param string $xmlContent The XML content as a string to read the invoice data from + * @return ZugferdDocumentReader + * @throws ZugferdUnknownXmlContentException + * @throws ZugferdUnknownProfileException + * @throws ZugferdUnknownProfileParameterException + * @throws RuntimeException + */ + 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 !== '' && $binaryDataDirectory !== '0' && is_dir($binaryDataDirectory)) { + $this->binarydatadirectory = $binaryDataDirectory; + } + + return $this; + } + + /** + * Read content of a zuferd/xrechnung xml from a string. + * + * @param string $xmlContent The XML content as a string to read the invoice data from + * @return ZugferdDocumentReader + * @throws ZugferdUnknownProfileParameterException + * @throws RuntimeException + */ + protected function readContent(string $xmlContent): ZugferdDocumentReader + { + $this->deserialize($xmlContent); + + return $this; + } + + /** + * Read general information about the document. + * + * @param string|null $documentNo __BT-1, From MINIMUM__ The document no issued by the seller + * @param string|null $documentTypeCode __BT-3, From MINIMUM__ The type of the document, See \horstoeko\codelists\ZugferdInvoiceType for details + * @param DateTime|null $documentDate __BT-2, From MINIMUM__ Date of invoice. The date when the document was issued by the seller + * @param string|null $invoiceCurrency __BT-5, From MINIMUM__ Code for the invoice currency + * @param string|null $taxCurrency __BT-6, From BASIC WL__ Code for the currency of the VAT entry + * @param string|null $documentName __BT-X-2, From EXTENDED__ Document Type. The documenttype (free text) + * @param string|null $documentLanguage __BT-X-4, From EXTENDED__ Language indicator. The language code in which the document was written + * @param DateTime|null $effectiveSpecifiedPeriod __BT-X-6-000, From EXTENDED__ The contractual due date of the invoice + * @return ZugferdDocumentReader + * @throws ZugferdUnknownDateFormatException + */ + 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.value", ""); + $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", ""); + $documentLanguage = $this->getInvoiceValueByPath("getExchangedDocument.getLanguageID.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 __BT-90, From BASIC WL__ Identifier of the creditor + * @param string|null $paymentReference __BT-83, From BASIC WL__ Intended use for payment + * @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; + } + + /** + * Get the identifier assigned by the buyer and used for internal routing. + * + * @param string|null $buyerReference __BT-10, From MINIMUM__ 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 the routing-id (needed for German XRechnung). + * + * This is an alias-method for getDocumentBuyerReference. + * + * @param string $routingId __BT-10, From MINIMUM__ An identifier assigned by the buyer and used for internal routing + * @return ZugferdDocumentReader + */ + public function getDocumentRoutingId(string $routingId): ZugferdDocumentReader + { + return $this->getDocumentBuyerReference($routingId); + } + + /** + * Get the copy-identifier. + * + * @param boolean|null $copyIndicator __BT-X-3-00, BT-X-3, From EXTENDED__ 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; + } + + /** + * Get the test-docukent-identifier. + * + * @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; + } + + /** + * Retrieve document notes. + * + * @param array|null $notes __BT-22, From BASIC WL__, __BT-X-5, From EXTENDED__, __BT-21, From BASIC WL__ 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 detailed information about the seller (=service provider). + * + * @param string|null $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 array|null $id __BT-29, From BASIC WL__ An array of identifiers 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 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 identifiers of the seller. + * + * @param array|null $globalID __BT-29/BT-29-0/BT-29-1, From BASIC WL__ Array of the sellers global ids indexed by the identification scheme. + * @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. + * + * @param array|null $taxReg _BT-31/32, From MINIMUM/EN 16931__ Array of tax numbers indexed by the schemeid (VA, FC, etc.) + * @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 __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 array|null $subDivision __BT-39, From BASIC WL__ 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 __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 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 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 __BT-41, From EN 16931__ Such as personal name, name of contact person or department or office + * @param string|null $contactDepartmentname __BT-41-0, From EN 16931__ If a contact person is specified, either the name or the department must be transmitted. + * @param string|null $contactPhoneNo __BT-42, From EN 16931__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-107, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-43, From EN 16931__ An e-mail address of the contact point + * @return ZugferdDocumentReader + */ + public function getDocumentSellerContact(?string &$contactPersonname, ?string &$contactDepartmentname, ?string &$contactPhoneNo, ?string &$contactFaxNo, ?string &$contactEmailAddress): 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", ""); + $contactEmailAddress = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", ""); + + return $this; + } + + /** + * Get detailed information on the seller's electronic communication information. + * + * @param string|null $uriScheme __BT-34-1, From BASIC WL__ The identifier for the identification scheme of the seller's electronic address + * @param string|null $uri __BT-34, From BASIC WL__ Specifies the electronic address of the seller to which the response to the invoice can be sent at application level + * @return ZugferdDocumentReader + */ + public function getDocumentSellerCommunication(?string &$uriScheme, ?string &$uri): ZugferdDocumentReader + { + $uri = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getURIUniversalCommunication.getURIID.value", ""); + $uriScheme = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getURIUniversalCommunication.getURIID.getSchemeID", ""); + + return $this; + } + + /** + * Get detailed information about the buyer (service recipient). + * + * @param string|null $name __BT-44, From MINIMUM__ The full name of the buyer + * @param array|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-X-334, From EXTENDED__ 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 identifiers of the buyer. + * + * @param array|null $globalID __BT-46-0, BT-46-1, From BASIC WL__ Array of the buyers global ids indexed by the identification scheme. + * @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. + * + * @param array|null $taxReg _BT-48, From MINIMUM/EN 16931__ Array of tax numbers indexed by the schemeid (VA, FC, etc.) + * @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 __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 array|null $subDivision __BT-54, From BASIC WL__ 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 __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 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 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 __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-56-0, From EN 16931__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-57, From EN 16931__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-115, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-58, From EN 16931__ An e-mail address of the contact point + * @return ZugferdDocumentReader + */ + public function getDocumentBuyerContact(?string &$contactPersonName, ?string &$contactDepartmentName, ?string &$contactPhoneNo, ?string &$contactFaxNo, ?string &$contactEmailAddress): 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", ""); + $contactEmailAddress = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", ""); + + return $this; + } + + /** + * Get detailed information on the seller's electronic communication information. + * + * @param string|null $uriScheme __BT-49-1, From BASIC WL__ The identifier for the identification scheme of the buyer's electronic address + * @param string|null $uri __BT-49, From BASIC WL__ Specifies the buyer's electronic address to which the invoice is sent + * @return ZugferdDocumentReader + */ + public function getDocumentBuyerCommunication(?string &$uriScheme, ?string &$uri): ZugferdDocumentReader + { + $uri = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getURIUniversalCommunication.getURIID.value", ""); + $uriScheme = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getURIUniversalCommunication.getURIID.getSchemeID", ""); + + return $this; + } + + /** + * Get detailed information about the seller's tax agent. + * + * @param string|null $name __BT-62, From BASIC WL__ The full name of the seller's tax agent + * @param array|null $id __BT-X-116, From EXTENDED__ An array of identifiers of the sellers tax agent. + * @param string|null $description __BT-, From __ 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 __BT-X-117/BT-X-117-1, From EXTENDED__ Returns an array of the seller's tax agent identifiers indexed by the identification scheme. + * @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. + * + * @param array|null $taxReg __BT-63/BT-63-0, From BASIC WL__ Array of tax numbers indexed by the schemeid (VA, FC, etc.) + * @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 __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 array|null $subDivision __BT-68, From BASIC WL__ 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 __BT-, From __ An identifier issued by an official registrar that identifies the seller tax agent as a legal entity or legal person. + * @param string|null $legalOrgType __BT-, From __ 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 __BT-, From __ 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 seller tax representative 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 __BT-X-120, From EXTENDED__ Such as personal name, name of contact person or department or office + * @param string|null $contactDepartmentName __BT-X-121, From EXTENDED__ If a contact person is specified, either the name or the department must be transmitted. + * @param string|null $contactPhoneNo __BT-X-122, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-123, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-124, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentReader + */ + public function getDocumentSellerTaxRepresentativeContact(?string &$contactPersonName, ?string &$contactDepartmentName, ?string &$contactPhoneNo, ?string &$contactFaxNo, ?string &$contactEmailAddress): 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", ""); + $contactEmailAddress = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", ""); + + return $this; + } + + /** + * Get detailed information on the product end user (general information). + * + * @param string $name __BT-X-128, From EXTENDED__ Name/company name of the end user + * @param array|null $id __BT-X-126, From EXTENDED__ An array of identifiers of the product end user + * @param string|null $description __BT-, From __ 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. + * + * @param array|null $globalID __BT-X-127/BT-X-127-0, From EXTENDED__ Array of the product end users global ids indexed by the identification scheme. + * @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 __BT-, From __ Array of tax numbers indexed by the schemeid (VA, FC, etc.) + * @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 __BT-X-397, From EXTENDED__ 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 __BT-X-398, From EXTENDED__ 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 __BT-X-399, From EXTENDED__ 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 __BT-X-396, From EXTENDED__ Identifier for a group of properties, such as a zip code + * @param string|null $city __BT-X-400, From EXTENDED__ Usual name of the city or municipality in which the product end users address is located + * @param string|null $country __BT-X-401, From EXTENDED__ 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 __BT-X-402, From EXTENDED__ 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 __BT-X-129, From EXTENDED__ 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 __BT-X-129-0, From EXTENDED__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 __BT-X-130, From EXTENDED__ 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 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 __BT-X-131, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-132, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-133, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-134, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-135, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentReader + */ + public function getDocumentProductEndUserContact(?string &$contactPersonName, ?string &$contactDepartmentName, ?string &$contactPhoneNo, ?string &$contactFaxNo, ?string &$contactEmailAddress): 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", ""); + $contactEmailAddress = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", ""); + + return $this; + } + + /** + * Get detailed information on the Ship-To party. + * + * @param string|null $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 array|null $id __BT-71, From BASIC WL__ An array of identifiers + * @param string|null $description __BT-, From __ 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 Ship-To party. + * + * @param array|null $globalID __BT-71-0/BT-71-1, From BASIC WL__ Array of global ids indexed by the identification scheme. + * @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 Ship-To party. + * + * @param array|null $taxReg __BT-X-161/BT-X-161-0, From EXTENDED__ Array of tax numbers indexed by the schemeid (VA, FC, etc.) + * @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 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 array|null $subDivision __BT-79, From BASIC WL__ 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 __BT-X-153, From EXTENDED__ 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-X-153-0, From EXTENDED__ 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-X-154, From EXTENDED__ 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 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 __BT-X-155, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-156, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-157, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-158, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-159, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentReader + */ + public function getDocumentShipToContact(?string &$contactPersonName, ?string &$contactDepartmentName, ?string &$contactPhoneNo, ?string &$contactFaxNo, ?string &$contactEmailAddress): ZugferdDocumentReader + { + $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getDefinedTradeContact", [])); + + $contact = $contacts[$this->documentShipToContactPointer]; + + $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", ""); + $contactEmailAddress = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", ""); + + return $this; + } + + /** + * Get detailed information on the different end recipient. + * + * @param string|null $name __BT-X-164, From EXTENDED__ Name or company name of the different end recipient + * @param array|null $id __BT-X-162, From EXTENDED__ An array of identifiers + * @param string|null $description __BT-, From __ 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. + * + * @param array|null $globalID __BT-X-163/BT-X-163-0, From EXTENDED__ Array of global ids indexed by the identification scheme. + * @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. + * + * @param array|null $taxReg __BT-X-180/BT-X-180-0, From EXTENDED__ Array of tax numbers indexed by the schemeid (VA, FC, etc.) + * @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. + * + * @param string|null $lineOne __BT-X-173, From EXTENDED__ 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 __BT-X-174, From EXTENDED__ 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-X-175, From EXTENDED__ 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-X-172, From EXTENDED__ Identifier for a group of properties, such as a zip code + * @param string|null $city __BT-X-176, From EXTENDED__ Usual name of the city or municipality in which the party's address is located + * @param string|null $country __BT-X-177, From EXTENDED__ 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 __BT-X-178, From EXTENDED__ 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. + * + * @param string|null $legalOrgId __BT-X-165, From EXTENDED__ 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-X-165-0, From EXTENDED__ 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-X-166, From EXTENDED__ 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. + * + * @param string|null $contactPersonName __BT-X-167, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-168, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-169, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-170, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-171, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentReader + */ + public function getDocumentUltimateShipToContact(?string &$contactPersonName, ?string &$contactDepartmentName, ?string &$contactPhoneNo, ?string &$contactFaxNo, ?string &$contactEmailAddress): 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", ""); + $contactEmailAddress = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", ""); + + return $this; + } + + /** + * Get detailed information of the deviating consignor party. + * + * @param string|null $name __BT-X-183, From EXTENDED__ The name of the party + * @param array|null $id __BT-X-181, From EXTENDED__ An array of identifiers + * @param string|null $description __BT-, From __ 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. + * + * @param array|null $globalID __BT-X-182/BT-X-182-0, From EXTENDED__ Array of global ids indexed by the identification scheme. + * @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. + * + * @param array|null $taxReg __BT-, From __ Array of tax numbers indexed by the schemeid (VA, FC, etc.) + * @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. + * + * @param string|null $lineOne __BT-X-192, From EXTENDED__ 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-X-193, From EXTENDED__ 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-X-194, From EXTENDED__ 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-X-191, From EXTENDED__ Identifier for a group of properties, such as a zip code + * @param string|null $city __BT-X-195, From EXTENDED__ Usual name of the city or municipality in which the party's address is located + * @param string|null $country __BT-X-196, From EXTENDED__ 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 __BT-X-197, From EXTENDED__ 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. + * + * @param string|null $legalOrgId __BT-X-184, From EXTENDED__ 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-X-184-0, From EXTENDED__ 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-X-185, From EXTENDED__ 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 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. + * + * @param string|null $contactPersonName __BT-X-186, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-187, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-188, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-189, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-190, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentReader + */ + public function getDocumentShipFromContact(?string &$contactPersonName, ?string &$contactDepartmentName, ?string &$contactPhoneNo, ?string &$contactFaxNo, ?string &$contactEmailAddress): 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", ""); + $contactEmailAddress = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", ""); + + return $this; + } + + /** + * Get detailed information of the invoicer party. + * + * @param string $name __BT-X-207, From EXTENDED__ The name of the party + * @param array|null $id __BT-X-205, From EXTENDED__ An array of identifiers + * @param string|null $description __BT-, From __ 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. + * + * @param array|null $globalID __BT-X-206/BT-X-206-0, From EXTENDED__ Array of global ids indexed by the identification scheme. + * @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. + * + * @param array|null $taxReg __BT-, From __ Array of tax numbers indexed by the schemeid (VA, FC, etc.) + * @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. + * + * @param string|null $lineOne __BT-X-216, From EXTENDED__ 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-X-217, From EXTENDED__ 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-X-218, From EXTENDED__ 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-X-215, From EXTENDED__ Identifier for a group of properties, such as a zip code + * @param string|null $city __BT-X-219, From EXTENDED__ Usual name of the city or municipality in which the party's address is located + * @param string|null $country __BT-X-220, From EXTENDED__ 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 __BT-X-221, From EXTENDED__ 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. + * + * @param string|null $legalOrgId __BT-X-208, From EXTENDED__ 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-X-208-0, From EXTENDED__ 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-X-209, From EXTENDED__ 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. + * + * @param string|null $contactPersonName __BT-X-210, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-211, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-212, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-213, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-214, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentReader + */ + public function getDocumentInvoicerContact(?string &$contactPersonName, ?string &$contactDepartmentName, ?string &$contactPhoneNo, ?string &$contactFaxNo, ?string &$contactEmailAddress): 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", ""); + $contactEmailAddress = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", ""); + + return $this; + } + + /** + * Get detailed information on the different invoice recipient party. + * + * @param string $name __BT-X-226, From EXTENDED__ The name of the party + * @param array|null $id __BT-X-224, From EXTENDED__ An array of identifiers + * @param string|null $description __BT-, From __ 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. + * + * @param array|null $globalID __BT-X-225/BT-X-225-0, From EXTENDED__ Array of global ids indexed by the identification scheme. + * @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. + * + * @param array|null $taxReg __BT-X-242/BT-X-242-0, From EXTENDED__ Array of tax numbers indexed by the schemeid (VA, FC, etc.) + * @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. + * + * @param string|null $lineOne __BT-X-235, From EXTENDED__ 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-X-236, From EXTENDED__ 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-X-237, From EXTENDED__ 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-X-234, From EXTENDED__ Identifier for a group of properties, such as a zip code + * @param string|null $city __BT-X-238, From EXTENDED__ Usual name of the city or municipality in which the party's address is located + * @param string|null $country __BT-X-239, From EXTENDED__ 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 __BT-X-240, From EXTENDED__ 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. + * + * @param string|null $legalOrgId __BT-X-227, From EXTENDED__ 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-X-227-0, From EXTENDED__ 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-X-228, From EXTENDED__ 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 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. + * + * @param string|null $contactPersonName __BT-X-229, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-230, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-231, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-232, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-233, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentReader + */ + public function getDocumentInvoiceeContact(?string &$contactPersonName, ?string &$contactDepartmentName, ?string &$contactPhoneNo, ?string &$contactFaxNo, ?string &$contactEmailAddress): 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", ""); + $contactEmailAddress = $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 $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 array|null $id __BT-60, From BASIC WL__ An array of identifiers + * @param string|null $description __BT-, From __ 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 __BT-60-0/BT-60-1, From BASIC WL__ Array of global ids indexed by the identification scheme. + * @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 __BT-X-257/BT-X-257-0, From EXTENDED__ Array of tax numbers indexed by the schemeid (VA, FC, etc.) + * @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 __BT-X-250, From EXTENDED__ 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-X-251, From EXTENDED__ 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-X-252, From EXTENDED__ 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-X-249, From EXTENDED__ Identifier for a group of properties, such as a zip code + * @param string|null $city __BT-X-253, From EXTENDED__ Usual name of the city or municipality in which the party's address is located + * @param string|null $country __BT-X-254, From EXTENDED__ 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 __BT-X-255, From EXTENDED__ 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 __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-61-1, From BASIC WL__ 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-X-243, From EXTENDED__ 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 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 __BT-X-244, From EXTENDED__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $contactDepartmentName __BT-X-245, From EXTENDED__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $contactPhoneNo __BT-X-246, From EXTENDED__ A telephone number for the contact point + * @param string|null $contactFaxNo __BT-X-247, From EXTENDED__ A fax number of the contact point + * @param string|null $contactEmailAddress __BT-X-248, From EXTENDED__ An e-mail address of the contact point + * @return ZugferdDocumentReader + */ + public function getDocumentPayeeContact(?string &$contactPersonName, ?string &$contactDepartmentName, ?string &$contactPhoneNo, ?string &$contactFaxNo, ?string &$contactEmailAddress): 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", ""); + $contactEmailAddress = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", ""); + + return $this; + } + + /** + * Get detailed information on the delivery conditions. + * + * @param string|null $code __BT-X-145, From EXTENDED__ The code indicating the type of delivery for these commercial delivery terms. To be selected from the entries in the list UNTDID 4053 + INCOTERMS + * @return ZugferdDocumentReader + */ + public function getDocumentDeliveryTerms(?string &$code): ZugferdDocumentReader + { + $code = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getApplicableTradeDeliveryTerms.getDeliveryTypeCode.value", ""); + + return $this; + } + + /** + * Get details of the associated order confirmation. + * + * @param string|null $issuerAssignedId __BT-14, From EN 16931__ An identifier issued by the seller for a referenced sales order (Order confirmation number) + * @param DateTime|null $issueDate __BT-X-146, From EXTENDED__ Order confirmation date + * @return ZugferdDocumentReader + */ + public function getDocumentSellerOrderReferencedDocument(?string &$issuerAssignedId, ?DateTime &$issueDate): ZugferdDocumentReader + { + $issuerAssignedId = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerOrderReferencedDocument.getIssuerAssignedID.value", ""); + $issueDate = $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 __BT-13, From MINIMUM__ An identifier issued by the buyer for a referenced order (order number) + * @param DateTime|null $issueDate __BT-X-147, From EXTENDED__ Date of order + * @return ZugferdDocumentReader + */ + public function getDocumentBuyerOrderReferencedDocument(?string &$issuerAssignedId, ?DateTime &$issueDate): ZugferdDocumentReader + { + $issuerAssignedId = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerOrderReferencedDocument.getIssuerAssignedID.value", ""); + $issueDate = $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 offer. + * + * @param string|null $issuerAssignedId __BT-X-403, From EXTENDED__ Offer number + * @param DateTime|null $issueDate __BT-X-404, From EXTENDED__ Date of offer + * @return ZugferdDocumentReader + */ + public function getDocumentQuotationReferencedDocument(?string &$issuerAssignedId, ?DateTime &$issueDate): ZugferdDocumentReader + { + $issuerAssignedId = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getQuotationReferencedDocument.getIssuerAssignedID.value", ""); + $issueDate = $this->getObjectHelper()->toDateTime( + $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getQuotationReferencedDocument.getFormattedIssueDateTime.getDateTimeString.value", ""), + $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getQuotationReferencedDocument.getFormattedIssueDateTime.getDateTimeString.getFormat", "") + ); + + return $this; + } + + /** + * Get details of the associated contract. + * + * @param string|null $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 $issueDate __BT-X-26, From EXTENDED__ Contract date + * @return ZugferdDocumentReader + */ + public function getDocumentContractReferencedDocument(?string &$issuerAssignedId, ?DateTime &$issueDate): ZugferdDocumentReader + { + $issuerAssignedId = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getContractReferencedDocument.getIssuerAssignedID.value", ""); + $issueDate = $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. + * You may use this together with ZugferdDocumentReader::getDocumentAdditionalReferencedDocument. + * + * @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. + * You may use this together with ZugferdDocumentReader::getDocumentAdditionalReferencedDocument. + * + * @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 $issuerAssignedId __BT-122, From EN 16931__ 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 __BT-122-0, From EN 16931__ 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 __BT-124, From EN 16931__ A means of locating the resource, including the primary access method intended for it, e.g. http:// or ftp://. The storage location of the external document must be used if the buyer requires further information as + * supporting documents for the invoiced amounts. External documents are not part of the invoice. Invoice processing should be possible without access to external documents. Access to external documents can entail certain risks. + * @param array|null $name __BT-123, From EN 16931__ A description of the document, e.g. Hourly billing, usage or consumption report, etc. + * @param string|null $refTypeCode __BT-, From __ 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 $issueDate __BT-X-149, From EXTENDED__ Document date + * @param string|null $binaryDataFilename __BT-125, From EN 16931__ Contains a file name of an attachment document embedded as a binary object + * @return ZugferdDocumentReader + */ + public function getDocumentAdditionalReferencedDocument(?string &$issuerAssignedId, ?string &$typeCode, ?string &$uriId, ?array &$name, ?string &$refTypeCode, ?DateTime &$issueDate, ?string &$binaryDataFilename): 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->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($addRefDoc, "getName.value", null)); + $refTypeCode = $this->getInvoiceValueByPathFrom($addRefDoc, "getReferenceTypeCode.value", ""); + $issueDate = $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 first reference to the previous invoice. Returns true if an invoice reference document is available, otherwise false. + * You may use this together with ZugferdDocumentReader::getDocumentInvoiceReferencedDocument. + * + * @return boolean + */ + public function firstDocumentInvoiceReferencedDocument(): bool + { + $this->documentInvRefDocPointer = 0; + + $addRefDoc = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceReferencedDocument", []); + + return isset($addRefDoc[$this->documentInvRefDocPointer]); + } + + /** + * Get next reference to the previous invoice Returns true when another invoice reference document is available, otherwise false + * You may use this together with ZugferdDocumentReader::getDocumentInvoiceReferencedDocument. + * + * @return boolean + */ + public function nextDocumentInvoiceReferencedDocument(): bool + { + $this->documentInvRefDocPointer++; + + $addRefDoc = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceReferencedDocument", []); + + return isset($addRefDoc[$this->documentInvRefDocPointer]); + } + + /** + * Get reference to the previous invoice. + * + * @param string $issuerAssignedId __BT-25, From BASIC WL__ The identification of an invoice previously sent by the seller + * @param string|null $typeCode __BT-X-555, From EXTENDED__ Type of previous invoice (code) + * @param DateTime|null $issueDate __BT-26, From BASIC WL__ Date of the previous invoice + */ + public function getDocumentInvoiceReferencedDocument(?string &$issuerAssignedId, ?string &$typeCode, ?DateTime &$issueDate): ZugferdDocumentReader + { + $invoiceRefDoc = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceReferencedDocument", []); + $invoiceRefDoc = $invoiceRefDoc[$this->documentInvRefDocPointer]; + + $issuerAssignedId = $this->getInvoiceValueByPathFrom($invoiceRefDoc, "getIssuerAssignedID.value", ""); + $typeCode = $this->getInvoiceValueByPathFrom($invoiceRefDoc, "getTypeCode.value", ""); + $issueDate = $this->getObjectHelper()->toDateTime( + $this->getInvoiceValueByPathFrom($invoiceRefDoc, "getFormattedIssueDateTime.getDateTimeString.value", ""), + $this->getInvoiceValueByPathFrom($invoiceRefDoc, "getFormattedIssueDateTime.getDateTimeString.getFormat", "") + ); + + return $this; + } + + /** + * Get all references to the previous invoice. + * + * @param array|null $invoiceRefDocs + * Array contains all invoice referenced documents, but without extracting attached binary objects. If you + * want to access attached binary objects you have to use ZugferdDocumentReader::getDocumentInvoiceReferencedDocument + * @return ZugferdDocumentReader + */ + public function getDocumentInvoiceReferencedDocuments(?array &$invoiceRefDocs): ZugferdDocumentReader + { + $invoiceRefDocs = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceReferencedDocument", []); + $invoiceRefDocs = $this->convertToArray( + $invoiceRefDocs, + [ + "IssuerAssignedID" => ["getIssuerAssignedID.value", ""], + "TypeCode" => ["getTypeCode.value", ""], + "FormattedIssueDateTime" => ["getFormattedIssueDateTime.getDateTimeString.value", ""], + ] + ); + + return $this; + } + + /** + * Get Details of a project reference. + * + * @param string|null $id __BT-11, From EN 16931__ The identifier of the project to which the invoice relates + * @param string|null $name __BT-11-0, From EN 16931__ The name of the project to which the invoice relates + * @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. + * Use wuth getDocumentUltimateCustomerOrderReferencedDocument. + * + * @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 + * Use wuth getDocumentUltimateCustomerOrderReferencedDocument. + * + * @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 __BT-X-150, From EXTENDED__ Order number of the end customer + * @param DateTime|null $issueDate __BT-X-151, From EXTENDED__ Date of the order issued by the end customer + * @return ZugferdDocumentReader + */ + public function getDocumentUltimateCustomerOrderReferencedDocument(?string &$issuerAssignedId, ?DateTime &$issueDate): ZugferdDocumentReader + { + $addRefDoc = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getUltimateCustomerOrderReferencedDocument", []); + $addRefDoc = $addRefDoc[$this->documentUltimateCustomerOrderReferencedDocumentPointer]; + + $issuerAssignedId = $this->getInvoiceValueByPathFrom($addRefDoc, "getIssuerAssignedID.value", ""); + $issueDate = $this->getObjectHelper()->toDateTime( + $this->getInvoiceValueByPathFrom($addRefDoc, "getFormattedIssueDateTime.getDateTimeString.value", ""), + $this->getInvoiceValueByPathFrom($addRefDoc, "getFormattedIssueDateTime.getDateTimeString.getFormat", "") + ); + + return $this; + } + + /** + * Details of the ultimate customer order. + * + * @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 __BT-72, From BASIC WL__ Actual delivery time + * @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 __BT-16, From BASIC WL__ Shipping notification reference + * @param DateTime|null $issueDate __BT-X-200, From EXTENDED__ Shipping notification date + * @return ZugferdDocumentReader + */ + public function getDocumentDespatchAdviceReferencedDocument(?string &$issuerAssignedId, ?DateTime &$issueDate): ZugferdDocumentReader + { + $issuerAssignedId = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getDespatchAdviceReferencedDocument.getIssuerAssignedID.value", ""); + $issueDate = $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 __BT-15, From EN 16931__ An identifier for a referenced goods receipt notification (Goods receipt number) + * @param DateTime|null $issueDate __BT-X-201, From EXTENDED__ Goods receipt date + * @return ZugferdDocumentReader + */ + public function getDocumentReceivingAdviceReferencedDocument(?string &$issuerAssignedId, ?DateTime &$issueDate): ZugferdDocumentReader + { + $issuerAssignedId = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getReceivingAdviceReferencedDocument.getIssuerAssignedID.value", ""); + $issueDate = $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. + * + * @param string $issuerAssignedId __BT-X-202, From EXTENDED__ Delivery slip number + * @param DateTime|null $issueDate __BT-X-203, From EXTENDED__ Delivery slip date + * @return ZugferdDocumentReader + */ + public function getDocumentDeliveryNoteReferencedDocument(?string &$issuerAssignedId, ?DateTime &$issueDate): ZugferdDocumentReader + { + $issuerAssignedId = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getDeliveryNoteReferencedDocument.getIssuerAssignedID.value", ""); + $issueDate = $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. + * + * @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-87, From EN 16931__ 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-88, From EN 16931__ Name of the payment card holder + * @param string|null $buyerIban __BT-91, From BASIC WL__ The account to be debited by the direct debit + * @param string|null $payeeIban __BT-84, From BASIC WL__ A unique identifier for the financial account held with a payment service provider to which the payment should be made + * @param string|null $payeeAccountName __BT-85, From BASIC WL__ The name of the payment account held with a payment service provider to which the payment should be made + * @param string|null $payeePropId __BT-84-0, From BASIC WL__ National account number (not for SEPA) + * @param string|null $payeeBic __BT-86, From EN 16931__ An identifier for the payment service provider with which the payment account is held + * @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 __BT-118, From BASIC WL__ Coded description of a sales tax category + * @param string|null $typeCode __BT-118-0, From BASIC WL__ Coded description of a sales tax category. Note: Fixed value = "VAT" + * @param float|null $basisAmount __BT-116, From BASIC WL__ Tax base amount, Each sales tax breakdown must show a category-specific tax base amount. + * @param float|null $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-X-262, From EXTENDED__ An amount used as the basis for calculating sales tax, duty or customs duty + * @param float|null $allowanceChargeBasisAmount __BT-X-263, From EXTENDED__ Total amount Additions and deductions to the tax rate at document level + * @param DateTime|null $taxPointDate __BT-7-00, From EN 16931__ Date on which tax is due. 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 the VAT becomes relevant for settlement for the seller and for the buyer + */ + 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 __BT-73, From BASIC WL__ Start of the billing period + * @param DateTime|null $endDate __BT-74, From BASIC WL__ 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 __BT-92/BT-99, From BASIC WL__ Amount of the surcharge or discount at document level + * @param boolean|null $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|null $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 + * @param string|null $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|null $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-X-265, From EXTENDED__ 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-X-266, From EXTENDED__ Base quantity of the discount + * @param string|null $basisQuantityUnitCode __BT-X-267, From EXTENDED__ Unit of the price base quantity + * @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 + * @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 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 __BT-X-271, From EXTENDED__ Identification of the service fee + * @param float|null $appliedAmount __BT-X-272, From EXTENDED__ Amount of the service fee + * @param array|null $taxTypeCodes __BT-X-273-0, From EXTENDED__ Code of the Tax type. Note: Fixed value = "VAT" + * @param array|null $taxCategoryCodes __BT-X-273, From EXTENDED__ Code of the VAT category + * @param array|null $rateApplicablePercents __BT-X-274, From EXTENDED__ 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, ?array &$taxCategoryCodes, ?array &$rateApplicablePercents): 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. + * + * @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. + * @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 __BT-X-286, From EXTENDED__ Percentage of the down payment + * @param DateTime|null $basisDateTime __BT-X-282, From EXTENDED__ Due date reference date + * @param float|null $basisPeriodMeasureValue __BT-X-284, From EXTENDED__ Maturity period (basis) + * @param string|null $basisPeriodMeasureUnitCode __BT-X-284, From EXTENDED__ Maturity period (unit) + * @param float|null $basisAmount __BT-X-284, From EXTENDED__ Base amount of the payment discount + * @param float|null $actualDiscountAmount __BT-X-287, From EXTENDED__ Amount of the payment discount + * @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; + } + + /** + * Get detailed information on payment penalties. + * + * @param float|null $calculationPercent __BT-X-280, From EXTENDED__ Percentage of the payment surcharge + * @param DateTime|null $basisDateTime __BT-X-276, From EXTENDED__ Due date reference date + * @param float|null $basisPeriodMeasureValue __BT-X-277, From EXTENDED__ Maturity period (basis) + * @param string|null $basisPeriodMeasureUnitCode __BT-X-277, From EXTENDED__ Maturity period (unit) + * @param float|null $basisAmount __BT-X-279, From EXTENDED__ Basic amount of the payment surcharge + * @param float|null $actualPenaltyAmount __BT-X-281, From EXTENDED__ Amount of the payment surcharge + * @return ZugferdDocumentReader + */ + public function getPenaltyTermsFromPaymentTerm(?float &$calculationPercent, ?DateTime &$basisDateTime, ?float &$basisPeriodMeasureValue, ?string &$basisPeriodMeasureUnitCode, ?float &$basisAmount, ?float &$actualPenaltyAmount): ZugferdDocumentReader + { + $paymentTerms = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradePaymentTerms", [])); + $paymentTerms = $paymentTerms[$this->documentPaymentTermsPointer]; + + $calculationPercent = $this->getInvoiceValueByPathFrom($paymentTerms, "getApplicableTradePaymentPenaltyTerms.getCalculationPercent.value", 0.0); + $basisDateTime = $this->getObjectHelper()->toDateTime( + $this->getObjectHelper()->tryCallByPathAndReturn($paymentTerms, "getApplicableTradePaymentPenaltyTerms.getBasisDateTime.getDateTimeString.value"), + $this->getObjectHelper()->tryCallByPathAndReturn($paymentTerms, "getApplicableTradePaymentPenaltyTerms.getBasisDateTime.getDateTimeString.getFormat") + ); + $basisPeriodMeasureValue = $this->getInvoiceValueByPathFrom($paymentTerms, "getApplicableTradePaymentPenaltyTerms.getBasisPeriodMeasure.value", 0.0); + $basisPeriodMeasureUnitCode = $this->getInvoiceValueByPathFrom($paymentTerms, "getApplicableTradePaymentPenaltyTerms.getBasisPeriodMeasure.getUnitCode", ""); + $basisAmount = $this->getInvoiceValueByPathFrom($paymentTerms, "getApplicableTradePaymentPenaltyTerms.getBasisAmount.value", 0.0); + $actualPenaltyAmount = $this->getInvoiceValueByPathFrom($paymentTerms, "getApplicableTradePaymentPenaltyTerms.getActualPenaltyAmount.value", 0.0); + + return $this; + } + + /** + * Seek to the first trade accounting account of the document. Returns true if a first account is available, otherwise false. + * You may use this together with ZugferdDocumentReader::getDocumentSellerContact. + * + * @return boolean + */ + public function firstDocumentReceivableSpecifiedTradeAccountingAccount(): bool + { + $this->documentTradeAccountingAccountPointer = 0; + + $acccounts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getReceivableSpecifiedTradeAccountingAccount", [])); + + return isset($acccounts[$this->documentTradeAccountingAccountPointer]); + } + + /** + * Seek to the next trade accounting account of the document. Returns true if another account is available, otherwise false. + * You may use this together with ZugferdDocumentReader::getDocumentSellerContact. + * + * @return boolean + */ + public function nextDocumentReceivableSpecifiedTradeAccountingAccount(): bool + { + $this->documentTradeAccountingAccountPointer++; + + $acccounts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getReceivableSpecifiedTradeAccountingAccount", [])); + + return isset($acccounts[$this->documentTradeAccountingAccountPointer]); + } + + /** + * Get information on the booking reference (on document level). + * + * @param null|string &$id __BT-19, From BASIC WL__ Posting reference of the byuer. If required, this reference shall be provided by the Buyer to the Seller prior to the issuing of the Invoice. + * @param null|string &$typeCode __BT-X-290, From EXTENDED__ Type of the posting reference + * @return ZugferdDocumentReader + */ + public function getDocumentReceivableSpecifiedTradeAccountingAccount(?string &$id, ?string &$typeCode): ZugferdDocumentReader + { + $acccounts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getReceivableSpecifiedTradeAccountingAccount", [])); + $acccounts = $acccounts[$this->documentTradeAccountingAccountPointer]; + + $id = $this->getInvoiceValueByPathFrom($acccounts, "getId.value", ""); + $typeCode = $this->getInvoiceValueByPathFrom($acccounts, "getTypeCode.value", ""); + + return $this; + } + + /** + * Read Document money summation. + * + * @param float|null $grandTotalAmount __BT-112, From MINIMUM__ Total invoice amount including sales tax + * @param float|null $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 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", ""); + $grandTotalAmount = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation.getGrandTotalAmount.value", 0); + $taxBasisTotalAmount = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation.getTaxBasisTotalAmount.value", 0); + $taxTotalAmountElement = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation.getTaxTotalAmount", []); + + foreach ($taxTotalAmountElement as $taxTotalAmountElementItem) { + $taxTotalAmountCurrencyCode = $this->getObjectHelper()->tryCallAndReturn($taxTotalAmountElementItem, "getCurrencyID") ?? ""; + if ($taxTotalAmountCurrencyCode == $invoiceCurrencyCode || $taxTotalAmountCurrencyCode == "") { + $taxTotalAmount = $this->getObjectHelper()->tryCallAndReturn($taxTotalAmountElementItem, "value") ?? 0; + break; + } + } + + $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; + } + + /** + * Seek to the first document position. Returns true if the first position is available, otherwise false. + * You may use it together with ZugferdDocumentReader::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->positionAddRefObjDocPointer = 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 ZugferdDocumentReader::getDocumentPositionGenerals. + * + * @return boolean + */ + public function nextDocumentPosition(): bool + { + $this->positionPointer++; + + $this->positionNotePointer = 0; + $this->positionGrossPriceAllowanceChargePointer = 0; + $this->positionTaxPointer = 0; + $this->positionAllowanceChargePointer = 0; + $this->positionAddRefDocPointer = 0; + $this->positionAddRefObjDocPointer = 0; + $this->positionProductCharacteristicPointer = 0; + $this->positionProductClassificationPointer = 0; + $this->positionReferencedProductPointer = 0; + + $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []); + + return isset($tradeLineItem[$this->positionPointer]); + } + + /** + * Get general information of the current position. + * + * @param string $lineId __BT-126, From BASIC__ Identification of the invoice item + * @param string|null $lineStatusCode __BT-X-7, From EXTENDED__ Indicates whether the invoice item contains prices that must be taken into account when calculating the invoice amount or whether only information is included. + * @param string|null $lineStatusReasonCode __BT-X-8, From EXTENDED__ Adds the type to specify whether the invoice line is: + * @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 ZugferdDocumentReader::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 ZugferdDocumentReader::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 $content __BT-127, From BASIC__ A free text that contains unstructured information that is relevant to the invoice item + * @param string|null $contentCode __BT-X-9, From EXTENDED__ A code to classify the content of the free text of the invoice. The code is agreed bilaterally and must have the same meaning as BT-127. + * @param string|null $subjectCode __BT-X-10, From EXTENDED__ Code for qualifying the free text for the invoice item (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 __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 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 information about the goods and services billed (Enhanced, with Model, Brand, etc.). + * + * @param string|null $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, ...) + * @param string|null $industryAssignedID __BT-X-309, From EXTENDED__ ID assigned by the industry to the contained referenced product + * @param string|null $modelID __BT-X-533, From EXTENDED__ A unique model identifier for this product + * @param string|null $batchID __BT-X-534. From EXTENDED__ Identification of the batch (lot) of the product + * @param string|null $brandName __BT-X-535. From EXTENDED__ The brand name, expressed as text, for this product + * @param string|null $modelName __BT-X-536. From EXTENDED__ Model designation of the product + * @return ZugferdDocumentReader + */ + public function getDocumentPositionProductDetailsExt(?string &$name, ?string &$description, ?string &$sellerAssignedID, ?string &$buyerAssignedID, ?string &$globalIDType, ?string &$globalID, ?string &$industryAssignedID, ?string &$modelID, ?string &$batchID, ?string &$brandName, ?string &$modelName): 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", ""); + $industryAssignedID = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getIndustryAssignedID.value", ""); + $modelID = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getModelID.value", ""); + $batchIDs = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getBatchID", ""); + $batchID = isset($batchIDs[0]) ? $this->getObjectHelper()->tryCallAndReturn($batchIDs[0], "value") : ""; + $brandName = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getBrandName.value", ""); + $modelName = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getModelName.value", ""); + + 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 ZugferdDocumentReader::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 ZugferdDocumentReader::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 __BT-160, From EN 16931__ The name of the attribute or property of the product such as "Colour" + * @param string $value __BT-161, From EN 16931__ The value of the attribute or property of the product such as "Red" + * @param string|null $typeCode __BT-X-11, From EXTENDED__ Type of product characteristic (code). The codes must be taken from the UNTDID 6313 codelist. + * @param float|null $valueMeasure __BT-X-12, From EXTENDED__ Value of the product property (numerical measured variable) + * @param string|null $valueMeasureUnitCode __BT-X-12-0, From EXTENDED__ Unit of measurement code + * @return ZugferdDocumentReader + */ + 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 ZugferdDocumentReader::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 ZugferdDocumentReader::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 __BT-158, From EN 16931__ Item classification identifier. Classification codes are used for grouping similar items that can serve different purposes, such as public procurement (according to the Common Procurement Vocabulary ([CPV]), e-commerce (UNSPSC), etc. + * @param string|null $className __BT-X-138, From EXTENDED__ Name with which an article can be classified according to type or quality. + * @param string|null $listID __BT-158-1, From EN 16931__ The identifier for the identification scheme of the item classification identifier. The identification scheme must be selected from the entries in UNTDID 7143 [6]. + * @param string|null $listVersionID __BT-158-2, From EN 16931__ The version of the identification scheme + * @return ZugferdDocumentReader + */ + 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 ZugferdDocumentReader::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 ZugferdDocumentReader::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 __BT-X-18, From EXTENDED__ Name of the referenced product contained + * @param string|null $description __BT-X-19, From EXTENDED__ Description of the included referenced product + * @param string|null $sellerAssignedID __BT-X-16, From EXTENDED__ ID assigned by the seller of the contained referenced product + * @param string|null $buyerAssignedID __BT-X-17, From EXTENDED__ ID of the referenced product assigned by the buyer + * @param array|null $globalID __BT-X-15, From EXTENDED__ Array of global ids of the referenced product indexed by the identification scheme. + * @param float|null $unitQuantity __BT-X-20, From EXTENDED__ Quantity of the referenced product contained + * @param string|null $unitCode __BT-X-20-1, From EXTENDED__ Unit code of Quantity of the referenced product contained + * @param string|null $industryAssignedID __BT-X-309, From EXTENDED__ ID of the referenced product contained assigned by the industry + * @return ZugferdDocumentReader + */ + public function getDocumentPositionReferencedProduct(?string &$name, ?string &$description, ?string &$sellerAssignedID, ?string &$buyerAssignedID, ?array &$globalID, ?float &$unitQuantity, ?string &$unitCode, ?string &$industryAssignedID): 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", ""); + $industryAssignedID = $this->getInvoiceValueByPathFrom($tradeLineItemReferencedProduct, "getIndustryAssignedID.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; + } + + /** + * Sets the detailed information on the product origin. + * + * @param string|null $country __BT-159, From EN 16931__ The code indicating the country the goods came from. 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 ZugferdDocumentReader + */ + public function getDocumentPositionProductOriginTradeCountry(?string &$country): ZugferdDocumentReader + { + $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []); + $tradeLineItem = $tradeLineItem[$this->positionPointer]; + + $country = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getOriginTradeCountry.getID.value", ""); + + return $this; + } + + /** + * Get details of a related sales order reference. + * + * @param string|null $issuerAssignedId __BT-X-537, From EXTENDED__ Document number of a sales order reference + * @param string|null $lineId __BT-X-538, From EXTENDED__ An identifier for a position within a sales order. + * @param DateTime|null $issueDate __BT-X-539, From EXTENDED__ Date of sales order + * @return ZugferdDocumentReader + */ + public function getDocumentPositionSellerOrderReferencedDocument(?string &$issuerAssignedId, ?string &$lineId, ?DateTime &$issueDate): ZugferdDocumentReader + { + $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []); + $tradeLineItem = $tradeLineItem[$this->positionPointer]; + + $issuerAssignedId = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getSellerOrderReferencedDocument.getIssuerAssignedID.value", ""); + $lineId = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getSellerOrderReferencedDocument.getLineID.value", ""); + $issueDate = $this->getObjectHelper()->toDateTime( + $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getSellerOrderReferencedDocument.getFormattedIssueDateTime.getDateTimeString.value", null), + $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getSellerOrderReferencedDocument.getFormattedIssueDateTime.getDateTimeString.getFormat", null) + ); + + return $this; + } + + /** + * Get details of the related buyer order position. + * + * @param string|null $issuerAssignedId __BT-X-21, From EXTENDED__ An identifier issued by the buyer for a referenced order (order number) + * @param string|null $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 $issueDate __BT-X-22, From EXTENDED__ Date of order + * @return ZugferdDocumentReader + */ + public function getDocumentPositionBuyerOrderReferencedDocument(?string &$issuerAssignedId, ?string &$lineId, ?DateTime &$issueDate): 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", ""); + $issueDate = $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 associated offer position. + * + * @param string|null $issuerAssignedId __BT-X-310, From EXTENDED__ Offer number + * @param string|null $lineId __BT-X-311, From EXTENDED__ Position identifier within the offer + * @param DateTime|null $issueDate __BT-X-312, From EXTENDED__ Date of offder + * @return ZugferdDocumentReader + */ + public function getDocumentPositionQuotationReferencedDocument(?string &$issuerAssignedId, ?string &$lineId, ?DateTime &$issueDate): ZugferdDocumentReader + { + $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []); + $tradeLineItem = $tradeLineItem[$this->positionPointer]; + + $issuerAssignedId = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getQuotationReferencedDocument.getIssuerAssignedID.value", ""); + $lineId = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getQuotationReferencedDocument.getLineID.value", ""); + $issueDate = $this->getObjectHelper()->toDateTime( + $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getQuotationReferencedDocument.getFormattedIssueDateTime.getDateTimeString.value", null), + $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getQuotationReferencedDocument.getFormattedIssueDateTime.getDateTimeString.getFormat", null) + ); + + return $this; + } + + /** + * Get details of the related contract position. + * + * @param string|null $issuerAssignedId __BT-X-24, From EXTENDED__ 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 __BT-X-25, From EXTENDED__ Identifier of the according contract position + * @param DateTime|null $issueDate __BT-X-26, From EXTENDED__ Contract date + * @return ZugferdDocumentReader + */ + public function getDocumentPositionContractReferencedDocument(?string &$issuerAssignedId, ?string &$lineId, ?DateTime &$issueDate): 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", ""); + $issueDate = $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 ZugferdDocumentReader::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 ZugferdDocumentReader::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). + * + * - 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 __BT-X-27, From EXTENDED__ 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 __BT-X-30, From EXTENDED__ Type of referenced document (See codelist UNTDID 1001) + * @param string|null $uriId __BT-X-28, From EXTENDED__ 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 __BT-X-29, From EXTENDED__ The referenced position identifier in the additional document + * @param array|null $name __BT-X-299, From EXTENDED__ A description of the document, e.g. Hourly billing, usage or consumption report, etc. + * @param string|null $refTypeCode __BT-X-32, From EXTENDED__ 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 $issueDate __BT-X-33, From EXTENDED__ Document date + * @param string|null $binaryDataFilename __BT-X-31, From EXTENDED__ Contains a file name of an attachment document embedded as a binary object + * @return ZugferdDocumentReader + */ + public function getDocumentPositionAdditionalReferencedDocument(?string &$issuerAssignedId, ?string &$typeCode, ?string &$uriId, ?string &$lineId, ?array &$name, ?string &$refTypeCode, ?DateTime &$issueDate, ?string &$binaryDataFilename): 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", null)); + $issueDate = $this->getObjectHelper()->toDateTime( + $this->getInvoiceValueByPathFrom($addRefDoc, "getFormattedIssueDateTime.getDateTimeString.value", null), + $this->getInvoiceValueByPathFrom($addRefDoc, "getFormattedIssueDateTime.getDateTimeString.getFormat", null) + ); + + $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; + } + + //TODO: DocumentPositionUltimateCustomerOrderReferencedDocument + + /** + * Get 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. 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 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 ZugferdDocumentReader::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 ZugferdDocumentReader::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 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-X-34, From EXTENDED__Discount/surcharge in percent. Up to level EN16931, only the final result of the discount (ActualAmount) is transferred + * @param float|null $basisAmount __BT-X-35, From EXTENDED__ Base amount of the discount/surcharge + * @param string|null $reason __BT-X-36, From EXTENDED__ 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-X-313, From EXTENDED__ Reason code for surcharge/discount + * @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 $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 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 __BT-, From __ Coded description of a sales tax category + * @param string|null $typeCode __BT-, From __ Coded description of a sales tax category. Note: Fixed value = "VAT" + * @param float|null $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|null $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 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 __BT-129, From BASIC__ The quantity of individual items (goods or services) billed in the relevant line + * @param string|null $billedQuantityUnitCode __BT-130, From BASIC__ The unit of measure applicable to the amount billed + * @param float|null $chargeFreeQuantity __BT-X-46, From EXTENDED__ Quantity, free of charge + * @param string|null $chargeFreeQuantityUnitCpde __BT-X-46-0, From EXTENDED__ Unit of measure code for the quantity free of charge + * @param float|null $packageQuantity __BT-X-47, From EXTENDED__ Number of packages + * @param string|null $packageQuantityUnitCode __BT-X-47-0, From EXTENDED__ 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 __BT-X-85, From EXTENDED__ Actual delivery date + * @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 __BT-X-86, From EXTENDED__ Shipping notification number + * @param string|null $lineId __BT-X-87, From EXTENDED__ Shipping notification position + * @param DateTime|null $issueDate __BT-X-88, From EXTENDED__ Date of Shipping notification number + * @return ZugferdDocumentReader + */ + public function getDocumentPositionDespatchAdviceReferencedDocument(?string &$issuerAssignedId, ?string &$lineId, ?DateTime &$issueDate): 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", ""); + $issueDate = $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 __BT-X-89, From EXTENDED__ Goods receipt number + * @param string|null $lineId __BT-X-90, From EXTENDED__ Goods receipt position + * @param DateTime|null $issueDate __BT-X-91, From EXTENDED__ Date of Goods receipt + * @return ZugferdDocumentReader + */ + public function getDocumentPositionReceivingAdviceReferencedDocument(?string &$issuerAssignedId, ?string &$lineId, ?DateTime &$issueDate): 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", ""); + $issueDate = $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 __BT-X-92, From EXTENDED__ Delivery note number + * @param string|null $lineId __BT-X-93, From EXTENDED__ Delivery note position + * @param DateTime|null $issueDate __BT-X-94, From EXTENDED__ Date of Delivery note + * @return ZugferdDocumentReader + */ + public function getDocumentPositionDeliveryNoteReferencedDocument(?string &$issuerAssignedId, ?string &$lineId, ?DateTime &$issueDate): 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", ""); + $issueDate = $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 __BT-151, From BASIC__ Coded description of a sales tax category + * @param string|null $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|null $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 (Obsolete) + * @param string|null $exemptionReason __BT-, From __ Reason for tax exemption (free text) (Obsolete) + * @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. (Obsolete) + * @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. 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 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 __BT-136/BT-141, From BASIC__ The surcharge/discount amount excluding sales tax + * @param boolean|null $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 it is a surcharge + * @param float|null $calculationPercent __BT-138, 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-137, From EN 16931__ 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 __BT-139/BT-144, From BASIC__ The reason given in text form for the invoice item discount/surcharge + * @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 __BT-140/BT-145, From BASIC__ The reason given as a code for the invoice line discount + * @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 __BT-136/BT-141, From BASIC__ The surcharge/discount amount excluding sales tax + * @param boolean|null $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 it is a surcharge + * @param float|null $calculationPercent __BT-138, 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-137, From EN 16931__ 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 + * @param string|null $reason __BT-139/BT-144, From BASIC__ The reason given in text form for the invoice item discount/surcharge + * @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 __BT-131, From BASIC__ The total amount of the invoice item. + * @param float|null $totalAllowanceChargeAmount __BT-, From __ Total amount of item surcharges and discounts + * @return ZugferdDocumentReader + * @deprecated 1.0.88 + */ + public function getDocumentPositionLineSummation(?float &$lineTotalAmount, ?float &$totalAllowanceChargeAmount): ZugferdDocumentReader + { + $totalAllowanceChargeAmount = 0.0; + + $this->getDocumentPositionLineSummationSimple($lineTotalAmount); + + return $this; + } + + /** + * Get detailed information on item totals. + * + * @param float $lineTotalAmount __BT-131, From BASIC__ The total amount of the invoice item. + * @return ZugferdDocumentReader + */ + public function getDocumentPositionLineSummationSimple(?float &$lineTotalAmount): ZugferdDocumentReader + { + $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []); + $tradeLineItem = $tradeLineItem[$this->positionPointer]; + + $lineTotalAmount = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getSpecifiedTradeSettlementLineMonetarySummation.getLineTotalAmount.value", 0.0); + + return $this; + } + + /** + * Get detailed information on item totals (with support for EXTENDED profile). + * + * @param float $lineTotalAmount __BT-131, From BASIC__ The total amount of the invoice item + * @param float $chargeTotalAmount __BT-X-327, From EXTENDED__ Total amount of item surcharges + * @param float $allowanceTotalAmount __BT-X-328, From EXTENDED__ Total amount of item discounts + * @param float $taxTotalAmount __BT-X-329, From EXTENDED__ Total amount of item taxes + * @param float $grandTotalAmount __BT-X-330, From EXTENDED__ Total gross amount of the item + * @param float $totalAllowanceChargeAmount __BT-X-98, From EXTENDED__ Total amount of item surcharges and discounts + * @return ZugferdDocumentReader + */ + public function getDocumentPositionLineSummationExt(?float &$lineTotalAmount, ?float &$chargeTotalAmount, ?float &$allowanceTotalAmount, ?float &$taxTotalAmount, ?float &$grandTotalAmount, ?float &$totalAllowanceChargeAmount): ZugferdDocumentReader + { + $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []); + $tradeLineItem = $tradeLineItem[$this->positionPointer]; + + $lineTotalAmount = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getSpecifiedTradeSettlementLineMonetarySummation.getLineTotalAmount.value", 0.0); + $chargeTotalAmount = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getSpecifiedTradeSettlementLineMonetarySummation.getChargeTotalAmount.value", 0.0); + $allowanceTotalAmount = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getSpecifiedTradeSettlementLineMonetarySummation.getAllowanceTotalAmount.value", 0.0); + $taxTotalAmount = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getSpecifiedTradeSettlementLineMonetarySummation.getTaxTotalAmount.value", 0.0); + $grandTotalAmount = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getSpecifiedTradeSettlementLineMonetarySummation.getGrandTotalAmount.value", 0.0); + $totalAllowanceChargeAmount = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getSpecifiedTradeSettlementLineMonetarySummation.getTotalAllowanceChargeAmount.value", 0.0); + + return $this; + } + + /** + * Get a Reference to the previous invoice (on position level). + * + * @param string|null $issuerAssignedId __BT-X-331, From EXTENDED__ The identification of an invoice previously sent by the seller + * @param string|null $lineid __BT-X-540, From EXTENDED__ Identification of the invoice item + * @param string|null $typeCode __BT-X-332, From EXTENDED__ Type of previous invoice (code) + * @param DateTime|null $issueDate __BT-X-333, From EXTENDED__ Date of the previous invoice + * @return ZugferdDocumentReader + */ + public function getDocumentPositionInvoiceReferencedDocument(?string &$issuerAssignedId, ?string &$lineid, ?string &$typeCode, ?DateTime &$issueDate): ZugferdDocumentReader + { + $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []); + $tradeLineItem = $tradeLineItem[$this->positionPointer]; + + $issuerAssignedId = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getInvoiceReferencedDocument.getIssuerAssignedID.value", ""); + $lineid = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getInvoiceReferencedDocument.getLineID.value", ""); + $typeCode = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getInvoiceReferencedDocument.getTypeCode.value", ""); + $issueDate = $this->getObjectHelper()->toDateTime( + $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getInvoiceReferencedDocument.getFormattedIssueDateTime.getDateTimeString.value", ""), + $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getInvoiceReferencedDocument.getFormattedIssueDateTime.getDateTimeString.getFormat", "") + ); + + return $this; + } + + /** + * Seek to the first documents position additional referenced document (Object detection at the level of the accounting position). Returns true if the first position is available, otherwise false. + * You may use it together with ZugferdDocumentReader::getDocumentPositionAdditionalReferencedObjDocument. + * + * @return boolean + */ + public function firstDocumentPositionAdditionalReferencedObjDocument(): bool + { + $this->positionAddRefObjDocPointer = 0; + $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []); + $tradeLineItem = $tradeLineItem[$this->positionPointer]; + + $addRefDoc = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getAdditionalReferencedDocument", [])); + + return isset($addRefDoc[$this->positionAddRefObjDocPointer]); + } + + /** + * Seek to the next documents position additional referenced document (Object detection at the level of the accounting position). Returns true if the first position is available, otherwise false. + * You may use it together with ZugferdDocumentReader::getDocumentPositionAdditionalReferencedObjDocument. + * + * @return boolean + */ + public function nextDocumentPositionAdditionalReferencedObjDocument(): bool + { + $this->positionAddRefObjDocPointer++; + + $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []); + $tradeLineItem = $tradeLineItem[$this->positionPointer]; + + $addRefDoc = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getAdditionalReferencedDocument", [])); + + return isset($addRefDoc[$this->positionAddRefObjDocPointer]); + } + + /** + * Get additional Document reference on a position (Object detection). + * + * @param string|null $issuerAssignedId __BT-128, From EN 16931__ 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 __BT-128-0, From EN 16931__ Type of referenced document (See codelist UNTDID 1001) + * @param string|null $refTypeCode __BT-128-1, From EN 16931__ 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. + * @return ZugferdDocumentReader + */ + public function getDocumentPositionAdditionalReferencedObjDocument(?string &$issuerAssignedId, ?string &$typeCode, ?string &$refTypeCode): ZugferdDocumentReader + { + $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []); + $tradeLineItem = $tradeLineItem[$this->positionPointer]; + + $addRefDoc = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getAdditionalReferencedDocument", [])); + $addRefDoc = $addRefDoc[$this->positionAddRefObjDocPointer]; + + $typeCode = $this->getInvoiceValueByPathFrom($addRefDoc, "getTypeCode.value", ""); + $issuerAssignedId = $this->getInvoiceValueByPathFrom($addRefDoc, "getIssuerAssignedID.value", ""); + $refTypeCode = $this->getInvoiceValueByPathFrom($addRefDoc, "getReferenceTypeCode.value", ""); + + return $this; + } + + /** + * Get information on the booking reference (on position level). + * + * @param null|string &$id __BT-133, From EN 16931__ Posting reference of the byuer. If required, this reference shall be provided by the Buyer to the Seller prior to the issuing of the Invoice. + * @param null|string &$typeCode __BT-X-99, From EXTENDED__ Type of the posting reference + * @return ZugferdDocumentReader + */ + public function getDocumentPositionReceivableSpecifiedTradeAccountingAccount(?string &$id, ?string &$typeCode): ZugferdDocumentReader + { + $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []); + $tradeLineItem = $tradeLineItem[$this->positionPointer]; + + $id = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getReceivableSpecifiedTradeAccountingAccount.getId.value", ""); + $typeCode = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getReceivableSpecifiedTradeAccountingAccount.getTypeCode.value", ""); + + return $this; + } + + /** + * Function to return a value from $invoiceObject by path + * + * @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 + * + * @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 + * + * @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) { + $result[] = $itemValue; + } else { + $resultItem[$methodKey] = $itemValue; + } + } + + if (!$isFlat) { + $result[] = $resultItem; + } + } + + return $result; + } + + /** + * Convert to associative array + * + * @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; + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdDocumentValidator.php b/vendor/horstoeko/zugferd/src/ZugferdDocumentValidator.php new file mode 100644 index 000000000..21d5d48d8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdDocumentValidator.php @@ -0,0 +1,117 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdDocumentValidator +{ + /** + * The invoice document reference + */ + private $document; + + /** + * The validator instance + */ + private $validator; + + /** + * Constructor + * + * @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->getDocumentInvoiceObject(), null, ['xsd_rules']); + } + + /** + * Initialize the internal validator object + * + * @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 + * + * @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; + } + + /** + * Returns the internal invoice object from the document + * + * @return object + */ + private function getDocumentInvoiceObject() + { + $reflector = new \ReflectionClass($this->document); + + $method = $reflector->getMethod('getInvoiceObject'); + $method->setAccessible(true); + + return $method->invoke($this->document); + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdKositValidator.php b/vendor/horstoeko/zugferd/src/ZugferdKositValidator.php new file mode 100644 index 000000000..841fcdcae --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdKositValidator.php @@ -0,0 +1,1221 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdKositValidator +{ + /** + * The invoice document reference + * + * @var ZugferdDocument|string|null + */ + private $document; + + /** + * 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-2025-03-21/validator-configuration-xrechnung_3.0.2_2025-03-21.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 = ""; + + /** + * Internal flag which indicates that the cleanup of the base directory is disables + * + * @var boolean + */ + private $cleanupBaseDirectoryIsDisabled = false; + + /** + * Use remote validation (JAVA application is running in daemon mode on a remote host) + * + * @var boolean + */ + private $remoteModeEnabled = false; + + /** + * The remote hostname or -ip + * + * @var string + */ + private $remoteModeHost = ""; + + /** + * The remote host port + * + * @var integer + */ + private $remoteModePort = 0; + + /** + * Message Type "Internal Error" + */ + protected const MSG_TYPE_INTERNALERROR = 'internalerror'; + + /** + * Message Type "Validation Error" + */ + protected const MSG_TYPE_VALIDATIONERROR = 'validationerror'; + + /** + * Message Type "Validation Warning" + */ + protected const MSG_TYPE_VALIDATIONWARNING = 'validationwarning'; + + /** + * Message Type "Validation info" + */ + protected const MSG_TYPE_VALIDATIONINFORMATION = 'validationinformation'; + + /** + * Message Type "Process Output" + */ + protected const MSG_TYPE_PROCESSOUTPUT = 'processoutput'; + + /** + * Create a KositValidator-Instance by a given content string + * + * @param string $document + * @return ZugferdKositValidator + */ + public static function fromString(string $document): ZugferdKositValidator + { + return new ZugferdKositValidator($document); + } + + /** + * Create a KositValidator-Instance by a given ZugferdDocument (ZugferdDocumentReader, ZugferdDocumentBuilder) + * + * @param ZugferdDocument $zugferdDocument + * @return ZugferdKositValidator + */ + public static function fromZugferdDocument(ZugferdDocument $zugferdDocument): ZugferdKositValidator + { + return new ZugferdKositValidator($zugferdDocument); + } + + /** + * Constructor + * + * @param ZugferdDocument|string|null $document + */ + public function __construct($document = null) + { + $this->baseDirectory = sys_get_temp_dir(); + $this->setDocument($document); + } + + /** + * Set the ZugferdDocument instance to validate + * + * @param ZugferdDocument|string $document + * @return ZugferdKositValidator + */ + public function setDocument($document): ZugferdKositValidator + { + if (!is_string($document) && !($document instanceof ZugferdDocument)) { + return $this; + } + + $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; + } + + /** + * 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; + } + + /** + * Disable the usage of a remote host validation + * + * @return ZugferdKositValidator + */ + public function disableRemoteMode(): ZugferdKositValidator + { + $this->remoteModeEnabled = false; + + return $this; + } + + /** + * Enable the usage of a remote host validation + * + * @return ZugferdKositValidator + */ + public function enableRemoteMode(): ZugferdKositValidator + { + $this->remoteModeEnabled = true; + + return $this; + } + + /** + * Set the hostname or the ip of the remote host where the validation application + * is running in daemon mode + * + * @param string $remoteModeHost + * @return ZugferdKositValidator + */ + public function setRemoteModeHost(string $remoteModeHost): ZugferdKositValidator + { + if (StringUtils::stringIsNullOrEmpty($remoteModeHost)) { + return $this; + } + + $this->remoteModeHost = $remoteModeHost; + + return $this; + } + + /** + * Set the port of the remote host where the validation application + * is running in daemon mode + * + * @param integer $remoteModePort + * @return ZugferdKositValidator + */ + public function setRemoteModePort(int $remoteModePort): ZugferdKositValidator + { + if ($remoteModePort <= 0) { + return $this; + } + + $this->remoteModePort = $remoteModePort; + + return $this; + } + + /** + * Returns the full remote mode URL + * + * @return string + */ + public function getRemoteModeUrl(): string + { + return sprintf("http://%s:%s", $this->remoteModeHost, $this->remoteModePort); + } + + /** + * 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 the content of the document + * + * @return string + */ + private function getDocumentContent(): string + { + if (is_string($this->document)) { + return $this->document; + } + + return $this->document->serializeAsXml(); + } + + /** + * 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 + */ + private 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); + } + + /** + * Reset the internal filename where data of the PDF to validate are stored + * + * @return void + */ + private function resetFileToValidateFilename(): void + { + $this->fileToValidateFilename = ""; + } + + /** + * Get the full filename which contains the PDF to validate + * + * @return string + */ + private function resolveFileToValidateFilename(): string + { + if (StringUtils::stringIsNullOrEmpty($this->fileToValidateFilename)) { + $this->fileToValidateFilename = PathUtils::combinePathWithFile($this->resolveBaseDirectory(), sprintf('filetovalidate-%s-%s.xml', uniqid(), uniqid())); + } + + return $this->fileToValidateFilename; + } + + /** + * Clear the internal error bag + * + * @return void + */ + private function clearMessageBag(): void + { + $this->messageBag = []; + } + + /** + * Add message to error bag + * + * @param string|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 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 $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 $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 $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 $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 ($this->checkRequirementsGeneral() === false) { + return false; + } + + if ($this->remoteModeEnabled === true) { + return $this->checkRequirementsRemote(); + } + + return $this->checkRequirementsLocal(); + } + + /** + * CHeck general requirements (common for local and remote validation) + * + * @return boolean + */ + private function checkRequirementsGeneral(): bool + { + if (is_null($this->document)) { + $this->addToMessageBag("You must specify an instance of the ZugferdDocument class"); + return false; + } + + return true; + } + + /** + * CHeck requirements for usage on a local installation + * + * @return boolean + */ + private function checkRequirementsLocal(): bool + { + if ($this->remoteModeEnabled === true) { + return true; + } + + if (!extension_loaded('zip')) { + $this->addToMessageBag("ZIP extension not installed"); + return false; + } + + $executableFinder = new ExecutableFinder(); + + if (is_null($executableFinder->find('java'))) { + $this->addToMessageBag("JAVA not installed on this machine"); + return false; + } + + return true; + } + + /** + * CHeck requirements for usage on a remote host which is running the application + * in daemon mode + * + * @return boolean + */ + private function checkRequirementsRemote(): bool + { + if ($this->remoteModeEnabled !== true) { + return true; + } + + if (!extension_loaded('curl')) { + $this->addToMessageBag("PHP-Curl not installed or activated"); + return false; + } + + if (StringUtils::stringIsNullOrEmpty($this->remoteModeHost)) { + $this->addToMessageBag("You must specify the hostname or it's IP where the Validator is running in daemon mode"); + return false; + } + + if ($this->remoteModePort <= 0) { + $this->addToMessageBag("You must specify the port of the host where the Validator is running in daemon mode"); + return false; + } + + try { + $httpConnection = curl_init($this->getRemoteModeUrl()); + + curl_setopt($httpConnection, CURLOPT_RETURNTRANSFER, true); + curl_setopt($httpConnection, CURLOPT_HEADER, true); + curl_setopt($httpConnection, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($httpConnection, CURLOPT_ENCODING, ''); + curl_setopt($httpConnection, CURLOPT_AUTOREFERER, true); + curl_setopt($httpConnection, CURLOPT_CONNECTTIMEOUT, 10); + curl_setopt($httpConnection, CURLOPT_TIMEOUT, 120); + + $response = curl_exec($httpConnection); + + if ($response === false) { + $this->addToMessageBag("Failed to connect to the host where the Validator is running in daemon mode"); + $this->addToMessageBag(curl_error($httpConnection)); + return false; + } + + $responseStatusCode = curl_getinfo($httpConnection, CURLINFO_HTTP_CODE); + + curl_close($httpConnection); + + if (($responseStatusCode < 200) || ($responseStatusCode >= 400)) { + $this->addToMessageBag("Failed to connect to the host where the Validator is running in daemon mode"); + $this->addToMessageBag(curl_error($httpConnection)); + return false; + } + } catch (Throwable $throwable) { + $this->addToMessageBag($throwable); + return false; + } + + return true; + } + + /** + * Download required files + * + * @return boolean + */ + private function downloadRequiredFiles(): bool + { + if ($this->remoteModeEnabled === true) { + return true; + } + + if (!$this->runFileDownload($this->validatorDownloadUrl, $this->resolveAppZipFilename())) { + $this->addToMessageBag(sprintf("Unable to download from %s containing the JAVA-Application", $this->validatorDownloadUrl)); + return false; + } + + if (!$this->runFileDownload($this->validatorScenarioDownloadUrl, $this->resolveScenatioZipFilename())) { + $this->addToMessageBag(sprintf("Unable to download from %s containing the validation scenarios", $this->validatorScenarioDownloadUrl)); + return false; + } + + return true; + } + + /** + * Unpack required files + * + * @return boolean + */ + private function unpackRequiredFiles(): bool + { + if ($this->remoteModeEnabled === true) { + return true; + } + + $validatorAppFile = $this->resolveAppZipFilename(); + $validatorScenarioFile = $this->resolveScenatioZipFilename(); + + if (!$this->unpackRequiredFile($validatorAppFile)) { + $this->addToMessageBag(sprintf("Unable to unpack archive %s containing the JAVA-Application", $validatorAppFile)); + return false; + } + + if (!$this->unpackRequiredFile($validatorScenarioFile)) { + $this->addToMessageBag(sprintf("Unable to unpack archive %s containing the validation scenarios", $validatorScenarioFile)); + return false; + } + + return true; + } + + /** + * Unpack single required file + * + * @param string $filename + * @return boolean + */ + private function unpackRequiredFile(string $filename): bool + { + if ($this->remoteModeEnabled === true) { + return true; + } + + $zipArchive = new ZipArchive(); + + if ($zipArchive->open($filename) !== true) { + $this->addToMessageBag(sprintf("Failed to open ZIP archive %s", $filename)); + return false; + } + + $numFilesExists = 0; + + for ($i = 0; $i < $zipArchive->numFiles; $i++) { + $zipStat = $zipArchive->statIndex($i); + $realfilename = PathUtils::combinePathWithFile($this->resolveBaseDirectory(), $zipStat['name']); + if (file_exists($realfilename)) { + $numFilesExists++; + } + } + + if ($numFilesExists == $zipArchive->numFiles) { + return true; + } + + if (!$zipArchive->extractTo($this->resolveBaseDirectory())) { + $zipArchive->close(); + $this->addToMessageBag(sprintf("Failed to extract ZIP archive %s", $filename)); + return false; + } + + $zipArchive->close(); + + return true; + } + + /** + * Runs the validator java application + * + * @return boolean + */ + private function performValidation(): bool + { + if ($this->remoteModeEnabled === true) { + return $this->performValidationRemote(); + } + + return $this->performValidationLocal(); + } + + /** + * Runs the validator java application locally + * + * @return boolean + */ + private function performValidationLocal(): bool + { + if ($this->remoteModeEnabled === true) { + return true; + } + + $this->resetFileToValidateFilename(); + + if (file_put_contents($this->resolveFileToValidateFilename(), $this->getDocumentContent()) === 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->parseValidatorXmlReportByFile(); + return false; + } + + return true; + } + + /** + * Runs the validator java application on the remote host + * + * @return boolean + */ + private function performValidationRemote(): bool + { + if ($this->remoteModeEnabled !== true) { + return true; + } + + try { + $httpConnection = curl_init($this->getRemoteModeUrl()); + + curl_setopt($httpConnection, CURLOPT_RETURNTRANSFER, true); + curl_setopt($httpConnection, CURLOPT_HEADER, true); + curl_setopt($httpConnection, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($httpConnection, CURLOPT_ENCODING, ''); + curl_setopt($httpConnection, CURLOPT_AUTOREFERER, true); + curl_setopt($httpConnection, CURLOPT_CONNECTTIMEOUT, 10); + curl_setopt($httpConnection, CURLOPT_TIMEOUT, 120); + curl_setopt($httpConnection, CURLOPT_POST, true); + curl_setopt($httpConnection, CURLOPT_POSTFIELDS, $this->getDocumentContent()); + curl_setopt($httpConnection, CURLOPT_HTTPHEADER, ["Content-Type: application/xml"]); + + $response = curl_exec($httpConnection); + + if ($response === false) { + $this->addToMessageBag("Failed to connect to the host where the Validator is running in daemon mode"); + $this->addToMessageBag(curl_error($httpConnection)); + return false; + } + + $responseStatusCode = curl_getinfo($httpConnection, CURLINFO_HTTP_CODE); + + curl_close($httpConnection); + + if (($responseStatusCode < 200) || ($responseStatusCode >= 400)) { + if (preg_match('/<\?xml.*?\?>.*<\/.+>/s', $response, $matches)) { + $this->parseValidatorXmlReportByContent($matches[0]); + } + + return false; + } + } catch (Throwable $throwable) { + $this->addToMessageBag($throwable); + return false; + } + + return true; + } + + /** + * Parses the XML report from the validation app (JAVA application) and put errors + * to messagebag + * + * @return void + */ + private function parseValidatorXmlReportByFile(): void + { + $reportFilename = + PathUtils::combinePathWithFile( + $this->resolveBaseDirectory(), + FileUtils::getFilenameWithoutExtension($this->resolveFileToValidateFilename()) . '-report.xml' + ); + + if (!file_exists($reportFilename)) { + return; + } + + $domDocument = new DOMDocument(); + $domDocument->load($reportFilename); + + $this->parseValidatorXmlReportByDomDocument($domDocument); + } + + /** + * Parses the XML content string containing the response from the validation app (JAVA application) and put errors + * to messagebag + * + * @param string $xmlContent + * @return void + */ + private function parseValidatorXmlReportByContent(string $xmlContent): void + { + if (StringUtils::stringIsNullOrEmpty($xmlContent)) { + return; + } + + $domDocument = new DOMDocument(); + $domDocument->loadXML($xmlContent); + + $this->parseValidatorXmlReportByDomDocument($domDocument); + } + + /** + * Parses the XML DOMDocument containing the response from the validation app (JAVA application) and put errors + * to messagebag + * + * @param DOMDocument $domDocument + * @return void + */ + private function parseValidatorXmlReportByDomDocument(DOMDocument $domDocument): void + { + $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(sprintf("//rep:report/rep:scenarioMatched/rep:validationStepResult[@id='%s']/s:resource/s:name", $resultArea)); + $resourceName = isset($queryResult[0]) ? $queryResult[0]->nodeValue : $resultArea; + foreach ($messageTypeMaps as $messageType => $reportMessageType) { + $queryResult = $domXPath->query(sprintf("//rep:report/rep:scenarioMatched/rep:validationStepResult[@id='%s']/rep:message[@level='%s']", $resultArea, $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->remoteModeEnabled === true) { + return; + } + + 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 ($this->remoteModeEnabled === true) { + return; + } + + 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 + * @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 (Throwable $throwable) { + $this->addToMessageBag($throwable, 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 (Throwable $throwable) { + $this->addToMessageBag($throwable); + return false; + } + + return true; + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdObjectHelper.php b/vendor/horstoeko/zugferd/src/ZugferdObjectHelper.php new file mode 100644 index 000000000..ba156c4dd --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdObjectHelper.php @@ -0,0 +1,1810 @@ + + * @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 + */ + public const SUPPORTEDTMIMETYPES = [ + "application/pdf", + "image/png", + "image/jpeg", + "text/csv", + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "application/vnd.oasis.opendocument.spreadsheet", + "application/xml", + ]; + + /** + * Constructor + * + * @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; + } + + $indicatorType = $this->createClassInstance('udt\IndicatorType'); + + $this->tryCall($indicatorType, 'setIndicator', $value); + + return $indicatorType; + } + + /** + * 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; + } + + $noteType = $this->createClassInstance('ram\NoteType'); + + $this->tryCall($noteType, 'setContentCode', $this->getCodeType($contentCode)); + $this->tryCall($noteType, 'setSubjectCode', $this->getCodeType($subjectCode)); + $this->tryCall($noteType, 'setContent', $this->getTextType($content)); + + return $noteType; + } + + /** + * 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; + } + + $dateTimeStringAType = $this->createClassInstance('qdt\FormattedDateTimeType\DateTimeStringAType'); + $this->tryCall($dateTimeStringAType, "value", $dateTime->format("Ymd")); + $this->tryCall($dateTimeStringAType, "setFormat", "102"); + + $formattedDateTimeType = $this->createClassInstance('qdt\FormattedDateTimeType'); + $this->tryCall($formattedDateTimeType, "setDateTimeString", $dateTimeStringAType); + + return $formattedDateTimeType; + } + + /** + * 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; + } + + $dateTimeStringAType = $this->createClassInstance('udt\DateTimeType\DateTimeStringAType'); + $this->tryCall($dateTimeStringAType, "value", $dateTime->format("Ymd")); + $this->tryCall($dateTimeStringAType, "setFormat", "102"); + + $dateTimeType = $this->createClassInstance('udt\DateTimeType'); + $this->tryCall($dateTimeType, "setDateTimeString", $dateTimeStringAType); + + return $dateTimeType; + } + + /** + * Get date + * + * @param DateTime|null $dateTime + * @return object|null + */ + public function getDateType(?DateTime $dateTime = null): ?object + { + if (self::isAllNullOrEmpty(func_get_args())) { + return null; + } + + $dateStringAType = $this->createClassInstance('udt\DateType\DateStringAType'); + $this->tryCall($dateStringAType, "value", $dateTime->format("Ymd")); + $this->tryCall($dateStringAType, "setFormat", "102"); + + $dateType = $this->createClassInstance('udt\DateType'); + $this->tryCall($dateType, "setDateString", $dateStringAType); + + return $dateType; + } + + /** + * 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; + } + + $amountType = $this->createClassInstance('udt\AmountType'); + + $this->tryCall($amountType, "value", $value); + $this->tryCall($amountType, "setCurrencyID", $currencyCode); + + return $amountType; + } + + /** + * Representation of Percdnt + * + * @param float|null $value + * @return object|null + */ + public function getPercentType(?float $value): ?object + { + if (self::isAllNullOrEmpty(func_get_args())) { + return null; + } + + $percentType = $this->createClassInstance('udt\PercentType'); + + $this->tryCall($percentType, "value", $value); + + return $percentType; + } + + /** + * 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; + } + + $quantityType = $this->createClassInstance('udt\QuantityType'); + + $this->tryCall($quantityType, "value", $value); + $this->tryCall($quantityType, "setUnitCode", $unitCode); + + return $quantityType; + } + + /** + * 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; + } + + $measureType = $this->createClassInstance('udt\MeasureType'); + + $this->tryCall($measureType, "value", $value); + $this->tryCall($measureType, "setUnitCode", $unitCode); + + return $measureType; + } + + /** + * 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; + } + + $taxCategoryCodeType = $this->createClassInstance('qdt\TaxCategoryCodeType'); + + $this->tryCall($taxCategoryCodeType, "value", $taxCategoryCode); + + return $taxCategoryCodeType; + } + + /** + * 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; + } + + $taxTypeCodeType = $this->createClassInstance('qdt\TaxTypeCodeType'); + + $this->tryCall($taxTypeCodeType, "value", $taxTypeCode); + + return $taxTypeCodeType; + } + + /** + * 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; + } + + $timeReferenceCodeType = $this->createClassInstance('qdt\TimeReferenceCodeType'); + + $this->tryCall($timeReferenceCodeType, "value", $value); + + return $timeReferenceCodeType; + } + + /** + * 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; + } + + $specifiedPeriodType = $this->createClassInstance('ram\SpecifiedPeriodType'); + + $this->tryCall($specifiedPeriodType, 'setDescription', $this->getTextType($description)); + $this->tryCall($specifiedPeriodType, 'setStartDateTime', $this->getDateTimeType($startDate)); + $this->tryCall($specifiedPeriodType, 'setEndDateTime', $this->getDateTimeType($endDate)); + $this->tryCall($specifiedPeriodType, 'setCompleteDateTime', $this->getDateTimeType($completeDate)); + + return $specifiedPeriodType; + } + + /** + * 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; + } + + $binaryObjectType = $this->createClassInstance('udt\BinaryObjectType'); + + $this->tryCall($binaryObjectType, "value", $binaryData); + $this->tryCall($binaryObjectType, "setMimeCode", $mimetype); + $this->tryCall($binaryObjectType, "setFilename", $filename); + + return $binaryObjectType; + } + + /** + * 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 $issueDate + * @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 $issueDate = null, ?string $binaryDataFilename = null): ?object + { + if (self::isAllNullOrEmpty(func_get_args())) { + return null; + } + + $referencedDocumentType = $this->createClassInstance('ram\ReferencedDocumentType', $issuerAssignedId); + + $this->tryCall($referencedDocumentType, 'setIssuerAssignedID', $this->getIdType($issuerAssignedId)); + $this->tryCall($referencedDocumentType, 'setURIID', $this->getIdType($uriId)); + $this->tryCall($referencedDocumentType, 'setLineID', $this->getIdType($lineId)); + $this->tryCall($referencedDocumentType, 'setTypeCode', $this->getCodeType($typeCode)); + $this->tryCall($referencedDocumentType, 'setReferenceTypeCode', $this->getCodeType($refTypeCode)); + $this->tryCall($referencedDocumentType, 'setFormattedIssueDateTime', $this->getFormattedDateTimeType($issueDate)); + + foreach ($this->ensureStringArray($name) as $name) { + $this->tryCallAll($referencedDocumentType, ['addToName', 'setName'], $this->getTextType($name)); + } + + if (StringUtils::stringIsNullOrEmpty($binaryDataFilename) === false && FileUtils::fileExists($binaryDataFilename)) { + $mimeDb = new MimeDb(); + $mimeTypes = $mimeDb->findAllMimeTypesByExtension(FileUtils::getFileExtension($binaryDataFilename)); + if (!is_null($mimeTypes)) { + $mimeTypesSupported = array_intersect($mimeTypes, self::SUPPORTEDTMIMETYPES); + if ($mimeTypesSupported !== []) { + $content = FileUtils::fileToBase64($binaryDataFilename); + $this->tryCall( + $referencedDocumentType, + 'setAttachmentBinaryObject', + $this->getBinaryObjectType($content, $mimeTypesSupported[0], FileUtils::getFilenameWithExtension($binaryDataFilename)) + ); + } else { + throw new ZugferdUnsupportedMimetype(); + } + } else { + throw new ZugferdUnsupportedMimetype(); + } + } + + return $referencedDocumentType; + } + + /** + * 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; + } + + return $this->createClassInstance('qdt\CountryIDType', $id); + } + + /** + * 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; + } + + $tradeCountryType = $this->createClassInstance('ram\TradeCountryType'); + + $this->tryCall($tradeCountryType, 'setID', $this->getCountryIDType($id)); + + return $tradeCountryType; + } + + /** + * Return the main 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 + */ + public function getCrossIndustryInvoice() + { + $crossIndustryInvoice = $this->createClassInstance('rsm\CrossIndustryInvoice'); + + $crossIndustryInvoice->setExchangedDocumentContext($this->createClassInstance('ram\ExchangedDocumentContextType')); + $crossIndustryInvoice->setExchangedDocument($this->createClassInstance('ram\ExchangedDocumentType')); + $crossIndustryInvoice->setSupplyChainTradeTransaction($this->createClassInstance('ram\SupplyChainTradeTransactionType')); + $crossIndustryInvoice->getExchangedDocumentContext()->setGuidelineSpecifiedDocumentContextParameter($this->createClassInstance('ram\DocumentContextParameterType')); + $crossIndustryInvoice->getExchangedDocumentContext()->getGuidelineSpecifiedDocumentContextParameter()->setID($this->getIdType($this->profiledef['contextparameter'])); + if ($this->profiledef['businessprocess']) { + $crossIndustryInvoice->getExchangedDocumentContext()->setBusinessProcessSpecifiedDocumentContextParameter($this->createClassInstance('ram\DocumentContextParameterType')); + $crossIndustryInvoice->getExchangedDocumentContext()->getBusinessProcessSpecifiedDocumentContextParameter()->setID($this->getIdType($this->profiledef['businessprocess'])); + } + + $crossIndustryInvoice->getSupplyChainTradeTransaction()->setApplicableHeaderTradeAgreement($this->createClassInstance('ram\HeaderTradeAgreementType')); + $crossIndustryInvoice->getSupplyChainTradeTransaction()->setApplicableHeaderTradeDelivery($this->createClassInstance('ram\HeaderTradeDeliveryType')); + $crossIndustryInvoice->getSupplyChainTradeTransaction()->setApplicableHeaderTradeSettlement($this->createClassInstance('ram\HeaderTradeSettlementType')); + + return $crossIndustryInvoice; + } + + /** + * 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; + } + + return $this->getTradePartyAllowEmpty($name, $id, $description); + } + + /** + * Tradeparty type (allow all nulls) + * + * @param string|null $name + * @param string|null $id + * @param string|null $description + * @return object|null + */ + public function getTradePartyAllowEmpty(?string $name = null, ?string $id = null, ?string $description = null): ?object + { + $tradePartyType = $this->createClassInstance('ram\TradePartyType'); + + $this->tryCall($tradePartyType, "addToID", $this->getIdType($id)); + $this->tryCall($tradePartyType, "setName", $this->getTextType($name)); + $this->tryCall($tradePartyType, "setDescription", $this->getTextType($description)); + + return $tradePartyType; + } + + /** + * 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; + } + + $tradeAddressType = $this->createClassInstance('ram\TradeAddressType'); + + $this->tryCall($tradeAddressType, "setLineOne", $this->getTextType($lineOne)); + $this->tryCall($tradeAddressType, "setLineTwo", $this->getTextType($lineTwo)); + $this->tryCall($tradeAddressType, "setLineThree", $this->getTextType($lineThree)); + $this->tryCall($tradeAddressType, "setPostcodeCode", $this->getCodeType($postCode)); + $this->tryCall($tradeAddressType, "setCityName", $this->getTextType($city)); + $this->tryCall($tradeAddressType, "setCountryID", $this->getCountryIDType($country)); + $this->tryCall($tradeAddressType, "setCountrySubDivisionName", $this->getTextType($subDivision)); + + return $tradeAddressType; + } + + /** + * 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; + } + + $legalOrganizationType = $this->createClassInstance('ram\LegalOrganizationType', $legalOrgName); + + $this->tryCall($legalOrganizationType, "setID", $this->getIdType($legalOrgId, $legalOrgType)); + $this->tryCall($legalOrganizationType, "setTradingBusinessName", $this->getTextType($legalOrgName)); + + return $legalOrganizationType; + } + + /** + * Contact type + * + * @param string|null $contactPersonName + * @param string|null $contactDepartmentName + * @param string|null $contactPhoneNo + * @param string|null $contactFaxNo + * @param string|null $contactEmailAddress + * @return object|null + */ + public function getTradeContact(?string $contactPersonName = null, ?string $contactDepartmentName = null, ?string $contactPhoneNo = null, ?string $contactFaxNo = null, ?string $contactEmailAddress = null): ?object + { + if (self::isAllNullOrEmpty(func_get_args())) { + return null; + } + + $tradeContactType = $this->createClassInstance('ram\TradeContactType', $contactPersonName); + + $contactPhoneNo = $this->getUniversalCommunicationType($contactPhoneNo, null, null); + $contactFaxNo = $this->getUniversalCommunicationType($contactFaxNo, null, null); + $contactEmailAddress = $this->getUniversalCommunicationType(null, $contactEmailAddress); + + $this->tryCall($tradeContactType, "setPersonName", $this->getTextType($contactPersonName)); + $this->tryCall($tradeContactType, "setDepartmentName", $this->getTextType($contactDepartmentName)); + $this->tryCall($tradeContactType, "setTelephoneUniversalCommunication", $contactPhoneNo); + $this->tryCall($tradeContactType, "setFaxUniversalCommunication", $contactFaxNo); + $this->tryCall($tradeContactType, "setEmailURIUniversalCommunication", $contactEmailAddress); + + return $tradeContactType; + } + + /** + * 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; + } + + $communicationType = $this->createClassInstance('ram\UniversalCommunicationType'); + + $this->tryCall($communicationType, "setCompleteNumber", $this->getTextType($number)); + $this->tryCall($communicationType, "setURIID", $this->getIdType($uriId, $uriScheme)); + + return $communicationType; + } + + /** + * 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; + } + + $taxRegistrationType = $this->createClassInstance('ram\TaxRegistrationType'); + + $this->tryCall($taxRegistrationType, "setID", $this->getIdType($taxRegId, $taxRegType)); + + return $taxRegistrationType; + } + + /** + * 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; + } + + $tradeDeliveryTermsType = $this->createClassInstance('ram\TradeDeliveryTermsType'); + + $this->tryCall($tradeDeliveryTermsType, "setDeliveryTypeCode", $this->getTradeDeliveryTermsCodeType($code)); + + return $tradeDeliveryTermsType; + } + + /** + * Delivery terms code type + * + * @param string|null $code + * @return object|null + */ + public function getTradeDeliveryTermsCodeType(?string $code = null): ?object + { + if (self::isAllNullOrEmpty(func_get_args())) { + return null; + } + + return $this->createClassInstance('qdt\DeliveryTermsCodeType', $code); + } + + /** + * 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; + } + + $procuringProjectType = $this->createClassInstance('ram\ProcuringProjectType'); + + $this->tryCall($procuringProjectType, "setID", $this->getIdType($id)); + $this->tryCall($procuringProjectType, "setName", $this->getTextType($name)); + + return $procuringProjectType; + } + + /** + * Undocumented function + * + * @param DateTime|null $date + * @return object|null + */ + public function getSupplyChainEventType(?DateTime $date = null): ?object + { + if (self::isAllNullOrEmpty(func_get_args())) { + return null; + } + + $supplyChainEventType = $this->createClassInstance('ram\SupplyChainEventType'); + + $this->tryCall($supplyChainEventType, "setOccurrenceDateTime", $this->getDateTimeType($date)); + + return $supplyChainEventType; + } + + /** + * 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; + } + + // At the moment PCI Security Standards Council has defined that the first 6 digits and + // last 4 digits are the maximum number of digits to be shown. + + $id = substr($id, 0, 6) . substr($id, -4); + + $tradeSettlementFinancialCardType = $this->createClassInstance('ram\TradeSettlementFinancialCardType'); + + $this->tryCall($tradeSettlementFinancialCardType, "setID", $this->getIdType($id, $type)); + $this->tryCall($tradeSettlementFinancialCardType, "setCardholderName", $this->getTextType($holderName)); + + return $tradeSettlementFinancialCardType; + } + + /** + * 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; + } + + $debtorFinancialAccountType = $this->createClassInstance('ram\DebtorFinancialAccountType'); + + $this->tryCall($debtorFinancialAccountType, "setIBANID", $this->getIdType($iban)); + + return $debtorFinancialAccountType; + } + + /** + * 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; + } + + $creditorFinancialAccountType = $this->createClassInstance('ram\CreditorFinancialAccountType'); + + $this->tryCall($creditorFinancialAccountType, "setIBANID", $this->getIdType($iban)); + $this->tryCall($creditorFinancialAccountType, "setAccountName", $this->getTextType($accountName)); + $this->tryCall($creditorFinancialAccountType, "setProprietaryID", $this->getIdType($proprietaryId)); + + return $creditorFinancialAccountType; + } + + /** + * Undocumented function + * + * @param string|null $bic + * @return object|null + */ + public function getCreditorFinancialInstitutionType(?string $bic = null): ?object + { + if (self::isAllNullOrEmpty(func_get_args())) { + return null; + } + + $creditorFinancialInstitutionType = $this->createClassInstance('ram\CreditorFinancialInstitutionType'); + + $this->tryCall($creditorFinancialInstitutionType, "setBICID", $this->getIdType($bic)); + + return $creditorFinancialInstitutionType; + } + + /** + * 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; + } + + $tradeSettlementPaymentMeansType = $this->createClassInstance('ram\TradeSettlementPaymentMeansType'); + + $this->tryCall($tradeSettlementPaymentMeansType, "setTypeCode", $this->getCodeType($typeCode)); + $this->tryCall($tradeSettlementPaymentMeansType, "setInformation", $this->getTextType($information)); + + return $tradeSettlementPaymentMeansType; + } + + /** + * Get instance of TradePaymentTermsType + * + * @param null|string $description + * @param null|DateTime $dueDate + * @param null|string $directDebitMandateID + * @param null|float $partialPaymentAmount + * @return null|object + */ + public function getTradePaymentTermsType(?string $description = null, ?DateTime $dueDate = null, ?string $directDebitMandateID = null, ?float $partialPaymentAmount = null): ?object + { + if (self::isAllNullOrEmpty(func_get_args())) { + return null; + } + + $tradePaymentTermsType = $this->createClassInstance('ram\TradePaymentTermsType'); + + $this->tryCall($tradePaymentTermsType, "setDescription", $this->getTextType($description)); + $this->tryCall($tradePaymentTermsType, "setDueDateDateTime", $this->getDateTimeType($dueDate)); + $this->tryCall($tradePaymentTermsType, "setDirectDebitMandateID", $this->getIdType($directDebitMandateID)); + $this->tryCall($tradePaymentTermsType, "setPartialPaymentAmount", $this->getAmountType($partialPaymentAmount)); + + return $tradePaymentTermsType; + } + + /** + * 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; + } + + $tradePaymentDiscountTermsType = $this->createClassInstance('ram\TradePaymentDiscountTermsType'); + + $this->tryCall($tradePaymentDiscountTermsType, "setBasisDateTime", $this->getDateTimeType($basisDateTime)); + $this->tryCall($tradePaymentDiscountTermsType, "setBasisPeriodMeasure", $this->getMeasureType($basisPeriodMeasureValue, $basisPeriodMeasureUnitCode)); + $this->tryCall($tradePaymentDiscountTermsType, "setBasisAmount", $this->getAmountType($basisAmount)); + $this->tryCall($tradePaymentDiscountTermsType, "setCalculationPercent", $this->getPercentType($calculationPercent)); + $this->tryCall($tradePaymentDiscountTermsType, "setActualDiscountAmount", $this->getAmountType($actualDiscountAmount)); + + return $tradePaymentDiscountTermsType; + } + + /** + * Get instance of TradePaymentPenaltyTermsType + * + * @param DateTime|null $basisDateTime + * @param float|null $basisPeriodMeasureValue + * @param string|null $basisPeriodMeasureUnitCode + * @param float|null $basisAmount + * @param float|null $calculationPercent + * @param float|null $actualPenaltyAmount + * @return object|null + */ + public function getTradePaymentPenaltyTermsType(?DateTime $basisDateTime = null, ?float $basisPeriodMeasureValue = null, ?string $basisPeriodMeasureUnitCode = null, ?float $basisAmount = null, ?float $calculationPercent = null, ?float $actualPenaltyAmount = null): ?object + { + if (self::isAllNullOrEmpty(func_get_args())) { + return null; + } + + $tradePaymentDiscountTermsType = $this->createClassInstance('ram\TradePaymentPenaltyTermsType'); + + $this->tryCall($tradePaymentDiscountTermsType, "setBasisDateTime", $this->getDateTimeType($basisDateTime)); + $this->tryCall($tradePaymentDiscountTermsType, "setBasisPeriodMeasure", $this->getMeasureType($basisPeriodMeasureValue, $basisPeriodMeasureUnitCode)); + $this->tryCall($tradePaymentDiscountTermsType, "setBasisAmount", $this->getAmountType($basisAmount)); + $this->tryCall($tradePaymentDiscountTermsType, "setCalculationPercent", $this->getPercentType($calculationPercent)); + $this->tryCall($tradePaymentDiscountTermsType, "setActualPenaltyAmount", $this->getAmountType($actualPenaltyAmount)); + + return $tradePaymentDiscountTermsType; + } + + /** + * 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; + } + + $tradeTaxType = $this->createClassInstance('ram\TradeTaxType'); + + $this->tryCall($tradeTaxType, "setCalculatedAmount", $this->getAmountType($calculatedAmount)); + $this->tryCall($tradeTaxType, "setTypeCode", $this->getTaxTypeCodeType($typeCode)); + $this->tryCall($tradeTaxType, "setExemptionReason", $this->getTextType($exemptionReason)); + $this->tryCall($tradeTaxType, "setBasisAmount", $this->getAmountType($basisAmount)); + $this->tryCall($tradeTaxType, "setLineTotalBasisAmount", $this->getAmountType($lineTotalBasisAmount)); + $this->tryCall($tradeTaxType, "setAllowanceChargeBasisAmount", $this->getAmountType($allowanceChargeBasisAmount)); + $this->tryCall($tradeTaxType, "setCategoryCode", $this->getTaxCategoryCodeType($categoryCode)); + $this->tryCall($tradeTaxType, "setExemptionReasonCode", $this->getCodeType($exemptionReasonCode)); + $this->tryCall($tradeTaxType, "setTaxPointDate", $this->getDateType($taxPointDate)); + $this->tryCall($tradeTaxType, "setDueDateTypeCode", $this->getTimeReferenceCodeType($dueDateTypeCode)); + $this->tryCall($tradeTaxType, "setRateApplicablePercent", $this->getPercentType($rateApplicablePercent)); + + return $tradeTaxType; + } + + /** + * 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; + } + + $tradeAllowanceChargeType = $this->createClassInstance('ram\TradeAllowanceChargeType'); + + $this->tryCall($tradeAllowanceChargeType, "setChargeIndicator", $this->getIndicatorType($isCharge)); + $this->tryCall($tradeAllowanceChargeType, "setSequenceNumeric", $this->getNumericType($sequence)); + $this->tryCall($tradeAllowanceChargeType, "setCalculationPercent", $this->getPercentType($calculationPercent)); + $this->tryCall($tradeAllowanceChargeType, "setBasisAmount", $this->getAmountType($basisAmount)); + $this->tryCall($tradeAllowanceChargeType, "setBasisQuantity", $this->getQuantityType($basisQuantity, $basisQuantityUnitCode)); + $this->tryCall($tradeAllowanceChargeType, "setActualAmount", $this->getAmountType($actualAmount)); + $this->tryCall($tradeAllowanceChargeType, "setReasonCode", $this->getCodeType($reasonCode)); + $this->tryCall($tradeAllowanceChargeType, "setReason", $this->getTextType($reason)); + + if (!is_null($taxCategoryCode) && !is_null($taxTypeCode)) { + $this->tryCall($tradeAllowanceChargeType, "setCategoryTradeTax", $this->getTradeTaxType($taxCategoryCode, $taxTypeCode, null, null, $rateApplicablePercent)); + } + + return $tradeAllowanceChargeType; + } + + /** + * 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; + } + + $logisticsServiceChargeType = $this->createClassInstance('ram\LogisticsServiceChargeType'); + + $this->tryCall($logisticsServiceChargeType, "setDescription", $this->getTextType($description)); + $this->tryCall($logisticsServiceChargeType, "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($logisticsServiceChargeType, "addToAppliedTradeTax", $taxBreakdown); + } + } + + return $logisticsServiceChargeType; + } + + /** + * 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; + } + + $tradeSettlementHeaderMonetarySummationType = $this->createClassInstance('ram\TradeSettlementHeaderMonetarySummationType'); + + $this->tryCall($tradeSettlementHeaderMonetarySummationType, "setLineTotalAmount", $this->getAmountType($lineTotalAmount)); + $this->tryCall($tradeSettlementHeaderMonetarySummationType, "setChargeTotalAmount", $this->getAmountType($chargeTotalAmount)); + $this->tryCall($tradeSettlementHeaderMonetarySummationType, "setAllowanceTotalAmount", $this->getAmountType($allowanceTotalAmount)); + $this->tryCall($tradeSettlementHeaderMonetarySummationType, "setTaxBasisTotalAmount", $this->getAmountType($taxBasisTotalAmount)); + $this->tryCallAll($tradeSettlementHeaderMonetarySummationType, ["addToTaxTotalAmount", "setTaxTotalAmount"], $this->getAmountType($taxTotalAmount)); + $this->tryCall($tradeSettlementHeaderMonetarySummationType, "setRoundingAmount", $this->getAmountType($roundingAmount)); + $this->tryCall($tradeSettlementHeaderMonetarySummationType, "setGrandTotalAmount", $this->getAmountType($grandTotalAmount)); + $this->tryCall($tradeSettlementHeaderMonetarySummationType, "setTotalPrepaidAmount", $this->getAmountType($totalPrepaidAmount)); + $this->tryCall($tradeSettlementHeaderMonetarySummationType, "setDuePayableAmount", $this->getAmountType($duePayableAmount)); + + return $tradeSettlementHeaderMonetarySummationType; + } + + /** + * 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; + } + + $tradeAccountingAccountType = $this->createClassInstance('ram\TradeAccountingAccountType'); + + $this->tryCall($tradeAccountingAccountType, "setID", $this->getIdType($id)); + $this->tryCall($tradeAccountingAccountType, "setTypeCode", $this->getCodeType($typeCode)); + + return $tradeAccountingAccountType; + } + + /** + * 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; + } + + $documentLineDocumentType = $this->createClassInstance('ram\DocumentLineDocumentType'); + + $this->tryCall($documentLineDocumentType, "setLineID", $this->getIdType($lineId)); + + return $documentLineDocumentType; + } + + /** + * 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; + } + + $supplyChainTradeLineItemType = $this->createClassInstance('ram\SupplyChainTradeLineItemType'); + + $doclinedoc = $this->getDocumentLineDocumentType($lineId); + $lineTradeAgreementType = $this->createClassInstance('ram\LineTradeAgreementType'); + $lineTradeDeliveryType = $this->createClassInstance('ram\LineTradeDeliveryType'); + $lineTradeSettlementType = $this->createClassInstance('ram\LineTradeSettlementType'); + + $this->tryCall($supplyChainTradeLineItemType, "setAssociatedDocumentLineDocument", $doclinedoc); + $this->tryCall($doclinedoc, "setLineStatusCode", $this->getCodeType($lineStatusCode)); + $this->tryCall($doclinedoc, "setLineStatusReasonCode", $this->getCodeType($lineStatusReasonCode)); + if ($isTextPosition == false) { + $this->tryCall($supplyChainTradeLineItemType, "setSpecifiedLineTradeAgreement", $lineTradeAgreementType); + $this->tryCall($supplyChainTradeLineItemType, "setSpecifiedLineTradeDelivery", $lineTradeDeliveryType); + } + + $this->tryCall($supplyChainTradeLineItemType, "setSpecifiedLineTradeSettlement", $lineTradeSettlementType); + + return $supplyChainTradeLineItemType; + } + + /** + * 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 + * @param string|null $industryAssignedID + * @param string|null $modelID + * @param string|null $batchID + * @param string|null $brandName + * @param string|null $modelName + * @return object|null + */ + public function getTradeProductType(?string $name = null, ?string $description = null, ?string $sellerAssignedID = null, ?string $buyerAssignedID = null, ?string $globalIDType = null, ?string $globalID = null, ?string $industryAssignedID = null, ?string $modelID = null, ?string $batchID = null, ?string $brandName = null, ?string $modelName = null): ?object + { + if (self::isAllNullOrEmpty(func_get_args())) { + return null; + } + + $tradeProductType = $this->createClassInstance('ram\TradeProductType'); + + $this->tryCall($tradeProductType, "setGlobalID", $this->getIdType($globalID, $globalIDType)); + $this->tryCall($tradeProductType, "setSellerAssignedID", $this->getIdType($sellerAssignedID)); + $this->tryCall($tradeProductType, "setBuyerAssignedID", $this->getIdType($buyerAssignedID)); + $this->tryCall($tradeProductType, "setName", $this->getTextType($name)); + $this->tryCall($tradeProductType, "setDescription", $this->getTextType($description)); + $this->tryCall($tradeProductType, "setIndustryAssignedID", $this->getIdType($industryAssignedID)); + $this->tryCall($tradeProductType, "setModelID", $this->getIdType($modelID)); + $this->tryCall($tradeProductType, "addToBatchID", $this->getIdType($batchID)); + $this->tryCall($tradeProductType, "setBrandName", $this->getTextType($brandName)); + $this->tryCall($tradeProductType, "setModelName", $this->getTextType($modelName)); + + return $tradeProductType; + } + + /** + * 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; + } + + $productCharacteristicType = $this->createClassInstance('ram\ProductCharacteristicType'); + + $this->tryCall($productCharacteristicType, "setTypeCode", $this->getCodeType($typeCode)); + $this->tryCall($productCharacteristicType, "setDescription", $this->getTextType($description)); + $this->tryCall($productCharacteristicType, "setValueMeasure", $this->getMeasureType($valueMeasure, $valueMeasureUnitCode)); + $this->tryCall($productCharacteristicType, "setValue", $this->getTextType($value)); + + return $productCharacteristicType; + } + + /** + * 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; + } + + $productClassificationType = $this->createClassInstance('ram\ProductClassificationType'); + + $this->tryCall($productClassificationType, "setClassCode", $this->getCodeType2($classCode, $listID, $listVersionID)); + $this->tryCall($productClassificationType, "setClassName", $this->getTextType($className)); + + return $productClassificationType; + } + + /** + * Get product reference product + * + * @param string|null $globalID + * @param string|null $globalIDType + * @param string|null $sellerAssignedID + * @param string|null $buyerAssignedID + * @param string|null $industryAssignedID + * @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 $industryAssignedID, ?string $name, ?string $description, ?float $unitQuantity, ?string $unitCode): ?object + { + if (self::isAllNullOrEmpty(func_get_args())) { + return null; + } + + $referencedProductType = $this->createClassInstance('ram\ReferencedProductType'); + + $this->tryCallAll($referencedProductType, ["addToGlobalID", "setGlobalID"], $this->getIdType($globalID, $globalIDType)); + $this->tryCall($referencedProductType, "setSellerAssignedID", $this->getIdType($sellerAssignedID)); + $this->tryCall($referencedProductType, "setBuyerAssignedID", $this->getIdType($buyerAssignedID)); + $this->tryCall($referencedProductType, "setIndustryAssignedID", $this->getIdType($industryAssignedID)); + $this->tryCall($referencedProductType, "setName", $this->getTextType($name)); + $this->tryCall($referencedProductType, "setDescription", $this->getTextType($description)); + $this->tryCall($referencedProductType, "setUnitQuantity", $this->getQuantityType($unitQuantity, $unitCode)); + + return $referencedProductType; + } + + /** + * 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; + } + + $tradePriceType = $this->createClassInstance('ram\TradePriceType'); + + $this->tryCall($tradePriceType, "setChargeAmount", $this->getAmountType($amount)); + $this->tryCall($tradePriceType, "setBasisQuantity", $this->getQuantityType($basisQuantity, $basisQuantityUnitCode)); + + return $tradePriceType; + } + + /** + * Get Line Summation + * + * @param null|float $lineTotalAmount + * @param null|float $chargeTotalAmount + * @param null|float $allowanceTotalAmount + * @param null|float $taxTotalAmount + * @param null|float $grandTotalAmount + * @param null|float $totalAllowanceChargeAmount + * @return null|object + */ + public function getTradeSettlementLineMonetarySummationType(?float $lineTotalAmount = null, ?float $chargeTotalAmount = null, ?float $allowanceTotalAmount = null, ?float $taxTotalAmount = null, ?float $grandTotalAmount = null, ?float $totalAllowanceChargeAmount = null): ?object + { + if (self::isAllNullOrEmpty(func_get_args())) { + return null; + } + + $tradeSettlementLineMonetarySummationType = $this->createClassInstance('ram\TradeSettlementLineMonetarySummationType'); + + $this->tryCall($tradeSettlementLineMonetarySummationType, "setLineTotalAmount", $this->getAmountType($lineTotalAmount)); + $this->tryCall($tradeSettlementLineMonetarySummationType, "setChargeTotalAmount", $this->getAmountType($chargeTotalAmount)); + $this->tryCall($tradeSettlementLineMonetarySummationType, "setAllowanceTotalAmount", $this->getAmountType($allowanceTotalAmount)); + $this->tryCall($tradeSettlementLineMonetarySummationType, "setTaxTotalAmount", $this->getAmountType($taxTotalAmount)); + $this->tryCall($tradeSettlementLineMonetarySummationType, "setGrandTotalAmount", $this->getAmountType($grandTotalAmount)); + $this->tryCall($tradeSettlementLineMonetarySummationType, "setTotalAllowanceChargeAmount", $this->getAmountType($totalAllowanceChargeAmount)); + + return $tradeSettlementLineMonetarySummationType; + } + + /** + * 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; + } + + $tradeCurrencyExchangeType = $this->createClassInstance('ram\TradeCurrencyExchangeType'); + + $this->tryCall($tradeCurrencyExchangeType, "setSourceCurrencyCode", $this->getIdType($sourceCurrencyCode)); + $this->tryCall($tradeCurrencyExchangeType, "setTargetCurrencyCode", $this->getIdType($targetCurrencyCode)); + $this->tryCall($tradeCurrencyExchangeType, "setConversionRate", $this->getRateType($rate)); + $this->tryCall($tradeCurrencyExchangeType, "setConversionRateDateTime", $this->getDateTimeType($rateDateTime)); + + return $tradeCurrencyExchangeType; + } + + /** + * 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; + } + + $dateTimeString = trim($dateTimeString); + + if ($format == "102") { + return DateTime::createFromFormat("Ymd", $dateTimeString); + } + + if ($format == "101") { + return DateTime::createFromFormat("ymd", $dateTimeString); + } + + if ($format == "201") { + return DateTime::createFromFormat("ymdHi", $dateTimeString); + } + + if ($format == "202") { + return DateTime::createFromFormat("ymdHis", $dateTimeString); + } + + if ($format == "203") { + return DateTime::createFromFormat("YmdHi", $dateTimeString); + } + + if ($format == "204") { + return DateTime::createFromFormat("YmdHis", $dateTimeString); + } + + if ($format == "610") { + return DateTime::createFromFormat("Ym", $dateTimeString)->modify('first day of')->modify('midnight'); + } + + throw new ZugferdUnknownDateFormatException($format); + } + + /** + * Get Exchange rate type instance + * + * @param float|null $rateValue + * @return object|null + */ + public function getRateType(?float $rateValue): ?object + { + $rateType = $this->createClassInstance('udt\RateType'); + + $this->tryCall($rateType, "value", $rateValue); + + return $rateType; + } + + /** + * 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 + * + * @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 + * + * @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 + * + * @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 + * + * @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 + * + * @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 + * + * @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 + * + * @param mixed $input + * @return array + */ + public function ensureStringArray($input): array + { + if (is_array($input)) { + return $input; + } + + return [(string)$input]; + } + + /** + * Ensure array + * + * @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 + * + * @param mixed $value + * @return boolean + */ + public static function isNullOrEmpty($value) + { + if ($value === null) { + return true; + } + + return !is_object($value) && (string)$value === ""; + } + + /** + * Checks if all function arguments are null or empty + * + * @param array $args + * @return boolean + */ + public static function isAllNullOrEmpty(array $args): bool + { + foreach ($args as $arg) { + if ($arg instanceof DateTime) { + return false; + } + + if (!self::isNullOrEmpty($arg)) { + return false; + } + } + + return true; + } + + /** + * Checks if all function arguments are null or empty + * + * @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; + } + } elseif (self::isNullOrEmpty($arg)) { + return true; + } + } + + return false; + } + + /** + * 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); + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdPackageVersion.php b/vendor/horstoeko/zugferd/src/ZugferdPackageVersion.php new file mode 100644 index 000000000..6d4338187 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdPackageVersion.php @@ -0,0 +1,50 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +final class ZugferdPackageVersion +{ + /** + * Get the installed version of this library + * + * @return string + */ + public static function getInstalledVersion(): string + { + try { + return ComposerInstalledVersions::getVersion('horstoeko/zugferd') ?? self::getDefaultVersion(); + } catch (OutOfBoundsException $outOfBoundsException) { + return self::getDefaultVersion(); + } + } + + /** + * Return the default version used for this package, when no installation was found + * + * @return string + */ + private static function getDefaultVersion(): string + { + return "1.0.x"; + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdPdfValidator.php b/vendor/horstoeko/zugferd/src/ZugferdPdfValidator.php new file mode 100644 index 000000000..447de0b35 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdPdfValidator.php @@ -0,0 +1,1069 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdPdfValidator +{ + /** + * The PDF content + * + * @var string|null + */ + private $pdfContent; + + /** + * Internal message bag + * + * @var array + */ + private $messageBag = []; + + /** + * Base directory (download) + * + * @var string + */ + private $baseDirectory; + + /** + * VeraPDF Validator download url + * + * @var string + */ + private $validatorDownloadUrl = "https://software.verapdf.org/rel/verapdf-installer.zip"; + + /** + * The filename of the validation application zip archive + * + * @var string $validatorAppZipFilename + */ + private $validatorAppZipFilename = "verapdf-installer.zip"; + + /** + * The ruleset to use + * Allowed values are 0, 1a, 1b, 2a, 2b, 2u, 3a, 3b, 3u, 4, 4f, 4e, ua1, ua2 + * + * @var string + */ + private $validatorRuleset = "3a"; + + /** + * The temporary filename which contains the PDF data to validate + * + * @var string + */ + private $fileToValidateFilename = ""; + + /** + * Internal flag which indicates that the cleanup of the base directory is disables + * + * @var boolean + */ + private $cleanupBaseDirectoryIsDisabled = false; + + /** + * Message Type "Internal Error" + */ + protected const MSG_TYPE_INTERNALERROR = 'internalerror'; + + /** + * Message Type "Validation Error" + */ + protected const MSG_TYPE_VALIDATIONERROR = 'validationerror'; + + /** + * Message Type "Validation Warning" + */ + protected const MSG_TYPE_VALIDATIONWARNING = 'validationwarning'; + + /** + * Message Type "Validation info" + */ + protected const MSG_TYPE_VALIDATIONINFORMATION = 'validationinformation'; + + /** + * Message Type "Process Output" + */ + protected const MSG_TYPE_PROCESSOUTPUT = 'processoutput'; + + /** + * Ruleset for Automatic detection based on a file's metadata + */ + public const RULESET_PDF_A_0 = '0'; + + /** + * Ruleset PDF/A-1A validation profile + */ + public const RULESET_PDF_A_1A = '1a'; + + /** + * Ruleset PDF/A-1B validation profile + */ + public const RULESET_PDF_A_1B = '1b'; + + /** + * Ruleset PDF/A-2A validation profile + */ + public const RULESET_PDF_A_2A = '2a'; + + /** + * Ruleset PDF/A-2B validation profile + */ + public const RULESET_PDF_A_2B = '2b'; + + /** + * Ruleset PDF/A-2U validation profile + */ + public const RULESET_PDF_A_2U = '2u'; + + /** + * Ruleset PDF/A-3A validation profile + */ + public const RULESET_PDF_A_3A = '3a'; + + /** + * Ruleset PDF/A-3B validation profile + */ + public const RULESET_PDF_A_3B = '3b'; + + /** + * Ruleset PDF/A-3U validation profile + */ + public const RULESET_PDF_A_3U = '3u'; + + /** + * Ruleset PDF/A-4 validation profile + */ + public const RULESET_PDF_A_4 = '4'; + + /** + * Ruleset PDF/A-4F validation profile + */ + public const RULESET_PDF_A_4F = '4f'; + + /** + * Ruleset PDF/A-4E validation profile + */ + public const RULESET_PDF_A_4E = '4e'; + + /** + * Ruleset PDF/UA-1 validation profile + */ + public const RULESET_PDF_UA_1 = 'ua1'; + + /** + * Ruleset PDF/UA-2 + Tagged PDF validation profile + */ + public const RULESET_PDF_UA_2 = 'ua2'; + + /** + * Create a ZugferdPdfValidator-Instance by an existing PDF-File + * + * @param string $pdfFilename + * @return ZugferdPdfValidator + */ + public static function fromFile(string $pdfFilename): ZugferdPdfValidator + { + if (!file_exists($pdfFilename)) { + throw new ZugferdFileNotFoundException($pdfFilename); + } + + $pdfContent = file_get_contents($pdfFilename); + + if ($pdfContent === false) { + throw new ZugferdFileNotReadableException($pdfFilename); + } + + return ZugferdPdfValidator::fromContent($pdfContent); + } + + /** + * Create a ZugferdPdfValidator-Instance by a given content string + * + * @param string $pdfContent + * @return ZugferdPdfValidator + */ + public static function fromContent(string $pdfContent): ZugferdPdfValidator + { + return new ZugferdPdfValidator($pdfContent); + } + + /** + * Constructor + * + * @param string|null $pdfContent + */ + final protected function __construct(?string $pdfContent = null) + { + $this->setBaseDirectory(sys_get_temp_dir()); + $this->setPdfContent($pdfContent); + } + + /** + * Set the PDF content to validate + * + * @param string $pdfContent + * @return ZugferdPdfValidator + */ + public function setPdfContent(string $pdfContent): ZugferdPdfValidator + { + $this->pdfContent = $pdfContent; + + return $this; + } + + /** + * Setup the base directory. In the base directory all files will be downloaded + * and created + * + * @param string $newBaseDirectory + * @return ZugferdPdfValidator + */ + public function setBaseDirectory(string $newBaseDirectory): ZugferdPdfValidator + { + if (is_dir($newBaseDirectory)) { + $this->baseDirectory = $newBaseDirectory; + } + + return $this; + } + + /** + * Setup the VeraPDF validator application download url + * + * @param string $newValidatorDownloadUrl + * @return ZugferdPdfValidator + */ + public function setValidatorDownloadUrl(string $newValidatorDownloadUrl): ZugferdPdfValidator + { + if (filter_var($newValidatorDownloadUrl, FILTER_VALIDATE_URL) !== false) { + $this->validatorDownloadUrl = $newValidatorDownloadUrl; + } + + return $this; + } + + /** + * Set the filename of the ZIP file which contains the validation application + * + * @param string $newValidatorAppZipFilename + * @return ZugferdPdfValidator + */ + public function setValidatorAppZipFilename(string $newValidatorAppZipFilename): ZugferdPdfValidator + { + $this->validatorAppZipFilename = $newValidatorAppZipFilename; + + return $this; + } + + /** + * Set the Ruleset to use for validation. + * Allowed values are 0, 1a, 1b, 2a, 2b, 2u, 3a, 3b, 3u, 4, 4f, 4e, ua1, ua2 + * + * @param string $newVlidatorRuleset + * @return ZugferdPdfValidator + */ + public function setValidatorRuleset(string $newVlidatorRuleset): ZugferdPdfValidator + { + $newVlidatorRuleset = strtolower($newVlidatorRuleset); + + if (in_array($newVlidatorRuleset, [static::RULESET_PDF_A_0, static::RULESET_PDF_A_1A, static::RULESET_PDF_A_1B, static::RULESET_PDF_A_2A, static::RULESET_PDF_A_2B, static::RULESET_PDF_A_2U, static::RULESET_PDF_A_3A, static::RULESET_PDF_A_3B, static::RULESET_PDF_A_3U, static::RULESET_PDF_A_4, static::RULESET_PDF_A_4E, static::RULESET_PDF_A_4F, static::RULESET_PDF_UA_1, static::RULESET_PDF_UA_2])) { + $this->validatorRuleset = $newVlidatorRuleset; + } + + return $this; + } + + /** + * Disable cleanup base directory + * + * @return ZugferdPdfValidator + */ + public function disableCleanup(): ZugferdPdfValidator + { + $this->cleanupBaseDirectoryIsDisabled = true; + + return $this; + } + + /** + * Enable cleanup base directory + * + * @return ZugferdPdfValidator + */ + public function enableCleanup(): ZugferdPdfValidator + { + $this->cleanupBaseDirectoryIsDisabled = false; + + return $this; + } + + /** + * Perform validation + * + * @return ZugferdPdfValidator + */ + public function validate(): ZugferdPdfValidator + { + $this->clearMessageBag(); + + if ($this->checkRequirements() === false) { + return $this; + } + + if ($this->downloadRequiredFiles() === false) { + $this->cleanupBaseDirectory(); + return $this; + } + + if ($this->unpackRequiredFiles() === false) { + $this->cleanupBaseDirectory(); + return $this; + } + + if ($this->installValidator() === 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); + + $baseDirectory = PathUtils::combinePathWithPath($this->baseDirectory, sprintf("verapdf-%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 executable of the validator + * + * @return string + */ + private function resolveValidatorExecutable(): string + { + return PathUtils::combinePathWithFile($this->resolveBaseDirectory(), 'verapdf'); + } + + /** + * Reset the internal filename where data of the PDF to validate are stored + * + * @return void + */ + private function resetFileToValidateFilename(): void + { + $this->fileToValidateFilename = ""; + } + + /** + * Get the full filename which contains the PDF to validate + * + * @return string + */ + private function resolveFileToValidateFilename(): string + { + if (StringUtils::stringIsNullOrEmpty($this->fileToValidateFilename)) { + $this->fileToValidateFilename = PathUtils::combinePathWithFile($this->resolveBaseDirectory(), sprintf('filetovalidate-%s-%s.pdf', uniqid(), uniqid())); + } + + return $this->fileToValidateFilename; + } + + /** + * Clear the internal error bag + * + * @return void + */ + private function clearMessageBag(): void + { + $this->messageBag = []; + } + + /** + * Add message to error bag + * + * @param string|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 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 $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 $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 $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 $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->pdfContent)) { + $this->addToMessageBag("You must specify the content or a filename of a PDF to validate"); + return false; + } + + if (!extension_loaded('zip')) { + $this->addToMessageBag("ZIP extension not installed"); + return false; + } + + $executableFinder = new ExecutableFinder(); + + if (is_null($executableFinder->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())) { + $this->addToMessageBag(sprintf("Unable to download from %s containing the JAVA-Application", $this->validatorDownloadUrl)); + return false; + } + + return true; + } + + /** + * Unpack required files + * + * @return boolean + */ + private function unpackRequiredFiles(): bool + { + $validatorAppFile = $this->resolveAppZipFilename(); + + if (!$this->unpackRequiredFile($validatorAppFile, true)) { + $this->addToMessageBag(sprintf("Unable to unpack archive %s containing the JAVA-Application", $validatorAppFile)); + return false; + } + + return true; + } + + /** + * Unpack single required file + * + * @param string $zipFilename + * @param bool $flatExtraction + * @return bool + */ + private function unpackRequiredFile(string $zipFilename, bool $flatExtraction = false): bool + { + if ($flatExtraction) { + return $this->unpackRequiredFileFlat($zipFilename); + } + + return $this->unpackRequiredFileNonFlat($zipFilename); + } + + /** + * Unpack single required file (Non-Flat) + * + * @param string $zipFilename + * @return bool + */ + private function unpackRequiredFileNonFlat(string $zipFilename): bool + { + $zipArchive = new ZipArchive(); + + if ($zipArchive->open($zipFilename) !== true) { + $this->addToMessageBag(sprintf("Failed to open ZIP archive %s", $zipFilename)); + return false; + } + + $numFilesExists = 0; + + for ($i = 0; $i < $zipArchive->numFiles; $i++) { + $zipStat = $zipArchive->statIndex($i); + $realfilename = PathUtils::combinePathWithFile($this->resolveBaseDirectory(), $zipStat['name']); + if (file_exists($realfilename)) { + $numFilesExists++; + } + } + + if ($numFilesExists == $zipArchive->numFiles) { + return true; + } + + if (!$zipArchive->extractTo($this->resolveBaseDirectory())) { + $zipArchive->close(); + $this->addToMessageBag(sprintf("Failed to extract ZIP archive %s", $zipFilename)); + return false; + } + + $zipArchive->close(); + + return true; + } + + /** + * Unpack single required file (Flat) + * + * @param string $zipFilename + * @return bool + */ + private function unpackRequiredFileFlat(string $zipFilename): bool + { + $zipArchive = new ZipArchive(); + + if ($zipArchive->open($zipFilename) !== true) { + $this->addToMessageBag(sprintf("Failed to open ZIP archive %s", $zipFilename)); + return false; + } + + for ($i = 0; $i < $zipArchive->numFiles; $i++) { + $filenameInZip = $zipArchive->getNameIndex($i); + + if (substr($filenameInZip, -1) === '/') { + continue; + } + + $realfilename = $this->resolveBaseDirectory() . DIRECTORY_SEPARATOR . basename($filenameInZip); + + if (file_exists($realfilename)) { + continue; + } + + if (!copy('zip://' . realpath($zipFilename) . '#' . $filenameInZip, $realfilename)) { + $zipArchive->close(); + $this->addToMessageBag(sprintf("Failed to extract %s", $filenameInZip)); + return false; + } + } + + $zipArchive->close(); + + return true; + } + + /** + * Install the validator + * + * @return bool + * @throws DirectoryNotFoundException + * @throws LogicException + */ + private function installValidator(): bool + { + if (file_exists($this->resolveValidatorExecutable())) { + return true; + } + + $installerJarFinder = new Finder(); + $installerJarFinder->files()->name('verapdf-izpack-installer*.jar')->in($this->resolveBaseDirectory()); + + if ($installerJarFinder->hasResults() === false) { + $this->addToMessageBag("There was no installer in the form of a JAR-File found"); + return false; + } + + $installerScriptFilename = PathUtils::combinePathWithFile($this->resolveBaseDirectory(), 'install.xml'); + + if ( + file_put_contents( + $installerScriptFilename, + sprintf( + ' + + + + %s + + + + + + + + + + ', + $this->resolveBaseDirectory() + ) + ) === false + ) { + $this->addToMessageBag("Failed to create install script"); + return false; + } + + $installerJarIterator = $installerJarFinder->getIterator(); + $installerJarIterator->rewind(); + + $installerJarFilename = $installerJarIterator->current()->getPathname(); + + $installerJarOptions = [ + 'java', + '-jar', + $installerJarFilename, + $installerScriptFilename, + ]; + + if ($this->runProcess($installerJarOptions, $this->resolveBaseDirectory()) === false) { + $this->addToMessageBag("Failed to run installer"); + return false; + } + + return true; + } + + /** + * Runs the validator java application + * + * @return boolean + */ + private function performValidation(): bool + { + if (!file_exists($this->resolveValidatorExecutable())) { + $this->addToMessageBag("Validation application not found"); + return false; + } + + $this->resetFileToValidateFilename(); + + if (file_put_contents($this->resolveFileToValidateFilename(), $this->pdfContent) === false) { + $this->addToMessageBag("Cannot create temporary file which contains the PDF to validate"); + return false; + } + + $validatorExecutableOptions = [ + $this->resolveValidatorExecutable(), + '--format', + 'json', + '--flavour', + $this->validatorRuleset, + $this->resolveFileToValidateFilename(), + ]; + + if ($this->runProcessAndGetOutput($validatorExecutableOptions, $this->resolveBaseDirectory(), $validatorExecutableOutput) === false) { + $this->checkValidatorExecutableOutput($validatorExecutableOutput); + return false; + } + + return $this->checkValidatorExecutableOutput($validatorExecutableOutput); + } + + /** + * Read and parse the JSON response + * + * @param string $validatorExecutableOutput + * @return bool + */ + private function checkValidatorExecutableOutput(string $validatorExecutableOutput): bool + { + $validatorExecutableOutputObject = json_decode($validatorExecutableOutput); + + if ($validatorExecutableOutputObject === null && json_last_error() !== JSON_ERROR_NONE) { + $this->addToMessageBag(sprintf("Cannot decode JSON result. Error %s", json_last_error_msg()), static::MSG_TYPE_VALIDATIONERROR); + return false; + } + + if (!isset($validatorExecutableOutputObject->report)) { + $this->addToMessageBag("Invalid report response - no report property found", static::MSG_TYPE_VALIDATIONERROR); + return false; + } + + if (!isset($validatorExecutableOutputObject->report->jobs)) { + $this->addToMessageBag("Invalid report response - no jobs property found", static::MSG_TYPE_VALIDATIONERROR); + return false; + } + + if (!is_array($validatorExecutableOutputObject->report->jobs)) { + $this->addToMessageBag("Invalid report response - jobs property is not an array", static::MSG_TYPE_VALIDATIONERROR); + return false; + } + + if (count($validatorExecutableOutputObject->report->jobs) != 1) { + $this->addToMessageBag("Invalid report response - jobs property should be an array with one element", static::MSG_TYPE_VALIDATIONERROR); + return false; + } + + $validatorExecutableOutputJobObject = $validatorExecutableOutputObject->report->jobs[0]; + + if (!isset($validatorExecutableOutputJobObject->validationResult)) { + $this->addToMessageBag("Invalid report response - job has not a validationResult property", static::MSG_TYPE_VALIDATIONERROR); + return false; + } + + if (!isset($validatorExecutableOutputJobObject->validationResult->details)) { + $this->addToMessageBag("Invalid report response - job has not a details property", static::MSG_TYPE_VALIDATIONERROR); + return false; + } + + if (!isset($validatorExecutableOutputJobObject->validationResult->details->failedRules)) { + $this->addToMessageBag("Invalid report response - job has not a failedRules property", static::MSG_TYPE_VALIDATIONERROR); + return false; + } + + if (!isset($validatorExecutableOutputJobObject->validationResult->details->failedChecks)) { + $this->addToMessageBag("Invalid report response - job has not a failedChecks property", static::MSG_TYPE_VALIDATIONERROR); + return false; + } + + if ($validatorExecutableOutputJobObject->validationResult->details->failedRules == 0 && $validatorExecutableOutputJobObject->validationResult->details->failedChecks == 0) { + return true; + } + + $this->addToMessageBag( + sprintf( + "Validation failed. Failed rules: %s, Failed Checks: %s", + $validatorExecutableOutputJobObject->validationResult->details->failedRules, + $validatorExecutableOutputJobObject->validationResult->details->failedChecks + ), + static::MSG_TYPE_VALIDATIONERROR + ); + + foreach ($validatorExecutableOutputJobObject->validationResult->details->ruleSummaries ?? [] as $ruleSummary) { + $this->addToMessageBag( + sprintf( + "%s, %s, %s --> %s", + $ruleSummary->specification, + $ruleSummary->clause, + $ruleSummary->object, + $ruleSummary->description + ), + static::MSG_TYPE_VALIDATIONERROR + ); + } + + return false; + } + + /** + * 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 + * @return bool + */ + private function runProcess(array $command, string $workingdirectory): bool + { + return $this->runProcessAndGetOutput($command, $workingdirectory, $_); + } + + /** + * Runs a process. If the process runned successfully this method + * returns true, otherwise false. The output of the process wil be + * returned in $processOutput + * + * @param array $command + * @param string $workingdirectory + * @param null|string &$processOutput + * @return bool + */ + private function runProcessAndGetOutput(array $command, string $workingdirectory, ?string &$processOutput): bool + { + try { + $process = new Process($command); + $process->setTimeout(0.0); + $process->setWorkingDirectory($workingdirectory); + $process->run(); + + $processOutput = $process->getOutput(); + + foreach (preg_split("/\r\n|\n|\r/", $processOutput) as $outputLine) { + $this->addToMessageBag($outputLine, static::MSG_TYPE_PROCESSOUTPUT); + } + + if (!$process->isSuccessful()) { + return false; + } + } catch (Throwable $throwable) { + $this->addToMessageBag($throwable, static::MSG_TYPE_VALIDATIONERROR); + return false; + } + + return true; + } + + /** + * Run a file download. + * + * @param string $url + * @param string $toFilePath + * @param bool $forceOverwrite + * @return bool + */ + 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 (Throwable $throwable) { + $this->addToMessageBag($throwable); + return false; + } + + return true; + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdPdfWriter.php b/vendor/horstoeko/zugferd/src/ZugferdPdfWriter.php new file mode 100644 index 000000000..d8839065c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdPdfWriter.php @@ -0,0 +1,509 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdPdfWriter extends PdfFpdi +{ + /** + * Contains all attached files + * + * @var array + */ + protected $files = []; + + /** + * 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; + + /** + * Internal flag deterministic mode. This mode should only be used + * for testing purposes + * + * @var boolean + */ + protected $deterministicModeEnabled = 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) { + if ($this->deterministicModeEnabled === true) { + $this->PDFVersion .= "\n" . '%' . chr(128) . chr(129) . chr(130) . chr(131); + } else { + $this->PDFVersion .= "\n" . '%' . chr(random_int(128, 255)) . chr(random_int(128, 255)) . chr(random_int(128, 255)) . chr(random_int(128, 255)); + } + } + } + + /** + * 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, '\\'); + } + + $name = false !== $p ? substr($file, $p + 1) : $file; + } + + if (!$isUTF8) { + $desc = mb_convert_encoding($desc, 'UTF-8', mb_list_encodings()); + } + + if ('' == $mimetype) { + $mimetype = mime_content_type($file); + if ($mimetype === '' || $mimetype === '0' || $mimetype === false) { + $mimetype = 'application/octet-stream'; + } + } + + $mimetype = str_replace('/', '#2F', $mimetype); + $this->files[] = ['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 + { + if ($this->deterministicModeEnabled === true) { + $metaDataInfos['createdDate'] = date('Y-m-d\TH:i:s', strtotime("2000-01-01 23:59:59")); + $metaDataInfos['modifiedDate'] = date('Y-m-d\TH:i:s', strtotime("2000-01-01 23:59:59")); + } + + $this->metaDataInfos = $metaDataInfos; + } + + /** + * Set the status of the deterministic mode. This mode should only be used + * for testing purposes + * + * @param bool $deterministicModeEnabled + * @return void + */ + public function setDeterministicModeEnabled(bool $deterministicModeEnabled): void + { + $this->deterministicModeEnabled = $deterministicModeEnabled; + } + + /** + * Put files. + * + * @return void + * + * @codingStandardsIgnoreStart + */ + protected function _putfiles(): void + { + foreach ($this->files as &$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 ($this->deterministicModeEnabled === true) { + $md = @date('YmdHis', strtotime("2000-01-01 23:59:59")); + } elseif (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(sprintf('/Params <>', $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 = '' . "\n"; + $s .= '' . "\n"; + $s .= '' . "\n"; + $this->_newobj(); + $this->descriptionIndex = $this->n; + foreach ($this->metaDataDescriptions as $desc) { + $s .= $desc . "\n"; + } + + $s .= '' . "\n"; + $s .= '' . "\n"; + $s .= ''; + $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 ($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 ($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 ($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)); + } + + /** + * Put general information + * + * @return void + */ + protected function _putinfo(): void + { + if ($this->deterministicModeEnabled === true) { + $this->CreationDate = strtotime("2000-01-01 23:59:59"); + } + + parent::_putinfo(); + } + + /** + * 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; + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdProfileResolver.php b/vendor/horstoeko/zugferd/src/ZugferdProfileResolver.php new file mode 100644 index 000000000..13b90ce5e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdProfileResolver.php @@ -0,0 +1,128 @@ + + * @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 + * @throws ZugferdUnknownXmlContentException + * @throws ZugferdUnknownProfileException + */ + public static function resolve(string $xmlContent): array + { + $prevUseInternalErrors = \libxml_use_internal_errors(true); + + try { + libxml_clear_errors(); + $xmldocument = new SimpleXMLElement($xmlContent); + $typeelement = $xmldocument->xpath('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID'); + if (libxml_get_last_error()) { + throw new ZugferdUnknownXmlContentException(); + } + } catch (Throwable $throwable) { + throw new ZugferdUnknownXmlContentException(); + } finally { + libxml_clear_errors(); + libxml_use_internal_errors($prevUseInternalErrors); + } + + if (!is_array($typeelement) || !isset($typeelement[0])) { + throw new ZugferdUnknownXmlContentException(); + } + + foreach (ZugferdProfiles::PROFILEDEF as $profile => $profiledef) { + if ($typeelement[0] == $profiledef["contextparameter"]) { + return [$profile, $profiledef]; + } + + if (in_array($typeelement[0], $profiledef['alternativecontextparameters'])) { + return [$profile, $profiledef]; + } + } + + throw new ZugferdUnknownProfileException((string)$typeelement[0]); + } + + /** + * Resolve profile id by the content of $xmlContent + * + * @param string $xmlContent + * @return int + * @throws ZugferdUnknownXmlContentException + * @throws ZugferdUnknownProfileException + */ + 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 + * @throws ZugferdUnknownXmlContentException + * @throws ZugferdUnknownProfileException + */ + public static function resolveProfileDef(string $xmlContent): array + { + return static::resolve($xmlContent)[1]; + } + + /** + * Resolve profile id and profile definition by it's id + * + * @param int $profileId + * @return array + * @throws ZugferdUnknownProfileIdException + */ + 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 + * @throws ZugferdUnknownProfileIdException + */ + public static function resolveProfileDefById(int $profileId): array + { + $resolved = static::resolveById($profileId); + + return $resolved[1]; + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdProfiles.php b/vendor/horstoeko/zugferd/src/ZugferdProfiles.php new file mode 100644 index 000000000..3b3f7ed56 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdProfiles.php @@ -0,0 +1,255 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdProfiles +{ + /** + * Internal constant that identifies the BASIC profile + */ + public const PROFILE_BASIC = 0; + + /** + * Internal constant that identifies the BASIC WL profile + */ + public const PROFILE_BASICWL = 1; + + /** + * Internal constant that identifies the EN16931 profile + */ + public const PROFILE_EN16931 = 2; + + /** + * Internal constant that identifies the EXTENDED profile + */ + public const PROFILE_EXTENDED = 3; + + /** + * Internal constant that identifies the XRECHNUNG profile (germany only) + */ + public const PROFILE_XRECHNUNG = 4; + + /** + * Internal constant that identifies the XRECHNUNG profile version 2.0 (germany only) + */ + public const PROFILE_XRECHNUNG_2 = 5; + + /** + * Internal constant that identifies the XRECHNUNG profile version 2.1 (germany only) + */ + public const PROFILE_XRECHNUNG_2_1 = 6; + + /** + * Internal constant that identifies the XRECHNUNG profile version 2.2 (germany only) + */ + public const PROFILE_XRECHNUNG_2_2 = 7; + + /** + * Internal constant that identifies the MINIMUM profile + */ + public const PROFILE_MINIMUM = 8; + + /** + * Internal constant that identifies the XRECHNUNG profile version 2.3 (germany only) + */ + public const PROFILE_XRECHNUNG_2_3 = 9; + + /** + * Internal constant that identifies the XRECHNUNG profile version 2.3 (germany only) + */ + public const PROFILE_XRECHNUNG_3 = 10; + + /** + * The definitions of the several profiles + */ + public 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', + 'alternativecontextparameters' => ['urn:cen.eu:en16931:2017#compliant#urn:zugferd.de:2p0:basic'], + 'businessprocess' => null, + 'attachmentfilename' => 'factur-x.xml', + 'xmpname' => 'BASIC', + 'xmpversion' => '1.0', + 'xsdfilename' => 'FACTUR-X_BASIC.xsd', + 'schematronfilename' => 'FACTUR-X_BASIC.sch', + 'xsltfilename' => 'FACTUR-X_BASIC.xslt' + ], + 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', + 'alternativecontextparameters' => ['urn:zugferd.de:2p0:basicwl'], + 'businessprocess' => null, + 'attachmentfilename' => 'factur-x.xml', + 'xmpname' => 'BASIC WL', + 'xmpversion' => '1.0', + 'xsdfilename' => 'FACTUR-X_BASIC-WL.xsd', + 'schematronfilename' => 'FACTUR-X_BASIC-WL.sch', + 'xsltfilename' => 'FACTUR-X_BASIC-WL.xslt' + ], + 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', + 'alternativecontextparameters' => [], + 'businessprocess' => null, + 'attachmentfilename' => 'factur-x.xml', + 'xmpname' => 'EN 16931', + 'xmpversion' => '1.0', + 'xsdfilename' => 'FACTUR-X_EN16931.xsd', + 'schematronfilename' => 'FACTUR-X_EN16931.sch', + 'xsltfilename' => 'FACTUR-X_EN16931.xslt' + ], + 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', + 'alternativecontextparameters' => ['urn:cen.eu:en16931:2017#conformant#urn:zugferd.de:2p0:extended'], + 'businessprocess' => 'urn:fdc:peppol.eu:2017:poacc:billing:01:1.0', + 'attachmentfilename' => 'factur-x.xml', + 'xmpname' => 'EXTENDED', + 'xmpversion' => '1.0', + 'xsdfilename' => 'FACTUR-X_EXTENDED.xsd', + 'schematronfilename' => 'FACTUR-X_EXTENDED.sch', + 'xsltfilename' => 'FACTUR-X_EXTENDED.xslt' + ], + 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', + 'alternativecontextparameters' => [], + 'businessprocess' => null, + 'attachmentfilename' => 'xrechnung.xml', + 'xmpname' => 'XRECHNUNG', + 'xmpversion' => '1.2', + 'xsdfilename' => 'FACTUR-X_EN16931.xsd', + 'schematronfilename' => 'FACTUR-X_EN16931.sch', + 'xsltfilename' => "FACTUR-X_EN16931.xslt" + ], + 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', + 'alternativecontextparameters' => [], + 'businessprocess' => null, + 'attachmentfilename' => 'xrechnung.xml', + 'xmpname' => 'XRECHNUNG', + 'xmpversion' => '2.0', + 'xsdfilename' => 'FACTUR-X_EN16931.xsd', + 'schematronfilename' => 'FACTUR-X_EN16931.sch', + 'xsltfilename' => "FACTUR-X_EN16931.xslt" + ], + 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', + 'alternativecontextparameters' => [], + 'businessprocess' => null, + 'attachmentfilename' => 'xrechnung.xml', + 'xmpname' => 'XRECHNUNG', + 'xmpversion' => '2.1', + 'xsdfilename' => 'FACTUR-X_EN16931.xsd', + 'schematronfilename' => 'FACTUR-X_EN16931.sch', + 'xsltfilename' => "FACTUR-X_EN16931.xslt" + ], + 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', + 'alternativecontextparameters' => [], + 'businessprocess' => null, + 'attachmentfilename' => 'xrechnung.xml', + 'xmpname' => 'XRECHNUNG', + 'xmpversion' => '2.2', + 'xsdfilename' => 'FACTUR-X_EN16931.xsd', + 'schematronfilename' => 'FACTUR-X_EN16931.sch', + 'xsltfilename' => "FACTUR-X_EN16931.xslt" + ], + 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', + 'alternativecontextparameters' => ['urn:zugferd.de:2p0:minimum'], + 'businessprocess' => null, + 'attachmentfilename' => 'factur-x.xml', + 'xmpname' => 'MINIMUM', + 'xmpversion' => '1.0', + 'xsdfilename' => 'FACTUR-X_MINIMUM.xsd', + 'schematronfilename' => 'FACTUR-X_MINIMUM.sch', + 'xsltfilename' => 'FACTUR-X_MINIMUM.xslt' + ], + 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', + 'alternativecontextparameters' => [], + 'businessprocess' => null, + 'attachmentfilename' => 'xrechnung.xml', + 'xmpname' => 'XRECHNUNG', + 'xmpversion' => '2.3', + 'xsdfilename' => 'FACTUR-X_EN16931.xsd', + 'schematronfilename' => 'FACTUR-X_EN16931.sch', + 'xsltfilename' => "FACTUR-X_EN16931.xslt" + ], + 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', + 'alternativecontextparameters' => [], + 'businessprocess' => 'urn:fdc:peppol.eu:2017:poacc:billing:01:1.0', + 'attachmentfilename' => 'xrechnung.xml', + 'xmpname' => 'XRECHNUNG', + 'xmpversion' => '3.0', + 'xsdfilename' => 'FACTUR-X_EN16931.xsd', + 'schematronfilename' => 'FACTUR-X_EN16931.sch', + 'xsltfilename' => "FACTUR-X_EN16931.xslt" + ], + ]; +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdSettings.php b/vendor/horstoeko/zugferd/src/ZugferdSettings.php new file mode 100644 index 000000000..feaab6615 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdSettings.php @@ -0,0 +1,454 @@ + + * @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 number of decimals for measure values + * + * @var integer + */ + protected static $measureDecimals = 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 = "sRGB2014.icc"; + + /** + * The filename of the XMP meta data + * + * @var string + */ + protected static $xmpMetaDataFilename = "facturx_extension_schema.xmp"; + + /** + * Node paths which present an amount. Used for special amount formatting + * + * @var array + */ + protected static $specialDecimalPlacesMaps = []; + + /** + * The configured cache directory for the serializer + * + * @var string + */ + protected static $serializerCacheDirectory = ""; + + /** + * 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 number of decimals to use for measure values + * + * @return integer + */ + public static function getMeasureDecimals(): int + { + return static::$measureDecimals; + } + + /** + * Set the number of decimals to use for measure values + * + * @param integer $measureDecimals + * @return void + */ + public static function setMeasureDecimals(int $measureDecimals): void + { + static::$measureDecimals = $measureDecimals; + } + + /** + * 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 $defaultDecimalPlaces + * @return void + */ + public static function setUnitAmountDecimals(int $defaultDecimalPlaces): void + { + static::addSpecialDecimalPlacesMap('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount', $defaultDecimalPlaces); + static::addSpecialDecimalPlacesMap('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount', $defaultDecimalPlaces); + } + + /** + * Set the cache directory for the internal serializer + * + * @param string $serializerCacheDirectoty + * @return void + */ + public static function setSerializerCacheDirectory(string $serializerCacheDirectoty): void + { + static::$serializerCacheDirectory = $serializerCacheDirectoty; + } + + /** + * Returns the cache directory for the internal serializer. This might be empty + * + * @return string + */ + public static function getSerializerCacheDirectory(): string + { + return static::$serializerCacheDirectory; + } + + /** + * Returns true if a cache directory for the internal serializer is configured, otherwise false + * + * @return boolean + */ + public static function hasSerializerCacheDirectory(): bool + { + return StringUtils::stringIsNullOrEmpty(static::$serializerCacheDirectory) === false; + } + + /** + * Get root directory + * + * @return string + */ + public static function getRootDirectory(): string + { + return PathUtils::combineAllPaths(__DIR__, ".."); + } + + /** + * 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 directory where all the stylesheets (XSLT) files are located + * + * @return string + */ + public static function getSchematronDirectory(): string + { + return PathUtils::combineAllPaths(static::getSchemaDirectory(), "schematron"); + } + + /** + * Get the directory where all the stylesheets (XSLT) files are located + * + * @return string + */ + public static function getXsltDirectory(): string + { + return PathUtils::combineAllPaths(static::getSchemaDirectory(), "xslt"); + } + + /** + * 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); + } +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdSpecificationVersions.php b/vendor/horstoeko/zugferd/src/ZugferdSpecificationVersions.php new file mode 100644 index 000000000..89e42f542 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdSpecificationVersions.php @@ -0,0 +1,37 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdSpecificationVersions +{ + /** + * The latest ZUGFeRD version used + */ + public const VERSION_ZUGFERD = "2.3.2"; + + /** + * The latest Factur-X version used + */ + public const VERSION_FACTURX = "1.07.2"; + + /** + * The latest XRechnung version used + */ + public const VERSION_XRECHNUNG = "3.0.2"; +} diff --git a/vendor/horstoeko/zugferd/src/ZugferdXsdValidator.php b/vendor/horstoeko/zugferd/src/ZugferdXsdValidator.php new file mode 100644 index 000000000..939265cf2 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/ZugferdXsdValidator.php @@ -0,0 +1,234 @@ + + * @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 + * + * @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 + * + * @deprecated 1.0.65 Use hasNoValidationErrors instead + * @return boolean + */ + public function validationPased(): bool + { + return $this->errorBag === []; + } + + /** + * Returns true if validation failed otherwise false + * + * @deprecated 1.0.65 Use hasValidationErrors instead + * @return boolean + */ + public function validationFailed(): bool + { + return !$this->validationPased(); + } + + /** + * Returns true if validation passed otherwise false + * + * @return boolean + */ + public function hasNoValidationErrors(): bool + { + return $this->errorBag === []; + } + + /** + * Returns true if validation errors are present otherwise false + * + * @return boolean + */ + public function hasValidationErrors(): bool + { + return !$this->hasNoValidationErrors(); + } + + /** + * 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); + } + } +} diff --git a/vendor/horstoeko/zugferd/src/assets/facturx_extension_schema.xmp b/vendor/horstoeko/zugferd/src/assets/facturx_extension_schema.xmp new file mode 100644 index 000000000..1a0806128 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/assets/facturx_extension_schema.xmp @@ -0,0 +1,110 @@ + + + + + + INVOICE + factur-x.xml + 1.0 + BASIC + + + + + + + + Factur-X PDFA Extension Schema + urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0# + fx + + + + DocumentFileName + Text + external + name of the embedded XML invoice file + + + DocumentType + Text + external + INVOICE + + + Version + Text + external + The actual version of the Factur-X XML schema + + + ConformanceLevel + Text + external + The conformance level of the embedded Factur-X data + + + + + + + + + + + 3 + B + + + + + FOURNISSEUR F: Invoice 2017-TEST-01 + + + + + FOURNISSEUR F + + + + + Factur-X Invoice 2017-TEST-01 dated 2017-10-31 issued by FOURNISSEUR F + + + + + + PyPDF2 + + + factur-x php lib by @GP + 2017-11-30T16:12:04+00:00 + 2017-11-30T16:12:04+00:00 + + \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/src/assets/sRGB2014.icc b/vendor/horstoeko/zugferd/src/assets/sRGB2014.icc new file mode 100644 index 0000000000000000000000000000000000000000..49afbfef10f22a1832590b68369d2f248ea553b9 GIT binary patch literal 3024 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 literal 0 HcmV?d00001 diff --git a/vendor/horstoeko/zugferd/src/assets/sRGB_v4_ICC.icc b/vendor/horstoeko/zugferd/src/assets/sRGB_v4_ICC.icc new file mode 100644 index 0000000000000000000000000000000000000000..cbb16d44428d1b6290bc34382d0b612f9e86c831 GIT binary patch literal 60988 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 z

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 literal 0 HcmV?d00001 diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdAccountingAccountsClassificationTypes.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdAccountingAccountsClassificationTypes.php new file mode 100644 index 000000000..a900a54a2 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdAccountingAccountsClassificationTypes.php @@ -0,0 +1,57 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdAccountingAccountsClassificationTypes +{ + /** + * The code indicates a general chart of accounts + */ + public const GENERAL_ACCOUNT_CHART_OF_ACCOUNTS = '1'; + + /** + * The code indicates a cost chart of accounts + */ + public const COST_ACCOUNTING_CHART_OF_ACCOUNTS = '2'; + + /** + * The code indicates a budget chart of accounts + */ + public const BUDGETARY_ACCOUNT_CHART_OF_ACCOUNTS = '3'; + + /** + * The code indicates a payable chart of accounts + */ + public const PAYABLE_ACCOUNT_CHART_OF_ACCOUNTS = '4'; + + /** + * The code indicates a receivable chart of accounts + */ + public const RECEIVABLE_ACCOUNT_CHART_OF_ACCOUNTS = '5'; + + /** + * The code indicates a job chart of accounts + */ + public const JOB_ACCOUNT_CHART_OF_ACCOUNTS = '6'; + + /** + * The code indicates a building site chart of accounts + */ + public const BUILDING_SITE_ACCOUNT_CHART_OF_ACCOUNTS = '7'; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdAllowanceCodes.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdAllowanceCodes.php new file mode 100644 index 000000000..5e3c45d89 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdAllowanceCodes.php @@ -0,0 +1,117 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdAllowanceCodes +{ + /** + * Bonus for works ahead of schedule + */ + public const BONUS_FOR_WORKS_AHEAD_OF_SCHEDULE = "41"; + + /** + * Other bonus + */ + public const OTHER_BONUS = "42"; + + /** + * Manufacturer’s consumer discount + */ + public const MANUFACTURERS_CONSUMER_DISCOUNT = "60"; + + /** + * Due to military status + */ + public const DUE_TO_MILITARY_STATUS = "62"; + + /** + * Due to work accident + */ + public const DUE_TO_WORK_ACCIDENT = "63"; + + /** + * Special agreement + */ + public const SPECIAL_AGREEMENT = "64"; + + /** + * Production error discount + */ + public const PRODUCTION_ERROR_DISCOUNT = "65"; + + /** + * New outlet discount + */ + public const NEW_OUTLET_DISCOUNT = "66"; + + /** + * Sample discount + */ + public const SAMPLE_DISCOUNT = "67"; + + /** + * End-of-range discount + */ + public const ENDOFRANGE_DISCOUNT = "68"; + + /** + * Incoterm discount + */ + public const INCOTERM_DISCOUNT = "70"; + + /** + * Point of sales threshold allowance + */ + public const POINT_OF_SALES_THRESHOLD_ALLOWANCE = "71"; + + /** + * Material surcharge/deduction + */ + public const MATERIAL_SURCHARGE_DEDUCTION = "88"; + + /** + * Discount + */ + public const DISCOUNT = "95"; + + /** + * Special rebate + */ + public const SPECIAL_REBATE = "100"; + + /** + * Fixed long term + */ + public const FIXED_LONG_TERM = "102"; + + /** + * Temporary + */ + public const TEMPORARY = "103"; + + /** + * Standard + */ + public const STANDARD = "104"; + + /** + * Yearly turnover + */ + public const YEARLY_TURNOVER = "105"; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdChargeCodes.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdChargeCodes.php new file mode 100644 index 000000000..09e2113bf --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdChargeCodes.php @@ -0,0 +1,907 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdChargeCodes +{ + /** + * Advertising + */ + public const ADVERTISING = "AA"; + + /** + * Telecommunication + */ + public const TELECOMMUNICATION = "AAA"; + + /** + * Technical modification + */ + public const TECHNICAL_MODIFICATION = "AAC"; + + /** + * Job-order production + */ + public const JOBORDER_PRODUCTION = "AAD"; + + /** + * Outlays + */ + public const OUTLAYS = "AAE"; + + /** + * Off-premises + */ + public const OFFPREMISES = "AAF"; + + /** + * Additional processing + */ + public const ADDITIONAL_PROCESSING = "AAH"; + + /** + * Attesting + */ + public const ATTESTING = "AAI"; + + /** + * Acceptance + */ + public const ACCEPTANCE = "AAS"; + + /** + * Rush delivery + */ + public const RUSH_DELIVERY = "AAT"; + + /** + * Special construction + */ + public const SPECIAL_CONSTRUCTION = "AAV"; + + /** + * Airport facilities + */ + public const AIRPORT_FACILITIES = "AAY"; + + /** + * Concession + */ + public const CONCESSION = "AAZ"; + + /** + * Compulsory storage + */ + public const COMPULSORY_STORAGE = "ABA"; + + /** + * Fuel removal + */ + public const FUEL_REMOVAL = "ABB"; + + /** + * Into plane + */ + public const INTO_PLANE = "ABC"; + + /** + * Overtime + */ + public const OVERTIME = "ABD"; + + /** + * Tooling + */ + public const TOOLING = "ABF"; + + /** + * Miscellaneous + */ + public const MISCELLANEOUS = "ABK"; + + /** + * Additional packaging + */ + public const ADDITIONAL_PACKAGING = "ABL"; + + /** + * Dunnage + */ + public const DUNNAGE = "ABN"; + + /** + * Containerisation + */ + public const CONTAINERISATION = "ABR"; + + /** + * Carton packing + */ + public const CARTON_PACKING = "ABS"; + + /** + * Hessian wrapped + */ + public const HESSIAN_WRAPPED = "ABT"; + + /** + * Polyethylene wrap packing + */ + public const POLYETHYLENE_WRAP_PACKING = "ABU"; + + /** + * Miscellaneous treatment + */ + public const MISCELLANEOUS_TREATMENT = "ACF"; + + /** + * Enamelling treatment + */ + public const ENAMELLING_TREATMENT = "ACG"; + + /** + * Heat treatment + */ + public const HEAT_TREATMENT = "ACH"; + + /** + * Plating treatment + */ + public const PLATING_TREATMENT = "ACI"; + + /** + * Painting + */ + public const PAINTING = "ACJ"; + + /** + * Polishing + */ + public const POLISHING = "ACK"; + + /** + * Priming + */ + public const PRIMING = "ACL"; + + /** + * Preservation treatment + */ + public const PRESERVATION_TREATMENT = "ACM"; + + /** + * Fitting + */ + public const FITTING = "ACS"; + + /** + * Consolidation + */ + public const CONSOLIDATION = "ADC"; + + /** + * Bill of lading + */ + public const BILL_OF_LADING = "ADE"; + + /** + * Airbag + */ + public const AIRBAG = "ADJ"; + + /** + * Transfer + */ + public const TRANSFER = "ADK"; + + /** + * Slipsheet + */ + public const SLIPSHEET = "ADL"; + + /** + * Binding + */ + public const BINDING = "ADM"; + + /** + * Repair or replacement of broken returnable package + */ + public const REPAIR_OR_REPLACEMENT_OF_BROKEN_RETURNABLE_PACKAGE = "ADN"; + + /** + * Efficient logistics + */ + public const EFFICIENT_LOGISTICS = "ADO"; + + /** + * Merchandising + */ + public const MERCHANDISING = "ADP"; + + /** + * Product mix + */ + public const PRODUCT_MIX = "ADQ"; + + /** + * Other services + */ + public const OTHER_SERVICES = "ADR"; + + /** + * Pick-up + */ + public const PICKUP = "ADT"; + + /** + * Chronic illness + */ + public const CHRONIC_ILLNESS = "ADW"; + + /** + * New product introduction + */ + public const NEW_PRODUCT_INTRODUCTION = "ADY"; + + /** + * Direct delivery + */ + public const DIRECT_DELIVERY = "ADZ"; + + /** + * Diversion + */ + public const DIVERSION = "AEA"; + + /** + * Disconnect + */ + public const DISCONNECT = "AEB"; + + /** + * Distribution + */ + public const DISTRIBUTION = "AEC"; + + /** + * Handling of hazardous cargo + */ + public const HANDLING_OF_HAZARDOUS_CARGO = "AED"; + + /** + * Rents and leases + */ + public const RENTS_AND_LEASES = "AEF"; + + /** + * Location differential + */ + public const LOCATION_DIFFERENTIAL = "AEH"; + + /** + * Aircraft refueling + */ + public const AIRCRAFT_REFUELING = "AEI"; + + /** + * Fuel shipped into storage + */ + public const FUEL_SHIPPED_INTO_STORAGE = "AEJ"; + + /** + * Cash on delivery + */ + public const CASH_ON_DELIVERY = "AEK"; + + /** + * Small order processing service + */ + public const SMALL_ORDER_PROCESSING_SERVICE = "AEL"; + + /** + * Clerical or administrative services + */ + public const CLERICAL_OR_ADMINISTRATIVE_SERVICES = "AEM"; + + /** + * Guarantee + */ + public const GUARANTEE = "AEN"; + + /** + * Collection and recycling + */ + public const COLLECTION_AND_RECYCLING = "AEO"; + + /** + * Copyright fee collection + */ + public const COPYRIGHT_FEE_COLLECTION = "AEP"; + + /** + * Veterinary inspection service + */ + public const VETERINARY_INSPECTION_SERVICE = "AES"; + + /** + * Pensioner service + */ + public const PENSIONER_SERVICE = "AET"; + + /** + * Medicine free pass holder + */ + public const MEDICINE_FREE_PASS_HOLDER = "AEU"; + + /** + * Environmental protection service + */ + public const ENVIRONMENTAL_PROTECTION_SERVICE = "AEV"; + + /** + * Environmental clean-up service + */ + public const ENVIRONMENTAL_CLEANUP_SERVICE = "AEW"; + + /** + * National cheque processing service outside account area + */ + public const NATIONAL_CHEQUE_PROCESSING_SERVICE_OUTSIDE_ACCOUNT_AREA = "AEX"; + + /** + * National payment service outside account area + */ + public const NATIONAL_PAYMENT_SERVICE_OUTSIDE_ACCOUNT_AREA = "AEY"; + + /** + * National payment service within account area + */ + public const NATIONAL_PAYMENT_SERVICE_WITHIN_ACCOUNT_AREA = "AEZ"; + + /** + * Adjustments + */ + public const ADJUSTMENTS = "AJ"; + + /** + * Authentication + */ + public const AUTHENTICATION = "AU"; + + /** + * Cataloguing + */ + public const CATALOGUING = "CA"; + + /** + * Cartage + */ + public const CARTAGE = "CAB"; + + /** + * Certification + */ + public const CERTIFICATION = "CAD"; + + /** + * Certificate of conformance + */ + public const CERTIFICATE_OF_CONFORMANCE = "CAE"; + + /** + * Certificate of origin + */ + public const CERTIFICATE_OF_ORIGIN = "CAF"; + + /** + * Cutting + */ + public const CUTTING = "CAI"; + + /** + * Consular service + */ + public const CONSULAR_SERVICE = "CAJ"; + + /** + * Customer collection + */ + public const CUSTOMER_COLLECTION = "CAK"; + + /** + * Payroll payment service + */ + public const PAYROLL_PAYMENT_SERVICE = "CAL"; + + /** + * Cash transportation + */ + public const CASH_TRANSPORTATION = "CAM"; + + /** + * Home banking service + */ + public const HOME_BANKING_SERVICE = "CAN"; + + /** + * Bilateral agreement service + */ + public const BILATERAL_AGREEMENT_SERVICE = "CAO"; + + /** + * Insurance brokerage service + */ + public const INSURANCE_BROKERAGE_SERVICE = "CAP"; + + /** + * Cheque generation + */ + public const CHEQUE_GENERATION = "CAQ"; + + /** + * Preferential merchandising location + */ + public const PREFERENTIAL_MERCHANDISING_LOCATION = "CAR"; + + /** + * Crane + */ + public const CRANE = "CAS"; + + /** + * Special colour service + */ + public const SPECIAL_COLOUR_SERVICE = "CAT"; + + /** + * Sorting + */ + public const SORTING = "CAU"; + + /** + * Battery collection and recycling + */ + public const BATTERY_COLLECTION_AND_RECYCLING = "CAV"; + + /** + * Product take back fee + */ + public const PRODUCT_TAKE_BACK_FEE = "CAW"; + + /** + * Quality control released + */ + public const QUALITY_CONTROL_RELEASED = "CAX"; + + /** + * Quality control held + */ + public const QUALITY_CONTROL_HELD = "CAY"; + + /** + * Quality control embargo + */ + public const QUALITY_CONTROL_EMBARGO = "CAZ"; + + /** + * Car loading + */ + public const CAR_LOADING = "CD"; + + /** + * Cleaning + */ + public const CLEANING = "CG"; + + /** + * Cigarette stamping + */ + public const CIGARETTE_STAMPING = "CS"; + + /** + * Count and recount + */ + public const COUNT_AND_RECOUNT = "CT"; + + /** + * Layout/design + */ + public const LAYOUT_DESIGN = "DAB"; + + /** + * Assortment allowance + */ + public const ASSORTMENT_ALLOWANCE = "DAC"; + + /** + * Driver assigned unloading + */ + public const DRIVER_ASSIGNED_UNLOADING = "DAD"; + + /** + * Debtor bound + */ + public const DEBTOR_BOUND = "DAF"; + + /** + * Dealer allowance + */ + public const DEALER_ALLOWANCE = "DAG"; + + /** + * Allowance transferable to the consumer + */ + public const ALLOWANCE_TRANSFERABLE_TO_THE_CONSUMER = "DAH"; + + /** + * Growth of business + */ + public const GROWTH_OF_BUSINESS = "DAI"; + + /** + * Introduction allowance + */ + public const INTRODUCTION_ALLOWANCE = "DAJ"; + + /** + * Multi-buy promotion + */ + public const MULTIBUY_PROMOTION = "DAK"; + + /** + * Partnership + */ + public const PARTNERSHIP = "DAL"; + + /** + * Return handling + */ + public const RETURN_HANDLING = "DAM"; + + /** + * Minimum order not fulfilled charge + */ + public const MINIMUM_ORDER_NOT_FULFILLED_CHARGE = "DAN"; + + /** + * Point of sales threshold allowance + */ + public const POINT_OF_SALES_THRESHOLD_ALLOWANCE = "DAO"; + + /** + * Wholesaling discount + */ + public const WHOLESALING_DISCOUNT = "DAP"; + + /** + * Documentary credits transfer commission + */ + public const DOCUMENTARY_CREDITS_TRANSFER_COMMISSION = "DAQ"; + + /** + * Delivery + */ + public const DELIVERY = "DL"; + + /** + * Engraving + */ + public const ENGRAVING = "EG"; + + /** + * Expediting + */ + public const EXPEDITING = "EP"; + + /** + * Exchange rate guarantee + */ + public const EXCHANGE_RATE_GUARANTEE = "ER"; + + /** + * Fabrication + */ + public const FABRICATION = "FAA"; + + /** + * Freight equalization + */ + public const FREIGHT_EQUALIZATION = "FAB"; + + /** + * Freight extraordinary handling + */ + public const FREIGHT_EXTRAORDINARY_HANDLING = "FAC"; + + /** + * Freight service + */ + public const FREIGHT_SERVICE = "FC"; + + /** + * Filling/handling + */ + public const FILLING_HANDLING = "FH"; + + /** + * Financing + */ + public const FINANCING = "FI"; + + /** + * Grinding + */ + public const GRINDING = "GAA"; + + /** + * Hose + */ + public const HOSE = "HAA"; + + /** + * Handling + */ + public const HANDLING = "HD"; + + /** + * Hoisting and hauling + */ + public const HOISTING_AND_HAULING = "HH"; + + /** + * Installation + */ + public const INSTALLATION = "IAA"; + + /** + * Installation and warranty + */ + public const INSTALLATION_AND_WARRANTY = "IAB"; + + /** + * Inside delivery + */ + public const INSIDE_DELIVERY = "ID"; + + /** + * Inspection + */ + public const INSPECTION = "IF"; + + /** + * Installation and training + */ + public const INSTALLATION_AND_TRAINING = "IR"; + + /** + * Invoicing + */ + public const INVOICING = "IS"; + + /** + * Koshering + */ + public const KOSHERING = "KO"; + + /** + * Carrier count + */ + public const CARRIER_COUNT = "L1"; + + /** + * Labelling + */ + public const LABELLING = "LA"; + + /** + * Labour + */ + public const LABOUR = "LAA"; + + /** + * Repair and return + */ + public const REPAIR_AND_RETURN = "LAB"; + + /** + * Legalisation + */ + public const LEGALISATION = "LF"; + + /** + * Mounting + */ + public const MOUNTING = "MAE"; + + /** + * Mail invoice + */ + public const MAIL_INVOICE = "MI"; + + /** + * Mail invoice to each location + */ + public const MAIL_INVOICE_TO_EACH_LOCATION = "ML"; + + /** + * Non-returnable containers + */ + public const NONRETURNABLE_CONTAINERS = "NAA"; + + /** + * Outside cable connectors + */ + public const OUTSIDE_CABLE_CONNECTORS = "OA"; + + /** + * Invoice with shipment + */ + public const INVOICE_WITH_SHIPMENT = "PA"; + + /** + * Phosphatizing (steel treatment) + */ + public const PHOSPHATIZING_STEEL_TREATMENT = "PAA"; + + /** + * Packing + */ + public const PACKING = "PC"; + + /** + * Palletizing + */ + public const PALLETIZING = "PL"; + + /** + * Repacking + */ + public const REPACKING = "RAB"; + + /** + * Repair + */ + public const REPAIR = "RAC"; + + /** + * Returnable container + */ + public const RETURNABLE_CONTAINER = "RAD"; + + /** + * Restocking + */ + public const RESTOCKING = "RAF"; + + /** + * Re-delivery + */ + public const REDELIVERY = "RE"; + + /** + * Refurbishing + */ + public const REFURBISHING = "RF"; + + /** + * Rail wagon hire + */ + public const RAIL_WAGON_HIRE = "RH"; + + /** + * Loading + */ + public const LOADING = "RV"; + + /** + * Salvaging + */ + public const SALVAGING = "SA"; + + /** + * Shipping and handling + */ + public const SHIPPING_AND_HANDLING = "SAA"; + + /** + * Special packaging + */ + public const SPECIAL_PACKAGING = "SAD"; + + /** + * Stamping + */ + public const STAMPING = "SAE"; + + /** + * Consignee unload + */ + public const CONSIGNEE_UNLOAD = "SAI"; + + /** + * Shrink-wrap + */ + public const SHRINKWRAP = "SG"; + + /** + * Special handling + */ + public const SPECIAL_HANDLING = "SH"; + + /** + * Special finish + */ + public const SPECIAL_FINISH = "SM"; + + /** + * Set-up + */ + public const SETUP = "SU"; + + /** + * Tank renting + */ + public const TANK_RENTING = "TAB"; + + /** + * Testing + */ + public const TESTING = "TAC"; + + /** + * Transportation - third party billing + */ + public const TRANSPORTATION__THIRD_PARTY_BILLING = "TT"; + + /** + * Transportation by vendor + */ + public const TRANSPORTATION_BY_VENDOR = "TV"; + + /** + * Drop yard + */ + public const DROP_YARD = "V1"; + + /** + * Drop dock + */ + public const DROP_DOCK = "V2"; + + /** + * Warehousing + */ + public const WAREHOUSING = "WH"; + + /** + * Combine all same day shipment + */ + public const COMBINE_ALL_SAME_DAY_SHIPMENT = "XAA"; + + /** + * Split pick-up + */ + public const SPLIT_PICKUP = "YY"; + + /** + * Mutually defined + */ + public const MUTUALLY_DEFINED = "ZZZ"; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdCountryCodes.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdCountryCodes.php new file mode 100644 index 000000000..aab653262 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdCountryCodes.php @@ -0,0 +1,1272 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdCountryCodes +{ + /** + * Andorra + */ + public const ANDORRA = "AD"; + + /** + * United Arab Emirates (the) + */ + public const UNITED_ARAB_EMIRATES_THE = "AE"; + + /** + * Afghanistan + */ + public const AFGHANISTAN = "AF"; + + /** + * Antigua and Barbuda + */ + public const ANTIGUA_AND_BARBUDA = "AG"; + + /** + * Anguilla + */ + public const ANGUILLA = "AI"; + + /** + * Albania + */ + public const ALBANIA = "AL"; + + /** + * Armenia + */ + public const ARMENIA = "AM"; + + /** + * Angola + */ + public const ANGOLA = "AO"; + + /** + * Antarctica + */ + public const ANTARCTICA = "AQ"; + + /** + * Argentina + */ + public const ARGENTINA = "AR"; + + /** + * American Samoa + */ + public const AMERICAN_SAMOA = "AS"; + + /** + * Austria + */ + public const AUSTRIA = "AT"; + + /** + * Australia + */ + public const AUSTRALIA = "AU"; + + /** + * Aruba + */ + public const ARUBA = "AW"; + + /** + * Ã…land Islands + */ + public const LAND_ISLANDS = "AX"; + + /** + * Azerbaijan + */ + public const AZERBAIJAN = "AZ"; + + /** + * Bosnia and Herzegovina + */ + public const BOSNIA_AND_HERZEGOVINA = "BA"; + + /** + * Barbados + */ + public const BARBADOS = "BB"; + + /** + * Bangladesh + */ + public const BANGLADESH = "BD"; + + /** + * Belgium + */ + public const BELGIUM = "BE"; + + /** + * Burkina Faso + */ + public const BURKINA_FASO = "BF"; + + /** + * Bulgaria + */ + public const BULGARIA = "BG"; + + /** + * Bahrain + */ + public const BAHRAIN = "BH"; + + /** + * Burundi + */ + public const BURUNDI = "BI"; + + /** + * Benin + */ + public const BENIN = "BJ"; + + /** + * Saint Barthélemy + */ + public const SAINT_BARTHLEMY = "BL"; + + /** + * Bermuda + */ + public const BERMUDA = "BM"; + + /** + * Brunei Darussalam + */ + public const BRUNEI_DARUSSALAM = "BN"; + + /** + * Bolivia (Plurinational State of) + */ + public const BOLIVIA_PLURINATIONAL_STATE_OF = "BO"; + + /** + * Bonaire, Sint Eustatius and Saba + */ + public const BONAIRE_SINT_EUSTATIUS_AND_SABA = "BQ"; + + /** + * Brazil + */ + public const BRAZIL = "BR"; + + /** + * Bahamas (the) + */ + public const BAHAMAS_THE = "BS"; + + /** + * Bhutan + */ + public const BHUTAN = "BT"; + + /** + * Bouvet Island + */ + public const BOUVET_ISLAND = "BV"; + + /** + * Botswana + */ + public const BOTSWANA = "BW"; + + /** + * Belarus + */ + public const BELARUS = "BY"; + + /** + * Belize + */ + public const BELIZE = "BZ"; + + /** + * Canada + */ + public const CANADA = "CA"; + + /** + * Cocos (Keeling) Islands (the) + */ + public const COCOS_KEELING_ISLANDS_THE = "CC"; + + /** + * Congo (the Democratic Republic of the) + */ + public const CONGO_THE_DEMOCRATIC_REPUBLIC_OF_THE = "CD"; + + /** + * Central African Republic (the) + */ + public const CENTRAL_AFRICAN_REPUBLIC_THE = "CF"; + + /** + * Congo (the) + */ + public const CONGO_THE = "CG"; + + /** + * Switzerland + */ + public const SWITZERLAND = "CH"; + + /** + * Côte d'Ivoire + */ + public const CTE_DIVOIRE = "CI"; + + /** + * Cook Islands (the) + */ + public const COOK_ISLANDS_THE = "CK"; + + /** + * Chile + */ + public const CHILE = "CL"; + + /** + * Cameroon + */ + public const CAMEROON = "CM"; + + /** + * China + */ + public const CHINA = "CN"; + + /** + * Colombia + */ + public const COLOMBIA = "CO"; + + /** + * Costa Rica + */ + public const COSTA_RICA = "CR"; + + /** + * Cuba + */ + public const CUBA = "CU"; + + /** + * Cabo Verde + */ + public const CABO_VERDE = "CV"; + + /** + * Curaçao + */ + public const CURAAO = "CW"; + + /** + * Christmas Island + */ + public const CHRISTMAS_ISLAND = "CX"; + + /** + * Cyprus + */ + public const CYPRUS = "CY"; + + /** + * Czechia + */ + public const CZECHIA = "CZ"; + + /** + * Germany + */ + public const GERMANY = "DE"; + + /** + * Djibouti + */ + public const DJIBOUTI = "DJ"; + + /** + * Denmark + */ + public const DENMARK = "DK"; + + /** + * Dominica + */ + public const DOMINICA = "DM"; + + /** + * Dominican Republic (the) + */ + public const DOMINICAN_REPUBLIC_THE = "DO"; + + /** + * Algeria + */ + public const ALGERIA = "DZ"; + + /** + * Ecuador + */ + public const ECUADOR = "EC"; + + /** + * Estonia + */ + public const ESTONIA = "EE"; + + /** + * Egypt + */ + public const EGYPT = "EG"; + + /** + * Western Sahara* + */ + public const WESTERN_SAHARA = "EH"; + + /** + * Eritrea + */ + public const ERITREA = "ER"; + + /** + * Spain + */ + public const SPAIN = "ES"; + + /** + * Ethiopia + */ + public const ETHIOPIA = "ET"; + + /** + * Finland + */ + public const FINLAND = "FI"; + + /** + * Fiji + */ + public const FIJI = "FJ"; + + /** + * Falkland Islands (the) [Malvinas] + */ + public const FALKLAND_ISLANDS_THE_MALVINAS = "FK"; + + /** + * Micronesia (Federated States of) + */ + public const MICRONESIA_FEDERATED_STATES_OF = "FM"; + + /** + * Faroe Islands (the) + */ + public const FAROE_ISLANDS_THE = "FO"; + + /** + * France + */ + public const FRANCE = "FR"; + + /** + * Gabon + */ + public const GABON = "GA"; + + /** + * United Kingdom of Great Britain and Northern Ireland (the) + */ + public const UNITED_KINGDOM_OF_GREAT_BRITAIN_AND_NORTHERN_IRELAND_THE = "GB"; + + /** + * Grenada + */ + public const GRENADA = "GD"; + + /** + * Georgia + */ + public const GEORGIA = "GE"; + + /** + * French Guiana + */ + public const FRENCH_GUIANA = "GF"; + + /** + * Guernsey + */ + public const GUERNSEY = "GG"; + + /** + * Ghana + */ + public const GHANA = "GH"; + + /** + * Gibraltar + */ + public const GIBRALTAR = "GI"; + + /** + * Greenland + */ + public const GREENLAND = "GL"; + + /** + * Gambia (the) + */ + public const GAMBIA_THE = "GM"; + + /** + * Guinea + */ + public const GUINEA = "GN"; + + /** + * Guadeloupe + */ + public const GUADELOUPE = "GP"; + + /** + * Equatorial Guinea + */ + public const EQUATORIAL_GUINEA = "GQ"; + + /** + * Greece + */ + public const GREECE = "GR"; + + /** + * South Georgia and the South Sandwich Islands + */ + public const SOUTH_GEORGIA_AND_THE_SOUTH_SANDWICH_ISLANDS = "GS"; + + /** + * Guatemala + */ + public const GUATEMALA = "GT"; + + /** + * Guam + */ + public const GUAM = "GU"; + + /** + * Guinea-Bissau + */ + public const GUINEABISSAU = "GW"; + + /** + * Guyana + */ + public const GUYANA = "GY"; + + /** + * Hong Kong + */ + public const HONG_KONG = "HK"; + + /** + * Heard Island and McDonald Islands + */ + public const HEARD_ISLAND_AND_MCDONALD_ISLANDS = "HM"; + + /** + * Honduras + */ + public const HONDURAS = "HN"; + + /** + * Croatia + */ + public const CROATIA = "HR"; + + /** + * Haiti + */ + public const HAITI = "HT"; + + /** + * Hungary + */ + public const HUNGARY = "HU"; + + /** + * Indonesia + */ + public const INDONESIA = "ID"; + + /** + * Ireland + */ + public const IRELAND = "IE"; + + /** + * Israel + */ + public const ISRAEL = "IL"; + + /** + * Isle of Man + */ + public const ISLE_OF_MAN = "IM"; + + /** + * India + */ + public const INDIA = "IN"; + + /** + * British Indian Ocean Territory (the) + */ + public const BRITISH_INDIAN_OCEAN_TERRITORY_THE = "IO"; + + /** + * Iraq + */ + public const IRAQ = "IQ"; + + /** + * Iran (Islamic Republic of) + */ + public const IRAN_ISLAMIC_REPUBLIC_OF = "IR"; + + /** + * Iceland + */ + public const ICELAND = "IS"; + + /** + * Italy + */ + public const ITALY = "IT"; + + /** + * Jersey + */ + public const JERSEY = "JE"; + + /** + * Jamaica + */ + public const JAMAICA = "JM"; + + /** + * Jordan + */ + public const JORDAN = "JO"; + + /** + * Japan + */ + public const JAPAN = "JP"; + + /** + * Kenya + */ + public const KENYA = "KE"; + + /** + * Kyrgyzstan + */ + public const KYRGYZSTAN = "KG"; + + /** + * Cambodia + */ + public const CAMBODIA = "KH"; + + /** + * Kiribati + */ + public const KIRIBATI = "KI"; + + /** + * Comoros (the) + */ + public const COMOROS_THE = "KM"; + + /** + * Saint Kitts and Nevis + */ + public const SAINT_KITTS_AND_NEVIS = "KN"; + + /** + * Korea (the Democratic People's Republic of) + */ + public const KOREA_THE_DEMOCRATIC_PEOPLES_REPUBLIC_OF = "KP"; + + /** + * Korea (the Republic of) + */ + public const KOREA_THE_REPUBLIC_OF = "KR"; + + /** + * Kuwait + */ + public const KUWAIT = "KW"; + + /** + * Cayman Islands (the) + */ + public const CAYMAN_ISLANDS_THE = "KY"; + + /** + * Kazakhstan + */ + public const KAZAKHSTAN = "KZ"; + + /** + * Lao People's Democratic Republic (the) + */ + public const LAO_PEOPLES_DEMOCRATIC_REPUBLIC_THE = "LA"; + + /** + * Lebanon + */ + public const LEBANON = "LB"; + + /** + * Saint Lucia + */ + public const SAINT_LUCIA = "LC"; + + /** + * Liechtenstein + */ + public const LIECHTENSTEIN = "LI"; + + /** + * Sri Lanka + */ + public const SRI_LANKA = "LK"; + + /** + * Liberia + */ + public const LIBERIA = "LR"; + + /** + * Lesotho + */ + public const LESOTHO = "LS"; + + /** + * Lithuania + */ + public const LITHUANIA = "LT"; + + /** + * Luxembourg + */ + public const LUXEMBOURG = "LU"; + + /** + * Latvia + */ + public const LATVIA = "LV"; + + /** + * Libya + */ + public const LIBYA = "LY"; + + /** + * Morocco + */ + public const MOROCCO = "MA"; + + /** + * Monaco + */ + public const MONACO = "MC"; + + /** + * Moldova (the Republic of) + */ + public const MOLDOVA_THE_REPUBLIC_OF = "MD"; + + /** + * Montenegro + */ + public const MONTENEGRO = "ME"; + + /** + * Saint Martin (French part) + */ + public const SAINT_MARTIN_FRENCH_PART = "MF"; + + /** + * Madagascar + */ + public const MADAGASCAR = "MG"; + + /** + * Marshall Islands (the) + */ + public const MARSHALL_ISLANDS_THE = "MH"; + + /** + * North Macedonia + */ + public const NORTH_MACEDONIA = "MK"; + + /** + * Mali + */ + public const MALI = "ML"; + + /** + * Myanmar + */ + public const MYANMAR = "MM"; + + /** + * Mongolia + */ + public const MONGOLIA = "MN"; + + /** + * Macao + */ + public const MACAO = "MO"; + + /** + * Northern Mariana Islands (the) + */ + public const NORTHERN_MARIANA_ISLANDS_THE = "MP"; + + /** + * Martinique + */ + public const MARTINIQUE = "MQ"; + + /** + * Mauritania + */ + public const MAURITANIA = "MR"; + + /** + * Montserrat + */ + public const MONTSERRAT = "MS"; + + /** + * Malta + */ + public const MALTA = "MT"; + + /** + * Mauritius + */ + public const MAURITIUS = "MU"; + + /** + * Maldives + */ + public const MALDIVES = "MV"; + + /** + * Malawi + */ + public const MALAWI = "MW"; + + /** + * Mexico + */ + public const MEXICO = "MX"; + + /** + * Malaysia + */ + public const MALAYSIA = "MY"; + + /** + * Mozambique + */ + public const MOZAMBIQUE = "MZ"; + + /** + * Namibia + */ + public const NAMIBIA = "NA"; + + /** + * New Caledonia + */ + public const NEW_CALEDONIA = "NC"; + + /** + * Niger (the) + */ + public const NIGER_THE = "NE"; + + /** + * Norfolk Island + */ + public const NORFOLK_ISLAND = "NF"; + + /** + * Nigeria + */ + public const NIGERIA = "NG"; + + /** + * Nicaragua + */ + public const NICARAGUA = "NI"; + + /** + * Netherlands (the) + */ + public const NETHERLANDS_THE = "NL"; + + /** + * Norway + */ + public const NORWAY = "NO"; + + /** + * Nepal + */ + public const NEPAL = "NP"; + + /** + * Nauru + */ + public const NAURU = "NR"; + + /** + * Niue + */ + public const NIUE = "NU"; + + /** + * New Zealand + */ + public const NEW_ZEALAND = "NZ"; + + /** + * Oman + */ + public const OMAN = "OM"; + + /** + * Panama + */ + public const PANAMA = "PA"; + + /** + * Peru + */ + public const PERU = "PE"; + + /** + * French Polynesia + */ + public const FRENCH_POLYNESIA = "PF"; + + /** + * Papua New Guinea + */ + public const PAPUA_NEW_GUINEA = "PG"; + + /** + * Philippines (the) + */ + public const PHILIPPINES_THE = "PH"; + + /** + * Pakistan + */ + public const PAKISTAN = "PK"; + + /** + * Poland + */ + public const POLAND = "PL"; + + /** + * Saint Pierre and Miquelon + */ + public const SAINT_PIERRE_AND_MIQUELON = "PM"; + + /** + * Pitcairn + */ + public const PITCAIRN = "PN"; + + /** + * Puerto Rico + */ + public const PUERTO_RICO = "PR"; + + /** + * Palestine, State of + */ + public const PALESTINE_STATE_OF = "PS"; + + /** + * Portugal + */ + public const PORTUGAL = "PT"; + + /** + * Palau + */ + public const PALAU = "PW"; + + /** + * Paraguay + */ + public const PARAGUAY = "PY"; + + /** + * Qatar + */ + public const QATAR = "QA"; + + /** + * Réunion + */ + public const RUNION = "RE"; + + /** + * Romania + */ + public const ROMANIA = "RO"; + + /** + * Serbia + */ + public const SERBIA = "RS"; + + /** + * Russian Federation (the) + */ + public const RUSSIAN_FEDERATION_THE = "RU"; + + /** + * Rwanda + */ + public const RWANDA = "RW"; + + /** + * Saudi Arabia + */ + public const SAUDI_ARABIA = "SA"; + + /** + * Solomon Islands + */ + public const SOLOMON_ISLANDS = "SB"; + + /** + * Seychelles + */ + public const SEYCHELLES = "SC"; + + /** + * Sudan (the) + */ + public const SUDAN_THE = "SD"; + + /** + * Sweden + */ + public const SWEDEN = "SE"; + + /** + * Singapore + */ + public const SINGAPORE = "SG"; + + /** + * Saint Helena, Ascension and Tristan da Cunha + */ + public const SAINT_HELENA_ASCENSION_AND_TRISTAN_DA_CUNHA = "SH"; + + /** + * Slovenia + */ + public const SLOVENIA = "SI"; + + /** + * Svalbard and Jan Mayen + */ + public const SVALBARD_AND_JAN_MAYEN = "SJ"; + + /** + * Slovakia + */ + public const SLOVAKIA = "SK"; + + /** + * Sierra Leone + */ + public const SIERRA_LEONE = "SL"; + + /** + * San Marino + */ + public const SAN_MARINO = "SM"; + + /** + * Senegal + */ + public const SENEGAL = "SN"; + + /** + * Somalia + */ + public const SOMALIA = "SO"; + + /** + * Suriname + */ + public const SURINAME = "SR"; + + /** + * South Sudan + */ + public const SOUTH_SUDAN = "SS"; + + /** + * Sao Tome and Principe + */ + public const SAO_TOME_AND_PRINCIPE = "ST"; + + /** + * El Salvador + */ + public const EL_SALVADOR = "SV"; + + /** + * Sint Maarten (Dutch part) + */ + public const SINT_MAARTEN_DUTCH_PART = "SX"; + + /** + * Syrian Arab Republic (the) + */ + public const SYRIAN_ARAB_REPUBLIC_THE = "SY"; + + /** + * Eswatini + */ + public const ESWATINI = "SZ"; + + /** + * Turks and Caicos Islands (the) + */ + public const TURKS_AND_CAICOS_ISLANDS_THE = "TC"; + + /** + * Chad + */ + public const CHAD = "TD"; + + /** + * French Southern Territories (the) + */ + public const FRENCH_SOUTHERN_TERRITORIES_THE = "TF"; + + /** + * Togo + */ + public const TOGO = "TG"; + + /** + * Thailand + */ + public const THAILAND = "TH"; + + /** + * Tajikistan + */ + public const TAJIKISTAN = "TJ"; + + /** + * Tokelau + */ + public const TOKELAU = "TK"; + + /** + * Timor-Leste + */ + public const TIMORLESTE = "TL"; + + /** + * Turkmenistan + */ + public const TURKMENISTAN = "TM"; + + /** + * Tunisia + */ + public const TUNISIA = "TN"; + + /** + * Tonga + */ + public const TONGA = "TO"; + + /** + * Turkey + */ + public const TURKEY = "TR"; + + /** + * Trinidad and Tobago + */ + public const TRINIDAD_AND_TOBAGO = "TT"; + + /** + * Tuvalu + */ + public const TUVALU = "TV"; + + /** + * Taiwan (Province of China) + */ + public const TAIWAN_PROVINCE_OF_CHINA = "TW"; + + /** + * Tanzania, the United Republic of + */ + public const TANZANIA_THE_UNITED_REPUBLIC_OF = "TZ"; + + /** + * Ukraine + */ + public const UKRAINE = "UA"; + + /** + * Uganda + */ + public const UGANDA = "UG"; + + /** + * United States Minor Outlying Islands (the) + */ + public const UNITED_STATES_MINOR_OUTLYING_ISLANDS_THE = "UM"; + + /** + * United States of America (the) + */ + public const UNITED_STATES_OF_AMERICA_THE = "US"; + + /** + * Uruguay + */ + public const URUGUAY = "UY"; + + /** + * Uzbekistan + */ + public const UZBEKISTAN = "UZ"; + + /** + * Holy See (the) + */ + public const HOLY_SEE_THE = "VA"; + + /** + * Saint Vincent and the Grenadines + */ + public const SAINT_VINCENT_AND_THE_GRENADINES = "VC"; + + /** + * Venezuela (Bolivarian Republic of) + */ + public const VENEZUELA_BOLIVARIAN_REPUBLIC_OF = "VE"; + + /** + * Virgin Islands (British) + */ + public const VIRGIN_ISLANDS_BRITISH = "VG"; + + /** + * Virgin Islands (U.S.) + */ + public const VIRGIN_ISLANDS_US = "VI"; + + /** + * Viet Nam + */ + public const VIET_NAM = "VN"; + + /** + * Vanuatu + */ + public const VANUATU = "VU"; + + /** + * Wallis and Futuna + */ + public const WALLIS_AND_FUTUNA = "WF"; + + /** + * Samoa + */ + public const SAMOA = "WS"; + + /** + * Yemen + */ + public const YEMEN = "YE"; + + /** + * Mayotte + */ + public const MAYOTTE = "YT"; + + /** + * South Africa + */ + public const SOUTH_AFRICA = "ZA"; + + /** + * Zambia + */ + public const ZAMBIA = "ZM"; + + /** + * Zimbabwe + */ + public const ZIMBABWE = "ZW"; + + /** + * Kosovo + */ + public const KOSOVO = "1A"; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdCurrencyCodes.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdCurrencyCodes.php new file mode 100644 index 000000000..c51351a94 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdCurrencyCodes.php @@ -0,0 +1,917 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdCurrencyCodes +{ + /** + * UAE Dirham + */ + public const UAE_DIRHAM = "AED"; + + /** + * Afghani + */ + public const AFGHANI = "AFN"; + + /** + * Lek + */ + public const LEK = "ALL"; + + /** + * Armenian Dram + */ + public const ARMENIAN_DRAM = "AMD"; + + /** + * Netherlands Antillean Guilder + */ + public const NETHERLANDS_ANTILLEAN_GUILDER = "ANG"; + + /** + * Kwanza + */ + public const KWANZA = "AOA"; + + /** + * Argentine Peso + */ + public const ARGENTINE_PESO = "ARS"; + + /** + * Australian Dollar + */ + public const AUSTRALIAN_DOLLAR = "AUD"; + + /** + * Aruban Florin + */ + public const ARUBAN_FLORIN = "AWG"; + + /** + * Azerbaijan Manat + */ + public const AZERBAIJAN_MANAT = "AZN"; + + /** + * Convertible Mark + */ + public const CONVERTIBLE_MARK = "BAM"; + + /** + * Barbados Dollar + */ + public const BARBADOS_DOLLAR = "BBD"; + + /** + * Taka + */ + public const TAKA = "BDT"; + + /** + * Bulgarian Lev + */ + public const BULGARIAN_LEV = "BGN"; + + /** + * Bahraini Dinar + */ + public const BAHRAINI_DINAR = "BHD"; + + /** + * Burundi Franc + */ + public const BURUNDI_FRANC = "BIF"; + + /** + * Bermudian Dollar + */ + public const BERMUDIAN_DOLLAR = "BMD"; + + /** + * Brunei Dollar + */ + public const BRUNEI_DOLLAR = "BND"; + + /** + * Boliviano + */ + public const BOLIVIANO = "BOB"; + + /** + * Mvdol + */ + public const MVDOL = "BOV"; + + /** + * Brazilian Real + */ + public const BRAZILIAN_REAL = "BRL"; + + /** + * Bahamian Dollar + */ + public const BAHAMIAN_DOLLAR = "BSD"; + + /** + * Ngultrum + */ + public const NGULTRUM = "BTN"; + + /** + * Pula + */ + public const PULA = "BWP"; + + /** + * Belarusian Ruble + */ + public const BELARUSIAN_RUBLE = "BYN"; + + /** + * Belize Dollar + */ + public const BELIZE_DOLLAR = "BZD"; + + /** + * Canadian Dollar + */ + public const CANADIAN_DOLLAR = "CAD"; + + /** + * Congolese Franc + */ + public const CONGOLESE_FRANC = "CDF"; + + /** + * WIR Euro + */ + public const WIR_EURO = "CHE"; + + /** + * Swiss Franc + */ + public const SWISS_FRANC = "CHF"; + + /** + * WIR Franc + */ + public const WIR_FRANC = "CHW"; + + /** + * Unidad de Fomento + */ + public const UNIDAD_DE_FOMENTO = "CLF"; + + /** + * Chilean Peso + */ + public const CHILEAN_PESO = "CLP"; + + /** + * Yuan Renminbi + */ + public const YUAN_RENMINBI = "CNY"; + + /** + * Colombian Peso + */ + public const COLOMBIAN_PESO = "COP"; + + /** + * Unidad de Valor Real + */ + public const UNIDAD_DE_VALOR_REAL = "COU"; + + /** + * Costa Rican Colon + */ + public const COSTA_RICAN_COLON = "CRC"; + + /** + * Peso Convertible + */ + public const PESO_CONVERTIBLE = "CUC"; + + /** + * Cuban Peso + */ + public const CUBAN_PESO = "CUP"; + + /** + * Cabo Verde Escudo + */ + public const CABO_VERDE_ESCUDO = "CVE"; + + /** + * Czech Koruna + */ + public const CZECH_KORUNA = "CZK"; + + /** + * Djibouti Franc + */ + public const DJIBOUTI_FRANC = "DJF"; + + /** + * Danish Krone + */ + public const DANISH_KRONE = "DKK"; + + /** + * Dominican Peso + */ + public const DOMINICAN_PESO = "DOP"; + + /** + * Algerian Dinar + */ + public const ALGERIAN_DINAR = "DZD"; + + /** + * Egyptian Pound + */ + public const EGYPTIAN_POUND = "EGP"; + + /** + * Nakfa + */ + public const NAKFA = "ERN"; + + /** + * Ethiopian Birr + */ + public const ETHIOPIAN_BIRR = "ETB"; + + /** + * Euro + */ + public const EURO = "EUR"; + + /** + * Fiji Dollar + */ + public const FIJI_DOLLAR = "FJD"; + + /** + * Falkland Islands Pound + */ + public const FALKLAND_ISLANDS_POUND = "FKP"; + + /** + * Pound Sterling + */ + public const POUND_STERLING = "GBP"; + + /** + * Lari + */ + public const LARI = "GEL"; + + /** + * Ghana Cedi + */ + public const GHANA_CEDI = "GHS"; + + /** + * Gibraltar Pound + */ + public const GIBRALTAR_POUND = "GIP"; + + /** + * Dalasi + */ + public const DALASI = "GMD"; + + /** + * Guinean Franc + */ + public const GUINEAN_FRANC = "GNF"; + + /** + * Quetzal + */ + public const QUETZAL = "GTQ"; + + /** + * Guyana Dollar + */ + public const GUYANA_DOLLAR = "GYD"; + + /** + * Hong Kong Dollar + */ + public const HONG_KONG_DOLLAR = "HKD"; + + /** + * Lempira + */ + public const LEMPIRA = "HNL"; + + /** + * Kuna + */ + public const KUNA = "HRK"; + + /** + * Gourde + */ + public const GOURDE = "HTG"; + + /** + * Forint + */ + public const FORINT = "HUF"; + + /** + * Rupiah + */ + public const RUPIAH = "IDR"; + + /** + * New Israeli Sheqel + */ + public const NEW_ISRAELI_SHEQEL = "ILS"; + + /** + * Indian Rupee + */ + public const INDIAN_RUPEE = "INR"; + + /** + * Iraqi Dinar + */ + public const IRAQI_DINAR = "IQD"; + + /** + * Iranian Rial + */ + public const IRANIAN_RIAL = "IRR"; + + /** + * Iceland Krona + */ + public const ICELAND_KRONA = "ISK"; + + /** + * Jamaican Dollar + */ + public const JAMAICAN_DOLLAR = "JMD"; + + /** + * Jordanian Dinar + */ + public const JORDANIAN_DINAR = "JOD"; + + /** + * Yen + */ + public const YEN = "JPY"; + + /** + * Kenyan Shilling + */ + public const KENYAN_SHILLING = "KES"; + + /** + * Som + */ + public const SOM = "KGS"; + + /** + * Riel + */ + public const RIEL = "KHR"; + + /** + * Comorian Franc + */ + public const COMORIAN_FRANC = "KMF"; + + /** + * North Korean Won + */ + public const NORTH_KOREAN_WON = "KPW"; + + /** + * Won + */ + public const WON = "KRW"; + + /** + * Kuwaiti Dinar + */ + public const KUWAITI_DINAR = "KWD"; + + /** + * Cayman Islands Dollar + */ + public const CAYMAN_ISLANDS_DOLLAR = "KYD"; + + /** + * Tenge + */ + public const TENGE = "KZT"; + + /** + * Lao Kip + */ + public const LAO_KIP = "LAK"; + + /** + * Lebanese Pound + */ + public const LEBANESE_POUND = "LBP"; + + /** + * Sri Lanka Rupee + */ + public const SRI_LANKA_RUPEE = "LKR"; + + /** + * Liberian Dollar + */ + public const LIBERIAN_DOLLAR = "LRD"; + + /** + * Loti + */ + public const LOTI = "LSL"; + + /** + * Libyan Dinar + */ + public const LIBYAN_DINAR = "LYD"; + + /** + * Moroccan Dirham + */ + public const MOROCCAN_DIRHAM = "MAD"; + + /** + * Moldovan Leu + */ + public const MOLDOVAN_LEU = "MDL"; + + /** + * Malagasy Ariary + */ + public const MALAGASY_ARIARY = "MGA"; + + /** + * Denar + */ + public const DENAR = "MKD"; + + /** + * Kyat + */ + public const KYAT = "MMK"; + + /** + * Tugrik + */ + public const TUGRIK = "MNT"; + + /** + * Pataca + */ + public const PATACA = "MOP"; + + /** + * Ouguiya + */ + public const OUGUIYA = "MRU"; + + /** + * Mauritius Rupee + */ + public const MAURITIUS_RUPEE = "MUR"; + + /** + * Rufiyaa + */ + public const RUFIYAA = "MVR"; + + /** + * Malawi Kwacha + */ + public const MALAWI_KWACHA = "MWK"; + + /** + * Mexican Peso + */ + public const MEXICAN_PESO = "MXN"; + + /** + * Mexican Unidad de Inversion (UDI) + */ + public const MEXICAN_UNIDAD_DE_INVERSION_UDI = "MXV"; + + /** + * Malaysian Ringgit + */ + public const MALAYSIAN_RINGGIT = "MYR"; + + /** + * Mozambique Metical + */ + public const MOZAMBIQUE_METICAL = "MZN"; + + /** + * Namibia Dollar + */ + public const NAMIBIA_DOLLAR = "NAD"; + + /** + * Naira + */ + public const NAIRA = "NGN"; + + /** + * Cordoba Oro + */ + public const CORDOBA_ORO = "NIO"; + + /** + * Norwegian Krone + */ + public const NORWEGIAN_KRONE = "NOK"; + + /** + * Nepalese Rupee + */ + public const NEPALESE_RUPEE = "NPR"; + + /** + * New Zealand Dollar + */ + public const NEW_ZEALAND_DOLLAR = "NZD"; + + /** + * Rial Omani + */ + public const RIAL_OMANI = "OMR"; + + /** + * Balboa + */ + public const BALBOA = "PAB"; + + /** + * Sol + */ + public const SOL = "PEN"; + + /** + * Kina + */ + public const KINA = "PGK"; + + /** + * Philippine Peso + */ + public const PHILIPPINE_PESO = "PHP"; + + /** + * Pakistan Rupee + */ + public const PAKISTAN_RUPEE = "PKR"; + + /** + * Zloty + */ + public const ZLOTY = "PLN"; + + /** + * Guarani + */ + public const GUARANI = "PYG"; + + /** + * Qatari Rial + */ + public const QATARI_RIAL = "QAR"; + + /** + * Romanian Leu + */ + public const ROMANIAN_LEU = "RON"; + + /** + * Serbian Dinar + */ + public const SERBIAN_DINAR = "RSD"; + + /** + * Russian Ruble + */ + public const RUSSIAN_RUBLE = "RUB"; + + /** + * Rwanda Franc + */ + public const RWANDA_FRANC = "RWF"; + + /** + * Saudi Riyal + */ + public const SAUDI_RIYAL = "SAR"; + + /** + * Solomon Islands Dollar + */ + public const SOLOMON_ISLANDS_DOLLAR = "SBD"; + + /** + * Seychelles Rupee + */ + public const SEYCHELLES_RUPEE = "SCR"; + + /** + * Sudanese Pound + */ + public const SUDANESE_POUND = "SDG"; + + /** + * Swedish Krona + */ + public const SWEDISH_KRONA = "SEK"; + + /** + * Singapore Dollar + */ + public const SINGAPORE_DOLLAR = "SGD"; + + /** + * Saint Helena Pound + */ + public const SAINT_HELENA_POUND = "SHP"; + + /** + * Leone + */ + public const LEONE = "SLL"; + + /** + * Somali Shilling + */ + public const SOMALI_SHILLING = "SOS"; + + /** + * Surinam Dollar + */ + public const SURINAM_DOLLAR = "SRD"; + + /** + * South Sudanese Pound + */ + public const SOUTH_SUDANESE_POUND = "SSP"; + + /** + * Dobra + */ + public const DOBRA = "STN"; + + /** + * El Salvador Colon + */ + public const EL_SALVADOR_COLON = "SVC"; + + /** + * Syrian Pound + */ + public const SYRIAN_POUND = "SYP"; + + /** + * Lilangeni + */ + public const LILANGENI = "SZL"; + + /** + * Baht + */ + public const BAHT = "THB"; + + /** + * Somoni + */ + public const SOMONI = "TJS"; + + /** + * Turkmenistan New Manat + */ + public const TURKMENISTAN_NEW_MANAT = "TMT"; + + /** + * Tunisian Dinar + */ + public const TUNISIAN_DINAR = "TND"; + + /** + * Pa’anga + */ + public const PAANGA = "TOP"; + + /** + * Turkish Lira + */ + public const TURKISH_LIRA = "TRY"; + + /** + * Trinidad and Tobago Dollar + */ + public const TRINIDAD_AND_TOBAGO_DOLLAR = "TTD"; + + /** + * New Taiwan Dollar + */ + public const NEW_TAIWAN_DOLLAR = "TWD"; + + /** + * Tanzanian Shilling + */ + public const TANZANIAN_SHILLING = "TZS"; + + /** + * Hryvnia + */ + public const HRYVNIA = "UAH"; + + /** + * Uganda Shilling + */ + public const UGANDA_SHILLING = "UGX"; + + /** + * US Dollar + */ + public const US_DOLLAR = "USD"; + + /** + * US Dollar (Next day) + */ + public const US_DOLLAR_NEXT_DAY = "USN"; + + /** + * Uruguay Peso en Unidades Indexadas (UI) + */ + public const URUGUAY_PESO_EN_UNIDADES_INDEXADAS_UI = "UYI"; + + /** + * Peso Uruguayo + */ + public const PESO_URUGUAYO = "UYU"; + + /** + * Unidad Previsional + */ + public const UNIDAD_PREVISIONAL = "UYW"; + + /** + * Uzbekistan Sum + */ + public const UZBEKISTAN_SUM = "UZS"; + + /** + * Bolívar Soberano + */ + public const BOLVAR_SOBERANO = "VES"; + + /** + * Dong + */ + public const DONG = "VND"; + + /** + * Vatu + */ + public const VATU = "VUV"; + + /** + * Tala + */ + public const TALA = "WST"; + + /** + * CFA Franc BEAC + */ + public const CFA_FRANC_BEAC = "XAF"; + + /** + * Silver + */ + public const SILVER = "XAG"; + + /** + * Gold + */ + public const GOLD = "XAU"; + + /** + * Bond Markets Unit European Composite Unit (EURCO) + */ + public const BOND_MARKETS_UNIT_EUROPEAN_COMPOSITE_UNIT_EURCO = "XBA"; + + /** + * Bond Markets Unit European Monetary Unit (E.M.U.-6) + */ + public const BOND_MARKETS_UNIT_EUROPEAN_MONETARY_UNIT_EMU6 = "XBB"; + + /** + * Bond Markets Unit European Unit of Account 9 (E.U.A.-9) + */ + public const BOND_MARKETS_UNIT_EUROPEAN_UNIT_OF_ACCOUNT_9_EUA9 = "XBC"; + + /** + * Bond Markets Unit European Unit of Account 17 (E.U.A.-17) + */ + public const BOND_MARKETS_UNIT_EUROPEAN_UNIT_OF_ACCOUNT_17_EUA17 = "XBD"; + + /** + * East Caribbean Dollar + */ + public const EAST_CARIBBEAN_DOLLAR = "XCD"; + + /** + * SDR (Special Drawing Right) + */ + public const SDR_SPECIAL_DRAWING_RIGHT = "XDR"; + + /** + * CFA Franc BCEAO + */ + public const CFA_FRANC_BCEAO = "XOF"; + + /** + * Palladium + */ + public const PALLADIUM = "XPD"; + + /** + * CFP Franc + */ + public const CFP_FRANC = "XPF"; + + /** + * Platinum + */ + public const PLATINUM = "XPT"; + + /** + * Sucre + */ + public const SUCRE = "XSU"; + + /** + * Codes specifically reserved for testing purposes + */ + public const CODES_SPECIFICALLY_RESERVED_FOR_TESTING_PURPOSES = "XTS"; + + /** + * ADB Unit of Account + */ + public const ADB_UNIT_OF_ACCOUNT = "XUA"; + + /** + * The codes assigned for transactions where no currency is involved + */ + public const THE_CODES_ASSIGNED_FOR_TRANSACTIONS_WHERE_NO_CURRENCY_IS_INVOLVED = "XXX"; + + /** + * Yemeni Rial + */ + public const YEMENI_RIAL = "YER"; + + /** + * Rand + */ + public const RAND = "ZAR"; + + /** + * Zambian Kwacha + */ + public const ZAMBIAN_KWACHA = "ZMW"; + + /** + * Zimbabwe Dollar + */ + public const ZIMBABWE_DOLLAR = "ZWL"; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdDocumentType.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdDocumentType.php new file mode 100644 index 000000000..175a527d0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdDocumentType.php @@ -0,0 +1,6422 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + * @see https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:untdid.1001 + */ +class ZugferdDocumentType +{ + /** + * A claim for parts and/or labour charges (290) + * + * A claim for parts and/or labour charges incurred . + */ + public const A_CLAIM_FOR_PARTS_ANDOR_LABOUR_CHARGES = '290'; + + /** + * Accounting statement (832) + * + * Document specifying an accounting statement. + */ + public const ACCOUNTING_STATEMENT = '832'; + + /** + * Accounting voucher (526) + * + * A document/message justifying an accounting entry. + */ + public const ACCOUNTING_VOUCHER = '526'; + + /** + * Acknowledgement message (312) + * + * Message providing acknowledgement information at the business application + * level concerning the processing of a message. + */ + public const ACKNOWLEDGEMENT_MESSAGE = '312'; + + /** + * Acknowledgement of change of supplier (414) + * + * Acknowledgement of the change of supplier. + */ + public const ACKNOWLEDGEMENT_OF_CHANGE_OF_SUPPLIER = '414'; + + /** + * Acknowledgement of order (320) + * + * Document/message acknowledging an undertaking to fulfil an order and + * confirming conditions or acceptance of conditions. + */ + public const ACKNOWLEDGEMENT_OF_ORDER = '320'; + + /** + * Acknowledgment of receipt (767) + * + * Document/message confirming a receipt to the sending party. + */ + public const ACKNOWLEDGMENT_OF_RECEIPT = '767'; + + /** + * Advice of an amendment of a documentary credit (198) + * + * Advice of an amendment of a documentary credit. + */ + public const ADVICE_OF_AN_AMENDMENT_OF_A_DOCUMENTARY_CREDIT = '198'; + + /** + * Advice of collection (790) + * + * (1030) Document that is joined to the transport or sent by separate means, + * giving to the departure rail organization the proof that the cash-on + * delivery amount has been encashed by the arrival rail organization before + * reimbursement of the consignor. + */ + public const ADVICE_OF_COLLECTION = '790'; + + /** + * Advice of distribution of documents (370) + * + * Document/message in which the party responsible for the issue of a set of + * trade documents specifies the various recipients of originals and copies of + * these documents, with an indication of the number of copies distributed to + * each of them. + */ + public const ADVICE_OF_DISTRIBUTION_OF_DOCUMENTS = '370'; + + /** + * Advice report (769) + * + * Document reporting advice. + */ + public const ADVICE_REPORT = '769'; + + /** + * Advising items to be booked to a financial account (141) + * + * A document and/or message advising of items which have to be booked to a + * financial account. + */ + public const ADVISING_ITEMS_TO_BE_BOOKED_TO_A_FINANCIAL_ACCOUNT = '141'; + + /** + * AEO Certificate Full (891) + * + * Certificate issued to business that fulfils specified criteria to both AEO + * Certificate of Security and/or Safety and AEO Certificate of Conformity or + * Compliance by a national AEO recognized program (e.g. AEO-Customs + * Simplifications/Security and Safety (AEOC/AEOS) - Regulation(EU) No + * 952/2013). + */ + public const AEO_CERTIFICATE_FULL = '891'; + + /** + * AEO Certificate of Conformity or Compliance (879) + * + * Certificate issued to business that fulfils specified criteria for + * compliance with tax and customs obligations, as well as financial solvency + * by a national AEO recognized program (e.g. AEO-Customs Simplifications + * (AEOC) - Regulation (EU) No 952/2013). + */ + public const AEO_CERTIFICATE_OF_CONFORMITY_OR_COMPLIANCE = '879'; + + /** + * AEO Certificate of Security and/or Safety (878) + * + * Certificate issued to business that fulfils specified criteria applied to + * the security and safety of the logistics chain in the flow of foreign trade + * operations by a national AEO recognized program (e.g. AEO-Security and + * Safety (AEOS) - Regulation (EU) No 952/2013). + */ + public const AEO_CERTIFICATE_OF_SECURITY_ANDOR_SAFETY = '878'; + + /** + * Agreement to pay (212) + * + * Document/message in which the debtor expresses the intention to pay. + */ + public const AGREEMENT_TO_PAY = '212'; + + /** + * Air waybill (740) + * + * Document/message made out by or on behalf of the shipper which evidences + * the contract between the shipper and carrier(s) for carriage of goods over + * routes of the carrier(s) and which is identified by the airline prefix + * issuing the document plus a serial (IATA). + */ + public const AIR_WAYBILL = '740'; + + /** + * Amicable agreement (846) + * + * Document specifying an amicable agreement. + */ + public const AMICABLE_AGREEMENT = '846'; + + /** + * Announcement for returns (732) + * + * A message by which a party announces to another party details of goods for + * return due to specified reasons (e.g. returns for repair, returns because + * of damage, etc). + */ + public const ANNOUNCEMENT_FOR_RETURNS = '732'; + + /** + * Application acknowledgement and error report (294) + * + * A message used by an application to acknowledge reception of a message + * and/or to report any errors. + */ + public const APPLICATION_ACKNOWLEDGEMENT_AND_ERROR_REPORT = '294'; + + /** + * Application error and acknowledgement (305) + * + * A message to inform a message issuer that a previously sent message has + * been received by the addressee's application, or that a previously sent + * message has been rejected by the addressee's application. + */ + public const APPLICATION_ERROR_AND_ACKNOWLEDGEMENT = '305'; + + /** + * Application error message (313) + * + * Message indicating that a message was rejected due to errors encountered at + * the application level. + */ + public const APPLICATION_ERROR_MESSAGE = '313'; + + /** + * Application for banker's draft (412) + * + * Application by a customer to his bank to issue a banker's draft stating the + * amount and currency of the draft, the name of the payee and the place and + * country of payment. + */ + public const APPLICATION_FOR_BANKERS_DRAFT = '412'; + + /** + * Application for banker's guarantee (429) + * + * Document/message whereby a customer requests his bank to issue a guarantee + * in favour of a nominated party in another country, stating the amount and + * currency and the specific conditions of the guarantee. + */ + public const APPLICATION_FOR_BANKERS_GUARANTEE = '429'; + + /** + * Application for designation of berthing places (317) + * + * Document to apply for designation of berthing places. + */ + public const APPLICATION_FOR_DESIGNATION_OF_BERTHING_PLACES = '317'; + + /** + * Application for documentary credit (996) + * + * Message with application for opening of a documentary credit. + */ + public const APPLICATION_FOR_DOCUMENTARY_CREDIT = '996'; + + /** + * Application for exchange allocation (925) + * + * Document/message whereby an importer/buyer requests the competent body to + * allocate an amount of foreign exchange to be transferred to an + * exporter/seller in payment for goods. + */ + public const APPLICATION_FOR_EXCHANGE_ALLOCATION = '925'; + + /** + * Application for goods control certificate (840) + * + * Document/message submitted to a competent body by party requesting a Goods + * control certificate to be issued in accordance with national or + * international standards, or conforming to legislation in the importing + * country, or as specified in the contract. + */ + public const APPLICATION_FOR_GOODS_CONTROL_CERTIFICATE = '840'; + + /** + * Application for inspection certificate (855) + * + * Document/message submitted to a competent body by a party requesting an + * Inspection certificate to be issued in accordance with national or + * international standards, or conforming to legislation in the country in + * which it is required, or as specified in the contract. + */ + public const APPLICATION_FOR_INSPECTION_CERTIFICATE = '855'; + + /** + * Application for phytosanitary certificate (850) + * + * Document/message submitted to a competent body by party requesting a + * Phytosanitary certificate to be issued. + */ + public const APPLICATION_FOR_PHYTOSANITARY_CERTIFICATE = '850'; + + /** + * Application for shifting from the designated place in port (318) + * + * Document to apply for shifting from the designated place in port. + */ + public const APPLICATION_FOR_SHIFTING_FROM_THE_DESIGNATED_PLACE_IN_PORT = '318'; + + /** + * Application for usage of berth or mooring facilities (316) + * + * Document to apply for usage of berth or mooring facilities. + */ + public const APPLICATION_FOR_USAGE_OF_BERTH_OR_MOORING_FACILITIES = '316'; + + /** + * Application for vessel's entering into port area in night-time (353) + * + * Document to apply for vessel's entering into port area in night-time. + */ + public const APPLICATION_FOR_VESSELS_ENTERING_INTO_PORT_AREA_IN_NIGHTTIME = '353'; + + /** + * Approved unpriced bill of quantity (216) + * + * Document/message providing an approved detailed, quantity based + * specification (bill of quantity), in an unpriced form. + */ + public const APPROVED_UNPRICED_BILL_OF_QUANTITY = '216'; + + /** + * Arrival information (98) + * + * Message reporting the arrival details of goods or cargo. + */ + public const ARRIVAL_INFORMATION = '98'; + + /** + * Arrival notice (goods) (781) + * + * Notification from the carrier to the consignee in writing, by telephone or + * by any other means (express letter, message, telegram, etc.) informing him + * that a consignment addressed to him is being or will shortly be held at his + * disposal at a specified point in the place of destination. + */ + public const ARRIVAL_NOTICE_GOODS = '781'; + + /** + * Assessment report (818) + * + * Document reporting an assessment. + */ + public const ASSESSMENT_REPORT = '818'; + + /** + * ATA carnet (955) + * + * International Customs document (Admission Temporaire / Temporary Admission) + * which, issued under the terms of the ATA Convention (1961), incorporates an + * internationally valid guarantee and may be used, in lieu of national + * Customs documents and as security for import duties and taxes, to cover the + * temporary admission of goods and, where appropriate, the transit of goods. + * If accepted for controlling the temporary export and reimport of goods, + * international guarantee does not apply (CCC). + */ + public const ATA_CARNET = '955'; + + /** + * Audio (859) + * + * Document consisting of an audio recording (e.g. a telephone conversation or + * alike). + */ + public const AUDIO = '859'; + + /** + * Authorisation to plan and ship orders (173) + * + * Document or message that authorises receiver to plan and ship orders based + * on information in this message. + */ + public const AUTHORISATION_TO_PLAN_AND_SHIP_ORDERS = '173'; + + /** + * Authorisation to plan and suggest orders (172) + * + * Document or message that authorises receiver to plan orders, based on + * information in this message, and send these orders as suggestions to the + * sender. + */ + public const AUTHORISATION_TO_PLAN_AND_SUGGEST_ORDERS = '172'; + + /** + * Bailment contract (148) + * + * A document authorizing the bailing of goods. + */ + public const BAILMENT_CONTRACT = '148'; + + /** + * Balance confirmation (182) + * + * Confirmation of a balance at an entry date. + */ + public const BALANCE_CONFIRMATION = '182'; + + /** + * Bank to bank funds transfer (247) + * + * The message is a bank to bank funds transfer. + */ + public const BANK_TO_BANK_FUNDS_TRANSFER = '247'; + + /** + * Banker's draft (485) + * + * Draft drawn in favour of a third party either by one bank on another bank, + * or by a branch of a bank on its head office (or vice versa) or upon another + * branch of the same bank. In either case, the draft should comply with the + * specifications laid down for cheques in the country in which it is to be + * payable. + */ + public const BANKERS_DRAFT = '485'; + + /** + * Banker's guarantee (430) + * + * Document/message in which a bank undertakes to pay out a limited amount of + * money to a designated party, on conditions stated therein (other than those + * laid down in the Uniform Customs Practice). + */ + public const BANKERS_GUARANTEE = '430'; + + /** + * Banking status (46) + * + * A banking status document and/or message. + */ + public const BANKING_STATUS = '46'; + + /** + * Basic agreement (149) + * + * A document indicating an agreement containing basic terms and conditions + * applicable to future contracts between two parties. + */ + public const BASIC_AGREEMENT = '149'; + + /** + * Bayplan/stowage plan, full (658) + * + * A full bayplan containing all occupied and/or blocked stowage locations. + */ + public const BAYPLANSTOWAGE_PLAN_FULL = '658'; + + /** + * Bayplan/stowage plan, partial (659) + * + * A partial bayplan. containing only a selected part of the available stowage + * locations. + */ + public const BAYPLANSTOWAGE_PLAN_PARTIAL = '659'; + + /** + * Bill of exchange (490) + * + * Document/message, issued and signed in conformity with the applicable + * legislation, which contains an unconditional order whereby the drawer + * directs the drawee to pay a definite sum of money to the payee or to his + * order, on demand or at a definite time, against the surrender of the + * document itself. + */ + public const BILL_OF_EXCHANGE = '490'; + + /** + * Bill of lading (705) + * + * Negotiable document/message which evidences a contract of carriage by sea + * and the taking over or loading of goods by carrier, and by which carrier + * undertakes to deliver goods against surrender of the document. A provision + * in the document that goods are to be delivered to the order of a named + * person, or to order, or to bearer, constitutes such an undertaking. + */ + public const BILL_OF_LADING = '705'; + + /** + * Bill of lading copy (707) + * + * A copy of the bill of lading issued by a transport company. + */ + public const BILL_OF_LADING_COPY = '707'; + + /** + * Bill of lading original (706) + * + * The original of the bill of lading issued by a transport company. When + * issued by the maritime industry it could signify ownership of the cargo. + */ + public const BILL_OF_LADING_ORIGINAL = '706'; + + /** + * Binding customer agreement for contract (772) + * + * Document which is a binding agreement from the customer for a contract, + * such as an insurance contract. + */ + public const BINDING_CUSTOMER_AGREEMENT_FOR_CONTRACT = '772'; + + /** + * Binding offer (771) + * + * Document which is a binding offer from one party to another. + */ + public const BINDING_OFFER = '771'; + + /** + * Blanket order (221) + * + * Usage of document/message for general order purposes with later split into + * quantities and delivery dates and maybe delivery locations. + */ + public const BLANKET_ORDER = '221'; + + /** + * Booking confirmation (770) + * + * Document/message issued by a carrier to confirm that space has been + * reserved for a consignment in means of transport. + */ + public const BOOKING_CONFIRMATION = '770'; + + /** + * Booking request (335) + * + * Document/message issued by a supplier to a carrier requesting space to be + * reserved for a specified consignment, indicating desirable conveyance, + * despatch time, etc. + */ + public const BOOKING_REQUEST = '335'; + + /** + * Bordereau (787) + * + * Document/message used in road transport, listing the cargo carried on a + * road vehicle, often referring to appended copies of Road consignment note. + */ + public const BORDEREAU = '787'; + + /** + * Buy America certificate of compliance (168) + * + * A document certifying that more than 50 percent of the cost of an item is + * attributed to US origin. + */ + public const BUY_AMERICA_CERTIFICATE_OF_COMPLIANCE = '168'; + + /** + * Calculation note (844) + * + * Document detailing a calculation, such as an invoice calculation or a costs + * calculation. + */ + public const CALCULATION_NOTE = '844'; + + /** + * Call for tender (754) + * + * A document/message used by a buyer to define the procurement procedure and + * request suppliers to participate. + */ + public const CALL_FOR_TENDER = '754'; + + /** + * Call off order (226) + * + * Document/message to provide split quantities and delivery dates referring + * to a previous blanket order. + */ + public const CALL_OFF_ORDER = '226'; + + /** + * Call-off delivery (76) + * + * Document/message to provide split quantities and delivery dates referring + * to a previous delivery instruction. + */ + public const CALLOFF_DELIVERY = '76'; + + /** + * Calling forward notice (775) + * + * Instructions for release or delivery of goods. + */ + public const CALLING_FORWARD_NOTICE = '775'; + + /** + * Campaign price/sales catalogue (234) + * + * A price/sales catalogue containing special prices which are valid only for + * a specified period or under specified conditions. + */ + public const CAMPAIGN_PRICESALES_CATALOGUE = '234'; + + /** + * Cargo acceptance order (170) + * + * Order to accept cargo to be delivered by a carrier. + */ + public const CARGO_ACCEPTANCE_ORDER = '170'; + + /** + * Cargo analysis voyage report (260) + * + * An analysis of the cargo for a voyage. + */ + public const CARGO_ANALYSIS_VOYAGE_REPORT = '260'; + + /** + * Cargo declaration (arrival) (933) + * + * Generic term, sometimes referred to as Freight declaration, applied to the + * documents providing the particulars required by the Customs concerning the + * cargo (freight) carried by commercial means of transport (CCC). + */ + public const CARGO_DECLARATION_ARRIVAL = '933'; + + /** + * Cargo declaration (departure) (833) + * + * Generic term, sometimes referred to as Freight declaration, applied to the + * documents providing the particulars required by the Customs concerning the + * cargo (freight) carried by commercial means of transport (CCC). + */ + public const CARGO_DECLARATION_DEPARTURE = '833'; + + /** + * Cargo manifest (785) + * + * Listing of goods comprising the cargo carried in a means of transport or in + * a transport-unit. The cargo manifest gives the commercial particulars of + * the goods, such as transport document numbers, consignors, consignees, + * shipping marks, number and kind of packages and descriptions and quantities + * of the goods. + */ + public const CARGO_MANIFEST = '785'; + + /** + * Cargo movement event log (259) + * + * A document detailing times and dates of events pertaining to a cargo + * movement. + */ + public const CARGO_MOVEMENT_EVENT_LOG = '259'; + + /** + * Cargo movement voyage summary (314) + * + * A consolidated voyage summary which contains the information in a + * certificate of analysis, a voyage analysis and a cargo movement time log + * for a voyage. + */ + public const CARGO_MOVEMENT_VOYAGE_SUMMARY = '314'; + + /** + * Cargo release notification (99) + * + * Message/document sent by the cargo handler indicating that the cargo has + * moved from a Customs controlled premise. + */ + public const CARGO_RELEASE_NOTIFICATION = '99'; + + /** + * Cargo status (34) + * + * Message identifying the status of cargo. + */ + public const CARGO_STATUS = '34'; + + /** + * Cargo vessel discharge order (145) + * + * Order that the containers or cargo specified are to be discharged from a + * vessel. + */ + public const CARGO_VESSEL_DISCHARGE_ORDER = '145'; + + /** + * Cargo vessel loading order (146) + * + * Order that specified cargo, containers or groups of containers are to be + * loaded in or on a vessel. + */ + public const CARGO_VESSEL_LOADING_ORDER = '146'; + + /** + * Cargo/goods handling and movement message (738) + * + * A message from a party to a warehouse, distribution centre, or logistics + * service provider identifying the handling services and where required the + * movement of specified goods, limited to warehouses within the jurisdiction + * of the distribution centre or log. + */ + public const CARGOGOODS_HANDLING_AND_MOVEMENT_MESSAGE = '738'; + + /** + * Cartage order (local transport) (343) + * + * Document/message giving instructions regarding local transport of goods, + * e.g. from the premises of an enterprise to those of a carrier undertaking + * further transport. + */ + public const CARTAGE_ORDER_LOCAL_TRANSPORT = '343'; + + /** + * Cash pool financial statement (306) + * + * A financial statement for a cash pool. + */ + public const CASH_POOL_FINANCIAL_STATEMENT = '306'; + + /** + * Casing sanitary certificate (93) + * + * Document or message issued by the competent authority in the exporting + * country evidencing that casing products comply with the requirements set by + * the importing country. + */ + public const CASING_SANITARY_CERTIFICATE = '93'; + + /** + * Certificate (16) + * + * Document by means of which the documentary credit applicant specifies the + * conditions for the certificate and by whom the certificate is to be issued. + */ + public const CERTIFICATE = '16'; + + /** + * Certificate of analysis (1) + * + * Certificate providing the values of an analysis. + */ + public const CERTIFICATE_OF_ANALYSIS = '1'; + + /** + * Certificate of compliance with standards of the World Organization for + * Animal Health (OIE) (648) + * + * A certification that the products have been treated in a way consistent + * with the standards set by the World Organization for Animal Health (OIE). + */ + public const CERTIFICATE_OF_COMPLIANCE_WITH_STANDARDS_OF_THE_WORLD_ORGANIZATION_FOR_ANIMAL_HEALTH_OIE = '648'; + + /** + * Certificate of conformity (2) + * + * Certificate certifying the conformity to predefined definitions. + */ + public const CERTIFICATE_OF_CONFORMITY = '2'; + + /** + * Certificate of disembarkation permission (487) + * + * Document or message issuing permission to disembark. + */ + public const CERTIFICATE_OF_DISEMBARKATION_PERMISSION = '487'; + + /** + * Certificate of food item transport readiness (642) + * + * A certificate to verify readiness of a transport or transport area such as + * a reservoir or hold to transport food items. + */ + public const CERTIFICATE_OF_FOOD_ITEM_TRANSPORT_READINESS = '642'; + + /** + * Certificate of origin (861) + * + * Document/message identifying goods, in which the authority or body + * authorized to issue it certifies expressly that the goods to which the + * certificate relates originate in a specific country. The word "country" may + * include a group of countries, a region or a part of a country. This + * certificate may also include a declaration by the manufacturer, producer, + * supplier, exporter or other competent person. + */ + public const CERTIFICATE_OF_ORIGIN = '861'; + + /** + * Certificate of origin form GSP (865) + * + * Specific form of certificate of origin for goods qualifying for + * preferential treatment under the generalized system of preferences + * (includes a combined declaration of origin and certificate, form A). + */ + public const CERTIFICATE_OF_ORIGIN_FORM_GSP = '865'; + + /** + * Certificate of origin, application for (860) + * + * Document/message submitted to a competent body by an interested party + * requesting a Certificate of origin to be issued in accordance with relevant + * criteria, and on the basis of evidence of the origin of the goods. + */ + public const CERTIFICATE_OF_ORIGIN_APPLICATION_FOR = '860'; + + /** + * Certificate of paid insurance premium (835) + * + * Document certifying the payment of the insurance premium. + */ + public const CERTIFICATE_OF_PAID_INSURANCE_PREMIUM = '835'; + + /** + * Certificate of quality (3) + * + * Certificate certifying the quality of goods, services etc. + */ + public const CERTIFICATE_OF_QUALITY = '3'; + + /** + * Certificate of quantity (19) + * + * Certificate certifying the quantity of goods, services etc. + */ + public const CERTIFICATE_OF_QUANTITY = '19'; + + /** + * Certificate of refrigerated transport equipment inspection (639) + * + * Inspection document shows that the container, the cooling devices and + * measured temperature is in good working condition. + */ + public const CERTIFICATE_OF_REFRIGERATED_TRANSPORT_EQUIPMENT_INSPECTION = '639'; + + /** + * Certificate of registry (798) + * + * Official certificate stating the vessel's registry. + */ + public const CERTIFICATE_OF_REGISTRY = '798'; + + /** + * Certificate of sealing of export meat lockers (33) + * + * Document / message issued by the authority in the exporting country + * evidencing the sealing of export meat lockers. + */ + public const CERTIFICATE_OF_SEALING_OF_EXPORT_MEAT_LOCKERS = '33'; + + /** + * Certificate of shipment (375) + * + * (1109) Certificate providing confirmation that a consignment has been + * shipped. + */ + public const CERTIFICATE_OF_SHIPMENT = '375'; + + /** + * Certificate of suitability for transport of grains and legumes (638) + * + * Certificate of inspection for the vessel stating its readiness and + * suitability for transporting grains and legumes. + */ + public const CERTIFICATE_OF_SUITABILITY_FOR_TRANSPORT_OF_GRAINS_AND_LEGUMES = '638'; + + /** + * Certificate of sustainability (753) + * + * Document/message issued by a competent body certifying sustainability. + */ + public const CERTIFICATE_OF_SUSTAINABILITY = '753'; + + /** + * Certified cost and price data (159) + * + * A document indicating cost and price data whose accuracy has been + * certified. + */ + public const CERTIFIED_COST_AND_PRICE_DATA = '159'; + + /** + * Certified inspection and test results (162) + * + * A certification as to the accuracy of inspection and test results. + */ + public const CERTIFIED_INSPECTION_AND_TEST_RESULTS = '162'; + + /** + * Certified list of ingredients (634) + * + * A document legalized from a competent authority that shows the components + * of the product (food additive, detergent, disinfectant and sanitizer). + */ + public const CERTIFIED_LIST_OF_INGREDIENTS = '634'; + + /** + * Chargeback (68) + * + * Document/message issued by a factor to a seller or to another factor to + * indicate that the rest of the amounts of one or more invoices uncollectable + * from buyers are charged back to clear the invoice(s) off the ledger. + */ + public const CHARGEBACK = '68'; + + /** + * Charges note (789) + * + * Document used by the rail organization to indicate freight charges or + * additional charges in each case where the departure station is not able to + * calculate the charges for the total voyage (e.g. tariff not yet updated, + * part of voyage not covered by the tariff). This document must be considered + * as joined to the transport. + */ + public const CHARGES_NOTE = '789'; + + /** + * Civil liability for oil certificate (794) + * + * Document declaring a ship owner's liability for oil propelling or carried + * on a vessel. + */ + public const CIVIL_LIABILITY_FOR_OIL_CERTIFICATE = '794'; + + /** + * Civil status document (768) + * + * Document which confirms the civil status of a person. + */ + public const CIVIL_STATUS_DOCUMENT = '768'; + + /** + * Claim history certificate (831) + * + * Document which certifies the history of claims. + */ + public const CLAIM_HISTORY_CERTIFICATE = '831'; + + /** + * Claim notification (817) + * + * Document notifying a claim. + */ + public const CLAIM_NOTIFICATION = '817'; + + /** + * Close of claim (827) + * + * Document reporting the closing of a claim file. + */ + public const CLOSE_OF_CLAIM = '827'; + + /** + * Closing statement of an account (56) + * + * Last statement of a period containing the interest calculation and the + * final balance of the last entry date. + */ + public const CLOSING_STATEMENT_OF_AN_ACCOUNT = '56'; + + /** + * Co-insurance ceding bordereau (329) + * + * The document or message contains a bordereau describing co-insurance ceding + * information. + */ + public const COINSURANCE_CEDING_BORDEREAU = '329'; + + /** + * Code change request (273) + * + * Request a change to an existing code. + */ + public const CODE_CHANGE_REQUEST = '273'; + + /** + * Collateral account (70) + * + * Document message issued by a factor to indicate the movements of invoices, + * credit notes and payments of a seller's account. + */ + public const COLLATERAL_ACCOUNT = '70'; + + /** + * Collection order (447) + * + * Document/message whereby a bank is instructed (or requested) to handle + * financial and/or commercial documents in order to obtain acceptance and/or + * payment, or to deliver documents on such other terms and conditions as may + * be specified. + */ + public const COLLECTION_ORDER = '447'; + + /** + * Collection payment advice (425) + * + * Document/message whereby a bank advises that a collection has been paid, + * giving details and methods of funds disposal. + */ + public const COLLECTION_PAYMENT_ADVICE = '425'; + + /** + * Combined certificate of value and origin (17) + * + * Document identifying goods in which the issuing authority expressly + * certifies that the goods originate in a specific country or part of, or + * group of countries. It also states the price and/or cost of the goods with + * the purpose of determining the customs origin. + */ + public const COMBINED_CERTIFICATE_OF_VALUE_AND_ORIGIN = '17'; + + /** + * Combined transport bill of lading/multimodal bill of lading (766) + * + * Document which evidences a multimodal transport contract, the taking in + * charge of the goods by the multimodal transport operator, and an + * undertaking by him to deliver the goods in accordance with the terms of the + * contract. + */ + public const COMBINED_TRANSPORT_BILL_OF_LADINGMULTIMODAL_BILL_OF_LADING = '766'; + + /** + * Combined transport document (generic) (764) + * + * Negotiable or non-negotiable document evidencing a contract for the + * performance and/or procurement of performance of combined transport of + * goods and bearing on its face either the heading "Negotiable combined + * transport document issued subject to Uniform Rules for a Combined Transport + * Document (ICC Brochure No. 298)" or the heading "Non-negotiable Combined + * Transport Document issued subject to Uniform Rules for a Combined Transport + * Document (ICC Brochure No. 298)". + */ + public const COMBINED_TRANSPORT_DOCUMENT_GENERIC = '764'; + + /** + * Commercial account summary (731) + * + * A message enabling the transmission of commercial data concerning payments + * made and outstanding items on an account over a period of time. + */ + public const COMMERCIAL_ACCOUNT_SUMMARY = '731'; + + /** + * Commercial account summary response (397) + * + * A document providing a response to a previously sent commercial account + * summary message. + */ + public const COMMERCIAL_ACCOUNT_SUMMARY_RESPONSE = '397'; + + /** + * Commercial dispute (67) + * + * Document/message issued by a party (usually the buyer) to indicate that one + * or more invoices or one or more credit notes are disputed for payment. + */ + public const COMMERCIAL_DISPUTE = '67'; + + /** + * Commercial invoice (380) + * + * (1334) Document/message claiming payment for goods or services supplied + * under conditions agreed between seller and buyer. + */ + public const COMMERCIAL_INVOICE = '380'; + + /** + * Commercial invoice which includes a packing list (331) + * + * Commercial transaction (invoice) will include a packing list. + */ + public const COMMERCIAL_INVOICE_WHICH_INCLUDES_A_PACKING_LIST = '331'; + + /** + * Commission note (382) + * + * (1111) Document/message in which a seller specifies the amount of + * commission, the percentage of the invoice amount, or some other basis for + * the calculation of the commission to which a sales agent is entitled. + */ + public const COMMISSION_NOTE = '382'; + + /** + * Communication from opposite party (845) + * + * Document containing a communication from the opposite party, such as in + * legal action. + */ + public const COMMUNICATION_FROM_OPPOSITE_PARTY = '845'; + + /** + * Composite data element change request (277) + * + * Request a change to an existing composite data element. + */ + public const COMPOSITE_DATA_ELEMENT_CHANGE_REQUEST = '277'; + + /** + * Composite data element request (276) + * + * Requesting a new composite data element. + */ + public const COMPOSITE_DATA_ELEMENT_REQUEST = '276'; + + /** + * Consignment despatch advice (748) + * + * Document/message by means of which the supplier informs the buyer about the + * despatch of goods ordered on consignment (goods to be delivered into stock + * with agreement on payment when goods are sold out of this stock). + */ + public const CONSIGNMENT_DESPATCH_ADVICE = '748'; + + /** + * Consignment invoice (395) + * + * Commercial invoice that covers a transaction other than one involving a + * sale. + */ + public const CONSIGNMENT_INVOICE = '395'; + + /** + * Consignment order (227) + * + * Order to deliver goods into stock with agreement on payment when goods are + * sold out of this stock. + */ + public const CONSIGNMENT_ORDER = '227'; + + /** + * Consignment status report (77) + * + * Message covers information about the consignment status. + */ + public const CONSIGNMENT_STATUS_REPORT = '77'; + + /** + * Consignment unpack report (88) + * + * A document code to indicate that the message being transmitted is a + * consignment unpack report only. + */ + public const CONSIGNMENT_UNPACK_REPORT = '88'; + + /** + * Consolidated credit note - goods and services (262) + * + * Credit note for goods and services that covers multiple transactions + * involving more than one invoice. + */ + public const CONSOLIDATED_CREDIT_NOTE_GOODS_AND_SERVICES = '262'; + + /** + * Consolidated invoice (385) + * + * Commercial invoice that covers multiple transactions involving more than + * one vendor. + */ + public const CONSOLIDATED_INVOICE = '385'; + + /** + * Consular invoice (870) + * + * Document/message to be prepared by an exporter in his country and presented + * to a diplomatic representation of the importing country for endorsement and + * subsequently to be presented by the importer in connection with the import + * of the goods described therein. + */ + public const CONSULAR_INVOICE = '870'; + + /** + * Container discharge list (25) + * + * Message/document itemising containers to be discharged from vessel. + */ + public const CONTAINER_DISCHARGE_LIST = '25'; + + /** + * Container list (235) + * + * Document or message issued by party identifying the containers for which + * they are responsible. + */ + public const CONTAINER_LIST = '235'; + + /** + * Container manifest (unit packing list) (788) + * + * Document/message specifying the contents of particular freight containers + * or other transport units, prepared by the party responsible for their + * loading into the container or unit. + */ + public const CONTAINER_MANIFEST_UNIT_PACKING_LIST = '788'; + + /** + * Container off-hire notice (169) + * + * Notice to return leased containers. + */ + public const CONTAINER_OFFHIRE_NOTICE = '169'; + + /** + * Container stripping order (183) + * + * Order to unload goods from a container. + */ + public const CONTAINER_STRIPPING_ORDER = '183'; + + /** + * Container stuffing order (184) + * + * Order to stuff specified goods or consignments in a container. + */ + public const CONTAINER_STUFFING_ORDER = '184'; + + /** + * Container transfer note (976) + * + * Document for the carriage of containers. Syn: transfer note. + */ + public const CONTAINER_TRANSFER_NOTE = '976'; + + /** + * Contract (315) + * + * (1296) Document/message evidencing an agreement between the seller and the + * buyer for the supply of goods or services; its effects are equivalent to + * those of an order followed by an acknowledgement of order. + */ + public const CONTRACT = '315'; + + /** + * Contract bill of quantities - BOQ (207) + * + * Document/message providing a formal specification identifying quantities + * and prices that are the basis of a contract for a construction project. BOQ + * means: Bill of quantity. + */ + public const CONTRACT_BILL_OF_QUANTITIES_BOQ = '207'; + + /** + * Contract clauses (776) + * + * Document specifying the clauses applying to a contract. + */ + public const CONTRACT_CLAUSES = '776'; + + /** + * Contract Funds Status Report (CFSR) (161) + * + * A report to provide the status of funds applicable to the contract. + */ + public const CONTRACT_FUNDS_STATUS_REPORT_CFSR = '161'; + + /** + * Contract price and delivery quote (365) + * + * Document/message confirming contractual price conditions and contractual + * delivery conditions under which goods are offered. + */ + public const CONTRACT_PRICE_AND_DELIVERY_QUOTE = '365'; + + /** + * Contract price quote (364) + * + * Document/message confirming contractual price conditions under which goods + * are offered. + */ + public const CONTRACT_PRICE_QUOTE = '364'; + + /** + * Contract security classification specification (166) + * + * A document that indicates the specification contains the security and + * classification requirements for a contract. + */ + public const CONTRACT_SECURITY_CLASSIFICATION_SPECIFICATION = '166'; + + /** + * Control document T5 (823) + * + * Control document (export declaration) used particularly in case of + * re-sending without use with only VAT collection, refusal, unconformity with + * contract etc. + */ + public const CONTROL_DOCUMENT_T = '823'; + + /** + * Convention on International Trade in Endangered Species of Wild Fauna and + * Flora (CITES) Certificate (626) + * + * A certificate used in the trade of endangered species in accordance with + * the CITES convention. + */ + public const CONVENTION_ON_INTERNATIONAL_TRADE_IN_ENDANGERED_SPECIES_OF_WILD_FAUNA_AND_FLORA_CITES_CERTIFICATE = '626'; + + /** + * Conveyance declaration (874) + * + * Declaration of the conveyance to a public authority. + */ + public const CONVEYANCE_DECLARATION = '874'; + + /** + * Conveyance declaration (arrival) (185) + * + * Declaration to the public authority upon arrival of the conveyance. + */ + public const CONVEYANCE_DECLARATION_ARRIVAL = '185'; + + /** + * Conveyance declaration (combined) (187) + * + * Combined declaration of arrival and departure to the public authority. + */ + public const CONVEYANCE_DECLARATION_COMBINED = '187'; + + /** + * Conveyance declaration (departure) (186) + * + * Declaration to the public authority upon departure of the conveyance. + */ + public const CONVEYANCE_DECLARATION_DEPARTURE = '186'; + + /** + * Copy accounting voucher (534) + * + * To indicate that the document/message justifying an accounting entry is a + * copy. + */ + public const COPY_ACCOUNTING_VOUCHER = '534'; + + /** + * Corporate superannuation contributions advice (26) + * + * Document/message providing contributions advice used for corporate + * superannuation schemes. + */ + public const CORPORATE_SUPERANNUATION_CONTRIBUTIONS_ADVICE = '26'; + + /** + * Corporate superannuation member maintenance message (28) + * + * Member maintenance message used for corporate superannuation schemes. + */ + public const CORPORATE_SUPERANNUATION_MEMBER_MAINTENANCE_MESSAGE = '28'; + + /** + * Corrected invoice (384) + * + * Commercial invoice that includes revised information differing from an + * earlier submission of the same invoice. + */ + public const CORRECTED_INVOICE = '384'; + + /** + * Cost data summary (158) + * + * A document indicating a summary of cost data. + */ + public const COST_DATA_SUMMARY = '158'; + + /** + * Cost performance report (304) + * + * A report to convey cost performance data for a project or contract. + */ + public const COST_PERFORMANCE_REPORT = '304'; + + /** + * Cost Performance Report (CPR) format 5 (180) + * + * A report identifying the cost performance on a contract that summarizes + * cost or schedule variances (format 5 - explanations and problem analysis). + */ + public const COST_PERFORMANCE_REPORT_CPR_FORMAT = '180'; + + /** + * Cost Schedule Status Report (CSSR) (176) + * + * A report providing the status of the cost and schedule applicable to a + * contract. + */ + public const COST_SCHEDULE_STATUS_REPORT_CSSR = '176'; + + /** + * Court judgment (854) + * + * Document specifying a judgment of a court. + */ + public const COURT_JUDGMENT = '854'; + + /** + * Cover note (580) + * + * Document/message issued by an insurer (insurance broker, agent, etc.) to + * notify the insured that his insurance have been carried out. + */ + public const COVER_NOTE = '580'; + + /** + * Coverage confirmation note (773) + * + * Document confirming that insurance coverage is granted. + */ + public const COVERAGE_CONFIRMATION_NOTE = '773'; + + /** + * Credit advice (454) + * + * Document/message sent by an account servicing institution to one of its + * account owners, to inform the account owner of an entry which has been or + * will be credited to its account for a specified amount on the date + * indicated. + */ + public const CREDIT_ADVICE = '454'; + + /** + * Credit cover (65) + * + * Document/message issued either by a factor to give a credit cover on a + * buyer, or by a seller to request a factor's credit cover. + */ + public const CREDIT_COVER = '65'; + + /** + * Credit note (381) + * + * (1113) Document/message for providing credit information to the relevant + * party. + */ + public const CREDIT_NOTE = '381'; + + /** + * Credit note for price variation (296) + * + * A credit note which is issued against a price variation invoice. + */ + public const CREDIT_NOTE_FOR_PRICE_VARIATION = '296'; + + /** + * Credit note related to financial adjustments (83) + * + * Document message for providing credit information related to financial + * adjustments to the relevant party, e.g., bonuses. + */ + public const CREDIT_NOTE_RELATED_TO_FINANCIAL_ADJUSTMENTS = '83'; + + /** + * Credit note related to goods or services (81) + * + * Document message used to provide credit information related to a + * transaction for goods or services to the relevant party. + */ + public const CREDIT_NOTE_RELATED_TO_GOODS_OR_SERVICES = '81'; + + /** + * Crew list declaration (250) + * + * Declaration regarding crew members aboard the conveyance. + */ + public const CREW_LIST_DECLARATION = '250'; + + /** + * Crew's effects declaration (744) + * + * Declaration to Customs regarding the personal effects of crew members + * aboard the conveyance; equivalent to IMO FAL 4. + */ + public const CREWS_EFFECTS_DECLARATION = '744'; + + /** + * Cross docking despatch advice (398) + * + * Document by means of which the supplier or consignor informs the buyer, + * consignee or the distribution centre about the despatch of goods for cross + * docking. + */ + public const CROSS_DOCKING_DESPATCH_ADVICE = '398'; + + /** + * Cross docking services order (237) + * + * A document or message to order cross docking services. + */ + public const CROSS_DOCKING_SERVICES_ORDER = '237'; + + /** + * Current account (66) + * + * Document/message issued by a factor to indicate the money movements of a + * seller's or another factor's account with him. + */ + public const CURRENT_ACCOUNT = '66'; + + /** + * Customer payment order(s) (248) + * + * The message contains customer payment order(s). + */ + public const CUSTOMER_PAYMENT_ORDERS = '248'; + + /** + * Customs clearance notice (132) + * + * Notification of customs clearance of cargo or items of transport equipment. + */ + public const CUSTOMS_CLEARANCE_NOTICE = '132'; + + /** + * Customs crew and conveyance (336) + * + * Document/message contains information regarding the crew list and + * conveyance. + */ + public const CUSTOMS_CREW_AND_CONVEYANCE = '336'; + + /** + * Customs declaration (post parcels) (936) + * + * Document/message which, according to Article 106 of the "Agreement + * concerning Postal Parcels" under the UPU Convention, must accompany post + * parcels and in which the contents of such parcels are specified. + */ + public const CUSTOMS_DECLARATION_POST_PARCELS = '936'; + + /** + * Customs declaration for cargo examination (333) + * + * Declaration provided to customs for cargo examination. + */ + public const CUSTOMS_DECLARATION_FOR_CARGO_EXAMINATION = '333'; + + /** + * Customs declaration for cargo examination, alternate (334) + * + * Alternate declaration provided to customs for cargo examination. + */ + public const CUSTOMS_DECLARATION_FOR_CARGO_EXAMINATION_ALTERNATE = '334'; + + /** + * Customs declaration for TIR Carnet goods (587) + * + * A Customs declaration in which goods move under cover of TIR Carnets. + */ + public const CUSTOMS_DECLARATION_FOR_TIR_CARNET_GOODS = '587'; + + /** + * Customs declaration with commercial and item detail (914) + * + * CUSDEC transmission that includes data from both the commercial detail and + * item detail sections of the message. + */ + public const CUSTOMS_DECLARATION_WITH_COMMERCIAL_AND_ITEM_DETAIL = '914'; + + /** + * Customs declaration without commercial detail (913) + * + * CUSDEC transmission that does not include data from the commercial detail + * section of the message. + */ + public const CUSTOMS_DECLARATION_WITHOUT_COMMERCIAL_DETAIL = '913'; + + /** + * Customs declaration without item detail (915) + * + * CUSDEC transmission that does not include data from the item detail section + * of the message. + */ + public const CUSTOMS_DECLARATION_WITHOUT_ITEM_DETAIL = '915'; + + /** + * Customs delivery note (932) + * + * Document/message whereby a Customs authority releases goods under its + * control to be placed at the disposal of the party concerned. Synonym: + * Customs release note. + */ + public const CUSTOMS_DELIVERY_NOTE = '932'; + + /** + * Customs documents expiration notice (133) + * + * Notice specifying expiration of Customs documents relating to cargo or + * items of transport equipment. + */ + public const CUSTOMS_DOCUMENTS_EXPIRATION_NOTICE = '133'; + + /** + * Customs immediate release declaration (931) + * + * Document/message issued by an importer notifying Customs that goods have + * been removed from an importing means of transport to the importer's + * premises under a Customs-approved arrangement for immediate release, or + * requesting authorization to do so. + */ + public const CUSTOMS_IMMEDIATE_RELEASE_DECLARATION = '931'; + + /** + * Customs invoice (935) + * + * Document/message required by the Customs in an importing country in which + * an exporter states the invoice or other price (e.g. selling price, price of + * identical goods), and specifies costs for freight, insurance and packing, + * etc., terms of delivery and payment, for the purpose of determining the + * Customs value in the importing country of goods consigned to that country. + */ + public const CUSTOMS_INVOICE = '935'; + + /** + * Customs manifest (85) + * + * Message/document identifying a customs manifest. The document itemises a + * list of cargo prepared by shipping companies from bills of landing and + * presented to customs for formal report of cargo. + */ + public const CUSTOMS_MANIFEST = '85'; + + /** + * Customs summary declaration with commercial detail, alternate (337) + * + * Alternate Customs declaration summary with commercial transaction details. + */ + public const CUSTOMS_SUMMARY_DECLARATION_WITH_COMMERCIAL_DETAIL_ALTERNATE = '337'; + + /** + * Customs summary declaration without commercial detail, alternate (355) + * + * Alternate Customs declaration summary without any commercial transaction + * details. + */ + public const CUSTOMS_SUMMARY_DECLARATION_WITHOUT_COMMERCIAL_DETAIL_ALTERNATE = '355'; + + /** + * Damage certification (49) + * + * Official certification that damages to the goods to be transported have + * been discovered. + */ + public const DAMAGE_CERTIFICATION = '49'; + + /** + * Dangerous goods declaration (890) + * + * (1115) Document/message issued by a consignor in accordance with applicable + * conventions or regulations, describing hazardous goods or materials for + * transport purposes, and stating that the latter have been packed and + * labelled in accordance with the provisions of the relevant conventions or + * regulations. + */ + public const DANGEROUS_GOODS_DECLARATION = '890'; + + /** + * Dangerous goods list (298) + * + * Listing of all details of dangerous goods carried. + */ + public const DANGEROUS_GOODS_LIST = '298'; + + /** + * Dangerous Goods Notification for non-tanker vessel (523) + * + * Dangerous Goods Notification for a vessel carrying cargo other than bulk + * liquid cargo. + */ + public const DANGEROUS_GOODS_NOTIFICATION_FOR_NONTANKER_VESSEL = '523'; + + /** + * Dangerous Goods Notification for Tanker vessel (522) + * + * Dangerous Goods Notification for a vessel carrying liquid cargo in bulk. + */ + public const DANGEROUS_GOODS_NOTIFICATION_FOR_TANKER_VESSEL = '522'; + + /** + * Data Plot Sheet (415) + * + * Document/Message providing technical description and information of the + * crop production. + */ + public const DATA_PLOT_SHEET = '415'; + + /** + * Data protection regulations statement (868) + * + * Document specifying the terms of data protection regulations. + */ + public const DATA_PROTECTION_REGULATIONS_STATEMENT = '868'; + + /** + * Debit advice (456) + * + * Advice on a debit. + */ + public const DEBIT_ADVICE = '456'; + + /** + * Debit note (383) + * + * Document/message for providing debit information to the relevant party. + */ + public const DEBIT_NOTE = '383'; + + /** + * Debit note related to financial adjustments (84) + * + * Document/message for providing debit information related to financial + * adjustments to the relevant party. + */ + public const DEBIT_NOTE_RELATED_TO_FINANCIAL_ADJUSTMENTS = '84'; + + /** + * Debit note related to goods or services (80) + * + * Debit information related to a transaction for goods or services to the + * relevant party. + */ + public const DEBIT_NOTE_RELATED_TO_GOODS_OR_SERVICES = '80'; + + /** + * Declaration for radioactive material (654) + * + * A declaration to be presented to the competent authority when radioactive + * material moves cross-border. + */ + public const DECLARATION_FOR_RADIOACTIVE_MATERIAL = '654'; + + /** + * Declaration of final beneficiary (813) + * + * Declaration document to identify the final beneficiary of an asset. + */ + public const DECLARATION_OF_FINAL_BENEFICIARY = '813'; + + /** + * Declaration of origin (862) + * + * Appropriate statement as to the origin of the goods, made in connection + * with their exportation by the manufacturer, producer, supplier, exporter or + * other competent person on the Commercial invoice or any other document + * relating to the goods (CCC). + */ + public const DECLARATION_OF_ORIGIN = '862'; + + /** + * Declaration regarding the inward and outward movement of vessel (349) + * + * Document to declare inward and outward movement of a vessel. + */ + public const DECLARATION_REGARDING_THE_INWARD_AND_OUTWARD_MOVEMENT_OF_VESSEL = '349'; + + /** + * Delcredere credit note (308) + * + * A credit note sent to the party paying on behalf of a number of buyers. + */ + public const DELCREDERE_CREDIT_NOTE = '308'; + + /** + * Delcredere invoice (390) + * + * An invoice sent to the party paying for a number of buyers. + */ + public const DELCREDERE_INVOICE = '390'; + + /** + * Delivery forecast (236) + * + * A message which enables the transmission of delivery or product forecasting + * requirements. + */ + public const DELIVERY_FORECAST = '236'; + + /** + * Delivery instructions (240) + * + * (1174) Document/message giving instruction regarding the delivery of goods. + */ + public const DELIVERY_INSTRUCTIONS = '240'; + + /** + * Delivery just-in-time (242) + * + * Usage of DELJIT-message. + */ + public const DELIVERY_JUSTINTIME = '242'; + + /** + * Delivery note (270) + * + * Paper document attached to a consignment informing the receiving party + * about contents of this consignment. + */ + public const DELIVERY_NOTE = '270'; + + /** + * Delivery notice (goods) (784) + * + * Notification in writing, sent by the carrier to the sender, to inform him + * at his request of the actual date of delivery of the goods. + */ + public const DELIVERY_NOTICE_GOODS = '784'; + + /** + * Delivery notice (rail transport) (746) + * + * Document/message created by the consignor or by the departure station, + * joined to the transport or sent to the consignee, giving the possibility to + * the consignee or the arrival station to attest the delivery of the goods. + * The document must be returned to the consignor or to the departure station. + */ + public const DELIVERY_NOTICE_RAIL_TRANSPORT = '746'; + + /** + * Delivery order (640) + * + * Document/message issued by a party entitled to authorize the release of + * goods specified therein to a named consignee, to be retained by the + * custodian of the goods. + */ + public const DELIVERY_ORDER = '640'; + + /** + * Delivery point list. (440) + * + * A list of delivery point addresses. + */ + public const DELIVERY_POINT_LIST = '440'; + + /** + * Delivery quote (362) + * + * Document/message confirming delivery conditions under which goods are + * offered. + */ + public const DELIVERY_QUOTE = '362'; + + /** + * Delivery release (245) + * + * Document/message issued by a buyer releasing the despatch of goods after + * receipt of the Ready for despatch advice from the seller. + */ + public const DELIVERY_RELEASE = '245'; + + /** + * Delivery schedule (241) + * + * Usage of DELFOR-message. + */ + public const DELIVERY_SCHEDULE = '241'; + + /** + * Delivery schedule response (291) + * + * A message providing a response to a previously transmitted delivery + * schedule. + */ + public const DELIVERY_SCHEDULE_RESPONSE = '291'; + + /** + * Delivery verification certificate (901) + * + * Document/message whereby an official authority (Customs or governmental) + * certifies that goods have been delivered. + */ + public const DELIVERY_VERIFICATION_CERTIFICATE = '901'; + + /** + * Derat document (796) + * + * Document certifying that a ship is free of rats, valid to a specified date. + */ + public const DERAT_DOCUMENT = '796'; + + /** + * Deratting exemption certificate (488) + * + * Document certifying that the object was free of rats when inspected and + * that it is exempt from a deratting statement. + */ + public const DERATTING_EXEMPTION_CERTIFICATE = '488'; + + /** + * Despatch advice (351) + * + * Document/message by means of which the seller or consignor informs the + * consignee about the despatch of goods. + */ + public const DESPATCH_ADVICE = '351'; + + /** + * Despatch note (post parcels) (750) + * + * Document/message which, according to Article 106 of the "Agreement + * concerning Postal Parcels" under the UPU convention, is to accompany post + * parcels. + */ + public const DESPATCH_NOTE_POST_PARCELS = '750'; + + /** + * Despatch note model T2 (822) + * + * Ascertainment that the declared goods were originally produced in an + * European Union (EU) country. + */ + public const DESPATCH_NOTE_MODEL_T = '822'; + + /** + * Despatch note model T2L (825) + * + * Ascertainment that the declared goods were originally produced in an + * European Union (EU) country. May only be used for goods that are loaded on + * one single means of transport in one single departure point for one single + * delivery point. + */ + public const DESPATCH_NOTE_MODEL_TL = '825'; + + /** + * Despatch order (350) + * + * Document/message issued by a supplier initiating the despatch of goods to a + * buyer (consignee). + */ + public const DESPATCH_ORDER = '350'; + + /** + * Direct debit authorisation (838) + * + * Document giving the addressee the right to debit from an account of the + * authorizing party. + */ + public const DIRECT_DEBIT_AUTHORISATION = '838'; + + /** + * Direct delivery (transport) (494) + * + * Document/message ordering the direct delivery of goods/consignment from one + * means of transport into another means of transport in one movement. + */ + public const DIRECT_DELIVERY_TRANSPORT = '494'; + + /** + * Direct payment valuation (202) + * + * Document/message addressed, for instance, by a general contractor to the + * owner, in order that a direct payment be made to a subcontractor. + */ + public const DIRECT_PAYMENT_VALUATION = '202'; + + /** + * Direct payment valuation request (201) + * + * Request to establish a direct payment valuation. + */ + public const DIRECT_PAYMENT_VALUATION_REQUEST = '201'; + + /** + * Document for establishing the Customs Status of goods for San Marino + * (T2LSM) (586) + * + * Form establishing the Community status of goods ("T2L" under European + * Legislation) in the context of trade between the EU and San Marino. + * ("T2LSM" under EU Legislation). + */ + public const DOCUMENT_FOR_ESTABLISHING_THE_CUSTOMS_STATUS_OF_GOODS_FOR_SAN_MARINO_TLSM = '586'; + + /** + * Document response (Customs) (962) + * + * Document response message to permit the transfer of data from Customs to + * the transmitter of the previous message. + */ + public const DOCUMENT_RESPONSE_CUSTOMS = '962'; + + /** + * Documentary credit (465) + * + * Document/message in which a bank states that it has issued a documentary + * credit under which the beneficiary is to obtain payment, acceptance or + * negotiation on compliance with certain terms and conditions and against + * presentation of stipulated documents and such drafts as may be specified. + * The credit may or may not be confirmed by another bank. + */ + public const DOCUMENTARY_CREDIT = '465'; + + /** + * Documentary credit acceptance advice (427) + * + * Document/message whereby a bank advises acceptance under a documentary + * credit. + */ + public const DOCUMENTARY_CREDIT_ACCEPTANCE_ADVICE = '427'; + + /** + * Documentary credit amendment (469) + * + * Document/message whereby a bank notifies a beneficiary of the details of an + * amendment to the terms and conditions of a documentary credit. + */ + public const DOCUMENTARY_CREDIT_AMENDMENT = '469'; + + /** + * Documentary credit amendment information (197) + * + * Documentary credit amendment information. + */ + public const DOCUMENTARY_CREDIT_AMENDMENT_INFORMATION = '197'; + + /** + * Documentary credit amendment notification (468) + * + * Document/message whereby a bank advises that the terms and conditions of a + * documentary credit have been amended. + */ + public const DOCUMENTARY_CREDIT_AMENDMENT_NOTIFICATION = '468'; + + /** + * Documentary credit application (460) + * + * Document/message whereby a bank is requested to issue a documentary credit + * on the conditions specified therein. + */ + public const DOCUMENTARY_CREDIT_APPLICATION = '460'; + + /** + * Documentary credit collection instruction (195) + * + * Instruction for the collection of the documentary credit. + */ + public const DOCUMENTARY_CREDIT_COLLECTION_INSTRUCTION = '195'; + + /** + * Documentary credit issuance information (200) + * + * Provides information on documentary credit issuance. + */ + public const DOCUMENTARY_CREDIT_ISSUANCE_INFORMATION = '200'; + + /** + * Documentary credit letter of indemnity (431) + * + * Document/message in which a beneficiary of a documentary credit accepts + * responsibility for non-compliance with the terms and conditions of the + * credit, and undertakes to refund the money received under the credit, with + * interest and charges accrued. + */ + public const DOCUMENTARY_CREDIT_LETTER_OF_INDEMNITY = '431'; + + /** + * Documentary credit negotiation advice (428) + * + * Document/message whereby a bank advises negotiation under a documentary + * credit. + */ + public const DOCUMENTARY_CREDIT_NEGOTIATION_ADVICE = '428'; + + /** + * Documentary credit notification (466) + * + * Document/message issued by an advising bank in order to transmit a + * documentary credit to a beneficiary, or to another advising bank. + */ + public const DOCUMENTARY_CREDIT_NOTIFICATION = '466'; + + /** + * Documentary credit payment advice (426) + * + * Document/message whereby a bank advises payment under a documentary credit. + */ + public const DOCUMENTARY_CREDIT_PAYMENT_ADVICE = '426'; + + /** + * Documentary credit transfer advice (467) + * + * Document/message whereby a bank advises that (part of) a documentary credit + * is being or has been transferred in favour of a second beneficiary. + */ + public const DOCUMENTARY_CREDIT_TRANSFER_ADVICE = '467'; + + /** + * Documents presentation form (448) + * + * Document/message whereby a draft or similar instrument and/or commercial + * documents are presented to a bank for acceptance, discounting, negotiation, + * payment or collection, whether or not against a documentary credit. + */ + public const DOCUMENTS_PRESENTATION_FORM = '448'; + + /** + * Draft bill of quantity (194) + * + * Document/message providing a draft bill of quantity, issued in an unpriced + * form. + */ + public const DRAFT_BILL_OF_QUANTITY = '194'; + + /** + * Drawing (174) + * + * The document or message is a drawing. + */ + public const DRAWING = '174'; + + /** + * Driving licence (international) (41) + * + * An official document giving a native of one country permission to drive a + * vehicle in certain other countries. + */ + public const DRIVING_LICENCE_INTERNATIONAL = '41'; + + /** + * Driving licence (national) (40) + * + * An official document giving permission to drive a vehicle in a given + * country. + */ + public const DRIVING_LICENCE_NATIONAL = '40'; + + /** + * Drug shelf life study report (647) + * + * A document containing results from the study which determines the shelf + * life, namely the time period of storage at a specified condition within + * which a drug substance or drug product still meets its established + * specifications; its identity, strength, quality and purity. + */ + public const DRUG_SHELF_LIFE_STUDY_REPORT = '647'; + + /** + * Duty suspended goods (974) + * + * Document giving details for the carriage of excisable goods on a + * duty-suspended basis. + */ + public const DUTY_SUSPENDED_GOODS = '974'; + + /** + * EC carnet (953) + * + * EC customs transit document issued by EC customs authorities for transit + * and/or temporary user of goods within the EC. + */ + public const EC_CARNET = '953'; + + /** + * EDI associated object administration message (344) + * + * A message giving additional information about the exchange of an EDI + * associated object. + */ + public const EDI_ASSOCIATED_OBJECT_ADMINISTRATION_MESSAGE = '344'; + + /** + * Embargo permit (941) + * + * Document/message giving the permission to export specified goods. + */ + public const EMBARGO_PERMIT = '941'; + + /** + * Empty container bill (708) + * + * Bill of lading indicating an empty container. + */ + public const EMPTY_CONTAINER_BILL = '708'; + + /** + * Empty container disposition order (144) + * + * Order to make available empty containers. + */ + public const EMPTY_CONTAINER_DISPOSITION_ORDER = '144'; + + /** + * End use authorization (990) + * + * Document issued by Customs granting the end-use Customs procedure. + */ + public const END_USE_AUTHORIZATION = '990'; + + /** + * Enquiry (210) + * + * Document/message issued by a party interested in the purchase of goods + * specified therein and indicating particular, desirable conditions regarding + * delivery terms, etc., addressed to a prospective supplier with a view to + * obtaining an offer. + */ + public const ENQUIRY = '210'; + + /** + * Error response (Customs) (963) + * + * Error response message to permit the transfer of data from Customs to the + * transmitter of the previous message. + */ + public const ERROR_RESPONSE_CUSTOMS = '963'; + + /** + * Escort official recognition (723) + * + * Document/message which gives right to the owner to exert all functions + * normally transferred to a guard in a train by which an escorted consignment + * is transported. + */ + public const ESCORT_OFFICIAL_RECOGNITION = '723'; + + /** + * Estimated priced bill of quantity (193) + * + * An estimate based upon a detailed, quantity based specification (bill of + * quantity). + */ + public const ESTIMATED_PRICED_BILL_OF_QUANTITY = '193'; + + /** + * EU Customs declaration for External Community Transit (T1) (578) + * + * Customs declaration for goods under the external Community/common transit + * procedure. This applies to "non-Community goods" ("T1" under EU legislation + * and EC-EFTA "Transit Convention"). + */ + public const EU_CUSTOMS_DECLARATION_FOR_EXTERNAL_COMMUNITY_TRANSIT_T = '578'; + + /** + * EU Customs declaration for internal Community Transit (T2) (579) + * + * Customs declaration for goods under the internal Community/common transit + * procedure. This applies to "Community goods" ("T2" under EU legislation and + * EC-EFTA "Transit Convention"). + */ + public const EU_CUSTOMS_DECLARATION_FOR_INTERNAL_COMMUNITY_TRANSIT_T = '579'; + + /** + * EU Customs declaration for internal transit to San Marino (T2SM) (582) + * + * Customs declaration for goods under the internal Community transit + * procedure between the Community and San Marino. ("T2SM" under EU + * Legislation). + */ + public const EU_CUSTOMS_DECLARATION_FOR_INTERNAL_TRANSIT_TO_SAN_MARINO_TSM = '582'; + + /** + * EU Customs declaration for mixed consignments (T) (583) + * + * Customs declaration for goods under the Community/common transit procedure + * for mixed consignments (i.e. consignments that comprise goods of different + * statuses, like "T1" and "T2") ("T" under EU Legislation). + */ + public const EU_CUSTOMS_DECLARATION_FOR_MIXED_CONSIGNMENTS_T = '583'; + + /** + * EU Customs declaration for non-fiscal area internal Community Transit (T2F) (581) + * + * Declaration for goods under the internal Community transit procedure in the + * context of trade between the "VAT" territory of EU Member States and EU + * territories where the VAT rules do not apply, such as Canary islands, some + * French overseas territories, the Channel islands and the Aaland islands, + * and between those territories. ("T2F" under EU Legislation). + */ + public const EU_CUSTOMS_DECLARATION_FOR_NONFISCAL_AREA_INTERNAL_COMMUNITY_TRANSIT_TF = '581'; + + /** + * EU Document for establishing the Community status of goods (T2L) (584) + * + * Form establishing the Community status of goods ("T2L" under EU + * Legislation). + */ + public const EU_DOCUMENT_FOR_ESTABLISHING_THE_COMMUNITY_STATUS_OF_GOODS_TL = '584'; + + /** + * EU Document for establishing the Community status of goods for certain + * fiscal purposes (T2LF) (585) + * + * Form establishing the Community status of goods in the context of trade + * between the "VAT" territory of EU Member States and EU territories where + * the VAT rules do not apply, such as Canary islands, some French overseas + * territories, the Channel islands and the Aaland islands, and between those + * territories ("T2LF" under EU Legislation). + */ + public const EU_DOCUMENT_FOR_ESTABLISHING_THE_COMMUNITY_STATUS_OF_GOODS_FOR_CERTAIN_FISCAL_PURPOSES_TLF = '585'; + + /** + * EUR 1 certificate of origin (954) + * + * Customs certificate used in preferential goods interchanges between EC + * countries and EC external countries. + */ + public const EUR__CERTIFICATE_OF_ORIGIN = '954'; + + /** + * European Single Procurement Document (759) + * + * A document/message containing a self-declaration by the supplier, providing + * preliminary evidence during the tendering phase. + */ + public const EUROPEAN_SINGLE_PROCUREMENT_DOCUMENT = '759'; + + /** + * European Single Procurement Document request (756) + * + * A document/message requesting a self-declaration from the supplier, + * providing preliminary evidence during the tendering phase. + */ + public const EUROPEAN_SINGLE_PROCUREMENT_DOCUMENT_REQUEST = '756'; + + /** + * Exceptional order (400) + * + * An order which falls outside the framework of an agreement. + */ + public const EXCEPTIONAL_ORDER = '400'; + + /** + * Exchange control declaration (import) (927) + * + * Document/message completed by an importer/buyer as a means for the + * competent body to control that a trade transaction for which foreign + * exchange has been allocated has been executed and that money has been + * transferred in accordance with the conditions of payment and the exchange + * control regulations in force. + */ + public const EXCHANGE_CONTROL_DECLARATION_IMPORT = '927'; + + /** + * Exchange control declaration, export (812) + * + * Document/message completed by an exporter/seller as a means whereby the + * competent body may control that the amount of foreign exchange accrued from + * a trade transaction is repatriated in accordance with the conditions of + * payment and exchange control regulations in force. + */ + public const EXCHANGE_CONTROL_DECLARATION_EXPORT = '812'; + + /** + * Excise certificate (100) + * + * Certificate asserting that the goods have been submitted to the excise + * authorities before departure from the exporting country or before delivery + * in case of import traffic. + */ + public const EXCISE_CERTIFICATE = '100'; + + /** + * Exclusive brokerage mandate (869) + * + * Document expressing the mandate of a client for a service only by the + * mandated broker. + */ + public const EXCLUSIVE_BROKERAGE_MANDATE = '869'; + + /** + * Export licence (811) + * + * Permit issued by a government authority permitting exportation of a + * specified commodity subject to specified conditions as quantity, country of + * destination, etc. Synonym: Embargo permit. + */ + public const EXPORT_LICENCE = '811'; + + /** + * Export licence, application for (810) + * + * Application for a permit issued by a government authority permitting + * exportation of a specified commodity subject to specified conditions as + * quantity, country of destination, etc. + */ + public const EXPORT_LICENCE_APPLICATION_FOR = '810'; + + /** + * Export price certificate (645) + * + * A certification executed by the competent authority from country of + * exportation stating the export price of the goods. + */ + public const EXPORT_PRICE_CERTIFICATE = '645'; + + /** + * Extended credit advice (455) + * + * Document/message sent by an account servicing institution to one of its + * account owners, to inform the account owner of an entry that has been or + * will be credited to its account for a specified amount on the date + * indicated. It provides extended commercial information concerning the + * relevant remittance advice. + */ + public const EXTENDED_CREDIT_ADVICE = '455'; + + /** + * Extended payment order (451) + * + * Document/message containing information needed to initiate the payment. It + * may cover the financial settlement for several commercial trade + * transactions, which it is possible to specify in a special payments detail + * part. It is an instruction to the ordered bank to arrange for the payment + * of one specified amount to the beneficiary. + */ + public const EXTENDED_PAYMENT_ORDER = '451'; + + /** + * Extra-Community trade statistical declaration (47) + * + * Document/message in which a declarant provides information about + * extra-Community trade of goods required by the body responsible for the + * collection of trade statistics. Trade by a country in the European Union + * with a country outside the European Union. + */ + public const EXTRACOMMUNITY_TRADE_STATISTICAL_DECLARATION = '47'; + + /** + * Factored credit note (396) + * + * Credit note related to assigned invoice(s). + */ + public const FACTORED_CREDIT_NOTE = '396'; + + /** + * Factored invoice (393) + * + * Invoice assigned to a third party for collection. + */ + public const FACTORED_INVOICE = '393'; + + /** + * Farmyard manure analysis (417) + * + * Farmyard manure analysis document. + */ + public const FARMYARD_MANURE_ANALYSIS = '417'; + + /** + * Federal label approval (11) + * + * A pre-approved document relating to federal label approval requirements. + */ + public const FEDERAL_LABEL_APPROVAL = '11'; + + /** + * Final construction invoice (877) + * + * Invoice concluding all previous partial invoices and partial final + * construction invoices in the context of a specific construction project. + */ + public const FINAL_CONSTRUCTION_INVOICE = '877'; + + /** + * Final payment request based on completion of work (218) + * + * The final payment request of a series of payment requests submitted upon + * completion of all the work. + */ + public const FINAL_PAYMENT_REQUEST_BASED_ON_COMPLETION_OF_WORK = '218'; + + /** + * First sample test report (8) + * + * Document/message describes the test report of the first sample. + */ + public const FIRST_SAMPLE_TEST_REPORT = '8'; + + /** + * Food grade certificate (637) + * + * A document that shows that the product (food additive, detergent, + * disinfectant and sanitizer) is suitable to be used in the food industry. + */ + public const FOOD_GRADE_CERTIFICATE = '637'; + + /** + * Food packaging contact certificate (643) + * + * A document legalized from a competent authority that shows that the food + * packaging product is safe to come into contact with food. + */ + public const FOOD_PACKAGING_CONTACT_CERTIFICATE = '643'; + + /** + * Foreign exchange permit (926) + * + * Document/message issued by the competent body authorizing an importer/buyer + * to transfer an amount of foreign exchange to an exporter/seller in payment + * for goods. + */ + public const FOREIGN_EXCHANGE_PERMIT = '926'; + + /** + * Forwarder's advice to exporter (622) + * + * Document/message issued by a freight forwarder informing an exporter of the + * action taken in fulfillment of instructions received. + */ + public const FORWARDERS_ADVICE_TO_EXPORTER = '622'; + + /** + * Forwarder's advice to import agent (621) + * + * Document/message issued by a freight forwarder in an exporting country + * advising his counterpart in an importing country about the forwarding of + * goods described therein. + */ + public const FORWARDERS_ADVICE_TO_IMPORT_AGENT = '621'; + + /** + * Forwarder's bill of lading (716) + * + * Non-negotiable document issued by a freight forwarder evidencing a contract + * for the carriage of goods by sea and the taking over or loading of the + * goods by the freight forwarder, and by which the freight forwarder + * undertakes to deliver the goods to the consignee named in the document. + */ + public const FORWARDERS_BILL_OF_LADING = '716'; + + /** + * Forwarder's certificate of receipt (624) + * + * Non-negotiable document issued by a forwarder to certify that he has + * assumed control of a specified consignment, with irrevocable instructions + * to send it to the consignee indicated in the document or to hold it at his + * disposal. E.g. FIATA-FCR. + */ + public const FORWARDERS_CERTIFICATE_OF_RECEIPT = '624'; + + /** + * Forwarder's certificate of transport (763) + * + * Negotiable document/message issued by a forwarder to certify that he has + * taken charge of a specified consignment for despatch and delivery in + * accordance with the consignor's instructions, as indicated in the document, + * and that he accepts responsibility for delivery of the goods to the holder + * of the document through the intermediary of a delivery agent of his choice. + * E.g. FIATA-FCT. + */ + public const FORWARDERS_CERTIFICATE_OF_TRANSPORT = '763'; + + /** + * Forwarder's invoice (623) + * + * Invoice issued by a freight forwarder specifying services rendered and + * costs incurred and claiming payment therefore. + */ + public const FORWARDERS_INVOICE = '623'; + + /** + * Forwarder's warehouse receipt (631) + * + * Document/message issued by a forwarder acting as Warehouse Keeper + * acknowledging receipt of goods placed in a warehouse, and stating or + * referring to the conditions which govern the warehousing and the release of + * goods. The document contains detailed provisions regarding the rights of + * holders-by-endorsement, transfer of ownership, etc. E.g. FIATA-FWR. + */ + public const FORWARDERS_WAREHOUSE_RECEIPT = '631'; + + /** + * Forwarder’s credit note (532) + * + * Document/message for providing credit information to the relevant party. + */ + public const FORWARDERS_CREDIT_NOTE = '532'; + + /** + * Forwarder’s invoice discrepancy report (553) + * + * Document/message reporting invoice discrepancies indentified by the + * forwarder. + */ + public const FORWARDERS_INVOICE_DISCREPANCY_REPORT = '553'; + + /** + * Forwarding instructions (610) + * + * Document/message issued to a freight forwarder, giving instructions + * regarding the action to be taken by the forwarder for the forwarding of + * goods described therein. + */ + public const FORWARDING_INSTRUCTIONS = '610'; + + /** + * Framework Agreement (539) + * + * An agreement between one or more contracting authorities and one or more + * economic operators, the purpose of which is to establish the terms + * governing contracts to be awarded during a given period, in particular with + * regard to price and, where appropriate, the quantity envisaged. + */ + public const FRAMEWORK_AGREEMENT = '539'; + + /** + * Free pass (42) + * + * A document giving free access to a service. + */ + public const FREE_PASS = '42'; + + /** + * Free Sale Certificate in the Country of Origin (627) + * + * A certificate confirming that a specified product is free for sale in the + * country of origin. + */ + public const FREE_SALE_CERTIFICATE_IN_THE_COUNTRY_OF_ORIGIN = '627'; + + /** + * Freight invoice (780) + * + * Document/message issued by a transport operation specifying freight costs + * and charges incurred for a transport operation and stating conditions of + * payment. + */ + public const FREIGHT_INVOICE = '780'; + + /** + * Freight manifest (786) + * + * Document/message containing the same information as a cargo manifest, and + * additional details on freight amounts, charges, etc. + */ + public const FREIGHT_MANIFEST = '786'; + + /** + * Fumigation certificate (267) + * + * Certificate attesting that fumigation has been performed. + */ + public const FUMIGATION_CERTIFICATE = '267'; + + /** + * Gate pass (655) + * + * Document/message authorizing goods specified therein to be brought out of a + * fenced-in port or terminal area. + */ + public const GATE_PASS = '655'; + + /** + * General cargo summary manifest report (87) + * + * A document code to indicate that the message being transmitted is summary + * manifest information for general cargo. + */ + public const GENERAL_CARGO_SUMMARY_MANIFEST_REPORT = '87'; + + /** + * General message (719) + * + * Document/message providing agreed textual information. + */ + public const GENERAL_MESSAGE = '719'; + + /** + * General response (Customs) (961) + * + * General response message to permit the transfer of data from Customs to the + * transmitter of the previous message. + */ + public const GENERAL_RESPONSE_CUSTOMS = '961'; + + /** + * General terms and conditions (774) + * + * Document specifying general terms and conditions. + */ + public const GENERAL_TERMS_AND_CONDITIONS = '774'; + + /** + * Good Manufacturing Practice (GMP) Certificate (538) + * + * Certificate that guarantees quality manufacturing and processing of food + * products, medications, cosmetics, etc. + */ + public const GOOD_MANUFACTURING_PRACTICE_GMP_CERTIFICATE = '538'; + + /** + * Goods control certificate (841) + * + * Document/message issued by a competent body evidencing the quality of the + * goods described therein, in accordance with national or international + * standards, or conforming to legislation in the importing country, or as + * specified in the contract. + */ + public const GOODS_CONTROL_CERTIFICATE = '841'; + + /** + * Goods declaration for Customs transit (950) + * + * Document/message by which the sender declares goods for Customs transit + * according to Annex E.1 (concerning Customs transit) to the Kyoto convention + * (CCC). + */ + public const GOODS_DECLARATION_FOR_CUSTOMS_TRANSIT = '950'; + + /** + * Goods declaration for exportation (830) + * + * Document/message by which goods are declared for export Customs clearance, + * conforming to the layout key set out at Appendix I to Annex C.1 concerning + * outright exportation to the Kyoto convention (CCC). Within a Customs union, + * "for despatch" may have the same meaning as "for exportation". + */ + public const GOODS_DECLARATION_FOR_EXPORTATION = '830'; + + /** + * Goods declaration for home use (930) + * + * Document/message by which goods are declared for import Customs clearance + * according to Annex B.1 (concerning clearance for home use) to the Kyoto + * convention (CCC). + */ + public const GOODS_DECLARATION_FOR_HOME_USE = '930'; + + /** + * Goods declaration for importation (929) + * + * Document/message by which goods are declared for import Customs clearance + * [sister entry of 830]. + */ + public const GOODS_DECLARATION_FOR_IMPORTATION = '929'; + + /** + * Goods receipt (632) + * + * Document/message to acknowledge the receipt of goods and in addition may + * indicate receiving conditions. + */ + public const GOODS_RECEIPT = '632'; + + /** + * Goods receipt, carriage (702) + * + * Document/message issued by a carrier or a carrier's agent, acknowledging + * receipt for carriage of goods specified therein on conditions stated or + * referred to in the document, enabling the carrier to issue a transport + * document. + */ + public const GOODS_RECEIPT_CARRIAGE = '702'; + + /** + * Government contract (991) + * + * Document/message describing a contract with a government authority. + */ + public const GOVERNMENT_CONTRACT = '991'; + + /** + * Grant (151) + * + * A document indicating the granting of funds. + */ + public const GRANT = '151'; + + /** + * Group insurance rules (778) + * + * Document stating the rules of a group insurance contract. + */ + public const GROUP_INSURANCE_RULES = '778'; + + /** + * Group pension commitment information (816) + * + * Information document for the group pension commitment to an individual + * person. + */ + public const GROUP_PENSION_COMMITMENT_INFORMATION = '816'; + + /** + * Guarantee of cost acceptance (826) + * + * Document certifying the guarantee of the document issuer that he will pay + * for costs of the addressee, e.g. the costs for repairing a vehicle. + */ + public const GUARANTEE_OF_COST_ACCEPTANCE = '826'; + + /** + * Halal Slaughtering Certificate (589) + * + * A certificate verifying that meat has been produced from slaughter in + * accordance with Islamic laws and practices. + */ + public const HALAL_SLAUGHTERING_CERTIFICATE = '589'; + + /** + * Handling order (650) + * + * Document/message issued by a cargo handling organization (port + * administration, terminal operator, etc.) for the removal or other handling + * of goods under their care. + */ + public const HANDLING_ORDER = '650'; + + /** + * Health certificate (636) + * + * A document legalized from a competent authority that shows that the product + * has been tested microbiologically and is free from any pathogens and fit + * for human consumption and/or declares that the product is in compliance + * with sanitary and phytosanitary measures. + */ + public const HEALTH_CERTIFICATE = '636'; + + /** + * Healthcare discharge report, final (309) + * + * Final discharge report by healthcare provider. + */ + public const HEALTHCARE_DISCHARGE_REPORT_FINAL = '309'; + + /** + * Healthcare discharge report, preliminary (358) + * + * Preliminary discharge report by healthcare provider. + */ + public const HEALTHCARE_DISCHARGE_REPORT_PRELIMINARY = '358'; + + /** + * Heat Treatment Certificate (625) + * + * A certificate verifying the heat treatment of the product is in conformance + * with international standards to ensure the product’s healthiness and/or + * shows the mode of heat treatment indicating the temperature and the amount + * of time the product or raw material used in the product was treated (such + * as milk). + */ + public const HEAT_TREATMENT_CERTIFICATE = '625'; + + /** + * Hire invoice (387) + * + * Document/message for invoicing the hiring of human resources or renting + * goods or equipment. + */ + public const HIRE_INVOICE = '387'; + + /** + * Hire order (232) + * + * Document/message for hiring human resources or renting goods or equipment. + */ + public const HIRE_ORDER = '232'; + + /** + * Horsemeat sanitary certificate (92) + * + * Document or message issued by the competent authority in the exporting + * country evidencing that horsemeat products comply with the requirements set + * by the importing country. + */ + public const HORSEMEAT_SANITARY_CERTIFICATE = '92'; + + /** + * House bill of lading (714) + * + * The bill of lading issued not by the carrier but by the freight + * forwarder/consolidator known by the carrier. + */ + public const HOUSE_BILL_OF_LADING = '714'; + + /** + * House waybill (703) + * + * The document made out by an agent/consolidator which evidences the contract + * between the shipper and the agent/consolidator for the arrangement of + * carriage of goods. + */ + public const HOUSE_WAYBILL = '703'; + + /** + * Identification match (449) + * + * Message related to conducting a search for an identification match. + */ + public const IDENTIFICATION_MATCH = '449'; + + /** + * Identity card (36) + * + * Official document to identify a person. + */ + public const IDENTITY_CARD = '36'; + + /** + * Image (858) + * + * Document consisting of an image. + */ + public const IMAGE = '858'; + + /** + * Impending arrival (96) + * + * Notification of impending arrival details for vessel. + */ + public const IMPENDING_ARRIVAL = '96'; + + /** + * Implementation guideline (302) + * + * A document specifying the criterion and format for exchanging information + * in an electronic data interchange syntax. + */ + public const IMPLEMENTATION_GUIDELINE = '302'; + + /** + * Import licence (911) + * + * Document/message issued by the competent body in accordance with import + * regulations in force, by which authorization is granted to a named party to + * import either a limited quantity of designated articles or an unlimited + * quantity of such articles during a limited period, under conditions + * specified in the document. + */ + public const IMPORT_LICENCE = '911'; + + /** + * Import licence, application for (910) + * + * Document/message in which an interested party applies to the competent body + * for authorization to import either a limited quantity of articles subject + * to import restrictions, or an unlimited quantity of such articles during a + * limited period, and specifies the kind of articles, their origin and value, + * etc. + */ + public const IMPORT_LICENCE_APPLICATION_FOR = '910'; + + /** + * Indefinite delivery definite quantity contract (153) + * + * A document indicating a contract calling for indefinite deliveries of + * definite quantities. + */ + public const INDEFINITE_DELIVERY_DEFINITE_QUANTITY_CONTRACT = '153'; + + /** + * Indefinite delivery indefinite quantity contract (152) + * + * A document indicating a contract calling for the indefinite deliveries of + * indefinite quantities of goods. + */ + public const INDEFINITE_DELIVERY_INDEFINITE_QUANTITY_CONTRACT = '152'; + + /** + * Industry superannuation contributions advice (27) + * + * Document/message providing contributions advice used for superannuation + * schemes which are industry wide. + */ + public const INDUSTRY_SUPERANNUATION_CONTRIBUTIONS_ADVICE = '27'; + + /** + * Industry superannuation member maintenance message (29) + * + * Member maintenance message used for industry wide superannuation schemes. + */ + public const INDUSTRY_SUPERANNUATION_MEMBER_MAINTENANCE_MESSAGE = '29'; + + /** + * Inedible sanitary certificate (95) + * + * Document or message issued by the competent authority in the exporting + * country evidencing that inedible products comply with the requirements set + * by the importing country. + */ + public const INEDIBLE_SANITARY_CERTIFICATE = '95'; + + /** + * Infrastructure condition (413) + * + * Information about components in an infrastructure. + */ + public const INFRASTRUCTURE_CONDITION = '413'; + + /** + * Inland waterway bill of lading (711) + * + * Negotiable transport document made out to a named person, to order or to + * bearer, signed by the carrier and handed to the sender after receipt of the + * goods. + */ + public const INLAND_WATERWAY_BILL_OF_LADING = '711'; + + /** + * Inquiry (251) + * + * This is a request for information. + */ + public const INQUIRY = '251'; + + /** + * Inquiry mandate (871) + * + * Document expressing the mandate of a client for an inquiry service by the + * mandated provider. + */ + public const INQUIRY_MANDATE = '871'; + + /** + * Inspection certificate (856) + * + * Document/message issued by a competent body evidencing that the goods + * described therein have been inspected in accordance with national or + * international standards, in conformity with legislation in the country in + * which the inspection is required, or as specified in the contract. + */ + public const INSPECTION_CERTIFICATE = '856'; + + /** + * Inspection report (293) + * + * A message informing a party of the results of an inspection. + */ + public const INSPECTION_REPORT = '293'; + + /** + * Inspection request (292) + * + * A message requesting a party to inspect items. + */ + public const INSPECTION_REQUEST = '292'; + + /** + * Instruction for returns (733) + * + * A message by which a party informs another party whether and how goods + * shall be returned. + */ + public const INSTRUCTION_FOR_RETURNS = '733'; + + /** + * Instruction to collect (297) + * + * A message instructing a party to collect goods. + */ + public const INSTRUCTION_TO_COLLECT = '297'; + + /** + * Instructions for bank transfer (409) + * + * Document/message containing instructions from a customer to his bank to pay + * an amount in a specified currency to a nominated party in another country + * by a method either specified (e.g. teletransmission, air mail) or left to + * the discretion of the bank. + */ + public const INSTRUCTIONS_FOR_BANK_TRANSFER = '409'; + + /** + * Insurance certificate (520) + * + * Document/message issued to the insured certifying that insurance has been + * effected and that a policy has been issued. Such a certificate for a + * particular cargo is primarily used when good are insured under the terms of + * a floating or an open policy; at the request of the insured it can be + * exchanged for a policy. + */ + public const INSURANCE_CERTIFICATE = '520'; + + /** + * Insurance declaration sheet (bordereau) (550) + * + * A document/message used when an insured reports to his insurer details of + * individual shipments which are covered by an insurance contract - an open + * cover or a floating policy - between the parties. + */ + public const INSURANCE_DECLARATION_SHEET_BORDEREAU = '550'; + + /** + * Insurance policy (530) + * + * Document/message issued by the insurer evidencing an agreement to insure + * and containing the conditions of the agreement concluded whereby the + * insurer undertakes for a specific fee to indemnify the insured for the + * losses arising out of the perils and accidents specified in the contract. + */ + public const INSURANCE_POLICY = '530'; + + /** + * Insured party payment report (836) + * + * Report about payments done towards an insured party. + */ + public const INSURED_PARTY_PAYMENT_REPORT = '836'; + + /** + * Insured status report (815) + * + * Document reporting (e.g. annually) to the insured the actual details of an + * insurance contract. + */ + public const INSURED_STATUS_REPORT = '815'; + + /** + * Insurer's invoice (575) + * + * Document/message issued by an insurer specifying the cost of an insurance + * which has been effected and claiming payment therefore. + */ + public const INSURERS_INVOICE = '575'; + + /** + * Interim application for payment (211) + * + * Document/message containing a provisional assessment in support of a + * request for payment for completed work for a construction contract. + */ + public const INTERIM_APPLICATION_FOR_PAYMENT = '211'; + + /** + * Interim International Ship Security Certificate (537) + * + * An interim certificate on ship security issued basis under the + * International code for the Security of Ships and of Port facilities (ISPS + * code). + */ + public const INTERIM_INTERNATIONAL_SHIP_SECURITY_CERTIFICATE = '537'; + + /** + * Intermediate handling cross docking despatch advice (464) + * + * Document by means of which the supplier or consignor informs the buyer, + * consignee or the distribution centre about the despatch of products which + * will be moved across a dock, de-consolidated and re-consolidated according + * to final delivery location requirements. + */ + public const INTERMEDIATE_HANDLING_CROSS_DOCKING_DESPATCH_ADVICE = '464'; + + /** + * Intermediate handling cross docking order (402) + * + * An order requesting the supply of products which will be moved across a + * dock, de-consolidated and re-consolidated according to the final delivery + * location requirements. + */ + public const INTERMEDIATE_HANDLING_CROSS_DOCKING_ORDER = '402'; + + /** + * Internal transport order (150) + * + * Document/message giving instructions about the transport of goods within an + * enterprise. + */ + public const INTERNAL_TRANSPORT_ORDER = '150'; + + /** + * International Ship Security Certificate (536) + * + * A certificate on ship security issued based on the International code for + * the Security of Ships and of Port facilities (ISPS code). + */ + public const INTERNATIONAL_SHIP_SECURITY_CERTIFICATE = '536'; + + /** + * INTRASTAT declaration (896) + * + * Document/message in which a declarant provides information about goods + * required by the body responsible for the collection of trade statistics. + */ + public const INTRASTAT_DECLARATION = '896'; + + /** + * Introductory letter (867) + * + * A letter of introduction attached to, or accompanying another document such + * as an insurance policy. + */ + public const INTRODUCTORY_LETTER = '867'; + + /** + * Inventory adjustment status report (263) + * + * A message detailing statuses related to the adjustment of inventory. + */ + public const INVENTORY_ADJUSTMENT_STATUS_REPORT = '263'; + + /** + * Inventory movement advice (78) + * + * Advice of inventory movements. + */ + public const INVENTORY_MOVEMENT_ADVICE = '78'; + + /** + * Inventory report (35) + * + * A message specifying information relating to held inventories. + */ + public const INVENTORY_REPORT = '35'; + + /** + * Inventory status advice (79) + * + * Advice of stock on hand. + */ + public const INVENTORY_STATUS_ADVICE = '79'; + + /** + * Invitation to tender (755) + * + * A document/message used by a buyer to define the procurement procedure and + * request specific suppliers to participate. + */ + public const INVITATION_TO_TENDER = '755'; + + /** + * Invoice information for accounting purposes (751) + * + * A document / message containing accounting related information such as + * monetary summations, seller id and VAT information. This may not be a + * complete invoice according to legal requirements. For instance the line + * item information might be excluded. + */ + public const INVOICE_INFORMATION_FOR_ACCOUNTING_PURPOSES = '751'; + + /** + * Invoicing data sheet (130) + * + * Document/message issued within an enterprise containing data about goods + * sold, to be used as the basis for the preparation of an invoice. + */ + public const INVOICING_DATA_SHEET = '130'; + + /** + * Items booked to a financial account report (338) + * + * A message reporting items which have been booked to a financial account. + */ + public const ITEMS_BOOKED_TO_A_FINANCIAL_ACCOUNT_REPORT = '338'; + + /** + * Kanban schedule (288) + * + * Message to describe a Kanban schedule. + */ + public const KANBAN_SCHEDULE = '288'; + + /** + * Lease invoice (394) + * + * Usage of INVOIC-message for goods in leasing contracts. + */ + public const LEASE_INVOICE = '394'; + + /** + * Lease order (223) + * + * Document/message for goods in leasing contracts. + */ + public const LEASE_ORDER = '223'; + + /** + * Legal action (848) + * + * Document specifying a legal action at court. + */ + public const LEGAL_ACTION = '848'; + + /** + * Legal statement of an account (54) + * + * A statement of an account containing the booked items as in the ledger of + * the account servicing financial institution. + */ + public const LEGAL_STATEMENT_OF_AN_ACCOUNT = '54'; + + /** + * Letter of indemnity for non-surrender of bill of lading (715) + * + * Document/message issued by a commercial party or a bank of an insurance + * company accepting responsibility to the beneficiary of the indemnity in + * accordance with the terms thereof. + */ + public const LETTER_OF_INDEMNITY_FOR_NONSURRENDER_OF_BILL_OF_LADING = '715'; + + /** + * Letter of intent (215) + * + * Document/message by means of which a buyer informs a seller that the buyer + * intends to enter into contractual negotiations. + */ + public const LETTER_OF_INTENT = '215'; + + /** + * Life insurance payroll deductions advice (30) + * + * Payroll deductions advice used in the life insurance industry. + */ + public const LIFE_INSURANCE_PAYROLL_DEDUCTIONS_ADVICE = '30'; + + /** + * Listing statement of an account (55) + * + * A statement from the account servicing financial institution containing + * items pending to be booked. + */ + public const LISTING_STATEMENT_OF_AN_ACCOUNT = '55'; + + /** + * Loadline document (795) + * + * Document specifying the limit of a ship's legal submersion under various + * conditions. + */ + public const LOADLINE_DOCUMENT = '795'; + + /** + * Loss statement (819) + * + * Document specifying the value of a loss. + */ + public const LOSS_STATEMENT = '819'; + + /** + * Low risk country formal letter (652) + * + * An official letter issued by an import authority granted to the importer of + * goods from a low risk country which allows the importer to place its + * products in the local market with certain favorable considerations. + */ + public const LOW_RISK_COUNTRY_FORMAL_LETTER = '652'; + + /** + * Low value payment order(s) (249) + * + * The message contains low value payment order(s) only. + */ + public const LOW_VALUE_PAYMENT_ORDERS = '249'; + + /** + * Make or buy plan (156) + * + * A document indicating a plan that identifies which items will be made and + * which items will be bought. + */ + public const MAKE_OR_BUY_PLAN = '156'; + + /** + * Manufacturer raised consignment order (726) + * + * Document/message providing details of a consignment order which has been + * raised by a manufacturer. + */ + public const MANUFACTURER_RAISED_CONSIGNMENT_ORDER = '726'; + + /** + * Manufacturer raised order (725) + * + * Document/message providing details of an order which has been raised by a + * manufacturer. + */ + public const MANUFACTURER_RAISED_ORDER = '725'; + + /** + * Manufacturing instructions (110) + * + * Document/message issued within an enterprise to initiate the manufacture of + * goods to be offered for sale. + */ + public const MANUFACTURING_INSTRUCTIONS = '110'; + + /** + * Manufacturing license (651) + * + * A license granted by a competent authority to a manufacturer for production + * of specific products. + */ + public const MANUFACTURING_LICENSE = '651'; + + /** + * Manufacturing specification (167) + * + * A document indicating the specification of how an item is to be + * manufactured. + */ + public const MANUFACTURING_SPECIFICATION = '167'; + + /** + * Maritime declaration of health (797) + * + * Document certifying the health condition on board a vessel, valid to a + * specified date. + */ + public const MARITIME_DECLARATION_OF_HEALTH = '797'; + + /** + * Master air waybill (741) + * + * Document/message made out by or on behalf of the agent/consolidator which + * evidences the contract between the agent/consolidator and carrier(s) for + * carriage of goods over routes of the carrier(s) for a consignment + * consisting of goods originated by more than one shipper (IATA). + */ + public const MASTER_AIR_WAYBILL = '741'; + + /** + * Master bill of lading (704) + * + * A bill of lading issued by the master of a vessel (in actuality the owner + * or charterer of the vessel). It could cover a number of house bills. + */ + public const MASTER_BILL_OF_LADING = '704'; + + /** + * Mate's receipt (713) + * + * Document/message issued by a ship's officer to acknowledge that a specified + * consignment has been received on board a vessel, and the apparent condition + * of the goods; enabling the carrier to issue a Bill of lading. + */ + public const MATES_RECEIPT = '713'; + + /** + * Material inspection and receiving report (163) + * + * A report that is both an inspection report for materials and a receiving + * document. + */ + public const MATERIAL_INSPECTION_AND_RECEIVING_REPORT = '163'; + + /** + * Means of transport advice (97) + * + * Message reporting the means of transport used to carry goods or cargo. + */ + public const MEANS_OF_TRANSPORT_ADVICE = '97'; + + /** + * Means of transportation availability information (403) + * + * Information giving the various availabilities of a means of transportation. + */ + public const MEANS_OF_TRANSPORTATION_AVAILABILITY_INFORMATION = '403'; + + /** + * Means of transportation schedule information (404) + * + * Information giving the various schedules of a means of transportation. + */ + public const MEANS_OF_TRANSPORTATION_SCHEDULE_INFORMATION = '404'; + + /** + * Meat and meat by-products sanitary certificate (89) + * + * Document or message issued by the competent authority in the exporting + * country evidencing that meat or meat by-products comply with the + * requirements set by the importing country. + */ + public const MEAT_AND_MEAT_BYPRODUCTS_SANITARY_CERTIFICATE = '89'; + + /** + * Meat food products sanitary certificate (90) + * + * Document or message issued by the competent authority in the exporting + * country evidencing that meat food products comply with the requirements set + * by the importing country. + */ + public const MEAT_FOOD_PRODUCTS_SANITARY_CERTIFICATE = '90'; + + /** + * Medical certificate (842) + * + * Document certifying a medical condition. + */ + public const MEDICAL_CERTIFICATE = '842'; + + /** + * Message in development request (281) + * + * Requesting a Message in Development (MiD). + */ + public const MESSAGE_IN_DEVELOPMENT_REQUEST = '281'; + + /** + * Metered services consumption report (742) + * + * Document/message providing metered consumption details. + */ + public const METERED_SERVICES_CONSUMPTION_REPORT = '742'; + + /** + * Metered services consumption report supporting an invoice (739) + * + * Document/message providing metered consumption details supporiting an + * invoice. + */ + public const METERED_SERVICES_CONSUMPTION_REPORT_SUPPORTING_AN_INVOICE = '739'; + + /** + * Metered services invoice (82) + * + * Document/message claiming payment for the supply of metered services (e.g., + * gas, electricity, etc.) supplied to a fixed meter whose consumption is + * measured over a period of time. + */ + public const METERED_SERVICES_INVOICE = '82'; + + /** + * Metering point information response (391) + * + * Response to a request for information about a metering point. + */ + public const METERING_POINT_INFORMATION_RESPONSE = '391'; + + /** + * Military Identification Card (528) + * + * The official document used for military personnel on travel orders, + * substituting a passport. + */ + public const MILITARY_IDENTIFICATION_CARD = '528'; + + /** + * Mill certificate (12) + * + * Certificate certifying a specific quality of agricultural products. + */ + public const MILL_CERTIFICATE = '12'; + + /** + * Modification of existing message (282) + * + * Requesting a change to an existing message. + */ + public const MODIFICATION_OF_EXISTING_MESSAGE = '282'; + + /** + * Movement certificate A.TR.1 (18) + * + * Specific form of transit declaration issued by the exporter (movement + * certificate). + */ + public const MOVEMENT_CERTIFICATE_ATR = '18'; + + /** + * Multidrop order (147) + * + * One purchase order that contains the orders of two or more vendors and the + * associated delivery points for each. + */ + public const MULTIDROP_ORDER = '147'; + + /** + * Multimodal transport document (generic) (765) + * + * Document/message which evidences a multimodal transport contract, the + * taking in charge of the goods by the multimodal transport operator, and an + * undertaking by him to deliver the goods in accordance with the terms of the + * contract. (International Convention on Multimodal Transport of Goods). + */ + public const MULTIMODAL_TRANSPORT_DOCUMENT_GENERIC = '765'; + + /** + * Multimodal/combined transport document (generic) (760) + * + * A transport document used when more than one mode of transportation is + * involved in the movement of cargo. It is a contract of carriage and receipt + * of the cargo for a multimodal transport. It indicates the place where the + * responsible transport company in the move takes responsibility for the + * cargo, the place where the responsibility of this transport company in the + * move ends and the conveyances involved. + */ + public const MULTIMODALCOMBINED_TRANSPORT_DOCUMENT_GENERIC = '760'; + + /** + * Multiple direct debit (486) + * + * Document/message containing a direct debit to credit one or more accounts + * and to debit one or more debtors. + */ + public const MULTIPLE_DIRECT_DEBIT = '486'; + + /** + * Multiple direct debit request (484) + * + * Document/message containing a direct debit request to credit one or more + * accounts and to debit one or more debtors. + */ + public const MULTIPLE_DIRECT_DEBIT_REQUEST = '484'; + + /** + * Multiple payment order (452) + * + * Document/message containing a payment order to debit one or more accounts + * and to credit one or more beneficiaries. + */ + public const MULTIPLE_PAYMENT_ORDER = '452'; + + /** + * Name/product plate (328) + * + * Plates on goods identifying and describing an article. + */ + public const NAMEPRODUCT_PLATE = '328'; + + /** + * NATO transit document (977) + * + * Customs transit document for the carriage of shipments of the NATO armed + * forces under Customs supervision. + */ + public const NATO_TRANSIT_DOCUMENT = '977'; + + /** + * New code request (272) + * + * Requesting a new code. + */ + public const NEW_CODE_REQUEST = '272'; + + /** + * New message request (280) + * + * Request for a new message (NMR). + */ + public const NEW_MESSAGE_REQUEST = '280'; + + /** + * Non-negotiable maritime transport document (generic) (712) + * + * Non-negotiable document which evidences a contract for the carriage of + * goods by sea and the taking over or loading of the goods by the carrier, + * and by which the carrier undertakes to deliver the goods to the consignee + * named in the document. E.g. Sea waybill. Remark: Synonymous with "straight" + * or "non-negotiable Bill of lading" used in certain countries, e.g. Canada. + */ + public const NONNEGOTIABLE_MARITIME_TRANSPORT_DOCUMENT_GENERIC = '712'; + + /** + * Non-pre-authorised direct debit request(s) (244) + * + * The message contains non-pre-authorised direct debit request(s). + */ + public const NONPREAUTHORISED_DIRECT_DEBIT_REQUESTS = '244'; + + /** + * Non-pre-authorised direct debit(s) (238) + * + * The message contains non-pre-authorised direct debit(s). + */ + public const NONPREAUTHORISED_DIRECT_DEBITS = '238'; + + /** + * Notice of circumstances preventing delivery (goods) (782) + * + * Request made by the carrier to the sender, or, as the case may be, the + * consignee, for instructions as to the disposal of the consignment when + * circumstances prevent delivery and the return of the goods has not been + * requested by the consignor in the transport document. + */ + public const NOTICE_OF_CIRCUMSTANCES_PREVENTING_DELIVERY_GOODS = '782'; + + /** + * Notice of circumstances preventing transport (goods) (783) + * + * Request made by the carrier to the sender, or, the consignee as the case + * may be, for instructions as to the disposal of the goods when circumstances + * prevent transport before departure or en route, after acceptance of the + * consignment concerned. + */ + public const NOTICE_OF_CIRCUMSTANCES_PREVENTING_TRANSPORT_GOODS = '783'; + + /** + * Notice that circumstances prevent payment of delivered goods (453) + * + * Message used to inform a supplier that delivered goods cannot be paid due + * to circumstances which prevent payment. + */ + public const NOTICE_THAT_CIRCUMSTANCES_PREVENT_PAYMENT_OF_DELIVERED_GOODS = '453'; + + /** + * Notification of balance responsible entity change (434) + * + * Notification of a change of balance responsible entity. + */ + public const NOTIFICATION_OF_BALANCE_RESPONSIBLE_ENTITY_CHANGE = '434'; + + /** + * Notification of change of supplier (392) + * + * A notification of a change of supplier. + */ + public const NOTIFICATION_OF_CHANGE_OF_SUPPLIER = '392'; + + /** + * Notification of emergency shifting from the designated place in port (354) + * + * Document to notify shifting from designated place in port once secured at + * the designated place. + */ + public const NOTIFICATION_OF_EMERGENCY_SHIFTING_FROM_THE_DESIGNATED_PLACE_IN_PORT = '354'; + + /** + * Notification of meter change (408) + * + * Notification about the change of a meter. + */ + public const NOTIFICATION_OF_METER_CHANGE = '408'; + + /** + * Notification of metering point identification change (410) + * + * Notification of the change of metering point identification. + */ + public const NOTIFICATION_OF_METERING_POINT_IDENTIFICATION_CHANGE = '410'; + + /** + * Notification of usage of berth or mooring facilities (352) + * + * Document to notify usage of berth or mooring facilities. + */ + public const NOTIFICATION_OF_USAGE_OF_BERTH_OR_MOORING_FACILITIES = '352'; + + /** + * Notification to grid operator of contract termination (432) + * + * Notification to the grid operator regarding the termination of a contract. + */ + public const NOTIFICATION_TO_GRID_OPERATOR_OF_CONTRACT_TERMINATION = '432'; + + /** + * Notification to grid operator of metering point changes (433) + * + * Notification to the grid operator about changes regarding a metering point. + */ + public const NOTIFICATION_TO_GRID_OPERATOR_OF_METERING_POINT_CHANGES = '433'; + + /** + * Notification to supplier of contract termination (406) + * + * Notification to the supplier regarding the termination of a contract. + */ + public const NOTIFICATION_TO_SUPPLIER_OF_CONTRACT_TERMINATION = '406'; + + /** + * Notification to supplier of metering point changes (407) + * + * Notification to the supplier about changes regarding a metering point. + */ + public const NOTIFICATION_TO_SUPPLIER_OF_METERING_POINT_CHANGES = '407'; + + /** + * Offer / quotation (310) + * + * (1332) Document/message which, with a view to concluding a contract, sets + * out the conditions under which the goods are offered. + */ + public const OFFER_QUOTATION = '310'; + + /** + * Operating instructions (327) + * + * Document/message describing instructions for operation. + */ + public const OPERATING_INSTRUCTIONS = '327'; + + /** + * Optical Character Reading (OCR) payment (322) + * + * Payment effected by an Optical Character Reading (OCR) document. + */ + public const OPTICAL_CHARACTER_READING_OCR_PAYMENT = '322'; + + /** + * Optical Character Reading (OCR) payment credit note (420) + * + * Payment credit note effected by an Optical Character Reading (OCR) + * document. + */ + public const OPTICAL_CHARACTER_READING_OCR_PAYMENT_CREDIT_NOTE = '420'; + + /** + * Order (220) + * + * Document/message by means of which a buyer initiates a transaction with a + * seller involving the supply of goods or services as specified, according to + * conditions set out in an offer, or otherwise known to the buyer. + */ + public const ORDER = '220'; + + /** + * Order status enquiry (347) + * + * A message enquiring the status of previously sent orders. + */ + public const ORDER_STATUS_ENQUIRY = '347'; + + /** + * Order status report (348) + * + * A message reporting the status of previously sent orders. + */ + public const ORDER_STATUS_REPORT = '348'; + + /** + * Original accounting voucher (533) + * + * To indicate that the document/message justifying an accounting entry is + * original. + */ + public const ORIGINAL_ACCOUNTING_VOUCHER = '533'; + + /** + * Out of court settlement (847) + * + * Document which specifies an out of court settlement. + */ + public const OUT_OF_COURT_SETTLEMENT = '847'; + + /** + * Package response (Customs) (964) + * + * Package response message to permit the transfer of data from Customs to the + * transmitter of the previous message. + */ + public const PACKAGE_RESPONSE_CUSTOMS = '964'; + + /** + * Packaging material composition report (644) + * + * A document that shows the main structure that composes the packaging + * material. + */ + public const PACKAGING_MATERIAL_COMPOSITION_REPORT = '644'; + + /** + * Packing instructions (140) + * + * Document/message within an enterprise giving instructions on how goods are + * to be packed. + */ + public const PACKING_INSTRUCTIONS = '140'; + + /** + * Packing list (271) + * + * Document/message specifying the distribution of goods in individual + * packages (in trade environment the despatch advice message is used for the + * packing list). + */ + public const PACKING_LIST = '271'; + + /** + * Partial construction invoice (875) + * + * Partial invoice in the context of a specific construction project. + */ + public const PARTIAL_CONSTRUCTION_INVOICE = '875'; + + /** + * Partial final construction invoice (876) + * + * Invoice concluding all previous partial construction invoices of a + * completed partial rendered service in the context of a specific + * construction project. + */ + public const PARTIAL_FINAL_CONSTRUCTION_INVOICE = '876'; + + /** + * Partial invoice (326) + * + * Document/message specifying details of an incomplete invoice. + */ + public const PARTIAL_INVOICE = '326'; + + /** + * Party credit information (377) + * + * Document/message providing data concerning the credit information of a + * party. + */ + public const PARTY_CREDIT_INFORMATION = '377'; + + /** + * Party information (10) + * + * Document/message providing basic data concerning a party. + */ + public const PARTY_INFORMATION = '10'; + + /** + * Party payment behaviour information (378) + * + * Document/message providing data concerning the payment behaviour of a + * party. + */ + public const PARTY_PAYMENT_BEHAVIOUR_INFORMATION = '378'; + + /** + * Passenger list (745) + * + * Declaration to Customs regarding passengers aboard the conveyance; + * equivalent to IMO FAL 6. + */ + public const PASSENGER_LIST = '745'; + + /** + * Passport (39) + * + * An official document giving permission to travel in foreign countries. + */ + public const PASSPORT = '39'; + + /** + * Payment bond (357) + * + * A document that guarantees the payment of monies. + */ + public const PAYMENT_BOND = '357'; + + /** + * Payment card (461) + * + * The document is a credit, guarantee or charge card. + */ + public const PAYMENT_CARD = '461'; + + /** + * Payment or performance bond (165) + * + * A document indicating a bond that guarantees the payment of monies or a + * performance. + */ + public const PAYMENT_OR_PERFORMANCE_BOND = '165'; + + /** + * Payment order (450) + * + * Document/message containing information needed to initiate the payment. It + * may cover the financial settlement for one or more commercial trade + * transactions. A payment order is an instruction to the ordered bank to + * arrange for the payment of one specified amount to the beneficiary. + */ + public const PAYMENT_ORDER = '450'; + + /** + * Payment receipt confirmation (834) + * + * Document confirming the receipt of a payment. + */ + public const PAYMENT_RECEIPT_CONFIRMATION = '834'; + + /** + * Payment request for completed units (219) + * + * A request for payment for completed units. + */ + public const PAYMENT_REQUEST_FOR_COMPLETED_UNITS = '219'; + + /** + * Payment valuation (204) + * + * Document/message establishing the financial elements of a situation of + * works. + */ + public const PAYMENT_VALUATION = '204'; + + /** + * Payment valuation for unscheduled items (217) + * + * A payment valuation for unscheduled items. + */ + public const PAYMENT_VALUATION_FOR_UNSCHEDULED_ITEMS = '217'; + + /** + * Payroll deductions advice (747) + * + * A message sent by a party (usually an employer or its representative) to a + * service providing organisation, to detail payroll deductions paid on behalf + * of its employees to the service providing organisation. + */ + public const PAYROLL_DEDUCTIONS_ADVICE = '747'; + + /** + * Performance bond (356) + * + * A document that guarantees performance. + */ + public const PERFORMANCE_BOND = '356'; + + /** + * Pharmaceutical sanitary certificate (94) + * + * Document or message issued by the competent authority in the exporting + * country evidencing that pharmaceutical products comply with the + * requirements set by the importing country. + */ + public const PHARMACEUTICAL_SANITARY_CERTIFICATE = '94'; + + /** + * Physician report (839) + * + * Report issued by a medical doctor. + */ + public const PHYSICIAN_REPORT = '839'; + + /** + * Phytosanitary certificate (851) + * + * A message/doucment consistent with the model for certificates of the IPPC, + * attesting that a consignment meets phytosanitary import requirements. + */ + public const PHYTOSANITARY_CERTIFICATE = '851'; + + /** + * Phytosanitary Re-export Certificate (657) + * + * A message/document consistent with the model for re-export phytosanitary + * certificates of the IPPC, attesting that a consignment meets phytosanitary + * import requirements. + */ + public const PHYTOSANITARY_REEXPORT_CERTIFICATE = '657'; + + /** + * Pick-up notice (171) + * + * Notice specifying the pick-up of released cargo or containers from a + * certain address. + */ + public const PICKUP_NOTICE = '171'; + + /** + * Plan for provision of health service (371) + * + * Document containing a plan for provision of health service. + */ + public const PLAN_FOR_PROVISION_OF_HEALTH_SERVICE = '371'; + + /** + * Plant Passport (752) + * + * Document/message issued by a competent body certifying the phytosanitary + * status of plants or plant products for international trade. + */ + public const PLANT_PASSPORT = '752'; + + /** + * Port authority waste disposal report (482) + * + * Document/message sent by a port authority to another port authority for + * reporting information on waste disposal. + */ + public const PORT_AUTHORITY_WASTE_DISPOSAL_REPORT = '482'; + + /** + * Port charges documents (633) + * + * Documents/messages specifying services rendered, storage and handling + * costs, demurrage and other charges due to the owner of goods described + * therein. + */ + public const PORT_CHARGES_DOCUMENTS = '633'; + + /** + * Post receipt (13) + * + * Document/message which evidences the transport of goods by post (e.g. mail, + * parcel, etc.). + */ + public const POST_RECEIPT = '13'; + + /** + * Poultry sanitary certificate (91) + * + * Document or message issued by the competent authority in the exporting + * country evidencing that poultry products comply with the requirements set + * by the importing country. + */ + public const POULTRY_SANITARY_CERTIFICATE = '91'; + + /** + * Pre-authorised direct debit request(s) (243) + * + * The message contains pre-authorised direct debit request(s). + */ + public const PREAUTHORISED_DIRECT_DEBIT_REQUESTS = '243'; + + /** + * Pre-authorised direct debit(s) (214) + * + * The message contains pre-authorised direct debit(s). + */ + public const PREAUTHORISED_DIRECT_DEBITS = '214'; + + /** + * Pre-packed cross docking consignment order (898) + * + * A consignment order requesting the supply of products packed according to + * the final delivery point which will be moved across a dock in a + * distribution centre without further handling. + */ + public const PREPACKED_CROSS_DOCKING_CONSIGNMENT_ORDER = '898'; + + /** + * Pre-packed cross docking despatch advice (463) + * + * Document by means of which the supplier or consignor informs the buyer, + * consignee or distribution centre about the despatch of products packed + * according to the final delivery point requirements which will be moved + * across a dock in a distribution centre without further handling. + */ + public const PREPACKED_CROSS_DOCKING_DESPATCH_ADVICE = '463'; + + /** + * Pre-packed cross docking order (401) + * + * An order requesting the supply of products packed according to the final + * delivery point which will be moved across a dock in a distribution centre + * without further handling. + */ + public const PREPACKED_CROSS_DOCKING_ORDER = '401'; + + /** + * Preadvice of a credit (435) + * + * Preadvice indicating a credit to happen in the future. + */ + public const PREADVICE_OF_A_CREDIT = '435'; + + /** + * Preference certificate of origin (864) + * + * Document/message describing a certificate of origin meeting the + * requirements for preferential treatment. + */ + public const PREFERENCE_CERTIFICATE_OF_ORIGIN = '864'; + + /** + * Preliminary credit assessment (64) + * + * Document/message issued either by a factor to indicate his preliminary + * credit assessment on a buyer, or by a seller to request a factor's + * preliminary credit assessment on a buyer. + */ + public const PRELIMINARY_CREDIT_ASSESSMENT = '64'; + + /** + * Preliminary sales report (323) + * + * Preliminary sales report sent before all the information is available. + */ + public const PRELIMINARY_SALES_REPORT = '323'; + + /** + * Prepayment invoice (386) + * + * An invoice to pay amounts for goods and services in advance; these amounts + * will be subtracted from the final invoice. + */ + public const PREPAYMENT_INVOICE = '386'; + + /** + * Prescription (372) + * + * Instructions for the dispensing and use of medicine or remedy. + */ + public const PRESCRIPTION = '372'; + + /** + * Prescription dispensing report (374) + * + * Document containing information of products dispensed according to a + * prescription. + */ + public const PRESCRIPTION_DISPENSING_REPORT = '374'; + + /** + * Prescription request (373) + * + * Request to issue a prescription for medicine or remedy. + */ + public const PRESCRIPTION_REQUEST = '373'; + + /** + * Previous correspondence (653) + * + * Correspondence previously exchanged. + */ + public const PREVIOUS_CORRESPONDENCE = '653'; + + /** + * Previous Customs document/message (998) + * + * Indication of the previous Customs document/message concerning the same + * transaction. + */ + public const PREVIOUS_CUSTOMS_DOCUMENTMESSAGE = '998'; + + /** + * Previous transport document (499) + * + * Identification of the previous transport document. + */ + public const PREVIOUS_TRANSPORT_DOCUMENT = '499'; + + /** + * Price and delivery quote (363) + * + * Document/message confirming price and delivery conditions under which goods + * are offered. + */ + public const PRICE_AND_DELIVERY_QUOTE = '363'; + + /** + * Price and delivery quote, ship and debit (369) + * + * Document/message from a supplier to a distributor confirming price + * conditions and delivery conditions under which goods can be sold by a + * distributor to the end-customer specified on the quote with compensation + * for loss of inventory value. + */ + public const PRICE_AND_DELIVERY_QUOTE_SHIP_AND_DEBIT = '369'; + + /** + * Price and delivery quote, specified end-customer (367) + * + * Document/message confirming price conditions and delivery conditions under + * which goods are offered, provided that they are sold to the end-customer + * specified on the quote. + */ + public const PRICE_AND_DELIVERY_QUOTE_SPECIFIED_ENDCUSTOMER = '367'; + + /** + * Price negotiation result (52) + * + * A document providing the result of price negotiations. + */ + public const PRICE_NEGOTIATION_RESULT = '52'; + + /** + * Price quote (361) + * + * Document/message confirming price conditions under which goods are offered. + */ + public const PRICE_QUOTE = '361'; + + /** + * Price quote, ship and debit (368) + * + * Document/message from a supplier to a distributor confirming price + * conditions under which goods can be sold by a distributor to the + * end-customer specified on the quote with compensation for loss of inventory + * value. + */ + public const PRICE_QUOTE_SHIP_AND_DEBIT = '368'; + + /** + * Price quote, specified end-customer (366) + * + * Document/message confirming price conditions under which goods are offered, + * provided that they are sold to the end-customer specified on the quote. + */ + public const PRICE_QUOTE_SPECIFIED_ENDCUSTOMER = '366'; + + /** + * Price variation invoice (295) + * + * An invoice which requests payment for the difference in price between an + * original invoice and the result of the application of a price variation + * formula. + */ + public const PRICE_VARIATION_INVOICE = '295'; + + /** + * Price/sales catalogue (9) + * + * A document/message to enable the transmission of information regarding + * pricing and catalogue details for goods and services offered by a seller to + * a buyer. + */ + public const PRICESALES_CATALOGUE = '9'; + + /** + * Price/sales catalogue containing commercial information (728) + * + * A price/sales catalogue message containing only commercial terms or + * conditions data. + */ + public const PRICESALES_CATALOGUE_CONTAINING_COMMERCIAL_INFORMATION = '728'; + + /** + * Price/sales catalogue not containing commercial information (727) + * + * A price/sales catalogue message containing no commercial information, such + * as prices, terms or conditions. + */ + public const PRICESALES_CATALOGUE_NOT_CONTAINING_COMMERCIAL_INFORMATION = '727'; + + /** + * Price/sales catalogue response (51) + * + * A document providing a response to a previously sent price/sales catalogue. + */ + public const PRICESALES_CATALOGUE_RESPONSE = '51'; + + /** + * Priced alternate tender bill of quantity (192) + * + * A priced tender based upon an alternate specification. + */ + public const PRICED_ALTERNATE_TENDER_BILL_OF_QUANTITY = '192'; + + /** + * Priced tender BOQ (209) + * + * Document/message providing a detailed, quantity based specification, + * updated with prices to form a tender submission for a construction + * contract. BOQ means: Bill of quantity. + */ + public const PRICED_TENDER_BOQ = '209'; + + /** + * Pro-forma accounting voucher (535) + * + * To indicate that the document/message justifying an accounting entry is + * pro-forma. + */ + public const PROFORMA_ACCOUNTING_VOUCHER = '535'; + + /** + * Process data report (7) + * + * Reports on events during production process. + */ + public const PROCESS_DATA_REPORT = '7'; + + /** + * Product data message (289) + * + * A message to submit master data, a set of data that is rarely changed, to + * identify and describe products a supplier offers to their (potential) + * customer or buyer. + */ + public const PRODUCT_DATA_MESSAGE = '289'; + + /** + * Product data response (721) + * + * Document/message responding to a previously received Product Data + * document/message. + */ + public const PRODUCT_DATA_RESPONSE = '721'; + + /** + * Product performance report (5) + * + * Report specifying the performance values of products. + */ + public const PRODUCT_PERFORMANCE_REPORT = '5'; + + /** + * Product specification report (6) + * + * Report providing specification values of products. + */ + public const PRODUCT_SPECIFICATION_REPORT = '6'; + + /** + * Production facility license (649) + * + * A license granted by a competent authority to a production facility for + * manufacturing specific products. + */ + public const PRODUCTION_FACILITY_LICENSE = '649'; + + /** + * Proforma invoice (325) + * + * Document/message serving as a preliminary invoice, containing - on the + * whole - the same information as the final invoice, but not actually + * claiming payment. + */ + public const PROFORMA_INVOICE = '325'; + + /** + * Progressive discharge report (181) + * + * Document or message progressively issued by the container terminal operator + * in charge of discharging a vessel identifying containers that have been + * discharged from a specific vessel at that point in time. + */ + public const PROGRESSIVE_DISCHARGE_REPORT = '181'; + + /** + * Project master plan (253) + * + * A high level, all encompassing master plan to complete a project. + */ + public const PROJECT_MASTER_PLAN = '253'; + + /** + * Project master schedule (191) + * + * A high level, all encompassing master schedule of activities to complete a + * project. + */ + public const PROJECT_MASTER_SCHEDULE = '191'; + + /** + * Project plan (254) + * + * A plan for project work to be completed. + */ + public const PROJECT_PLAN = '254'; + + /** + * Project planning available resources (256) + * + * Available resources for project planning purposes. + */ + public const PROJECT_PLANNING_AVAILABLE_RESOURCES = '256'; + + /** + * Project planning calendar (257) + * + * Work calendar information for project planning purposes. + */ + public const PROJECT_PLANNING_CALENDAR = '257'; + + /** + * Project production plan (189) + * + * A project plan for the production of goods. + */ + public const PROJECT_PRODUCTION_PLAN = '189'; + + /** + * Project recovery plan (188) + * + * A project plan for recovery after a delay or problem resolution. + */ + public const PROJECT_RECOVERY_PLAN = '188'; + + /** + * Project schedule (255) + * + * A schedule of project activities to be completed. + */ + public const PROJECT_SCHEDULE = '255'; + + /** + * Promissory note (491) + * + * Document/message, issued and signed in conformity with the applicable + * legislation, which contains an unconditional promise whereby the maker + * undertakes to pay a definite sum of money to the payee or to his order, on + * demand or at a definite time, against the surrender of the document itself. + */ + public const PROMISSORY_NOTE = '491'; + + /** + * Proof of delivery (737) + * + * A message by which a consignee provides for a carrier proof of delivery of + * a consignment. + */ + public const PROOF_OF_DELIVERY = '737'; + + /** + * Proof of transit declaration (975) + * + * A document providing proof that a transit declaration has been accepted. + */ + public const PROOF_OF_TRANSIT_DECLARATION = '975'; + + /** + * Provisional payment valuation (203) + * + * Document/message establishing a provisional payment valuation. + */ + public const PROVISIONAL_PAYMENT_VALUATION = '203'; + + /** + * Public price certificate (646) + * + * A certification executed by the competent authority from country of + * production stating the price of the goods to the general public. + */ + public const PUBLIC_PRICE_CERTIFICATE = '646'; + + /** + * Purchase order (105) + * + * Document/message issued within an enterprise to initiate the purchase of + * articles, materials or services required for the production or manufacture + * of goods to be offered for sale or otherwise supplied to customers. + */ + public const PURCHASE_ORDER = '105'; + + /** + * Purchase order change request (230) + * + * Change to an purchase order already sent. + */ + public const PURCHASE_ORDER_CHANGE_REQUEST = '230'; + + /** + * Purchase Order Financing Request (892) + * + * Document enabling the Financing Requestor to initiate the financing process + * by the First Agent. + */ + public const PURCHASE_ORDER_FINANCING_REQUEST = '892'; + + /** + * Purchase Order Financing Request Cancellation (894) + * + * Document enabling the Financing Requestor to request the First Agent to + * cancel a previously sent purchase order financing request. + */ + public const PURCHASE_ORDER_FINANCING_REQUEST_CANCELLATION = '894'; + + /** + * Purchase Order Financing Request Status (893) + * + * Document enabling the First Agent to notify the Financing Requestor of the + * status of a purchase order financing request or the status of a purchase + * order financing cancellation request previously sent by the Financial + * Requestor itself. + */ + public const PURCHASE_ORDER_FINANCING_REQUEST_STATUS = '893'; + + /** + * Purchase order response (231) + * + * Response to an purchase order already received. + */ + public const PURCHASE_ORDER_RESPONSE = '231'; + + /** + * Purchasing specification (164) + * + * A document indicating a specification used to purchase an item. + */ + public const PURCHASING_SPECIFICATION = '164'; + + /** + * Quality data message (20) + * + * Usage of QALITY-message. + */ + public const QUALITY_DATA_MESSAGE = '20'; + + /** + * Quantity valuation (205) + * + * Document/message providing a confirmed assessment, by quantity, of the + * completed work for a construction contract. + */ + public const QUANTITY_VALUATION = '205'; + + /** + * Quantity valuation request (206) + * + * Document/message providing an initial assessment, by quantity, of the + * completed work for a construction contract. + */ + public const QUANTITY_VALUATION_REQUEST = '206'; + + /** + * Query (21) + * + * Request information based on defined criteria. + */ + public const QUERY = '21'; + + /** + * Questionnaire (779) + * + * Document consisting of a series of questions. + */ + public const QUESTIONNAIRE = '779'; + + /** + * Quota prior allocation certificate (966) + * + * Document/message issued by the competent body for prior allocation of a + * quota. + */ + public const QUOTA_PRIOR_ALLOCATION_CERTIFICATE = '966'; + + /** + * Rail consignment note (generic term) (720) + * + * Transport document constituting a contract for the carriage of goods + * between the sender and the carrier (the railway). For international rail + * traffic, this document must conform to the model prescribed by the + * international conventions concerning carriage of goods by rail, e.g. CIM + * Convention, SMGS Convention. + */ + public const RAIL_CONSIGNMENT_NOTE_GENERIC_TERM = '720'; + + /** + * Rail consignment note forwarder copy (972) + * + * Document which is a copy of the rail consignment note printed especially + * for the need of the forwarder. + */ + public const RAIL_CONSIGNMENT_NOTE_FORWARDER_COPY = '972'; + + /** + * Re-Entry Permit (529) + * + * A permit to re-enter a country. + */ + public const REENTRY_PERMIT = '529'; + + /** + * Re-sending consignment note (824) + * + * Rail consignment note prepared by the consignor for the facilitation of an + * eventual return to the origin of the goods. + */ + public const RESENDING_CONSIGNMENT_NOTE = '824'; + + /** + * Ready for despatch advice (345) + * + * Document/message issued by a supplier informing a buyer that goods ordered + * are ready for despatch. + */ + public const READY_FOR_DESPATCH_ADVICE = '345'; + + /** + * Ready for transshipment despatch advice (462) + * + * Document to advise that the goods ordered are ready for transshipment. + */ + public const READY_FOR_TRANSSHIPMENT_DESPATCH_ADVICE = '462'; + + /** + * Reassignment (69) + * + * Document/message issued by a factor to a seller or to another factor to + * reassign an invoice or credit note previously assigned to him. + */ + public const REASSIGNMENT = '69'; + + /** + * Receipt (Customs) (917) + * + * Receipt for Customs duty/tax/fee paid. + */ + public const RECEIPT_CUSTOMS = '917'; + + /** + * Recharging document (724) + * + * Fictitious transport document regarding a previous transport, enabling a + * carrier's agent to give to another carrier's agent (in a different country) + * the possibility to collect charges relating to the original transport (rail + * environment). + */ + public const RECHARGING_DOCUMENT = '724'; + + /** + * Reefer connection order (489) + * + * Order to connect a reefer container to a reefer point. + */ + public const REEFER_CONNECTION_ORDER = '489'; + + /** + * Refugee Permit (531) + * + * Document identifying a refugee recognized by a country. + */ + public const REFUGEE_PERMIT = '531'; + + /** + * Refusal of claim (828) + * + * Document stating the refusal of a claim. + */ + public const REFUSAL_OF_CLAIM = '828'; + + /** + * Regional appellation certificate (863) + * + * Certificate drawn up in accordance with the rules laid down by an authority + * or approved body, certifying that the goods described therein qualify for a + * designation specific to the given region (e.g. champagne, port wine, + * Parmesan cheese). + */ + public const REGIONAL_APPELLATION_CERTIFICATE = '863'; + + /** + * Registration change (300) + * + * Code specifying the modification of previously submitted registration + * information. + */ + public const REGISTRATION_CHANGE = '300'; + + /** + * Registration document (101) + * + * An official document providing registration details. + */ + public const REGISTRATION_DOCUMENT = '101'; + + /** + * Registration renewal (299) + * + * Code specifying the continued validity of previously submitted registration + * information. + */ + public const REGISTRATION_RENEWAL = '299'; + + /** + * Rejected direct debit(s) (239) + * + * The message contains rejected direct debit(s). + */ + public const REJECTED_DIRECT_DEBITS = '239'; + + /** + * Related document (916) + * + * Document that has a relationship with the stated document/message. + */ + public const RELATED_DOCUMENT = '916'; + + /** + * Remittance advice (481) + * + * Document/message advising of the remittance of payment. + */ + public const REMITTANCE_ADVICE = '481'; + + /** + * Repair order (225) + * + * Document/message to order repair of goods. + */ + public const REPAIR_ORDER = '225'; + + /** + * Report of transactions for information only (342) + * + * A message reporting transactions for information only. + */ + public const REPORT_OF_TRANSACTIONS_FOR_INFORMATION_ONLY = '342'; + + /** + * Report of transactions which need further information from the receiver (339) + * + * A message reporting transactions which need further information from the + * receiver. + */ + public const REPORT_OF_TRANSACTIONS_WHICH_NEED_FURTHER_INFORMATION_FROM_THE_RECEIVER = '339'; + + /** + * Request for an amendment of a documentary credit (196) + * + * Request for an amendment of a documentary credit. + */ + public const REQUEST_FOR_AN_AMENDMENT_OF_A_DOCUMENTARY_CREDIT = '196'; + + /** + * Request for contract price and delivery quote (445) + * + * Document/message requesting contractual price conditions and contractual + * delivery conditions under which goods are offered. + */ + public const REQUEST_FOR_CONTRACT_PRICE_AND_DELIVERY_QUOTE = '445'; + + /** + * Request for contract price quote (444) + * + * Document/message requesting contractual price conditions under which goods + * are offered. + */ + public const REQUEST_FOR_CONTRACT_PRICE_QUOTE = '444'; + + /** + * Request for delivery instructions (330) + * + * Document/message issued by a supplier requesting instructions from the + * buyer regarding the details of the delivery of goods ordered. + */ + public const REQUEST_FOR_DELIVERY_INSTRUCTIONS = '330'; + + /** + * Request for delivery quote (442) + * + * Document/message requesting delivery conditions under which goods are + * offered. + */ + public const REQUEST_FOR_DELIVERY_QUOTE = '442'; + + /** + * Request for financial cancellation (213) + * + * The message is a request for financial cancellation. + */ + public const REQUEST_FOR_FINANCIAL_CANCELLATION = '213'; + + /** + * Request for metering point information (379) + * + * Message to request information about a metering point. + */ + public const REQUEST_FOR_METERING_POINT_INFORMATION = '379'; + + /** + * Request for payment (71) + * + * Document/message issued by a creditor to a debtor to request payment of one + * or more invoices past due. + */ + public const REQUEST_FOR_PAYMENT = '71'; + + /** + * Request for price and delivery quote (443) + * + * Document/message requesting price and delivery conditions under which goods + * are offered. + */ + public const REQUEST_FOR_PRICE_AND_DELIVERY_QUOTE = '443'; + + /** + * Request for price and delivery quote, ship and debit (439) + * + * Document/message from a distributor to a supplier requesting price + * conditions and delivery conditions under which goods can be sold by the + * distributor to the end-customer specified on the request for quote with + * compensation for loss of inventory value. + */ + public const REQUEST_FOR_PRICE_AND_DELIVERY_QUOTE_SHIP_AND_DEBIT = '439'; + + /** + * Request for price and delivery quote, specified end-user (437) + * + * Document/message requesting price conditions and delivery conditions under + * which goods are offered, provided that they are sold to the end-customer + * specified on the request for quote. + */ + public const REQUEST_FOR_PRICE_AND_DELIVERY_QUOTE_SPECIFIED_ENDUSER = '437'; + + /** + * Request for price quote (360) + * + * Document/message requesting price conditions under which goods are offered. + */ + public const REQUEST_FOR_PRICE_QUOTE = '360'; + + /** + * Request for price quote, ship and debit (438) + * + * Document/message from a distributor to a supplier requesting price + * conditions under which goods can be sold by the distributor to the + * end-customer specified on the request for quote with compensation for loss + * of inventory value. + */ + public const REQUEST_FOR_PRICE_QUOTE_SHIP_AND_DEBIT = '438'; + + /** + * Request for price quote, specified end-customer (446) + * + * Document/message requesting price conditions under which goods are offered, + * provided that they are sold to the end-customer specified on the request + * for quote. + */ + public const REQUEST_FOR_PRICE_QUOTE_SPECIFIED_ENDCUSTOMER = '446'; + + /** + * Request for provision of a health service (359) + * + * Document containing request for provision of a health service. + */ + public const REQUEST_FOR_PROVISION_OF_A_HEALTH_SERVICE = '359'; + + /** + * Request for quote (311) + * + * Document/message requesting a quote on specified goods or services. + */ + public const REQUEST_FOR_QUOTE = '311'; + + /** + * Request for statistical data (75) + * + * Request for one or more items or data sets of statistical data. + */ + public const REQUEST_FOR_STATISTICAL_DATA = '75'; + + /** + * Request for transfer (303) + * + * Document/message is a request for transfer. + */ + public const REQUEST_FOR_TRANSFER = '303'; + + /** + * Requirements contract (154) + * + * A document indicating a requirements contract that authorizes the filling + * of all purchase requirements during a specified contract period. + */ + public const REQUIREMENTS_CONTRACT = '154'; + + /** + * Resale information (656) + * + * Document/message providing information on a resale. + */ + public const RESALE_INFORMATION = '656'; + + /** + * Residence permit (717) + * + * A document authorizing residence. + */ + public const RESIDENCE_PERMIT = '717'; + + /** + * Response to a trade statistics message (37) + * + * Document/message in which the competent national authorities provide a + * declarant with an acceptance or a rejection about a received declaration + * for European statistical purposes. + */ + public const RESPONSE_TO_A_TRADE_STATISTICS_MESSAGE = '37'; + + /** + * Response to an amendment of a documentary credit (199) + * + * Response to an amendment of a documentary credit. + */ + public const RESPONSE_TO_AN_AMENDMENT_OF_A_DOCUMENTARY_CREDIT = '199'; + + /** + * Response to previous banking status message (252) + * + * A response to a previously sent banking status message. + */ + public const RESPONSE_TO_PREVIOUS_BANKING_STATUS_MESSAGE = '252'; + + /** + * Response to query (22) + * + * Document/message returned as an answer to a question. + */ + public const RESPONSE_TO_QUERY = '22'; + + /** + * Response to registration (301) + * + * Code specifying a response to an occurrence of a registration message. + */ + public const RESPONSE_TO_REGISTRATION = '301'; + + /** + * Restow (24) + * + * Message/document identifying containers that have been unloaded and then + * reloaded onto the same means of transport. + */ + public const RESTOW = '24'; + + /** + * Returns advice (729) + * + * Document/message by means of which the buyer informs the seller about the + * despatch of returned goods. + */ + public const RETURNS_ADVICE = '729'; + + /** + * Reversal of credit (458) + * + * Reversal of credit accounting entry by bank. + */ + public const REVERSAL_OF_CREDIT = '458'; + + /** + * Reversal of debit (457) + * + * Reversal of debit accounting entry by bank. + */ + public const REVERSAL_OF_DEBIT = '457'; + + /** + * Risk analysis (872) + * + * Document specifying the analysis of risks. + */ + public const RISK_ANALYSIS = '872'; + + /** + * Road consignment note (730) + * + * Transport document/message which evidences a contract between a carrier and + * a sender for the carriage of goods by road (generic term). Remark: For + * international road traffic, this document must contain at least the + * particulars prescribed by the convention on the contract for the + * international carriage of goods by road (CMR). + */ + public const ROAD_CONSIGNMENT_NOTE = '730'; + + /** + * Road list-SMGS (722) + * + * Accounting document, one copy of which is drawn up for each consignment + * note; it accompanies the consignment over the whole route and is a rail + * transport document. + */ + public const ROAD_LISTSMGS = '722'; + + /** + * Rush order (224) + * + * Document/message for urgent ordering. + */ + public const RUSH_ORDER = '224'; + + /** + * Safety and hazard data sheet (53) + * + * Document or message to supply advice on a dangerous or hazardous material + * to industrial customers so as to enable them to take measures to protect + * their employees and the environment from any potential harmful effects from + * these material. + */ + public const SAFETY_AND_HAZARD_DATA_SHEET = '53'; + + /** + * Safety of equipment certificate (793) + * + * Document certifying the safety of a ship's equipment to a specified date. + */ + public const SAFETY_OF_EQUIPMENT_CERTIFICATE = '793'; + + /** + * Safety of radio certificate (792) + * + * Document certifying the safety of a ship's radio facilities to a specified + * date. + */ + public const SAFETY_OF_RADIO_CERTIFICATE = '792'; + + /** + * Safety of ship certificate (791) + * + * Document certifying a ship's safety to a specified date. + */ + public const SAFETY_OF_SHIP_CERTIFICATE = '791'; + + /** + * Sales data report (735) + * + * A message enabling companies to exchange or report electronically, basic + * sales data related to products or services, including the corresponding + * location, time period, product identification, pricing and quantity + * information. It enables the recipient to p. + */ + public const SALES_DATA_REPORT = '735'; + + /** + * Sales forecast report (734) + * + * A message enabling companies to exchange or report electronically, basic + * sales forecast data related to products or services, including the + * corresponding location, time period, product identification, pricing and + * quantity information. It enables the recip. + */ + public const SALES_FORECAST_REPORT = '734'; + + /** + * Sample order (228) + * + * Document/message to order samples. + */ + public const SAMPLE_ORDER = '228'; + + /** + * Sanitary certificate (852) + * + * Document/message issued by the competent authority in the exporting country + * evidencing that alimentary and animal products, including dead animals, are + * fit for human consumption, and giving details, when relevant, of controls + * undertaken. + */ + public const SANITARY_CERTIFICATE = '852'; + + /** + * Sea waybill (710) + * + * Non-negotiable document which evidences a contract for the carriage of + * goods by sea and the taking over of the goods by the carrier, and by which + * the carrier undertakes to deliver the goods to the consignee named in the + * document. + */ + public const SEA_WAYBILL = '710'; + + /** + * Seaman’s book (718) + * + * A national identity document issued to professional seamen that contains a + * record of their rank and service career. + */ + public const SEAMANS_BOOK = '718'; + + /** + * Season ticket (43) + * + * A document giving access to a service for a determined period of time. + */ + public const SEASON_TICKET = '43'; + + /** + * Segment change request (279) + * + * Requesting a change to an existing segment. + */ + public const SEGMENT_CHANGE_REQUEST = '279'; + + /** + * Segment request (278) + * + * Request a new segment. + */ + public const SEGMENT_REQUEST = '278'; + + /** + * Self billed credit note (261) + * + * A document which indicates that the customer is claiming credit in a self + * billing environment. + */ + public const SELF_BILLED_CREDIT_NOTE = '261'; + + /** + * Self billed debit note (527) + * + * A document which indicates that the customer is claiming debit in a self + * billing environment. + */ + public const SELF_BILLED_DEBIT_NOTE = '527'; + + /** + * Self-billed invoice (389) + * + * An invoice the invoicee is producing instead of the seller. + */ + public const SELFBILLED_INVOICE = '389'; + + /** + * Sequenced delivery schedule (307) + * + * Message to describe a sequence of product delivery. + */ + public const SEQUENCED_DELIVERY_SCHEDULE = '307'; + + /** + * Service directory definition (286) + * + * Document/message defining the contents of a service directory set or parts + * thereof. + */ + public const SERVICE_DIRECTORY_DEFINITION = '286'; + + /** + * Settlement of a letter of credit (246) + * + * Settlement of a letter of credit. + */ + public const SETTLEMENT_OF_A_LETTER_OF_CREDIT = '246'; + + /** + * Ship Security Plan (552) + * + * Ship Security Plan (SSP) is a document prepared in terms of the ISPS Code + * to contribute to the prevention of illegal acts against the ship and its + * crew. + */ + public const SHIP_SECURITY_PLAN = '552'; + + /** + * Ship's stores declaration (799) + * + * Declaration to Customs regarding the contents of the ship's stores + * (equivalent to IMO FAL 3) i.e. goods intended for consumption by + * passengers/crew on board vessels, aircraft or trains, whether or not sold + * or landed; goods necessary for operation/maintenance of conveyance, + * including fuel/lubricants, excluding spare parts/equipment (IMO). + */ + public const SHIPS_STORES_DECLARATION = '799'; + + /** + * Shipper's letter of instructions (air) (341) + * + * Document/message issued by a consignor in which he gives details of a + * consignment of goods that enables an airline or its agent to prepare an air + * waybill. + */ + public const SHIPPERS_LETTER_OF_INSTRUCTIONS_AIR = '341'; + + /** + * Shipping instructions (340) + * + * (1121) Document/message advising details of cargo and exporter's + * requirements for its physical movement. + */ + public const SHIPPING_INSTRUCTIONS = '340'; + + /** + * Shipping note (630) + * + * (1123) Document/message provided by the shipper or his agent to the + * carrier, multimodal transport operator, terminal or other receiving + * authority, giving information about export consignments offered for + * transport, and providing for the necessary receipts and declarations of + * liability. Sometimes a multipurpose cargo handling document also fulfilling + * the functions of document 632, 633, 650 and 655. + */ + public const SHIPPING_NOTE = '630'; + + /** + * Simple data element change request (275) + * + * Request a change to an existing simple data element. + */ + public const SIMPLE_DATA_ELEMENT_CHANGE_REQUEST = '275'; + + /** + * Simple data element request (274) + * + * Requesting a new simple data element. + */ + public const SIMPLE_DATA_ELEMENT_REQUEST = '274'; + + /** + * Single administrative document (960) + * + * A set of documents, replacing the various (national) forms for Customs + * declaration within the EC, implemented on 01-01-1988. + */ + public const SINGLE_ADMINISTRATIVE_DOCUMENT = '960'; + + /** + * Soil analysis (416) + * + * Soil analysis document. + */ + public const SOIL_ANALYSIS = '416'; + + /** + * Spare parts order (233) + * + * Document/message to order spare parts. + */ + public const SPARE_PARTS_ORDER = '233'; + + /** + * Special requirements permit related to the transport of cargo (521) + * + * A permit related to a transport document granting the transport of cargo + * under the conditions as specifically required. + */ + public const SPECIAL_REQUIREMENTS_PERMIT_RELATED_TO_THE_TRANSPORT_OF_CARGO = '521'; + + /** + * Specific contract conditions (777) + * + * Document specifying the individual conditions or clauses applying to a + * specific contract. + */ + public const SPECIFIC_CONTRACT_CONDITIONS = '777'; + + /** + * Spot order (222) + * + * Document/message ordering the remainder of a production's batch. + */ + public const SPOT_ORDER = '222'; + + /** + * Standing inquiry on complete product information (736) + * + * A product inquiry which stands until it is cancelled. It requests not only + * the updates since last time, but always the complete product information of + * a data supplier. This means that within the standing request every time a + * complete download of the respe. + */ + public const STANDING_INQUIRY_ON_COMPLETE_PRODUCT_INFORMATION = '736'; + + /** + * Standing inquiry on product information (376) + * + * A product inquiry which stands until it is cancelled. + */ + public const STANDING_INQUIRY_ON_PRODUCT_INFORMATION = '376'; + + /** + * Standing order (258) + * + * An order to supply fixed quantities of products at fixed regular intervals. + */ + public const STANDING_ORDER = '258'; + + /** + * Statement of account message (493) + * + * Usage of STATAC-message. + */ + public const STATEMENT_OF_ACCOUNT_MESSAGE = '493'; + + /** + * Statistical and other administrative internal documents (190) + * + * Documents/messages issued within an enterprise for the for the purpose of + * collection of production and other internal statistics, and for other + * administration purposes. + */ + public const STATISTICAL_AND_OTHER_ADMINISTRATIVE_INTERNAL_DOCUMENTS = '190'; + + /** + * Statistical data (74) + * + * Transmission of one or more items of data or data sets. + */ + public const STATISTICAL_DATA = '74'; + + /** + * Statistical definitions (73) + * + * Transmission of one or more statistical definitions. + */ + public const STATISTICAL_DEFINITIONS = '73'; + + /** + * Statistical document, export (895) + * + * Document/message in which an exporter provides information about exported + * goods required by the body responsible for the collection of international + * trade statistics. + */ + public const STATISTICAL_DOCUMENT_EXPORT = '895'; + + /** + * Statistical document, import (995) + * + * Document/message describing an import document that is used for statistical + * purposes. + */ + public const STATISTICAL_DOCUMENT_IMPORT = '995'; + + /** + * Status information (23) + * + * Information regarding the status of a related message. + */ + public const STATUS_INFORMATION = '23'; + + /** + * Status report (287) + * + * Message covers information about the status. + */ + public const STATUS_REPORT = '287'; + + /** + * Storage capacity offer (554) + * + * Offering of capacity to store goods. + */ + public const STORAGE_CAPACITY_OFFER = '554'; + + /** + * Storage capacity request (576) + * + * Request for capacity to store goods. + */ + public const STORAGE_CAPACITY_REQUEST = '576'; + + /** + * Stores requisition (120) + * + * Document/message issued within an enterprise ordering the taking out of + * stock of goods. + */ + public const STORES_REQUISITION = '120'; + + /** + * Subcontractor plan (157) + * + * A document indicating a plan that identifies the manufacturer's + * subcontracting strategy for a specific contract. + */ + public const SUBCONTRACTOR_PLAN = '157'; + + /** + * Substitute air waybill (743) + * + * A temporary air waybill which contains only limited information because of + * the absence of the original. + */ + public const SUBSTITUTE_AIR_WAYBILL = '743'; + + /** + * Summary sales report (346) + * + * Sales report containing summaries for several earlier sent sales reports. + */ + public const SUMMARY_SALES_REPORT = '346'; + + /** + * Summons (849) + * + * Document specifying a summons to court. + */ + public const SUMMONS = '849'; + + /** + * Supplementary document for application for cargo operation of dangerous + * goods (319) + * + * Supplementary document to apply for cargo operation of dangerous goods. + */ + public const SUPPLEMENTARY_DOCUMENT_FOR_APPLICATION_FOR_CARGO_OPERATION_OF_DANGEROUS_GOODS = '319'; + + /** + * Supplementary document for application for transport of dangerous goods (321) + * + * Supplementary document to apply for transport of dangerous goods. + */ + public const SUPPLEMENTARY_DOCUMENT_FOR_APPLICATION_FOR_TRANSPORT_OF_DANGEROUS_GOODS = '321'; + + /** + * Sustainability data request (900) + * + * Document/message requesting information based on defined criteria regarding + * sustainability. + */ + public const SUSTAINABILITY_DATA_REQUEST = '900'; + + /** + * Sustainability data response (902) + * + * Document/Message returned as an answer to a question regarding + * sustainability. + */ + public const SUSTAINABILITY_DATA_RESPONSE = '902'; + + /** + * Sustainability Inspection request (903) + * + * Document/message requesting a sustainability inspection. + */ + public const SUSTAINABILITY_INSPECTION_REQUEST = '903'; + + /** + * Sustainability Inspection response (904) + * + * Document/message reporting the results of a sustainability inspection. + */ + public const SUSTAINABILITY_INSPECTION_RESPONSE = '904'; + + /** + * Swap order (229) + * + * Document/message informing buyer or seller of the replacement of goods + * previously ordered. + */ + public const SWAP_ORDER = '229'; + + /** + * Tanker bill of lading (709) + * + * Document which evidences a transport of liquid bulk cargo. + */ + public const TANKER_BILL_OF_LADING = '709'; + + /** + * Task order (155) + * + * A document indicating an order that tasks a contractor to perform a + * specified function. + */ + public const TASK_ORDER = '155'; + + /** + * Tax calculation/confirmation response (Customs) (965) + * + * Tax calculation/confirmation response message to permit the transfer of + * data from Customs to the transmitter of the previous message. + */ + public const TAX_CALCULATIONCONFIRMATION_RESPONSE_CUSTOMS = '965'; + + /** + * Tax declaration (general) (938) + * + * Document/message containing a general tax declaration. + */ + public const TAX_DECLARATION_GENERAL = '938'; + + /** + * Tax declaration (value added tax) (937) + * + * Document/message in which an importer states the pertinent information + * required by the competent body for assessment of value-added tax. + */ + public const TAX_DECLARATION_VALUE_ADDED_TAX = '937'; + + /** + * Tax demand (940) + * + * Document/message containing the demand of tax. + */ + public const TAX_DEMAND = '940'; + + /** + * Tax invoice (388) + * + * An invoice for tax purposes. + */ + public const TAX_INVOICE = '388'; + + /** + * Tax notification (102) + * + * Used to specify that the message is a tax notification. + */ + public const TAX_NOTIFICATION = '102'; + + /** + * Tender (758) + * + * A document/message used by a supplier to bid in a procurement procedure. + */ + public const TENDER = '758'; + + /** + * Tendering price/sales catalogue (762) + * + * A document/message providing information regarding pricing and catalogue + * details for goods and/or services to be offered as part of a tender. + */ + public const TENDERING_PRICESALES_CATALOGUE = '762'; + + /** + * Tendering price/sales catalogue request (757) + * + * A document/message requesting information regarding pricing and catalogue + * details for goods and/or services to be offered as part of a tender. + */ + public const TENDERING_PRICESALES_CATALOGUE_REQUEST = '757'; + + /** + * Test report (4) + * + * Report providing the results of a test session. + */ + public const TEST_REPORT = '4'; + + /** + * Thermographic reading report (641) + * + * A report of temperature readings over a period. + */ + public const THERMOGRAPHIC_READING_REPORT = '641'; + + /** + * Third party payment report (837) + * + * Report about payments done towards a third party. + */ + public const THIRD_PARTY_PAYMENT_REPORT = '837'; + + /** + * Through bill of lading (761) + * + * Bill of lading which evidences a contract of carriage from one place to + * another in separate stages of which at least one stage is a sea transit, + * and by which the issuing carrier accepts responsibility for the carriage as + * set forth in the through bill of lading. + */ + public const THROUGH_BILL_OF_LADING = '761'; + + /** + * TIF form (951) + * + * International Customs transit document by which the sender declares goods + * for carriage by rail in accordance with the provisions of the 1952 + * International Convention to facilitate the crossing of frontiers for goods + * carried by rail (TIF Convention of UIC). + */ + public const TIF_FORM = '951'; + + /** + * TIR carnet (952) + * + * International Customs document (International Transit by Road), issued by a + * guaranteeing association approved by the Customs authorities, under the + * cover of which goods are carried, in most cases under Customs seal, in road + * vehicles and/or containers in compliance with the requirements of the + * Customs TIR Convention of the International Transport of Goods under cover + * of TIR Carnets (UN/ECE). + */ + public const TIR_CARNET = '952'; + + /** + * Traceability event declaration (899) + * + * Document/message declaring a traceability event. + */ + public const TRACEABILITY_EVENT_DECLARATION = '899'; + + /** + * Tracking number assignment report (283) + * + * Report of assigned tracking numbers. + */ + public const TRACKING_NUMBER_ASSIGNMENT_REPORT = '283'; + + /** + * Trade data (332) + * + * Document/message is for trade data. + */ + public const TRADE_DATA = '332'; + + /** + * Transfrontier waste shipment authorization (978) + * + * Document containing the authorization from the relevant authority for the + * international carriage of waste. Syn: Transfrontier waste shipment permit. + */ + public const TRANSFRONTIER_WASTE_SHIPMENT_AUTHORIZATION = '978'; + + /** + * Transfrontier waste shipment movement document (979) + * + * Document certified by the carriers and the consignee to be used for the + * international carriage of waste. + */ + public const TRANSFRONTIER_WASTE_SHIPMENT_MOVEMENT_DOCUMENT = '979'; + + /** + * Transit certificate of approval (897) + * + * Certificate of approval for the transport of goods under customs seal + */ + public const TRANSIT_CERTIFICATE_OF_APPROVAL = '897'; + + /** + * Transit Conveyor Document (971) + * + * Document for a course of transit used for a carrier who is neither the + * carrier at the beginning nor the arrival. The transit carrier can directly + * invoice the expenses for its part of the transport. + */ + public const TRANSIT_CONVEYOR_DOCUMENT = '971'; + + /** + * Transit license (628) + * + * Document/message issued by the competent body in accordance with transit + * regulations in force, by which authorization is granted to a party to move + * articles under customs procedure. + */ + public const TRANSIT_LICENSE = '628'; + + /** + * Transport capacity offer (551) + * + * Offering of capacity for the transport of goods for a date and a route. + */ + public const TRANSPORT_CAPACITY_OFFER = '551'; + + /** + * Transport capacity request (577) + * + * Request for capacity for the transport of goods for a date and a route. + */ + public const TRANSPORT_CAPACITY_REQUEST = '577'; + + /** + * Transport cargo release order (129) + * + * Order to release cargo or items of transport equipment to a specified + * party. + */ + public const TRANSPORT_CARGO_RELEASE_ORDER = '129'; + + /** + * Transport departure report (124) + * + * Report of the departure of a means of transport from a particular facility. + */ + public const TRANSPORT_DEPARTURE_REPORT = '124'; + + /** + * Transport discharge instruction (118) + * + * Instruction to unload specified cargo, containers or transport equipment + * from a means of transport. + */ + public const TRANSPORT_DISCHARGE_INSTRUCTION = '118'; + + /** + * Transport discharge report (119) + * + * Report on cargo, containers or transport equipment unloaded from a + * particular means of transport. + */ + public const TRANSPORT_DISCHARGE_REPORT = '119'; + + /** + * Transport emergency card (324) + * + * Official document specifying, for a given dangerous goods item, information + * such as nature of hazard, protective devices, actions to be taken in case + * of accident, spillage or fire and first aid to be given. + */ + public const TRANSPORT_EMERGENCY_CARD = '324'; + + /** + * Transport empty equipment advice (125) + * + * Advice that an item or items of empty transport equipment are available for + * return. + */ + public const TRANSPORT_EMPTY_EQUIPMENT_ADVICE = '125'; + + /** + * Transport equipment acceptance order (126) + * + * Order to accept items of transport equipment which are to be delivered by + * an inland carrier (rail, road or barge) to a specified facility. + */ + public const TRANSPORT_EQUIPMENT_ACCEPTANCE_ORDER = '126'; + + /** + * Transport equipment damage report (106) + * + * Report of damaged items of transport equipment that have been returned. + */ + public const TRANSPORT_EQUIPMENT_DAMAGE_REPORT = '106'; + + /** + * Transport equipment delivery notice (405) + * + * Notification regarding the delivery of transport equipment. + */ + public const TRANSPORT_EQUIPMENT_DELIVERY_NOTICE = '405'; + + /** + * Transport equipment direct interchange report (103) + * + * Report on the movement of containers or other items of transport equipment + * being exchanged, establishing relevant rental periods. + */ + public const TRANSPORT_EQUIPMENT_DIRECT_INTERCHANGE_REPORT = '103'; + + /** + * Transport equipment empty release instruction (108) + * + * Instruction to release an item of empty transport equipment to a specified + * party or parties. + */ + public const TRANSPORT_EQUIPMENT_EMPTY_RELEASE_INSTRUCTION = '108'; + + /** + * Transport equipment gross mass verification message (749) + * + * Message containing information regarding gross mass verification of + * transport equipment. + */ + public const TRANSPORT_EQUIPMENT_GROSS_MASS_VERIFICATION_MESSAGE = '749'; + + /** + * Transport equipment impending arrival advice (104) + * + * Advice that containers or other items of transport equipment may be + * expected to be delivered to a certain location. + */ + public const TRANSPORT_EQUIPMENT_IMPENDING_ARRIVAL_ADVICE = '104'; + + /** + * Transport equipment maintenance and repair notice (143) + * + * Report of transport equipment which has been repaired or has had + * maintenance performed. + */ + public const TRANSPORT_EQUIPMENT_MAINTENANCE_AND_REPAIR_NOTICE = '143'; + + /** + * Transport equipment maintenance and repair work authorisation (123) + * + * Authorisation to have transport equipment repaired or to have maintenance + * performed. + */ + public const TRANSPORT_EQUIPMENT_MAINTENANCE_AND_REPAIR_WORK_AUTHORISATION = '123'; + + /** + * Transport equipment maintenance and repair work estimate advice (107) + * + * Advice providing estimates of transport equipment maintenance and repair + * costs. + */ + public const TRANSPORT_EQUIPMENT_MAINTENANCE_AND_REPAIR_WORK_ESTIMATE_ADVICE = '107'; + + /** + * Transport equipment maintenance and repair work estimate order (142) + * + * Order to draw up an estimate of the costs of maintenance or repair of + * transport equipment. + */ + public const TRANSPORT_EQUIPMENT_MAINTENANCE_AND_REPAIR_WORK_ESTIMATE_ORDER = '142'; + + /** + * Transport equipment movement instruction (264) + * + * Instruction to perform one or more different movements of transport + * equipment. + */ + public const TRANSPORT_EQUIPMENT_MOVEMENT_INSTRUCTION = '264'; + + /** + * Transport equipment movement report (265) + * + * Report on one or more different movements of transport equipment. + */ + public const TRANSPORT_EQUIPMENT_MOVEMENT_REPORT = '265'; + + /** + * Transport equipment movement report, partial (873) + * + * A partial transport equipment movement report, containing only a selected + * part of the movements of transport equipment for a vessel in a port. + */ + public const TRANSPORT_EQUIPMENT_MOVEMENT_REPORT_PARTIAL = '873'; + + /** + * Transport equipment off-hire report (58) + * + * Report on the movement of containers or other items of transport equipment + * to record physical movement activity and establish the end of a rental + * period. + */ + public const TRANSPORT_EQUIPMENT_OFFHIRE_REPORT = '58'; + + /** + * Transport equipment off-hire request (136) + * + * Request to terminate the lease on an item of transport equipment at a + * specified time. + */ + public const TRANSPORT_EQUIPMENT_OFFHIRE_REQUEST = '136'; + + /** + * Transport equipment on-hire order (135) + * + * Order to release empty items of transport equipment for on-hire to a + * lessee, and authorising collection by or on behalf of a specified party. + */ + public const TRANSPORT_EQUIPMENT_ONHIRE_ORDER = '135'; + + /** + * Transport equipment on-hire report (57) + * + * Report on the movement of containers or other items of transport equipment + * to record physical movement activity and establish the beginning of a + * rental period. + */ + public const TRANSPORT_EQUIPMENT_ONHIRE_REPORT = '57'; + + /** + * Transport equipment on-hire request (134) + * + * Request for transport equipment to be made available for hire. + */ + public const TRANSPORT_EQUIPMENT_ONHIRE_REQUEST = '134'; + + /** + * Transport equipment packing instruction (131) + * + * Instruction to pack cargo into a container or other item of transport + * equipment. + */ + public const TRANSPORT_EQUIPMENT_PACKING_INSTRUCTION = '131'; + + /** + * Transport equipment pick-up availability confirmation (115) + * + * Confirmation that an item of transport equipment is available for + * collection. + */ + public const TRANSPORT_EQUIPMENT_PICKUP_AVAILABILITY_CONFIRMATION = '115'; + + /** + * Transport equipment pick-up availability request (114) + * + * Request for confirmation that an item of transport equipment will be + * available for collection. + */ + public const TRANSPORT_EQUIPMENT_PICKUP_AVAILABILITY_REQUEST = '114'; + + /** + * Transport equipment pick-up report (116) + * + * Report that an item of transport equipment has been collected. + */ + public const TRANSPORT_EQUIPMENT_PICKUP_REPORT = '116'; + + /** + * Transport equipment profile report (436) + * + * Report on the profile of transport equipment. + */ + public const TRANSPORT_EQUIPMENT_PROFILE_REPORT = '436'; + + /** + * Transport equipment shift report (117) + * + * Report on the movement of containers or other items of transport within a + * facility. + */ + public const TRANSPORT_EQUIPMENT_SHIFT_REPORT = '117'; + + /** + * Transport equipment special service instruction (127) + * + * Instruction to perform a specified service or services on an item or items + * of transport equipment. + */ + public const TRANSPORT_EQUIPMENT_SPECIAL_SERVICE_INSTRUCTION = '127'; + + /** + * Transport equipment status change report (266) + * + * Report on one or more changes of status associated with an item or items of + * transport equipment. + */ + public const TRANSPORT_EQUIPMENT_STATUS_CHANGE_REPORT = '266'; + + /** + * Transport equipment stock report (128) + * + * Report on the number of items of transport equipment stored at one or more + * locations. + */ + public const TRANSPORT_EQUIPMENT_STOCK_REPORT = '128'; + + /** + * Transport equipment survey order (137) + * + * Order to perform a survey on specified items of transport equipment. + */ + public const TRANSPORT_EQUIPMENT_SURVEY_ORDER = '137'; + + /** + * Transport equipment survey order response (138) + * + * Response to an order to conduct a survey of transport equipment. + */ + public const TRANSPORT_EQUIPMENT_SURVEY_ORDER_RESPONSE = '138'; + + /** + * Transport equipment survey report (139) + * + * Survey report of specified items of transport equipment. + */ + public const TRANSPORT_EQUIPMENT_SURVEY_REPORT = '139'; + + /** + * Transport equipment unpacking instruction (112) + * + * Instruction to unpack specified cargo from specified containers or other + * items of transport equipment. + */ + public const TRANSPORT_EQUIPMENT_UNPACKING_INSTRUCTION = '112'; + + /** + * Transport equipment unpacking report (113) + * + * Report on the completion of unpacking specified containers or other items + * of transport equipment. + */ + public const TRANSPORT_EQUIPMENT_UNPACKING_REPORT = '113'; + + /** + * Transport loading instruction (121) + * + * Instruction to load cargo, containers or transport equipment onto a means + * of transport. + */ + public const TRANSPORT_LOADING_INSTRUCTION = '121'; + + /** + * Transport loading report (122) + * + * Report on completion of loading cargo, containers or other transport + * equipment onto a means of transport. + */ + public const TRANSPORT_LOADING_REPORT = '122'; + + /** + * Transport Means Security Report (588) + * + * A document reporting the security status and related information of a means + * of transport. + */ + public const TRANSPORT_MEANS_SECURITY_REPORT = '588'; + + /** + * Transport movement gate in report (109) + * + * Report on the inward movement of cargo, containers or other items of + * transport equipment which have been delivered to a facility by an inland + * carrier. + */ + public const TRANSPORT_MOVEMENT_GATE_IN_REPORT = '109'; + + /** + * Transport movement gate out report (111) + * + * Report on the outward movement of cargo, containers or other items of + * transport equipment (either full or empty) which have been picked up by an + * inland carrier. + */ + public const TRANSPORT_MOVEMENT_GATE_OUT_REPORT = '111'; + + /** + * Transport routing information (441) + * + * Document specifying the routes for transport between locations. + */ + public const TRANSPORT_ROUTING_INFORMATION = '441'; + + /** + * Transport status report (44) + * + * (1125) A message to report the transport status and/or change in the + * transport status (i.e. event) between agreed parties. + */ + public const TRANSPORT_STATUS_REPORT = '44'; + + /** + * Transport status request (45) + * + * (1127) A message to request a transport status report (e.g. through the + * national multimodal status report message IFSTA). + */ + public const TRANSPORT_STATUS_REQUEST = '45'; + + /** + * Transshipment despatch advice (399) + * + * Document by means of which the supplier or consignor informs the buyer, + * consignee or the distribution centre about the despatch of goods for + * transshipment. + */ + public const TRANSSHIPMENT_DESPATCH_ADVICE = '399'; + + /** + * Travel ticket (459) + * + * The document is a ticket giving access to a travel service. + */ + public const TRAVEL_TICKET = '459'; + + /** + * Treatment - nil outturn (59) + * + * No shortage, surplus or damaged outturn resulting from container vessel + * unpacking. + */ + public const TREATMENT_NIL_OUTTURN = '59'; + + /** + * Treatment - personal effect (62) + * + * Cargo consists of personal effects. + */ + public const TREATMENT_PERSONAL_EFFECT = '62'; + + /** + * Treatment - timber (63) + * + * Cargo consists of timber. + */ + public const TREATMENT_TIMBER = '63'; + + /** + * Treatment - time-up underbond (60) + * + * Movement type indicator: goods are moved under customs control for + * warehousing due to being time-up. + */ + public const TREATMENT_TIMEUP_UNDERBOND = '60'; + + /** + * Treatment - underbond by sea (61) + * + * Movement type indicator: goods are to move by sea under customs control to + * a customs office where formalities will be completed. + */ + public const TREATMENT_UNDERBOND_BY_SEA = '61'; + + /** + * Underbond approval (32) + * + * A message/document issuing Customs approval to move cargo from one Customs + * control point to another. + */ + public const UNDERBOND_APPROVAL = '32'; + + /** + * Underbond request (31) + * + * A Message/document requesting to move cargo from one Customs control point + * to another. + */ + public const UNDERBOND_REQUEST = '31'; + + /** + * United Nations standard message request (285) + * + * Requesting a United Nations Standard Message (UNSM). + */ + public const UNITED_NATIONS_STANDARD_MESSAGE_REQUEST = '285'; + + /** + * Universal (multipurpose) transport document (701) + * + * Document/message evidencing a contract of carriage covering the movement of + * goods by any mode of transport, or combination of modes, for national as + * well as international transport, under any applicable international + * convention or national law and under the conditions of carriage of any + * carrier or transport operator undertaking or arranging the transport + * referred to in the document. + */ + public const UNIVERSAL_MULTIPURPOSE_TRANSPORT_DOCUMENT = '701'; + + /** + * Unpriced bill of quantity (208) + * + * Document/message providing a detailed, quantity based specification, issued + * in an unpriced form to invite tender prices. + */ + public const UNPRICED_BILL_OF_QUANTITY = '208'; + + /** + * Unship permit (72) + * + * A message or document issuing permission to unship cargo. + */ + public const UNSHIP_PERMIT = '72'; + + /** + * US, FATCA statement (814) + * + * Statement regarding the Foreign Account Tax Compliance Act (FATCA) of the + * United States of America. + */ + public const US_FATCA_STATEMENT = '814'; + + /** + * User directory definition (284) + * + * Document/message defining the contents of a user directory set or parts + * thereof. + */ + public const USER_DIRECTORY_DEFINITION = '284'; + + /** + * Utilities time series message (411) + * + * The Utilities time series message is sent between responsible parties in a + * utilities infrastructure for the purpose of reporting time series and + * connected technical and/or administrative information. + */ + public const UTILITIES_TIME_SERIES_MESSAGE = '411'; + + /** + * Vaccination certificate (38) + * + * Official document proving immunisation against certain diseases. + */ + public const VACCINATION_CERTIFICATE = '38'; + + /** + * Validated priced tender (50) + * + * A validated priced tender. + */ + public const VALIDATED_PRICED_TENDER = '50'; + + /** + * Valuation report (829) + * + * Document reporting a valuation. + */ + public const VALUATION_REPORT = '829'; + + /** + * Value declaration (934) + * + * Document/message in which a declarant (importer) states the invoice or + * other price (e.g. selling price, price of identical goods), and specifies + * costs for freight, insurance and packing, etc., terms of delivery and + * payment, any relationship with the trading partner, etc., for the purpose + * of determining the Customs value of goods imported. + */ + public const VALUE_DECLARATION = '934'; + + /** + * Vehicle aboard document (857) + * + * Document which must be aboard the vehicle. + */ + public const VEHICLE_ABOARD_DOCUMENT = '857'; + + /** + * Vessel unpack report (86) + * + * A document code to indicate that the message being transmitted identifies + * all short and surplus cargoes off-loaded from a vessel at a specified + * discharging port. + */ + public const VESSEL_UNPACK_REPORT = '86'; + + /** + * Veterinary certificate (853) + * + * Document/message issued by the competent authority in the exporting country + * evidencing that live animals or birds are not infested or infected with + * disease, and giving details regarding their provenance, and of vaccinations + * and other treatment to which they have been subjected. + */ + public const VETERINARY_CERTIFICATE = '853'; + + /** + * Veterinary quarantine certificate (629) + * + * A certification that livestock or animal products, that are either imported + * or entering free zones, are kept under health supervision for a time period + * determined by veterinary quarantine instructions. + */ + public const VETERINARY_QUARANTINE_CERTIFICATE = '629'; + + /** + * Video (866) + * + * Document consisting of a video. + */ + public const VIDEO = '866'; + + /** + * Visa (483) + * + * An endorsement on a passport or any other recognised travel document + * indicating that it has been examined and found correct, especially as + * permitting the holder to enter or leave a country. + */ + public const VISA = '483'; + + /** + * Wage determination (160) + * + * A document indicating a determination of the wages to be paid. + */ + public const WAGE_DETERMINATION = '160'; + + /** + * Wagon report (970) + * + * Document which contains consignment information concerning the wagons and + * their lading in a case of a multiple wagon consignment. + */ + public const WAGON_REPORT = '970'; + + /** + * Warehouse warrant (635) + * + * Negotiable receipt document, issued by a Warehouse Keeper to a person + * placing goods in a warehouse and conferring title to the goods stored. + */ + public const WAREHOUSE_WARRANT = '635'; + + /** + * Waste disposal report (470) + * + * Document/message sent by a shipping agent to an authority for reporting + * information on waste disposal. + */ + public const WASTE_DISPOSAL_REPORT = '470'; + + /** + * Waybill (700) + * + * Non-negotiable document evidencing the contract for the transport of cargo. + */ + public const WAYBILL = '700'; + + /** + * WCO Cargo Report Export, Air or Maritime (419) + * + * Declaration, in accordance with the WCO Customs Data Model, to Customs + * concerning the export of cargo carried by commercial means of transport + * over water or through the air, e.g. vessel or aircraft. + */ + public const WCO_CARGO_REPORT_EXPORT_AIR_OR_MARITIME = '419'; + + /** + * WCO Cargo Report Export, Rail or Road (418) + * + * Declaration, in accordance with the WCO Customs Data Model, to Customs + * concerning the export of cargo carried by commercial means of transport + * over land, e.g. truck or train. + */ + public const WCO_CARGO_REPORT_EXPORT_RAIL_OR_ROAD = '418'; + + /** + * WCO Cargo Report Import, Air or Maritime (422) + * + * Declaration, in accordance with the WCO Customs Data Model, to Customs + * concerning the import of cargo carried by commercial means of transport + * over water or through the air, e.g. vessel or aircraft. + */ + public const WCO_CARGO_REPORT_IMPORT_AIR_OR_MARITIME = '422'; + + /** + * WCO Cargo Report Import, Rail or Road (421) + * + * Declaration, in accordance with the WCO Customs Data Model, to Customs + * concerning the import of cargo carried by commercial means of transport + * over land, e.g. truck or train. + */ + public const WCO_CARGO_REPORT_IMPORT_RAIL_OR_ROAD = '421'; + + /** + * WCO Conveyance Arrival Report (524) + * + * Declaration, in accordance with the WCO Customs Data Model, to Customs + * regarding the conveyance arriving in a Customs territory. + */ + public const WCO_CONVEYANCE_ARRIVAL_REPORT = '524'; + + /** + * WCO Conveyance Departure Report (525) + * + * Declaration, in accordance with the WCO Customs Data Model, to Customs + * regarding the conveyance departing a Customs territory. + */ + public const WCO_CONVEYANCE_DEPARTURE_REPORT = '525'; + + /** + * WCO first step of two-step export declaration (424) + * + * First part of a simplified declaration, in accordance with the WCO Customs + * Data Model, to Customs by which goods are declared for Customs export + * procedure based on the 1999 Kyoto Convention. + */ + public const WCO_FIRST_STEP_OF_TWOSTEP_EXPORT_DECLARATION = '424'; + + /** + * WCO first step of two-step import declaration (497) + * + * First part of a simplified declaration, in accordance with the WCO Customs + * Data Model, to Customs by which goods are declared for Customs import + * procedure based on the 1999 Kyoto Convention. + */ + public const WCO_FIRST_STEP_OF_TWOSTEP_IMPORT_DECLARATION = '497'; + + /** + * WCO one-step export declaration (423) + * + * Single step declaration, in accordance with the WCO Customs Data Model, to + * Customs by which goods are declared for a Customs export procedure based on + * the 1999 Kyoto Convention. + */ + public const WCO_ONESTEP_EXPORT_DECLARATION = '423'; + + /** + * WCO one-step import declaration (496) + * + * Single step declaration, in accordance with the WCO Customs Data Model, to + * Customs by which goods are declared for Customs import procedure based on + * the 1999 Kyoto Convention. + */ + public const WCO_ONESTEP_IMPORT_DECLARATION = '496'; + + /** + * WCO second step of two-step export declaration (495) + * + * Second part of a simplified declaration, in accordance with the WCO Customs + * Data Model, to Customs by which goods are declared for Customs export + * procedure based on the 1999 Kyoto Convention. + */ + public const WCO_SECOND_STEP_OF_TWOSTEP_EXPORT_DECLARATION = '495'; + + /** + * WCO second step of two-step import declaration (498) + * + * Second part of a simplified declaration, in accordance with the WCO Customs + * Data Model, to Customs by which goods are declared for Customs import + * procedure based on the 1999 Kyoto Convention. + */ + public const WCO_SECOND_STEP_OF_TWOSTEP_IMPORT_DECLARATION = '498'; + + /** + * Weight certificate (14) + * + * Certificate certifying the weight of goods. + */ + public const WEIGHT_CERTIFICATE = '14'; + + /** + * Weight list (15) + * + * Document/message specifying the weight of goods. + */ + public const WEIGHT_LIST = '15'; + + /** + * Wine certificate (268) + * + * Certificate attesting to the quality, origin or appellation of wine. + */ + public const WINE_CERTIFICATE = '268'; + + /** + * Witness report (843) + * + * Document containing a report of a witness. + */ + public const WITNESS_REPORT = '843'; + + /** + * Wool health certificate (269) + * + * Certificate attesting that wool is free from specified risks to human or + * animal health. + */ + public const WOOL_HEALTH_CERTIFICATE = '269'; + + /** + * Written instructions in conformance with ADR article number 10385 (48) + * + * Written instructions relating to dangerous goods and defined in the + * European Agreement of Dangerous Transport by Road known as ADR (Accord + * europeen relatif au transport international des marchandises Dangereuses + * par Route). + */ + public const WRITTEN_INSTRUCTIONS_IN_CONFORMANCE_WITH_ADR_ARTICLE_NUMBER = '48'; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdDutyTaxFeeCategories.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdDutyTaxFeeCategories.php new file mode 100644 index 000000000..b87e1774e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdDutyTaxFeeCategories.php @@ -0,0 +1,67 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdDutyTaxFeeCategories +{ + /** + * Standard rate + */ + public const STANDARD_RATE = "S"; + + /** + * Zero rated goods + */ + public const ZERO_RATED_GOODS = "Z"; + + /** + * Exempt from tax + */ + public const EXEMPT_FROM_TAX = "E"; + + /** + * VAT Reverse charge + */ + public const VAT_REVERSE_CHARGE = "AE"; + + /** + * VAT exempt for EEA intra-community supply of goods and services + */ + public const VAT_EXEMPT_FOR_EEA_INTRACOMMUNITY_SUPPLY_OF_GOODS_AND_SERVICES = "K"; + + /** + * Free export item, tax not charged + */ + public const FREE_EXPORT_ITEM_TAX_NOT_CHARGED = "G"; + + /** + * Service outside scope of tax + */ + public const SERVICE_OUTSIDE_SCOPE_OF_TAX = "O"; + + /** + * Canary Islands general indirect tax + */ + public const CANARY_ISLANDS_GENERAL_INDIRECT_TAX = "L"; + + /** + * Tax for production, services and importation in Ceuta and Melilla + */ + public const TAX_FOR_PRODUCTION_SERVICES_AND_IMPORTATION_IN_CEUTA_AND_MELILLA = "M"; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdElectronicAddressScheme.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdElectronicAddressScheme.php new file mode 100644 index 000000000..123accf15 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdElectronicAddressScheme.php @@ -0,0 +1,479 @@ + + * @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"; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdItemTypeIdentificationCodes.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdItemTypeIdentificationCodes.php new file mode 100644 index 000000000..dcbd2a959 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdItemTypeIdentificationCodes.php @@ -0,0 +1,927 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdItemTypeIdentificationCodes +{ + /** + * Product version number + */ + public const UNTDID_7143_AA = 'AA'; + + /** + * Assembly + */ + public const UNTDID_7143_AB = 'AB'; + + /** + * HIBC (Health Industry Bar Code) + */ + public const UNTDID_7143_AC = 'AC'; + + /** + * Cold roll number + */ + public const UNTDID_7143_AD = 'AD'; + + /** + * Hot roll number + */ + public const UNTDID_7143_AE = 'AE'; + + /** + * Slab number + */ + public const UNTDID_7143_AF = 'AF'; + + /** + * Software revision number + */ + public const UNTDID_7143_AG = 'AG'; + + /** + * UPC (Universal Product Code) Consumer package code (1-5-5) + */ + public const UNTDID_7143_AH = 'AH'; + + /** + * UPC (Universal Product Code) Consumer package code (1-5-5- + */ + public const UNTDID_7143_AI = 'AI'; + + /** + * Sample number + */ + public const UNTDID_7143_AJ = 'AJ'; + + /** + * Pack number + */ + public const UNTDID_7143_AK = 'AK'; + + /** + * UPC (Universal Product Code) Shipping container code (1-2- + */ + public const UNTDID_7143_AL = 'AL'; + + /** + * UPC (Universal Product Code)/EAN (European article number) + */ + public const UNTDID_7143_AM = 'AM'; + + /** + * UPC (Universal Product Code) suffix + */ + public const UNTDID_7143_AN = 'AN'; + + /** + * State label code + */ + public const UNTDID_7143_AO = 'AO'; + + /** + * Heat number + */ + public const UNTDID_7143_AP = 'AP'; + + /** + * Coupon number + */ + public const UNTDID_7143_AQ = 'AQ'; + + /** + * Resource number + */ + public const UNTDID_7143_AR = 'AR'; + + /** + * Work task number + */ + public const UNTDID_7143_AS = 'AS'; + + /** + * Price look up number + */ + public const UNTDID_7143_AT = 'AT'; + + /** + * NSN (North Atlantic Treaty Organization Stock Number) + */ + public const UNTDID_7143_AU = 'AU'; + + /** + * Refined product code + */ + public const UNTDID_7143_AV = 'AV'; + + /** + * Exhibit + */ + public const UNTDID_7143_AW = 'AW'; + + /** + * End item + */ + public const UNTDID_7143_AX = 'AX'; + + /** + * Federal supply classification + */ + public const UNTDID_7143_AY = 'AY'; + + /** + * Engineering data list + */ + public const UNTDID_7143_AZ = 'AZ'; + + /** + * Milestone event number + */ + public const UNTDID_7143_BA = 'BA'; + + /** + * Lot number + */ + public const UNTDID_7143_BB = 'BB'; + + /** + * National drug code 4-4-2 format + */ + public const UNTDID_7143_BC = 'BC'; + + /** + * National drug code 5-3-2 format + */ + public const UNTDID_7143_BD = 'BD'; + + /** + * National drug code 5-4-1 format + */ + public const UNTDID_7143_BE = 'BE'; + + /** + * National drug code 5-4-2 format + */ + public const UNTDID_7143_BF = 'BF'; + + /** + * National drug code + */ + public const UNTDID_7143_BG = 'BG'; + + /** + * Part number + */ + public const UNTDID_7143_BH = 'BH'; + + /** + * Local Stock Number (LSN) + */ + public const UNTDID_7143_BI = 'BI'; + + /** + * Next higher assembly number + */ + public const UNTDID_7143_BJ = 'BJ'; + + /** + * Data category + */ + public const UNTDID_7143_BK = 'BK'; + + /** + * Control number + */ + public const UNTDID_7143_BL = 'BL'; + + /** + * Special material identification code + */ + public const UNTDID_7143_BM = 'BM'; + + /** + * Locally assigned control number + */ + public const UNTDID_7143_BN = 'BN'; + + /** + * Buyer's colour + */ + public const UNTDID_7143_BO = 'BO'; + + /** + * Buyer's part number + */ + public const UNTDID_7143_BP = 'BP'; + + /** + * Variable measure product code + */ + public const UNTDID_7143_BQ = 'BQ'; + + /** + * Financial phase + */ + public const UNTDID_7143_BR = 'BR'; + + /** + * Contract breakdown + */ + public const UNTDID_7143_BS = 'BS'; + + /** + * Technical phase + */ + public const UNTDID_7143_BT = 'BT'; + + /** + * Dye lot number + */ + public const UNTDID_7143_BU = 'BU'; + + /** + * Daily statement of activities + */ + public const UNTDID_7143_BV = 'BV'; + + /** + * Periodical statement of activities within a bilaterally + */ + public const UNTDID_7143_BW = 'BW'; + + /** + * Calendar week statement of activities + */ + public const UNTDID_7143_BX = 'BX'; + + /** + * Calendar month statement of activities + */ + public const UNTDID_7143_BY = 'BY'; + + /** + * Original equipment number + */ + public const UNTDID_7143_BZ = 'BZ'; + + /** + * Industry commodity code + */ + public const UNTDID_7143_CC = 'CC'; + + /** + * Commodity grouping + */ + public const UNTDID_7143_CG = 'CG'; + + /** + * Colour number + */ + public const UNTDID_7143_CL = 'CL'; + + /** + * Contract number + */ + public const UNTDID_7143_CR = 'CR'; + + /** + * Customs article number + */ + public const UNTDID_7143_CV = 'CV'; + + /** + * Drawing revision number + */ + public const UNTDID_7143_DR = 'DR'; + + /** + * Drawing + */ + public const UNTDID_7143_DW = 'DW'; + + /** + * Engineering change level + */ + public const UNTDID_7143_EC = 'EC'; + + /** + * Material code + */ + public const UNTDID_7143_EF = 'EF'; + + /** + * International Article Numbering Association (EAN) + */ + public const UNTDID_7143_EN = 'EN'; + + /** + * Fish species + */ + public const UNTDID_7143_FS = 'FS'; + + /** + * Buyer's internal product group code + */ + public const UNTDID_7143_GB = 'GB'; + + /** + * National product group code + */ + public const UNTDID_7143_GN = 'GN'; + + /** + * General specification number + */ + public const UNTDID_7143_GS = 'GS'; + + /** + * Harmonised system + */ + public const UNTDID_7143_HS = 'HS'; + + /** + * ISBN (International Standard Book Number) + */ + public const UNTDID_7143_IB = 'IB'; + + /** + * Buyer's item number + */ + public const UNTDID_7143_IN = 'IN'; + + /** + * ISSN (International Standard Serial Number) + */ + public const UNTDID_7143_IS = 'IS'; + + /** + * Buyer's style number + */ + public const UNTDID_7143_IT = 'IT'; + + /** + * Buyer's size code + */ + public const UNTDID_7143_IZ = 'IZ'; + + /** + * Machine number + */ + public const UNTDID_7143_MA = 'MA'; + + /** + * Manufacturer's (producer's) article number + */ + public const UNTDID_7143_MF = 'MF'; + + /** + * Model number + */ + public const UNTDID_7143_MN = 'MN'; + + /** + * Product/service identification number + */ + public const UNTDID_7143_MP = 'MP'; + + /** + * Batch number + */ + public const UNTDID_7143_NB = 'NB'; + + /** + * Customer order number + */ + public const UNTDID_7143_ON = 'ON'; + + /** + * Part number description + */ + public const UNTDID_7143_PD = 'PD'; + + /** + * Purchaser's order line number + */ + public const UNTDID_7143_PL = 'PL'; + + /** + * Purchase order number + */ + public const UNTDID_7143_PO = 'PO'; + + /** + * Promotional variant number + */ + public const UNTDID_7143_PV = 'PV'; + + /** + * Buyer's qualifier for size + */ + public const UNTDID_7143_QS = 'QS'; + + /** + * Returnable container number + */ + public const UNTDID_7143_RC = 'RC'; + + /** + * Release number + */ + public const UNTDID_7143_RN = 'RN'; + + /** + * Run number + */ + public const UNTDID_7143_RU = 'RU'; + + /** + * Record keeping of model year + */ + public const UNTDID_7143_RY = 'RY'; + + /** + * Supplier's article number + */ + public const UNTDID_7143_SA = 'SA'; + + /** + * Standard group of products (mixed assortment) + */ + public const UNTDID_7143_SG = 'SG'; + + /** + * SKU (Stock keeping unit) + */ + public const UNTDID_7143_SK = 'SK'; + + /** + * Serial number + */ + public const UNTDID_7143_SN = 'SN'; + + /** + * RSK number + */ + public const UNTDID_7143_SRS = 'SRS'; + + /** + * IFLS (Institut Francais du Libre Service) 5 digit product + */ + public const UNTDID_7143_SRT = 'SRT'; + + /** + * IFLS (Institut Francais du Libre Service) 9 digit product + */ + public const UNTDID_7143_SRU = 'SRU'; + + /** + * GS1 Global Trade Item Number + */ + public const UNTDID_7143_SRV = 'SRV'; + + /** + * EDIS (Energy Data Identification System) + */ + public const UNTDID_7143_SRW = 'SRW'; + + /** + * Slaughter number + */ + public const UNTDID_7143_SRX = 'SRX'; + + /** + * Official animal number + */ + public const UNTDID_7143_SRY = 'SRY'; + + /** + * Harmonized tariff schedule + */ + public const UNTDID_7143_SRZ = 'SRZ'; + + /** + * Supplier's supplier article number + */ + public const UNTDID_7143_SS = 'SS'; + + /** + * 46 Level DOT Code + */ + public const UNTDID_7143_SSA = 'SSA'; + + /** + * Airline Tariff 6D + */ + public const UNTDID_7143_SSB = 'SSB'; + + /** + * Title 49 Code of Federal Regulations + */ + public const UNTDID_7143_SSC = 'SSC'; + + /** + * International Civil Aviation Administration code + */ + public const UNTDID_7143_SSD = 'SSD'; + + /** + * Hazardous Materials ID DOT + */ + public const UNTDID_7143_SSE = 'SSE'; + + /** + * Endorsement + */ + public const UNTDID_7143_SSF = 'SSF'; + + /** + * Air Force Regulation 71-4 + */ + public const UNTDID_7143_SSG = 'SSG'; + + /** + * Breed + */ + public const UNTDID_7143_SSH = 'SSH'; + + /** + * Chemical Abstract Service (CAS) registry number + */ + public const UNTDID_7143_SSI = 'SSI'; + + /** + * Engine model designation + */ + public const UNTDID_7143_SSJ = 'SSJ'; + + /** + * Institutional Meat Purchase Specifications (IMPS) Number + */ + public const UNTDID_7143_SSK = 'SSK'; + + /** + * Price Look-Up code (PLU) + */ + public const UNTDID_7143_SSL = 'SSL'; + + /** + * International Maritime Organization (IMO) Code + */ + public const UNTDID_7143_SSM = 'SSM'; + + /** + * Bureau of Explosives 600-A (rail) + */ + public const UNTDID_7143_SSN = 'SSN'; + + /** + * United Nations Dangerous Goods List + */ + public const UNTDID_7143_SSO = 'SSO'; + + /** + * International Code of Botanical Nomenclature (ICBN) + */ + public const UNTDID_7143_SSP = 'SSP'; + + /** + * International Code of Zoological Nomenclature (ICZN) + */ + public const UNTDID_7143_SSQ = 'SSQ'; + + /** + * International Code of Nomenclature for Cultivated Plants + */ + public const UNTDID_7143_SSR = 'SSR'; + + /** + * Distributor’s article identifier + */ + public const UNTDID_7143_SSS = 'SSS'; + + /** + * Norwegian Classification system ENVA + */ + public const UNTDID_7143_SST = 'SST'; + + /** + * Supplier assigned classification + */ + public const UNTDID_7143_SSU = 'SSU'; + + /** + * Mexican classification system AMECE + */ + public const UNTDID_7143_SSV = 'SSV'; + + /** + * German classification system CCG + */ + public const UNTDID_7143_SSW = 'SSW'; + + /** + * Finnish classification system EANFIN + */ + public const UNTDID_7143_SSX = 'SSX'; + + /** + * Canadian classification system ICC + */ + public const UNTDID_7143_SSY = 'SSY'; + + /** + * French classification system IFLS5 + */ + public const UNTDID_7143_SSZ = 'SSZ'; + + /** + * Style number + */ + public const UNTDID_7143_ST = 'ST'; + + /** + * Dutch classification system CBL + */ + public const UNTDID_7143_STA = 'STA'; + + /** + * Japanese classification system JICFS + */ + public const UNTDID_7143_STB = 'STB'; + + /** + * European Union dairy subsidy eligibility classification + */ + public const UNTDID_7143_STC = 'STC'; + + /** + * GS1 Spain classification system + */ + public const UNTDID_7143_STD = 'STD'; + + /** + * GS1 Poland classification system + */ + public const UNTDID_7143_STE = 'STE'; + + /** + * Federal Agency on Technical Regulating and Metrology of the + */ + public const UNTDID_7143_STF = 'STF'; + + /** + * Efficient Consumer Response (ECR) Austria classification + */ + public const UNTDID_7143_STG = 'STG'; + + /** + * GS1 Italy classification system + */ + public const UNTDID_7143_STH = 'STH'; + + /** + * CPV (Common Procurement Vocabulary) + */ + public const UNTDID_7143_STI = 'STI'; + + /** + * IFDA (International Foodservice Distributors Association) + */ + public const UNTDID_7143_STJ = 'STJ'; + + /** + * AHFS (American Hospital Formulary Service) pharmacologic - + */ + public const UNTDID_7143_STK = 'STK'; + + /** + * ATC (Anatomical Therapeutic Chemical) classification system + */ + public const UNTDID_7143_STL = 'STL'; + + /** + * CLADIMED (Classification des Dispositifs Médicaux) + */ + public const UNTDID_7143_STM = 'STM'; + + /** + * CMDR (Canadian Medical Device Regulations) classification + */ + public const UNTDID_7143_STN = 'STN'; + + /** + * CNDM (Classificazione Nazionale dei Dispositivi Medici) + */ + public const UNTDID_7143_STO = 'STO'; + + /** + * UK DM&D (Dictionary of Medicines & Devices) standard coding + */ + public const UNTDID_7143_STP = 'STP'; + + /** + * eCl@ss + */ + public const UNTDID_7143_STQ = 'STQ'; + + /** + * EDMA (European Diagnostic Manufacturers Association) + */ + public const UNTDID_7143_STR = 'STR'; + + /** + * EGAR (European Generic Article Register) + */ + public const UNTDID_7143_STS = 'STS'; + + /** + * GMDN (Global Medical Devices Nomenclature) + */ + public const UNTDID_7143_STT = 'STT'; + + /** + * GPI (Generic Product Identifier) + */ + public const UNTDID_7143_STU = 'STU'; + + /** + * HCPCS (Healthcare Common Procedure Coding System) + */ + public const UNTDID_7143_STV = 'STV'; + + /** + * ICPS (International Classification for Patient Safety) + */ + public const UNTDID_7143_STW = 'STW'; + + /** + * MedDRA (Medical Dictionary for Regulatory Activities) + */ + public const UNTDID_7143_STX = 'STX'; + + /** + * Medical Columbus + */ + public const UNTDID_7143_STY = 'STY'; + + /** + * NAPCS (North American Product Classification System) + */ + public const UNTDID_7143_STZ = 'STZ'; + + /** + * NHS (National Health Services) eClass + */ + public const UNTDID_7143_SUA = 'SUA'; + + /** + * US FDA (Food and Drug Administration) Product Code + */ + public const UNTDID_7143_SUB = 'SUB'; + + /** + * SNOMED CT (Systematized Nomenclature of Medicine-Clinical + */ + public const UNTDID_7143_SUC = 'SUC'; + + /** + * UMDNS (Universal Medical Device Nomenclature System) + */ + public const UNTDID_7143_SUD = 'SUD'; + + /** + * GS1 Global Returnable Asset Identifier, non-serialised + */ + public const UNTDID_7143_SUE = 'SUE'; + + /** + * IMEI + */ + public const UNTDID_7143_SUF = 'SUF'; + + /** + * Waste Type (EMSA) + */ + public const UNTDID_7143_SUG = 'SUG'; + + /** + * Ship's store classification type + */ + public const UNTDID_7143_SUH = 'SUH'; + + /** + * Emergency fire code + */ + public const UNTDID_7143_SUI = 'SUI'; + + /** + * Emergency spillage code + */ + public const UNTDID_7143_SUJ = 'SUJ'; + + /** + * IMDG packing group + */ + public const UNTDID_7143_SUK = 'SUK'; + + /** + * MARPOL Code IBC + */ + public const UNTDID_7143_SUL = 'SUL'; + + /** + * IMDG subsidiary risk class + */ + public const UNTDID_7143_SUM = 'SUM'; + + /** + * Transport group number + */ + public const UNTDID_7143_TG = 'TG'; + + /** + * Taxonomic Serial Number + */ + public const UNTDID_7143_TSN = 'TSN'; + + /** + * IMDG main hazard class + */ + public const UNTDID_7143_TSO = 'TSO'; + + /** + * EU Combined Nomenclature + */ + public const UNTDID_7143_TSP = 'TSP'; + + /** + * Therapeutic classification number + */ + public const UNTDID_7143_TSQ = 'TSQ'; + + /** + * European Waste Catalogue + */ + public const UNTDID_7143_TSR = 'TSR'; + + /** + * Price grouping code + */ + public const UNTDID_7143_TSS = 'TSS'; + + /** + * UNSPSC + */ + public const UNTDID_7143_TST = 'TST'; + + /** + * Ultimate customer's article number + */ + public const UNTDID_7143_UA = 'UA'; + + /** + * UPC (Universal product code) + */ + public const UNTDID_7143_UP = 'UP'; + + /** + * Vendor item number + */ + public const UNTDID_7143_VN = 'VN'; + + /** + * Vendor's (seller's) part number + */ + public const UNTDID_7143_VP = 'VP'; + + /** + * Vendor's supplemental item number + */ + public const UNTDID_7143_VS = 'VS'; + + /** + * Vendor specification number + */ + public const UNTDID_7143_VX = 'VX'; + + /** + * Mutually defined + */ + public const UNTDID_7143_ZZZ = 'ZZZ'; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdLineStatusCodes.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdLineStatusCodes.php new file mode 100644 index 000000000..531f3c9fc --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdLineStatusCodes.php @@ -0,0 +1,830 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + * @see https://service.unece.org/trade/untdid/d05a/tred/tred1229.htm + */ +class ZugferdLineStatusCodes +{ + /** + * Added (1) + * + * The information is to be or has been added. + */ + public const ADDED = '1'; + + /** + * Not found (10) + * + * This line item is not found in the referenced message. + */ + public const NOT_FOUND = '10'; + + /** + * Final response (100) + * + * The response is an final one. + */ + public const FINAL_RESPON = '100'; + + /** + * Debit advice requested (101) + * + * A debit advice is requested for the transaction. + */ + public const DEBIT_ADVICE_REQUES = '101'; + + /** + * Transaction not impacted (102) + * + * Advice that the transaction is not impacted. + */ + public const TRANSA_NOT_IMPACT = '102'; + + /** + * Patient to be notified (103) + * + * The action to take is to notify the patient. + */ + public const PATIEN_TO_BE_NOTIFI = '103'; + + /** + * Healthcare provider to be notified (104) + * + * The action to take is to notify the healthcare provider. + */ + public const HEALTH_PROVID_TO_BE_NOTIFI = '104'; + + /** + * Usual general practitioner to be notified (105) + * + * The action to take is to notify the usual general practitioner. + */ + public const USUAL_GENERA_PRACTI_TO_BE_NOTIFI = '105'; + + /** + * Advice without details (106) + * + * An advice without details is requested or notified. + */ + public const ADVICE_WITHOU_DETAIL = '106'; + + /** + * Advice with details (107) + * + * An advice with details is requested or notified. + */ + public const ADVICE_WITH_DETAIL = '107'; + + /** + * Amendment requested (108) + * + * An amendment is requested. + */ + public const AMENDM_REQUES = '108'; + + /** + * For information (109) + * + * Included for information only. + */ + public const FOR_INFORM = '109'; + + /** + * Not amended (11) + * + * This line is not amended by the buyer. + */ + public const NOT_AMENDE = '11'; + + /** + * Withdraw (110) + * + * A code indicating discontinuance or retraction. + */ + public const WITHDRAW = '110'; + + /** + * Delivery date change (111) + * + * The action / notiification is a change of the delivery date. + */ + public const DELIVE_DATE_CHANGE = '111'; + + /** + * Quantity change (112) + * + * The action / notification is a change of quantity. + */ + public const QUANTI_CHANGE = '112'; + + /** + * Line item numbers changed (12) + * + * Code specifying that the line item numbers have changed. + */ + public const LINE_ITEM_NUMBER_CHANGE = '12'; + + /** + * Buyer has deducted amount (13) + * + * Buyer has deducted amount from payment. + */ + public const BUYER_HAS_DEDUCT_AMOUNT = '13'; + + /** + * Buyer claims against invoice (14) + * + * Buyer has a claim against an outstanding invoice. + */ + public const BUYER_CLAIMS_AGAINS_INVOIC = '14'; + + /** + * Charge back by seller (15) + * + * Factor has been requested to charge back the outstanding item. + */ + public const CHARGE_BACK_BY_SELLER = '15'; + + /** + * Seller will issue credit note (16) + * + * Seller agrees to issue a credit note. + */ + public const SELLER_WILL_ISSUE_CREDIT_NOTE = '16'; + + /** + * Terms changed for new terms (17) + * + * New settlement terms have been agreed. + */ + public const TERMS_CHANGE_FOR_NEW_TERMS = '17'; + + /** + * Abide outcome of negotiations (18) + * + * Factor agrees to abide by the outcome of negotiations between seller and + * buyer. + */ + public const ABIDE_OUTCOM_OF_NEGOTI = '18'; + + /** + * Seller rejects dispute (19) + * + * Seller does not accept validity of dispute. + */ + public const SELLER_REJECT_DISPUT = '19'; + + /** + * Deleted (2) + * + * The information is to be or has been deleted. + */ + public const DELETED = '2'; + + /** + * Settlement (20) + * + * The reported situation is settled. + */ + public const SETTLEMENT = '20'; + + /** + * No delivery (21) + * + * Code indicating that no delivery will be required. + */ + public const NO_DELIVE = '21'; + + /** + * Call-off delivery (22) + * + * A request for delivery of a particular quantity of goods to be delivered on + * a particular date (or within a particular period). + */ + public const CALLOF_DELIVE = '22'; + + /** + * Proposed amendment (23) + * + * A code used to indicate an amendment suggested by the sender. + */ + public const PROPOS_AMENDM = '23'; + + /** + * Accepted with amendment, no confirmation required (24) + * + * Accepted with changes which require no confirmation. + */ + public const ACCEPT_WITH_AMENDM_NO_CONFIR_REQUIR = '24'; + + /** + * Equipment provisionally repaired (25) + * + * The equipment or component has been provisionally repaired. + */ + public const EQUIPM_PROVIS_REPAIR = '25'; + + /** + * Included (26) + * + * Code indicating that the entity is included. + */ + public const INCLUDED = '26'; + + /** + * Upon receipt and verification of documents we shall cover you when due as + * per your instructions (27) + * + * Upon receipt and verification of documents we shall cover you when due as + * per your instructions. + */ + public const UPON_RECEIP_AND_VERIFI_OF_DOCUME_WE_SHALL_COVER_YOU_WHEN_DUE_AS_PER_YOUR_INSTRU = '27'; + + /** + * Upon receipt and verification of documents we shall authorize you to debit + * our account with you when due (28) + * + * Upon receipt and verification of documents we shall authorize you to debit + * our account with you when due + */ + public const UPON_RECEIP_AND_VERIFI_OF_DOCUME_WE_SHALL_AUTHOR_YOU_TO_DEBIT_OUR_ACCOUN_WITH_YOU_WHEN_DUE = '28'; + + /** + * On receipt of your authenticated advice we shall cover you when due as per + * your instructions (29) + * + * On receipt of your authenticated advice we shall cover you when due as per + * your instructions + */ + public const ON_RECEIP_OF_YOUR_AUTHEN_ADVICE_WE_SHALL_COVER_YOU_WHEN_DUE_AS_PER_YOUR_INSTRU = '29'; + + /** + * Changed (3) + * + * The information is to be or has been changed. + */ + public const CHANGED = '3'; + + /** + * On receipt of your authenticated advice we shall authorize you to debit our + * account with you when due (30) + * + * On receipt of your authenticated advice we shall authorize you to debit our + * account with you when due + */ + public const ON_RECEIP_OF_YOUR_AUTHEN_ADVICE_WE_SHALL_AUTHOR_YOU_TO_DEBIT_OUR_ACCOUN_WITH_YOU_WHEN_DUE = '30'; + + /** + * On receipt of your authenticated advice we shall credit your account with + * us when due (31) + * + * On receipt of your authenticated advice we shall credit your account with + * us when due + */ + public const ON_RECEIP_OF_YOUR_AUTHEN_ADVICE_WE_SHALL_CREDIT_YOUR_ACCOUN_WITH_US_WHEN_DUE = '31'; + + /** + * Credit advice requested for direct debit (32) + * + * A credit advice is requested for the direct debit. + */ + public const CREDIT_ADVICE_REQUES_FOR_DIRECT_DEBIT = '32'; + + /** + * Credit advice and acknowledgement for direct debit (33) + * + * A credit advice and acknowledgement are requested for the direct debit. + */ + public const CREDIT_ADVICE_AND_ACKNOW_FOR_DIRECT_DEBIT = '33'; + + /** + * Inquiry (34) + * + * Request for information. + */ + public const INQUIRY = '34'; + + /** + * Checked (35) + * + * Checked. + */ + public const CHECKED = '35'; + + /** + * Not checked (36) + * + * Not checked. + */ + public const NOT_CHECKE = '36'; + + /** + * Cancelled (37) + * + * Discontinued. + */ + public const CANCELLED = '37'; + + /** + * Replaced (38) + * + * Provide a replacement. + */ + public const REPLACED = '38'; + + /** + * New (39) + * + * Not existing before. + */ + public const NEW = '39'; + + /** + * No action (4) + * + * This line item is not affected by the actual message. + */ + public const NO_ACTION = '4'; + + /** + * Agreed (40) + * + * Consent. + */ + public const AGREED = '40'; + + /** + * Proposed (41) + * + * Put forward for consideration. + */ + public const PROPOSED = '41'; + + /** + * Already delivered (42) + * + * Delivery has taken place. + */ + public const ALREAD_DELIVE = '42'; + + /** + * Additional subordinate structures will follow (43) + * + * Additional subordinate structures will follow the current hierarchy level. + */ + public const ADDITI_SUBORD_STRUCT_WILL_FOLLOW = '43'; + + /** + * Additional subordinate structures will not follow (44) + * + * No additional subordinate structures will follow the current hierarchy + * level. + */ + public const ADDITI_SUBORD_STRUCT_WILL_NOT_FOLLOW = '44'; + + /** + * Result opposed (45) + * + * A notification that the result is opposed. + */ + public const RESULT_OPPOSE = '45'; + + /** + * Auction held (46) + * + * A notification that an auction was held. + */ + public const AUCTIO_HELD = '46'; + + /** + * Legal action pursued (47) + * + * A notification that legal action has been pursued. + */ + public const LEGAL_ACTION_PURSUE = '47'; + + /** + * Meeting held (48) + * + * A notification that a meeting was held. + */ + public const MEETIN_HELD = '48'; + + /** + * Result set aside (49) + * + * A notification that the result has been set aside. + */ + public const RESULT_SET_ASIDE = '49'; + + /** + * Accepted without amendment (5) + * + * This line item is entirely accepted by the seller. + */ + public const ACCEPT_WITHOU_AMENDM = '5'; + + /** + * Result disputed (50) + * + * A notification that the result has been disputed. + */ + public const RESULT_DISPUT = '50'; + + /** + * Countersued (51) + * + * A notification that a countersuit has been filed. + */ + public const COUNTERSUED = '51'; + + /** + * Pending (52) + * + * A notification that an action is awaiting settlement. + */ + public const PENDING = '52'; + + /** + * Court action dismissed (53) + * + * A notification that a court action will no longer be heard. + */ + public const COURT_ACTION_DISMIS = '53'; + + /** + * Referred item, accepted (54) + * + * The item being referred to has been accepted. + */ + public const REFERR_ITEM_ACCEPT = '54'; + + /** + * Referred item, rejected (55) + * + * The item being referred to has been rejected. + */ + public const REFERR_ITEM_REJECT = '55'; + + /** + * Debit advice statement line (56) + * + * Notification that the statement line is a debit advice. + */ + public const DEBIT_ADVICE_STATEM_LINE = '56'; + + /** + * Credit advice statement line (57) + * + * Notification that the statement line is a credit advice. + */ + public const CREDIT_ADVICE_STATEM_LINE = '57'; + + /** + * Grouped credit advices (58) + * + * Notification that the credit advices are grouped. + */ + public const GROUPE_CREDIT_ADVICE = '58'; + + /** + * Grouped debit advices (59) + * + * Notification that the debit advices are grouped. + */ + public const GROUPE_DEBIT_ADVICE = '59'; + + /** + * Accepted with amendment (6) + * + * This line item is accepted but amended by the seller. + */ + public const ACCEPT_WITH_AMENDM = '6'; + + /** + * Registered (60) + * + * The name is registered. + */ + public const REGISTERED = '60'; + + /** + * Payment denied (61) + * + * The payment has been denied. + */ + public const PAYMEN_DENIED = '61'; + + /** + * Approved as amended (62) + * + * Approved with modifications. + */ + public const APPROV_AS_AMENDE = '62'; + + /** + * Approved as submitted (63) + * + * The request has been approved as submitted. + */ + public const APPROV_AS_SUBMIT = '63'; + + /** + * Cancelled, no activity (64) + * + * Cancelled due to the lack of activity. + */ + public const CANCEL_NO_ACTIVI = '64'; + + /** + * Under investigation (65) + * + * Investigation is being done. + */ + public const UNDER_INVEST = '65'; + + /** + * Initial claim received (66) + * + * Notification that the initial claim was received. + */ + public const INITIA_CLAIM_RECEIV = '66'; + + /** + * Not in process (67) + * + * Not in process. + */ + public const NOT_IN_PROCES = '67'; + + /** + * Rejected, duplicate (68) + * + * Rejected because it is a duplicate. + */ + public const REJECT_DUPLIC = '68'; + + /** + * Rejected, resubmit with corrections (69) + * + * Rejected but may be resubmitted when corrected. + */ + public const REJECT_RESUBM_WITH_CORREC = '69'; + + /** + * Not accepted (7) + * + * This line item is not accepted by the seller. + */ + public const NOT_ACCEPT = '7'; + + /** + * Pending, incomplete (70) + * + * Pending because of incomplete information. + */ + public const PENDIN_INCOMP = '70'; + + /** + * Under field office investigation (71) + * + * Investigation by the field is being done. + */ + public const UNDER_FIELD_OFFICE_INVEST = '71'; + + /** + * Pending, awaiting additional material (72) + * + * Pending awaiting receipt of additional material. + */ + public const PENDIN_AWAITI_ADDITI_MATERI = '72'; + + /** + * Pending, awaiting review (73) + * + * Pending while awaiting review. + */ + public const PENDIN_AWAITI_REVIEW = '73'; + + /** + * Reopened (74) + * + * Opened again. + */ + public const REOPENED = '74'; + + /** + * Processed by primary, forwarded to additional payer(s) (75) + * + * This request has been processed by the primary payer and sent to additional + * payer(s). + */ + public const PROCES_BY_PRIMAR_FORWAR_TO_ADDITI_PAYERS = '75'; + + /** + * Processed by secondary, forwarded to additional payer(s) (76) + * + * This request has been processed by the secondary payer and sent to + * additional payer(s). + */ + public const PROCES_BY_SECOND_FORWAR_TO_ADDITI_PAYERS = '76'; + + /** + * Processed by tertiary, forwarded to additional payer(s) (77) + * + * This request has been processed by the tertiary payer and sent to + * additional payer(s). + */ + public const PROCES_BY_TERTIA_FORWAR_TO_ADDITI_PAYERS = '77'; + + /** + * Previous payment decision reversed (78) + * + * A previous payment decision has been reversed. + */ + public const PREVIO_PAYMEN_DECISI_REVERS = '78'; + + /** + * Not our claim, forwarded to another payer(s) (79) + * + * A request does not belong to this payer but has been forwarded to another + * payer(s). + */ + public const NOT_OUR_CLAIM_FORWAR_TO_ANOTHE_PAYERS = '79'; + + /** + * Schedule only (8) + * + * Code specifying that the message is a schedule only. + */ + public const SCHEDU_ONLY = '8'; + + /** + * Transferred to correct insurance carrier (80) + * + * The request has been transferred to the correct insurance carrier for + * processing. + */ + public const TRANSF_TO_CORREC_INSURA_CARRIE = '80'; + + /** + * Not paid, predetermination pricing only (81) + * + * Payment has not been made and the enclosed response is predetermination + * pricing only. + */ + public const NOT_PAID_PREDET_PRICIN_ONLY = '81'; + + /** + * Documentation claim (82) + * + * The claim is for documentation purposes only, no payment + */ + public const DOCUME_CLAIM = '82'; + + /** + * Reviewed (83) + * + * Assessed. + */ + public const REVIEWED = '83'; + + /** + * Repriced (84) + * + * This price was changed. + */ + public const REPRICED = '84'; + + /** + * Audited (85) + * + * An official examination has occurred. + */ + public const AUDITED = '85'; + + /** + * Conditionally paid (86) + * + * Payment has been conditionally made. + */ + public const CONDIT_PAID = '86'; + + /** + * On appeal (87) + * + * Reconsideration of the decision has been applied for. + */ + public const ON_APPEAL = '87'; + + /** + * Closed (88) + * + * Shut. + */ + public const CLOSED = '88'; + + /** + * Reaudited (89) + * + * A subsequent official examination has occurred. + */ + public const REAUDITED = '89'; + + /** + * Amendments (9) + * + * Code specifying that amendments are requested/notified. + */ + public const AMENDMENTS = '9'; + + /** + * Reissued (90) + * + * Issued again. + */ + public const REISSUED = '90'; + + /** + * Closed after reopening (91) + * + * Reopened and then closed. + */ + public const CLOSED_AFTER_REOPEN = '91'; + + /** + * Redetermined (92) + * + * Determined again or differently. + */ + public const REDETERMINED = '92'; + + /** + * Processed as primary (93) + * + * Processed as the first. + */ + public const PROCES_AS_PRIMAR = '93'; + + /** + * Processed as secondary (94) + * + * Processed as the second. + */ + public const PROCES_AS_SECOND = '94'; + + /** + * Processed as tertiary (95) + * + * Processed as the third. + */ + public const PROCES_AS_TERTIA = '95'; + + /** + * Correction of error (96) + * + * A correction to information previously communicated which contained an + * error. + */ + public const CORREC_OF_ERROR = '96'; + + /** + * Single credit item of a group (97) + * + * Notification that the credit item is a single credit item of a group of + * credit items. + */ + public const SINGLE_CREDIT_ITEM_OF_A_GROUP = '97'; + + /** + * Single debit item of a group (98) + * + * Notification that the debit item is a single debit item of a group of debit + * items. + */ + public const SINGLE_DEBIT_ITEM_OF_A_GROUP = '98'; + + /** + * Interim response (99) + * + * The response is an interim one. + */ + public const INTERI_RESPON = '99'; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdPaymentMeans.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdPaymentMeans.php new file mode 100644 index 000000000..295c5c8c0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdPaymentMeans.php @@ -0,0 +1,437 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdPaymentMeans +{ + /** + * Instrument not defined + */ + public const UNTDID_4461_1 = '1'; + + /** + * Automated clearing house credit + */ + public const UNTDID_4461_2 = '2'; + + /** + * Automated clearing house debit + */ + public const UNTDID_4461_3 = '3'; + + /** + * ACH demand debit reversal + */ + public const UNTDID_4461_4 = '4'; + + /** + * ACH demand credit reversal + */ + public const UNTDID_4461_5 = '5'; + + /** + * ACH demand credit + */ + public const UNTDID_4461_6 = '6'; + + /** + * ACH demand debit + */ + public const UNTDID_4461_7 = '7'; + + /** + * Hold + */ + public const UNTDID_4461_8 = '8'; + + /** + * National or regional clearing + */ + public const UNTDID_4461_9 = '9'; + + /** + * In cash + */ + public const UNTDID_4461_10 = '10'; + + /** + * ACH savings credit reversal + */ + public const UNTDID_4461_11 = '11'; + + /** + * ACH savings debit reversal + */ + public const UNTDID_4461_12 = '12'; + + /** + * ACH savings credit + */ + public const UNTDID_4461_13 = '13'; + + /** + * ACH savings debit + */ + public const UNTDID_4461_14 = '14'; + + /** + * Bookentry credit + */ + public const UNTDID_4461_15 = '15'; + + /** + * Bookentry debit + */ + public const UNTDID_4461_16 = '16'; + + /** + * ACH demand cash concentration/disbursement (CCD) credit + */ + public const UNTDID_4461_17 = '17'; + + /** + * ACH demand cash concentration/disbursement (CCD) debit + */ + public const UNTDID_4461_18 = '18'; + + /** + * ACH demand corporate trade payment (CTP) credit + */ + public const UNTDID_4461_19 = '19'; + + /** + * Cheque + */ + public const UNTDID_4461_20 = '20'; + + /** + * Banker's draft + */ + public const UNTDID_4461_21 = '21'; + + /** + * Certified banker's draft + */ + public const UNTDID_4461_22 = '22'; + + /** + * Bank cheque (issued by a banking or similar establishment) + */ + public const UNTDID_4461_23 = '23'; + + /** + * Bill of exchange awaiting acceptance + */ + public const UNTDID_4461_24 = '24'; + + /** + * Certified cheque + */ + public const UNTDID_4461_25 = '25'; + + /** + * Local cheque + */ + public const UNTDID_4461_26 = '26'; + + /** + * ACH demand corporate trade payment (CTP) debit + */ + public const UNTDID_4461_27 = '27'; + + /** + * ACH demand corporate trade exchange (CTX) credit + */ + public const UNTDID_4461_28 = '28'; + + /** + * ACH demand corporate trade exchange (CTX) debit + */ + public const UNTDID_4461_29 = '29'; + + /** + * Credit transfer + */ + public const UNTDID_4461_30 = '30'; + + /** + * Debit transfer + */ + public const UNTDID_4461_31 = '31'; + + /** + * ACH demand cash concentration/disbursement plus (CCD+) + */ + public const UNTDID_4461_32 = '32'; + + /** + * ACH demand cash concentration/disbursement plus (CCD+) + */ + public const UNTDID_4461_33 = '33'; + + /** + * ACH prearranged payment and deposit (PPD) + */ + public const UNTDID_4461_34 = '34'; + + /** + * ACH savings cash concentration/disbursement (CCD) credit + */ + public const UNTDID_4461_35 = '35'; + + /** + * ACH savings cash concentration/disbursement (CCD) debit + */ + public const UNTDID_4461_36 = '36'; + + /** + * ACH savings corporate trade payment (CTP) credit + */ + public const UNTDID_4461_37 = '37'; + + /** + * ACH savings corporate trade payment (CTP) debit + */ + public const UNTDID_4461_38 = '38'; + + /** + * ACH savings corporate trade exchange (CTX) credit + */ + public const UNTDID_4461_39 = '39'; + + /** + * ACH savings corporate trade exchange (CTX) debit + */ + public const UNTDID_4461_40 = '40'; + + /** + * ACH savings cash concentration/disbursement plus (CCD+) + */ + public const UNTDID_4461_41 = '41'; + + /** + * Payment to bank account + */ + public const UNTDID_4461_42 = '42'; + + /** + * ACH savings cash concentration/disbursement plus (CCD+) + */ + public const UNTDID_4461_43 = '43'; + + /** + * Accepted bill of exchange + */ + public const UNTDID_4461_44 = '44'; + + /** + * Referenced home-banking credit transfer + */ + public const UNTDID_4461_45 = '45'; + + /** + * Interbank debit transfer + */ + public const UNTDID_4461_46 = '46'; + + /** + * Home-banking debit transfer + */ + public const UNTDID_4461_47 = '47'; + + /** + * Bank card + */ + public const UNTDID_4461_48 = '48'; + + /** + * Direct debit + */ + public const UNTDID_4461_49 = '49'; + + /** + * Payment by postgiro + */ + public const UNTDID_4461_50 = '50'; + + /** + * FR, norme 6 97-Telereglement CFONB (French Organisation for + */ + public const UNTDID_4461_51 = '51'; + + /** + * Urgent commercial payment + */ + public const UNTDID_4461_52 = '52'; + + /** + * Urgent Treasury Payment + */ + public const UNTDID_4461_53 = '53'; + + /** + * Credit card + */ + public const UNTDID_4461_54 = '54'; + + /** + * Debit card + */ + public const UNTDID_4461_55 = '55'; + + /** + * Bankgiro + */ + public const UNTDID_4461_56 = '56'; + + /** + * Standing agreement + */ + public const UNTDID_4461_57 = '57'; + + /** + * SEPA credit transfer + */ + public const UNTDID_4461_58 = '58'; + + /** + * SEPA direct debit + */ + public const UNTDID_4461_59 = '59'; + + /** + * Promissory note + */ + public const UNTDID_4461_60 = '60'; + + /** + * Promissory note signed by the debtor + */ + public const UNTDID_4461_61 = '61'; + + /** + * Promissory note signed by the debtor and endorsed by a bank + */ + public const UNTDID_4461_62 = '62'; + + /** + * Promissory note signed by the debtor and endorsed by a + */ + public const UNTDID_4461_63 = '63'; + + /** + * Promissory note signed by a bank + */ + public const UNTDID_4461_64 = '64'; + + /** + * Promissory note signed by a bank and endorsed by another + */ + public const UNTDID_4461_65 = '65'; + + /** + * Promissory note signed by a third party + */ + public const UNTDID_4461_66 = '66'; + + /** + * Promissory note signed by a third party and endorsed by a + */ + public const UNTDID_4461_67 = '67'; + + /** + * Online payment service + */ + public const UNTDID_4461_68 = '68'; + + /** + * Transfer Advice + */ + public const UNTDID_4461_69 = '69'; + + /** + * Bill drawn by the creditor on the debtor + */ + public const UNTDID_4461_70 = '70'; + + /** + * Bill drawn by the creditor on a bank + */ + public const UNTDID_4461_74 = '74'; + + /** + * Bill drawn by the creditor, endorsed by another bank + */ + public const UNTDID_4461_75 = '75'; + + /** + * Bill drawn by the creditor on a bank and endorsed by a + */ + public const UNTDID_4461_76 = '76'; + + /** + * Bill drawn by the creditor on a third party + */ + public const UNTDID_4461_77 = '77'; + + /** + * Bill drawn by creditor on third party, accepted and + */ + public const UNTDID_4461_78 = '78'; + + /** + * Not transferable banker's draft + */ + public const UNTDID_4461_91 = '91'; + + /** + * Not transferable local cheque + */ + public const UNTDID_4461_92 = '92'; + + /** + * Reference giro + */ + public const UNTDID_4461_93 = '93'; + + /** + * Urgent giro + */ + public const UNTDID_4461_94 = '94'; + + /** + * Free format giro + */ + public const UNTDID_4461_95 = '95'; + + /** + * Requested method for payment was not used + */ + public const UNTDID_4461_96 = '96'; + + /** + * Clearing between partners + */ + public const UNTDID_4461_97 = '97'; + + /** + * Mutually defined + */ + public const UNTDID_4461_ZZZ = 'ZZZ'; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdReferenceCodeQualifiers.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdReferenceCodeQualifiers.php new file mode 100644 index 000000000..79f9f34a6 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdReferenceCodeQualifiers.php @@ -0,0 +1,5946 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + * @see https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:untdid.1153 + */ +class ZugferdReferenceCodeQualifiers +{ + /** + * Accident reference number (APP) + * + * Reference number assigned to an accident. + */ + public const ACCI_REFE_NUMB = 'APP'; + + /** + * Account number (ADE) + * + * Identification number of an account. + */ + public const ACCO_NUMB = 'ADE'; + + /** + * Account party's bank reference (AGC) + * + * Reference number of the account party's bank. + */ + public const ACCO_PART_BANK_REFE = 'AGC'; + + /** + * Account party's reference (AFN) + * + * Reference of the account party. + */ + public const ACCO_PART_REFE = 'AFN'; + + /** + * Account payable number (AV) + * + * Reference number assigned by accounts payable department to the account of + * a specific creditor. + */ + public const ACCO_PAYA_NUMB = 'AV'; + + /** + * Account servicing bank's reference number (ANA) + * + * Reference number of the account servicing bank. + */ + public const ACCO_SERV_BANK_REFE_NUMB = 'ANA'; + + /** + * Accounting entry (AWQ) + * + * Accounting entry to which this item is related. + */ + public const ACCO_ENTR = 'AWQ'; + + /** + * Accounting file reference (AOD) + * + * Reference of an accounting file. + */ + public const ACCO_FILE_REFE = 'AOD'; + + /** + * Accounting transmission number (ASU) + * + * A number used to identify the transmission of an accounting book entry. + */ + public const ACCO_TRAN_NUMB = 'ASU'; + + /** + * Accounts receivable number (AP) + * + * Reference number assigned by accounts receivable department to the account + * of a specific debtor. + */ + public const ACCO_RECE_NUMB = 'AP'; + + /** + * Action authorization number (AKO) + * + * A reference number authorizing an action. + */ + public const ACTI_AUTH_NUMB = 'AKO'; + + /** + * Activite Principale Exercee (APE) identifier (AQQ) + * + * The French industry code for the main activity of a company. + */ + public const ACTI_PRIN_EXER_APE_IDEN = 'AQQ'; + + /** + * Additional reference number (ACD) + * + * [1010] Reference number provided in addition to another given reference. + */ + public const ADDI_REFE_NUMB = 'ACD'; + + /** + * Addressee reference (ACF) + * + * A reference number of an addressee. + */ + public const ADDR_REFE = 'ACF'; + + /** + * Administrative Reference Code (AWT) + * + * Reference number assigned by Customs to a ‘shipment of excise goods’. + */ + public const ADMI_REFE_CODE = 'AWT'; + + /** + * Advise through bank's reference (AMP) + * + * Financial institution through which the advising bank is to advise the + * documentary credit. + */ + public const ADVI_THRO_BANK_REFE = 'AMP'; + + /** + * Advising bank's reference (AWD) + * + * Reference number of the advising bank. + */ + public const ADVI_BANK_REFE = 'AWD'; + + /** + * Agency clause number (AJE) + * + * A number indicating a clause applicable to a particular agency. + */ + public const AGEN_CLAU_NUMB = 'AJE'; + + /** + * Agent's bank reference (AGD) + * + * Reference number issued by the agent's bank. + */ + public const AGEN_BANK_REFE = 'AGD'; + + /** + * Agent's reference (AGE) + * + * Reference number of the agent. + */ + public const AGEN_REFE = 'AGE'; + + /** + * AGERD (Aerospace Ground Equipment Requirement Data) number (ALU) + * + * Identifies the equipment required to conduct maintenance. + */ + public const AGER_AERO_GROU_EQUI_REQU_DATA_NUMB = 'ALU'; + + /** + * Agreement number (AJS) + * + * A number specifying an agreement between parties. + */ + public const AGRE_NUMB = 'AJS'; + + /** + * Agreement to pay number (AGA) + * + * A number that identifies an agreement to pay. + */ + public const AGRE_TO_PAY_NUMB = 'AGA'; + + /** + * Air cargo transfer manifest (AC) + * + * A number assigned to an air cargo list of goods to be transferred. + */ + public const AIR_CARG_TRAN_MANI = 'AC'; + + /** + * Air waybill number (AWB) + * + * Reference number assigned to an air waybill, see: 1001 = 740. + */ + public const AIR_WAYB_NUMB = 'AWB'; + + /** + * Airlines flight identification number (AF) + * + * (8028) Identification of a commercial flight by carrier code and number as + * assigned by the airline (IATA). + */ + public const AIRL_FLIG_IDEN_NUMB = 'AF'; + + /** + * Allocated seat (SEA) + * + * Reference to a seat allocated to a passenger. + */ + public const ALLO_SEAT = 'SEA'; + + /** + * Allotment identification (Air) (ABY) + * + * Reference assigned to guarantied capacity on one or more specific flights + * on specific date(s) to third parties as agents and other airlines. + */ + public const ALLO_IDEN_AIR = 'ABY'; + + /** + * Analysis number/test number (ADD) + * + * Number given to a specific analysis or test operation. + */ + public const ANAL_NUMB_NUMB = 'ADD'; + + /** + * Animal farm licence number (CFF) + * + * Veterinary licence number allocated by a national authority to an animal + * farm. + */ + public const ANIM_FARM_LICE_NUMB = 'CFF'; + + /** + * Anti-dumping case number (ABC) + * + * Reference issued by a Customs administration pertaining to a past or + * current investigation of goods "dumped" at a price lower than the + * exporter's domestic market price. + */ + public const ANTI_CASE_NUMB = 'ABC'; + + /** + * Applicable coefficient identification number (APT) + * + * The identification number of the coefficient which is applicable. + */ + public const APPL_COEF_IDEN_NUMB = 'APT'; + + /** + * Applicable instructions or standards (AEH) + * + * Instructions or standards applicable for the whole message or a message + * line item. These instructions or standards may be published by a neutral + * organization or authority or another party concerned. + */ + public const APPL_INST_OR_STAN = 'AEH'; + + /** + * Applicant's bank reference (AFQ) + * + * Reference number of the applicant's bank. + */ + public const APPL_BANK_REFE = 'AFQ'; + + /** + * Applicant's reference (AGF) + * + * Reference number of the applicant. + */ + public const APPL_REFE = 'AGF'; + + /** + * Application for financial support reference number (AUK) + * + * Reference number assigned to an application for financial support. + */ + public const APPL_FOR_FINA_SUPP_REFE_NUMB = 'AUK'; + + /** + * Application reference number (AGK) + * + * A number that identifies an application reference. + */ + public const APPL_REFE_NUMB = 'AGK'; + + /** + * Appropriation number (AKP) + * + * The number identifying a type of funding for a specific purpose + * (appropriation). + */ + public const APPR_NUMB = 'AKP'; + + /** + * Article number (ABU) + * + * A number that identifies an article. + */ + public const ARTI_NUMB = 'ABU'; + + /** + * Assembly number (AEB) + * + * A number that identifies an assembly. + */ + public const ASSE_NUMB = 'AEB'; + + /** + * Associated invoices (AFL) + * + * A number that identifies associated invoices. + */ + public const ASSO_INVO = 'AFL'; + + /** + * Assuming company (ASC) + * + * A number that identifies an assuming company. + */ + public const ASSU_COMP = 'ASC'; + + /** + * ATA carnet number (ACG) + * + * Reference number assigned to an ATA carnet. + */ + public const ATA_CARN_NUMB = 'ACG'; + + /** + * Authorisation for repair reference (APV) + * + * Reference of the authorisation for repair. + */ + public const AUTH_FOR_REPA_REFE = 'APV'; + + /** + * Authority issued equipment identification (AHB) + * + * Identification issued by an authority, e.g. government, airport authority. + */ + public const AUTH_ISSU_EQUI_IDEN = 'AHB'; + + /** + * Authorization for expense (AFE) number (AE) + * + * A number that identifies an authorization for expense (AFE). + */ + public const AUTH_FOR_EXPE_AFE_NUMB = 'AE'; + + /** + * Authorization number (ANJ) + * + * A number which uniquely identifies an authorization. + */ + public const AUTH_NUMB = 'ANJ'; + + /** + * Authorization number for exception to dangerous goods regulations (ALF) + * + * Reference number allocated by an authority. This number contains an + * approval concerning exceptions on the existing dangerous goods regulations. + */ + public const AUTH_NUMB_FOR_EXCE_TO_DANG_GOOD_REGU = 'ALF'; + + /** + * Authorization to meet competition number (AU) + * + * A number assigned by a requestor to an offer incoming following request for + * quote. + */ + public const AUTH_TO_MEET_COMP_NUMB = 'AU'; + + /** + * Bankgiro reference (ATL) + * + * Reference of the Bankgiro. + */ + public const BANK_REFE = 'ATL'; + + /** + * Bank's batch interbank transaction reference number (AAH) + * + * Reference number allocated by the bank to a batch of different underlying + * interbank transactions. + */ + public const BANK_BATC_INTE_TRAN_REFE_NUMB = 'AAH'; + + /** + * Bank's common transaction reference number (AII) + * + * Bank's reference number allocated by the bank to different underlying + * individual transactions. + */ + public const BANK_COMM_TRAN_REFE_NUMB = 'AII'; + + /** + * Bank's documentary procedure reference (ATG) + * + * Reference allocated by the bank to a documentary procedure. + */ + public const BANK_DOCU_PROC_REFE = 'ATG'; + + /** + * Bank's individual interbank transaction reference number (AAI) + * + * Reference number allocated by the bank to one specific interbank + * transaction. + */ + public const BANK_INDI_INTE_TRAN_REFE_NUMB = 'AAI'; + + /** + * Bank's individual transaction reference number (AIK) + * + * Bank's reference number allocated by the bank to one specific transaction. + */ + public const BANK_INDI_TRAN_REFE_NUMB = 'AIK'; + + /** + * Banker's acceptance (ACX) + * + * Reference number for banker's acceptance issued by the accepting financial + * institution. + */ + public const BANK_ACCE = 'ACX'; + + /** + * Bankruptcy procedure number (AQZ) + * + * A number identifying a bankruptcy procedure. + */ + public const BANK_PROC_NUMB = 'AQZ'; + + /** + * Bar coded label serial number (LS) + * + * The serial number on a bar code label. + */ + public const BAR_CODE_LABE_SERI_NUMB = 'LS'; + + /** + * Batch number/lot number (BT) + * + * [7338] Reference number assigned by manufacturer to a series of similar + * products or goods produced under similar conditions. + */ + public const BATC_NUMB_NUMB = 'BT'; + + /** + * Battery and accumulator producer registration number (BTP) + * + * Registration number of producer of batteries and accumulators. + */ + public const BATT_AND_ACCU_PROD_REGI_NUMB = 'BTP'; + + /** + * Beginning job sequence number (AQN) + * + * The number designating the beginning of the job sequence. + */ + public const BEGI_JOB_SEQU_NUMB = 'AQN'; + + /** + * Beginning meter reading actual (BA) + * + * Meter reading at the beginning of an invoicing period. + */ + public const BEGI_METE_READ_ACTU = 'BA'; + + /** + * Beginning meter reading estimated (BE) + * + * Meter reading at the beginning of an invoicing period where an actual + * reading is not available. + */ + public const BEGI_METE_READ_ESTI = 'BE'; + + /** + * Beneficiary's bank reference (AFS) + * + * Reference number of the beneficiary's bank. + */ + public const BENE_BANK_REFE = 'AFS'; + + /** + * Beneficiary's reference (AFO) + * + * Reference of the beneficiary. + */ + public const BENE_REFE = 'AFO'; + + /** + * Bid number (BD) + * + * Number assigned by a submitter of a bid to his bid. + */ + public const BID_NUMB = 'BD'; + + /** + * Bill of lading number (BM) + * + * Reference number assigned to a bill of lading, see: 1001 = 705. + */ + public const BILL_OF_LADI_NUMB = 'BM'; + + /** + * Bill of quantities number (AFX) + * + * Reference number assigned to a bill of quantities. + */ + public const BILL_OF_QUAN_NUMB = 'AFX'; + + /** + * Blanket order number (BO) + * + * Reference number assigned by the order issuer to a blanket order. + */ + public const BLAN_ORDE_NUMB = 'BO'; + + /** + * Blended with number (BW) + * + * The batch/lot/package number a product is blended with. + */ + public const BLEN_WITH_NUMB = 'BW'; + + /** + * Book number (ART) + * + * A number assigned to identify a book. + */ + public const BOOK_NUMB = 'ART'; + + /** + * Bordereau number (AFC) + * + * Reference number assigned to a bordereau, see: 1001 = 787. + */ + public const BORD_NUMB = 'AFC'; + + /** + * Broker or sales office number (BR) + * + * A number that identifies a broker or sales office. + */ + public const BROK_OR_SALE_OFFI_NUMB = 'BR'; + + /** + * Broker reference 3 (AVK) + * + * Third reference of a broker. + */ + public const BROK_REFE = 'AVK'; + + /** + * Budget chapter (ASD) + * + * A reference to the chapter in a budget. + */ + public const BUDG_CHAP = 'ASD'; + + /** + * Bureau signing (statement reference) (ADI) + * + * A statement reference that identifies a bureau signing. + */ + public const BURE_SIGN_STAT_REFE = 'ADI'; + + /** + * Buyer's catalogue number (AMW) + * + * Identification of a catalogue maintained by a buyer. + */ + public const BUYE_CATA_NUMB = 'AMW'; + + /** + * Buyer's contract number (BC) + * + * Reference number assigned by buyer to a contract. + */ + public const BUYE_CONT_NUMB = 'BC'; + + /** + * Buyer's debtor number (DB) + * + * Reference number assigned to a debtor. + */ + public const BUYE_DEBT_NUMB = 'DB'; + + /** + * Buyer's fund number (AWW) + * + * A reference number indicating the fund number used by the buyer. + */ + public const BUYE_FUND_NUMB = 'AWW'; + + /** + * Buyer's item number (ADA) + * + * [7304] Reference number assigned by the buyer to an item. + */ + public const BUYE_ITEM_NUMB = 'ADA'; + + /** + * CAD file layer convention (ANF) + * + * Reference number identifying a layer convention for a file in a Computer + * Aided Design (CAD) environment. + */ + public const CAD_FILE_LAYE_CONV = 'ANF'; + + /** + * Cadastro Geral do Contribuinte (CGC) (ASW) + * + * Brazilian taxpayer number. + */ + public const CADA_GERA_DO_CONT_CGC = 'ASW'; + + /** + * Calendar (AOJ) + * + * A calendar reference number. + */ + public const CALENDAR = 'AOJ'; + + /** + * Call off order number (COF) + * + * A number that identifies a call off order. + */ + public const CALL_OFF_ORDE_NUMB = 'COF'; + + /** + * Canadian excise entry number (AMN) + * + * An excise entry number assigned by the Canadian Customs. + */ + public const CANA_EXCI_ENTR_NUMB = 'AMN'; + + /** + * Cargo acceptance order reference number (ACA) + * + * Reference assigned to the cargo acceptance order. + */ + public const CARG_ACCE_ORDE_REFE_NUMB = 'ACA'; + + /** + * Cargo control number (XC) + * + * Reference used to identify and control a carrier and consignment from + * initial entry into a country until release of the cargo by Customs. + */ + public const CARG_CONT_NUMB = 'XC'; + + /** + * Cargo manifest number (AFB) + * + * [1037] Reference number assigned to a cargo manifest. + */ + public const CARG_MANI_NUMB = 'AFB'; + + /** + * Carrier's agent reference number (AAY) + * + * Reference number assigned by the carriers agent to a transaction. + */ + public const CARR_AGEN_REFE_NUMB = 'AAY'; + + /** + * Carrier's reference number (CN) + * + * Reference number assigned by carrier to a consignment. + */ + public const CARR_REFE_NUMB = 'CN'; + + /** + * Case number (AMH) + * + * Number assigned to a case. + */ + public const CASE_NUMB = 'AMH'; + + /** + * Case of need party's reference (ANO) + * + * Reference number of the case of need party. + */ + public const CASE_OF_NEED_PART_REFE = 'ANO'; + + /** + * Catalogue sequence number (AKS) + * + * A number which uniquely identifies an item within a catalogue according to + * a standard numbering system. + */ + public const CATA_SEQU_NUMB = 'AKS'; + + /** + * Catastrophe number (ADG) + * + * A number that identifies a catastrophe. + */ + public const CATA_NUMB = 'ADG'; + + /** + * Category of work reference (AWH) + * + * A reference identifying a category of work. + */ + public const CATE_OF_WORK_REFE = 'AWH'; + + /** + * CD-ROM (ASY) + * + * Identity number of the Compact Disk Read Only Memory (CD-ROM). + */ + public const CDROM = 'ASY'; + + /** + * Cedent's claim number (APD) + * + * To identify the number assigned to the claim by the ceding company. + */ + public const CEDE_CLAI_NUMB = 'APD'; + + /** + * Ceding company (CEC) + * + * Company selling obligations to a third party. + */ + public const CEDI_COMP = 'CEC'; + + /** + * Ceiling formula reference number (APJ) + * + * The reference number which identifies a formula for determining a ceiling. + */ + public const CEIL_FORM_REFE_NUMB = 'APJ'; + + /** + * Central secretariat log number (AQE) + * + * The reference log number assigned by the central secretariat for the Data + * Maintenance Request (DMR). + */ + public const CENT_SECR_LOG_NUMB = 'AQE'; + + /** + * Central secretariat log number, child Data Maintenance Request (DMR) (AQG) + * + * The reference log number assigned by the central secretariat for the child + * Data Maintenance Request (DMR). + */ + public const CENT_SECR_LOG_NUMB_CHIL_DATA_MAIN_REQU_DMR = 'AQG'; + + /** + * Central secretariat log number, parent Data Maintenance Request (DMR) (AQF) + * + * The reference log number assigned by the central secretariat for the parent + * Data Maintenance Request (DMR). + */ + public const CENT_SECR_LOG_NUMB_PARE_DATA_MAIN_REQU_DMR = 'AQF'; + + /** + * Certificate of conformity (AID) + * + * Certificate certifying the conformity to predefined definitions. + */ + public const CERT_OF_CONF = 'AID'; + + /** + * Chamber of Commerce registration number (AHO) + * + * The registration number by which a company/organization is known to the + * Chamber of Commerce. + */ + public const CHAM_OF_COMM_REGI_NUMB = 'AHO'; + + /** + * Charge card account number (AIU) + * + * Number to identify charge card account. + */ + public const CHAR_CARD_ACCO_NUMB = 'AIU'; + + /** + * Charges note document attachment indicator (CNO) + * + * [1070] Indication that a charges note has been established and attached to + * a transport contract document or not. + */ + public const CHAR_NOTE_DOCU_ATTA_INDI = 'CNO'; + + /** + * Checking number (CKN) + * + * Number assigned by checking party to one specific check action. + */ + public const CHEC_NUMB = 'CKN'; + + /** + * Cheque number (CK) + * + * Unique number assigned to one specific cheque. + */ + public const CHEQ_NUMB = 'CK'; + + /** + * Circular publication number (AJF) + * + * A number specifying a circular publication. + */ + public const CIRC_PUBL_NUMB = 'AJF'; + + /** + * Civil action number (AAX) + * + * A reference number identifying the civil action. + */ + public const CIVI_ACTI_NUMB = 'AAX'; + + /** + * Clave Unica de Identificacion Tributaria (CUIT) (ATU) + * + * Tax identification number in Argentina. + */ + public const CLAV_UNIC_DE_IDEN_TRIB_CUIT = 'ATU'; + + /** + * Clearing reference (ANX) + * + * Reference allocated by a clearing procedure. + */ + public const CLEA_REFE = 'ANX'; + + /** + * Cold roll number (ACQ) + * + * Number attributed to a cold roll coil. + */ + public const COLD_ROLL_NUMB = 'ACQ'; + + /** + * Collecting bank's reference (ANP) + * + * Reference number of the collecting bank. + */ + public const COLL_BANK_REFE = 'ANP'; + + /** + * Collection advice document identifier (ACN) + * + * [1030] Reference number to identify a collection advice document. + */ + public const COLL_ADVI_DOCU_IDEN = 'ACN'; + + /** + * Collection instrument number (ATN) + * + * To identify the number of an instrument used to remit funds to a + * beneficiary. + */ + public const COLL_INST_NUMB = 'ATN'; + + /** + * Collection reference (AUD) + * + * A reference identifying a collection. + */ + public const COLL_REFE = 'AUD'; + + /** + * Commercial account summary reference number (APQ) + * + * A reference number identifying a commercial account summary. + */ + public const COMM_ACCO_SUMM_REFE_NUMB = 'APQ'; + + /** + * Commodity number (AED) + * + * A number that identifies a commodity. + */ + public const COMM_NUMB = 'AED'; + + /** + * Common transaction reference number (AIH) + * + * Reference number applicable to different underlying individual + * transactions. + */ + public const COMM_TRAN_REFE_NUMB = 'AIH'; + + /** + * Companies Registry Office (CRO) number (ARC) + * + * Identifies the reference number assigned by the Companies Registry Office + * (CRO). + */ + public const COMP_REGI_OFFI_CRO_NUMB = 'ARC'; + + /** + * Company / syndicate reference 2 (ADK) + * + * Second reference of a company/syndicate. + */ + public const COMP_SYND_REFE = 'ADK'; + + /** + * Company issued equipment ID (AGP) + * + * Owner/operator, non-government issued equipment reference number. + */ + public const COMP_ISSU_EQUI_ID = 'AGP'; + + /** + * Company trading account number (AWX) + * + * A reference number identifying a company trading account. + */ + public const COMP_TRAD_ACCO_NUMB = 'AWX'; + + /** + * Company/place registration number (XA) + * + * Company registration and place as legally required. + */ + public const COMP_REGI_NUMB = 'XA'; + + /** + * Completed units payment request reference (ANB) + * + * A reference to a payment request for completed units. + */ + public const COMP_UNIT_PAYM_REQU_REFE = 'ANB'; + + /** + * Compliance code number (AIA) + * + * Number assigned to indicate regulatory compliance. + */ + public const COMP_CODE_NUMB = 'AIA'; + + /** + * Condition of purchase document number (CP) + * + * Reference number identifying the conditions of purchase relevant to a + * purchase. + */ + public const COND_OF_PURC_DOCU_NUMB = 'CP'; + + /** + * Condition of sale document number (CS) + * + * Reference number identifying the conditions of sale relevant to a sale. + */ + public const COND_OF_SALE_DOCU_NUMB = 'CS'; + + /** + * Connected location (AWN) + * + * Reference of a connected location. + */ + public const CONN_LOCA = 'AWN'; + + /** + * Connecting point to central grid (AUV) + * + * Reference to a connecting point to a central grid. + */ + public const CONN_POIN_TO_CENT_GRID = 'AUV'; + + /** + * Consignor's further order (CFO) + * + * Reference of an order given by the consignor after departure of the means + * of transport. + */ + public const CONS_FURT_ORDE = 'CFO'; + + /** + * Consolidated invoice number (AIZ) + * + * Invoice number into which other invoices are consolidated. + */ + public const CONS_INVO_NUMB = 'AIZ'; + + /** + * Consignee's order number (CG) + * + * A number that identifies a consignee's order. + */ + public const CONS_ORDE_NUMB = 'CG'; + + /** + * Consignee's reference (ANT) + * + * Reference number of the consignee. + */ + public const CONS_REFE = 'ANT'; + + /** + * Consignment contract number (AXP) + * + * Reference number identifying a consignment contract. + */ + public const CONS_CONT_NUMB = 'AXP'; + + /** + * Consignment identifier, carrier assigned (BN) + * + * [1016] Reference number assigned by a carrier of its agent to identify a + * specific consignment such as a booking reference number when cargo space is + * reserved prior to loading. + */ + public const CONS_IDEN_CARR_ASSI = 'BN'; + + /** + * Consignment identifier, consignor assigned (CU) + * + * [1140] Reference number assigned by the consignor to identify a particular + * consignment. + */ + public const CONS_IDEN_CONS_ASSI = 'CU'; + + /** + * Consignment identifier, freight forwarder assigned (FF) + * + * [1460] Reference number assigned by the freight forwarder to identify a + * particular consignment. + */ + public const CONS_IDEN_FREI_FORW_ASSI = 'FF'; + + /** + * Consignment information (AVL) + * + * Code identifying that the reference number given applies to the consignment + * information segment group in the referred message . + */ + public const CONS_INFO = 'AVL'; + + /** + * Consignment receipt identifier (REN) + * + * [1150] Reference number assigned to identify a consignment upon its arrival + * at its destination. + */ + public const CONS_RECE_IDEN = 'REN'; + + /** + * Consignment stock contract (AUF) + * + * Reference identifying a consignment stock contract. + */ + public const CONS_STOC_CONT = 'AUF'; + + /** + * Consolidated orders' reference (AUP) + * + * A reference number to identify orders which have been, or shall be + * consolidated. + */ + public const CONS_ORDE_REFE = 'AUP'; + + /** + * Constraint notation (AOX) + * + * Identifies a reference to a constraint notation. + */ + public const CONS_NOTA = 'AOX'; + + /** + * Consumption data request number (AMF) + * + * A number which identifies a request for consumption data. + */ + public const CONS_DATA_REQU_NUMB = 'AMF'; + + /** + * Container disposition order reference number (AKA) + * + * Reference assigned to the empty container disposition order. + */ + public const CONT_DISP_ORDE_REFE_NUMB = 'AKA'; + + /** + * Container operators reference number (CV) + * + * Reference number assigned by the party operating or controlling the + * transport container to a transaction or consignment. + */ + public const CONT_OPER_REFE_NUMB = 'CV'; + + /** + * Container prefix (AKB) + * + * The first part of the unique identification of a container formed by an + * alpha code identifying the owner of the container. + */ + public const CONT_PREF = 'AKB'; + + /** + * Container work order reference number (ADO) + * + * Reference number assigned by the principal to the work order for a (set of) + * container(s). + */ + public const CONT_WORK_ORDE_REFE_NUMB = 'ADO'; + + /** + * Container/equipment receipt number (ER) + * + * Number of the Equipment Interchange Receipt issued for full or empty + * equipment received. + */ + public const CONT_RECE_NUMB = 'ER'; + + /** + * Contract breakdown reference (APR) + * + * A reference which identifies a specific breakdown of a contract. + */ + public const CONT_BREA_REFE = 'APR'; + + /** + * Contract document addendum identifier (AAD) + * + * [1318] Reference number to identify an addendum to a contract. + */ + public const CONT_DOCU_ADDE_IDEN = 'AAD'; + + /** + * Contract number (CT) + * + * [1296] Reference number of a contract concluded between parties. + */ + public const CONT_NUMB = 'CT'; + + /** + * Contract party reference number (AGB) + * + * Reference number assigned to a party for a particular contract. + */ + public const CONT_PART_REFE_NUMB = 'AGB'; + + /** + * Contractor registration number (APS) + * + * A reference number used to identify a contractor. + */ + public const CONT_REGI_NUMB = 'APS'; + + /** + * Contractor request reference (APO) + * + * Reference identifying a request made by a contractor. + */ + public const CONT_REQU_REFE = 'APO'; + + /** + * Converted Postgiro number (ATO) + * + * To identify the reference number of a giro payment having been converted to + * a Postgiro account. + */ + public const CONV_POST_NUMB = 'ATO'; + + /** + * Cooperation contract number (CZ) + * + * Number issued by a party concerned given to a contract on cooperation of + * two or more parties. + */ + public const COOP_CONT_NUMB = 'CZ'; + + /** + * Cost account (AOU) + * + * A cost control account reference. + */ + public const COST_ACCO = 'AOU'; + + /** + * Cost accounting document (CAY) + * + * The reference to a cost accounting document. + */ + public const COST_ACCO_DOCU = 'CAY'; + + /** + * Cost centre (AWE) + * + * A number identifying a cost centre. + */ + public const COST_CENT = 'AWE'; + + /** + * Cost centre alignment number (ATP) + * + * Number used in the financial management process to align cost allocations. + */ + public const COST_CENT_ALIG_NUMB = 'ATP'; + + /** + * Costa Rican judicial number (ARD) + * + * A number assigned by the government to a business in Costa Rica. + */ + public const COST_RICA_JUDI_NUMB = 'ARD'; + + /** + * Credit memo number (CM) + * + * Reference number assigned by issuer to a credit memo. + */ + public const CRED_MEMO_NUMB = 'CM'; + + /** + * Credit note number (CD) + * + * [1113] Reference number assigned to a credit note. + */ + public const CRED_NOTE_NUMB = 'CD'; + + /** + * Credit rating agency's reference number (AGH) + * + * Reference number assigned by a credit rating agency to a debtor. + */ + public const CRED_RATI_AGEN_REFE_NUMB = 'AGH'; + + /** + * Creditor's reference number (AHL) + * + * Reference number of the party to whom a debt is owed. + */ + public const CRED_REFE_NUMB = 'AHL'; + + /** + * Current invoice number (OH) + * + * Reference number identifying the current invoice. + */ + public const CURR_INVO_NUMB = 'OH'; + + /** + * Customer catalogue number (CH) + * + * Number identifying a catalogue for customer's usage. + */ + public const CUST_CATA_NUMB = 'CH'; + + /** + * Customer material specification number (ACJ) + * + * Number for a material specification given by customer. + */ + public const CUST_MATE_SPEC_NUMB = 'ACJ'; + + /** + * Customer process specification number (AEF) + * + * Retrieval number for a process specification defined by customer. + */ + public const CUST_PROC_SPEC_NUMB = 'AEF'; + + /** + * Customer reference number (CR) + * + * Reference number assigned by the customer to a transaction. + */ + public const CUST_REFE_NUMB = 'CR'; + + /** + * Customer reference number assigned to previous balance of payment + * information (ALC) + * + * Identification number of the previous balance of payments information from + * customer message. + */ + public const CUST_REFE_NUMB_ASSI_TO_PREV_BALA_OF_PAYM_INFO = 'ALC'; + + /** + * Customer specification number (AEG) + * + * Retrieval number for a specification defined by customer. + */ + public const CUST_SPEC_NUMB = 'AEG'; + + /** + * Customer travel service identifier (AVI) + * + * A reference identifying a travel service to a customer. + */ + public const CUST_TRAV_SERV_IDEN = 'AVI'; + + /** + * Customer's common transaction reference number (AIL) + * + * Customer's reference number allocated by the customer to different + * underlying individual transactions. + */ + public const CUST_COMM_TRAN_REFE_NUMB = 'AIL'; + + /** + * Customer's documentary procedure reference (ATH) + * + * Reference allocated by a customer to a documentary procedure. + */ + public const CUST_DOCU_PROC_REFE = 'ATH'; + + /** + * Customer's individual transaction reference number (AIJ) + * + * Customer's reference number allocated by the customer to one specific + * transaction. + */ + public const CUST_INDI_TRAN_REFE_NUMB = 'AIJ'; + + /** + * Customer's unit inventory number (AEN) + * + * Number assigned by customer to a unique unit for inventory purposes. + */ + public const CUST_UNIT_INVE_NUMB = 'AEN'; + + /** + * Customs binding ruling number (AUQ) + * + * Binding ruling number issued by customs. + */ + public const CUST_BIND_RULI_NUMB = 'AUQ'; + + /** + * Customs decision request number (ABG) + * + * Reference issued by Customs pertaining to a pending tariff classification + * decision requested by an importer or agent. + */ + public const CUST_DECI_REQU_NUMB = 'ABG'; + + /** + * Customs guarantee number (ABL) + * + * Reference assigned to a Customs guarantee. + */ + public const CUST_GUAR_NUMB = 'ABL'; + + /** + * Customs item number (AFD) + * + * Number (1496 in CST) assigned by the declarant to an item. + */ + public const CUST_ITEM_NUMB = 'AFD'; + + /** + * Customs non-binding ruling number (AUR) + * + * Non-binding ruling number issued by customs. + */ + public const CUST_NONB_RULI_NUMB = 'AUR'; + + /** + * Customs pre-approval ruling number (AUZ) + * + * Pre-approval ruling number issued by Customs. + */ + public const CUST_PREA_RULI_NUMB = 'AUZ'; + + /** + * Customs preference inquiry number (AIP) + * + * The number assigned by Customs to a preference inquiry. + */ + public const CUST_PREF_INQU_NUMB = 'AIP'; + + /** + * Customs release code (AHZ) + * + * A code associated to a requirement that must be presented to gain the + * release of goods by Customs. + */ + public const CUST_RELE_CODE = 'AHZ'; + + /** + * Customs tariff number (ABD) + * + * (7357) Code number of the goods in accordance with the tariff nomenclature + * system of classification in use where the Customs declaration is made. + */ + public const CUST_TARI_NUMB = 'ABD'; + + /** + * Customs transhipment number (AIO) + * + * Approval number issued by Customs for cargo to be transhipped under Customs + * control. + */ + public const CUST_TRAN_NUMB = 'AIO'; + + /** + * Customs valuation decision number (ABA) + * + * Reference by an importing party to a previous decision made by a Customs + * administration regarding the valuation of goods. + */ + public const CUST_VALU_DECI_NUMB = 'ABA'; + + /** + * Dangerous Goods information (AVN) + * + * Code identifying that the reference number given applies to the dangerous + * goods information segment group in the referred message. + */ + public const DANG_GOOD_INFO = 'AVN'; + + /** + * Dangerous goods security number (ALG) + * + * Reference number allocated by an authority in order to control the + * dangerous goods on board of a specific means of transport for dangerous + * goods security purposes. + */ + public const DANG_GOOD_SECU_NUMB = 'ALG'; + + /** + * Dangerous goods transport licence number (ALH) + * + * Licence number allocated by an authority as to the permission of carrying + * dangerous goods by a specific means of transport. + */ + public const DANG_GOOD_TRAN_LICE_NUMB = 'ALH'; + + /** + * Data structure tag (AQD) + * + * The tag assigned to a data structure. + */ + public const DATA_STRU_TAG = 'AQD'; + + /** + * Debit account number (DAN) + * + * Reference number assigned by issuer to a debit account. + */ + public const DEBI_ACCO_NUMB = 'DAN'; + + /** + * Debit card number (AAF) + * + * A reference number identifying a debit card. + */ + public const DEBI_CARD_NUMB = 'AAF'; + + /** + * Debit letter number (CED) + * + * Reference number identifying the letter of debit document. + */ + public const DEBI_LETT_NUMB = 'CED'; + + /** + * Debit note number (DL) + * + * [1117] Reference number assigned by issuer to a debit note. + */ + public const DEBI_NOTE_NUMB = 'DL'; + + /** + * Debit reference number (AOI) + * + * The reference number of a debit instruction. + */ + public const DEBI_REFE_NUMB = 'AOI'; + + /** + * Debtor's reference number (AHM) + * + * Reference number of the party who owes an amount of money. + */ + public const DEBT_REFE_NUMB = 'AHM'; + + /** + * Declarant's Customs identity number (ABP) + * + * Reference to the party whose posted bond or security is being declared in + * order to accept responsibility for a goods declaration and the applicable + * duties and taxes. + */ + public const DECL_CUST_IDEN_NUMB = 'ABP'; + + /** + * Declarant's reference number (ABE) + * + * Unique reference number assigned to a document or a message by the + * declarant for identification purposes. + */ + public const DECL_REFE_NUMB = 'ABE'; + + /** + * Defense priorities allocation system priority rating (AJQ) + * + * A reference indicating a priority rating assigned to allocate resources for + * defense purchases. + */ + public const DEFE_PRIO_ALLO_SYST_PRIO_RATI = 'AJQ'; + + /** + * Deferment approval number (DA) + * + * Number assigned by authorities to a party to approve deferment of payment + * of tax or duties. + */ + public const DEFE_APPR_NUMB = 'DA'; + + /** + * Delivery note number (DQ) + * + * [1033] Reference number assigned by the issuer to a delivery note. + */ + public const DELI_NOTE_NUMB = 'DQ'; + + /** + * Delivery number (transport) (AEL) + * + * Reference number by which a haulier/carrier will announce himself at the + * container terminal or depot when delivering equipment. + */ + public const DELI_NUMB_TRAN = 'AEL'; + + /** + * Delivery order number (AAJ) + * + * Reference number assigned by issuer to a delivery order. + */ + public const DELI_ORDE_NUMB = 'AAJ'; + + /** + * Delivery route reference (AUS) + * + * A reference to the route of the delivery. + */ + public const DELI_ROUT_REFE = 'AUS'; + + /** + * Delivery schedule number (AAN) + * + * Reference number assigned by buyer to a delivery schedule. + */ + public const DELI_SCHE_NUMB = 'AAN'; + + /** + * Delivery verification certificate (AGL) + * + * Formal identification of delivery verification certificate which is a + * formal document from Customs etc. confirming that physical goods have been + * delivered. It may be needed to support a tax reclaim based on an invoice. + */ + public const DELI_VERI_CERT = 'AGL'; + + /** + * Department (AOQ) + * + * Section of an organisation. + */ + public const DEPARTMENT = 'AOQ'; + + /** + * Department number (AMV) + * + * Number assigned to a department within an organization. + */ + public const DEPA_NUMB = 'AMV'; + + /** + * Department of transportation bond number (AIB) + * + * Number of a bond assigned by the department of transportation. + */ + public const DEPA_OF_TRAN_BOND_NUMB = 'AIB'; + + /** + * Deposit reference number (ANL) + * + * A reference number identifying a deposit. + */ + public const DEPO_REFE_NUMB = 'ANL'; + + /** + * Despatch advice number (AAK) + * + * [1035] Reference number assigned by issuing party to a despatch advice. + */ + public const DESP_ADVI_NUMB = 'AAK'; + + /** + * Despatch note (post parcels) number (AEZ) + * + * (1128) Reference number assigned to a despatch note (post parcels), see: + * 1001 = 750. + */ + public const DESP_NOTE_POST_PARC_NUMB = 'AEZ'; + + /** + * Despatch note document identifier (AAU) + * + * [1128] Reference number to identify a Despatch Note. + */ + public const DESP_NOTE_DOCU_IDEN = 'AAU'; + + /** + * Direct debit reference (AKJ) + * + * Reference number assigned to the direct debit operation. + */ + public const DIRE_DEBI_REFE = 'AKJ'; + + /** + * Direct payment valuation number (AFT) + * + * Reference number assigned to a direct payment valuation. + */ + public const DIRE_PAYM_VALU_NUMB = 'AFT'; + + /** + * Direct payment valuation request number (AFU) + * + * Reference number assigned to a direct payment valuation request. + */ + public const DIRE_PAYM_VALU_REQU_NUMB = 'AFU'; + + /** + * Dispensation reference (ASA) + * + * A reference number assigned to an official exemption from a law or + * obligation. + */ + public const DISP_REFE = 'ASA'; + + /** + * Dispute number (AGG) + * + * Reference number to a dispute notice. + */ + public const DISP_NUMB = 'AGG'; + + /** + * Distributor invoice number (DI) + * + * Reference number assigned by issuer to a distributor invoice. + */ + public const DIST_INVO_NUMB = 'DI'; + + /** + * Dock receipt number (DR) + * + * Number of the cargo receipt submitted when cargo is delivered to a marine + * terminal. + */ + public const DOCK_RECE_NUMB = 'DR'; + + /** + * Docket number (AAW) + * + * A reference number identifying the docket. + */ + public const DOCK_NUMB = 'AAW'; + + /** + * Document identifier (DM) + * + * [1004] Reference number identifying a specific document. + */ + public const DOCU_IDEN = 'DM'; + + /** + * Document line identifier (LI) + * + * [1156] To identify a line of a document. + */ + public const DOCU_LINE_IDEN = 'LI'; + + /** + * Document page identifier (ARO) + * + * [1212] To identify a page number. + */ + public const DOCU_PAGE_IDEN = 'ARO'; + + /** + * Document reference, internal (CAW) + * + * Internal reference to a document. + */ + public const DOCU_REFE_INTE = 'CAW'; + + /** + * Document reference, original (AWR) + * + * The original reference of a document. + */ + public const DOCU_REFE_ORIG = 'AWR'; + + /** + * Document volume number (ARS) + * + * The number of a document volume. + */ + public const DOCU_VOLU_NUMB = 'ARS'; + + /** + * Documentary credit amendment number (AWC) + * + * Number of the amendment of the documentary credit. + */ + public const DOCU_CRED_AMEN_NUMB = 'AWC'; + + /** + * Documentary credit identifier (AAC) + * + * [1172] Reference number to identify a documentary credit. + */ + public const DOCU_CRED_IDEN = 'AAC'; + + /** + * Documentary payment reference (AOA) + * + * Reference of the documentary payment. + */ + public const DOCU_PAYM_REFE = 'AOA'; + + /** + * Domestic flight number (AGQ) + * + * Airline flight number assigned to a flight originating and terminating + * within the same country. + */ + public const DOME_FLIG_NUMB = 'AGQ'; + + /** + * Domestic inventory management code (ALB) + * + * Code to identify the management of domestic inventory. + */ + public const DOME_INVE_MANA_CODE = 'ALB'; + + /** + * Drawee's reference (ANN) + * + * Reference number of the drawee. + */ + public const DRAW_REFE = 'ANN'; + + /** + * Drawing list number (AEQ) + * + * Reference number identifying a drawing list. + */ + public const DRAW_LIST_NUMB = 'AEQ'; + + /** + * Drawing number (AAL) + * + * Reference number identifying a specific product drawing. + */ + public const DRAW_NUMB = 'AAL'; + + /** + * Dun and Bradstreet Canada's 8 digit Standard Industrial Classification + * (SIC) code (AQP) + * + * Dun and Bradstreet Canada's 8 digit Standard Industrial Classification + * (SIC) code identifying activities of the company. + */ + public const DUN_AND_BRAD_CANA__DIGI_STAN_INDU_CLAS_SIC_CODE = 'AQP'; + + /** + * Dun and Bradstreet US 8 digit Standard Industrial Classification (SIC) code (AQR) + * + * Dun and Bradstreet United States' 8 digit Standard Industrial + * Classification (SIC) code identifying activities of the company. + */ + public const DUN_AND_BRAD_US__DIGI_STAN_INDU_CLAS_SIC_CODE = 'AQR'; + + /** + * Duty free products receipt authorisation number (ASF) + * + * Authorisation number allocated for the receipt of duty free products. + */ + public const DUTY_FREE_PROD_RECE_AUTH_NUMB = 'ASF'; + + /** + * Duty free products security number (ASE) + * + * A security number allocated for duty free products. + */ + public const DUTY_FREE_PROD_SECU_NUMB = 'ASE'; + + /** + * Duty memo number (ACY) + * + * Reference number assigned by customs to a duty memo. + */ + public const DUTY_MEMO_NUMB = 'ACY'; + + /** + * Economic Operators Registration and Identification Number (EORI) (AVY) + * + * Number assigned by an authority to an economic operator. + */ + public const ECON_OPER_REGI_AND_IDEN_NUMB_EORI = 'AVY'; + + /** + * Electrical and electronic equipment producer registration number (EEP) + * + * Registration number of producer of electrical and electronic equipment. + */ + public const ELEC_AND_ELEC_EQUI_PROD_REGI_NUMB = 'EEP'; + + /** + * Embargo number (EN) + * + * Number assigned to specific goods or a family of goods in a classification + * of embargo measures. + */ + public const EMBA_NUMB = 'EN'; + + /** + * Embargo permit number (EB) + * + * Reference number assigned by issuer to an embargo permit. + */ + public const EMBA_PERM_NUMB = 'EB'; + + /** + * Employer identification number of service bureau (AGS) + * + * Reference number assigned by a service/processing bureau to an employer. + */ + public const EMPL_IDEN_NUMB_OF_SERV_BURE = 'AGS'; + + /** + * Employer's identification number (EI) + * + * Number issued by an authority to identify an employer. + */ + public const EMPL_IDEN_NUMB = 'EI'; + + /** + * Empty container bill number (AEW) + * + * Reference number assigned to an empty container bill, see: 1001 = 708. + */ + public const EMPT_CONT_BILL_NUMB = 'AEW'; + + /** + * End item number (AJU) + * + * A number specifying the end item applicable to a subordinate item. + */ + public const END_ITEM_NUMB = 'AJU'; + + /** + * End use authorization number (ABB) + * + * Reference issued by a Customs administration authorizing a preferential + * rate of duty if a product is used for a specified purpose, see: 1001 = 990. + */ + public const END_USE_AUTH_NUMB = 'ABB'; + + /** + * Ending job sequence number (JE) + * + * A number that identifies the ending job sequence. + */ + public const ENDI_JOB_SEQU_NUMB = 'JE'; + + /** + * Ending meter reading actual (EA) + * + * Meter reading at the end of an invoicing period. + */ + public const ENDI_METE_READ_ACTU = 'EA'; + + /** + * Ending meter reading estimated (EE) + * + * Meter reading at the end of an invoicing period where an actual reading is + * not available. + */ + public const ENDI_METE_READ_ESTI = 'EE'; + + /** + * Enquiry number (AAV) + * + * Reference number assigned to an enquiry. + */ + public const ENQU_NUMB = 'AAV'; + + /** + * Entity reference number, previous (AUX) + * + * The previous reference number assigned to an entity. + */ + public const ENTI_REFE_NUMB_PREV = 'AUX'; + + /** + * Entry flagging (CAU) + * + * Reference to a flagging of entries. + */ + public const ENTR_FLAG = 'CAU'; + + /** + * Entry point assessment log number (AQA) + * + * The reference log number assigned by an entry point assessment group for + * the DMR. + */ + public const ENTR_POIN_ASSE_LOG_NUMB = 'AQA'; + + /** + * Entry point assessment log number, child DMR (AQC) + * + * The reference log number assigned by an entry point assessment group for a + * child Data Maintenance Request (DMR). + */ + public const ENTR_POIN_ASSE_LOG_NUMB_CHIL_DMR = 'AQC'; + + /** + * Entry point assessment log number, parent DMR (AQB) + * + * The reference log number assigned by an entry point assessment group for + * the parent Data Maintenance Request (DMR). + */ + public const ENTR_POIN_ASSE_LOG_NUMB_PARE_DMR = 'AQB'; + + /** + * Equipment number (EQ) + * + * Number assigned by the manufacturer to specific equipment. + */ + public const EQUI_NUMB = 'EQ'; + + /** + * Equipment owner reference number (APC) + * + * Reference number issued by the owner of the equipment. + */ + public const EQUI_OWNE_REFE_NUMB = 'APC'; + + /** + * Equipment sequence number (SQ) + * + * (1492) A temporary reference number identifying a particular piece of + * equipment within a series of pieces of equipment. + */ + public const EQUI_SEQU_NUMB = 'SQ'; + + /** + * Equipment transport charge number (ACZ) + * + * Reference assigned to a specific equipment transportation charge. + */ + public const EQUI_TRAN_CHAR_NUMB = 'ACZ'; + + /** + * Error position (AWL) + * + * Reference to the position of an error in a message. + */ + public const ERRO_POSI = 'AWL'; + + /** + * Estimate order reference number (ACV) + * + * Reference number assigned by the ordering party of the estimate order. + */ + public const ESTI_ORDE_REFE_NUMB = 'ACV'; + + /** + * ETERMS reference (AOY) + * + * Identifies a reference to the ICC (International Chamber of Commerce) + * ETERMS(tm) repository of electronic commerce trading terms and conditions. + */ + public const ETER_REFE = 'AOY'; + + /** + * Eur 1 certificate number (AEE) + * + * Reference number assigned to a Eur 1 certificate. + */ + public const EUR__CERT_NUMB = 'AEE'; + + /** + * European Value Added Tax identification (CAX) + * + * Value Added Tax identification number according to European regulation. + */ + public const EURO_VALU_ADDE_TAX_IDEN = 'CAX'; + + /** + * Event reference number (AIV) + * + * [1007] Reference number identifying an event. + */ + public const EVEN_REFE_NUMB = 'AIV'; + + /** + * Exceptional transport authorisation number (ATT) + * + * Authorisation number for exceptional transport (using specific equipment, + * out of gauge, materials and/or specific routing). + */ + public const EXCE_TRAN_AUTH_NUMB = 'ATT'; + + /** + * Excess transportation number (ET) + * + * (1041) Number assigned to excess transport. + */ + public const EXCE_TRAN_NUMB = 'ET'; + + /** + * Export clearance instruction reference number (ABR) + * + * Reference number of the clearance instructions given by the consignor + * through different means. + */ + public const EXPO_CLEA_INST_REFE_NUMB = 'ABR'; + + /** + * Export control classification number (AVJ) + * + * Number identifying the classification of goods covered by an export + * licence. + */ + public const EXPO_CONT_CLAS_NUMB = 'AVJ'; + + /** + * Export Control Commodity number (ECCN) (AFE) + * + * Reference number to relevant item within Commodity Control List covering + * actual products change functionality. + */ + public const EXPO_CONT_COMM_NUMB_ECCN = 'AFE'; + + /** + * Export declaration (ED) + * + * Number assigned by the exporter to his export declaration number submitted + * to an authority. + */ + public const EXPO_DECL = 'ED'; + + /** + * Export establishment number (AIC) + * + * Number to identify export establishment. + */ + public const EXPO_ESTA_NUMB = 'AIC'; + + /** + * Export permit identifier (EX) + * + * [1208] Reference number to identify an export licence or permit. + */ + public const EXPO_PERM_IDEN = 'EX'; + + /** + * Exporter's reference number (ERN) + * + * Reference to a party exporting goods. + */ + public const EXPO_REFE_NUMB = 'ERN'; + + /** + * External object reference (ATS) + * + * A reference identifying an external object. + */ + public const EXTE_OBJE_REFE = 'ATS'; + + /** + * Federal supply schedule item number (AJV) + * + * A number specifying an item listed in a federal supply schedule. + */ + public const FEDE_SUPP_SCHE_ITEM_NUMB = 'AJV'; + + /** + * File conversion journal (ANI) + * + * Reference number identifying a journal recording details about conversion + * operations between file formats. + */ + public const FILE_CONV_JOUR = 'ANI'; + + /** + * File identification number (AQY) + * + * A number assigned to identify a file. + */ + public const FILE_IDEN_NUMB = 'AQY'; + + /** + * File line identifier (FI) + * + * Number assigned by the file issuer or sender to identify a specific line. + */ + public const FILE_LINE_IDEN = 'FI'; + + /** + * File version number (FV) + * + * Number given to a version of an identified file. + */ + public const FILE_VERS_NUMB = 'FV'; + + /** + * Final sequence number (FS) + * + * A number that identifies the final sequence. + */ + public const FINA_SEQU_NUMB = 'FS'; + + /** + * Financial cancellation reference number (ATA) + * + * Reference number of a financial cancellation. + */ + public const FINA_CANC_REFE_NUMB = 'ATA'; + + /** + * Financial management reference (ALY) + * + * A financial management reference. + */ + public const FINA_MANA_REFE = 'ALY'; + + /** + * Financial phase reference (ARW) + * + * A reference which identifies a specific financial phase. + */ + public const FINA_PHAS_REFE = 'ARW'; + + /** + * Financial settlement party's reference number (AMX) + * + * Reference number of the party who is responsible for the financial + * settlement. + */ + public const FINA_SETT_PART_REFE_NUMB = 'AMX'; + + /** + * Financial transaction reference number (ANU) + * + * Reference number of the financial transaction. + */ + public const FINA_TRAN_REFE_NUMB = 'ANU'; + + /** + * Firm booking reference number (AXE) + * + * A reference number identifying a previous firm booking. + */ + public const FIRM_BOOK_REFE_NUMB = 'AXE'; + + /** + * First financial institution's transaction reference (AVA) + * + * Identifies the reference given to the individual transaction by the + * financial institution that is the transaction's point of entry into the + * interbank transaction chain. + */ + public const FIRS_FINA_INST_TRAN_REFE = 'AVA'; + + /** + * Fiscal number (FC) + * + * Tax payer's number. Number assigned to individual persons as well as to + * corporates by a public institution; this number is different from the VAT + * registration number. + */ + public const FISC_NUMB = 'FC'; + + /** + * Flat rack container bundle identification number (ATW) + * + * Reference number assigned to a bundle of flat rack containers. + */ + public const FLAT_RACK_CONT_BUND_IDEN_NUMB = 'ATW'; + + /** + * Flow reference number (FLW) + * + * Number given to a usual sender which has regular expeditions of the same + * goods, to the same destination, defining all general conditions of the + * transport. + */ + public const FLOW_REFE_NUMB = 'FLW'; + + /** + * Foreign exchange (FO) + * + * Exchange of two currencies at an agreed rate. + */ + public const FORE_EXCH = 'FO'; + + /** + * Foreign exchange contract number (FX) + * + * Reference number identifying a foreign exchange contract. + */ + public const FORE_EXCH_CONT_NUMB = 'FX'; + + /** + * Foreign military sales number (AJP) + * + * A number specifying a sale to a foreign military. + */ + public const FORE_MILI_SALE_NUMB = 'AJP'; + + /** + * Foreign resident identification number (ASX) + * + * Number assigned by a government agency to identify a foreign resident. + */ + public const FORE_RESI_IDEN_NUMB = 'ASX'; + + /** + * Formal report number (ASP) + * + * A number uniquely identifying a formal report. + */ + public const FORM_REPO_NUMB = 'ASP'; + + /** + * Formal statement reference (ASH) + * + * A reference to a formal statement. + */ + public const FORM_STAT_REFE = 'ASH'; + + /** + * Formula reference number (AXM) + * + * The reference number which identifies a formula. + */ + public const FORM_REFE_NUMB = 'AXM'; + + /** + * Forwarding order number (AKT) + * + * Reference number assigned to the forwarding order by the ordering customer. + */ + public const FORW_ORDE_NUMB = 'AKT'; + + /** + * Framework Agreement Number (AVV) + * + * A reference to an agreement between one or more contracting authorities and + * one or more economic operators, the purpose of which is to establish the + * terms governing contracts to be awarded during a given period, in + * particular with regard to price and, where appropriate, the quantity + * envisaged. + */ + public const FRAM_AGRE_NUMB = 'AVV'; + + /** + * Free zone identifier (FT) + * + * Identifier to specify the territory of a State where any goods introduced + * are generally regarded, insofar as import duties and taxes are concerned, + * as being outside the Customs territory and are not subject to usual Customs + * control (CCC). + */ + public const FREE_ZONE_IDEN = 'FT'; + + /** + * Freight bill number (FN) + * + * Reference number assigned by issuing party to a freight bill. + */ + public const FREI_BILL_NUMB = 'FN'; + + /** + * Freight Forwarder number (AHY) + * + * An identification code of a Freight Forwarder. + */ + public const FREI_FORW_NUMB = 'AHY'; + + /** + * Functional work group (AOO) + * + * A reference to identify a functional group performing work. + */ + public const FUNC_WORK_GROU = 'AOO'; + + /** + * Fund account number (ASQ) + * + * Account number of fund. + */ + public const FUND_ACCO_NUMB = 'ASQ'; + + /** + * Fund code number (AHD) + * + * Reference number to identify appropriation and branch chargeable for item. + */ + public const FUND_CODE_NUMB = 'AHD'; + + /** + * General cargo consignment reference number (AKR) + * + * Reference number identifying a particular general cargo (non-containerised + * or break bulk) consignment. + */ + public const GENE_CARG_CONS_REFE_NUMB = 'AKR'; + + /** + * General declaration number (GDN) + * + * Number of the declaration of incoming goods out of a vessel. + */ + public const GENE_DECL_NUMB = 'GDN'; + + /** + * General order number (OR) + * + * Customs number assigned to imported merchandise that has been left + * unclaimed and subsequently moved to a Customs bonded warehouse for storage. + */ + public const GENE_ORDE_NUMB = 'OR'; + + /** + * General purpose message reference number (APG) + * + * A reference number identifying a general purpose message. + */ + public const GENE_PURP_MESS_REFE_NUMB = 'APG'; + + /** + * Goods and Services Tax identification number (AMT) + * + * Identifier assigned to an entity by a tax authority for Goods and Services + * Tax (GST) related purposes. + */ + public const GOOD_AND_SERV_TAX_IDEN_NUMB = 'AMT'; + + /** + * Goods declaration document identifier, Customs (ABT) + * + * [1426] Reference number, assigned or accepted by Customs, to identify a + * goods declaration. + */ + public const GOOD_DECL_DOCU_IDEN_CUST = 'ABT'; + + /** + * Goods declaration number (AAE) + * + * Reference number assigned to a goods declaration. + */ + public const GOOD_DECL_NUMB = 'AAE'; + + /** + * Goods item information (AVM) + * + * Code identifying that the reference number given applies to the goods item + * information segment group in the referred message. + */ + public const GOOD_ITEM_INFO = 'AVM'; + + /** + * Government agency reference number (AEA) + * + * Coded reference number that pertains to the business of a government + * agency. + */ + public const GOVE_AGEN_REFE_NUMB = 'AEA'; + + /** + * Government bill of lading (AKH) + * + * Bill of lading as defined by the government. + */ + public const GOVE_BILL_OF_LADI = 'AKH'; + + /** + * Government contract number (GC) + * + * Number assigned to a specific government/public contract. + */ + public const GOVE_CONT_NUMB = 'GC'; + + /** + * Government quality assurance and control level Number (AMI) + * + * A number which identifies the level of quality assurance and control + * required by the government for an article. + */ + public const GOVE_QUAL_ASSU_AND_CONT_LEVE_NUMB = 'AMI'; + + /** + * Government reference number (GN) + * + * A number that identifies a government reference. + */ + public const GOVE_REFE_NUMB = 'GN'; + + /** + * Grid operator's customer reference number (CAZ) + * + * A number, assigned by a grid operator, to reference a customer. + */ + public const GRID_OPER_CUST_REFE_NUMB = 'CAZ'; + + /** + * Group accounting (ADT) + * + * A number that identifies group accounting. + */ + public const GROU_ACCO = 'ADT'; + + /** + * Group reference number (AST) + * + * The reference number identifying a group. + */ + public const GROU_REFE_NUMB = 'AST'; + + /** + * Guarantee number (ATM) + * + * Number of a guarantee. + */ + public const GUAR_NUMB = 'ATM'; + + /** + * Handling and movement reference number (AWZ) + * + * A reference number identifying a previously transmitted cargo/goods + * handling and movement message. + */ + public const HAND_AND_MOVE_REFE_NUMB = 'AWZ'; + + /** + * Harmonised system number (HS) + * + * Number specifying the goods classification under the Harmonised Commodity + * Description and Coding System of the Customs Co-operation Council (CCC). + */ + public const HARM_SYST_NUMB = 'HS'; + + /** + * Hash value (AVW) + * + * Contains the hash value of a related document. + */ + public const HASH_VALU = 'AVW'; + + /** + * Hastening number (AMD) + * + * A number which uniquely identifies a request to hasten an action. + */ + public const HAST_NUMB = 'AMD'; + + /** + * Hot roll number (ACP) + * + * Number attributed to a hot roll coil. + */ + public const HOT_ROLL_NUMB = 'ACP'; + + /** + * House bill of lading number (BH) + * + * [1039] Reference number assigned to a house bill of lading. + */ + public const HOUS_BILL_OF_LADI_NUMB = 'BH'; + + /** + * House waybill number (HWB) + * + * Reference number assigned to a house waybill, see: 1001 = 703. + */ + public const HOUS_WAYB_NUMB = 'HWB'; + + /** + * Hygienic Certificate number, national (AWS) + * + * Nationally set Hygienic Certificate number, such as sanitary, + * epidemiologic. + */ + public const HYGI_CERT_NUMB_NATI = 'AWS'; + + /** + * IATA Cargo Agent CASS Address number (CAS) + * + * Code issued by IATA to identify agent locations for CASS billing purposes. + */ + public const IATA_CARG_AGEN_CASS_ADDR_NUMB = 'CAS'; + + /** + * IATA cargo agent code number (ICA) + * + * Code issued by IATA identify each IATA Cargo Agent whose name is entered on + * the Cargo Agency List. + */ + public const IATA_CARG_AGEN_CODE_NUMB = 'ICA'; + + /** + * Image reference (AUI) + * + * A reference number identifying an image. + */ + public const IMAG_REFE = 'AUI'; + + /** + * Immediate exportation no. for in bond movement (AFK) + * + * A number that identifies the immediate exportation number for an in bond + * movement. + */ + public const IMME_EXPO_NO_FOR_IN_BOND_MOVE = 'AFK'; + + /** + * Immediate transportation no. for in bond movement (AFI) + * + * A number that identifies immediate transportation for in bond movement. + */ + public const IMME_TRAN_NO_FOR_IN_BOND_MOVE = 'AFI'; + + /** + * Implementation version number (AOZ) + * + * Identifies a version number of an implementation. + */ + public const IMPL_VERS_NUMB = 'AOZ'; + + /** + * Import clearance instruction reference number (ABS) + * + * Reference number of the import clearance instructions given by the + * consignor/consignee through different means. + */ + public const IMPO_CLEA_INST_REFE_NUMB = 'ABS'; + + /** + * Import permit identifier (IP) + * + * [1107] Reference number to identify an import licence or permit. + */ + public const IMPO_PERM_IDEN = 'IP'; + + /** + * Importer reference number (ABQ) + * + * Reference number assigned by the importer to identify a particular shipment + * for his own purposes. + */ + public const IMPO_REFE_NUMB = 'ABQ'; + + /** + * Importer's letter of credit reference (AUG) + * + * Letter of credit reference issued by importer. + */ + public const IMPO_LETT_OF_CRED_REFE = 'AUG'; + + /** + * Imputation account (ARV) + * + * An account to which an amount is to be posted. + */ + public const IMPU_ACCO = 'ARV'; + + /** + * In bond number (IB) + * + * Customs assigned number that is used to control the movement of imported + * cargo prior to its formal Customs clearing. + */ + public const IN_BOND_NUMB = 'IB'; + + /** + * Incorporated legal reference (APA) + * + * Identifies a legal reference which is deemed incorporated by reference. + */ + public const INCO_LEGA_REFE = 'APA'; + + /** + * Individual transaction reference number (AIM) + * + * Reference number applying to one specific transaction. + */ + public const INDI_TRAN_REFE_NUMB = 'AIM'; + + /** + * Initial sample inspection report number (II) + * + * Inspection report number given to the initial sample inspection. + */ + public const INIT_SAMP_INSP_REPO_NUMB = 'II'; + + /** + * Inland transport order number (ADN) + * + * Reference number assigned by the principal to the transport order for + * inland carriage. + */ + public const INLA_TRAN_ORDE_NUMB = 'ADN'; + + /** + * Institut Belgo-Luxembourgeois de Codification (IBLC) number (ATR) + * + * An identification number assigned by the Luxembourg National Bank to a + * business in Luxembourg. + */ + public const INST_BELG_DE_CODI_IBLC_NUMB = 'ATR'; + + /** + * Institute of Security and Future Market Development (ISFMD) serial number (AQX) + * + * A number used to identify a public but not publicly traded company. + */ + public const INST_OF_SECU_AND_FUTU_MARK_DEVE_ISFM_SERI_NUMB = 'AQX'; + + /** + * Instruction for returns number (AXB) + * + * A reference number identifying a previously communicated instruction for + * return message. + */ + public const INST_FOR_RETU_NUMB = 'AXB'; + + /** + * Instruction to despatch reference number (AXA) + * + * A reference number identifying a previously transmitted instruction to + * despatch message. + */ + public const INST_TO_DESP_REFE_NUMB = 'AXA'; + + /** + * Insurance certificate reference number (ICE) + * + * A number that identifies an insurance certificate reference. + */ + public const INSU_CERT_REFE_NUMB = 'ICE'; + + /** + * Insurance contract reference number (ICO) + * + * A number that identifies an insurance contract reference. + */ + public const INSU_CONT_REFE_NUMB = 'ICO'; + + /** + * Insurer assigned reference number (AMM) + * + * A unique reference number assigned by the insurer. + */ + public const INSU_ASSI_REFE_NUMB = 'AMM'; + + /** + * Integrated logistic support cross reference number (AMU) + * + * Provides the identification of the reference which allows cross referencing + * of items between different areas of integrated logistics support. + */ + public const INTE_LOGI_SUPP_CROS_REFE_NUMB = 'AMU'; + + /** + * Interchange number new (INN) + * + * Number assigned by the interchange sender to identify one specific + * interchange. This number points to the actual interchange. + */ + public const INTE_NUMB_NEW = 'INN'; + + /** + * Interchange number old (INO) + * + * Number assigned by the interchange sender to identify one specific + * interchange. This number points to the previous interchange. + */ + public const INTE_NUMB_OLD = 'INO'; + + /** + * Intermediary broker (INB) + * + * A number that identifies an intermediary broker. + */ + public const INTE_BROK = 'INB'; + + /** + * Internal customer number (IT) + * + * Number assigned by a seller, supplier etc. to identify a customer within + * his enterprise. + */ + public const INTE_CUST_NUMB = 'IT'; + + /** + * Internal data process number (AWG) + * + * A number identifying an internal data process. + */ + public const INTE_DATA_PROC_NUMB = 'AWG'; + + /** + * Internal order number (IL) + * + * Number assigned to an order for internal handling/follow up. + */ + public const INTE_ORDE_NUMB = 'IL'; + + /** + * Internal vendor number (IA) + * + * Number identifying the company-internal vending department/unit. + */ + public const INTE_VEND_NUMB = 'IA'; + + /** + * International assessment log number (AQH) + * + * The reference log number assigned to a Data Maintenance Request (DMR) + * changed in international assessment. + */ + public const INTE_ASSE_LOG_NUMB = 'AQH'; + + /** + * International assessment log number, child Data Maintenance Request (DMR) (AQJ) + * + * The reference log number assigned to a Data Maintenance Request (DMR) + * changed in international assessment that is a child to the current DMR. + */ + public const INTE_ASSE_LOG_NUMB_CHIL_DATA_MAIN_REQU_DMR = 'AQJ'; + + /** + * International assessment log number, parent Data Maintenance Request (DMR) (AQI) + * + * The reference log number assigned to a Data Maintenance Request (DMR) + * changed in international assessment that is a parent to the current DMR. + */ + public const INTE_ASSE_LOG_NUMB_PARE_DATA_MAIN_REQU_DMR = 'AQI'; + + /** + * International flight number (AGR) + * + * Airline flight number assigned to a flight originating and terminating + * across national borders. + */ + public const INTE_FLIG_NUMB = 'AGR'; + + /** + * International Standard Industrial Classification (ISIC) code (AUY) + * + * A code specifying an international standard industrial classification. + */ + public const INTE_STAN_INDU_CLAS_ISIC_CODE = 'AUY'; + + /** + * Intra-plant routing (ABV) + * + * To define routing within a plant. + */ + public const INTR_ROUT = 'ABV'; + + /** + * Inventory report reference number (API) + * + * A reference number identifying an inventory report. + */ + public const INVE_REPO_REFE_NUMB = 'API'; + + /** + * Inventory report request number (AVD) + * + * Reference number assigned to a request for an inventory report. + */ + public const INVE_REPO_REQU_NUMB = 'AVD'; + + /** + * Investment reference number (ASB) + * + * A reference to a specific investment. + */ + public const INVE_REFE_NUMB = 'ASB'; + + /** + * Invoice document identifier (IV) + * + * [1334] Reference number to identify an invoice. + */ + public const INVO_DOCU_IDEN = 'IV'; + + /** + * Invoice number suffix (IS) + * + * A number added at the end of an invoice number. + */ + public const INVO_NUMB_SUFF = 'IS'; + + /** + * Invoicing data sheet reference number (APH) + * + * A reference number identifying an invoicing data sheet. + */ + public const INVO_DATA_SHEE_REFE_NUMB = 'APH'; + + /** + * Iron charge number (ACO) + * + * Number attributed to the iron charge for the production of steel products. + */ + public const IRON_CHAR_NUMB = 'ACO'; + + /** + * Issued prescription identification (AUC) + * + * The identification of the issued prescription. + */ + public const ISSU_PRES_IDEN = 'AUC'; + + /** + * Issuing bank's reference (AFR) + * + * Reference number of the issuing bank. + */ + public const ISSU_BANK_REFE = 'AFR'; + + /** + * Job number (JB) + * + * [1043] Identifies a piece of work. + */ + public const JOB_NUMB = 'JB'; + + /** + * Joint venture reference number (AHN) + * + * Reference number assigned to a joint venture agreement. + */ + public const JOIN_VENT_REFE_NUMB = 'AHN'; + + /** + * Judgment number (ATC) + * + * A reference number identifying the legal decision. + */ + public const JUDG_NUMB = 'ATC'; + + /** + * Kamer Van Koophandel (KVK) number (ATQ) + * + * An identification number assigned by the Dutch Chamber of Commerce to a + * business in the Netherlands. + */ + public const KAME_VAN_KOOP_KVK_NUMB = 'ATQ'; + + /** + * Laboratory registration number (AHH) + * + * Reference number is the official registration number of the laboratory. + */ + public const LABO_REGI_NUMB = 'AHH'; + + /** + * Last received banking status message reference (ATF) + * + * Reference number of the latest received banking status message. + */ + public const LAST_RECE_BANK_STAT_MESS_REFE = 'ATF'; + + /** + * Latest accounting entry record reference (AWP) + * + * Code identifying the reference of the latest accounting entry record. + */ + public const LATE_ACCO_ENTR_RECO_REFE = 'AWP'; + + /** + * Lease contract reference (AKV) + * + * Reference number of the lease contract. + */ + public const LEAS_CONT_REFE = 'AKV'; + + /** + * Letter of credit number (LC) + * + * Reference number identifying the letter of credit document. + */ + public const LETT_OF_CRED_NUMB = 'LC'; + + /** + * Lloyd's claims office reference (ADW) + * + * A number that identifies a Lloyd's claims office. + */ + public const LLOY_CLAI_OFFI_REFE = 'ADW'; + + /** + * Load planning number (LO) + * + * The reference that identifies the load planning number. + */ + public const LOAD_PLAN_NUMB = 'LO'; + + /** + * Loading authorisation identifier (LAN) + * + * [4092] Identifier assigned to the loading authorisation granted by the + * forwarding location e.g. railway or airport, when the consignment is + * subject to traffic limitations. + */ + public const LOAD_AUTH_IDEN = 'LAN'; + + /** + * Loan (ADC) + * + * Reference number for loan allocated by lending financial institution. + */ + public const LOAN = 'ADC'; + + /** + * Local Reference Number (AVZ) + * + * Number assigned by a national customs authority to an Entry Summary + * Declaration. + */ + public const LOCA_REFE_NUMB = 'AVZ'; + + /** + * Lockbox (LB) + * + * Type of cash management system offered by financial institutions to provide + * for collection of customers 'receivables'. + */ + public const LOCKBOX = 'LB'; + + /** + * Loss/event number (ACU) + * + * To reference to the unique number that is assigned to each major loss + * hitting the reinsurance industry. + */ + public const LOSS_NUMB = 'ACU'; + + /** + * Lower number in range (LAR) + * + * Lower number in a range of numbers. + */ + public const LOWE_NUMB_IN_RANG = 'LAR'; + + /** + * Mailing reference number (MRN) + * + * Identifies the party designated by the importer to receive certain customs + * correspondence in lieu of its being mailed directly to the importer. + */ + public const MAIL_REFE_NUMB = 'MRN'; + + /** + * Major force program number (AHF) + * + * Reference number according to Major Force Program (US). + */ + public const MAJO_FORC_PROG_NUMB = 'AHF'; + + /** + * Mandate Reference (AVS) + * + * Reference to a specific mandate given by the relevant party for underlying + * business or action. + */ + public const MAND_REFE = 'AVS'; + + /** + * Manual processing authority number (AHV) + * + * Number allocated to allow the manual processing of an entity. + */ + public const MANU_PROC_AUTH_NUMB = 'AHV'; + + /** + * Manufacturer defined repair rates reference (APW) + * + * Reference assigned by a manufacturer to their repair rates. + */ + public const MANU_DEFI_REPA_RATE_REFE = 'APW'; + + /** + * Manufacturer's material safety data sheet number (MSS) + * + * A number that identifies a manufacturer's material safety data sheet. + */ + public const MANU_MATE_SAFE_DATA_SHEE_NUMB = 'MSS'; + + /** + * Manufacturer's part number (MF) + * + * Reference number assigned by the manufacturer to his product or part. + */ + public const MANU_PART_NUMB = 'MF'; + + /** + * Manufacturing order number (MH) + * + * Reference number assigned by manufacturer for a given production quantity + * of products. + */ + public const MANU_ORDE_NUMB = 'MH'; + + /** + * Manufacturing quality agreement number (AUL) + * + * Reference number of a manufacturing quality agreement. + */ + public const MANU_QUAL_AGRE_NUMB = 'AUL'; + + /** + * Marketing plan identification number (MPIN) (AUW) + * + * Number identifying a marketing plan. + */ + public const MARK_PLAN_IDEN_NUMB_MPIN = 'AUW'; + + /** + * Marking/label reference (AFF) + * + * Reference where marking/label information derives from. + */ + public const MARK_REFE = 'AFF'; + + /** + * Master account number (ASS) + * + * A reference number identifying a master account. + */ + public const MAST_ACCO_NUMB = 'ASS'; + + /** + * Master air waybill number (MWB) + * + * Reference number assigned to a master air waybill, see: 1001 = 741. + */ + public const MAST_AIR_WAYB_NUMB = 'MWB'; + + /** + * Master bill of lading number (MB) + * + * Reference number assigned to a master bill of lading, see: 1001 = 704. + */ + public const MAST_BILL_OF_LADI_NUMB = 'MB'; + + /** + * Master label number (AAT) + * + * Identifies the master label number of any package type. + */ + public const MAST_LABE_NUMB = 'AAT'; + + /** + * Master solicitation procedures, terms, and conditions number (AJM) + * + * A number indicating a master solicitation containing procedures, terms and + * conditions. + */ + public const MAST_SOLI_PROC_TERM_AND_COND_NUMB = 'AJM'; + + /** + * Matching of entries, balanced (CAT) + * + * Reference to a balanced matching of entries. + */ + public const MATC_OF_ENTR_BALA = 'CAT'; + + /** + * Matching of entries, unbalanced (CAV) + * + * Reference to an unbalanced matching of entries. + */ + public const MATC_OF_ENTR_UNBA = 'CAV'; + + /** + * Matured certificate of deposit (ADB) + * + * Reference number for certificate of deposit allocated by issuing financial + * institution. + */ + public const MATU_CERT_OF_DEPO = 'ADB'; + + /** + * Meat cutting plant approval number (AVH) + * + * Veterinary licence number allocated by a national authority to a meat + * cutting plant. + */ + public const MEAT_CUTT_PLAN_APPR_NUMB = 'AVH'; + + /** + * Meat processing establishment registration number (AHS) + * + * Registration number allocated to a registered meat packing establishment by + * the local quarantine and inspection authority. + */ + public const MEAT_PROC_ESTA_REGI_NUMB = 'AHS'; + + /** + * Member number (AGU) + * + * Reference number assigned to a person as a member of a group of persons or + * a service scheme. + */ + public const MEMB_NUMB = 'AGU'; + + /** + * Message batch number (ALL) + * + * A number identifying a batch of messages. + */ + public const MESS_BATC_NUMB = 'ALL'; + + /** + * Message design group number (AQL) + * + * Reference number for a message design group. + */ + public const MESS_DESI_GROU_NUMB = 'AQL'; + + /** + * Message recipient (MR) + * + * A number that identifies the message recipient. + */ + public const MESS_RECI = 'MR'; + + /** + * Message sender (MS) + * + * A number that identifies the message sender. + */ + public const MESS_SEND = 'MS'; + + /** + * Meter reading at the beginning of the delivery (AKK) + * + * Meter reading at the beginning of the delivery. + */ + public const METE_READ_AT_THE_BEGI_OF_THE_DELI = 'AKK'; + + /** + * Meter reading at the end of delivery (AKL) + * + * Meter reading at the end of the delivery. + */ + public const METE_READ_AT_THE_END_OF_DELI = 'AKL'; + + /** + * Meter unit number (MG) + * + * Number identifying a unique meter unit. + */ + public const METE_UNIT_NUMB = 'MG'; + + /** + * Metered services consumption report number (AXC) + * + * A reference number identifying a previously communicated metered services + * consumption report. + */ + public const METE_SERV_CONS_REPO_NUMB = 'AXC'; + + /** + * Metering point (AVE) + * + * Reference to a metering point. + */ + public const METE_POIN = 'AVE'; + + /** + * Military Interdepartmental Purchase Request (MIPR) number (AJO) + * + * A number indicating an interdepartmental purchase request used by the + * military. + */ + public const MILI_INTE_PURC_REQU_MIPR_NUMB = 'AJO'; + + /** + * Ministerial certificate of homologation (AIE) + * + * Certificate of approval for components which are subject to legal + * restrictions and must be approved by the government. + */ + public const MINI_CERT_OF_HOMO = 'AIE'; + + /** + * Model (ALX) + * + * (7242) A reference used to identify a model. + */ + public const MODEL = 'ALX'; + + /** + * Motor vehicle identification number (VT) + * + * (8213) Reference identifying a motor vehicle used for transport. Normally + * is the vehicle registration number. + */ + public const MOTO_VEHI_IDEN_NUMB = 'VT'; + + /** + * Movement reference number (AVX) + * + * Number assigned by customs referencing receipt of an Entry Summary + * Declaration. + */ + public const MOVE_REFE_NUMB = 'AVX'; + + /** + * Municipality assigned business registry number (AAR) + * + * A reference number assigned by a municipality to identify a business. + */ + public const MUNI_ASSI_BUSI_REGI_NUMB = 'AAR'; + + /** + * Mutually defined reference number (ZZZ) + * + * Number based on party agreement. + */ + public const MUTU_DEFI_REFE_NUMB = 'ZZZ'; + + /** + * Named bank's reference (ANM) + * + * Reference number of the named bank. + */ + public const NAME_BANK_REFE = 'ANM'; + + /** + * National government business identification number (ARA) + * + * A business identification number which is assigned by a national + * government. + */ + public const NATI_GOVE_BUSI_IDEN_NUMB = 'ARA'; + + /** + * Net area (AWJ) + * + * Reference to an area of a net. + */ + public const NET_AREA = 'AWJ'; + + /** + * Net area supplier reference (AUT) + * + * A reference identifying a supplier within a net area. + */ + public const NET_AREA_SUPP_REFE = 'AUT'; + + /** + * Next rental agreement number (AMB) + * + * Number to identify the next rental agreement. + */ + public const NEXT_RENT_AGRE_NUMB = 'AMB'; + + /** + * Next rental agreement reason number (ALJ) + * + * Number to identify the reason for the next rental agreement. + */ + public const NEXT_RENT_AGRE_REAS_NUMB = 'ALJ'; + + /** + * Nomenclature Activity Classification Economy (NACE) identifier (AQS) + * + * A European industry classification code used to identify the activity of a + * company. + */ + public const NOME_ACTI_CLAS_ECON_NACE_IDEN = 'AQS'; + + /** + * Nomination number (AHG) + * + * Reference number assigned by a shipper to a request/ commitment-to-ship on + * a pipeline system. + */ + public const NOMI_NUMB = 'AHG'; + + /** + * Non-negotiable maritime transport document number (AEX) + * + * Reference number assigned to a sea waybill, see: 1001 = 712. + */ + public const NONN_MARI_TRAN_DOCU_NUMB = 'AEX'; + + /** + * Norme Activite Francaise (NAF) identifier (AQT) + * + * A French industry classification code assigned by the French government to + * identify the activity of a company. + */ + public const NORM_ACTI_FRAN_NAF_IDEN = 'AQT'; + + /** + * North American hazardous goods classification number (NA) + * + * Reference to materials designated as hazardous for purposes of + * transportation in North American commerce. + */ + public const NORT_AMER_HAZA_GOOD_CLAS_NUMB = 'NA'; + + /** + * Nota Fiscal (NF) + * + * Nota Fiscal is a registration number for shipments / deliveries within + * Brazil, issued by the local tax authorities and mandated for each shipment. + */ + public const NOTA_FISC = 'NF'; + + /** + * NOTIfication for COLlection number (NOTICOL) (ALZ) + * + * A reference assigned by a consignor to a notification document which + * indicates the availability of goods for collection. + */ + public const NOTI_FOR_COLL_NUMB_NOTI = 'ALZ'; + + /** + * Number of temporary importation document (AGM) + * + * Number assigned by customs to identify consignment in transit. + */ + public const NUMB_OF_TEMP_IMPO_DOCU = 'AGM'; + + /** + * Numero de Identificacion Tributaria (NIT) (ARE) + * + * A number assigned by the government to a business in some Latin American + * countries. + */ + public const NUME_DE_IDEN_TRIB_NIT = 'ARE'; + + /** + * Offer number (AAG) + * + * (1332) Reference number assigned by issuing party to an offer. + */ + public const OFFE_NUMB = 'AAG'; + + /** + * Order acknowledgement document identifier (AAA) + * + * [1018] Reference number identifying the acknowledgement of an order. + */ + public const ORDE_ACKN_DOCU_IDEN = 'AAA'; + + /** + * Order document identifier, buyer assigned (ON) + * + * [1022] Identifier assigned by the buyer to an order. + */ + public const ORDE_DOCU_IDEN_BUYE_ASSI = 'ON'; + + /** + * Order number (vendor) (VN) + * + * Reference number assigned by supplier to a buyer's purchase order. + */ + public const ORDE_NUMB_VEND = 'VN'; + + /** + * Order shipment grouping reference (CBB) + * + * A reference number identifying the grouping of purchase orders into one + * shipment. + */ + public const ORDE_SHIP_GROU_REFE = 'CBB'; + + /** + * Order status enquiry number (AXD) + * + * A reference number to a previously sent order status enquiry. + */ + public const ORDE_STAT_ENQU_NUMB = 'AXD'; + + /** + * Ordering customer consignment reference number (ADL) + * + * Reference number assigned to the consignment by the ordering customer. + */ + public const ORDE_CUST_CONS_REFE_NUMB = 'ADL'; + + /** + * Ordering customer's second reference number (AKI) + * + * Ordering customer's second reference number. + */ + public const ORDE_CUST_SECO_REFE_NUMB = 'AKI'; + + /** + * Organisation breakdown structure (AOM) + * + * A structure reference that identifies the breakdown of an organisation. + */ + public const ORGA_BREA_STRU = 'AOM'; + + /** + * Original certificate number (AIR) + * + * Number giving reference to an original certificate number. + */ + public const ORIG_CERT_NUMB = 'AIR'; + + /** + * Original filing number (ARN) + * + * A number assigned to the original filing. + */ + public const ORIG_FILI_NUMB = 'ARN'; + + /** + * Original Mandate Reference (AVR) + * + * Reference to a specific related original mandate given by the relevant + * party for underlying business or action in case of reference or mandate + * change. + */ + public const ORIG_MAND_REFE = 'AVR'; + + /** + * Original purchase order (OP) + * + * Reference to the order previously sent. + */ + public const ORIG_PURC_ORDE = 'OP'; + + /** + * Original submitter log number (APX) + * + * A control number assigned by the original submitter. + */ + public const ORIG_SUBM_LOG_NUMB = 'APX'; + + /** + * Original submitter, child Data Maintenance Request (DMR) log number (APZ) + * + * A Data Maintenance Request (DMR) original submitter's reference log number + * for a child DMR. + */ + public const ORIG_SUBM_CHIL_DATA_MAIN_REQU_DMR_LOG_NUMB = 'APZ'; + + /** + * Original submitter, parent Data Maintenance Request (DMR) log number (APY) + * + * A Data Maintenance Request (DMR) original submitter's reference log number + * for the parent DMR. + */ + public const ORIG_SUBM_PARE_DATA_MAIN_REQU_DMR_LOG_NUMB = 'APY'; + + /** + * Originator's reference (ABO) + * + * A unique reference assigned by the originator. + */ + public const ORIG_REFE = 'ABO'; + + /** + * Outerpackaging unit identification (ACI) + * + * Identifying marks on packing units contained within an outermost shipping + * unit. + */ + public const OUTE_UNIT_IDEN = 'ACI'; + + /** + * Package number (CW) + * + * (7070) Reference number identifying a package or carton within a + * consignment. + */ + public const PACK_NUMB = 'CW'; + + /** + * Packaging specification number (AHA) + * + * Reference number of documentation specifying the technical detail of + * packaging requirements. + */ + public const PACK_SPEC_NUMB = 'AHA'; + + /** + * Packaging unit identification (ACH) + * + * Identifying marks on packing units. + */ + public const PACK_UNIT_IDEN = 'ACH'; + + /** + * Packing list number (PK) + * + * [1014] Reference number assigned to a packing list. + */ + public const PACK_LIST_NUMB = 'PK'; + + /** + * Packing plant number (AIQ) + * + * Number to identify packing establishment. + */ + public const PACK_PLAN_NUMB = 'AIQ'; + + /** + * Paragraph (AJJ) + * + * A reference indicating a paragraph cited as the source of information. + */ + public const PARAGRAPH = 'AJJ'; + + /** + * Parent file (AND) + * + * Identifies the parent file in a structure of related files. + */ + public const PARE_FILE = 'AND'; + + /** + * Part reference indicator in a drawing (AJA) + * + * To designate the number which provides a cross reference between parts + * contained in a drawing and a parts catalogue. + */ + public const PART_REFE_INDI_IN_A_DRAW = 'AJA'; + + /** + * Partial shipment identifier (AAP) + * + * [1310] Identifier of a shipment which is part of an order. + */ + public const PART_SHIP_IDEN = 'AAP'; + + /** + * Party information message reference (ASG) + * + * Reference identifying a party information message. + */ + public const PART_INFO_MESS_REFE = 'ASG'; + + /** + * Party reference (AUB) + * + * The reference to a party. + */ + public const PART_REFE = 'AUB'; + + /** + * Party sequence number (APM) + * + * Reference identifying a party sequence number. + */ + public const PART_SEQU_NUMB = 'APM'; + + /** + * Passenger reservation number (AVF) + * + * Number assigned by the travel supplier to identify the passenger + * reservation. + */ + public const PASS_RESE_NUMB = 'AVF'; + + /** + * Passport number (AIG) + * + * Number assigned to a passport. + */ + public const PASS_NUMB = 'AIG'; + + /** + * Password (ASO) + * + * Code used for authentication purposes. + */ + public const PASSWORD = 'ASO'; + + /** + * Patron number (ARF) + * + * A number assigned by the government to a business in some Latin American + * countries. Note that "Patron" is a Spanish word, it is not a person who + * gives financial or other support. + */ + public const PATR_NUMB = 'ARF'; + + /** + * Payer's financial institution account number (PB) + * + * Originated company account number (ACH transfer), check, draft or wire. + */ + public const PAYE_FINA_INST_ACCO_NUMB = 'PB'; + + /** + * Payee's financial institution transit routing No. (RT) + * + * RDFI Transit routing number (ACH transfer). + */ + public const PAYE_FINA_INST_TRAN_ROUT_NO = 'RT'; + + /** + * Payer's reference number (AHK) + * + * Reference number of the party who pays. + */ + public const PAYE_REFE_NUMB = 'AHK'; + + /** + * Payer's financial institution transit routing No.(ACH transfers) (RR) + * + * ODFI (ACH transfer). + */ + public const PAYE_FINA_INST_TRAN_ROUT_NOAC_TRAN = 'RR'; + + /** + * Payment in advance request reference (ANC) + * + * A reference to a request for payment in advance. + */ + public const PAYM_IN_ADVA_REQU_REFE = 'ANC'; + + /** + * Payment instalment reference number (APB) + * + * A reference number given to a payment instalment to identify a specific + * instance of payment of a debt which can be paid at specified intervals. + */ + public const PAYM_INST_REFE_NUMB = 'APB'; + + /** + * Payment order number (AEK) + * + * A number that identifies a payment order. + */ + public const PAYM_ORDE_NUMB = 'AEK'; + + /** + * Payment plan reference (AMJ) + * + * A number which uniquely identifies a payment plan. + */ + public const PAYM_PLAN_REFE = 'AMJ'; + + /** + * Payment reference (PQ) + * + * Reference number assigned to a payment. + */ + public const PAYM_REFE = 'PQ'; + + /** + * Payment valuation number (AFY) + * + * Reference number assigned to a payment valuation. + */ + public const PAYM_VALU_NUMB = 'AFY'; + + /** + * Payroll deduction advice reference (AXR) + * + * A reference number identifying a payroll deduction advice. + */ + public const PAYR_DEDU_ADVI_REFE = 'AXR'; + + /** + * Payroll number (AGZ) + * + * Reference number assigned to the payroll of an organisation. + */ + public const PAYR_NUMB = 'AGZ'; + + /** + * Performed prescription identification (AUH) + * + * The identification of the prescription that has been carried into effect. + */ + public const PERF_PRES_IDEN = 'AUH'; + + /** + * Person registration number (AVP) + * + * A number assigned to an individual. + */ + public const PERS_REGI_NUMB = 'AVP'; + + /** + * Personal identity card number (ARJ) + * + * An identity card number assigned to a person. + */ + public const PERS_IDEN_CARD_NUMB = 'ARJ'; + + /** + * Phone number (AWV) + * + * A sequence of digits used to call from one telephone line to another in a + * public telephone network. + */ + public const PHON_NUMB = 'AWV'; + + /** + * Physical inventory recount reference number (ALN) + * + * A reference to a re-count of physically held inventory. + */ + public const PHYS_INVE_RECO_REFE_NUMB = 'ALN'; + + /** + * Physical medium (ASZ) + * + * Identifies the physical medium. + */ + public const PHYS_MEDI = 'ASZ'; + + /** + * Pick-up sheet number (AWU) + * + * Reference number assigned to a pick-up sheet. + */ + public const PICK_SHEE_NUMB = 'AWU'; + + /** + * Picture of a generic product (ASL) + * + * Reference identifying a picture of a generic product. + */ + public const PICT_OF_A_GENE_PROD = 'ASL'; + + /** + * Picture of actual product (ASK) + * + * Reference identifying the picture of an actual product. + */ + public const PICT_OF_ACTU_PROD = 'ASK'; + + /** + * Pilotage services exemption number (AVO) + * + * Number identifying the permit to not use pilotage services. + */ + public const PILO_SERV_EXEM_NUMB = 'AVO'; + + /** + * Pipeline number (AMZ) + * + * Number to identify a pipeline. + */ + public const PIPE_NUMB = 'AMZ'; + + /** + * Place of packing approval number (AVQ) + * + * Approval Number of the place where goods are packaged. + */ + public const PLAC_OF_PACK_APPR_NUMB = 'AVQ'; + + /** + * Place of positioning reference (AUA) + * + * Identifies the reference pertaining to the place of positioning. + */ + public const PLAC_OF_POSI_REFE = 'AUA'; + + /** + * Planning package (AOT) + * + * A reference for a planning package of work. + */ + public const PLAN_PACK = 'AOT'; + + /** + * Plant number (PE) + * + * A number that identifies a plant. + */ + public const PLAN_NUMB = 'PE'; + + /** + * Plot file (ANH) + * + * Reference number indicating that the file is a plot file. + */ + public const PLOT_FILE = 'ANH'; + + /** + * Policy form number (AWI) + * + * Number assigned to a policy form. + */ + public const POLI_FORM_NUMB = 'AWI'; + + /** + * Policy number (AKZ) + * + * Number assigned to a policy. + */ + public const POLI_NUMB = 'AKZ'; + + /** + * Post-entry reference (AEJ) + * + * Reference to a message related to a post-entry. + */ + public const POST_REFE = 'AEJ'; + + /** + * Pre-agreement number (AXN) + * + * A reference number identifying a pre-agreement. + */ + public const PREA_NUMB = 'AXN'; + + /** + * Premium rate table (AMO) + * + * Identifies the premium rate table. + */ + public const PREM_RATE_TABL = 'AMO'; + + /** + * Presenting bank's reference (ANS) + * + * Reference number of the presenting bank. + */ + public const PRES_BANK_REFE = 'ANS'; + + /** + * Previous banking status message reference (ATE) + * + * Message reference number of the previous banking status message being + * responded to. + */ + public const PREV_BANK_STAT_MESS_REFE = 'ATE'; + + /** + * Previous cargo control number (XP) + * + * Where a consignment is deconsolidated and/or transferred to the control of + * another carrier or freight forwarder (e.g. housebill, abstract) this + * references the previous (e.g. master) cargo control number. + */ + public const PREV_CARG_CONT_NUMB = 'XP'; + + /** + * Previous credit advice reference number (ALD) + * + * Reference number of the previous "Credit advice" message. + */ + public const PREV_CRED_ADVI_REFE_NUMB = 'ALD'; + + /** + * Previous delivery instruction number (AIF) + * + * The identification of a previous delivery instruction. + */ + public const PREV_DELI_INST_NUMB = 'AIF'; + + /** + * Previous delivery schedule number (ALM) + * + * A reference number identifying a previous delivery schedule. + */ + public const PREV_DELI_SCHE_NUMB = 'ALM'; + + /** + * Previous highest schedule number (SH) + * + * Number of the latest schedule of a previous period (ODETTE DELINS). + */ + public const PREV_HIGH_SCHE_NUMB = 'SH'; + + /** + * Previous invoice number (OI) + * + * Reference number identifying a previously issued invoice. + */ + public const PREV_INVO_NUMB = 'OI'; + + /** + * Previous member number (AGV) + * + * Reference number previously assigned to a member. + */ + public const PREV_MEMB_NUMB = 'AGV'; + + /** + * Previous rental agreement number (ALI) + * + * Number to identify the previous rental agreement number. + */ + public const PREV_RENT_AGRE_NUMB = 'ALI'; + + /** + * Previous request for metered reading reference number (AMA) + * + * Number to identify a previous request for a recording or reading of a + * measuring device. + */ + public const PREV_REQU_FOR_METE_READ_REFE_NUMB = 'AMA'; + + /** + * Previous scheme/plan number (AGX) + * + * Reference number previously assigned to a service scheme or plan. + */ + public const PREV_SCHE_NUMB = 'AGX'; + + /** + * Previous tax control number (ALT) + * + * A reference number identifying a previous tax control number. + */ + public const PREV_TAX_CONT_NUMB = 'ALT'; + + /** + * Price list number (PL) + * + * Reference number assigned to a price list. + */ + public const PRIC_LIST_NUMB = 'PL'; + + /** + * Price list version number (PI) + * + * A number that identifies the version of a price list. + */ + public const PRIC_LIST_VERS_NUMB = 'PI'; + + /** + * Price quote number (PR) + * + * Reference number assigned by the seller to a quote. + */ + public const PRIC_QUOT_NUMB = 'PR'; + + /** + * Price variation formula reference number (APK) + * + * The reference number which identifies a price variation formula. + */ + public const PRIC_VARI_FORM_REFE_NUMB = 'APK'; + + /** + * Price/sales catalogue response reference number (APF) + * + * A reference number identifying a response to a price/sales catalogue. + */ + public const PRIC_CATA_RESP_REFE_NUMB = 'APF'; + + /** + * Primary reference (AES) + * + * A number that identifies the primary reference. + */ + public const PRIM_REFE = 'AES'; + + /** + * Prime contractor contract number (PF) + * + * Reference number assigned by the client to the contract of the prime + * contractor. + */ + public const PRIM_CONT_CONT_NUMB = 'PF'; + + /** + * Principal reference number (ACL) + * + * A number that identifies the principal reference. + */ + public const PRIN_REFE_NUMB = 'ACL'; + + /** + * Principal's bank reference (ANR) + * + * Reference number of the principal's bank. + */ + public const PRIN_BANK_REFE = 'ANR'; + + /** + * Principal's reference (AOH) + * + * Reference number of the principal. + */ + public const PRIN_REFE = 'AOH'; + + /** + * Prior contractor registration number (ARY) + * + * A previous reference number used to identify a contractor. + */ + public const PRIO_CONT_REGI_NUMB = 'ARY'; + + /** + * Prior Data Universal Number System (DUNS) number (ARB) + * + * A previously assigned Data Universal Number System (DUNS) number. + */ + public const PRIO_DATA_UNIV_NUMB_SYST_DUNS_NUMB = 'ARB'; + + /** + * Prior policy number (AKY) + * + * The number of the prior policy. + */ + public const PRIO_POLI_NUMB = 'AKY'; + + /** + * Prior purchase order number (PW) + * + * Reference number of a purchase order previously sent to the supplier. + */ + public const PRIO_PURC_ORDE_NUMB = 'PW'; + + /** + * Prior trading partner identification number (ASN) + * + * Code specifying an identification number previously assigned to a trading + * partner. + */ + public const PRIO_TRAD_PART_IDEN_NUMB = 'ASN'; + + /** + * Processing plant number (AIS) + * + * Number to identify processing plant. + */ + public const PROC_PLAN_NUMB = 'AIS'; + + /** + * Procurement budget number (ALA) + * + * A number which uniquely identifies a procurement budget against which + * commitments or invoices can be allocated. + */ + public const PROC_BUDG_NUMB = 'ALA'; + + /** + * Product certification number (AXO) + * + * Number assigned by a governing body (or their agents) to a product which + * certifies compliance with a standard. + */ + public const PROD_CERT_NUMB = 'AXO'; + + /** + * Product change authority number (AKQ) + * + * Number which authorises a change in form, fit or function of a product. + */ + public const PROD_CHAN_AUTH_NUMB = 'AKQ'; + + /** + * Product characteristics directory (AVB) + * + * A reference to a product characteristics directory. + */ + public const PROD_CHAR_DIRE = 'AVB'; + + /** + * Product data file number (ASV) + * + * The number of a product data file. + */ + public const PROD_DATA_FILE_NUMB = 'ASV'; + + /** + * Product inquiry number (AXF) + * + * A reference number identifying a previously communicated product inquiry. + */ + public const PROD_INQU_NUMB = 'AXF'; + + /** + * Product reservation number (AEO) + * + * Number assigned by seller to identify reservation of specified products. + */ + public const PROD_RESE_NUMB = 'AEO'; + + /** + * Product sourcing agreement number (AIN) + * + * Reference number assigned to a product sourcing agreement. + */ + public const PROD_SOUR_AGRE_NUMB = 'AIN'; + + /** + * Product specification reference number (AXQ) + * + * Number assigned by the issuer to his product specification. + */ + public const PROD_SPEC_REFE_NUMB = 'AXQ'; + + /** + * Production code (PC) + * + * Number assigned by the manufacturer to a specified article or batch to + * identify the manufacturing date etc. for subsequent reference. + */ + public const PROD_CODE = 'PC'; + + /** + * Profile number (AMG) + * + * Reference number allocated to a discrete set of criteria. + */ + public const PROF_NUMB = 'AMG'; + + /** + * Proforma invoice document identifier (AAB) + * + * [1088] Reference number to identify a proforma invoice. + */ + public const PROF_INVO_DOCU_IDEN = 'AAB'; + + /** + * Project number (AEP) + * + * Reference number assigned to a project. + */ + public const PROJ_NUMB = 'AEP'; + + /** + * Project specification number (AER) + * + * Reference number identifying a project specification. + */ + public const PROJ_SPEC_NUMB = 'AER'; + + /** + * Promotion deal number (PD) + * + * Number assigned by a vendor to a special promotion activity. + */ + public const PROM_DEAL_NUMB = 'PD'; + + /** + * Proof of delivery reference number (ASI) + * + * A reference number identifying a proof of delivery which is generated by + * the goods recipient. + */ + public const PROO_OF_DELI_REFE_NUMB = 'ASI'; + + /** + * Proposed purchase order reference number (AUJ) + * + * A reference number assigned to a proposed purchase order. + */ + public const PROP_PURC_ORDE_REFE_NUMB = 'AUJ'; + + /** + * Public filing registration number (ARP) + * + * A number assigned at the time of registration of a public filing. + */ + public const PUBL_FILI_REGI_NUMB = 'ARP'; + + /** + * Publication issue number (ARM) + * + * A number assigned to identify a publication issue. + */ + public const PUBL_ISSU_NUMB = 'ARM'; + + /** + * Purchase for export Customs agreement number (ATB) + * + * A number assigned by a Customs authority allowing the purchase of goods + * free of tax because they are to be exported immediately after the purchase. + */ + public const PURC_FOR_EXPO_CUST_AGRE_NUMB = 'ATB'; + + /** + * Purchase order change number (PP) + * + * Reference number assigned by a buyer for a revision of a purchase order. + */ + public const PURC_ORDE_CHAN_NUMB = 'PP'; + + /** + * Purchase order number suffix (PS) + * + * A number added at the end of a purchase order number. + */ + public const PURC_ORDE_NUMB_SUFF = 'PS'; + + /** + * Purchase order response number (POR) + * + * Reference number assigned by the seller to an order response. + */ + public const PURC_ORDE_RESP_NUMB = 'POR'; + + /** + * Purchaser's request reference (APN) + * + * Reference identifying a request made by the purchaser. + */ + public const PURC_REQU_REFE = 'APN'; + + /** + * Purchasing activity clause number (AJC) + * + * A number indicating a clause applicable to a purchasing activity. + */ + public const PURC_ACTI_CLAU_NUMB = 'AJC'; + + /** + * Quantity valuation number (AFV) + * + * Reference number assigned to a quantity valuation. + */ + public const QUAN_VALU_NUMB = 'AFV'; + + /** + * Quantity valuation request number (AFW) + * + * Reference number assigned to a quantity valuation request. + */ + public const QUAN_VALU_REQU_NUMB = 'AFW'; + + /** + * Quarantine/treatment status reference number (AHT) + * + * Coded quarantine/treatment status of a container and its cargo and packing + * materials, generated by a shipping company based upon declarations + * presented by a shipper. + */ + public const QUAR_STAT_REFE_NUMB = 'AHT'; + + /** + * Quota number (ABJ) + * + * Reference number allocated by a government authority to identify a quota. + */ + public const QUOT_NUMB = 'ABJ'; + + /** + * Rail waybill number (WY) + * + * The number on a rail waybill. + */ + public const RAIL_WAYB_NUMB = 'WY'; + + /** + * Rail/road routing code (RC) + * + * International Western and Eastern European route code used in all rail + * organizations and specified in the international tariffs (rail tariffs) + * known by the customers. + */ + public const RAIL_ROUT_CODE = 'RC'; + + /** + * Railway consignment note number (RCN) + * + * Reference number assigned to a rail consignment note, see: 1001 = 720. + */ + public const RAIL_CONS_NOTE_NUMB = 'RCN'; + + /** + * Railway wagon number (ACR) + * + * (8260) Registered identification initials and numbers of railway wagon. + * Synonym: Rail car number. + */ + public const RAIL_WAGO_NUMB = 'ACR'; + + /** + * Rate code number (AWA) + * + * Number assigned by a buyer to rate a product. + */ + public const RATE_CODE_NUMB = 'AWA'; + + /** + * Rate note number (AHX) + * + * Reference assigned to a specific rate. + */ + public const RATE_NOTE_NUMB = 'AHX'; + + /** + * Receiver's file reference number (AOF) + * + * File reference number assigned by the receiver. + */ + public const RECE_FILE_REFE_NUMB = 'AOF'; + + /** + * Receiving advice number (ALO) + * + * A reference number to a receiving advice. + */ + public const RECE_ADVI_NUMB = 'ALO'; + + /** + * Receiving bank's authorization number (ANW) + * + * Authorization number of the receiving bank. + */ + public const RECE_BANK_AUTH_NUMB = 'ANW'; + + /** + * Receiving Bankgiro number (ATJ) + * + * Number of the receiving Bankgiro. + */ + public const RECE_BANK_NUMB = 'ATJ'; + + /** + * Receiving party's member identification (AGY) + * + * Identification used by the receiving party for a member of a service scheme + * or group of persons. + */ + public const RECE_PART_MEMB_IDEN = 'AGY'; + + /** + * Reference number assigned by third party (ANK) + * + * Reference number assigned by a third party. + */ + public const REFE_NUMB_ASSI_BY_THIR_PART = 'ANK'; + + /** + * Reference number of a request for metered reading (AMC) + * + * Number to identify a request for a recording or reading of a measuring + * device to be taken. + */ + public const REFE_NUMB_OF_A_REQU_FOR_METE_READ = 'AMC'; + + /** + * Reference number quoted on statement (AGN) + * + * Reference number quoted on the statement sent to the beneficiary for + * information purposes. + */ + public const REFE_NUMB_QUOT_ON_STAT = 'AGN'; + + /** + * Reference number to previous message (ACW) + * + * Reference number assigned to the message which was previously issued (e.g. + * in the case of a cancellation, the primary reference of the message to be + * cancelled will be quoted in this element). + */ + public const REFE_NUMB_TO_PREV_MESS = 'ACW'; + + /** + * Reference to account servicing bank's message (APL) + * + * Reference to the account servicing bank's message. + */ + public const REFE_TO_ACCO_SERV_BANK_MESS = 'APL'; + + /** + * Referred product for chemical analysis (AIY) + * + * A product number identifying the product which is used for chemical + * analysis considered valid for a group of products. + */ + public const REFE_PROD_FOR_CHEM_ANAL = 'AIY'; + + /** + * Referred product for mechanical analysis (AIX) + * + * A product number identifying the product which is used for mechanical + * analysis considered valid for a group of products. + */ + public const REFE_PROD_FOR_MECH_ANAL = 'AIX'; + + /** + * Regiristo Federal de Contribuyentes (ARQ) + * + * A federal tax identification number assigned by the Mexican tax authority. + */ + public const REGI_FEDE_DE_CONT = 'ARQ'; + + /** + * Registered capital reference (ALV) + * + * Registered capital reference of a company. + */ + public const REGI_CAPI_REFE = 'ALV'; + + /** + * Registered contractor activity type (AQU) + * + * Reference number identifying the type of registered contractor activity. + */ + public const REGI_CONT_ACTI_TYPE = 'AQU'; + + /** + * Registration number of previous Customs declaration (AEI) + * + * Registration number of the Customs declaration lodged for the previous + * Customs procedure. + */ + public const REGI_NUMB_OF_PREV_CUST_DECL = 'AEI'; + + /** + * Registro Informacion Fiscal (RIF) number (ARG) + * + * A number assigned by the government to a business in some Latin American + * countries. + */ + public const REGI_INFO_FISC_RIF_NUMB = 'ARG'; + + /** + * Registro Unico de Contribuyente (RUC) number (ARH) + * + * A number assigned by the government to a business in some Latin American + * countries. + */ + public const REGI_UNIC_DE_CONT_RUC_NUMB = 'ARH'; + + /** + * Registro Unico Tributario (RUT) (ATV) + * + * Tax identification number in Chile. + */ + public const REGI_UNIC_TRIB_RUT = 'ATV'; + + /** + * Reinsurer's claim number (APE) + * + * To identify the number assigned to the claim by the reinsurer. + */ + public const REIN_CLAI_NUMB = 'APE'; + + /** + * Related document number (ACE) + * + * Reference number identifying a related document. + */ + public const RELA_DOCU_NUMB = 'ACE'; + + /** + * Related party (AWO) + * + * Reference of a related party. + */ + public const RELA_PART = 'AWO'; + + /** + * Release number (RE) + * + * Reference number assigned to identify a release of a set of rules, + * conventions, conditions, etc. + */ + public const RELE_NUMB = 'RE'; + + /** + * Remittance advice number (RA) + * + * A number that identifies a remittance advice. + */ + public const REMI_ADVI_NUMB = 'RA'; + + /** + * Remitting bank's reference (ANQ) + * + * Reference number of the remitting bank. + */ + public const REMI_BANK_REFE = 'ANQ'; + + /** + * Repair data request number (AME) + * + * A number which uniquely identifies a request for data about repairs. + */ + public const REPA_DATA_REQU_NUMB = 'AME'; + + /** + * Repair estimate number (ABF) + * + * A number identifying a repair estimate. + */ + public const REPA_ESTI_NUMB = 'ABF'; + + /** + * Replaced meter unit number (AMK) + * + * Number identifying the replaced meter unit. + */ + public const REPL_METE_UNIT_NUMB = 'AMK'; + + /** + * Replacing part number (ABM) + * + * New part number which replaces the existing part number. + */ + public const REPL_PART_NUMB = 'ABM'; + + /** + * Replenishment purchase order number (AFH) + * + * Purchase order number specified by the buyer for the assignment to vendor's + * replenishment orders in a vendor managed inventory program. + */ + public const REPL_PURC_ORDE_NUMB = 'AFH'; + + /** + * Replenishment purchase order range end number (AML) + * + * Ending number of a range of purchase order numbers assigned by the buyer to + * vendor's replenishment orders. + */ + public const REPL_PURC_ORDE_RANG_END_NUMB = 'AML'; + + /** + * Replenishment purchase order range start number (AKM) + * + * Starting number of a range of purchase order numbers assigned by the buyer + * to vendor's replenishment orders. + */ + public const REPL_PURC_ORDE_RANG_STAR_NUMB = 'AKM'; + + /** + * Report number (ADY) + * + * Reference to a report to Customs by a carrier at the point of entry, + * encompassing both conveyance and consignment information. + */ + public const REPO_NUMB = 'ADY'; + + /** + * Reporting form number (ALE) + * + * Reference number assigned to the reporting form. + */ + public const REPO_FORM_NUMB = 'ALE'; + + /** + * Request for cancellation number (AET) + * + * A number that identifies a request for cancellation. + */ + public const REQU_FOR_CANC_NUMB = 'AET'; + + /** + * Request for quote number (AHU) + * + * Reference number assigned by the requestor to a request for quote. + */ + public const REQU_FOR_QUOT_NUMB = 'AHU'; + + /** + * Request number (AGI) + * + * The reference number of a request. + */ + public const REQU_NUMB = 'AGI'; + + /** + * Reservation office identifier (LRC) + * + * Reference to the office where a reservation was made. + */ + public const RESE_OFFI_IDEN = 'LRC'; + + /** + * Reservation station indentifier (AVT) + * + * Reference to the station where a reservation was made. + */ + public const RESE_STAT_INDE = 'AVT'; + + /** + * Reserved goods identifier (AWY) + * + * A reference number identifying goods in stock which have been reserved for + * a party. + */ + public const RESE_GOOD_IDEN = 'AWY'; + + /** + * Returnable container reference number (ALP) + * + * A reference number identifying a returnable container. + */ + public const RETU_CONT_REFE_NUMB = 'ALP'; + + /** + * Returns notice number (ALQ) + * + * A reference number to a returns notice. + */ + public const RETU_NOTI_NUMB = 'ALQ'; + + /** + * Road consignment note number (CMR) + * + * Reference number assigned to a road consignment note, see: 1001 = 730. + */ + public const ROAD_CONS_NOTE_NUMB = 'CMR'; + + /** + * Safe custody number (ASR) + * + * The number of a file or portfolio kept for safe custody on behalf of + * clients. + */ + public const SAFE_CUST_NUMB = 'ASR'; + + /** + * Safe deposit box number (ATI) + * + * Number of the safe deposit box. + */ + public const SAFE_DEPO_BOX_NUMB = 'ATI'; + + /** + * Sales department number (SD) + * + * A number that identifies a sales department. + */ + public const SALE_DEPA_NUMB = 'SD'; + + /** + * Sales forecast number (ALR) + * + * A reference number identifying a sales forecast. + */ + public const SALE_FORE_NUMB = 'ALR'; + + /** + * Sales office number (SM) + * + * A number that identifies a sales office. + */ + public const SALE_OFFI_NUMB = 'SM'; + + /** + * Sales person number (SA) + * + * Identification number of a sales person. + */ + public const SALE_PERS_NUMB = 'SA'; + + /** + * Sales region number (SB) + * + * A number that identifies a sales region. + */ + public const SALE_REGI_NUMB = 'SB'; + + /** + * Sales report number (ALS) + * + * A reference number identifying a sales report. + */ + public const SALE_REPO_NUMB = 'ALS'; + + /** + * Scan line (SP) + * + * A number that identifies a scan line. + */ + public const SCAN_LINE = 'SP'; + + /** + * Scheme/plan number (AGW) + * + * Reference number assigned to a service scheme or plan. + */ + public const SCHE_NUMB = 'AGW'; + + /** + * Second beneficiary's reference (AFP) + * + * Reference of the second beneficiary. + */ + public const SECO_BENE_REFE = 'AFP'; + + /** + * Secondary Customs reference (AFM) + * + * A number that identifies the secondary customs reference. + */ + public const SECO_CUST_REFE = 'AFM'; + + /** + * Secretariat number (ATD) + * + * A reference number identifying a secretariat. + */ + public const SECR_NUMB = 'ATD'; + + /** + * Secure delivery terms and conditions agreement reference (ADX) + * + * A reference to a secure delivery terms and conditions agreement. A secured + * delivery agreement is an agreement containing terms and conditions to + * secure deliveries in case of failure in the production or logistics process + * of the supplier. + */ + public const SECU_DELI_TERM_AND_COND_AGRE_REFE = 'ADX'; + + /** + * Seller's catalogue number (ABN) + * + * Identification number assigned to a seller's catalogue. + */ + public const SELL_CATA_NUMB = 'ABN'; + + /** + * Sellers reference number (SS) + * + * Reference number assigned to a transaction by the seller. + */ + public const SELL_REFE_NUMB = 'SS'; + + /** + * Sender's clause number (AQO) + * + * The number that identifies the sender's clause. + */ + public const SEND_CLAU_NUMB = 'AQO'; + + /** + * Sender's file reference number (AOE) + * + * File reference number assigned by the sender. + */ + public const SEND_FILE_REFE_NUMB = 'AOE'; + + /** + * Sender's reference to the original message (AGO) + * + * The reference provided by the sender of the original message. + */ + public const SEND_REFE_TO_THE_ORIG_MESS = 'AGO'; + + /** + * Sending bank's reference number (ANY) + * + * Reference number of the sending bank. + */ + public const SEND_BANK_REFE_NUMB = 'ANY'; + + /** + * Sending Bankgiro number (ATK) + * + * Number of the sending Bankgiro. + */ + public const SEND_BANK_NUMB = 'ATK'; + + /** + * Serial number (SE) + * + * Identification number of an item which distinguishes this specific item out + * of an number of identical items. + */ + public const SERI_NUMB = 'SE'; + + /** + * Serial shipping container code (AXI) + * + * Reference number identifying a logistic unit. + */ + public const SERI_SHIP_CONT_CODE = 'AXI'; + + /** + * Service category reference (AWM) + * + * Reference identifying the service category. + */ + public const SERV_CATE_REFE = 'AWM'; + + /** + * Service group identification number (AGT) + * + * Identification used for a group of services. + */ + public const SERV_GROU_IDEN_NUMB = 'AGT'; + + /** + * Service provider (AWK) + * + * Reference of the service provider. + */ + public const SERV_PROV = 'AWK'; + + /** + * Service relation number (AXH) + * + * A reference number identifying the relationship between a service provider + * and a service client, e.g., treatment of a patient in a hospital, usage by + * a member of a library facility, etc. + */ + public const SERV_RELA_NUMB = 'AXH'; + + /** + * Ship from (SF) + * + * A number that identifies a ship from location. + */ + public const SHIP_FROM = 'SF'; + + /** + * Ship notice/manifest number (MA) + * + * The number assigned to a ship notice or manifest. + */ + public const SHIP_NOTI_NUMB = 'MA'; + + /** + * Ship's stay reference number (ATZ) + * + * (1099) Reference number assigned by a port authority to the stay of a + * vessel in the port. + */ + public const SHIP_STAY_REFE_NUMB = 'ATZ'; + + /** + * Shipment reference number (SRN) + * + * [1065] Reference number assigned to a shipment. + */ + public const SHIP_REFE_NUMB = 'SRN'; + + /** + * Shipowner's authorization number (ADM) + * + * Reference number assigned by the shipowner as an authorization number to + * transport certain goods (such as hazardous goods, cool or reefer goods). + */ + public const SHIP_AUTH_NUMB = 'ADM'; + + /** + * Shipping label serial number (LA) + * + * The serial number on a shipping label. + */ + public const SHIP_LABE_SERI_NUMB = 'LA'; + + /** + * Shipping note number (AEV) + * + * [1123] Reference number assigned to a shipping note. + */ + public const SHIP_NOTE_NUMB = 'AEV'; + + /** + * Shipping unit identification (ACC) + * + * Identifying marks on the outermost unit that is used to transport + * merchandise. + */ + public const SHIP_UNIT_IDEN = 'ACC'; + + /** + * SID (Shipper's identifying number for shipment) (SI) + * + * A number that identifies the SID (shipper's identification) number for a + * shipment. + */ + public const SID_SHIP_IDEN_NUMB_FOR_SHIP = 'SI'; + + /** + * Signal code number (AHE) + * + * Reference number to identify a signal. + */ + public const SIGN_CODE_NUMB = 'AHE'; + + /** + * Single transaction sequence number (AGJ) + * + * A number that identifies a single transaction sequence. + */ + public const SING_TRAN_SEQU_NUMB = 'AGJ'; + + /** + * Site specific procedures, terms, and conditions number (AJL) + * + * A number indicating a set of site specific procedures, terms and + * conditions. + */ + public const SITE_SPEC_PROC_TERM_AND_COND_NUMB = 'AJL'; + + /** + * Situation number (AFZ) + * + * Common reference number given to documents concerning a determined period + * of works. + */ + public const SITU_NUMB = 'AFZ'; + + /** + * Slaughter plant number (AIT) + * + * Number to identify slaughter plant. + */ + public const SLAU_PLAN_NUMB = 'AIT'; + + /** + * Slaughterhouse approval number (AVG) + * + * Veterinary licence number allocated by a national authority to a + * slaughterhouse. + */ + public const SLAU_APPR_NUMB = 'AVG'; + + /** + * Social security number (ARR) + * + * An identification number assigned to an individual by the social security + * administration. + */ + public const SOCI_SECU_NUMB = 'ARR'; + + /** + * Software editor reference (AUM) + * + * Reference identifying the software editor. + */ + public const SOFT_EDIT_REFE = 'AUM'; + + /** + * Software quality reference (AUO) + * + * Reference allocated to the software by a quality assurance agency. + */ + public const SOFT_QUAL_REFE = 'AUO'; + + /** + * Software reference (AUN) + * + * Reference identifying the software. + */ + public const SOFT_REFE = 'AUN'; + + /** + * Source document internal reference (AOG) + * + * Reference number assigned to a source document for internal usage. + */ + public const SOUR_DOCU_INTE_REFE = 'AOG'; + + /** + * Special budget account number (APU) + * + * The number of a special budget account. + */ + public const SPEC_BUDG_ACCO_NUMB = 'APU'; + + /** + * Special instructions number (AJK) + * + * A number indicating a citation used for special instructions. + */ + public const SPEC_INST_NUMB = 'AJK'; + + /** + * Specification number (SZ) + * + * Number assigned by the issuer to his specification. + */ + public const SPEC_NUMB = 'SZ'; + + /** + * Split delivery number (AXG) + * + * A reference number identifying a split delivery. + */ + public const SPLI_DELI_NUMB = 'AXG'; + + /** + * Standard Carrier Alpha Code (SCAC) number (AAZ) + * + * For maritime shipments, this code qualifies a Standard Alpha Carrier Code + * (SCAC) as issued by the United Stated National Motor Traffic Association + * Inc. + */ + public const STAN_CARR_ALPH_CODE_SCAC_NUMB = 'AAZ'; + + /** + * Standard Industry Classification (SIC) number (AJT) + * + * A number specifying a standard industry classification. + */ + public const STAN_INDU_CLAS_SIC_NUMB = 'AJT'; + + /** + * Standard number of inspection document (ALW) + * + * Code identifying the standard number of the inspection document supplied. + */ + public const STAN_NUMB_OF_INSP_DOCU = 'ALW'; + + /** + * Standard's code number (GD) + * + * Number to identify a specific parameter within a standardization + * description (e.g. M5 for screws or DIN A4 for paper). + */ + public const STAN_CODE_NUMB = 'GD'; + + /** + * Standard's number (GA) + * + * Number to identify a standardization description (e.g. ISO 9375). + */ + public const STAN_NUMB = 'GA'; + + /** + * Standard's version number (AMY) + * + * The version number assigned to a standard. + */ + public const STAN_VERS_NUMB = 'AMY'; + + /** + * State or province assigned entity identification (AQW) + * + * Reference number of an entity assigned by a state or province. + */ + public const STAT_OR_PROV_ASSI_ENTI_IDEN = 'AQW'; + + /** + * Statement number (ADP) + * + * A reference number identifying a statement. + */ + public const STAT_NUMB = 'ADP'; + + /** + * Statement of work (AOR) + * + * A reference number for a statement of work. + */ + public const STAT_OF_WORK = 'AOR'; + + /** + * Station reference number (STA) + * + * International UIC code assigned to every European rail station (CIM + * convention). + */ + public const STAT_REFE_NUMB = 'STA'; + + /** + * Statistic Bundes Amt (SBA) identifier (AQV) + * + * A German industry classification code issued by Statistic Bundes Amt (SBA) + * to identify the activity of a company. + */ + public const STAT_BUND_AMT_SBA_IDEN = 'AQV'; + + /** + * Status report number (AQK) + * + * (1125) The reference number for a status report. + */ + public const STAT_REPO_NUMB = 'AQK'; + + /** + * Stock adjustment number (ARZ) + * + * A number identifying a stock adjustment. + */ + public const STOC_ADJU_NUMB = 'ARZ'; + + /** + * Stock exchange company identifier (ARU) + * + * A reference assigned by the stock exchange to a company. + */ + public const STOC_EXCH_COMP_IDEN = 'ARU'; + + /** + * Stock keeping unit number (ABW) + * + * A number that identifies the stock keeping unit. + */ + public const STOC_KEEP_UNIT_NUMB = 'ABW'; + + /** + * Sub file (ANE) + * + * Identifies the sub file in a structure of related files. + */ + public const SUB_FILE = 'ANE'; + + /** + * Sub-house bill of lading number (ABH) + * + * Reference assigned to a sub-house bill of lading. + */ + public const SUBH_BILL_OF_LADI_NUMB = 'ABH'; + + /** + * Substitute air waybill number (AEY) + * + * Reference number assigned to a substitute air waybill, see: 1001 = 743. + */ + public const SUBS_AIR_WAYB_NUMB = 'AEY'; + + /** + * Suffix (AJY) + * + * A reference to specify a suffix added to the end of a basic identifier. + */ + public const SUFFIX = 'AJY'; + + /** + * Supplier's control number (AEU) + * + * Reference to a file regarding a control of the supplier carried out on + * departure of the goods. + */ + public const SUPP_CONT_NUMB = 'AEU'; + + /** + * Supplier's credit claim reference number (ASJ) + * + * A reference number identifying a supplier's credit claim. + */ + public const SUPP_CRED_CLAI_REFE_NUMB = 'ASJ'; + + /** + * Supplier's customer reference number (AVC) + * + * A number, assigned by a supplier, to reference a customer. + */ + public const SUPP_CUST_REFE_NUMB = 'AVC'; + + /** + * Swap order number (SW) + * + * Number assigned by the seller to a swap order (see definition of DE 1001, + * code 229). + */ + public const SWAP_ORDE_NUMB = 'SW'; + + /** + * Symbol number (AEC) + * + * A number that identifies a symbol. + */ + public const SYMB_NUMB = 'AEC'; + + /** + * Systeme Informatique pour le Repertoire des ENtreprises (SIREN) number (ARK) + * + * An identification number known as a SIREN assigned to a business in France. + */ + public const SYST_INFO_POUR_LE_REPE_DES_ENTR_SIRE_NUMB = 'ARK'; + + /** + * Systeme Informatique pour le Repertoire des ETablissements (SIRET) number (ARL) + * + * An identification number known as a SIRET assigned to a business location + * in France. + */ + public const SYST_INFO_POUR_LE_REPE_DES_ETAB_SIRE_NUMB = 'ARL'; + + /** + * Tariff number (AFG) + * + * A number that identifies a tariff. + */ + public const TARI_NUMB = 'AFG'; + + /** + * Tax exemption licence number (TL) + * + * Number assigned by the tax authorities to a party indicating its tax + * exemption authorization. This number could relate to a specified business + * type, a specified local area or a class of products. + */ + public const TAX_EXEM_LICE_NUMB = 'TL'; + + /** + * Tax payment identifier (ABI) + * + * [1168] Reference number identifying a payment of a duty or tax e.g. under a + * transit procedure. + */ + public const TAX_PAYM_IDEN = 'ABI'; + + /** + * Tax registration number (AHP) + * + * The registration number by which a company/organization is identified with + * the tax administration. + */ + public const TAX_REGI_NUMB = 'AHP'; + + /** + * Team assignment number (CST) + * + * Team number assigned to a group that is responsible for working a + * particular transaction. + */ + public const TEAM_ASSI_NUMB = 'CST'; + + /** + * Technical document number (AJW) + * + * A number specifying a technical document. + */ + public const TECH_DOCU_NUMB = 'AJW'; + + /** + * Technical order number (AJX) + * + * A reference to an order that specifies a technical change. + */ + public const TECH_ORDE_NUMB = 'AJX'; + + /** + * Technical phase reference (ARX) + * + * A reference which identifies a specific technical phase. + */ + public const TECH_PHAS_REFE = 'ARX'; + + /** + * Technical regulation (ANG) + * + * Reference number identifying a technical regulation. + */ + public const TECH_REGU = 'ANG'; + + /** + * Telex message number (TE) + * + * Reference number identifying a telex message. + */ + public const TELE_MESS_NUMB = 'TE'; + + /** + * Terminal operator's consignment reference (TCR) + * + * Reference assigned to a consignment by the terminal operator. + */ + public const TERM_OPER_CONS_REFE = 'TCR'; + + /** + * Test report number (TP) + * + * Reference number identifying a test report document relevant to the + * product. + */ + public const TEST_REPO_NUMB = 'TP'; + + /** + * Test specification number (AXJ) + * + * A reference number identifying a test specification. + */ + public const TEST_SPEC_NUMB = 'AXJ'; + + /** + * Text Element Identifier deletion reference (ABX) + * + * The reference used within a given TEI (Text Element Identifier) which is to + * be deleted. + */ + public const TEXT_ELEM_IDEN_DELE_REFE = 'ABX'; + + /** + * Third bank's reference (AKN) + * + * Reference number of the third bank. + */ + public const THIR_BANK_REFE = 'AKN'; + + /** + * Through bill of lading number (AFA) + * + * Reference number assigned to a through bill of lading, see: 1001 = 761. + */ + public const THRO_BILL_OF_LADI_NUMB = 'AFA'; + + /** + * Ticket control number (CBA) + * + * Reference giving access to all the details associated with the ticket. + */ + public const TICK_CONT_NUMB = 'CBA'; + + /** + * Time series reference (AUU) + * + * Reference to a time series. + */ + public const TIME_SERI_REFE = 'AUU'; + + /** + * TIR carnet number (TI) + * + * Reference number assigned to a TIR carnet. + */ + public const TIR_CARN_NUMB = 'TI'; + + /** + * Tokyo SHOKO Research (TSR) business identifier (ARI) + * + * A number assigned to a business by TSR. + */ + public const TOKY_SHOK_RESE_TSR_BUSI_IDEN = 'ARI'; + + /** + * Tooling contract number (AXL) + * + * A reference number of the tooling contract. + */ + public const TOOL_CONT_NUMB = 'AXL'; + + /** + * TRACES party identification (AXS) + * + * The party identification number used in the European Union's Trade Control + * and Expert System (TRACES). + */ + public const TRAC_PART_IDEN = 'AXS'; + + /** + * Trader account number (ADZ) + * + * Number assigned by a Customs authority which uniquely identifies a trader + * (i.e. importer, exporter or declarant) for Customs purposes. + */ + public const TRAD_ACCO_NUMB = 'ADZ'; + + /** + * Trading partner identification number (ASM) + * + * Code specifying an identification assigned to an entity with whom one + * conducts trade. + */ + public const TRAD_PART_IDEN_NUMB = 'ASM'; + + /** + * Training flight number (AHC) + * + * Non-revenue producing airline flight for training purposes. + */ + public const TRAI_FLIG_NUMB = 'AHC'; + + /** + * Transaction reference number (TN) + * + * Reference applied to a transaction between two or more parties over a + * defined life cycle; e.g. number applied by importer or broker to obtain + * release from Customs, may then used to control declaration through final + * accounting (synonyms: declaration, entry number). + */ + public const TRAN_REFE_NUMB = 'TN'; + + /** + * Transfer number (TF) + * + * An extra number assigned to goods or a container which functions as a + * reference number or as an authorization number to get the goods or + * container released from a certain party. + */ + public const TRAN_NUMB = 'TF'; + + /** + * Transit (onward carriage) guarantee (bond) number (ABK) + * + * Reference number to identify the guarantee or security provided for Customs + * transit operation (CCC). + */ + public const TRAN_ONWA_CARR_GUAR_BOND_NUMB = 'ABK'; + + /** + * Transport contract document identifier (AAS) + * + * [1188] Reference number to identify a document evidencing a transport + * contract. + */ + public const TRAN_CONT_DOCU_IDEN = 'AAS'; + + /** + * Transport contract reference number (AHI) + * + * Reference number of a transport contract. + */ + public const TRAN_CONT_REFE_NUMB = 'AHI'; + + /** + * Transport costs reference number (AKW) + * + * Reference number of the transport costs. + */ + public const TRAN_COST_REFE_NUMB = 'AKW'; + + /** + * Transport equipment acceptance order reference (ATX) + * + * Reference number assigned to an order to accept transport equipment that is + * to be delivered by an inland carrier to a specified facility. + */ + public const TRAN_EQUI_ACCE_ORDE_REFE = 'ATX'; + + /** + * Transport equipment gross mass verification order reference (VOR) + * + * Reference number identifying the order for obtaining a Verified Gross Mass + * (weight) of a packed transport equipment as per SOLAS Chapter VI, + * Regulation 2, paragraphs 4-6. + */ + public const TRAN_EQUI_GROS_MASS_VERI_ORDE_REFE = 'VOR'; + + /** + * Transport equipment gross mass verification reference number (VGR) + * + * Reference number identifying the documentation of a transport equipment + * gross mass (weight) verification. + */ + public const TRAN_EQUI_GROS_MASS_VERI_REFE_NUMB = 'VGR'; + + /** + * Transport equipment identifier (AAQ) + * + * [8260] To identify a piece if transport equipment e.g. container or unit + * load device. + */ + public const TRAN_EQUI_IDEN = 'AAQ'; + + /** + * Transport equipment release order reference (ATY) + * + * Reference number assigned to an order to release transport equipment which + * is to be picked up by an inland carrier from a specified facility. + */ + public const TRAN_EQUI_RELE_ORDE_REFE = 'ATY'; + + /** + * Transport equipment return reference (AKC) + * + * Reference known at the address to return equipment to. + */ + public const TRAN_EQUI_RETU_REFE = 'AKC'; + + /** + * Transport equipment seal identifier (SN) + * + * [9308] The identification number of a seal affixed to a piece of transport + * equipment. + */ + public const TRAN_EQUI_SEAL_IDEN = 'SN'; + + /** + * Transport equipment stripping order (AKX) + * + * Reference number assigned to the order to strip goods from transport + * equipment. + */ + public const TRAN_EQUI_STRI_ORDE = 'AKX'; + + /** + * Transport equipment stuffing order (AKF) + * + * Reference number assigned to the order to stuff goods in transport + * equipment. + */ + public const TRAN_EQUI_STUF_ORDE = 'AKF'; + + /** + * Transport equipment survey reference (AKD) + * + * Reference number assigned by the ordering party to the transport equipment + * survey order. + */ + public const TRAN_EQUI_SURV_REFE = 'AKD'; + + /** + * Transport equipment survey reference number (AKU) + * + * Reference number known at the address where the transport equipment will be + * or has been surveyed. + */ + public const TRAN_EQUI_SURV_REFE_NUMB = 'AKU'; + + /** + * Transport equipment survey report number (AKE) + * + * Reference number used by a party to identify its transport equipment survey + * report. + */ + public const TRAN_EQUI_SURV_REPO_NUMB = 'AKE'; + + /** + * Transport instruction number (TIN) + * + * Reference number identifying a transport instruction. + */ + public const TRAN_INST_NUMB = 'TIN'; + + /** + * Transport means journey identifier (CRN) + * + * [8028] To identify a journey of a means of transport, for example voyage + * number, flight number, trip number. + */ + public const TRAN_MEAN_JOUR_IDEN = 'CRN'; + + /** + * Transport route (AEM) + * + * A predefined and identified sequence of points where goods are collected, + * agreed between partners, e.g. the party in charge of organizing the + * transport and the parties where goods will be collected. The same + * collecting points may be included in different transport routes, but in a + * different sequence. + */ + public const TRAN_ROUT = 'AEM'; + + /** + * Transport section reference number (AIW) + * + * A number identifying a transport section. + */ + public const TRAN_SECT_REFE_NUMB = 'AIW'; + + /** + * Transport status report number (AXK) + * + * [1125] A reference number identifying a transport status report. + */ + public const TRAN_STAT_REPO_NUMB = 'AXK'; + + /** + * Transportation account number (AJZ) + * + * An account number to be charged or credited for transportation. + */ + public const TRAN_ACCO_NUMB = 'AJZ'; + + /** + * Transportation Control Number (TCN) (AOW) + * + * A number assigned for transportation purposes. + */ + public const TRAN_CONT_NUMB_TCN = 'AOW'; + + /** + * Transportation exportation no. for in bond movement (AFJ) + * + * A number that identifies the transportation exportation number for an in + * bond movement. + */ + public const TRAN_EXPO_NO_FOR_IN_BOND_MOVE = 'AFJ'; + + /** + * Travel service (AUE) + * + * Reference identifying a travel service. + */ + public const TRAV_SERV = 'AUE'; + + /** + * Treaty number (ADF) + * + * A number that identifies a treaty. + */ + public const TREA_NUMB = 'ADF'; + + /** + * Trucker's bill of lading (TB) + * + * A cargo list/description issued by a motor carrier of freight. + */ + public const TRUC_BILL_OF_LADI = 'TB'; + + /** + * U.S. Code of Federal Regulations (CFR) (AJB) + * + * A reference indicating a citation from the U.S. Code of Federal Regulations + * (CFR). + */ + public const US_CODE_OF_FEDE_REGU_CFR = 'AJB'; + + /** + * U.S. Defense Federal Acquisition Regulation Supplement (AJD) + * + * A reference indicating a citation from the U.S. Defense Federal Acquisition + * Regulation Supplement. + */ + public const US_DEFE_FEDE_ACQU_REGU_SUPP = 'AJD'; + + /** + * U.S. Department of Veterans Affairs Acquisition Regulation (AJN) + * + * A reference indicating a citation from the U.S. Department of Veterans + * Affairs Acquisition Regulation. + */ + public const US_DEPA_OF_VETE_AFFA_ACQU_REGU = 'AJN'; + + /** + * U.S. Federal Acquisition Regulation (AJG) + * + * A reference indicating a citation from the U.S. Federal Acquisition + * Regulation. + */ + public const US_FEDE_ACQU_REGU = 'AJG'; + + /** + * U.S. Federal Information Resources Management Regulation (AJI) + * + * A reference indicating a citation from U.S. Federal Information Resources + * Management Regulation. + */ + public const US_FEDE_INFO_RESO_MANA_REGU = 'AJI'; + + /** + * U.S. General Services Administration Regulation (AJH) + * + * A reference indicating a citation from U.S. General Services Administration + * Regulation. + */ + public const US_GENE_SERV_ADMI_REGU = 'AJH'; + + /** + * Ultimate customer's order number (UO) + * + * The originator's order number as forwarded in a sequence of parties + * involved. + */ + public const ULTI_CUST_ORDE_NUMB = 'UO'; + + /** + * Ultimate customer's reference number (UC) + * + * The originator's reference number as forwarded in a sequence of parties + * involved. + */ + public const ULTI_CUST_REFE_NUMB = 'UC'; + + /** + * Uniform Resource Identifier (URI) + * + * A string of characters used to identify a name of a resource on the + * worldwide web. + */ + public const UNIF_RESO_IDEN = 'URI'; + + /** + * Unique claims reference number of the sender (ACT) + * + * A number that identifies the unique claims reference of the sender. + */ + public const UNIQ_CLAI_REFE_NUMB_OF_THE_SEND = 'ACT'; + + /** + * Unique consignment reference number (UCN) + * + * [1202] Unique reference identifying a particular consignment of goods. + * Synonym: UCR, UCRN. + */ + public const UNIQ_CONS_REFE_NUMB = 'UCN'; + + /** + * Unique goods shipment identifier (AVU) + * + * Unique identifier assigned to a shipment of goods linking trade, tracking + * and transport information. + */ + public const UNIQ_GOOD_SHIP_IDEN = 'AVU'; + + /** + * Unique market reference (ADQ) + * + * A number that identifies a unique market. + */ + public const UNIQ_MARK_REFE = 'ADQ'; + + /** + * United Nations Dangerous Goods identifier (UN) + * + * [7124] United Nations Dangerous Goods Identifier (UNDG) is the unique + * serial number assigned within the United Nations to substances and articles + * contained in a list of the dangerous goods most commonly carried. + */ + public const UNIT_NATI_DANG_GOOD_IDEN = 'UN'; + + /** + * Upper number of range (UAR) + * + * Upper number in a range of numbers. + */ + public const UPPE_NUMB_OF_RANG = 'UAR'; + + /** + * US Customs Service (USCS) entry code (AQM) + * + * An entry number assigned by the United States (US) customs service. + */ + public const US_CUST_SERV_USCS_ENTR_CODE = 'AQM'; + + /** + * US government agency number (ACB) + * + * A number that identifies a United States Government agency. + */ + public const US_GOVE_AGEN_NUMB = 'ACB'; + + /** + * US, Department of Transportation bond surety code (AMQ) + * + * A bond surety code assigned by the United States Department of + * Transportation (DOT). + */ + public const US_DEPA_OF_TRAN_BOND_SURE_CODE = 'AMQ'; + + /** + * US, Federal Communications Commission (FCC) import condition number (AMS) + * + * A number known as the United States Federal Communications Commission (FCC) + * import condition number applying to certain types of regulated + * communications equipment. + */ + public const US_FEDE_COMM_COMM_FCC_IMPO_COND_NUMB = 'AMS'; + + /** + * US, Food and Drug Administration establishment indicator (AMR) + * + * An establishment indicator assigned by the United States Food and Drug + * Administration. + */ + public const US_FOOD_AND_DRUG_ADMI_ESTA_INDI = 'AMR'; + + /** + * VAT registration number (VA) + * + * Unique number assigned by the relevant tax authority to identify a party + * for use in relation to Value Added Tax (VAT). + */ + public const VAT_REGI_NUMB = 'VA'; + + /** + * Vehicle Identification Number (VIN) (AKG) + * + * The identification number which uniquely distinguishes one vehicle from + * another through the lifespan of the vehicle. + */ + public const VEHI_IDEN_NUMB_VIN = 'AKG'; + + /** + * Vehicle licence number (ABZ) + * + * Number of the licence issued for a vehicle by an agency of government. + */ + public const VEHI_LICE_NUMB = 'ABZ'; + + /** + * Vendor contract number (VC) + * + * Number assigned by the vendor to a contract. + */ + public const VEND_CONT_NUMB = 'VC'; + + /** + * Vendor ID number (VR) + * + * A number that identifies a vendor's identification. + */ + public const VEND_ID_NUMB = 'VR'; + + /** + * Vendor order number suffix (VS) + * + * The suffix for a vendor order number. + */ + public const VEND_ORDE_NUMB_SUFF = 'VS'; + + /** + * Vendor product number (VP) + * + * Number assigned by vendor to another manufacturer's product. + */ + public const VEND_PROD_NUMB = 'VP'; + + /** + * Vessel identifier (VM) + * + * (8123) Reference identifying a vessel. + */ + public const VESS_IDEN = 'VM'; + + /** + * Voucher number (VV) + * + * Reference number identifying a voucher. + */ + public const VOUC_NUMB = 'VV'; + + /** + * Voyage number (VON) + * + * (8028) Reference number assigned to the voyage of the vessel. + */ + public const VOYA_NUMB = 'VON'; + + /** + * Wage determination number (AJR) + * + * A number specifying a wage determination. + */ + public const WAGE_DETE_NUMB = 'AJR'; + + /** + * Warehouse entry number (WE) + * + * Entry number under which imported merchandise was placed in a Customs + * bonded warehouse. + */ + public const WARE_ENTR_NUMB = 'WE'; + + /** + * Warehouse receipt number (WR) + * + * A number identifying a warehouse receipt. + */ + public const WARE_RECE_NUMB = 'WR'; + + /** + * Warehouse storage location number (WS) + * + * A number identifying a warehouse storage location. + */ + public const WARE_STOR_LOCA_NUMB = 'WS'; + + /** + * Waybill number (AAM) + * + * Reference number assigned to a waybill, see: 1001 = 700. + */ + public const WAYB_NUMB = 'AAM'; + + /** + * Weight agreement number (WM) + * + * A number identifying a weight agreement. + */ + public const WEIG_AGRE_NUMB = 'WM'; + + /** + * Well number (WN) + * + * A number assigned to a shaft sunk into the ground. + */ + public const WELL_NUMB = 'WN'; + + /** + * Wool identification number (AHQ) + * + * Shipping Identification Mark (SIM) allocated to a wool consignment by a + * shipping company. + */ + public const WOOL_IDEN_NUMB = 'AHQ'; + + /** + * Wool tax reference number (AHR) + * + * Reference or indication of the payment of wool tax. + */ + public const WOOL_TAX_REFE_NUMB = 'AHR'; + + /** + * Work breakdown structure (AOL) + * + * A structure reference that identifies the breakdown of work for a project. + */ + public const WORK_BREA_STRU = 'AOL'; + + /** + * Work item quantity determination (AWF) + * + * A reference assigned to a work item quantity determination. + */ + public const WORK_ITEM_QUAN_DETE = 'AWF'; + + /** + * Work order (AOV) + * + * Reference number for an order to do work. + */ + public const WORK_ORDE = 'AOV'; + + /** + * Work package (AOS) + * + * A reference for a detailed package of work. + */ + public const WORK_PACK = 'AOS'; + + /** + * Work shift (AOK) + * + * A work shift reference number. + */ + public const WORK_SHIF = 'AOK'; + + /** + * Work task charge number (AON) + * + * A reference assigned to a specific work task charge. + */ + public const WORK_TASK_CHAR_NUMB = 'AON'; + + /** + * Work team (AOP) + * + * A reference to identify a team performing work. + */ + public const WORK_TEAM = 'AOP'; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdSchemeIdentifiers.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdSchemeIdentifiers.php new file mode 100644 index 000000000..c6edbccf4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdSchemeIdentifiers.php @@ -0,0 +1,1079 @@ + + * @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 + */ + public const ISO_6523_0002 = '0002'; + + /** + * Codification Numerique des Etablissments Financiers En Belgique + */ + public const ISO_6523_0003 = '0003'; + + /** + * NBS/OSI NETWORK + */ + public const ISO_6523_0004 = '0004'; + + /** + * USA FED GOV OSI NETWORK + */ + public const ISO_6523_0005 = '0005'; + + /** + * USA DOD OSI NETWORK + */ + public const ISO_6523_0006 = '0006'; + + /** + * Organisationsnummer + */ + public const ISO_6523_0007 = '0007'; + + /** + * LE NUMERO NATIONAL + */ + public const ISO_6523_0008 = '0008'; + + /** + * SIRET-CODE + */ + public const ISO_6523_0009 = '0009'; + + /** + * Organizational Identifiers for Structured Names under ISO 9541 Part 2 + */ + public const ISO_6523_0010 = '0010'; + + /** + * International Code Designator for the Identification of OSI-based, + * Amateur Radio Organizations, Network Objects and Application Services. + */ + public const ISO_6523_0011 = '0011'; + + /** + * European Computer Manufacturers Association: ECMA + */ + public const ISO_6523_0012 = '0012'; + + /** + * VSA FTP CODE (FTP = File Transfer Protocol) + */ + public const ISO_6523_0013 = '0013'; + + /** + * NIST/OSI Implememts' Workshop + */ + public const ISO_6523_0014 = '0014'; + + /** + * Electronic Data Interchange: EDI + */ + public const ISO_6523_0015 = '0015'; + + /** + * EWOS Object Identifiers + */ + public const ISO_6523_0016 = '0016'; + + /** + * COMMON LANGUAGE + */ + public const ISO_6523_0017 = '0017'; + + /** + * SNA/OSI Network + */ + public const ISO_6523_0018 = '0018'; + + /** + * Air Transport Industry Services Communications Network + */ + public const ISO_6523_0019 = '0019'; + + /** + * European Laboratory for Particle Physics: CERN + */ + public const ISO_6523_0020 = '0020'; + + /** + * SOCIETY FOR WORLDWIDE INTERBANK FINANCIAL, TELECOMMUNICATION + * S.W.I.F.T. + */ + public const ISO_6523_0021 = '0021'; + + /** + * OSF Distributed Computing Object Identification + */ + public const ISO_6523_0022 = '0022'; + + /** + * Nordic University and Research Network: NORDUnet + */ + public const ISO_6523_0023 = '0023'; + + /** + * Digital Equipment Corporation: DEC + */ + public const ISO_6523_0024 = '0024'; + + /** + * OSI ASIA-OCEANIA WORKSHOP + */ + public const ISO_6523_0025 = '0025'; + + /** + * NATO ISO 6523 ICDE coding scheme + */ + public const ISO_6523_0026 = '0026'; + + /** + * Aeronautical Telecommunications Network (ATN) + */ + public const ISO_6523_0027 = '0027'; + + /** + * International Standard ISO 6523 + */ + public const ISO_6523_0028 = '0028'; + + /** + * The All-Union Classifier of Enterprises and Organisations + */ + public const ISO_6523_0029 = '0029'; + + /** + * AT&T/OSI Network + */ + public const ISO_6523_0030 = '0030'; + + /** + * EDI Partner Identification Code + */ + public const ISO_6523_0031 = '0031'; + + /** + * Telecom Australia + */ + public const ISO_6523_0032 = '0032'; + + /** + * S G W OSI Internetwork + */ + public const ISO_6523_0033 = '0033'; + + /** + * Reuter Open Address Standard + */ + public const ISO_6523_0034 = '0034'; + + /** + * ISO 6523 - ICD + */ + public const ISO_6523_0035 = '0035'; + + /** + * TeleTrust Object Identifiers + */ + public const ISO_6523_0036 = '0036'; + + /** + * LY-tunnus + */ + public const ISO_6523_0037 = '0037'; + + /** + * The Australian GOSIP Network + */ + public const ISO_6523_0038 = '0038'; + + /** + * The OZ DOD OSI Network + */ + public const ISO_6523_0039 = '0039'; + + /** + * Unilever Group Companies + */ + public const ISO_6523_0040 = '0040'; + + /** + * Citicorp Global Information Network + */ + public const ISO_6523_0041 = '0041'; + + /** + * DBP Telekom Object Identifiers + */ + public const ISO_6523_0042 = '0042'; + + /** + * HydroNETT + */ + public const ISO_6523_0043 = '0043'; + + /** + * Thai Industrial Standards Institute (TISI) + */ + public const ISO_6523_0044 = '0044'; + + /** + * ICI Company Identification System + */ + public const ISO_6523_0045 = '0045'; + + /** + * FUNLOC + */ + public const ISO_6523_0046 = '0046'; + + /** + * BULL ODI/DSA/UNIX Network + */ + public const ISO_6523_0047 = '0047'; + + /** + * OSINZ + */ + public const ISO_6523_0048 = '0048'; + + /** + * Auckland Area Health + */ + public const ISO_6523_0049 = '0049'; + + /** + * Firmenich + */ + public const ISO_6523_0050 = '0050'; + + /** + * AGFA-DIS + */ + public const ISO_6523_0051 = '0051'; + + /** + * Society of Motion Picture and Television Engineers (SMPTE) + */ + public const ISO_6523_0052 = '0052'; + + /** + * Migros_Network M_NETOPZ + */ + public const ISO_6523_0053 = '0053'; + + /** + * ISO6523 - ICDPCR + */ + public const ISO_6523_0054 = '0054'; + + /** + * Energy Net + */ + public const ISO_6523_0055 = '0055'; + + /** + * Nokia Object Identifiers (NOI) + */ + public const ISO_6523_0056 = '0056'; + + /** + * Saint Gobain + */ + public const ISO_6523_0057 = '0057'; + + /** + * Siemens Corporate Network + */ + public const ISO_6523_0058 = '0058'; + + /** + * DANZNET + */ + public const ISO_6523_0059 = '0059'; + + /** + * Data Universal Numbering System (D-U-N-S Number) + */ + public const ISO_6523_0060 = '0060'; + + /** + * SOFFEX OSI + */ + public const ISO_6523_0061 = '0061'; + + /** + * KPN OVN + */ + public const ISO_6523_0062 = '0062'; + + /** + * ascomOSINet + */ + public const ISO_6523_0063 = '0063'; + + /** + * UTC: Uniforme Transport Code + */ + public const ISO_6523_0064 = '0064'; + + /** + * SOLVAY OSI CODING + */ + public const ISO_6523_0065 = '0065'; + + /** + * Roche Corporate Network + */ + public const ISO_6523_0066 = '0066'; + + /** + * ZellwegerOSINet + */ + public const ISO_6523_0067 = '0067'; + + /** + * Intel Corporation OSI + */ + public const ISO_6523_0068 = '0068'; + + /** + * SITA Object Identifier Tree + */ + public const ISO_6523_0069 = '0069'; + + /** + * DaimlerChrysler Corporate Network + */ + public const ISO_6523_0070 = '0070'; + + /** + * LEGO /OSI NETWORK + */ + public const ISO_6523_0071 = '0071'; + + /** + * NAVISTAR/OSI Network + */ + public const ISO_6523_0072 = '0072'; + + /** + * ICD Formatted ATM address + */ + public const ISO_6523_0073 = '0073'; + + /** + * ARINC + */ + public const ISO_6523_0074 = '0074'; + + /** + * Alcanet/Alcatel-Alsthom Corporate Network + */ + public const ISO_6523_0075 = '0075'; + + /** + * Sistema Italiano di Identificazione di ogetti gestito da UNINFO + */ + public const ISO_6523_0076 = '0076'; + + /** + * Sistema Italiano di Indirizzamento di Reti OSI Gestito da UNINFO + */ + public const ISO_6523_0077 = '0077'; + + /** + * Mitel terminal or switching equipment + */ + public const ISO_6523_0078 = '0078'; + + /** + * ATM Forum + */ + public const ISO_6523_0079 = '0079'; + + /** + * UK National Health Service Scheme, (EDIRA compliant) + */ + public const ISO_6523_0080 = '0080'; + + /** + * International NSAP + */ + public const ISO_6523_0081 = '0081'; + + /** + * Norwegian Telecommunications Authority's, NTA'S, EDI, identifier + * scheme (EDIRA compliant) + */ + public const ISO_6523_0082 = '0082'; + + /** + * Advanced Telecommunications Modules Limited, Corporate Network + */ + public const ISO_6523_0083 = '0083'; + + /** + * Athens Chamber of Commerce & Industry Scheme (EDIRA compliant) + */ + public const ISO_6523_0084 = '0084'; + + /** + * Swiss Chambers of Commerce Scheme (EDIRA) compliant + */ + public const ISO_6523_0085 = '0085'; + + /** + * United States Council for International Business (USCIB) Scheme, + * (EDIRA compliant) + */ + public const ISO_6523_0086 = '0086'; + + /** + * National Federation of Chambers of Commerce & Industry of Belgium, + * Scheme (EDIRA compliant) + */ + public const ISO_6523_0087 = '0087'; + + /** + * EAN Location Code + */ + public const ISO_6523_0088 = '0088'; + + /** + * The Association of British Chambers of Commerce Ltd. Scheme, (EDIRA + * compliant) + */ + public const ISO_6523_0089 = '0089'; + + /** + * Internet IP addressing - ISO 6523 ICD encoding + */ + public const ISO_6523_0090 = '0090'; + + /** + * Cisco Sysytems / OSI Network + */ + public const ISO_6523_0091 = '0091'; + + /** + * Revenue Canada Business Number Registration (EDIRA compliant) + */ + public const ISO_6523_0093 = '0093'; + + /** + * DEUTSCHER INDUSTRIE- UND HANDELSTAG (DIHT) Scheme (EDIRA compliant) + */ + public const ISO_6523_0094 = '0094'; + + /** + * Hewlett - Packard Company Internal AM Network + */ + public const ISO_6523_0095 = '0095'; + + /** + * DANISH CHAMBER OF COMMERCE Scheme (EDIRA compliant) + */ + public const ISO_6523_0096 = '0096'; + + /** + * FTI - Ediforum Italia, (EDIRA compliant) + */ + public const ISO_6523_0097 = '0097'; + + /** + * CHAMBER OF COMMERCE TEL AVIV-JAFFA Scheme (EDIRA compliant) + */ + public const ISO_6523_0098 = '0098'; + + /** + * Siemens Supervisory Systems Network + */ + public const ISO_6523_0099 = '0099'; + + /** + * PNG_ICD Scheme + */ + public const ISO_6523_0100 = '0100'; + + /** + * South African Code Allocation + */ + public const ISO_6523_0101 = '0101'; + + /** + * HEAG + */ + public const ISO_6523_0102 = '0102'; + + /** + * BT - ICD Coding System + */ + public const ISO_6523_0104 = '0104'; + + /** + * Portuguese Chamber of Commerce and Industry Scheme (EDIRA compliant) + */ + public 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) + */ + public const ISO_6523_0106 = '0106'; + + /** + * Association of Swedish Chambers of Commerce and Industry Scheme (EDIRA + * compliant) + */ + public const ISO_6523_0107 = '0107'; + + /** + * Australian Chambers of Commerce and Industry Scheme (EDIRA compliant) + */ + public const ISO_6523_0108 = '0108'; + + /** + * BellSouth ICD AESA (ATM End System Address) + */ + public const ISO_6523_0109 = '0109'; + + /** + * Bell Atlantic + */ + public const ISO_6523_0110 = '0110'; + + /** + * Object Identifiers + */ + public const ISO_6523_0111 = '0111'; + + /** + * ISO register for Standards producing Organizations + */ + public const ISO_6523_0112 = '0112'; + + /** + * OriginNet + */ + public const ISO_6523_0113 = '0113'; + + /** + * Check Point Software Technologies + */ + public const ISO_6523_0114 = '0114'; + + /** + * Pacific Bell Data Communications Network + */ + public const ISO_6523_0115 = '0115'; + + /** + * PSS Object Identifiers + */ + public const ISO_6523_0116 = '0116'; + + /** + * STENTOR-ICD CODING SYSTEM + */ + public const ISO_6523_0117 = '0117'; + + /** + * ATM-Network ZN'96 + */ + public const ISO_6523_0118 = '0118'; + + /** + * MCI / OSI Network + */ + public const ISO_6523_0119 = '0119'; + + /** + * Advantis + */ + public const ISO_6523_0120 = '0120'; + + /** + * Affable Software Data Interchange Codes + */ + public const ISO_6523_0121 = '0121'; + + /** + * BB-DATA GmbH + */ + public const ISO_6523_0122 = '0122'; + + /** + * BASF Company ATM-Network + */ + public const ISO_6523_0123 = '0123'; + + /** + * IOTA Identifiers for Organizations for Telecommunications Addressing + * using the ICD system format defined in ISO/IEC 8348 + */ + public const ISO_6523_0124 = '0124'; + + /** + * Henkel Corporate Network (H-Net) + */ + public const ISO_6523_0125 = '0125'; + + /** + * GTE/OSI Network + */ + public const ISO_6523_0126 = '0126'; + + /** + * Dresdner Bank Corporate Network + */ + public const ISO_6523_0127 = '0127'; + + /** + * BCNR (Swiss Clearing Bank Number) + */ + public const ISO_6523_0128 = '0128'; + + /** + * BPI (Swiss Business Partner Identification) code + */ + public const ISO_6523_0129 = '0129'; + + /** + * Directorates of the European Commission + */ + public const ISO_6523_0130 = '0130'; + + /** + * Code for the Identification of National Organizations + */ + public const ISO_6523_0131 = '0131'; + + /** + * Certicom Object Identifiers + */ + public const ISO_6523_0132 = '0132'; + + /** + * TC68 OID + */ + public const ISO_6523_0133 = '0133'; + + /** + * Infonet Services Corporation + */ + public const ISO_6523_0134 = '0134'; + + /** + * SIA Object Identifiers + */ + public const ISO_6523_0135 = '0135'; + + /** + * Cable & Wireless Global ATM End-System Address Plan + */ + public const ISO_6523_0136 = '0136'; + + /** + * Global AESA scheme + */ + public const ISO_6523_0137 = '0137'; + + /** + * France Telecom ATM End System Address Plan + */ + public const ISO_6523_0138 = '0138'; + + /** + * Savvis Communications AESA:. + */ + public const ISO_6523_0139 = '0139'; + + /** + * Toshiba Organizations, Partners, And Suppliers' (TOPAS) Code + */ + public const ISO_6523_0140 = '0140'; + + /** + * NATO Commercial and Government Entity system + */ + public const ISO_6523_0141 = '0141'; + + /** + * SECETI Object Identifiers + */ + public const ISO_6523_0142 = '0142'; + + /** + * EINESTEINet AG + */ + public const ISO_6523_0143 = '0143'; + + /** + * DoDAAC (Department of Defense Activity Address Code) + */ + public const ISO_6523_0144 = '0144'; + + /** + * DGCP (Direction Générale de la Comptabilité Publique)administrative + * accounting identification scheme + */ + public const ISO_6523_0145 = '0145'; + + /** + * DGI (Direction Générale des Impots) code + */ + public const ISO_6523_0146 = '0146'; + + /** + * Standard Company Code + */ + public const ISO_6523_0147 = '0147'; + + /** + * ITU (International Telecommunications Union)Data Network + * Identification Codes (DNIC) + */ + public const ISO_6523_0148 = '0148'; + + /** + * Global Business Identifier + */ + public const ISO_6523_0149 = '0149'; + + /** + * Madge Networks Ltd- ICD ATM Addressing Scheme + */ + public const ISO_6523_0150 = '0150'; + + /** + * Australian Business Number (ABN) Scheme + */ + public const ISO_6523_0151 = '0151'; + + /** + * Edira Scheme Identifier Code + */ + public const ISO_6523_0152 = '0152'; + + /** + * Concert Global Network Services ICD AESA + */ + public const ISO_6523_0153 = '0153'; + + /** + * Identification number of economic subjects: (ICO) + */ + public const ISO_6523_0154 = '0154'; + + /** + * Global Crossing AESA (ATM End System Address) + */ + public const ISO_6523_0155 = '0155'; + + /** + * AUNA + */ + public const ISO_6523_0156 = '0156'; + + /** + * ATM interconnection with the Dutch KPN Telecom + */ + public const ISO_6523_0157 = '0157'; + + /** + * Identification number of economic subject (ICO) Act on State + * Statistics of 29 November 2'001, § 27 + */ + public const ISO_6523_0158 = '0158'; + + /** + * ACTALIS Object Identifiers + */ + public const ISO_6523_0159 = '0159'; + + /** + * GTIN - Global Trade Item Number + */ + public const ISO_6523_0160 = '0160'; + + /** + * ECCMA Open Technical Directory + */ + public const ISO_6523_0161 = '0161'; + + /** + * CEN/ISSS Object Identifier Scheme + */ + public const ISO_6523_0162 = '0162'; + + /** + * US-EPA Facility Identifier + */ + public const ISO_6523_0163 = '0163'; + + /** + * TELUS Corporation + */ + public const ISO_6523_0164 = '0164'; + + /** + * FIEIE Object identifiers + */ + public const ISO_6523_0165 = '0165'; + + /** + * Swissguide Identifier Scheme + */ + public const ISO_6523_0166 = '0166'; + + /** + * Priority Telecom ATM End System Address Plan + */ + public const ISO_6523_0167 = '0167'; + + /** + * Vodafone Ireland OSI Addressing + */ + public const ISO_6523_0168 = '0168'; + + /** + * Swiss Federal Business Identification Number. Central Business names + * Index (zefix) Identification Number + */ + public const ISO_6523_0169 = '0169'; + + /** + * Teikoku Company Code + */ + public const ISO_6523_0170 = '0170'; + + /** + * Luxembourg CP & CPS (Certification Policy and Certification Practice + * Statement) Index + */ + public const ISO_6523_0171 = '0171'; + + /** + * Project Group “Lists of Properties†(PROLIST®) + */ + public const ISO_6523_0172 = '0172'; + + /** + * eCI@ss + */ + public const ISO_6523_0173 = '0173'; + + /** + * StepNexus + */ + public const ISO_6523_0174 = '0174'; + + /** + * Siemens AG + */ + public const ISO_6523_0175 = '0175'; + + /** + * Paradine GmbH + */ + public const ISO_6523_0176 = '0176'; + + /** + * Odette International Limited + */ + public const ISO_6523_0177 = '0177'; + + /** + * Route1 MobiNET + */ + public const ISO_6523_0178 = '0178'; + + /** + * Penango Object Identifiers + */ + public const ISO_6523_0179 = '0179'; + + /** + * Lithuanian military PKI + */ + public const ISO_6523_0180 = '0180'; + + /** + * Numéro d'identification suisse des enterprises (IDE), Swiss Unique + * Business Identification Number (UIDB) + */ + public const ISO_6523_0183 = '0183'; + + /** + * DIGSTORG + */ + public const ISO_6523_0184 = '0184'; + + /** + * Perceval Object Code + */ + public const ISO_6523_0185 = '0185'; + + /** + * TrustPoint Object Identifiers + */ + public const ISO_6523_0186 = '0186'; + + /** + * Amazon Unique Identification Scheme + */ + public const ISO_6523_0187 = '0187'; + + /** + * Corporate Number of The Social Security and Tax Number System + */ + public const ISO_6523_0188 = '0188'; + + /** + * European Business Identifier (EBID) + */ + public const ISO_6523_0189 = '0189'; + + /** + * Organisatie Indentificatie Nummer (OIN) + */ + public const ISO_6523_0190 = '0190'; + + /** + * Company Code (Estonia) + */ + public const ISO_6523_0191 = '0191'; + + /** + * Organisasjonsnummer + */ + public const ISO_6523_0192 = '0192'; + + /** + * UBL.BE Party Identifier + */ + public const ISO_6523_0193 = '0193'; + + /** + * KOIOS Open Technical Dictionary + */ + public const ISO_6523_0194 = '0194'; + + /** + * Singapore Nationwide E-lnvoice Framework + */ + public const ISO_6523_0195 = '0195'; + + /** + * Icelandic identifier - Ãslensk kennitala + */ + public const ISO_6523_0196 = '0196'; + + /** + * Name not known + */ + public const ISO_6523_0197 = '0197'; + + /** + * ERSTORG + */ + public const ISO_6523_0198 = '0198'; + + /** + * Legal Entity Identifier (LEI) + */ + public const ISO_6523_0199 = '0199'; + + /** + * Legal entity code (Lithuania) + */ + public const ISO_6523_0200 = '0200'; + + /** + * Codice Univoco Unità Organizzativa iPA + */ + public const ISO_6523_0201 = '0201'; + + /** + * Indirizzo di Posta Elettronica Certificata + */ + public const ISO_6523_0202 = '0202'; + + /** + * eDelivery Network Participant identifier + */ + public const ISO_6523_0203 = '0203'; + + /** + * Leitweg-ID + */ + public const ISO_6523_0204 = '0204'; + + /** + * CODDEST + */ + public const ISO_6523_0205 = '0205'; + + /** + * Registre du Commerce et de l’Industrie : RCI + */ + public const ISO_6523_0206 = '0206'; + + /** + * PiLog Ontology Codification Identifier (POCI) + */ + public const ISO_6523_0207 = '0207'; + + /** + * Numero d'entreprise / ondernemingsnummer / Unternehmensnummer + */ + public const ISO_6523_0208 = '0208'; + + /** + * GS1 identification keys + */ + public const ISO_6523_0209 = '0209'; + + /** + * CODICE FISCALE + */ + public const ISO_6523_0210 = '0210'; + + /** + * PARTITA IVA + */ + public const ISO_6523_0211 = '0211'; + + /** + * Finnish Organization Identifier + */ + public const ISO_6523_0212 = '0212'; + + /** + * Finnish Organization Value Add Tax Identifier + */ + public const ISO_6523_0213 = '0213'; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdTextSubjectCodeQualifiers.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdTextSubjectCodeQualifiers.php new file mode 100644 index 000000000..7598110dc --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdTextSubjectCodeQualifiers.php @@ -0,0 +1,1937 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdTextSubjectCodeQualifiers +{ + /** + * Goods item description + */ + public const UNTDID_4451_AAA = 'AAA'; + + /** + * Payment term + */ + public const UNTDID_4451_AAB = 'AAB'; + + /** + * Dangerous goods additional information + */ + public const UNTDID_4451_AAC = 'AAC'; + + /** + * Dangerous goods technical name + */ + public const UNTDID_4451_AAD = 'AAD'; + + /** + * Acknowledgement description + */ + public const UNTDID_4451_AAE = 'AAE'; + + /** + * Rate additional information + */ + public const UNTDID_4451_AAF = 'AAF'; + + /** + * Party instructions + */ + public const UNTDID_4451_AAG = 'AAG'; + + /** + * General information + */ + public const UNTDID_4451_AAI = 'AAI'; + + /** + * Additional conditions of sale/purchase + */ + public const UNTDID_4451_AAJ = 'AAJ'; + + /** + * Price conditions + */ + public const UNTDID_4451_AAK = 'AAK'; + + /** + * Goods dimensions in characters + */ + public const UNTDID_4451_AAL = 'AAL'; + + /** + * Equipment re-usage restrictions + */ + public const UNTDID_4451_AAM = 'AAM'; + + /** + * Handling restriction + */ + public const UNTDID_4451_AAN = 'AAN'; + + /** + * Error description (free text) + */ + public const UNTDID_4451_AAO = 'AAO'; + + /** + * Response (free text) + */ + public const UNTDID_4451_AAP = 'AAP'; + + /** + * Package content's description + */ + public const UNTDID_4451_AAQ = 'AAQ'; + + /** + * Terms of delivery + */ + public const UNTDID_4451_AAR = 'AAR'; + + /** + * Bill of lading remarks + */ + public const UNTDID_4451_AAS = 'AAS'; + + /** + * Mode of settlement information + */ + public const UNTDID_4451_AAT = 'AAT'; + + /** + * Consignment invoice information + */ + public const UNTDID_4451_AAU = 'AAU'; + + /** + * Clearance invoice information + */ + public const UNTDID_4451_AAV = 'AAV'; + + /** + * Letter of credit information + */ + public const UNTDID_4451_AAW = 'AAW'; + + /** + * License information + */ + public const UNTDID_4451_AAX = 'AAX'; + + /** + * Certification statements + */ + public const UNTDID_4451_AAY = 'AAY'; + + /** + * Additional export information + */ + public const UNTDID_4451_AAZ = 'AAZ'; + + /** + * Tariff statements + */ + public const UNTDID_4451_ABA = 'ABA'; + + /** + * Medical history + */ + public const UNTDID_4451_ABB = 'ABB'; + + /** + * Conditions of sale or purchase + */ + public const UNTDID_4451_ABC = 'ABC'; + + /** + * Contract document type + */ + public const UNTDID_4451_ABD = 'ABD'; + + /** + * Additional terms and/or conditions (documentary credit) + */ + public const UNTDID_4451_ABE = 'ABE'; + + /** + * Instructions or information about standby documentary + */ + public const UNTDID_4451_ABF = 'ABF'; + + /** + * Instructions or information about partial shipment(s) + */ + public const UNTDID_4451_ABG = 'ABG'; + + /** + * Instructions or information about transhipment(s) + */ + public const UNTDID_4451_ABH = 'ABH'; + + /** + * Additional handling instructions documentary credit + */ + public const UNTDID_4451_ABI = 'ABI'; + + /** + * Domestic routing information + */ + public const UNTDID_4451_ABJ = 'ABJ'; + + /** + * Chargeable category of equipment + */ + public const UNTDID_4451_ABK = 'ABK'; + + /** + * Government information + */ + public const UNTDID_4451_ABL = 'ABL'; + + /** + * Onward routing information + */ + public const UNTDID_4451_ABM = 'ABM'; + + /** + * Accounting information + */ + public const UNTDID_4451_ABN = 'ABN'; + + /** + * Discrepancy information + */ + public const UNTDID_4451_ABO = 'ABO'; + + /** + * Confirmation instructions + */ + public const UNTDID_4451_ABP = 'ABP'; + + /** + * Method of issuance + */ + public const UNTDID_4451_ABQ = 'ABQ'; + + /** + * Documents delivery instructions + */ + public const UNTDID_4451_ABR = 'ABR'; + + /** + * Additional conditions + */ + public const UNTDID_4451_ABS = 'ABS'; + + /** + * Information/instructions about additional amounts covered + */ + public const UNTDID_4451_ABT = 'ABT'; + + /** + * Deferred payment termed additional + */ + public const UNTDID_4451_ABU = 'ABU'; + + /** + * Acceptance terms additional + */ + public const UNTDID_4451_ABV = 'ABV'; + + /** + * Negotiation terms additional + */ + public const UNTDID_4451_ABW = 'ABW'; + + /** + * Document name and documentary requirements + */ + public const UNTDID_4451_ABX = 'ABX'; + + /** + * Instructions/information about revolving documentary credit + */ + public const UNTDID_4451_ABZ = 'ABZ'; + + /** + * Documentary requirements + */ + public const UNTDID_4451_ACA = 'ACA'; + + /** + * Additional information + */ + public const UNTDID_4451_ACB = 'ACB'; + + /** + * Factor assignment clause + */ + public const UNTDID_4451_ACC = 'ACC'; + + /** + * Reason + */ + public const UNTDID_4451_ACD = 'ACD'; + + /** + * Dispute + */ + public const UNTDID_4451_ACE = 'ACE'; + + /** + * Additional attribute information + */ + public const UNTDID_4451_ACF = 'ACF'; + + /** + * Absence declaration + */ + public const UNTDID_4451_ACG = 'ACG'; + + /** + * Aggregation statement + */ + public const UNTDID_4451_ACH = 'ACH'; + + /** + * Compilation statement + */ + public const UNTDID_4451_ACI = 'ACI'; + + /** + * Definitional exception + */ + public const UNTDID_4451_ACJ = 'ACJ'; + + /** + * Privacy statement + */ + public const UNTDID_4451_ACK = 'ACK'; + + /** + * Quality statement + */ + public const UNTDID_4451_ACL = 'ACL'; + + /** + * Statistical description + */ + public const UNTDID_4451_ACM = 'ACM'; + + /** + * Statistical definition + */ + public const UNTDID_4451_ACN = 'ACN'; + + /** + * Statistical name + */ + public const UNTDID_4451_ACO = 'ACO'; + + /** + * Statistical title + */ + public const UNTDID_4451_ACP = 'ACP'; + + /** + * Off-dimension information + */ + public const UNTDID_4451_ACQ = 'ACQ'; + + /** + * Unexpected stops information + */ + public const UNTDID_4451_ACR = 'ACR'; + + /** + * Principles + */ + public const UNTDID_4451_ACS = 'ACS'; + + /** + * Terms and definition + */ + public const UNTDID_4451_ACT = 'ACT'; + + /** + * Segment name + */ + public const UNTDID_4451_ACU = 'ACU'; + + /** + * Simple data element name + */ + public const UNTDID_4451_ACV = 'ACV'; + + /** + * Scope + */ + public const UNTDID_4451_ACW = 'ACW'; + + /** + * Message type name + */ + public const UNTDID_4451_ACX = 'ACX'; + + /** + * Introduction + */ + public const UNTDID_4451_ACY = 'ACY'; + + /** + * Glossary + */ + public const UNTDID_4451_ACZ = 'ACZ'; + + /** + * Functional definition + */ + public const UNTDID_4451_ADA = 'ADA'; + + /** + * Examples + */ + public const UNTDID_4451_ADB = 'ADB'; + + /** + * Cover page + */ + public const UNTDID_4451_ADC = 'ADC'; + + /** + * Dependency (syntax) notes + */ + public const UNTDID_4451_ADD = 'ADD'; + + /** + * Code value name + */ + public const UNTDID_4451_ADE = 'ADE'; + + /** + * Code list name + */ + public const UNTDID_4451_ADF = 'ADF'; + + /** + * Clarification of usage + */ + public const UNTDID_4451_ADG = 'ADG'; + + /** + * Composite data element name + */ + public const UNTDID_4451_ADH = 'ADH'; + + /** + * Field of application + */ + public const UNTDID_4451_ADI = 'ADI'; + + /** + * Type of assets and liabilities + */ + public const UNTDID_4451_ADJ = 'ADJ'; + + /** + * Promotion information + */ + public const UNTDID_4451_ADK = 'ADK'; + + /** + * Meter condition + */ + public const UNTDID_4451_ADL = 'ADL'; + + /** + * Meter reading information + */ + public const UNTDID_4451_ADM = 'ADM'; + + /** + * Type of transaction reason + */ + public const UNTDID_4451_ADN = 'ADN'; + + /** + * Type of survey question + */ + public const UNTDID_4451_ADO = 'ADO'; + + /** + * Carrier's agent counter information + */ + public const UNTDID_4451_ADP = 'ADP'; + + /** + * Description of work item on equipment + */ + public const UNTDID_4451_ADQ = 'ADQ'; + + /** + * Message definition + */ + public const UNTDID_4451_ADR = 'ADR'; + + /** + * Booked item information + */ + public const UNTDID_4451_ADS = 'ADS'; + + /** + * Source of document + */ + public const UNTDID_4451_ADT = 'ADT'; + + /** + * Note + */ + public const UNTDID_4451_ADU = 'ADU'; + + /** + * Fixed part of segment clarification text + */ + public const UNTDID_4451_ADV = 'ADV'; + + /** + * Characteristics of goods + */ + public const UNTDID_4451_ADW = 'ADW'; + + /** + * Additional discharge instructions + */ + public const UNTDID_4451_ADX = 'ADX'; + + /** + * Container stripping instructions + */ + public const UNTDID_4451_ADY = 'ADY'; + + /** + * CSC (Container Safety Convention) plate information + */ + public const UNTDID_4451_ADZ = 'ADZ'; + + /** + * Cargo remarks + */ + public const UNTDID_4451_AEA = 'AEA'; + + /** + * Temperature control instructions + */ + public const UNTDID_4451_AEB = 'AEB'; + + /** + * Text refers to expected data + */ + public const UNTDID_4451_AEC = 'AEC'; + + /** + * Text refers to received data + */ + public const UNTDID_4451_AED = 'AED'; + + /** + * Section clarification text + */ + public const UNTDID_4451_AEE = 'AEE'; + + /** + * Information to the beneficiary + */ + public const UNTDID_4451_AEF = 'AEF'; + + /** + * Information to the applicant + */ + public const UNTDID_4451_AEG = 'AEG'; + + /** + * Instructions to the beneficiary + */ + public const UNTDID_4451_AEH = 'AEH'; + + /** + * Instructions to the applicant + */ + public const UNTDID_4451_AEI = 'AEI'; + + /** + * Controlled atmosphere + */ + public const UNTDID_4451_AEJ = 'AEJ'; + + /** + * Take off annotation + */ + public const UNTDID_4451_AEK = 'AEK'; + + /** + * Price variation narrative + */ + public const UNTDID_4451_AEL = 'AEL'; + + /** + * Documentary credit amendment instructions + */ + public const UNTDID_4451_AEM = 'AEM'; + + /** + * Standard method narrative + */ + public const UNTDID_4451_AEN = 'AEN'; + + /** + * Project narrative + */ + public const UNTDID_4451_AEO = 'AEO'; + + /** + * Radioactive goods, additional information + */ + public const UNTDID_4451_AEP = 'AEP'; + + /** + * Bank-to-bank information + */ + public const UNTDID_4451_AEQ = 'AEQ'; + + /** + * Reimbursement instructions + */ + public const UNTDID_4451_AER = 'AER'; + + /** + * Reason for amending a message + */ + public const UNTDID_4451_AES = 'AES'; + + /** + * Instructions to the paying and/or accepting and/or + */ + public const UNTDID_4451_AET = 'AET'; + + /** + * Interest instructions + */ + public const UNTDID_4451_AEU = 'AEU'; + + /** + * Agent commission + */ + public const UNTDID_4451_AEV = 'AEV'; + + /** + * Remitting bank instructions + */ + public const UNTDID_4451_AEW = 'AEW'; + + /** + * Instructions to the collecting bank + */ + public const UNTDID_4451_AEX = 'AEX'; + + /** + * Collection amount instructions + */ + public const UNTDID_4451_AEY = 'AEY'; + + /** + * Internal auditing information + */ + public const UNTDID_4451_AEZ = 'AEZ'; + + /** + * Constraint + */ + public const UNTDID_4451_AFA = 'AFA'; + + /** + * Comment + */ + public const UNTDID_4451_AFB = 'AFB'; + + /** + * Semantic note + */ + public const UNTDID_4451_AFC = 'AFC'; + + /** + * Help text + */ + public const UNTDID_4451_AFD = 'AFD'; + + /** + * Legend + */ + public const UNTDID_4451_AFE = 'AFE'; + + /** + * Batch code structure + */ + public const UNTDID_4451_AFF = 'AFF'; + + /** + * Product application + */ + public const UNTDID_4451_AFG = 'AFG'; + + /** + * Customer complaint + */ + public const UNTDID_4451_AFH = 'AFH'; + + /** + * Probable cause of fault + */ + public const UNTDID_4451_AFI = 'AFI'; + + /** + * Defect description + */ + public const UNTDID_4451_AFJ = 'AFJ'; + + /** + * Repair description + */ + public const UNTDID_4451_AFK = 'AFK'; + + /** + * Review comments + */ + public const UNTDID_4451_AFL = 'AFL'; + + /** + * Title + */ + public const UNTDID_4451_AFM = 'AFM'; + + /** + * Description of amount + */ + public const UNTDID_4451_AFN = 'AFN'; + + /** + * Responsibilities + */ + public const UNTDID_4451_AFO = 'AFO'; + + /** + * Supplier + */ + public const UNTDID_4451_AFP = 'AFP'; + + /** + * Purchase region + */ + public const UNTDID_4451_AFQ = 'AFQ'; + + /** + * Affiliation + */ + public const UNTDID_4451_AFR = 'AFR'; + + /** + * Borrower + */ + public const UNTDID_4451_AFS = 'AFS'; + + /** + * Line of business + */ + public const UNTDID_4451_AFT = 'AFT'; + + /** + * Financial institution + */ + public const UNTDID_4451_AFU = 'AFU'; + + /** + * Business founder + */ + public const UNTDID_4451_AFV = 'AFV'; + + /** + * Business history + */ + public const UNTDID_4451_AFW = 'AFW'; + + /** + * Banking arrangements + */ + public const UNTDID_4451_AFX = 'AFX'; + + /** + * Business origin + */ + public const UNTDID_4451_AFY = 'AFY'; + + /** + * Brand names' description + */ + public const UNTDID_4451_AFZ = 'AFZ'; + + /** + * Business financing details + */ + public const UNTDID_4451_AGA = 'AGA'; + + /** + * Competition + */ + public const UNTDID_4451_AGB = 'AGB'; + + /** + * Construction process details + */ + public const UNTDID_4451_AGC = 'AGC'; + + /** + * Construction specialty + */ + public const UNTDID_4451_AGD = 'AGD'; + + /** + * Contract information + */ + public const UNTDID_4451_AGE = 'AGE'; + + /** + * Corporate filing + */ + public const UNTDID_4451_AGF = 'AGF'; + + /** + * Customer information + */ + public const UNTDID_4451_AGG = 'AGG'; + + /** + * Copyright notice + */ + public const UNTDID_4451_AGH = 'AGH'; + + /** + * Contingent debt + */ + public const UNTDID_4451_AGI = 'AGI'; + + /** + * Conviction details + */ + public const UNTDID_4451_AGJ = 'AGJ'; + + /** + * Equipment + */ + public const UNTDID_4451_AGK = 'AGK'; + + /** + * Workforce description + */ + public const UNTDID_4451_AGL = 'AGL'; + + /** + * Exemption + */ + public const UNTDID_4451_AGM = 'AGM'; + + /** + * Future plans + */ + public const UNTDID_4451_AGN = 'AGN'; + + /** + * Interviewee conversation information + */ + public const UNTDID_4451_AGO = 'AGO'; + + /** + * Intangible asset + */ + public const UNTDID_4451_AGP = 'AGP'; + + /** + * Inventory + */ + public const UNTDID_4451_AGQ = 'AGQ'; + + /** + * Investment + */ + public const UNTDID_4451_AGR = 'AGR'; + + /** + * Intercompany relations information + */ + public const UNTDID_4451_AGS = 'AGS'; + + /** + * Joint venture + */ + public const UNTDID_4451_AGT = 'AGT'; + + /** + * Loan + */ + public const UNTDID_4451_AGU = 'AGU'; + + /** + * Long term debt + */ + public const UNTDID_4451_AGV = 'AGV'; + + /** + * Location + */ + public const UNTDID_4451_AGW = 'AGW'; + + /** + * Current legal structure + */ + public const UNTDID_4451_AGX = 'AGX'; + + /** + * Marital contract + */ + public const UNTDID_4451_AGY = 'AGY'; + + /** + * Marketing activities + */ + public const UNTDID_4451_AGZ = 'AGZ'; + + /** + * Merger + */ + public const UNTDID_4451_AHA = 'AHA'; + + /** + * Marketable securities + */ + public const UNTDID_4451_AHB = 'AHB'; + + /** + * Business debt + */ + public const UNTDID_4451_AHC = 'AHC'; + + /** + * Original legal structure + */ + public const UNTDID_4451_AHD = 'AHD'; + + /** + * Employee sharing arrangements + */ + public const UNTDID_4451_AHE = 'AHE'; + + /** + * Organization details + */ + public const UNTDID_4451_AHF = 'AHF'; + + /** + * Public record details + */ + public const UNTDID_4451_AHG = 'AHG'; + + /** + * Price range + */ + public const UNTDID_4451_AHH = 'AHH'; + + /** + * Qualifications + */ + public const UNTDID_4451_AHI = 'AHI'; + + /** + * Registered activity + */ + public const UNTDID_4451_AHJ = 'AHJ'; + + /** + * Criminal sentence + */ + public const UNTDID_4451_AHK = 'AHK'; + + /** + * Sales method + */ + public const UNTDID_4451_AHL = 'AHL'; + + /** + * Educational institution information + */ + public const UNTDID_4451_AHM = 'AHM'; + + /** + * Status details + */ + public const UNTDID_4451_AHN = 'AHN'; + + /** + * Sales + */ + public const UNTDID_4451_AHO = 'AHO'; + + /** + * Spouse information + */ + public const UNTDID_4451_AHP = 'AHP'; + + /** + * Educational degree information + */ + public const UNTDID_4451_AHQ = 'AHQ'; + + /** + * Shareholding information + */ + public const UNTDID_4451_AHR = 'AHR'; + + /** + * Sales territory + */ + public const UNTDID_4451_AHS = 'AHS'; + + /** + * Accountant's comments + */ + public const UNTDID_4451_AHT = 'AHT'; + + /** + * Exemption law location + */ + public const UNTDID_4451_AHU = 'AHU'; + + /** + * Share classifications + */ + public const UNTDID_4451_AHV = 'AHV'; + + /** + * Forecast + */ + public const UNTDID_4451_AHW = 'AHW'; + + /** + * Event location + */ + public const UNTDID_4451_AHX = 'AHX'; + + /** + * Facility occupancy + */ + public const UNTDID_4451_AHY = 'AHY'; + + /** + * Import and export details + */ + public const UNTDID_4451_AHZ = 'AHZ'; + + /** + * Additional facility information + */ + public const UNTDID_4451_AIA = 'AIA'; + + /** + * Inventory value + */ + public const UNTDID_4451_AIB = 'AIB'; + + /** + * Education + */ + public const UNTDID_4451_AIC = 'AIC'; + + /** + * Event + */ + public const UNTDID_4451_AID = 'AID'; + + /** + * Agent + */ + public const UNTDID_4451_AIE = 'AIE'; + + /** + * Domestically agreed financial statement details + */ + public const UNTDID_4451_AIF = 'AIF'; + + /** + * Other current asset description + */ + public const UNTDID_4451_AIG = 'AIG'; + + /** + * Other current liability description + */ + public const UNTDID_4451_AIH = 'AIH'; + + /** + * Former business activity + */ + public const UNTDID_4451_AII = 'AII'; + + /** + * Trade name use + */ + public const UNTDID_4451_AIJ = 'AIJ'; + + /** + * Signing authority + */ + public const UNTDID_4451_AIK = 'AIK'; + + /** + * Guarantee + */ + public const UNTDID_4451_AIL = 'AIL'; + + /** + * Holding company operation + */ + public const UNTDID_4451_AIM = 'AIM'; + + /** + * Consignment routing + */ + public const UNTDID_4451_AIN = 'AIN'; + + /** + * Letter of protest + */ + public const UNTDID_4451_AIO = 'AIO'; + + /** + * Question + */ + public const UNTDID_4451_AIP = 'AIP'; + + /** + * Party information + */ + public const UNTDID_4451_AIQ = 'AIQ'; + + /** + * Area boundaries description + */ + public const UNTDID_4451_AIR = 'AIR'; + + /** + * Advertisement information + */ + public const UNTDID_4451_AIS = 'AIS'; + + /** + * Financial statement details + */ + public const UNTDID_4451_AIT = 'AIT'; + + /** + * Access instructions + */ + public const UNTDID_4451_AIU = 'AIU'; + + /** + * Liquidity + */ + public const UNTDID_4451_AIV = 'AIV'; + + /** + * Credit line + */ + public const UNTDID_4451_AIW = 'AIW'; + + /** + * Warranty terms + */ + public const UNTDID_4451_AIX = 'AIX'; + + /** + * Division description + */ + public const UNTDID_4451_AIY = 'AIY'; + + /** + * Reporting instruction + */ + public const UNTDID_4451_AIZ = 'AIZ'; + + /** + * Examination result + */ + public const UNTDID_4451_AJA = 'AJA'; + + /** + * Laboratory result + */ + public const UNTDID_4451_AJB = 'AJB'; + + /** + * Allowance/charge information + */ + public const UNTDID_4451_ALC = 'ALC'; + + /** + * X-ray result + */ + public const UNTDID_4451_ALD = 'ALD'; + + /** + * Pathology result + */ + public const UNTDID_4451_ALE = 'ALE'; + + /** + * Intervention description + */ + public const UNTDID_4451_ALF = 'ALF'; + + /** + * Summary of admittance + */ + public const UNTDID_4451_ALG = 'ALG'; + + /** + * Medical treatment course detail + */ + public const UNTDID_4451_ALH = 'ALH'; + + /** + * Prognosis + */ + public const UNTDID_4451_ALI = 'ALI'; + + /** + * Instruction to patient + */ + public const UNTDID_4451_ALJ = 'ALJ'; + + /** + * Instruction to physician + */ + public const UNTDID_4451_ALK = 'ALK'; + + /** + * All documents + */ + public const UNTDID_4451_ALL = 'ALL'; + + /** + * Medicine treatment + */ + public const UNTDID_4451_ALM = 'ALM'; + + /** + * Medicine dosage and administration + */ + public const UNTDID_4451_ALN = 'ALN'; + + /** + * Availability of patient + */ + public const UNTDID_4451_ALO = 'ALO'; + + /** + * Reason for service request + */ + public const UNTDID_4451_ALP = 'ALP'; + + /** + * Purpose of service + */ + public const UNTDID_4451_ALQ = 'ALQ'; + + /** + * Arrival conditions + */ + public const UNTDID_4451_ARR = 'ARR'; + + /** + * Service requester's comment + */ + public const UNTDID_4451_ARS = 'ARS'; + + /** + * Authentication + */ + public const UNTDID_4451_AUT = 'AUT'; + + /** + * Requested location description + */ + public const UNTDID_4451_AUU = 'AUU'; + + /** + * Medicine administration condition + */ + public const UNTDID_4451_AUV = 'AUV'; + + /** + * Patient information + */ + public const UNTDID_4451_AUW = 'AUW'; + + /** + * Precautionary measure + */ + public const UNTDID_4451_AUX = 'AUX'; + + /** + * Service characteristic + */ + public const UNTDID_4451_AUY = 'AUY'; + + /** + * Planned event comment + */ + public const UNTDID_4451_AUZ = 'AUZ'; + + /** + * Expected delay comment + */ + public const UNTDID_4451_AVA = 'AVA'; + + /** + * Transport requirements comment + */ + public const UNTDID_4451_AVB = 'AVB'; + + /** + * Temporary approval condition + */ + public const UNTDID_4451_AVC = 'AVC'; + + /** + * Customs Valuation Information + */ + public const UNTDID_4451_AVD = 'AVD'; + + /** + * Value Added Tax (VAT) margin scheme + */ + public const UNTDID_4451_AVE = 'AVE'; + + /** + * Maritime Declaration of Health + */ + public const UNTDID_4451_AVF = 'AVF'; + + /** + * Passenger baggage information + */ + public const UNTDID_4451_BAG = 'BAG'; + + /** + * Maritime Declaration of Health + */ + public const UNTDID_4451_BAH = 'BAH'; + + /** + * Additional product information address + */ + public const UNTDID_4451_BAI = 'BAI'; + + /** + * Information to be printed on despatch advice + */ + public const UNTDID_4451_BAJ = 'BAJ'; + + /** + * Missing goods remarks + */ + public const UNTDID_4451_BAK = 'BAK'; + + /** + * Non-acceptance information + */ + public const UNTDID_4451_BAL = 'BAL'; + + /** + * Returns information + */ + public const UNTDID_4451_BAM = 'BAM'; + + /** + * Sub-line item information + */ + public const UNTDID_4451_BAN = 'BAN'; + + /** + * Test information + */ + public const UNTDID_4451_BAO = 'BAO'; + + /** + * External link + */ + public const UNTDID_4451_BAP = 'BAP'; + + /** + * VAT exemption reason + */ + public const UNTDID_4451_BAQ = 'BAQ'; + + /** + * Processing Instructions + */ + public const UNTDID_4451_BAR = 'BAR'; + + /** + * Relay Instructions + */ + public const UNTDID_4451_BAS = 'BAS'; + + /** + * Transport contract document clause + */ + public const UNTDID_4451_BLC = 'BLC'; + + /** + * Instruction to prepare the patient + */ + public const UNTDID_4451_BLD = 'BLD'; + + /** + * Medicine treatment comment + */ + public const UNTDID_4451_BLE = 'BLE'; + + /** + * Examination result comment + */ + public const UNTDID_4451_BLF = 'BLF'; + + /** + * Service request comment + */ + public const UNTDID_4451_BLG = 'BLG'; + + /** + * Prescription reason + */ + public const UNTDID_4451_BLH = 'BLH'; + + /** + * Prescription comment + */ + public const UNTDID_4451_BLI = 'BLI'; + + /** + * Clinical investigation comment + */ + public const UNTDID_4451_BLJ = 'BLJ'; + + /** + * Medicinal specification comment + */ + public const UNTDID_4451_BLK = 'BLK'; + + /** + * Economic contribution comment + */ + public const UNTDID_4451_BLL = 'BLL'; + + /** + * Status of a plan + */ + public const UNTDID_4451_BLM = 'BLM'; + + /** + * Random sample test information + */ + public const UNTDID_4451_BLN = 'BLN'; + + /** + * Period of time + */ + public const UNTDID_4451_BLO = 'BLO'; + + /** + * Legislation + */ + public const UNTDID_4451_BLP = 'BLP'; + + /** + * Security measures requested + */ + public const UNTDID_4451_BLQ = 'BLQ'; + + /** + * Transport contract document remark + */ + public const UNTDID_4451_BLR = 'BLR'; + + /** + * Previous port of call security information + */ + public const UNTDID_4451_BLS = 'BLS'; + + /** + * Security information + */ + public const UNTDID_4451_BLT = 'BLT'; + + /** + * Waste information + */ + public const UNTDID_4451_BLU = 'BLU'; + + /** + * B2C marketing information, short description + */ + public const UNTDID_4451_BLV = 'BLV'; + + /** + * B2B marketing information, long description + */ + public const UNTDID_4451_BLW = 'BLW'; + + /** + * B2C marketing information, long description + */ + public const UNTDID_4451_BLX = 'BLX'; + + /** + * Product ingredients + */ + public const UNTDID_4451_BLY = 'BLY'; + + /** + * Location short name + */ + public const UNTDID_4451_BLZ = 'BLZ'; + + /** + * Packaging material information + */ + public const UNTDID_4451_BMA = 'BMA'; + + /** + * Filler material information + */ + public const UNTDID_4451_BMB = 'BMB'; + + /** + * Ship-to-ship activity information + */ + public const UNTDID_4451_BMC = 'BMC'; + + /** + * Package material description + */ + public const UNTDID_4451_BMD = 'BMD'; + + /** + * Consumer level package marking + */ + public const UNTDID_4451_BME = 'BME'; + + /** + * Customs clearance instructions + */ + public const UNTDID_4451_CCI = 'CCI'; + + /** + * Customs clearance instructions export + */ + public const UNTDID_4451_CEX = 'CEX'; + + /** + * Change information + */ + public const UNTDID_4451_CHG = 'CHG'; + + /** + * Customs clearance instruction import + */ + public const UNTDID_4451_CIP = 'CIP'; + + /** + * Clearance place requested + */ + public const UNTDID_4451_CLP = 'CLP'; + + /** + * Loading remarks + */ + public const UNTDID_4451_CLR = 'CLR'; + + /** + * Order information + */ + public const UNTDID_4451_COI = 'COI'; + + /** + * Customer remarks + */ + public const UNTDID_4451_CUR = 'CUR'; + + /** + * Customs declaration information + */ + public const UNTDID_4451_CUS = 'CUS'; + + /** + * Damage remarks + */ + public const UNTDID_4451_DAR = 'DAR'; + + /** + * Document issuer declaration + */ + public const UNTDID_4451_DCL = 'DCL'; + + /** + * Delivery information + */ + public const UNTDID_4451_DEL = 'DEL'; + + /** + * Delivery instructions + */ + public const UNTDID_4451_DIN = 'DIN'; + + /** + * Documentation instructions + */ + public const UNTDID_4451_DOC = 'DOC'; + + /** + * Duty declaration + */ + public const UNTDID_4451_DUT = 'DUT'; + + /** + * Effective used routing + */ + public const UNTDID_4451_EUR = 'EUR'; + + /** + * First block to be printed on the transport contract + */ + public const UNTDID_4451_FBC = 'FBC'; + + /** + * Government bill of lading information + */ + public const UNTDID_4451_GBL = 'GBL'; + + /** + * Entire transaction set + */ + public const UNTDID_4451_GEN = 'GEN'; + + /** + * Further information concerning GGVS par. 7 + */ + public const UNTDID_4451_GS7 = 'GS7'; + + /** + * Consignment handling instruction + */ + public const UNTDID_4451_HAN = 'HAN'; + + /** + * Hazard information + */ + public const UNTDID_4451_HAZ = 'HAZ'; + + /** + * Consignment information for consignee + */ + public const UNTDID_4451_ICN = 'ICN'; + + /** + * Insurance instructions + */ + public const UNTDID_4451_IIN = 'IIN'; + + /** + * Invoice mailing instructions + */ + public const UNTDID_4451_IMI = 'IMI'; + + /** + * Commercial invoice item description + */ + public const UNTDID_4451_IND = 'IND'; + + /** + * Insurance information + */ + public const UNTDID_4451_INS = 'INS'; + + /** + * Invoice instruction + */ + public const UNTDID_4451_INV = 'INV'; + + /** + * Information for railway purpose + */ + public const UNTDID_4451_IRP = 'IRP'; + + /** + * Inland transport details + */ + public const UNTDID_4451_ITR = 'ITR'; + + /** + * Testing instructions + */ + public const UNTDID_4451_ITS = 'ITS'; + + /** + * Location Alias + */ + public const UNTDID_4451_LAN = 'LAN'; + + /** + * Line item + */ + public const UNTDID_4451_LIN = 'LIN'; + + /** + * Loading instruction + */ + public const UNTDID_4451_LOI = 'LOI'; + + /** + * Miscellaneous charge order + */ + public const UNTDID_4451_MCO = 'MCO'; + + /** + * Maritime Declaration of Health + */ + public const UNTDID_4451_MDH = 'MDH'; + + /** + * Additional marks/numbers information + */ + public const UNTDID_4451_MKS = 'MKS'; + + /** + * Order instruction + */ + public const UNTDID_4451_ORI = 'ORI'; + + /** + * Other service information + */ + public const UNTDID_4451_OSI = 'OSI'; + + /** + * Packing/marking information + */ + public const UNTDID_4451_PAC = 'PAC'; + + /** + * Payment instructions information + */ + public const UNTDID_4451_PAI = 'PAI'; + + /** + * Payables information + */ + public const UNTDID_4451_PAY = 'PAY'; + + /** + * Packaging information + */ + public const UNTDID_4451_PKG = 'PKG'; + + /** + * Packaging terms information + */ + public const UNTDID_4451_PKT = 'PKT'; + + /** + * Payment detail/remittance information + */ + public const UNTDID_4451_PMD = 'PMD'; + + /** + * Payment information + */ + public const UNTDID_4451_PMT = 'PMT'; + + /** + * Product information + */ + public const UNTDID_4451_PRD = 'PRD'; + + /** + * Price calculation formula + */ + public const UNTDID_4451_PRF = 'PRF'; + + /** + * Priority information + */ + public const UNTDID_4451_PRI = 'PRI'; + + /** + * Purchasing information + */ + public const UNTDID_4451_PUR = 'PUR'; + + /** + * Quarantine instructions + */ + public const UNTDID_4451_QIN = 'QIN'; + + /** + * Quality demands/requirements + */ + public const UNTDID_4451_QQD = 'QQD'; + + /** + * Quotation instruction/information + */ + public const UNTDID_4451_QUT = 'QUT'; + + /** + * Risk and handling information + */ + public const UNTDID_4451_RAH = 'RAH'; + + /** + * Regulatory information + */ + public const UNTDID_4451_REG = 'REG'; + + /** + * Return to origin information + */ + public const UNTDID_4451_RET = 'RET'; + + /** + * Receivables + */ + public const UNTDID_4451_REV = 'REV'; + + /** + * Consignment route + */ + public const UNTDID_4451_RQR = 'RQR'; + + /** + * Safety information + */ + public const UNTDID_4451_SAF = 'SAF'; + + /** + * Consignment documentary instruction + */ + public const UNTDID_4451_SIC = 'SIC'; + + /** + * Special instructions + */ + public const UNTDID_4451_SIN = 'SIN'; + + /** + * Ship line requested + */ + public const UNTDID_4451_SLR = 'SLR'; + + /** + * Special permission for transport, generally + */ + public const UNTDID_4451_SPA = 'SPA'; + + /** + * Special permission concerning the goods to be transported + */ + public const UNTDID_4451_SPG = 'SPG'; + + /** + * Special handling + */ + public const UNTDID_4451_SPH = 'SPH'; + + /** + * Special permission concerning package + */ + public const UNTDID_4451_SPP = 'SPP'; + + /** + * Special permission concerning transport means + */ + public const UNTDID_4451_SPT = 'SPT'; + + /** + * Subsidiary risk number (IATA/DGR) + */ + public const UNTDID_4451_SRN = 'SRN'; + + /** + * Special service request + */ + public const UNTDID_4451_SSR = 'SSR'; + + /** + * Supplier remarks + */ + public const UNTDID_4451_SUR = 'SUR'; + + /** + * Consignment tariff + */ + public const UNTDID_4451_TCA = 'TCA'; + + /** + * Consignment transport + */ + public const UNTDID_4451_TDT = 'TDT'; + + /** + * Transportation information + */ + public const UNTDID_4451_TRA = 'TRA'; + + /** + * Requested tariff + */ + public const UNTDID_4451_TRR = 'TRR'; + + /** + * Tax declaration + */ + public const UNTDID_4451_TXD = 'TXD'; + + /** + * Warehouse instruction/information + */ + public const UNTDID_4451_WHI = 'WHI'; + + /** + * Mutually defined + */ + public const UNTDID_4451_ZZZ = 'ZZZ'; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdUnitCodes.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdUnitCodes.php new file mode 100644 index 000000000..5a59e1c88 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdUnitCodes.php @@ -0,0 +1,10603 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdUnitCodes +{ + /** + * group + */ + public const REC20_GROUP = '10'; + + /** + * outfit + */ + public const REC20_OUTFIT = '11'; + + /** + * ration + */ + public const REC20_RATION = '13'; + + /** + * shot + */ + public const REC20_SHOT = '14'; + + /** + * stick, military + */ + public const REC20_STICK_MILITARY = '15'; + + /** + * twenty foot container + */ + public const REC20_TWENTY_FOOT_CONTAINER = '20'; + + /** + * forty foot container + */ + public const REC20_FORTY_FOOT_CONTAINER = '21'; + + /** + * decilitre per gram + */ + public const REC20_DECILITRE_PER_GRAM = '22'; + + /** + * gram per cubic centimetre + */ + public const REC20_GRAM_PER_CUBIC_CENTIMETRE = '23'; + + /** + * theoretical pound + */ + public const REC20_THEORETICAL_POUND = '24'; + + /** + * gram per square centimetre + */ + public const REC20_GRAM_PER_SQUARE_CENTIMETRE = '25'; + + /** + * theoretical ton + */ + public const REC20_THEORETICAL_TON = '27'; + + /** + * kilogram per square metre + */ + public const REC20_KILOGRAM_PER_SQUARE_METRE = '28'; + + /** + * kilopascal square metre per gram + */ + public const REC20_KILOPASCAL_SQUARE_METRE_PER_GRAM = '33'; + + /** + * kilopascal per millimetre + */ + public const REC20_KILOPASCAL_PER_MILLIMETRE = '34'; + + /** + * millilitre per square centimetre second + */ + public const REC20_MILLILITRE_PER_SQUARE_CENTIMETRE_SECOND = '35'; + + /** + * ounce per square foot + */ + public const REC20_OUNCE_PER_SQUARE_FOOT = '37'; + + /** + * ounce per square foot per 0,01inch + */ + public const REC20_OUNCE_PER_SQUARE_FOOT_PER_001INCH = '38'; + + /** + * millilitre per second + */ + public const REC20_MILLILITRE_PER_SECOND = '40'; + + /** + * millilitre per minute + */ + public const REC20_MILLILITRE_PER_MINUTE = '41'; + + /** + * sitas + */ + public const REC20_SITAS = '56'; + + /** + * mesh + */ + public const REC20_MESH = '57'; + + /** + * net kilogram + */ + public const REC20_NET_KILOGRAM = '58'; + + /** + * part per million + */ + public const REC20_PART_PER_MILLION = '59'; + + /** + * percent weight + */ + public const REC20_PERCENT_WEIGHT = '60'; + + /** + * part per billion (US) + */ + public const REC20_PART_PER_BILLION_US = '61'; + + /** + * millipascal + */ + public const REC20_MILLIPASCAL = '74'; + + /** + * milli-inch + */ + public const REC20_MILLIINCH = '77'; + + /** + * pound per square inch absolute + */ + public const REC20_POUND_PER_SQUARE_INCH_ABSOLUTE = '80'; + + /** + * henry + */ + public const REC20_HENRY = '81'; + + /** + * foot pound-force + */ + public const REC20_FOOT_POUNDFORCE = '85'; + + /** + * pound per cubic foot + */ + public const REC20_POUND_PER_CUBIC_FOOT = '87'; + + /** + * poise + */ + public const REC20_POISE = '89'; + + /** + * stokes + */ + public const REC20_STOKES = '91'; + + /** + * fixed rate + */ + public const REC20_FIXED_RATE = '1I'; + + /** + * radian per second + */ + public const REC20_RADIAN_PER_SECOND = '2A'; + + /** + * radian per second squared + */ + public const REC20_RADIAN_PER_SECOND_SQUARED = '2B'; + + /** + * roentgen + */ + public const REC20_ROENTGEN = '2C'; + + /** + * volt AC + */ + public const REC20_VOLT_AC = '2G'; + + /** + * volt DC + */ + public const REC20_VOLT_DC = '2H'; + + /** + * British thermal unit (international table) per hour + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_HOUR = '2I'; + + /** + * cubic centimetre per second + */ + public const REC20_CUBIC_CENTIMETRE_PER_SECOND = '2J'; + + /** + * cubic foot per hour + */ + public const REC20_CUBIC_FOOT_PER_HOUR = '2K'; + + /** + * cubic foot per minute + */ + public const REC20_CUBIC_FOOT_PER_MINUTE = '2L'; + + /** + * centimetre per second + */ + public const REC20_CENTIMETRE_PER_SECOND = '2M'; + + /** + * decibel + */ + public const REC20_DECIBEL = '2N'; + + /** + * kilobyte + */ + public const REC20_KILOBYTE = '2P'; + + /** + * kilobecquerel + */ + public const REC20_KILOBECQUEREL = '2Q'; + + /** + * kilocurie + */ + public const REC20_KILOCURIE = '2R'; + + /** + * megagram + */ + public const REC20_MEGAGRAM = '2U'; + + /** + * metre per minute + */ + public const REC20_METRE_PER_MINUTE = '2X'; + + /** + * milliroentgen + */ + public const REC20_MILLIROENTGEN = '2Y'; + + /** + * millivolt + */ + public const REC20_MILLIVOLT = '2Z'; + + /** + * megajoule + */ + public const REC20_MEGAJOULE = '3B'; + + /** + * manmonth + */ + public const REC20_MANMONTH = '3C'; + + /** + * centistokes + */ + public const REC20_CENTISTOKES = '4C'; + + /** + * microlitre + */ + public const REC20_MICROLITRE = '4G'; + + /** + * micrometre (micron) + */ + public const REC20_MICROMETRE_MICRON = '4H'; + + /** + * milliampere + */ + public const REC20_MILLIAMPERE = '4K'; + + /** + * megabyte + */ + public const REC20_MEGABYTE = '4L'; + + /** + * milligram per hour + */ + public const REC20_MILLIGRAM_PER_HOUR = '4M'; + + /** + * megabecquerel + */ + public const REC20_MEGABECQUEREL = '4N'; + + /** + * microfarad + */ + public const REC20_MICROFARAD = '4O'; + + /** + * newton per metre + */ + public const REC20_NEWTON_PER_METRE = '4P'; + + /** + * ounce inch + */ + public const REC20_OUNCE_INCH = '4Q'; + + /** + * ounce foot + */ + public const REC20_OUNCE_FOOT = '4R'; + + /** + * picofarad + */ + public const REC20_PICOFARAD = '4T'; + + /** + * pound per hour + */ + public const REC20_POUND_PER_HOUR = '4U'; + + /** + * ton (US) per hour + */ + public const REC20_TON_US_PER_HOUR = '4W'; + + /** + * kilolitre per hour + */ + public const REC20_KILOLITRE_PER_HOUR = '4X'; + + /** + * barrel (US) per minute + */ + public const REC20_BARREL_US_PER_MINUTE = '5A'; + + /** + * batch + */ + public const REC20_BATCH = '5B'; + + /** + * MMSCF/day + */ + public const REC20_MMSCF_DAY = '5E'; + + /** + * hydraulic horse power + */ + public const REC20_HYDRAULIC_HORSE_POWER = '5J'; + + /** + * ampere square metre per joule second + */ + public const REC20_AMPERE_SQUARE_METRE_PER_JOULE_SECOND = 'A10'; + + /** + * angstrom + */ + public const REC20_ANGSTROM = 'A11'; + + /** + * astronomical unit + */ + public const REC20_ASTRONOMICAL_UNIT = 'A12'; + + /** + * attojoule + */ + public const REC20_ATTOJOULE = 'A13'; + + /** + * barn + */ + public const REC20_BARN = 'A14'; + + /** + * barn per electronvolt + */ + public const REC20_BARN_PER_ELECTRONVOLT = 'A15'; + + /** + * barn per steradian electronvolt + */ + public const REC20_BARN_PER_STERADIAN_ELECTRONVOLT = 'A16'; + + /** + * barn per steradian + */ + public const REC20_BARN_PER_STERADIAN = 'A17'; + + /** + * becquerel per kilogram + */ + public const REC20_BECQUEREL_PER_KILOGRAM = 'A18'; + + /** + * becquerel per cubic metre + */ + public const REC20_BECQUEREL_PER_CUBIC_METRE = 'A19'; + + /** + * ampere per centimetre + */ + public const REC20_AMPERE_PER_CENTIMETRE = 'A2'; + + /** + * British thermal unit (international table) per second square foot + * degree Rankine + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SECOND_SQUARE_FOOT_DEGREE_RANKINE = 'A20'; + + /** + * British thermal unit (international table) per pound degree Rankine + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_POUND_DEGREE_RANKINE = 'A21'; + + /** + * British thermal unit (international table) per second foot degree + * Rankine + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SECOND_FOOT_DEGREE_RANKINE = 'A22'; + + /** + * British thermal unit (international table) per hour square foot degree + * Rankine + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_HOUR_SQUARE_FOOT_DEGREE_RANKINE = 'A23'; + + /** + * candela per square metre + */ + public const REC20_CANDELA_PER_SQUARE_METRE = 'A24'; + + /** + * coulomb metre + */ + public const REC20_COULOMB_METRE = 'A26'; + + /** + * coulomb metre squared per volt + */ + public const REC20_COULOMB_METRE_SQUARED_PER_VOLT = 'A27'; + + /** + * coulomb per cubic centimetre + */ + public const REC20_COULOMB_PER_CUBIC_CENTIMETRE = 'A28'; + + /** + * coulomb per cubic metre + */ + public const REC20_COULOMB_PER_CUBIC_METRE = 'A29'; + + /** + * ampere per millimetre + */ + public const REC20_AMPERE_PER_MILLIMETRE = 'A3'; + + /** + * coulomb per cubic millimetre + */ + public const REC20_COULOMB_PER_CUBIC_MILLIMETRE = 'A30'; + + /** + * coulomb per kilogram second + */ + public const REC20_COULOMB_PER_KILOGRAM_SECOND = 'A31'; + + /** + * coulomb per mole + */ + public const REC20_COULOMB_PER_MOLE = 'A32'; + + /** + * coulomb per square centimetre + */ + public const REC20_COULOMB_PER_SQUARE_CENTIMETRE = 'A33'; + + /** + * coulomb per square metre + */ + public const REC20_COULOMB_PER_SQUARE_METRE = 'A34'; + + /** + * coulomb per square millimetre + */ + public const REC20_COULOMB_PER_SQUARE_MILLIMETRE = 'A35'; + + /** + * cubic centimetre per mole + */ + public const REC20_CUBIC_CENTIMETRE_PER_MOLE = 'A36'; + + /** + * cubic decimetre per mole + */ + public const REC20_CUBIC_DECIMETRE_PER_MOLE = 'A37'; + + /** + * cubic metre per coulomb + */ + public const REC20_CUBIC_METRE_PER_COULOMB = 'A38'; + + /** + * cubic metre per kilogram + */ + public const REC20_CUBIC_METRE_PER_KILOGRAM = 'A39'; + + /** + * ampere per square centimetre + */ + public const REC20_AMPERE_PER_SQUARE_CENTIMETRE = 'A4'; + + /** + * cubic metre per mole + */ + public const REC20_CUBIC_METRE_PER_MOLE = 'A40'; + + /** + * ampere per square metre + */ + public const REC20_AMPERE_PER_SQUARE_METRE = 'A41'; + + /** + * curie per kilogram + */ + public const REC20_CURIE_PER_KILOGRAM = 'A42'; + + /** + * deadweight tonnage + */ + public const REC20_DEADWEIGHT_TONNAGE = 'A43'; + + /** + * decalitre + */ + public const REC20_DECALITRE = 'A44'; + + /** + * decametre + */ + public const REC20_DECAMETRE = 'A45'; + + /** + * decitex + */ + public const REC20_DECITEX = 'A47'; + + /** + * degree Rankine + */ + public const REC20_DEGREE_RANKINE = 'A48'; + + /** + * ampere square metre + */ + public const REC20_AMPERE_SQUARE_METRE = 'A5'; + + /** + * electronvolt + */ + public const REC20_ELECTRONVOLT = 'A53'; + + /** + * electronvolt per metre + */ + public const REC20_ELECTRONVOLT_PER_METRE = 'A54'; + + /** + * electronvolt square metre + */ + public const REC20_ELECTRONVOLT_SQUARE_METRE = 'A55'; + + /** + * electronvolt square metre per kilogram + */ + public const REC20_ELECTRONVOLT_SQUARE_METRE_PER_KILOGRAM = 'A56'; + + /** + * 8-part cloud cover + */ + public const REC20_8PART_CLOUD_COVER = 'A59'; + + /** + * ampere per square metre kelvin squared + */ + public const REC20_AMPERE_PER_SQUARE_METRE_KELVIN_SQUARED = 'A6'; + + /** + * exajoule + */ + public const REC20_EXAJOULE = 'A68'; + + /** + * farad per metre + */ + public const REC20_FARAD_PER_METRE = 'A69'; + + /** + * ampere per square millimetre + */ + public const REC20_AMPERE_PER_SQUARE_MILLIMETRE = 'A7'; + + /** + * femtojoule + */ + public const REC20_FEMTOJOULE = 'A70'; + + /** + * femtometre + */ + public const REC20_FEMTOMETRE = 'A71'; + + /** + * foot per second squared + */ + public const REC20_FOOT_PER_SECOND_SQUARED = 'A73'; + + /** + * foot pound-force per second + */ + public const REC20_FOOT_POUNDFORCE_PER_SECOND = 'A74'; + + /** + * freight ton + */ + public const REC20_FREIGHT_TON = 'A75'; + + /** + * gal + */ + public const REC20_GAL = 'A76'; + + /** + * ampere second + */ + public const REC20_AMPERE_SECOND = 'A8'; + + /** + * gigacoulomb per cubic metre + */ + public const REC20_GIGACOULOMB_PER_CUBIC_METRE = 'A84'; + + /** + * gigaelectronvolt + */ + public const REC20_GIGAELECTRONVOLT = 'A85'; + + /** + * gigahertz + */ + public const REC20_GIGAHERTZ = 'A86'; + + /** + * gigaohm + */ + public const REC20_GIGAOHM = 'A87'; + + /** + * gigaohm metre + */ + public const REC20_GIGAOHM_METRE = 'A88'; + + /** + * gigapascal + */ + public const REC20_GIGAPASCAL = 'A89'; + + /** + * rate + */ + public const REC20_RATE = 'A9'; + + /** + * gigawatt + */ + public const REC20_GIGAWATT = 'A90'; + + /** + * gon + */ + public const REC20_GON = 'A91'; + + /** + * gram per cubic metre + */ + public const REC20_GRAM_PER_CUBIC_METRE = 'A93'; + + /** + * gram per mole + */ + public const REC20_GRAM_PER_MOLE = 'A94'; + + /** + * gray + */ + public const REC20_GRAY = 'A95'; + + /** + * gray per second + */ + public const REC20_GRAY_PER_SECOND = 'A96'; + + /** + * hectopascal + */ + public const REC20_HECTOPASCAL = 'A97'; + + /** + * henry per metre + */ + public const REC20_HENRY_PER_METRE = 'A98'; + + /** + * bit + */ + public const REC20_BIT = 'A99'; + + /** + * ball + */ + public const REC20_BALL = 'AA'; + + /** + * bulk pack + */ + public const REC20_BULK_PACK = 'AB'; + + /** + * acre + */ + public const REC20_ACRE = 'ACR'; + + /** + * activity + */ + public const REC20_ACTIVITY = 'ACT'; + + /** + * byte + */ + public const REC20_BYTE = 'AD'; + + /** + * ampere per metre + */ + public const REC20_AMPERE_PER_METRE = 'AE'; + + /** + * additional minute + */ + public const REC20_ADDITIONAL_MINUTE = 'AH'; + + /** + * average minute per call + */ + public const REC20_AVERAGE_MINUTE_PER_CALL = 'AI'; + + /** + * fathom + */ + public const REC20_FATHOM = 'AK'; + + /** + * access line + */ + public const REC20_ACCESS_LINE = 'AL'; + + /** + * ampere hour + */ + public const REC20_AMPERE_HOUR = 'AMH'; + + /** + * ampere + */ + public const REC20_AMPERE = 'AMP'; + + /** + * year + */ + public const REC20_YEAR = 'ANN'; + + /** + * troy ounce or apothecary ounce + */ + public const REC20_TROY_OUNCE_OR_APOTHECARY_OUNCE = 'APZ'; + + /** + * anti-hemophilic factor (AHF) unit + */ + public const REC20_ANTIHEMOPHILIC_FACTOR_AHF_UNIT = 'AQ'; + + /** + * assortment + */ + public const REC20_ASSORTMENT = 'AS'; + + /** + * alcoholic strength by mass + */ + public const REC20_ALCOHOLIC_STRENGTH_BY_MASS = 'ASM'; + + /** + * alcoholic strength by volume + */ + public const REC20_ALCOHOLIC_STRENGTH_BY_VOLUME = 'ASU'; + + /** + * standard atmosphere + */ + public const REC20_STANDARD_ATMOSPHERE = 'ATM'; + + /** + * american wire gauge + */ + public const REC20_AMERICAN_WIRE_GAUGE = 'AWG'; + + /** + * assembly + */ + public const REC20_ASSEMBLY = 'AY'; + + /** + * British thermal unit (international table) per pound + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_POUND = 'AZ'; + + /** + * barrel (US) per day + */ + public const REC20_BARREL_US_PER_DAY = 'B1'; + + /** + * bit per second + */ + public const REC20_BIT_PER_SECOND = 'B10'; + + /** + * joule per kilogram kelvin + */ + public const REC20_JOULE_PER_KILOGRAM_KELVIN = 'B11'; + + /** + * joule per metre + */ + public const REC20_JOULE_PER_METRE = 'B12'; + + /** + * joule per square metre + */ + public const REC20_JOULE_PER_SQUARE_METRE = 'B13'; + + /** + * joule per metre to the fourth power + */ + public const REC20_JOULE_PER_METRE_TO_THE_FOURTH_POWER = 'B14'; + + /** + * joule per mole + */ + public const REC20_JOULE_PER_MOLE = 'B15'; + + /** + * joule per mole kelvin + */ + public const REC20_JOULE_PER_MOLE_KELVIN = 'B16'; + + /** + * credit + */ + public const REC20_CREDIT = 'B17'; + + /** + * joule second + */ + public const REC20_JOULE_SECOND = 'B18'; + + /** + * digit + */ + public const REC20_DIGIT = 'B19'; + + /** + * joule square metre per kilogram + */ + public const REC20_JOULE_SQUARE_METRE_PER_KILOGRAM = 'B20'; + + /** + * kelvin per watt + */ + public const REC20_KELVIN_PER_WATT = 'B21'; + + /** + * kiloampere + */ + public const REC20_KILOAMPERE = 'B22'; + + /** + * kiloampere per square metre + */ + public const REC20_KILOAMPERE_PER_SQUARE_METRE = 'B23'; + + /** + * kiloampere per metre + */ + public const REC20_KILOAMPERE_PER_METRE = 'B24'; + + /** + * kilobecquerel per kilogram + */ + public const REC20_KILOBECQUEREL_PER_KILOGRAM = 'B25'; + + /** + * kilocoulomb + */ + public const REC20_KILOCOULOMB = 'B26'; + + /** + * kilocoulomb per cubic metre + */ + public const REC20_KILOCOULOMB_PER_CUBIC_METRE = 'B27'; + + /** + * kilocoulomb per square metre + */ + public const REC20_KILOCOULOMB_PER_SQUARE_METRE = 'B28'; + + /** + * kiloelectronvolt + */ + public const REC20_KILOELECTRONVOLT = 'B29'; + + /** + * batting pound + */ + public const REC20_BATTING_POUND = 'B3'; + + /** + * gibibit + */ + public const REC20_GIBIBIT = 'B30'; + + /** + * kilogram metre per second + */ + public const REC20_KILOGRAM_METRE_PER_SECOND = 'B31'; + + /** + * kilogram metre squared + */ + public const REC20_KILOGRAM_METRE_SQUARED = 'B32'; + + /** + * kilogram metre squared per second + */ + public const REC20_KILOGRAM_METRE_SQUARED_PER_SECOND = 'B33'; + + /** + * kilogram per cubic decimetre + */ + public const REC20_KILOGRAM_PER_CUBIC_DECIMETRE = 'B34'; + + /** + * kilogram per litre + */ + public const REC20_KILOGRAM_PER_LITRE = 'B35'; + + /** + * barrel, imperial + */ + public const REC20_BARREL_IMPERIAL = 'B4'; + + /** + * kilojoule per kelvin + */ + public const REC20_KILOJOULE_PER_KELVIN = 'B41'; + + /** + * kilojoule per kilogram + */ + public const REC20_KILOJOULE_PER_KILOGRAM = 'B42'; + + /** + * kilojoule per kilogram kelvin + */ + public const REC20_KILOJOULE_PER_KILOGRAM_KELVIN = 'B43'; + + /** + * kilojoule per mole + */ + public const REC20_KILOJOULE_PER_MOLE = 'B44'; + + /** + * kilomole + */ + public const REC20_KILOMOLE = 'B45'; + + /** + * kilomole per cubic metre + */ + public const REC20_KILOMOLE_PER_CUBIC_METRE = 'B46'; + + /** + * kilonewton + */ + public const REC20_KILONEWTON = 'B47'; + + /** + * kilonewton metre + */ + public const REC20_KILONEWTON_METRE = 'B48'; + + /** + * kiloohm + */ + public const REC20_KILOOHM = 'B49'; + + /** + * kiloohm metre + */ + public const REC20_KILOOHM_METRE = 'B50'; + + /** + * kilosecond + */ + public const REC20_KILOSECOND = 'B52'; + + /** + * kilosiemens + */ + public const REC20_KILOSIEMENS = 'B53'; + + /** + * kilosiemens per metre + */ + public const REC20_KILOSIEMENS_PER_METRE = 'B54'; + + /** + * kilovolt per metre + */ + public const REC20_KILOVOLT_PER_METRE = 'B55'; + + /** + * kiloweber per metre + */ + public const REC20_KILOWEBER_PER_METRE = 'B56'; + + /** + * light year + */ + public const REC20_LIGHT_YEAR = 'B57'; + + /** + * litre per mole + */ + public const REC20_LITRE_PER_MOLE = 'B58'; + + /** + * lumen hour + */ + public const REC20_LUMEN_HOUR = 'B59'; + + /** + * lumen per square metre + */ + public const REC20_LUMEN_PER_SQUARE_METRE = 'B60'; + + /** + * lumen per watt + */ + public const REC20_LUMEN_PER_WATT = 'B61'; + + /** + * lumen second + */ + public const REC20_LUMEN_SECOND = 'B62'; + + /** + * lux hour + */ + public const REC20_LUX_HOUR = 'B63'; + + /** + * lux second + */ + public const REC20_LUX_SECOND = 'B64'; + + /** + * megaampere per square metre + */ + public const REC20_MEGAAMPERE_PER_SQUARE_METRE = 'B66'; + + /** + * megabecquerel per kilogram + */ + public const REC20_MEGABECQUEREL_PER_KILOGRAM = 'B67'; + + /** + * gigabit + */ + public const REC20_GIGABIT = 'B68'; + + /** + * megacoulomb per cubic metre + */ + public const REC20_MEGACOULOMB_PER_CUBIC_METRE = 'B69'; + + /** + * cycle + */ + public const REC20_CYCLE = 'B7'; + + /** + * megacoulomb per square metre + */ + public const REC20_MEGACOULOMB_PER_SQUARE_METRE = 'B70'; + + /** + * megaelectronvolt + */ + public const REC20_MEGAELECTRONVOLT = 'B71'; + + /** + * megagram per cubic metre + */ + public const REC20_MEGAGRAM_PER_CUBIC_METRE = 'B72'; + + /** + * meganewton + */ + public const REC20_MEGANEWTON = 'B73'; + + /** + * meganewton metre + */ + public const REC20_MEGANEWTON_METRE = 'B74'; + + /** + * megaohm + */ + public const REC20_MEGAOHM = 'B75'; + + /** + * megaohm metre + */ + public const REC20_MEGAOHM_METRE = 'B76'; + + /** + * megasiemens per metre + */ + public const REC20_MEGASIEMENS_PER_METRE = 'B77'; + + /** + * megavolt + */ + public const REC20_MEGAVOLT = 'B78'; + + /** + * megavolt per metre + */ + public const REC20_MEGAVOLT_PER_METRE = 'B79'; + + /** + * joule per cubic metre + */ + public const REC20_JOULE_PER_CUBIC_METRE = 'B8'; + + /** + * gigabit per second + */ + public const REC20_GIGABIT_PER_SECOND = 'B80'; + + /** + * reciprocal metre squared reciprocal second + */ + public const REC20_RECIPROCAL_METRE_SQUARED_RECIPROCAL_SECOND = 'B81'; + + /** + * inch per linear foot + */ + public const REC20_INCH_PER_LINEAR_FOOT = 'B82'; + + /** + * metre to the fourth power + */ + public const REC20_METRE_TO_THE_FOURTH_POWER = 'B83'; + + /** + * microampere + */ + public const REC20_MICROAMPERE = 'B84'; + + /** + * microbar + */ + public const REC20_MICROBAR = 'B85'; + + /** + * microcoulomb + */ + public const REC20_MICROCOULOMB = 'B86'; + + /** + * microcoulomb per cubic metre + */ + public const REC20_MICROCOULOMB_PER_CUBIC_METRE = 'B87'; + + /** + * microcoulomb per square metre + */ + public const REC20_MICROCOULOMB_PER_SQUARE_METRE = 'B88'; + + /** + * microfarad per metre + */ + public const REC20_MICROFARAD_PER_METRE = 'B89'; + + /** + * microhenry + */ + public const REC20_MICROHENRY = 'B90'; + + /** + * microhenry per metre + */ + public const REC20_MICROHENRY_PER_METRE = 'B91'; + + /** + * micronewton + */ + public const REC20_MICRONEWTON = 'B92'; + + /** + * micronewton metre + */ + public const REC20_MICRONEWTON_METRE = 'B93'; + + /** + * microohm + */ + public const REC20_MICROOHM = 'B94'; + + /** + * microohm metre + */ + public const REC20_MICROOHM_METRE = 'B95'; + + /** + * micropascal + */ + public const REC20_MICROPASCAL = 'B96'; + + /** + * microradian + */ + public const REC20_MICRORADIAN = 'B97'; + + /** + * microsecond + */ + public const REC20_MICROSECOND = 'B98'; + + /** + * microsiemens + */ + public const REC20_MICROSIEMENS = 'B99'; + + /** + * bar [unit of pressure] + */ + public const REC20_BAR_UNIT_OF_PRESSURE = 'BAR'; + + /** + * base box + */ + public const REC20_BASE_BOX = 'BB'; + + /** + * board foot + */ + public const REC20_BOARD_FOOT = 'BFT'; + + /** + * brake horse power + */ + public const REC20_BRAKE_HORSE_POWER = 'BHP'; + + /** + * billion (EUR) + */ + public const REC20_BILLION_EUR = 'BIL'; + + /** + * dry barrel (US) + */ + public const REC20_DRY_BARREL_US = 'BLD'; + + /** + * barrel (US) + */ + public const REC20_BARREL_US = 'BLL'; + + /** + * hundred board foot + */ + public const REC20_HUNDRED_BOARD_FOOT = 'BP'; + + /** + * beats per minute + */ + public const REC20_BEATS_PER_MINUTE = 'BPM'; + + /** + * becquerel + */ + public const REC20_BECQUEREL = 'BQL'; + + /** + * British thermal unit (international table) + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE = 'BTU'; + + /** + * bushel (US) + */ + public const REC20_BUSHEL_US = 'BUA'; + + /** + * bushel (UK) + */ + public const REC20_BUSHEL_UK = 'BUI'; + + /** + * call + */ + public const REC20_CALL = 'C0'; + + /** + * millifarad + */ + public const REC20_MILLIFARAD = 'C10'; + + /** + * milligal + */ + public const REC20_MILLIGAL = 'C11'; + + /** + * milligram per metre + */ + public const REC20_MILLIGRAM_PER_METRE = 'C12'; + + /** + * milligray + */ + public const REC20_MILLIGRAY = 'C13'; + + /** + * millihenry + */ + public const REC20_MILLIHENRY = 'C14'; + + /** + * millijoule + */ + public const REC20_MILLIJOULE = 'C15'; + + /** + * millimetre per second + */ + public const REC20_MILLIMETRE_PER_SECOND = 'C16'; + + /** + * millimetre squared per second + */ + public const REC20_MILLIMETRE_SQUARED_PER_SECOND = 'C17'; + + /** + * millimole + */ + public const REC20_MILLIMOLE = 'C18'; + + /** + * mole per kilogram + */ + public const REC20_MOLE_PER_KILOGRAM = 'C19'; + + /** + * millinewton + */ + public const REC20_MILLINEWTON = 'C20'; + + /** + * kibibit + */ + public const REC20_KIBIBIT = 'C21'; + + /** + * millinewton per metre + */ + public const REC20_MILLINEWTON_PER_METRE = 'C22'; + + /** + * milliohm metre + */ + public const REC20_MILLIOHM_METRE = 'C23'; + + /** + * millipascal second + */ + public const REC20_MILLIPASCAL_SECOND = 'C24'; + + /** + * milliradian + */ + public const REC20_MILLIRADIAN = 'C25'; + + /** + * millisecond + */ + public const REC20_MILLISECOND = 'C26'; + + /** + * millisiemens + */ + public const REC20_MILLISIEMENS = 'C27'; + + /** + * millisievert + */ + public const REC20_MILLISIEVERT = 'C28'; + + /** + * millitesla + */ + public const REC20_MILLITESLA = 'C29'; + + /** + * microvolt per metre + */ + public const REC20_MICROVOLT_PER_METRE = 'C3'; + + /** + * millivolt per metre + */ + public const REC20_MILLIVOLT_PER_METRE = 'C30'; + + /** + * milliwatt + */ + public const REC20_MILLIWATT = 'C31'; + + /** + * milliwatt per square metre + */ + public const REC20_MILLIWATT_PER_SQUARE_METRE = 'C32'; + + /** + * milliweber + */ + public const REC20_MILLIWEBER = 'C33'; + + /** + * mole + */ + public const REC20_MOLE = 'C34'; + + /** + * mole per cubic decimetre + */ + public const REC20_MOLE_PER_CUBIC_DECIMETRE = 'C35'; + + /** + * mole per cubic metre + */ + public const REC20_MOLE_PER_CUBIC_METRE = 'C36'; + + /** + * kilobit + */ + public const REC20_KILOBIT = 'C37'; + + /** + * mole per litre + */ + public const REC20_MOLE_PER_LITRE = 'C38'; + + /** + * nanoampere + */ + public const REC20_NANOAMPERE = 'C39'; + + /** + * nanocoulomb + */ + public const REC20_NANOCOULOMB = 'C40'; + + /** + * nanofarad + */ + public const REC20_NANOFARAD = 'C41'; + + /** + * nanofarad per metre + */ + public const REC20_NANOFARAD_PER_METRE = 'C42'; + + /** + * nanohenry + */ + public const REC20_NANOHENRY = 'C43'; + + /** + * nanohenry per metre + */ + public const REC20_NANOHENRY_PER_METRE = 'C44'; + + /** + * nanometre + */ + public const REC20_NANOMETRE = 'C45'; + + /** + * nanoohm metre + */ + public const REC20_NANOOHM_METRE = 'C46'; + + /** + * nanosecond + */ + public const REC20_NANOSECOND = 'C47'; + + /** + * nanotesla + */ + public const REC20_NANOTESLA = 'C48'; + + /** + * nanowatt + */ + public const REC20_NANOWATT = 'C49'; + + /** + * neper + */ + public const REC20_NEPER = 'C50'; + + /** + * neper per second + */ + public const REC20_NEPER_PER_SECOND = 'C51'; + + /** + * picometre + */ + public const REC20_PICOMETRE = 'C52'; + + /** + * newton metre second + */ + public const REC20_NEWTON_METRE_SECOND = 'C53'; + + /** + * newton metre squared per kilogram squared + */ + public const REC20_NEWTON_METRE_SQUARED_PER_KILOGRAM_SQUARED = 'C54'; + + /** + * newton per square metre + */ + public const REC20_NEWTON_PER_SQUARE_METRE = 'C55'; + + /** + * newton per square millimetre + */ + public const REC20_NEWTON_PER_SQUARE_MILLIMETRE = 'C56'; + + /** + * newton second + */ + public const REC20_NEWTON_SECOND = 'C57'; + + /** + * newton second per metre + */ + public const REC20_NEWTON_SECOND_PER_METRE = 'C58'; + + /** + * octave + */ + public const REC20_OCTAVE = 'C59'; + + /** + * ohm centimetre + */ + public const REC20_OHM_CENTIMETRE = 'C60'; + + /** + * ohm metre + */ + public const REC20_OHM_METRE = 'C61'; + + /** + * one + */ + public const REC20_ONE = 'C62'; + + /** + * parsec + */ + public const REC20_PARSEC = 'C63'; + + /** + * pascal per kelvin + */ + public const REC20_PASCAL_PER_KELVIN = 'C64'; + + /** + * pascal second + */ + public const REC20_PASCAL_SECOND = 'C65'; + + /** + * pascal second per cubic metre + */ + public const REC20_PASCAL_SECOND_PER_CUBIC_METRE = 'C66'; + + /** + * pascal second per metre + */ + public const REC20_PASCAL_SECOND_PER_METRE = 'C67'; + + /** + * petajoule + */ + public const REC20_PETAJOULE = 'C68'; + + /** + * phon + */ + public const REC20_PHON = 'C69'; + + /** + * centipoise + */ + public const REC20_CENTIPOISE = 'C7'; + + /** + * picoampere + */ + public const REC20_PICOAMPERE = 'C70'; + + /** + * picocoulomb + */ + public const REC20_PICOCOULOMB = 'C71'; + + /** + * picofarad per metre + */ + public const REC20_PICOFARAD_PER_METRE = 'C72'; + + /** + * picohenry + */ + public const REC20_PICOHENRY = 'C73'; + + /** + * kilobit per second + */ + public const REC20_KILOBIT_PER_SECOND = 'C74'; + + /** + * picowatt + */ + public const REC20_PICOWATT = 'C75'; + + /** + * picowatt per square metre + */ + public const REC20_PICOWATT_PER_SQUARE_METRE = 'C76'; + + /** + * pound-force + */ + public const REC20_POUNDFORCE = 'C78'; + + /** + * kilovolt ampere hour + */ + public const REC20_KILOVOLT_AMPERE_HOUR = 'C79'; + + /** + * millicoulomb per kilogram + */ + public const REC20_MILLICOULOMB_PER_KILOGRAM = 'C8'; + + /** + * rad + */ + public const REC20_RAD = 'C80'; + + /** + * radian + */ + public const REC20_RADIAN = 'C81'; + + /** + * radian square metre per mole + */ + public const REC20_RADIAN_SQUARE_METRE_PER_MOLE = 'C82'; + + /** + * radian square metre per kilogram + */ + public const REC20_RADIAN_SQUARE_METRE_PER_KILOGRAM = 'C83'; + + /** + * radian per metre + */ + public const REC20_RADIAN_PER_METRE = 'C84'; + + /** + * reciprocal angstrom + */ + public const REC20_RECIPROCAL_ANGSTROM = 'C85'; + + /** + * reciprocal cubic metre + */ + public const REC20_RECIPROCAL_CUBIC_METRE = 'C86'; + + /** + * reciprocal cubic metre per second + */ + public const REC20_RECIPROCAL_CUBIC_METRE_PER_SECOND = 'C87'; + + /** + * reciprocal electron volt per cubic metre + */ + public const REC20_RECIPROCAL_ELECTRON_VOLT_PER_CUBIC_METRE = 'C88'; + + /** + * reciprocal henry + */ + public const REC20_RECIPROCAL_HENRY = 'C89'; + + /** + * coil group + */ + public const REC20_COIL_GROUP = 'C9'; + + /** + * reciprocal joule per cubic metre + */ + public const REC20_RECIPROCAL_JOULE_PER_CUBIC_METRE = 'C90'; + + /** + * reciprocal kelvin or kelvin to the power minus one + */ + public const REC20_RECIPROCAL_KELVIN_OR_KELVIN_TO_THE_POWER_MINUS_ONE = 'C91'; + + /** + * reciprocal metre + */ + public const REC20_RECIPROCAL_METRE = 'C92'; + + /** + * reciprocal square metre + */ + public const REC20_RECIPROCAL_SQUARE_METRE = 'C93'; + + /** + * reciprocal minute + */ + public const REC20_RECIPROCAL_MINUTE = 'C94'; + + /** + * reciprocal mole + */ + public const REC20_RECIPROCAL_MOLE = 'C95'; + + /** + * reciprocal pascal or pascal to the power minus one + */ + public const REC20_RECIPROCAL_PASCAL_OR_PASCAL_TO_THE_POWER_MINUS_ONE = 'C96'; + + /** + * reciprocal second + */ + public const REC20_RECIPROCAL_SECOND = 'C97'; + + /** + * reciprocal second per metre squared + */ + public const REC20_RECIPROCAL_SECOND_PER_METRE_SQUARED = 'C99'; + + /** + * carrying capacity in metric ton + */ + public const REC20_CARRYING_CAPACITY_IN_METRIC_TON = 'CCT'; + + /** + * candela + */ + public const REC20_CANDELA = 'CDL'; + + /** + * degree Celsius + */ + public const REC20_DEGREE_CELSIUS = 'CEL'; + + /** + * hundred + */ + public const REC20_HUNDRED = 'CEN'; + + /** + * card + */ + public const REC20_CARD = 'CG'; + + /** + * centigram + */ + public const REC20_CENTIGRAM = 'CGM'; + + /** + * coulomb per kilogram + */ + public const REC20_COULOMB_PER_KILOGRAM = 'CKG'; + + /** + * hundred leave + */ + public const REC20_HUNDRED_LEAVE = 'CLF'; + + /** + * centilitre + */ + public const REC20_CENTILITRE = 'CLT'; + + /** + * square centimetre + */ + public const REC20_SQUARE_CENTIMETRE = 'CMK'; + + /** + * cubic centimetre + */ + public const REC20_CUBIC_CENTIMETRE = 'CMQ'; + + /** + * centimetre + */ + public const REC20_CENTIMETRE = 'CMT'; + + /** + * hundred pack + */ + public const REC20_HUNDRED_PACK = 'CNP'; + + /** + * cental (UK) + */ + public const REC20_CENTAL_UK = 'CNT'; + + /** + * coulomb + */ + public const REC20_COULOMB = 'COU'; + + /** + * content gram + */ + public const REC20_CONTENT_GRAM = 'CTG'; + + /** + * metric carat + */ + public const REC20_METRIC_CARAT = 'CTM'; + + /** + * content ton (metric) + */ + public const REC20_CONTENT_TON_METRIC = 'CTN'; + + /** + * curie + */ + public const REC20_CURIE = 'CUR'; + + /** + * hundred pound (cwt) / hundred weight (US) + */ + public const REC20_HUNDRED_POUND_CWT___HUNDRED_WEIGHT_US = 'CWA'; + + /** + * hundred weight (UK) + */ + public const REC20_HUNDRED_WEIGHT_UK = 'CWI'; + + /** + * kilowatt hour per hour + */ + public const REC20_KILOWATT_HOUR_PER_HOUR = 'D03'; + + /** + * lot [unit of weight] + */ + public const REC20_LOT__UNIT_OF_WEIGHT = 'D04'; + + /** + * reciprocal second per steradian + */ + public const REC20_RECIPROCAL_SECOND_PER_STERADIAN = 'D1'; + + /** + * siemens per metre + */ + public const REC20_SIEMENS_PER_METRE = 'D10'; + + /** + * mebibit + */ + public const REC20_MEBIBIT = 'D11'; + + /** + * siemens square metre per mole + */ + public const REC20_SIEMENS_SQUARE_METRE_PER_MOLE = 'D12'; + + /** + * sievert + */ + public const REC20_SIEVERT = 'D13'; + + /** + * sone + */ + public const REC20_SONE = 'D15'; + + /** + * square centimetre per erg + */ + public const REC20_SQUARE_CENTIMETRE_PER_ERG = 'D16'; + + /** + * square centimetre per steradian erg + */ + public const REC20_SQUARE_CENTIMETRE_PER_STERADIAN_ERG = 'D17'; + + /** + * metre kelvin + */ + public const REC20_METRE_KELVIN = 'D18'; + + /** + * square metre kelvin per watt + */ + public const REC20_SQUARE_METRE_KELVIN_PER_WATT = 'D19'; + + /** + * reciprocal second per steradian metre squared + */ + public const REC20_RECIPROCAL_SECOND_PER_STERADIAN_METRE_SQUARED = 'D2'; + + /** + * square metre per joule + */ + public const REC20_SQUARE_METRE_PER_JOULE = 'D20'; + + /** + * square metre per kilogram + */ + public const REC20_SQUARE_METRE_PER_KILOGRAM = 'D21'; + + /** + * square metre per mole + */ + public const REC20_SQUARE_METRE_PER_MOLE = 'D22'; + + /** + * pen gram (protein) + */ + public const REC20_PEN_GRAM_PROTEIN = 'D23'; + + /** + * square metre per steradian + */ + public const REC20_SQUARE_METRE_PER_STERADIAN = 'D24'; + + /** + * square metre per steradian joule + */ + public const REC20_SQUARE_METRE_PER_STERADIAN_JOULE = 'D25'; + + /** + * square metre per volt second + */ + public const REC20_SQUARE_METRE_PER_VOLT_SECOND = 'D26'; + + /** + * steradian + */ + public const REC20_STERADIAN = 'D27'; + + /** + * terahertz + */ + public const REC20_TERAHERTZ = 'D29'; + + /** + * terajoule + */ + public const REC20_TERAJOULE = 'D30'; + + /** + * terawatt + */ + public const REC20_TERAWATT = 'D31'; + + /** + * terawatt hour + */ + public const REC20_TERAWATT_HOUR = 'D32'; + + /** + * tesla + */ + public const REC20_TESLA = 'D33'; + + /** + * tex + */ + public const REC20_TEX = 'D34'; + + /** + * megabit + */ + public const REC20_MEGABIT = 'D36'; + + /** + * tonne per cubic metre + */ + public const REC20_TONNE_PER_CUBIC_METRE = 'D41'; + + /** + * tropical year + */ + public const REC20_TROPICAL_YEAR = 'D42'; + + /** + * unified atomic mass unit + */ + public const REC20_UNIFIED_ATOMIC_MASS_UNIT = 'D43'; + + /** + * var + */ + public const REC20_VAR = 'D44'; + + /** + * volt squared per kelvin squared + */ + public const REC20_VOLT_SQUARED_PER_KELVIN_SQUARED = 'D45'; + + /** + * volt - ampere + */ + public const REC20_VOLT__AMPERE = 'D46'; + + /** + * volt per centimetre + */ + public const REC20_VOLT_PER_CENTIMETRE = 'D47'; + + /** + * volt per kelvin + */ + public const REC20_VOLT_PER_KELVIN = 'D48'; + + /** + * millivolt per kelvin + */ + public const REC20_MILLIVOLT_PER_KELVIN = 'D49'; + + /** + * kilogram per square centimetre + */ + public const REC20_KILOGRAM_PER_SQUARE_CENTIMETRE = 'D5'; + + /** + * volt per metre + */ + public const REC20_VOLT_PER_METRE = 'D50'; + + /** + * volt per millimetre + */ + public const REC20_VOLT_PER_MILLIMETRE = 'D51'; + + /** + * watt per kelvin + */ + public const REC20_WATT_PER_KELVIN = 'D52'; + + /** + * watt per metre kelvin + */ + public const REC20_WATT_PER_METRE_KELVIN = 'D53'; + + /** + * watt per square metre + */ + public const REC20_WATT_PER_SQUARE_METRE = 'D54'; + + /** + * watt per square metre kelvin + */ + public const REC20_WATT_PER_SQUARE_METRE_KELVIN = 'D55'; + + /** + * watt per square metre kelvin to the fourth power + */ + public const REC20_WATT_PER_SQUARE_METRE_KELVIN_TO_THE_FOURTH_POWER = 'D56'; + + /** + * watt per steradian + */ + public const REC20_WATT_PER_STERADIAN = 'D57'; + + /** + * watt per steradian square metre + */ + public const REC20_WATT_PER_STERADIAN_SQUARE_METRE = 'D58'; + + /** + * weber per metre + */ + public const REC20_WEBER_PER_METRE = 'D59'; + + /** + * roentgen per second + */ + public const REC20_ROENTGEN_PER_SECOND = 'D6'; + + /** + * weber per millimetre + */ + public const REC20_WEBER_PER_MILLIMETRE = 'D60'; + + /** + * minute [unit of angle] + */ + public const REC20_MINUTE_UNIT_OF_ANGLE = 'D61'; + + /** + * second [unit of angle] + */ + public const REC20_SECOND_UNIT_OF_ANGLE = 'D62'; + + /** + * book + */ + public const REC20_BOOK = 'D63'; + + /** + * round + */ + public const REC20_ROUND = 'D65'; + + /** + * number of words + */ + public const REC20_NUMBER_OF_WORDS = 'D68'; + + /** + * inch to the fourth power + */ + public const REC20_INCH_TO_THE_FOURTH_POWER = 'D69'; + + /** + * joule square metre + */ + public const REC20_JOULE_SQUARE_METRE = 'D73'; + + /** + * kilogram per mole + */ + public const REC20_KILOGRAM_PER_MOLE = 'D74'; + + /** + * megacoulomb + */ + public const REC20_MEGACOULOMB = 'D77'; + + /** + * megajoule per second + */ + public const REC20_MEGAJOULE_PER_SECOND = 'D78'; + + /** + * microwatt + */ + public const REC20_MICROWATT = 'D80'; + + /** + * microtesla + */ + public const REC20_MICROTESLA = 'D81'; + + /** + * microvolt + */ + public const REC20_MICROVOLT = 'D82'; + + /** + * millinewton metre + */ + public const REC20_MILLINEWTON_METRE = 'D83'; + + /** + * microwatt per square metre + */ + public const REC20_MICROWATT_PER_SQUARE_METRE = 'D85'; + + /** + * millicoulomb + */ + public const REC20_MILLICOULOMB = 'D86'; + + /** + * millimole per kilogram + */ + public const REC20_MILLIMOLE_PER_KILOGRAM = 'D87'; + + /** + * millicoulomb per cubic metre + */ + public const REC20_MILLICOULOMB_PER_CUBIC_METRE = 'D88'; + + /** + * millicoulomb per square metre + */ + public const REC20_MILLICOULOMB_PER_SQUARE_METRE = 'D89'; + + /** + * rem + */ + public const REC20_REM = 'D91'; + + /** + * second per cubic metre + */ + public const REC20_SECOND_PER_CUBIC_METRE = 'D93'; + + /** + * second per cubic metre radian + */ + public const REC20_SECOND_PER_CUBIC_METRE_RADIAN = 'D94'; + + /** + * joule per gram + */ + public const REC20_JOULE_PER_GRAM = 'D95'; + + /** + * decare + */ + public const REC20_DECARE = 'DAA'; + + /** + * ten day + */ + public const REC20_TEN_DAY = 'DAD'; + + /** + * day + */ + public const REC20_DAY = 'DAY'; + + /** + * dry pound + */ + public const REC20_DRY_POUND = 'DB'; + + /** + * degree [unit of angle] + */ + public const REC20_DEGREE_UNIT_OF_ANGLE = 'DD'; + + /** + * decade + */ + public const REC20_DECADE = 'DEC'; + + /** + * decigram + */ + public const REC20_DECIGRAM = 'DG'; + + /** + * decagram + */ + public const REC20_DECAGRAM = 'DJ'; + + /** + * decilitre + */ + public const REC20_DECILITRE = 'DLT'; + + /** + * cubic decametre + */ + public const REC20_CUBIC_DECAMETRE = 'DMA'; + + /** + * square decimetre + */ + public const REC20_SQUARE_DECIMETRE = 'DMK'; + + /** + * standard kilolitre + */ + public const REC20_STANDARD_KILOLITRE = 'DMO'; + + /** + * cubic decimetre + */ + public const REC20_CUBIC_DECIMETRE = 'DMQ'; + + /** + * decimetre + */ + public const REC20_DECIMETRE = 'DMT'; + + /** + * decinewton metre + */ + public const REC20_DECINEWTON_METRE = 'DN'; + + /** + * dozen piece + */ + public const REC20_DOZEN_PIECE = 'DPC'; + + /** + * dozen pair + */ + public const REC20_DOZEN_PAIR = 'DPR'; + + /** + * displacement tonnage + */ + public const REC20_DISPLACEMENT_TONNAGE = 'DPT'; + + /** + * dram (US) + */ + public const REC20_DRAM_US = 'DRA'; + + /** + * dram (UK) + */ + public const REC20_DRAM_UK = 'DRI'; + + /** + * dozen roll + */ + public const REC20_DOZEN_ROLL = 'DRL'; + + /** + * dry ton + */ + public const REC20_DRY_TON = 'DT'; + + /** + * decitonne + */ + public const REC20_DECITONNE = 'DTN'; + + /** + * pennyweight + */ + public const REC20_PENNYWEIGHT = 'DWT'; + + /** + * dozen + */ + public const REC20_DOZEN = 'DZN'; + + /** + * dozen pack + */ + public const REC20_DOZEN_PACK = 'DZP'; + + /** + * newton per square centimetre + */ + public const REC20_NEWTON_PER_SQUARE_CENTIMETRE = 'E01'; + + /** + * megawatt hour per hour + */ + public const REC20_MEGAWATT_HOUR_PER_HOUR = 'E07'; + + /** + * megawatt per hertz + */ + public const REC20_MEGAWATT_PER_HERTZ = 'E08'; + + /** + * milliampere hour + */ + public const REC20_MILLIAMPERE_HOUR = 'E09'; + + /** + * degree day + */ + public const REC20_DEGREE_DAY = 'E10'; + + /** + * mille + */ + public const REC20_MILLE = 'E12'; + + /** + * kilocalorie (international table) + */ + public const REC20_KILOCALORIE_INTERNATIONAL_TABLE = 'E14'; + + /** + * kilocalorie (thermochemical) per hour + */ + public const REC20_KILOCALORIE_THERMOCHEMICAL_PER_HOUR = 'E15'; + + /** + * million Btu(IT) per hour + */ + public const REC20_MILLION_BTUIT_PER_HOUR = 'E16'; + + /** + * cubic foot per second + */ + public const REC20_CUBIC_FOOT_PER_SECOND = 'E17'; + + /** + * tonne per hour + */ + public const REC20_TONNE_PER_HOUR = 'E18'; + + /** + * ping + */ + public const REC20_PING = 'E19'; + + /** + * megabit per second + */ + public const REC20_MEGABIT_PER_SECOND = 'E20'; + + /** + * shares + */ + public const REC20_SHARES = 'E21'; + + /** + * TEU + */ + public const REC20_TEU = 'E22'; + + /** + * tyre + */ + public const REC20_TYRE = 'E23'; + + /** + * active unit + */ + public const REC20_ACTIVE_UNIT = 'E25'; + + /** + * dose + */ + public const REC20_DOSE = 'E27'; + + /** + * air dry ton + */ + public const REC20_AIR_DRY_TON = 'E28'; + + /** + * strand + */ + public const REC20_STRAND = 'E30'; + + /** + * square metre per litre + */ + public const REC20_SQUARE_METRE_PER_LITRE = 'E31'; + + /** + * litre per hour + */ + public const REC20_LITRE_PER_HOUR = 'E32'; + + /** + * foot per thousand + */ + public const REC20_FOOT_PER_THOUSAND = 'E33'; + + /** + * gigabyte + */ + public const REC20_GIGABYTE = 'E34'; + + /** + * terabyte + */ + public const REC20_TERABYTE = 'E35'; + + /** + * petabyte + */ + public const REC20_PETABYTE = 'E36'; + + /** + * pixel + */ + public const REC20_PIXEL = 'E37'; + + /** + * megapixel + */ + public const REC20_MEGAPIXEL = 'E38'; + + /** + * dots per inch + */ + public const REC20_DOTS_PER_INCH = 'E39'; + + /** + * gross kilogram + */ + public const REC20_GROSS_KILOGRAM = 'E4'; + + /** + * part per hundred thousand + */ + public const REC20_PART_PER_HUNDRED_THOUSAND = 'E40'; + + /** + * kilogram-force per square millimetre + */ + public const REC20_KILOGRAMFORCE_PER_SQUARE_MILLIMETRE = 'E41'; + + /** + * kilogram-force per square centimetre + */ + public const REC20_KILOGRAMFORCE_PER_SQUARE_CENTIMETRE = 'E42'; + + /** + * joule per square centimetre + */ + public const REC20_JOULE_PER_SQUARE_CENTIMETRE = 'E43'; + + /** + * kilogram-force metre per square centimetre + */ + public const REC20_KILOGRAMFORCE_METRE_PER_SQUARE_CENTIMETRE = 'E44'; + + /** + * milliohm + */ + public const REC20_MILLIOHM = 'E45'; + + /** + * kilowatt hour per cubic metre + */ + public const REC20_KILOWATT_HOUR_PER_CUBIC_METRE = 'E46'; + + /** + * kilowatt hour per kelvin + */ + public const REC20_KILOWATT_HOUR_PER_KELVIN = 'E47'; + + /** + * service unit + */ + public const REC20_SERVICE_UNIT = 'E48'; + + /** + * working day + */ + public const REC20_WORKING_DAY = 'E49'; + + /** + * accounting unit + */ + public const REC20_ACCOUNTING_UNIT = 'E50'; + + /** + * job + */ + public const REC20_JOB = 'E51'; + + /** + * run foot + */ + public const REC20_RUN_FOOT = 'E52'; + + /** + * test + */ + public const REC20_TEST = 'E53'; + + /** + * trip + */ + public const REC20_TRIP = 'E54'; + + /** + * use + */ + public const REC20_USE = 'E55'; + + /** + * well + */ + public const REC20_WELL = 'E56'; + + /** + * zone + */ + public const REC20_ZONE = 'E57'; + + /** + * exabit per second + */ + public const REC20_EXABIT_PER_SECOND = 'E58'; + + /** + * exbibyte + */ + public const REC20_EXBIBYTE = 'E59'; + + /** + * pebibyte + */ + public const REC20_PEBIBYTE = 'E60'; + + /** + * tebibyte + */ + public const REC20_TEBIBYTE = 'E61'; + + /** + * gibibyte + */ + public const REC20_GIBIBYTE = 'E62'; + + /** + * mebibyte + */ + public const REC20_MEBIBYTE = 'E63'; + + /** + * kibibyte + */ + public const REC20_KIBIBYTE = 'E64'; + + /** + * exbibit per metre + */ + public const REC20_EXBIBIT_PER_METRE = 'E65'; + + /** + * exbibit per square metre + */ + public const REC20_EXBIBIT_PER_SQUARE_METRE = 'E66'; + + /** + * exbibit per cubic metre + */ + public const REC20_EXBIBIT_PER_CUBIC_METRE = 'E67'; + + /** + * gigabyte per second + */ + public const REC20_GIGABYTE_PER_SECOND = 'E68'; + + /** + * gibibit per metre + */ + public const REC20_GIBIBIT_PER_METRE = 'E69'; + + /** + * gibibit per square metre + */ + public const REC20_GIBIBIT_PER_SQUARE_METRE = 'E70'; + + /** + * gibibit per cubic metre + */ + public const REC20_GIBIBIT_PER_CUBIC_METRE = 'E71'; + + /** + * kibibit per metre + */ + public const REC20_KIBIBIT_PER_METRE = 'E72'; + + /** + * kibibit per square metre + */ + public const REC20_KIBIBIT_PER_SQUARE_METRE = 'E73'; + + /** + * kibibit per cubic metre + */ + public const REC20_KIBIBIT_PER_CUBIC_METRE = 'E74'; + + /** + * mebibit per metre + */ + public const REC20_MEBIBIT_PER_METRE = 'E75'; + + /** + * mebibit per square metre + */ + public const REC20_MEBIBIT_PER_SQUARE_METRE = 'E76'; + + /** + * mebibit per cubic metre + */ + public const REC20_MEBIBIT_PER_CUBIC_METRE = 'E77'; + + /** + * petabit + */ + public const REC20_PETABIT = 'E78'; + + /** + * petabit per second + */ + public const REC20_PETABIT_PER_SECOND = 'E79'; + + /** + * pebibit per metre + */ + public const REC20_PEBIBIT_PER_METRE = 'E80'; + + /** + * pebibit per square metre + */ + public const REC20_PEBIBIT_PER_SQUARE_METRE = 'E81'; + + /** + * pebibit per cubic metre + */ + public const REC20_PEBIBIT_PER_CUBIC_METRE = 'E82'; + + /** + * terabit + */ + public const REC20_TERABIT = 'E83'; + + /** + * terabit per second + */ + public const REC20_TERABIT_PER_SECOND = 'E84'; + + /** + * tebibit per metre + */ + public const REC20_TEBIBIT_PER_METRE = 'E85'; + + /** + * tebibit per cubic metre + */ + public const REC20_TEBIBIT_PER_CUBIC_METRE = 'E86'; + + /** + * tebibit per square metre + */ + public const REC20_TEBIBIT_PER_SQUARE_METRE = 'E87'; + + /** + * bit per metre + */ + public const REC20_BIT_PER_METRE = 'E88'; + + /** + * bit per square metre + */ + public const REC20_BIT_PER_SQUARE_METRE = 'E89'; + + /** + * reciprocal centimetre + */ + public const REC20_RECIPROCAL_CENTIMETRE = 'E90'; + + /** + * reciprocal day + */ + public const REC20_RECIPROCAL_DAY = 'E91'; + + /** + * cubic decimetre per hour + */ + public const REC20_CUBIC_DECIMETRE_PER_HOUR = 'E92'; + + /** + * kilogram per hour + */ + public const REC20_KILOGRAM_PER_HOUR = 'E93'; + + /** + * kilomole per second + */ + public const REC20_KILOMOLE_PER_SECOND = 'E94'; + + /** + * mole per second + */ + public const REC20_MOLE_PER_SECOND = 'E95'; + + /** + * degree per second + */ + public const REC20_DEGREE_PER_SECOND = 'E96'; + + /** + * millimetre per degree Celcius metre + */ + public const REC20_MILLIMETRE_PER_DEGREE_CELCIUS_METRE = 'E97'; + + /** + * degree Celsius per kelvin + */ + public const REC20_DEGREE_CELSIUS_PER_KELVIN = 'E98'; + + /** + * hectopascal per bar + */ + public const REC20_HECTOPASCAL_PER_BAR = 'E99'; + + /** + * each + */ + public const REC20_EACH = 'EA'; + + /** + * electronic mail box + */ + public const REC20_ELECTRONIC_MAIL_BOX = 'EB'; + + /** + * equivalent gallon + */ + public const REC20_EQUIVALENT_GALLON = 'EQ'; + + /** + * bit per cubic metre + */ + public const REC20_BIT_PER_CUBIC_METRE = 'F01'; + + /** + * kelvin per kelvin + */ + public const REC20_KELVIN_PER_KELVIN = 'F02'; + + /** + * kilopascal per bar + */ + public const REC20_KILOPASCAL_PER_BAR = 'F03'; + + /** + * millibar per bar + */ + public const REC20_MILLIBAR_PER_BAR = 'F04'; + + /** + * megapascal per bar + */ + public const REC20_MEGAPASCAL_PER_BAR = 'F05'; + + /** + * poise per bar + */ + public const REC20_POISE_PER_BAR = 'F06'; + + /** + * pascal per bar + */ + public const REC20_PASCAL_PER_BAR = 'F07'; + + /** + * milliampere per inch + */ + public const REC20_MILLIAMPERE_PER_INCH = 'F08'; + + /** + * kelvin per hour + */ + public const REC20_KELVIN_PER_HOUR = 'F10'; + + /** + * kelvin per minute + */ + public const REC20_KELVIN_PER_MINUTE = 'F11'; + + /** + * kelvin per second + */ + public const REC20_KELVIN_PER_SECOND = 'F12'; + + /** + * slug + */ + public const REC20_SLUG = 'F13'; + + /** + * gram per kelvin + */ + public const REC20_GRAM_PER_KELVIN = 'F14'; + + /** + * kilogram per kelvin + */ + public const REC20_KILOGRAM_PER_KELVIN = 'F15'; + + /** + * milligram per kelvin + */ + public const REC20_MILLIGRAM_PER_KELVIN = 'F16'; + + /** + * pound-force per foot + */ + public const REC20_POUNDFORCE_PER_FOOT = 'F17'; + + /** + * kilogram square centimetre + */ + public const REC20_KILOGRAM_SQUARE_CENTIMETRE = 'F18'; + + /** + * kilogram square millimetre + */ + public const REC20_KILOGRAM_SQUARE_MILLIMETRE = 'F19'; + + /** + * pound inch squared + */ + public const REC20_POUND_INCH_SQUARED = 'F20'; + + /** + * pound-force inch + */ + public const REC20_POUNDFORCE_INCH = 'F21'; + + /** + * pound-force foot per ampere + */ + public const REC20_POUNDFORCE_FOOT_PER_AMPERE = 'F22'; + + /** + * gram per cubic decimetre + */ + public const REC20_GRAM_PER_CUBIC_DECIMETRE = 'F23'; + + /** + * kilogram per kilomol + */ + public const REC20_KILOGRAM_PER_KILOMOL = 'F24'; + + /** + * gram per hertz + */ + public const REC20_GRAM_PER_HERTZ = 'F25'; + + /** + * gram per day + */ + public const REC20_GRAM_PER_DAY = 'F26'; + + /** + * gram per hour + */ + public const REC20_GRAM_PER_HOUR = 'F27'; + + /** + * gram per minute + */ + public const REC20_GRAM_PER_MINUTE = 'F28'; + + /** + * gram per second + */ + public const REC20_GRAM_PER_SECOND = 'F29'; + + /** + * kilogram per day + */ + public const REC20_KILOGRAM_PER_DAY = 'F30'; + + /** + * kilogram per minute + */ + public const REC20_KILOGRAM_PER_MINUTE = 'F31'; + + /** + * milligram per day + */ + public const REC20_MILLIGRAM_PER_DAY = 'F32'; + + /** + * milligram per minute + */ + public const REC20_MILLIGRAM_PER_MINUTE = 'F33'; + + /** + * milligram per second + */ + public const REC20_MILLIGRAM_PER_SECOND = 'F34'; + + /** + * gram per day kelvin + */ + public const REC20_GRAM_PER_DAY_KELVIN = 'F35'; + + /** + * gram per hour kelvin + */ + public const REC20_GRAM_PER_HOUR_KELVIN = 'F36'; + + /** + * gram per minute kelvin + */ + public const REC20_GRAM_PER_MINUTE_KELVIN = 'F37'; + + /** + * gram per second kelvin + */ + public const REC20_GRAM_PER_SECOND_KELVIN = 'F38'; + + /** + * kilogram per day kelvin + */ + public const REC20_KILOGRAM_PER_DAY_KELVIN = 'F39'; + + /** + * kilogram per hour kelvin + */ + public const REC20_KILOGRAM_PER_HOUR_KELVIN = 'F40'; + + /** + * kilogram per minute kelvin + */ + public const REC20_KILOGRAM_PER_MINUTE_KELVIN = 'F41'; + + /** + * kilogram per second kelvin + */ + public const REC20_KILOGRAM_PER_SECOND_KELVIN = 'F42'; + + /** + * milligram per day kelvin + */ + public const REC20_MILLIGRAM_PER_DAY_KELVIN = 'F43'; + + /** + * milligram per hour kelvin + */ + public const REC20_MILLIGRAM_PER_HOUR_KELVIN = 'F44'; + + /** + * milligram per minute kelvin + */ + public const REC20_MILLIGRAM_PER_MINUTE_KELVIN = 'F45'; + + /** + * milligram per second kelvin + */ + public const REC20_MILLIGRAM_PER_SECOND_KELVIN = 'F46'; + + /** + * newton per millimetre + */ + public const REC20_NEWTON_PER_MILLIMETRE = 'F47'; + + /** + * pound-force per inch + */ + public const REC20_POUNDFORCE_PER_INCH = 'F48'; + + /** + * rod [unit of distance] + */ + public const REC20_ROD_UNIT_OF_DISTANCE = 'F49'; + + /** + * micrometre per kelvin + */ + public const REC20_MICROMETRE_PER_KELVIN = 'F50'; + + /** + * centimetre per kelvin + */ + public const REC20_CENTIMETRE_PER_KELVIN = 'F51'; + + /** + * metre per kelvin + */ + public const REC20_METRE_PER_KELVIN = 'F52'; + + /** + * millimetre per kelvin + */ + public const REC20_MILLIMETRE_PER_KELVIN = 'F53'; + + /** + * milliohm per metre + */ + public const REC20_MILLIOHM_PER_METRE = 'F54'; + + /** + * ohm per mile (statute mile) + */ + public const REC20_OHM_PER_MILE_STATUTE_MILE = 'F55'; + + /** + * ohm per kilometre + */ + public const REC20_OHM_PER_KILOMETRE = 'F56'; + + /** + * milliampere per pound-force per square inch + */ + public const REC20_MILLIAMPERE_PER_POUNDFORCE_PER_SQUARE_INCH = 'F57'; + + /** + * reciprocal bar + */ + public const REC20_RECIPROCAL_BAR = 'F58'; + + /** + * milliampere per bar + */ + public const REC20_MILLIAMPERE_PER_BAR = 'F59'; + + /** + * degree Celsius per bar + */ + public const REC20_DEGREE_CELSIUS_PER_BAR = 'F60'; + + /** + * kelvin per bar + */ + public const REC20_KELVIN_PER_BAR = 'F61'; + + /** + * gram per day bar + */ + public const REC20_GRAM_PER_DAY_BAR = 'F62'; + + /** + * gram per hour bar + */ + public const REC20_GRAM_PER_HOUR_BAR = 'F63'; + + /** + * gram per minute bar + */ + public const REC20_GRAM_PER_MINUTE_BAR = 'F64'; + + /** + * gram per second bar + */ + public const REC20_GRAM_PER_SECOND_BAR = 'F65'; + + /** + * kilogram per day bar + */ + public const REC20_KILOGRAM_PER_DAY_BAR = 'F66'; + + /** + * kilogram per hour bar + */ + public const REC20_KILOGRAM_PER_HOUR_BAR = 'F67'; + + /** + * kilogram per minute bar + */ + public const REC20_KILOGRAM_PER_MINUTE_BAR = 'F68'; + + /** + * kilogram per second bar + */ + public const REC20_KILOGRAM_PER_SECOND_BAR = 'F69'; + + /** + * milligram per day bar + */ + public const REC20_MILLIGRAM_PER_DAY_BAR = 'F70'; + + /** + * milligram per hour bar + */ + public const REC20_MILLIGRAM_PER_HOUR_BAR = 'F71'; + + /** + * milligram per minute bar + */ + public const REC20_MILLIGRAM_PER_MINUTE_BAR = 'F72'; + + /** + * milligram per second bar + */ + public const REC20_MILLIGRAM_PER_SECOND_BAR = 'F73'; + + /** + * gram per bar + */ + public const REC20_GRAM_PER_BAR = 'F74'; + + /** + * milligram per bar + */ + public const REC20_MILLIGRAM_PER_BAR = 'F75'; + + /** + * milliampere per millimetre + */ + public const REC20_MILLIAMPERE_PER_MILLIMETRE = 'F76'; + + /** + * pascal second per kelvin + */ + public const REC20_PASCAL_SECOND_PER_KELVIN = 'F77'; + + /** + * inch of water + */ + public const REC20_INCH_OF_WATER = 'F78'; + + /** + * inch of mercury + */ + public const REC20_INCH_OF_MERCURY = 'F79'; + + /** + * water horse power + */ + public const REC20_WATER_HORSE_POWER = 'F80'; + + /** + * bar per kelvin + */ + public const REC20_BAR_PER_KELVIN = 'F81'; + + /** + * hectopascal per kelvin + */ + public const REC20_HECTOPASCAL_PER_KELVIN = 'F82'; + + /** + * kilopascal per kelvin + */ + public const REC20_KILOPASCAL_PER_KELVIN = 'F83'; + + /** + * millibar per kelvin + */ + public const REC20_MILLIBAR_PER_KELVIN = 'F84'; + + /** + * megapascal per kelvin + */ + public const REC20_MEGAPASCAL_PER_KELVIN = 'F85'; + + /** + * poise per kelvin + */ + public const REC20_POISE_PER_KELVIN = 'F86'; + + /** + * volt per litre minute + */ + public const REC20_VOLT_PER_LITRE_MINUTE = 'F87'; + + /** + * newton centimetre + */ + public const REC20_NEWTON_CENTIMETRE = 'F88'; + + /** + * newton metre per degree + */ + public const REC20_NEWTON_METRE_PER_DEGREE = 'F89'; + + /** + * newton metre per ampere + */ + public const REC20_NEWTON_METRE_PER_AMPERE = 'F90'; + + /** + * bar litre per second + */ + public const REC20_BAR_LITRE_PER_SECOND = 'F91'; + + /** + * bar cubic metre per second + */ + public const REC20_BAR_CUBIC_METRE_PER_SECOND = 'F92'; + + /** + * hectopascal litre per second + */ + public const REC20_HECTOPASCAL_LITRE_PER_SECOND = 'F93'; + + /** + * hectopascal cubic metre per second + */ + public const REC20_HECTOPASCAL_CUBIC_METRE_PER_SECOND = 'F94'; + + /** + * millibar litre per second + */ + public const REC20_MILLIBAR_LITRE_PER_SECOND = 'F95'; + + /** + * millibar cubic metre per second + */ + public const REC20_MILLIBAR_CUBIC_METRE_PER_SECOND = 'F96'; + + /** + * megapascal litre per second + */ + public const REC20_MEGAPASCAL_LITRE_PER_SECOND = 'F97'; + + /** + * megapascal cubic metre per second + */ + public const REC20_MEGAPASCAL_CUBIC_METRE_PER_SECOND = 'F98'; + + /** + * pascal litre per second + */ + public const REC20_PASCAL_LITRE_PER_SECOND = 'F99'; + + /** + * degree Fahrenheit + */ + public const REC20_DEGREE_FAHRENHEIT = 'FAH'; + + /** + * farad + */ + public const REC20_FARAD = 'FAR'; + + /** + * fibre metre + */ + public const REC20_FIBRE_METRE = 'FBM'; + + /** + * thousand cubic foot + */ + public const REC20_THOUSAND_CUBIC_FOOT = 'FC'; + + /** + * hundred cubic metre + */ + public const REC20_HUNDRED_CUBIC_METRE = 'FF'; + + /** + * micromole + */ + public const REC20_MICROMOLE = 'FH'; + + /** + * failures in time + */ + public const REC20_FAILURES_IN_TIME = 'FIT'; + + /** + * flake ton + */ + public const REC20_FLAKE_TON = 'FL'; + + /** + * foot + */ + public const REC20_FOOT = 'FOT'; + + /** + * pound per square foot + */ + public const REC20_POUND_PER_SQUARE_FOOT = 'FP'; + + /** + * foot per minute + */ + public const REC20_FOOT_PER_MINUTE = 'FR'; + + /** + * foot per second + */ + public const REC20_FOOT_PER_SECOND = 'FS'; + + /** + * square foot + */ + public const REC20_SQUARE_FOOT = 'FTK'; + + /** + * cubic foot + */ + public const REC20_CUBIC_FOOT = 'FTQ'; + + /** + * pascal cubic metre per second + */ + public const REC20_PASCAL_CUBIC_METRE_PER_SECOND = 'G01'; + + /** + * centimetre per bar + */ + public const REC20_CENTIMETRE_PER_BAR = 'G04'; + + /** + * metre per bar + */ + public const REC20_METRE_PER_BAR = 'G05'; + + /** + * millimetre per bar + */ + public const REC20_MILLIMETRE_PER_BAR = 'G06'; + + /** + * square inch per second + */ + public const REC20_SQUARE_INCH_PER_SECOND = 'G08'; + + /** + * square metre per second kelvin + */ + public const REC20_SQUARE_METRE_PER_SECOND_KELVIN = 'G09'; + + /** + * stokes per kelvin + */ + public const REC20_STOKES_PER_KELVIN = 'G10'; + + /** + * gram per cubic centimetre bar + */ + public const REC20_GRAM_PER_CUBIC_CENTIMETRE_BAR = 'G11'; + + /** + * gram per cubic decimetre bar + */ + public const REC20_GRAM_PER_CUBIC_DECIMETRE_BAR = 'G12'; + + /** + * gram per litre bar + */ + public const REC20_GRAM_PER_LITRE_BAR = 'G13'; + + /** + * gram per cubic metre bar + */ + public const REC20_GRAM_PER_CUBIC_METRE_BAR = 'G14'; + + /** + * gram per millilitre bar + */ + public const REC20_GRAM_PER_MILLILITRE_BAR = 'G15'; + + /** + * kilogram per cubic centimetre bar + */ + public const REC20_KILOGRAM_PER_CUBIC_CENTIMETRE_BAR = 'G16'; + + /** + * kilogram per litre bar + */ + public const REC20_KILOGRAM_PER_LITRE_BAR = 'G17'; + + /** + * kilogram per cubic metre bar + */ + public const REC20_KILOGRAM_PER_CUBIC_METRE_BAR = 'G18'; + + /** + * newton metre per kilogram + */ + public const REC20_NEWTON_METRE_PER_KILOGRAM = 'G19'; + + /** + * US gallon per minute + */ + public const REC20_US_GALLON_PER_MINUTE = 'G2'; + + /** + * pound-force foot per pound + */ + public const REC20_POUNDFORCE_FOOT_PER_POUND = 'G20'; + + /** + * cup [unit of volume] + */ + public const REC20_CUP_UNIT_OF_VOLUME = 'G21'; + + /** + * peck + */ + public const REC20_PECK = 'G23'; + + /** + * tablespoon (US) + */ + public const REC20_TABLESPOON_US = 'G24'; + + /** + * teaspoon (US) + */ + public const REC20_TEASPOON_US = 'G25'; + + /** + * stere + */ + public const REC20_STERE = 'G26'; + + /** + * cubic centimetre per kelvin + */ + public const REC20_CUBIC_CENTIMETRE_PER_KELVIN = 'G27'; + + /** + * litre per kelvin + */ + public const REC20_LITRE_PER_KELVIN = 'G28'; + + /** + * cubic metre per kelvin + */ + public const REC20_CUBIC_METRE_PER_KELVIN = 'G29'; + + /** + * Imperial gallon per minute + */ + public const REC20_IMPERIAL_GALLON_PER_MINUTE = 'G3'; + + /** + * millilitre per kelvin + */ + public const REC20_MILLILITRE_PER_KELVIN = 'G30'; + + /** + * kilogram per cubic centimetre + */ + public const REC20_KILOGRAM_PER_CUBIC_CENTIMETRE = 'G31'; + + /** + * ounce (avoirdupois) per cubic yard + */ + public const REC20_OUNCE_AVOIRDUPOIS_PER_CUBIC_YARD = 'G32'; + + /** + * gram per cubic centimetre kelvin + */ + public const REC20_GRAM_PER_CUBIC_CENTIMETRE_KELVIN = 'G33'; + + /** + * gram per cubic decimetre kelvin + */ + public const REC20_GRAM_PER_CUBIC_DECIMETRE_KELVIN = 'G34'; + + /** + * gram per litre kelvin + */ + public const REC20_GRAM_PER_LITRE_KELVIN = 'G35'; + + /** + * gram per cubic metre kelvin + */ + public const REC20_GRAM_PER_CUBIC_METRE_KELVIN = 'G36'; + + /** + * gram per millilitre kelvin + */ + public const REC20_GRAM_PER_MILLILITRE_KELVIN = 'G37'; + + /** + * kilogram per cubic centimetre kelvin + */ + public const REC20_KILOGRAM_PER_CUBIC_CENTIMETRE_KELVIN = 'G38'; + + /** + * kilogram per litre kelvin + */ + public const REC20_KILOGRAM_PER_LITRE_KELVIN = 'G39'; + + /** + * kilogram per cubic metre kelvin + */ + public const REC20_KILOGRAM_PER_CUBIC_METRE_KELVIN = 'G40'; + + /** + * square metre per second bar + */ + public const REC20_SQUARE_METRE_PER_SECOND_BAR = 'G41'; + + /** + * microsiemens per centimetre + */ + public const REC20_MICROSIEMENS_PER_CENTIMETRE = 'G42'; + + /** + * microsiemens per metre + */ + public const REC20_MICROSIEMENS_PER_METRE = 'G43'; + + /** + * nanosiemens per centimetre + */ + public const REC20_NANOSIEMENS_PER_CENTIMETRE = 'G44'; + + /** + * nanosiemens per metre + */ + public const REC20_NANOSIEMENS_PER_METRE = 'G45'; + + /** + * stokes per bar + */ + public const REC20_STOKES_PER_BAR = 'G46'; + + /** + * cubic centimetre per day + */ + public const REC20_CUBIC_CENTIMETRE_PER_DAY = 'G47'; + + /** + * cubic centimetre per hour + */ + public const REC20_CUBIC_CENTIMETRE_PER_HOUR = 'G48'; + + /** + * cubic centimetre per minute + */ + public const REC20_CUBIC_CENTIMETRE_PER_MINUTE = 'G49'; + + /** + * gallon (US) per hour + */ + public const REC20_GALLON_US_PER_HOUR = 'G50'; + + /** + * litre per second + */ + public const REC20_LITRE_PER_SECOND = 'G51'; + + /** + * cubic metre per day + */ + public const REC20_CUBIC_METRE_PER_DAY = 'G52'; + + /** + * cubic metre per minute + */ + public const REC20_CUBIC_METRE_PER_MINUTE = 'G53'; + + /** + * millilitre per day + */ + public const REC20_MILLILITRE_PER_DAY = 'G54'; + + /** + * millilitre per hour + */ + public const REC20_MILLILITRE_PER_HOUR = 'G55'; + + /** + * cubic inch per hour + */ + public const REC20_CUBIC_INCH_PER_HOUR = 'G56'; + + /** + * cubic inch per minute + */ + public const REC20_CUBIC_INCH_PER_MINUTE = 'G57'; + + /** + * cubic inch per second + */ + public const REC20_CUBIC_INCH_PER_SECOND = 'G58'; + + /** + * milliampere per litre minute + */ + public const REC20_MILLIAMPERE_PER_LITRE_MINUTE = 'G59'; + + /** + * volt per bar + */ + public const REC20_VOLT_PER_BAR = 'G60'; + + /** + * cubic centimetre per day kelvin + */ + public const REC20_CUBIC_CENTIMETRE_PER_DAY_KELVIN = 'G61'; + + /** + * cubic centimetre per hour kelvin + */ + public const REC20_CUBIC_CENTIMETRE_PER_HOUR_KELVIN = 'G62'; + + /** + * cubic centimetre per minute kelvin + */ + public const REC20_CUBIC_CENTIMETRE_PER_MINUTE_KELVIN = 'G63'; + + /** + * cubic centimetre per second kelvin + */ + public const REC20_CUBIC_CENTIMETRE_PER_SECOND_KELVIN = 'G64'; + + /** + * litre per day kelvin + */ + public const REC20_LITRE_PER_DAY_KELVIN = 'G65'; + + /** + * litre per hour kelvin + */ + public const REC20_LITRE_PER_HOUR_KELVIN = 'G66'; + + /** + * litre per minute kelvin + */ + public const REC20_LITRE_PER_MINUTE_KELVIN = 'G67'; + + /** + * litre per second kelvin + */ + public const REC20_LITRE_PER_SECOND_KELVIN = 'G68'; + + /** + * cubic metre per day kelvin + */ + public const REC20_CUBIC_METRE_PER_DAY_KELVIN = 'G69'; + + /** + * cubic metre per hour kelvin + */ + public const REC20_CUBIC_METRE_PER_HOUR_KELVIN = 'G70'; + + /** + * cubic metre per minute kelvin + */ + public const REC20_CUBIC_METRE_PER_MINUTE_KELVIN = 'G71'; + + /** + * cubic metre per second kelvin + */ + public const REC20_CUBIC_METRE_PER_SECOND_KELVIN = 'G72'; + + /** + * millilitre per day kelvin + */ + public const REC20_MILLILITRE_PER_DAY_KELVIN = 'G73'; + + /** + * millilitre per hour kelvin + */ + public const REC20_MILLILITRE_PER_HOUR_KELVIN = 'G74'; + + /** + * millilitre per minute kelvin + */ + public const REC20_MILLILITRE_PER_MINUTE_KELVIN = 'G75'; + + /** + * millilitre per second kelvin + */ + public const REC20_MILLILITRE_PER_SECOND_KELVIN = 'G76'; + + /** + * millimetre to the fourth power + */ + public const REC20_MILLIMETRE_TO_THE_FOURTH_POWER = 'G77'; + + /** + * cubic centimetre per day bar + */ + public const REC20_CUBIC_CENTIMETRE_PER_DAY_BAR = 'G78'; + + /** + * cubic centimetre per hour bar + */ + public const REC20_CUBIC_CENTIMETRE_PER_HOUR_BAR = 'G79'; + + /** + * cubic centimetre per minute bar + */ + public const REC20_CUBIC_CENTIMETRE_PER_MINUTE_BAR = 'G80'; + + /** + * cubic centimetre per second bar + */ + public const REC20_CUBIC_CENTIMETRE_PER_SECOND_BAR = 'G81'; + + /** + * litre per day bar + */ + public const REC20_LITRE_PER_DAY_BAR = 'G82'; + + /** + * litre per hour bar + */ + public const REC20_LITRE_PER_HOUR_BAR = 'G83'; + + /** + * litre per minute bar + */ + public const REC20_LITRE_PER_MINUTE_BAR = 'G84'; + + /** + * litre per second bar + */ + public const REC20_LITRE_PER_SECOND_BAR = 'G85'; + + /** + * cubic metre per day bar + */ + public const REC20_CUBIC_METRE_PER_DAY_BAR = 'G86'; + + /** + * cubic metre per hour bar + */ + public const REC20_CUBIC_METRE_PER_HOUR_BAR = 'G87'; + + /** + * cubic metre per minute bar + */ + public const REC20_CUBIC_METRE_PER_MINUTE_BAR = 'G88'; + + /** + * cubic metre per second bar + */ + public const REC20_CUBIC_METRE_PER_SECOND_BAR = 'G89'; + + /** + * millilitre per day bar + */ + public const REC20_MILLILITRE_PER_DAY_BAR = 'G90'; + + /** + * millilitre per hour bar + */ + public const REC20_MILLILITRE_PER_HOUR_BAR = 'G91'; + + /** + * millilitre per minute bar + */ + public const REC20_MILLILITRE_PER_MINUTE_BAR = 'G92'; + + /** + * millilitre per second bar + */ + public const REC20_MILLILITRE_PER_SECOND_BAR = 'G93'; + + /** + * cubic centimetre per bar + */ + public const REC20_CUBIC_CENTIMETRE_PER_BAR = 'G94'; + + /** + * litre per bar + */ + public const REC20_LITRE_PER_BAR = 'G95'; + + /** + * cubic metre per bar + */ + public const REC20_CUBIC_METRE_PER_BAR = 'G96'; + + /** + * millilitre per bar + */ + public const REC20_MILLILITRE_PER_BAR = 'G97'; + + /** + * microhenry per kiloohm + */ + public const REC20_MICROHENRY_PER_KILOOHM = 'G98'; + + /** + * microhenry per ohm + */ + public const REC20_MICROHENRY_PER_OHM = 'G99'; + + /** + * gallon (US) per day + */ + public const REC20_GALLON_US_PER_DAY = 'GB'; + + /** + * gigabecquerel + */ + public const REC20_GIGABECQUEREL = 'GBQ'; + + /** + * gram, dry weight + */ + public const REC20_GRAM_DRY_WEIGHT = 'GDW'; + + /** + * pound per gallon (US) + */ + public const REC20_POUND_PER_GALLON_US = 'GE'; + + /** + * gram per metre (gram per 100 centimetres) + */ + public const REC20_GRAM_PER_METRE_GRAM_PER_100_CENTIMETRES = 'GF'; + + /** + * gram of fissile isotope + */ + public const REC20_GRAM_OF_FISSILE_ISOTOPE = 'GFI'; + + /** + * great gross + */ + public const REC20_GREAT_GROSS = 'GGR'; + + /** + * gill (US) + */ + public const REC20_GILL_US = 'GIA'; + + /** + * gram, including container + */ + public const REC20_GRAM_INCLUDING_CONTAINER = 'GIC'; + + /** + * gill (UK) + */ + public const REC20_GILL_UK = 'GII'; + + /** + * gram, including inner packaging + */ + public const REC20_GRAM_INCLUDING_INNER_PACKAGING = 'GIP'; + + /** + * gram per millilitre + */ + public const REC20_GRAM_PER_MILLILITRE = 'GJ'; + + /** + * gram per litre + */ + public const REC20_GRAM_PER_LITRE = 'GL'; + + /** + * dry gallon (US) + */ + public const REC20_DRY_GALLON_US = 'GLD'; + + /** + * gallon (UK) + */ + public const REC20_GALLON_UK = 'GLI'; + + /** + * gallon (US) + */ + public const REC20_GALLON_US = 'GLL'; + + /** + * gram per square metre + */ + public const REC20_GRAM_PER_SQUARE_METRE = 'GM'; + + /** + * milligram per square metre + */ + public const REC20_MILLIGRAM_PER_SQUARE_METRE = 'GO'; + + /** + * milligram per cubic metre + */ + public const REC20_MILLIGRAM_PER_CUBIC_METRE = 'GP'; + + /** + * microgram per cubic metre + */ + public const REC20_MICROGRAM_PER_CUBIC_METRE = 'GQ'; + + /** + * gram + */ + public const REC20_GRAM = 'GRM'; + + /** + * grain + */ + public const REC20_GRAIN = 'GRN'; + + /** + * gross + */ + public const REC20_GROSS = 'GRO'; + + /** + * gigajoule + */ + public const REC20_GIGAJOULE = 'GV'; + + /** + * gigawatt hour + */ + public const REC20_GIGAWATT_HOUR = 'GWH'; + + /** + * henry per kiloohm + */ + public const REC20_HENRY_PER_KILOOHM = 'H03'; + + /** + * henry per ohm + */ + public const REC20_HENRY_PER_OHM = 'H04'; + + /** + * millihenry per kiloohm + */ + public const REC20_MILLIHENRY_PER_KILOOHM = 'H05'; + + /** + * millihenry per ohm + */ + public const REC20_MILLIHENRY_PER_OHM = 'H06'; + + /** + * pascal second per bar + */ + public const REC20_PASCAL_SECOND_PER_BAR = 'H07'; + + /** + * microbecquerel + */ + public const REC20_MICROBECQUEREL = 'H08'; + + /** + * reciprocal year + */ + public const REC20_RECIPROCAL_YEAR = 'H09'; + + /** + * reciprocal hour + */ + public const REC20_RECIPROCAL_HOUR = 'H10'; + + /** + * reciprocal month + */ + public const REC20_RECIPROCAL_MONTH = 'H11'; + + /** + * degree Celsius per hour + */ + public const REC20_DEGREE_CELSIUS_PER_HOUR = 'H12'; + + /** + * degree Celsius per minute + */ + public const REC20_DEGREE_CELSIUS_PER_MINUTE = 'H13'; + + /** + * degree Celsius per second + */ + public const REC20_DEGREE_CELSIUS_PER_SECOND = 'H14'; + + /** + * square centimetre per gram + */ + public const REC20_SQUARE_CENTIMETRE_PER_GRAM = 'H15'; + + /** + * square decametre + */ + public const REC20_SQUARE_DECAMETRE = 'H16'; + + /** + * square hectometre + */ + public const REC20_SQUARE_HECTOMETRE = 'H18'; + + /** + * cubic hectometre + */ + public const REC20_CUBIC_HECTOMETRE = 'H19'; + + /** + * cubic kilometre + */ + public const REC20_CUBIC_KILOMETRE = 'H20'; + + /** + * blank + */ + public const REC20_BLANK = 'H21'; + + /** + * volt square inch per pound-force + */ + public const REC20_VOLT_SQUARE_INCH_PER_POUNDFORCE = 'H22'; + + /** + * volt per inch + */ + public const REC20_VOLT_PER_INCH = 'H23'; + + /** + * volt per microsecond + */ + public const REC20_VOLT_PER_MICROSECOND = 'H24'; + + /** + * percent per kelvin + */ + public const REC20_PERCENT_PER_KELVIN = 'H25'; + + /** + * ohm per metre + */ + public const REC20_OHM_PER_METRE = 'H26'; + + /** + * degree per metre + */ + public const REC20_DEGREE_PER_METRE = 'H27'; + + /** + * microfarad per kilometre + */ + public const REC20_MICROFARAD_PER_KILOMETRE = 'H28'; + + /** + * microgram per litre + */ + public const REC20_MICROGRAM_PER_LITRE = 'H29'; + + /** + * square micrometre (square micron) + */ + public const REC20_SQUARE_MICROMETRE_SQUARE_MICRON = 'H30'; + + /** + * ampere per kilogram + */ + public const REC20_AMPERE_PER_KILOGRAM = 'H31'; + + /** + * ampere squared second + */ + public const REC20_AMPERE_SQUARED_SECOND = 'H32'; + + /** + * farad per kilometre + */ + public const REC20_FARAD_PER_KILOMETRE = 'H33'; + + /** + * hertz metre + */ + public const REC20_HERTZ_METRE = 'H34'; + + /** + * kelvin metre per watt + */ + public const REC20_KELVIN_METRE_PER_WATT = 'H35'; + + /** + * megaohm per kilometre + */ + public const REC20_MEGAOHM_PER_KILOMETRE = 'H36'; + + /** + * megaohm per metre + */ + public const REC20_MEGAOHM_PER_METRE = 'H37'; + + /** + * megaampere + */ + public const REC20_MEGAAMPERE = 'H38'; + + /** + * megahertz kilometre + */ + public const REC20_MEGAHERTZ_KILOMETRE = 'H39'; + + /** + * newton per ampere + */ + public const REC20_NEWTON_PER_AMPERE = 'H40'; + + /** + * newton metre watt to the power minus 0,5 + */ + public const REC20_NEWTON_METRE_WATT_TO_THE_POWER_MINUS_05 = 'H41'; + + /** + * pascal per metre + */ + public const REC20_PASCAL_PER_METRE = 'H42'; + + /** + * siemens per centimetre + */ + public const REC20_SIEMENS_PER_CENTIMETRE = 'H43'; + + /** + * teraohm + */ + public const REC20_TERAOHM = 'H44'; + + /** + * volt second per metre + */ + public const REC20_VOLT_SECOND_PER_METRE = 'H45'; + + /** + * volt per second + */ + public const REC20_VOLT_PER_SECOND = 'H46'; + + /** + * watt per cubic metre + */ + public const REC20_WATT_PER_CUBIC_METRE = 'H47'; + + /** + * attofarad + */ + public const REC20_ATTOFARAD = 'H48'; + + /** + * centimetre per hour + */ + public const REC20_CENTIMETRE_PER_HOUR = 'H49'; + + /** + * reciprocal cubic centimetre + */ + public const REC20_RECIPROCAL_CUBIC_CENTIMETRE = 'H50'; + + /** + * decibel per kilometre + */ + public const REC20_DECIBEL_PER_KILOMETRE = 'H51'; + + /** + * decibel per metre + */ + public const REC20_DECIBEL_PER_METRE = 'H52'; + + /** + * kilogram per bar + */ + public const REC20_KILOGRAM_PER_BAR = 'H53'; + + /** + * kilogram per cubic decimetre kelvin + */ + public const REC20_KILOGRAM_PER_CUBIC_DECIMETRE_KELVIN = 'H54'; + + /** + * kilogram per cubic decimetre bar + */ + public const REC20_KILOGRAM_PER_CUBIC_DECIMETRE_BAR = 'H55'; + + /** + * kilogram per square metre second + */ + public const REC20_KILOGRAM_PER_SQUARE_METRE_SECOND = 'H56'; + + /** + * inch per two pi radiant + */ + public const REC20_INCH_PER_TWO_PI_RADIANT = 'H57'; + + /** + * metre per volt second + */ + public const REC20_METRE_PER_VOLT_SECOND = 'H58'; + + /** + * square metre per newton + */ + public const REC20_SQUARE_METRE_PER_NEWTON = 'H59'; + + /** + * cubic metre per cubic metre + */ + public const REC20_CUBIC_METRE_PER_CUBIC_METRE = 'H60'; + + /** + * millisiemens per centimetre + */ + public const REC20_MILLISIEMENS_PER_CENTIMETRE = 'H61'; + + /** + * millivolt per minute + */ + public const REC20_MILLIVOLT_PER_MINUTE = 'H62'; + + /** + * milligram per square centimetre + */ + public const REC20_MILLIGRAM_PER_SQUARE_CENTIMETRE = 'H63'; + + /** + * milligram per gram + */ + public const REC20_MILLIGRAM_PER_GRAM = 'H64'; + + /** + * millilitre per cubic metre + */ + public const REC20_MILLILITRE_PER_CUBIC_METRE = 'H65'; + + /** + * millimetre per year + */ + public const REC20_MILLIMETRE_PER_YEAR = 'H66'; + + /** + * millimetre per hour + */ + public const REC20_MILLIMETRE_PER_HOUR = 'H67'; + + /** + * millimole per gram + */ + public const REC20_MILLIMOLE_PER_GRAM = 'H68'; + + /** + * picopascal per kilometre + */ + public const REC20_PICOPASCAL_PER_KILOMETRE = 'H69'; + + /** + * picosecond + */ + public const REC20_PICOSECOND = 'H70'; + + /** + * percent per month + */ + public const REC20_PERCENT_PER_MONTH = 'H71'; + + /** + * percent per hectobar + */ + public const REC20_PERCENT_PER_HECTOBAR = 'H72'; + + /** + * percent per decakelvin + */ + public const REC20_PERCENT_PER_DECAKELVIN = 'H73'; + + /** + * watt per metre + */ + public const REC20_WATT_PER_METRE = 'H74'; + + /** + * decapascal + */ + public const REC20_DECAPASCAL = 'H75'; + + /** + * gram per millimetre + */ + public const REC20_GRAM_PER_MILLIMETRE = 'H76'; + + /** + * module width + */ + public const REC20_MODULE_WIDTH = 'H77'; + + /** + * French gauge + */ + public const REC20_FRENCH_GAUGE = 'H79'; + + /** + * rack unit + */ + public const REC20_RACK_UNIT = 'H80'; + + /** + * millimetre per minute + */ + public const REC20_MILLIMETRE_PER_MINUTE = 'H81'; + + /** + * big point + */ + public const REC20_BIG_POINT = 'H82'; + + /** + * litre per kilogram + */ + public const REC20_LITRE_PER_KILOGRAM = 'H83'; + + /** + * gram millimetre + */ + public const REC20_GRAM_MILLIMETRE = 'H84'; + + /** + * reciprocal week + */ + public const REC20_RECIPROCAL_WEEK = 'H85'; + + /** + * piece + */ + public const REC20_PIECE = 'H87'; + + /** + * megaohm kilometre + */ + public const REC20_MEGAOHM_KILOMETRE = 'H88'; + + /** + * percent per ohm + */ + public const REC20_PERCENT_PER_OHM = 'H89'; + + /** + * percent per degree + */ + public const REC20_PERCENT_PER_DEGREE = 'H90'; + + /** + * percent per ten thousand + */ + public const REC20_PERCENT_PER_TEN_THOUSAND = 'H91'; + + /** + * percent per one hundred thousand + */ + public const REC20_PERCENT_PER_ONE_HUNDRED_THOUSAND = 'H92'; + + /** + * percent per hundred + */ + public const REC20_PERCENT_PER_HUNDRED = 'H93'; + + /** + * percent per thousand + */ + public const REC20_PERCENT_PER_THOUSAND = 'H94'; + + /** + * percent per volt + */ + public const REC20_PERCENT_PER_VOLT = 'H95'; + + /** + * percent per bar + */ + public const REC20_PERCENT_PER_BAR = 'H96'; + + /** + * percent per inch + */ + public const REC20_PERCENT_PER_INCH = 'H98'; + + /** + * percent per metre + */ + public const REC20_PERCENT_PER_METRE = 'H99'; + + /** + * hank + */ + public const REC20_HANK = 'HA'; + + /** + * hectobar + */ + public const REC20_HECTOBAR = 'HBA'; + + /** + * hundred boxes + */ + public const REC20_HUNDRED_BOXES = 'HBX'; + + /** + * hundred count + */ + public const REC20_HUNDRED_COUNT = 'HC'; + + /** + * hundred kilogram, dry weight + */ + public const REC20_HUNDRED_KILOGRAM_DRY_WEIGHT = 'HDW'; + + /** + * head + */ + public const REC20_HEAD = 'HEA'; + + /** + * hectogram + */ + public const REC20_HECTOGRAM = 'HGM'; + + /** + * hundred cubic foot + */ + public const REC20_HUNDRED_CUBIC_FOOT = 'HH'; + + /** + * hundred international unit + */ + public const REC20_HUNDRED_INTERNATIONAL_UNIT = 'HIU'; + + /** + * hundred kilogram, net mass + */ + public const REC20_HUNDRED_KILOGRAM_NET_MASS = 'HKM'; + + /** + * hectolitre + */ + public const REC20_HECTOLITRE = 'HLT'; + + /** + * mile per hour (statute mile) + */ + public const REC20_MILE_PER_HOUR_STATUTE_MILE = 'HM'; + + /** + * million cubic metre + */ + public const REC20_MILLION_CUBIC_METRE = 'HMQ'; + + /** + * hectometre + */ + public const REC20_HECTOMETRE = 'HMT'; + + /** + * hectolitre of pure alcohol + */ + public const REC20_HECTOLITRE_OF_PURE_ALCOHOL = 'HPA'; + + /** + * hertz + */ + public const REC20_HERTZ = 'HTZ'; + + /** + * hour + */ + public const REC20_HOUR = 'HUR'; + + /** + * inch pound (pound inch) + */ + public const REC20_INCH_POUND_POUND_INCH = 'IA'; + + /** + * person + */ + public const REC20_PERSON = 'IE'; + + /** + * inch + */ + public const REC20_INCH = 'INH'; + + /** + * square inch + */ + public const REC20_SQUARE_INCH = 'INK'; + + /** + * cubic inch + */ + public const REC20_CUBIC_INCH = 'INQ'; + + /** + * international sugar degree + */ + public const REC20_INTERNATIONAL_SUGAR_DEGREE = 'ISD'; + + /** + * inch per second + */ + public const REC20_INCH_PER_SECOND = 'IU'; + + /** + * international unit per gram + */ + public const REC20_INTERNATIONAL_UNIT_PER_GRAM = 'IUG'; + + /** + * inch per second squared + */ + public const REC20_INCH_PER_SECOND_SQUARED = 'IV'; + + /** + * percent per millimetre + */ + public const REC20_PERCENT_PER_MILLIMETRE = 'J10'; + + /** + * per mille per psi + */ + public const REC20_PER_MILLE_PER_PSI = 'J12'; + + /** + * degree API + */ + public const REC20_DEGREE_API = 'J13'; + + /** + * degree Baume (origin scale) + */ + public const REC20_DEGREE_BAUME_ORIGIN_SCALE = 'J14'; + + /** + * degree Baume (US heavy) + */ + public const REC20_DEGREE_BAUME_US_HEAVY = 'J15'; + + /** + * degree Baume (US light) + */ + public const REC20_DEGREE_BAUME_US_LIGHT = 'J16'; + + /** + * degree Balling + */ + public const REC20_DEGREE_BALLING = 'J17'; + + /** + * degree Brix + */ + public const REC20_DEGREE_BRIX = 'J18'; + + /** + * degree Fahrenheit hour square foot per British thermal unit + * (thermochemical) + */ + public const REC20_DEGREE_FAHRENHEIT_HOUR_SQUARE_FOOT_PER_BRITISH_THERMAL_UNIT_THERMOCHEMICAL = 'J19'; + + /** + * joule per kilogram + */ + public const REC20_JOULE_PER_KILOGRAM = 'J2'; + + /** + * degree Fahrenheit per kelvin + */ + public const REC20_DEGREE_FAHRENHEIT_PER_KELVIN = 'J20'; + + /** + * degree Fahrenheit per bar + */ + public const REC20_DEGREE_FAHRENHEIT_PER_BAR = 'J21'; + + /** + * degree Fahrenheit hour square foot per British thermal unit + * (international table) + */ + public const REC20_DEGREE_FAHRENHEIT_HOUR_SQUARE_FOOT_PER_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE = 'J22'; + + /** + * degree Fahrenheit per hour + */ + public const REC20_DEGREE_FAHRENHEIT_PER_HOUR = 'J23'; + + /** + * degree Fahrenheit per minute + */ + public const REC20_DEGREE_FAHRENHEIT_PER_MINUTE = 'J24'; + + /** + * degree Fahrenheit per second + */ + public const REC20_DEGREE_FAHRENHEIT_PER_SECOND = 'J25'; + + /** + * reciprocal degree Fahrenheit + */ + public const REC20_RECIPROCAL_DEGREE_FAHRENHEIT = 'J26'; + + /** + * degree Oechsle + */ + public const REC20_DEGREE_OECHSLE = 'J27'; + + /** + * degree Rankine per hour + */ + public const REC20_DEGREE_RANKINE_PER_HOUR = 'J28'; + + /** + * degree Rankine per minute + */ + public const REC20_DEGREE_RANKINE_PER_MINUTE = 'J29'; + + /** + * degree Rankine per second + */ + public const REC20_DEGREE_RANKINE_PER_SECOND = 'J30'; + + /** + * degree Twaddell + */ + public const REC20_DEGREE_TWADDELL = 'J31'; + + /** + * micropoise + */ + public const REC20_MICROPOISE = 'J32'; + + /** + * microgram per kilogram + */ + public const REC20_MICROGRAM_PER_KILOGRAM = 'J33'; + + /** + * microgram per cubic metre kelvin + */ + public const REC20_MICROGRAM_PER_CUBIC_METRE_KELVIN = 'J34'; + + /** + * microgram per cubic metre bar + */ + public const REC20_MICROGRAM_PER_CUBIC_METRE_BAR = 'J35'; + + /** + * microlitre per litre + */ + public const REC20_MICROLITRE_PER_LITRE = 'J36'; + + /** + * baud + */ + public const REC20_BAUD = 'J38'; + + /** + * British thermal unit (mean) + */ + public const REC20_BRITISH_THERMAL_UNIT_MEAN = 'J39'; + + /** + * British thermal unit (international table) foot per hour square foot + * degree Fahrenheit + */ + public 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 + */ + public 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 + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_INCH_PER_SECOND_SQUAREFOOT_DEGREE_FAHRENHEIT = 'J42'; + + /** + * British thermal unit (international table) per pound degree Fahrenheit + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_POUND_DEGREE_FAHRENHEIT = 'J43'; + + /** + * British thermal unit (international table) per minute + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_MINUTE = 'J44'; + + /** + * British thermal unit (international table) per second + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SECOND = 'J45'; + + /** + * British thermal unit (thermochemical) foot per hour square foot + * degree Fahrenheit + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_FOOT_PER_HOUR_SQUAREFOOT_DEGREE_FAHRENHEIT = 'J46'; + + /** + * British thermal unit (thermochemical) per hour + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_HOUR = 'J47'; + + /** + * British thermal unit (thermochemical) inch per hour square foot + * degree Fahrenheit + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_INCH_PER_HOUR_SQUAREFOOT_DEGREE_FAHRENHEIT = 'J48'; + + /** + * British thermal unit (thermochemical) inch per second square foot + * degree Fahrenheit + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_INCH_PER_SECONDSQUARE_FOOT_DEGREE_FAHRENHEIT = 'J49'; + + /** + * British thermal unit (thermochemical) per pound degree Fahrenheit + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_POUND_DEGREE_FAHRENHEIT = 'J50'; + + /** + * British thermal unit (thermochemical) per minute + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_MINUTE = 'J51'; + + /** + * British thermal unit (thermochemical) per second + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SECOND = 'J52'; + + /** + * coulomb square metre per kilogram + */ + public const REC20_COULOMB_SQUARE_METRE_PER_KILOGRAM = 'J53'; + + /** + * megabaud + */ + public const REC20_MEGABAUD = 'J54'; + + /** + * watt second + */ + public const REC20_WATT_SECOND = 'J55'; + + /** + * bar per bar + */ + public const REC20_BAR_PER_BAR = 'J56'; + + /** + * barrel (UK petroleum) + */ + public const REC20_BARREL_UK_PETROLEUM = 'J57'; + + /** + * barrel (UK petroleum) per minute + */ + public const REC20_BARREL_UK_PETROLEUM_PER_MINUTE = 'J58'; + + /** + * barrel (UK petroleum) per day + */ + public const REC20_BARREL_UK_PETROLEUM_PER_DAY = 'J59'; + + /** + * barrel (UK petroleum) per hour + */ + public const REC20_BARREL_UK_PETROLEUM_PER_HOUR = 'J60'; + + /** + * barrel (UK petroleum) per second + */ + public const REC20_BARREL_UK_PETROLEUM_PER_SECOND = 'J61'; + + /** + * barrel (US petroleum) per hour + */ + public const REC20_BARREL_US_PETROLEUM_PER_HOUR = 'J62'; + + /** + * barrel (US petroleum) per second + */ + public const REC20_BARREL_US_PETROLEUM_PER_SECOND = 'J63'; + + /** + * bushel (UK) per day + */ + public const REC20_BUSHEL_UK_PER_DAY = 'J64'; + + /** + * bushel (UK) per hour + */ + public const REC20_BUSHEL_UK_PER_HOUR = 'J65'; + + /** + * bushel (UK) per minute + */ + public const REC20_BUSHEL_UK_PER_MINUTE = 'J66'; + + /** + * bushel (UK) per second + */ + public const REC20_BUSHEL_UK_PER_SECOND = 'J67'; + + /** + * bushel (US dry) per day + */ + public const REC20_BUSHEL_US_DRY_PER_DAY = 'J68'; + + /** + * bushel (US dry) per hour + */ + public const REC20_BUSHEL_US_DRY_PER_HOUR = 'J69'; + + /** + * bushel (US dry) per minute + */ + public const REC20_BUSHEL_US_DRY_PER_MINUTE = 'J70'; + + /** + * bushel (US dry) per second + */ + public const REC20_BUSHEL_US_DRY_PER_SECOND = 'J71'; + + /** + * centinewton metre + */ + public const REC20_CENTINEWTON_METRE = 'J72'; + + /** + * centipoise per kelvin + */ + public const REC20_CENTIPOISE_PER_KELVIN = 'J73'; + + /** + * centipoise per bar + */ + public const REC20_CENTIPOISE_PER_BAR = 'J74'; + + /** + * calorie (mean) + */ + public const REC20_CALORIE_MEAN = 'J75'; + + /** + * calorie (international table) per gram degree Celsius + */ + public const REC20_CALORIE_INTERNATIONAL_TABLE_PER_GRAM_DEGREE_CELSIUS = 'J76'; + + /** + * calorie (thermochemical) per centimetre second degree Celsius + */ + public const REC20_CALORIE_THERMOCHEMICAL_PER_CENTIMETRE_SECOND_DEGREE_CELSIUS = 'J78'; + + /** + * calorie (thermochemical) per gram degree Celsius + */ + public const REC20_CALORIE_THERMOCHEMICAL_PER_GRAM_DEGREE_CELSIUS = 'J79'; + + /** + * calorie (thermochemical) per minute + */ + public const REC20_CALORIE_THERMOCHEMICAL_PER_MINUTE = 'J81'; + + /** + * calorie (thermochemical) per second + */ + public const REC20_CALORIE_THERMOCHEMICAL_PER_SECOND = 'J82'; + + /** + * clo + */ + public const REC20_CLO = 'J83'; + + /** + * centimetre per second kelvin + */ + public const REC20_CENTIMETRE_PER_SECOND_KELVIN = 'J84'; + + /** + * centimetre per second bar + */ + public const REC20_CENTIMETRE_PER_SECOND_BAR = 'J85'; + + /** + * cubic centimetre per cubic metre + */ + public const REC20_CUBIC_CENTIMETRE_PER_CUBIC_METRE = 'J87'; + + /** + * cubic decimetre per day + */ + public const REC20_CUBIC_DECIMETRE_PER_DAY = 'J90'; + + /** + * cubic decimetre per cubic metre + */ + public const REC20_CUBIC_DECIMETRE_PER_CUBIC_METRE = 'J91'; + + /** + * cubic decimetre per minute + */ + public const REC20_CUBIC_DECIMETRE_PER_MINUTE = 'J92'; + + /** + * cubic decimetre per second + */ + public const REC20_CUBIC_DECIMETRE_PER_SECOND = 'J93'; + + /** + * ounce (UK fluid) per day + */ + public const REC20_OUNCE_UK_FLUID_PER_DAY = 'J95'; + + /** + * ounce (UK fluid) per hour + */ + public const REC20_OUNCE_UK_FLUID_PER_HOUR = 'J96'; + + /** + * ounce (UK fluid) per minute + */ + public const REC20_OUNCE_UK_FLUID_PER_MINUTE = 'J97'; + + /** + * ounce (UK fluid) per second + */ + public const REC20_OUNCE_UK_FLUID_PER_SECOND = 'J98'; + + /** + * ounce (US fluid) per day + */ + public const REC20_OUNCE_US_FLUID_PER_DAY = 'J99'; + + /** + * joule per kelvin + */ + public const REC20_JOULE_PER_KELVIN = 'JE'; + + /** + * megajoule per kilogram + */ + public const REC20_MEGAJOULE_PER_KILOGRAM = 'JK'; + + /** + * megajoule per cubic metre + */ + public const REC20_MEGAJOULE_PER_CUBIC_METRE = 'JM'; + + /** + * pipeline joint + */ + public const REC20_PIPELINE_JOINT = 'JNT'; + + /** + * joule + */ + public const REC20_JOULE = 'JOU'; + + /** + * hundred metre + */ + public const REC20_HUNDRED_METRE = 'JPS'; + + /** + * number of jewels + */ + public const REC20_NUMBER_OF_JEWELS = 'JWL'; + + /** + * kilowatt demand + */ + public const REC20_KILOWATT_DEMAND = 'K1'; + + /** + * ounce (US fluid) per hour + */ + public const REC20_OUNCE_US_FLUID_PER_HOUR = 'K10'; + + /** + * ounce (US fluid) per minute + */ + public const REC20_OUNCE_US_FLUID_PER_MINUTE = 'K11'; + + /** + * ounce (US fluid) per second + */ + public const REC20_OUNCE_US_FLUID_PER_SECOND = 'K12'; + + /** + * foot per degree Fahrenheit + */ + public const REC20_FOOT_PER_DEGREE_FAHRENHEIT = 'K13'; + + /** + * foot per hour + */ + public const REC20_FOOT_PER_HOUR = 'K14'; + + /** + * foot pound-force per hour + */ + public const REC20_FOOT_POUNDFORCE_PER_HOUR = 'K15'; + + /** + * foot pound-force per minute + */ + public const REC20_FOOT_POUNDFORCE_PER_MINUTE = 'K16'; + + /** + * foot per psi + */ + public const REC20_FOOT_PER_PSI = 'K17'; + + /** + * foot per second degree Fahrenheit + */ + public const REC20_FOOT_PER_SECOND_DEGREE_FAHRENHEIT = 'K18'; + + /** + * foot per second psi + */ + public const REC20_FOOT_PER_SECOND_PSI = 'K19'; + + /** + * kilovolt ampere reactive demand + */ + public const REC20_KILOVOLT_AMPERE_REACTIVE_DEMAND = 'K2'; + + /** + * reciprocal cubic foot + */ + public const REC20_RECIPROCAL_CUBIC_FOOT = 'K20'; + + /** + * cubic foot per degree Fahrenheit + */ + public const REC20_CUBIC_FOOT_PER_DEGREE_FAHRENHEIT = 'K21'; + + /** + * cubic foot per day + */ + public const REC20_CUBIC_FOOT_PER_DAY = 'K22'; + + /** + * cubic foot per psi + */ + public const REC20_CUBIC_FOOT_PER_PSI = 'K23'; + + /** + * gallon (UK) per day + */ + public const REC20_GALLON_UK_PER_DAY = 'K26'; + + /** + * gallon (UK) per hour + */ + public const REC20_GALLON_UK_PER_HOUR = 'K27'; + + /** + * gallon (UK) per second + */ + public const REC20_GALLON_UK_PER_SECOND = 'K28'; + + /** + * kilovolt ampere reactive hour + */ + public const REC20_KILOVOLT_AMPERE_REACTIVE_HOUR = 'K3'; + + /** + * gallon (US liquid) per second + */ + public const REC20_GALLON_US_LIQUID_PER_SECOND = 'K30'; + + /** + * gram-force per square centimetre + */ + public const REC20_GRAMFORCE_PER_SQUARE_CENTIMETRE = 'K31'; + + /** + * gill (UK) per day + */ + public const REC20_GILL_UK_PER_DAY = 'K32'; + + /** + * gill (UK) per hour + */ + public const REC20_GILL_UK_PER_HOUR = 'K33'; + + /** + * gill (UK) per minute + */ + public const REC20_GILL_UK_PER_MINUTE = 'K34'; + + /** + * gill (UK) per second + */ + public const REC20_GILL_UK_PER_SECOND = 'K35'; + + /** + * gill (US) per day + */ + public const REC20_GILL_US_PER_DAY = 'K36'; + + /** + * gill (US) per hour + */ + public const REC20_GILL_US_PER_HOUR = 'K37'; + + /** + * gill (US) per minute + */ + public const REC20_GILL_US_PER_MINUTE = 'K38'; + + /** + * gill (US) per second + */ + public const REC20_GILL_US_PER_SECOND = 'K39'; + + /** + * standard acceleration of free fall + */ + public const REC20_STANDARD_ACCELERATION_OF_FREE_FALL = 'K40'; + + /** + * grain per gallon (US) + */ + public const REC20_GRAIN_PER_GALLON_US = 'K41'; + + /** + * horsepower (boiler) + */ + public const REC20_HORSEPOWER_BOILER = 'K42'; + + /** + * horsepower (electric) + */ + public const REC20_HORSEPOWER_ELECTRIC = 'K43'; + + /** + * inch per degree Fahrenheit + */ + public const REC20_INCH_PER_DEGREE_FAHRENHEIT = 'K45'; + + /** + * inch per psi + */ + public const REC20_INCH_PER_PSI = 'K46'; + + /** + * inch per second degree Fahrenheit + */ + public const REC20_INCH_PER_SECOND_DEGREE_FAHRENHEIT = 'K47'; + + /** + * inch per second psi + */ + public const REC20_INCH_PER_SECOND_PSI = 'K48'; + + /** + * reciprocal cubic inch + */ + public const REC20_RECIPROCAL_CUBIC_INCH = 'K49'; + + /** + * kilobaud + */ + public const REC20_KILOBAUD = 'K50'; + + /** + * kilocalorie (mean) + */ + public const REC20_KILOCALORIE_MEAN = 'K51'; + + /** + * kilocalorie (international table) per hour metre degree Celsius + */ + public const REC20_KILOCALORIE_INTERNATIONAL_TABLE_PER_HOUR_METRE_DEGREE_CELSIUS = 'K52'; + + /** + * kilocalorie (thermochemical) + */ + public const REC20_KILOCALORIE_THERMOCHEMICAL = 'K53'; + + /** + * kilocalorie (thermochemical) per minute + */ + public const REC20_KILOCALORIE_THERMOCHEMICAL_PER_MINUTE = 'K54'; + + /** + * kilocalorie (thermochemical) per second + */ + public const REC20_KILOCALORIE_THERMOCHEMICAL_PER_SECOND = 'K55'; + + /** + * kilomole per hour + */ + public const REC20_KILOMOLE_PER_HOUR = 'K58'; + + /** + * kilomole per cubic metre kelvin + */ + public const REC20_KILOMOLE_PER_CUBIC_METRE_KELVIN = 'K59'; + + /** + * kilolitre + */ + public const REC20_KILOLITRE = 'K6'; + + /** + * kilomole per cubic metre bar + */ + public const REC20_KILOMOLE_PER_CUBIC_METRE_BAR = 'K60'; + + /** + * kilomole per minute + */ + public const REC20_KILOMOLE_PER_MINUTE = 'K61'; + + /** + * litre per litre + */ + public const REC20_LITRE_PER_LITRE = 'K62'; + + /** + * reciprocal litre + */ + public const REC20_RECIPROCAL_LITRE = 'K63'; + + /** + * pound (avoirdupois) per degree Fahrenheit + */ + public const REC20_POUND_AVOIRDUPOIS_PER_DEGREE_FAHRENHEIT = 'K64'; + + /** + * pound (avoirdupois) square foot + */ + public const REC20_POUND_AVOIRDUPOIS_SQUARE_FOOT = 'K65'; + + /** + * pound (avoirdupois) per day + */ + public const REC20_POUND_AVOIRDUPOIS_PER_DAY = 'K66'; + + /** + * pound per foot hour + */ + public const REC20_POUND_PER_FOOT_HOUR = 'K67'; + + /** + * pound per foot second + */ + public const REC20_POUND_PER_FOOT_SECOND = 'K68'; + + /** + * pound (avoirdupois) per cubic foot degree Fahrenheit + */ + public const REC20_POUND_AVOIRDUPOIS_PER_CUBIC_FOOT_DEGREE_FAHRENHEIT = 'K69'; + + /** + * pound (avoirdupois) per cubic foot psi + */ + public const REC20_POUND_AVOIRDUPOIS_PER_CUBIC_FOOT_PSI = 'K70'; + + /** + * pound (avoirdupois) per gallon (UK) + */ + public const REC20_POUND_AVOIRDUPOIS_PER_GALLON_UK = 'K71'; + + /** + * pound (avoirdupois) per hour degree Fahrenheit + */ + public const REC20_POUND_AVOIRDUPOIS_PER_HOUR_DEGREE_FAHRENHEIT = 'K73'; + + /** + * pound (avoirdupois) per hour psi + */ + public const REC20_POUND_AVOIRDUPOIS_PER_HOUR_PSI = 'K74'; + + /** + * pound (avoirdupois) per cubic inch degree Fahrenheit + */ + public const REC20_POUND_AVOIRDUPOIS_PER_CUBIC_INCH_DEGREE_FAHRENHEIT = 'K75'; + + /** + * pound (avoirdupois) per cubic inch psi + */ + public const REC20_POUND_AVOIRDUPOIS_PER_CUBIC_INCH_PSI = 'K76'; + + /** + * pound (avoirdupois) per psi + */ + public const REC20_POUND_AVOIRDUPOIS_PER_PSI = 'K77'; + + /** + * pound (avoirdupois) per minute + */ + public const REC20_POUND_AVOIRDUPOIS_PER_MINUTE = 'K78'; + + /** + * pound (avoirdupois) per minute degree Fahrenheit + */ + public const REC20_POUND_AVOIRDUPOIS_PER_MINUTE_DEGREE_FAHRENHEIT = 'K79'; + + /** + * pound (avoirdupois) per minute psi + */ + public const REC20_POUND_AVOIRDUPOIS_PER_MINUTE_PSI = 'K80'; + + /** + * pound (avoirdupois) per second + */ + public const REC20_POUND_AVOIRDUPOIS_PER_SECOND = 'K81'; + + /** + * pound (avoirdupois) per second degree Fahrenheit + */ + public const REC20_POUND_AVOIRDUPOIS_PER_SECOND_DEGREE_FAHRENHEIT = 'K82'; + + /** + * pound (avoirdupois) per second psi + */ + public const REC20_POUND_AVOIRDUPOIS_PER_SECOND_PSI = 'K83'; + + /** + * pound per cubic yard + */ + public const REC20_POUND_PER_CUBIC_YARD = 'K84'; + + /** + * pound-force per square foot + */ + public const REC20_POUNDFORCE_PER_SQUARE_FOOT = 'K85'; + + /** + * pound-force per square inch degree Fahrenheit + */ + public const REC20_POUNDFORCE_PER_SQUARE_INCH_DEGREE_FAHRENHEIT = 'K86'; + + /** + * psi cubic inch per second + */ + public const REC20_PSI_CUBIC_INCH_PER_SECOND = 'K87'; + + /** + * psi litre per second + */ + public const REC20_PSI_LITRE_PER_SECOND = 'K88'; + + /** + * psi cubic metre per second + */ + public const REC20_PSI_CUBIC_METRE_PER_SECOND = 'K89'; + + /** + * psi cubic yard per second + */ + public const REC20_PSI_CUBIC_YARD_PER_SECOND = 'K90'; + + /** + * pound-force second per square foot + */ + public const REC20_POUNDFORCE_SECOND_PER_SQUARE_FOOT = 'K91'; + + /** + * pound-force second per square inch + */ + public const REC20_POUNDFORCE_SECOND_PER_SQUARE_INCH = 'K92'; + + /** + * reciprocal psi + */ + public const REC20_RECIPROCAL_PSI = 'K93'; + + /** + * quart (UK liquid) per day + */ + public const REC20_QUART_UK_LIQUID_PER_DAY = 'K94'; + + /** + * quart (UK liquid) per hour + */ + public const REC20_QUART_UK_LIQUID_PER_HOUR = 'K95'; + + /** + * quart (UK liquid) per minute + */ + public const REC20_QUART_UK_LIQUID_PER_MINUTE = 'K96'; + + /** + * quart (UK liquid) per second + */ + public const REC20_QUART_UK_LIQUID_PER_SECOND = 'K97'; + + /** + * quart (US liquid) per day + */ + public const REC20_QUART_US_LIQUID_PER_DAY = 'K98'; + + /** + * quart (US liquid) per hour + */ + public const REC20_QUART_US_LIQUID_PER_HOUR = 'K99'; + + /** + * cake + */ + public const REC20_CAKE = 'KA'; + + /** + * katal + */ + public const REC20_KATAL = 'KAT'; + + /** + * kilocharacter + */ + public const REC20_KILOCHARACTER = 'KB'; + + /** + * kilobar + */ + public const REC20_KILOBAR = 'KBA'; + + /** + * kilogram of choline chloride + */ + public const REC20_KILOGRAM_OF_CHOLINE_CHLORIDE = 'KCC'; + + /** + * kilogram drained net weight + */ + public const REC20_KILOGRAM_DRAINED_NET_WEIGHT = 'KDW'; + + /** + * kelvin + */ + public const REC20_KELVIN = 'KEL'; + + /** + * kilogram + */ + public const REC20_KILOGRAM = 'KGM'; + + /** + * kilogram per second + */ + public const REC20_KILOGRAM_PER_SECOND = 'KGS'; + + /** + * kilogram of hydrogen peroxide + */ + public const REC20_KILOGRAM_OF_HYDROGEN_PEROXIDE = 'KHY'; + + /** + * kilohertz + */ + public const REC20_KILOHERTZ = 'KHZ'; + + /** + * kilogram per millimetre width + */ + public const REC20_KILOGRAM_PER_MILLIMETRE_WIDTH = 'KI'; + + /** + * kilogram, including container + */ + public const REC20_KILOGRAM_INCLUDING_CONTAINER = 'KIC'; + + /** + * kilogram, including inner packaging + */ + public const REC20_KILOGRAM_INCLUDING_INNER_PACKAGING = 'KIP'; + + /** + * kilosegment + */ + public const REC20_KILOSEGMENT = 'KJ'; + + /** + * kilojoule + */ + public const REC20_KILOJOULE = 'KJO'; + + /** + * kilogram per metre + */ + public const REC20_KILOGRAM_PER_METRE = 'KL'; + + /** + * lactic dry material percentage + */ + public const REC20_LACTIC_DRY_MATERIAL_PERCENTAGE = 'KLK'; + + /** + * kilolux + */ + public const REC20_KILOLUX = 'KLX'; + + /** + * kilogram of methylamine + */ + public const REC20_KILOGRAM_OF_METHYLAMINE = 'KMA'; + + /** + * kilometre per hour + */ + public const REC20_KILOMETRE_PER_HOUR = 'KMH'; + + /** + * square kilometre + */ + public const REC20_SQUARE_KILOMETRE = 'KMK'; + + /** + * kilogram per cubic metre + */ + public const REC20_KILOGRAM_PER_CUBIC_METRE = 'KMQ'; + + /** + * kilometre + */ + public const REC20_KILOMETRE = 'KMT'; + + /** + * kilogram of nitrogen + */ + public const REC20_KILOGRAM_OF_NITROGEN = 'KNI'; + + /** + * kilonewton per square metre + */ + public const REC20_KILONEWTON_PER_SQUARE_METRE = 'KNM'; + + /** + * kilogram named substance + */ + public const REC20_KILOGRAM_NAMED_SUBSTANCE = 'KNS'; + + /** + * knot + */ + public const REC20_KNOT = 'KNT'; + + /** + * milliequivalence caustic potash per gram of product + */ + public const REC20_MILLIEQUIVALENCE_CAUSTIC_POTASH_PER_GRAM_OF_PRODUCT = 'KO'; + + /** + * kilopascal + */ + public const REC20_KILOPASCAL = 'KPA'; + + /** + * kilogram of potassium hydroxide (caustic potash) + */ + public const REC20_KILOGRAM_OF_POTASSIUM_HYDROXIDE_CAUSTIC_POTASH = 'KPH'; + + /** + * kilogram of potassium oxide + */ + public const REC20_KILOGRAM_OF_POTASSIUM_OXIDE = 'KPO'; + + /** + * kilogram of phosphorus pentoxide (phosphoric anhydride) + */ + public const REC20_KILOGRAM_OF_PHOSPHORUS_PENTOXIDE_PHOSPHORIC_ANHYDRIDE = 'KPP'; + + /** + * kiloroentgen + */ + public const REC20_KILOROENTGEN = 'KR'; + + /** + * kilogram of substance 90 % dry + */ + public const REC20_KILOGRAM_OF_SUBSTANCE_90__DRY = 'KSD'; + + /** + * kilogram of sodium hydroxide (caustic soda) + */ + public const REC20_KILOGRAM_OF_SODIUM_HYDROXIDE_CAUSTIC_SODA = 'KSH'; + + /** + * kit + */ + public const REC20_KIT = 'KT'; + + /** + * kilotonne + */ + public const REC20_KILOTONNE = 'KTN'; + + /** + * kilogram of uranium + */ + public const REC20_KILOGRAM_OF_URANIUM = 'KUR'; + + /** + * kilovolt - ampere + */ + public const REC20_KILOVOLT__AMPERE = 'KVA'; + + /** + * kilovar + */ + public const REC20_KILOVAR = 'KVR'; + + /** + * kilovolt + */ + public const REC20_KILOVOLT = 'KVT'; + + /** + * kilogram per millimetre + */ + public const REC20_KILOGRAM_PER_MILLIMETRE = 'KW'; + + /** + * kilowatt hour + */ + public const REC20_KILOWATT_HOUR = 'KWH'; + + /** + * Kilowatt hour per normalized cubic metre + */ + public const REC20_KILOWATT_HOUR_PER_NORMALIZED_CUBIC_METRE = 'KWN'; + + /** + * kilogram of tungsten trioxide + */ + public const REC20_KILOGRAM_OF_TUNGSTEN_TRIOXIDE = 'KWO'; + + /** + * Kilowatt hour per standard cubic metre + */ + public const REC20_KILOWATT_HOUR_PER_STANDARD_CUBIC_METRE = 'KWS'; + + /** + * kilowatt + */ + public const REC20_KILOWATT = 'KWT'; + + /** + * millilitre per kilogram + */ + public const REC20_MILLILITRE_PER_KILOGRAM = 'KX'; + + /** + * quart (US liquid) per minute + */ + public const REC20_QUART_US_LIQUID_PER_MINUTE = 'L10'; + + /** + * quart (US liquid) per second + */ + public const REC20_QUART_US_LIQUID_PER_SECOND = 'L11'; + + /** + * metre per second kelvin + */ + public const REC20_METRE_PER_SECOND_KELVIN = 'L12'; + + /** + * metre per second bar + */ + public const REC20_METRE_PER_SECOND_BAR = 'L13'; + + /** + * square metre hour degree Celsius per kilocalorie (international table) + */ + public const REC20_SQUARE_METRE_HOUR_DEGREE_CELSIUS_PER_KILOCALORIE_INTERNATIONAL_TABLE = 'L14'; + + /** + * millipascal second per kelvin + */ + public const REC20_MILLIPASCAL_SECOND_PER_KELVIN = 'L15'; + + /** + * millipascal second per bar + */ + public const REC20_MILLIPASCAL_SECOND_PER_BAR = 'L16'; + + /** + * milligram per cubic metre kelvin + */ + public const REC20_MILLIGRAM_PER_CUBIC_METRE_KELVIN = 'L17'; + + /** + * milligram per cubic metre bar + */ + public const REC20_MILLIGRAM_PER_CUBIC_METRE_BAR = 'L18'; + + /** + * millilitre per litre + */ + public const REC20_MILLILITRE_PER_LITRE = 'L19'; + + /** + * litre per minute + */ + public const REC20_LITRE_PER_MINUTE = 'L2'; + + /** + * reciprocal cubic millimetre + */ + public const REC20_RECIPROCAL_CUBIC_MILLIMETRE = 'L20'; + + /** + * cubic millimetre per cubic metre + */ + public const REC20_CUBIC_MILLIMETRE_PER_CUBIC_METRE = 'L21'; + + /** + * mole per hour + */ + public const REC20_MOLE_PER_HOUR = 'L23'; + + /** + * mole per kilogram kelvin + */ + public const REC20_MOLE_PER_KILOGRAM_KELVIN = 'L24'; + + /** + * mole per kilogram bar + */ + public const REC20_MOLE_PER_KILOGRAM_BAR = 'L25'; + + /** + * mole per litre kelvin + */ + public const REC20_MOLE_PER_LITRE_KELVIN = 'L26'; + + /** + * mole per litre bar + */ + public const REC20_MOLE_PER_LITRE_BAR = 'L27'; + + /** + * mole per cubic metre kelvin + */ + public const REC20_MOLE_PER_CUBIC_METRE_KELVIN = 'L28'; + + /** + * mole per cubic metre bar + */ + public const REC20_MOLE_PER_CUBIC_METRE_BAR = 'L29'; + + /** + * mole per minute + */ + public const REC20_MOLE_PER_MINUTE = 'L30'; + + /** + * milliroentgen aequivalent men + */ + public const REC20_MILLIROENTGEN_AEQUIVALENT_MEN = 'L31'; + + /** + * nanogram per kilogram + */ + public const REC20_NANOGRAM_PER_KILOGRAM = 'L32'; + + /** + * ounce (avoirdupois) per day + */ + public const REC20_OUNCE_AVOIRDUPOIS_PER_DAY = 'L33'; + + /** + * ounce (avoirdupois) per hour + */ + public const REC20_OUNCE_AVOIRDUPOIS_PER_HOUR = 'L34'; + + /** + * ounce (avoirdupois) per minute + */ + public const REC20_OUNCE_AVOIRDUPOIS_PER_MINUTE = 'L35'; + + /** + * ounce (avoirdupois) per second + */ + public const REC20_OUNCE_AVOIRDUPOIS_PER_SECOND = 'L36'; + + /** + * ounce (avoirdupois) per gallon (UK) + */ + public const REC20_OUNCE_AVOIRDUPOIS_PER_GALLON_UK = 'L37'; + + /** + * ounce (avoirdupois) per gallon (US) + */ + public const REC20_OUNCE_AVOIRDUPOIS_PER_GALLON_US = 'L38'; + + /** + * ounce (avoirdupois) per cubic inch + */ + public const REC20_OUNCE_AVOIRDUPOIS_PER_CUBIC_INCH = 'L39'; + + /** + * ounce (avoirdupois)-force + */ + public const REC20_OUNCE_AVOIRDUPOISFORCE = 'L40'; + + /** + * ounce (avoirdupois)-force inch + */ + public const REC20_OUNCE_AVOIRDUPOISFORCE_INCH = 'L41'; + + /** + * picosiemens per metre + */ + public const REC20_PICOSIEMENS_PER_METRE = 'L42'; + + /** + * peck (UK) + */ + public const REC20_PECK_UK = 'L43'; + + /** + * peck (UK) per day + */ + public const REC20_PECK_UK_PER_DAY = 'L44'; + + /** + * peck (UK) per hour + */ + public const REC20_PECK_UK_PER_HOUR = 'L45'; + + /** + * peck (UK) per minute + */ + public const REC20_PECK_UK_PER_MINUTE = 'L46'; + + /** + * peck (UK) per second + */ + public const REC20_PECK_UK_PER_SECOND = 'L47'; + + /** + * peck (US dry) per day + */ + public const REC20_PECK_US_DRY_PER_DAY = 'L48'; + + /** + * peck (US dry) per hour + */ + public const REC20_PECK_US_DRY_PER_HOUR = 'L49'; + + /** + * peck (US dry) per minute + */ + public const REC20_PECK_US_DRY_PER_MINUTE = 'L50'; + + /** + * peck (US dry) per second + */ + public const REC20_PECK_US_DRY_PER_SECOND = 'L51'; + + /** + * psi per psi + */ + public const REC20_PSI_PER_PSI = 'L52'; + + /** + * pint (UK) per day + */ + public const REC20_PINT_UK_PER_DAY = 'L53'; + + /** + * pint (UK) per hour + */ + public const REC20_PINT_UK_PER_HOUR = 'L54'; + + /** + * pint (UK) per minute + */ + public const REC20_PINT_UK_PER_MINUTE = 'L55'; + + /** + * pint (UK) per second + */ + public const REC20_PINT_UK_PER_SECOND = 'L56'; + + /** + * pint (US liquid) per day + */ + public const REC20_PINT_US_LIQUID_PER_DAY = 'L57'; + + /** + * pint (US liquid) per hour + */ + public const REC20_PINT_US_LIQUID_PER_HOUR = 'L58'; + + /** + * pint (US liquid) per minute + */ + public const REC20_PINT_US_LIQUID_PER_MINUTE = 'L59'; + + /** + * pint (US liquid) per second + */ + public const REC20_PINT_US_LIQUID_PER_SECOND = 'L60'; + + /** + * slug per day + */ + public const REC20_SLUG_PER_DAY = 'L63'; + + /** + * slug per foot second + */ + public const REC20_SLUG_PER_FOOT_SECOND = 'L64'; + + /** + * slug per cubic foot + */ + public const REC20_SLUG_PER_CUBIC_FOOT = 'L65'; + + /** + * slug per hour + */ + public const REC20_SLUG_PER_HOUR = 'L66'; + + /** + * slug per minute + */ + public const REC20_SLUG_PER_MINUTE = 'L67'; + + /** + * slug per second + */ + public const REC20_SLUG_PER_SECOND = 'L68'; + + /** + * tonne per kelvin + */ + public const REC20_TONNE_PER_KELVIN = 'L69'; + + /** + * tonne per bar + */ + public const REC20_TONNE_PER_BAR = 'L70'; + + /** + * tonne per day + */ + public const REC20_TONNE_PER_DAY = 'L71'; + + /** + * tonne per day kelvin + */ + public const REC20_TONNE_PER_DAY_KELVIN = 'L72'; + + /** + * tonne per day bar + */ + public const REC20_TONNE_PER_DAY_BAR = 'L73'; + + /** + * tonne per hour kelvin + */ + public const REC20_TONNE_PER_HOUR_KELVIN = 'L74'; + + /** + * tonne per hour bar + */ + public const REC20_TONNE_PER_HOUR_BAR = 'L75'; + + /** + * tonne per cubic metre kelvin + */ + public const REC20_TONNE_PER_CUBIC_METRE_KELVIN = 'L76'; + + /** + * tonne per cubic metre bar + */ + public const REC20_TONNE_PER_CUBIC_METRE_BAR = 'L77'; + + /** + * tonne per minute + */ + public const REC20_TONNE_PER_MINUTE = 'L78'; + + /** + * tonne per minute kelvin + */ + public const REC20_TONNE_PER_MINUTE_KELVIN = 'L79'; + + /** + * tonne per minute bar + */ + public const REC20_TONNE_PER_MINUTE_BAR = 'L80'; + + /** + * tonne per second + */ + public const REC20_TONNE_PER_SECOND = 'L81'; + + /** + * tonne per second kelvin + */ + public const REC20_TONNE_PER_SECOND_KELVIN = 'L82'; + + /** + * tonne per second bar + */ + public const REC20_TONNE_PER_SECOND_BAR = 'L83'; + + /** + * ton (UK shipping) + */ + public const REC20_TON_UK_SHIPPING = 'L84'; + + /** + * ton long per day + */ + public const REC20_TON_LONG_PER_DAY = 'L85'; + + /** + * ton (US shipping) + */ + public const REC20_TON_US_SHIPPING = 'L86'; + + /** + * ton short per degree Fahrenheit + */ + public const REC20_TON_SHORT_PER_DEGREE_FAHRENHEIT = 'L87'; + + /** + * ton short per day + */ + public const REC20_TON_SHORT_PER_DAY = 'L88'; + + /** + * ton short per hour degree Fahrenheit + */ + public const REC20_TON_SHORT_PER_HOUR_DEGREE_FAHRENHEIT = 'L89'; + + /** + * ton short per hour psi + */ + public const REC20_TON_SHORT_PER_HOUR_PSI = 'L90'; + + /** + * ton short per psi + */ + public const REC20_TON_SHORT_PER_PSI = 'L91'; + + /** + * ton (UK long) per cubic yard + */ + public const REC20_TON_UK_LONG_PER_CUBIC_YARD = 'L92'; + + /** + * ton (US short) per cubic yard + */ + public const REC20_TON_US_SHORT_PER_CUBIC_YARD = 'L93'; + + /** + * ton-force (US short) + */ + public const REC20_TONFORCE_US_SHORT = 'L94'; + + /** + * common year + */ + public const REC20_COMMON_YEAR = 'L95'; + + /** + * sidereal year + */ + public const REC20_SIDEREAL_YEAR = 'L96'; + + /** + * yard per degree Fahrenheit + */ + public const REC20_YARD_PER_DEGREE_FAHRENHEIT = 'L98'; + + /** + * yard per psi + */ + public const REC20_YARD_PER_PSI = 'L99'; + + /** + * pound per cubic inch + */ + public const REC20_POUND_PER_CUBIC_INCH = 'LA'; + + /** + * lactose excess percentage + */ + public const REC20_LACTOSE_EXCESS_PERCENTAGE = 'LAC'; + + /** + * pound + */ + public const REC20_POUND = 'LBR'; + + /** + * troy pound (US) + */ + public const REC20_TROY_POUND_US = 'LBT'; + + /** + * litre per day + */ + public const REC20_LITRE_PER_DAY = 'LD'; + + /** + * leaf + */ + public const REC20_LEAF = 'LEF'; + + /** + * linear foot + */ + public const REC20_LINEAR_FOOT = 'LF'; + + /** + * labour hour + */ + public const REC20_LABOUR_HOUR = 'LH'; + + /** + * link + */ + public const REC20_LINK = 'LK'; + + /** + * linear metre + */ + public const REC20_LINEAR_METRE = 'LM'; + + /** + * length + */ + public const REC20_LENGTH = 'LN'; + + /** + * lot [unit of procurement] + */ + public const REC20_LOT__UNIT_OF_PROCUREMENT = 'LO'; + + /** + * liquid pound + */ + public const REC20_LIQUID_POUND = 'LP'; + + /** + * litre of pure alcohol + */ + public const REC20_LITRE_OF_PURE_ALCOHOL = 'LPA'; + + /** + * layer + */ + public const REC20_LAYER = 'LR'; + + /** + * lump sum + */ + public const REC20_LUMP_SUM = 'LS'; + + /** + * ton (UK) or long ton (US) + */ + public const REC20_TON_UK_OR_LONG_TON_US = 'LTN'; + + /** + * litre + */ + public const REC20_LITRE = 'LTR'; + + /** + * metric ton, lubricating oil + */ + public const REC20_METRIC_TON_LUBRICATING_OIL = 'LUB'; + + /** + * lumen + */ + public const REC20_LUMEN = 'LUM'; + + /** + * lux + */ + public const REC20_LUX = 'LUX'; + + /** + * linear yard + */ + public const REC20_LINEAR_YARD = 'LY'; + + /** + * milligram per litre + */ + public const REC20_MILLIGRAM_PER_LITRE = 'M1'; + + /** + * reciprocal cubic yard + */ + public const REC20_RECIPROCAL_CUBIC_YARD = 'M10'; + + /** + * cubic yard per degree Fahrenheit + */ + public const REC20_CUBIC_YARD_PER_DEGREE_FAHRENHEIT = 'M11'; + + /** + * cubic yard per day + */ + public const REC20_CUBIC_YARD_PER_DAY = 'M12'; + + /** + * cubic yard per hour + */ + public const REC20_CUBIC_YARD_PER_HOUR = 'M13'; + + /** + * cubic yard per psi + */ + public const REC20_CUBIC_YARD_PER_PSI = 'M14'; + + /** + * cubic yard per minute + */ + public const REC20_CUBIC_YARD_PER_MINUTE = 'M15'; + + /** + * cubic yard per second + */ + public const REC20_CUBIC_YARD_PER_SECOND = 'M16'; + + /** + * kilohertz metre + */ + public const REC20_KILOHERTZ_METRE = 'M17'; + + /** + * gigahertz metre + */ + public const REC20_GIGAHERTZ_METRE = 'M18'; + + /** + * Beaufort + */ + public const REC20_BEAUFORT = 'M19'; + + /** + * reciprocal megakelvin or megakelvin to the power minus one + */ + public const REC20_RECIPROCAL_MEGAKELVIN_OR_MEGAKELVIN_TO_THE_POWER_MINUS_ONE = 'M20'; + + /** + * reciprocal kilovolt - ampere reciprocal hour + */ + public const REC20_RECIPROCAL_KILOVOLT__AMPERE_RECIPROCAL_HOUR = 'M21'; + + /** + * millilitre per square centimetre minute + */ + public const REC20_MILLILITRE_PER_SQUARE_CENTIMETRE_MINUTE = 'M22'; + + /** + * newton per centimetre + */ + public const REC20_NEWTON_PER_CENTIMETRE = 'M23'; + + /** + * ohm kilometre + */ + public const REC20_OHM_KILOMETRE = 'M24'; + + /** + * percent per degree Celsius + */ + public const REC20_PERCENT_PER_DEGREE_CELSIUS = 'M25'; + + /** + * gigaohm per metre + */ + public const REC20_GIGAOHM_PER_METRE = 'M26'; + + /** + * megahertz metre + */ + public const REC20_MEGAHERTZ_METRE = 'M27'; + + /** + * kilogram per kilogram + */ + public const REC20_KILOGRAM_PER_KILOGRAM = 'M29'; + + /** + * reciprocal volt - ampere reciprocal second + */ + public const REC20_RECIPROCAL_VOLT__AMPERE_RECIPROCAL_SECOND = 'M30'; + + /** + * kilogram per kilometre + */ + public const REC20_KILOGRAM_PER_KILOMETRE = 'M31'; + + /** + * pascal second per litre + */ + public const REC20_PASCAL_SECOND_PER_LITRE = 'M32'; + + /** + * millimole per litre + */ + public const REC20_MILLIMOLE_PER_LITRE = 'M33'; + + /** + * newton metre per square metre + */ + public const REC20_NEWTON_METRE_PER_SQUARE_METRE = 'M34'; + + /** + * millivolt - ampere + */ + public const REC20_MILLIVOLT__AMPERE = 'M35'; + + /** + * 30-day month + */ + public const REC20_30DAY_MONTH = 'M36'; + + /** + * actual/360 + */ + public const REC20_ACTUAL_360 = 'M37'; + + /** + * kilometre per second squared + */ + public const REC20_KILOMETRE_PER_SECOND_SQUARED = 'M38'; + + /** + * centimetre per second squared + */ + public const REC20_CENTIMETRE_PER_SECOND_SQUARED = 'M39'; + + /** + * monetary value + */ + public const REC20_MONETARY_VALUE = 'M4'; + + /** + * yard per second squared + */ + public const REC20_YARD_PER_SECOND_SQUARED = 'M40'; + + /** + * millimetre per second squared + */ + public const REC20_MILLIMETRE_PER_SECOND_SQUARED = 'M41'; + + /** + * mile (statute mile) per second squared + */ + public const REC20_MILE_STATUTE_MILE_PER_SECOND_SQUARED = 'M42'; + + /** + * mil + */ + public const REC20_MIL = 'M43'; + + /** + * revolution + */ + public const REC20_REVOLUTION = 'M44'; + + /** + * degree [unit of angle] per second squared + */ + public const REC20_DEGREE_UNIT_OF_ANGLE_PER_SECOND_SQUARED = 'M45'; + + /** + * revolution per minute + */ + public const REC20_REVOLUTION_PER_MINUTE = 'M46'; + + /** + * circular mil + */ + public const REC20_CIRCULAR_MIL = 'M47'; + + /** + * square mile (based on U.S. survey foot) + */ + public const REC20_SQUARE_MILE_BASED_ON_US_SURVEY_FOOT = 'M48'; + + /** + * chain (based on U.S. survey foot) + */ + public const REC20_CHAIN_BASED_ON_US_SURVEY_FOOT = 'M49'; + + /** + * microcurie + */ + public const REC20_MICROCURIE = 'M5'; + + /** + * furlong + */ + public const REC20_FURLONG = 'M50'; + + /** + * foot (U.S. survey) + */ + public const REC20_FOOT_US_SURVEY = 'M51'; + + /** + * mile (based on U.S. survey foot) + */ + public const REC20_MILE_BASED_ON_US_SURVEY_FOOT = 'M52'; + + /** + * metre per pascal + */ + public const REC20_METRE_PER_PASCAL = 'M53'; + + /** + * metre per radiant + */ + public const REC20_METRE_PER_RADIANT = 'M55'; + + /** + * shake + */ + public const REC20_SHAKE = 'M56'; + + /** + * mile per minute + */ + public const REC20_MILE_PER_MINUTE = 'M57'; + + /** + * mile per second + */ + public const REC20_MILE_PER_SECOND = 'M58'; + + /** + * metre per second pascal + */ + public const REC20_METRE_PER_SECOND_PASCAL = 'M59'; + + /** + * metre per hour + */ + public const REC20_METRE_PER_HOUR = 'M60'; + + /** + * inch per year + */ + public const REC20_INCH_PER_YEAR = 'M61'; + + /** + * kilometre per second + */ + public const REC20_KILOMETRE_PER_SECOND = 'M62'; + + /** + * inch per minute + */ + public const REC20_INCH_PER_MINUTE = 'M63'; + + /** + * yard per second + */ + public const REC20_YARD_PER_SECOND = 'M64'; + + /** + * yard per minute + */ + public const REC20_YARD_PER_MINUTE = 'M65'; + + /** + * yard per hour + */ + public const REC20_YARD_PER_HOUR = 'M66'; + + /** + * acre-foot (based on U.S. survey foot) + */ + public const REC20_ACREFOOT_BASED_ON_US_SURVEY_FOOT = 'M67'; + + /** + * cord (128 ft3) + */ + public const REC20_CORD_128_FT3 = 'M68'; + + /** + * cubic mile (UK statute) + */ + public const REC20_CUBIC_MILE_UK_STATUTE = 'M69'; + + /** + * micro-inch + */ + public const REC20_MICROINCH = 'M7'; + + /** + * ton, register + */ + public const REC20_TON_REGISTER = 'M70'; + + /** + * cubic metre per pascal + */ + public const REC20_CUBIC_METRE_PER_PASCAL = 'M71'; + + /** + * bel + */ + public const REC20_BEL = 'M72'; + + /** + * kilogram per cubic metre pascal + */ + public const REC20_KILOGRAM_PER_CUBIC_METRE_PASCAL = 'M73'; + + /** + * kilogram per pascal + */ + public const REC20_KILOGRAM_PER_PASCAL = 'M74'; + + /** + * kilopound-force + */ + public const REC20_KILOPOUNDFORCE = 'M75'; + + /** + * poundal + */ + public const REC20_POUNDAL = 'M76'; + + /** + * kilogram metre per second squared + */ + public const REC20_KILOGRAM_METRE_PER_SECOND_SQUARED = 'M77'; + + /** + * pond + */ + public const REC20_POND = 'M78'; + + /** + * square foot per hour + */ + public const REC20_SQUARE_FOOT_PER_HOUR = 'M79'; + + /** + * stokes per pascal + */ + public const REC20_STOKES_PER_PASCAL = 'M80'; + + /** + * square centimetre per second + */ + public const REC20_SQUARE_CENTIMETRE_PER_SECOND = 'M81'; + + /** + * square metre per second pascal + */ + public const REC20_SQUARE_METRE_PER_SECOND_PASCAL = 'M82'; + + /** + * denier + */ + public const REC20_DENIER = 'M83'; + + /** + * pound per yard + */ + public const REC20_POUND_PER_YARD = 'M84'; + + /** + * ton, assay + */ + public const REC20_TON_ASSAY = 'M85'; + + /** + * pfund + */ + public const REC20_PFUND = 'M86'; + + /** + * kilogram per second pascal + */ + public const REC20_KILOGRAM_PER_SECOND_PASCAL = 'M87'; + + /** + * tonne per month + */ + public const REC20_TONNE_PER_MONTH = 'M88'; + + /** + * tonne per year + */ + public const REC20_TONNE_PER_YEAR = 'M89'; + + /** + * million Btu per 1000 cubic foot + */ + public const REC20_MILLION_BTU_PER_1000_CUBIC_FOOT = 'M9'; + + /** + * kilopound per hour + */ + public const REC20_KILOPOUND_PER_HOUR = 'M90'; + + /** + * pound per pound + */ + public const REC20_POUND_PER_POUND = 'M91'; + + /** + * pound-force foot + */ + public const REC20_POUNDFORCE_FOOT = 'M92'; + + /** + * newton metre per radian + */ + public const REC20_NEWTON_METRE_PER_RADIAN = 'M93'; + + /** + * kilogram metre + */ + public const REC20_KILOGRAM_METRE = 'M94'; + + /** + * poundal foot + */ + public const REC20_POUNDAL_FOOT = 'M95'; + + /** + * poundal inch + */ + public const REC20_POUNDAL_INCH = 'M96'; + + /** + * dyne metre + */ + public const REC20_DYNE_METRE = 'M97'; + + /** + * kilogram centimetre per second + */ + public const REC20_KILOGRAM_CENTIMETRE_PER_SECOND = 'M98'; + + /** + * gram centimetre per second + */ + public const REC20_GRAM_CENTIMETRE_PER_SECOND = 'M99'; + + /** + * megavolt ampere reactive hour + */ + public const REC20_MEGAVOLT_AMPERE_REACTIVE_HOUR = 'MAH'; + + /** + * megalitre + */ + public const REC20_MEGALITRE = 'MAL'; + + /** + * megametre + */ + public const REC20_MEGAMETRE = 'MAM'; + + /** + * megavar + */ + public const REC20_MEGAVAR = 'MAR'; + + /** + * megawatt + */ + public const REC20_MEGAWATT = 'MAW'; + + /** + * thousand standard brick equivalent + */ + public const REC20_THOUSAND_STANDARD_BRICK_EQUIVALENT = 'MBE'; + + /** + * thousand board foot + */ + public const REC20_THOUSAND_BOARD_FOOT = 'MBF'; + + /** + * millibar + */ + public const REC20_MILLIBAR = 'MBR'; + + /** + * microgram + */ + public const REC20_MICROGRAM = 'MC'; + + /** + * millicurie + */ + public const REC20_MILLICURIE = 'MCU'; + + /** + * air dry metric ton + */ + public const REC20_AIR_DRY_METRIC_TON = 'MD'; + + /** + * milligram + */ + public const REC20_MILLIGRAM = 'MGM'; + + /** + * megahertz + */ + public const REC20_MEGAHERTZ = 'MHZ'; + + /** + * square mile (statute mile) + */ + public const REC20_SQUARE_MILE_STATUTE_MILE = 'MIK'; + + /** + * thousand + */ + public const REC20_THOUSAND = 'MIL'; + + /** + * minute [unit of time] + */ + public const REC20_MINUTE_UNIT_OF_TIME = 'MIN'; + + /** + * million + */ + public const REC20_MILLION = 'MIO'; + + /** + * million international unit + */ + public const REC20_MILLION_INTERNATIONAL_UNIT = 'MIU'; + + /** + * milliard + */ + public const REC20_MILLIARD = 'MLD'; + + /** + * millilitre + */ + public const REC20_MILLILITRE = 'MLT'; + + /** + * square millimetre + */ + public const REC20_SQUARE_MILLIMETRE = 'MMK'; + + /** + * cubic millimetre + */ + public const REC20_CUBIC_MILLIMETRE = 'MMQ'; + + /** + * millimetre + */ + public const REC20_MILLIMETRE = 'MMT'; + + /** + * kilogram, dry weight + */ + public const REC20_KILOGRAM_DRY_WEIGHT = 'MND'; + + /** + * month + */ + public const REC20_MONTH = 'MON'; + + /** + * megapascal + */ + public const REC20_MEGAPASCAL = 'MPA'; + + /** + * cubic metre per hour + */ + public const REC20_CUBIC_METRE_PER_HOUR = 'MQH'; + + /** + * cubic metre per second + */ + public const REC20_CUBIC_METRE_PER_SECOND = 'MQS'; + + /** + * metre per second squared + */ + public const REC20_METRE_PER_SECOND_SQUARED = 'MSK'; + + /** + * square metre + */ + public const REC20_SQUARE_METRE = 'MTK'; + + /** + * cubic metre + */ + public const REC20_CUBIC_METRE = 'MTQ'; + + /** + * metre + */ + public const REC20_METRE = 'MTR'; + + /** + * metre per second + */ + public const REC20_METRE_PER_SECOND = 'MTS'; + + /** + * megavolt - ampere + */ + public const REC20_MEGAVOLT__AMPERE = 'MVA'; + + /** + * megawatt hour (1000 kW.h) + */ + public const REC20_MEGAWATT_HOUR_1000KWH = 'MWH'; + + /** + * pen calorie + */ + public const REC20_PEN_CALORIE = 'N1'; + + /** + * pound foot per second + */ + public const REC20_POUND_FOOT_PER_SECOND = 'N10'; + + /** + * pound inch per second + */ + public const REC20_POUND_INCH_PER_SECOND = 'N11'; + + /** + * Pferdestaerke + */ + public const REC20_PFERDESTAERKE = 'N12'; + + /** + * centimetre of mercury (0 ºC) + */ + public const REC20_CENTIMETRE_OF_MERCURY_0_C = 'N13'; + + /** + * centimetre of water (4 ºC) + */ + public const REC20_CENTIMETRE_OF_WATER_4_C = 'N14'; + + /** + * foot of water (39.2 ºF) + */ + public const REC20_FOOT_OF_WATER_392_F = 'N15'; + + /** + * inch of mercury (32 ºF) + */ + public const REC20_INCH_OF_MERCURY_32_F = 'N16'; + + /** + * inch of mercury (60 ºF) + */ + public const REC20_INCH_OF_MERCURY_60_F = 'N17'; + + /** + * inch of water (39.2 ºF) + */ + public const REC20_INCH_OF_WATER_392_F = 'N18'; + + /** + * inch of water (60 ºF) + */ + public const REC20_INCH_OF_WATER_60_F = 'N19'; + + /** + * kip per square inch + */ + public const REC20_KIP_PER_SQUARE_INCH = 'N20'; + + /** + * poundal per square foot + */ + public const REC20_POUNDAL_PER_SQUARE_FOOT = 'N21'; + + /** + * ounce (avoirdupois) per square inch + */ + public const REC20_OUNCE_AVOIRDUPOIS_PER_SQUARE_INCH = 'N22'; + + /** + * conventional metre of water + */ + public const REC20_CONVENTIONAL_METRE_OF_WATER = 'N23'; + + /** + * gram per square millimetre + */ + public const REC20_GRAM_PER_SQUARE_MILLIMETRE = 'N24'; + + /** + * pound per square yard + */ + public const REC20_POUND_PER_SQUARE_YARD = 'N25'; + + /** + * poundal per square inch + */ + public const REC20_POUNDAL_PER_SQUARE_INCH = 'N26'; + + /** + * foot to the fourth power + */ + public const REC20_FOOT_TO_THE_FOURTH_POWER = 'N27'; + + /** + * cubic decimetre per kilogram + */ + public const REC20_CUBIC_DECIMETRE_PER_KILOGRAM = 'N28'; + + /** + * cubic foot per pound + */ + public const REC20_CUBIC_FOOT_PER_POUND = 'N29'; + + /** + * print point + */ + public const REC20_PRINT_POINT = 'N3'; + + /** + * cubic inch per pound + */ + public const REC20_CUBIC_INCH_PER_POUND = 'N30'; + + /** + * kilonewton per metre + */ + public const REC20_KILONEWTON_PER_METRE = 'N31'; + + /** + * poundal per inch + */ + public const REC20_POUNDAL_PER_INCH = 'N32'; + + /** + * pound-force per yard + */ + public const REC20_POUNDFORCE_PER_YARD = 'N33'; + + /** + * poundal second per square foot + */ + public const REC20_POUNDAL_SECOND_PER_SQUARE_FOOT = 'N34'; + + /** + * poise per pascal + */ + public const REC20_POISE_PER_PASCAL = 'N35'; + + /** + * newton second per square metre + */ + public const REC20_NEWTON_SECOND_PER_SQUARE_METRE = 'N36'; + + /** + * kilogram per metre second + */ + public const REC20_KILOGRAM_PER_METRE_SECOND = 'N37'; + + /** + * kilogram per metre minute + */ + public const REC20_KILOGRAM_PER_METRE_MINUTE = 'N38'; + + /** + * kilogram per metre day + */ + public const REC20_KILOGRAM_PER_METRE_DAY = 'N39'; + + /** + * kilogram per metre hour + */ + public const REC20_KILOGRAM_PER_METRE_HOUR = 'N40'; + + /** + * gram per centimetre second + */ + public const REC20_GRAM_PER_CENTIMETRE_SECOND = 'N41'; + + /** + * poundal second per square inch + */ + public const REC20_POUNDAL_SECOND_PER_SQUARE_INCH = 'N42'; + + /** + * pound per foot minute + */ + public const REC20_POUND_PER_FOOT_MINUTE = 'N43'; + + /** + * pound per foot day + */ + public const REC20_POUND_PER_FOOT_DAY = 'N44'; + + /** + * cubic metre per second pascal + */ + public const REC20_CUBIC_METRE_PER_SECOND_PASCAL = 'N45'; + + /** + * foot poundal + */ + public const REC20_FOOT_POUNDAL = 'N46'; + + /** + * inch poundal + */ + public const REC20_INCH_POUNDAL = 'N47'; + + /** + * watt per square centimetre + */ + public const REC20_WATT_PER_SQUARE_CENTIMETRE = 'N48'; + + /** + * watt per square inch + */ + public const REC20_WATT_PER_SQUARE_INCH = 'N49'; + + /** + * British thermal unit (international table) per square foot hour + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_FOOT_HOUR = 'N50'; + + /** + * British thermal unit (thermochemical) per square foot hour + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SQUARE_FOOT_HOUR = 'N51'; + + /** + * British thermal unit (thermochemical) per square foot minute + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SQUARE_FOOT_MINUTE = 'N52'; + + /** + * British thermal unit (international table) per square foot second + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_FOOT_SECOND = 'N53'; + + /** + * British thermal unit (thermochemical) per square foot second + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SQUARE_FOOT_SECOND = 'N54'; + + /** + * British thermal unit (international table) per square inch second + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_INCH_SECOND = 'N55'; + + /** + * calorie (thermochemical) per square centimetre minute + */ + public const REC20_CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE_MINUTE = 'N56'; + + /** + * calorie (thermochemical) per square centimetre second + */ + public const REC20_CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE_SECOND = 'N57'; + + /** + * British thermal unit (international table) per cubic foot + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_CUBIC_FOOT = 'N58'; + + /** + * British thermal unit (thermochemical) per cubic foot + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_CUBIC_FOOT = 'N59'; + + /** + * British thermal unit (international table) per degree Fahrenheit + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_DEGREE_FAHRENHEIT = 'N60'; + + /** + * British thermal unit (thermochemical) per degree Fahrenheit + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_DEGREE_FAHRENHEIT = 'N61'; + + /** + * British thermal unit (international table) per degree Rankine + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_DEGREE_RANKINE = 'N62'; + + /** + * British thermal unit (thermochemical) per degree Rankine + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_DEGREE_RANKINE = 'N63'; + + /** + * British thermal unit (thermochemical) per pound degree Rankine + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_POUND_DEGREE_RANKINE = 'N64'; + + /** + * kilocalorie (international table) per gram kelvin + */ + public const REC20_KILOCALORIE_INTERNATIONAL_TABLE_PER_GRAM_KELVIN = 'N65'; + + /** + * British thermal unit (39 ºF) + */ + public const REC20_BRITISH_THERMAL_UNIT_39_F = 'N66'; + + /** + * British thermal unit (59 ºF) + */ + public const REC20_BRITISH_THERMAL_UNIT_59_F = 'N67'; + + /** + * British thermal unit (60 ºF) + */ + public const REC20_BRITISH_THERMAL_UNIT_60_F = 'N68'; + + /** + * calorie (20 ºC) + */ + public const REC20_CALORIE_20_C = 'N69'; + + /** + * quad (1015 BtuIT) + */ + public const REC20_QUAD_1015_BTUIT = 'N70'; + + /** + * therm (EC) + */ + public const REC20_THERM_EC = 'N71'; + + /** + * therm (U.S.) + */ + public const REC20_THERM_US = 'N72'; + + /** + * British thermal unit (thermochemical) per pound + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_POUND = 'N73'; + + /** + * British thermal unit (international table) per hour square foot degree + * Fahrenheit + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT = 'N74'; + + /** + * British thermal unit (thermochemical) per hour square foot degree + * Fahrenheit + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT = 'N75'; + + /** + * British thermal unit (international table) per second square foot + * degree Fahrenheit + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SECOND_SQUARE_FOOT_DEGREE_FAHRENHEIT = 'N76'; + + /** + * British thermal unit (thermochemical) per second square foot degree + * Fahrenheit + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SECOND_SQUARE_FOOT_DEGREE_FAHRENHEIT = 'N77'; + + /** + * kilowatt per square metre kelvin + */ + public const REC20_KILOWATT_PER_SQUARE_METRE_KELVIN = 'N78'; + + /** + * kelvin per pascal + */ + public const REC20_KELVIN_PER_PASCAL = 'N79'; + + /** + * watt per metre degree Celsius + */ + public const REC20_WATT_PER_METRE_DEGREE_CELSIUS = 'N80'; + + /** + * kilowatt per metre kelvin + */ + public const REC20_KILOWATT_PER_METRE_KELVIN = 'N81'; + + /** + * kilowatt per metre degree Celsius + */ + public const REC20_KILOWATT_PER_METRE_DEGREE_CELSIUS = 'N82'; + + /** + * metre per degree Celcius metre + */ + public const REC20_METRE_PER_DEGREE_CELCIUS_METRE = 'N83'; + + /** + * degree Fahrenheit hour per British thermal unit (international table) + */ + public const REC20_DEGREE_FAHRENHEIT_HOUR_PER_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE = 'N84'; + + /** + * degree Fahrenheit hour per British thermal unit (thermochemical) + */ + public const REC20_DEGREE_FAHRENHEIT_HOUR_PER_BRITISH_THERMAL_UNIT_THERMOCHEMICAL = 'N85'; + + /** + * degree Fahrenheit second per British thermal unit (international + * table) + */ + public const REC20_DEGREE_FAHRENHEIT_SECOND_PER_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE = 'N86'; + + /** + * degree Fahrenheit second per British thermal unit (thermochemical) + */ + public const REC20_DEGREE_FAHRENHEIT_SECOND_PER_BRITISH_THERMAL_UNIT_THERMOCHEMICAL = 'N87'; + + /** + * degree Fahrenheit hour square foot per British thermal unit + * (international table) inch + */ + public 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 + */ + public const REC20_DEGREE_FAHRENHEIT_HOUR_SQUARE_FOOT_PER_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_INCH = 'N89'; + + /** + * kilofarad + */ + public const REC20_KILOFARAD = 'N90'; + + /** + * reciprocal joule + */ + public const REC20_RECIPROCAL_JOULE = 'N91'; + + /** + * picosiemens + */ + public const REC20_PICOSIEMENS = 'N92'; + + /** + * ampere per pascal + */ + public const REC20_AMPERE_PER_PASCAL = 'N93'; + + /** + * franklin + */ + public const REC20_FRANKLIN = 'N94'; + + /** + * ampere minute + */ + public const REC20_AMPERE_MINUTE = 'N95'; + + /** + * biot + */ + public const REC20_BIOT = 'N96'; + + /** + * gilbert + */ + public const REC20_GILBERT = 'N97'; + + /** + * volt per pascal + */ + public const REC20_VOLT_PER_PASCAL = 'N98'; + + /** + * picovolt + */ + public const REC20_PICOVOLT = 'N99'; + + /** + * milligram per kilogram + */ + public const REC20_MILLIGRAM_PER_KILOGRAM = 'NA'; + + /** + * number of articles + */ + public const REC20_NUMBER_OF_ARTICLES = 'NAR'; + + /** + * number of cells + */ + public const REC20_NUMBER_OF_CELLS = 'NCL'; + + /** + * newton + */ + public const REC20_NEWTON = 'NEW'; + + /** + * message + */ + public const REC20_MESSAGE = 'NF'; + + /** + * nil + */ + public const REC20_NIL = 'NIL'; + + /** + * number of international units + */ + public const REC20_NUMBER_OF_INTERNATIONAL_UNITS = 'NIU'; + + /** + * load + */ + public const REC20_LOAD = 'NL'; + + /** + * Normalised cubic metre + */ + public const REC20_NORMALISED_CUBIC_METRE = 'NM3'; + + /** + * nautical mile + */ + public const REC20_NAUTICAL_MILE = 'NMI'; + + /** + * number of packs + */ + public const REC20_NUMBER_OF_PACKS = 'NMP'; + + /** + * number of parts + */ + public const REC20_NUMBER_OF_PARTS = 'NPT'; + + /** + * net ton + */ + public const REC20_NET_TON = 'NT'; + + /** + * newton metre + */ + public const REC20_NEWTON_METRE = 'NU'; + + /** + * part per thousand + */ + public const REC20_PART_PER_THOUSAND = 'NX'; + + /** + * panel + */ + public const REC20_PANEL = 'OA'; + + /** + * ozone depletion equivalent + */ + public const REC20_OZONE_DEPLETION_EQUIVALENT = 'ODE'; + + /** + * ODS Grams + */ + public const REC20_ODS_GRAMS = 'ODG'; + + /** + * ODS Kilograms + */ + public const REC20_ODS_KILOGRAMS = 'ODK'; + + /** + * ODS Milligrams + */ + public const REC20_ODS_MILLIGRAMS = 'ODM'; + + /** + * ohm + */ + public const REC20_OHM = 'OHM'; + + /** + * ounce per square yard + */ + public const REC20_OUNCE_PER_SQUARE_YARD = 'ON'; + + /** + * ounce (avoirdupois) + */ + public const REC20_OUNCE_AVOIRDUPOIS = 'ONZ'; + + /** + * oscillations per minute + */ + public const REC20_OSCILLATIONS_PER_MINUTE = 'OPM'; + + /** + * overtime hour + */ + public const REC20_OVERTIME_HOUR = 'OT'; + + /** + * fluid ounce (US) + */ + public const REC20_FLUID_OUNCE_US = 'OZA'; + + /** + * fluid ounce (UK) + */ + public const REC20_FLUID_OUNCE_UK = 'OZI'; + + /** + * percent + */ + public const REC20_PERCENT = 'P1'; + + /** + * coulomb per metre + */ + public const REC20_COULOMB_PER_METRE = 'P10'; + + /** + * kiloweber + */ + public const REC20_KILOWEBER = 'P11'; + + /** + * gamma + */ + public const REC20_GAMMA = 'P12'; + + /** + * kilotesla + */ + public const REC20_KILOTESLA = 'P13'; + + /** + * joule per second + */ + public const REC20_JOULE_PER_SECOND = 'P14'; + + /** + * joule per minute + */ + public const REC20_JOULE_PER_MINUTE = 'P15'; + + /** + * joule per hour + */ + public const REC20_JOULE_PER_HOUR = 'P16'; + + /** + * joule per day + */ + public const REC20_JOULE_PER_DAY = 'P17'; + + /** + * kilojoule per second + */ + public const REC20_KILOJOULE_PER_SECOND = 'P18'; + + /** + * kilojoule per minute + */ + public const REC20_KILOJOULE_PER_MINUTE = 'P19'; + + /** + * pound per foot + */ + public const REC20_POUND_PER_FOOT = 'P2'; + + /** + * kilojoule per hour + */ + public const REC20_KILOJOULE_PER_HOUR = 'P20'; + + /** + * kilojoule per day + */ + public const REC20_KILOJOULE_PER_DAY = 'P21'; + + /** + * nanoohm + */ + public const REC20_NANOOHM = 'P22'; + + /** + * ohm circular-mil per foot + */ + public const REC20_OHM_CIRCULARMIL_PER_FOOT = 'P23'; + + /** + * kilohenry + */ + public const REC20_KILOHENRY = 'P24'; + + /** + * lumen per square foot + */ + public const REC20_LUMEN_PER_SQUARE_FOOT = 'P25'; + + /** + * phot + */ + public const REC20_PHOT = 'P26'; + + /** + * footcandle + */ + public const REC20_FOOTCANDLE = 'P27'; + + /** + * candela per square inch + */ + public const REC20_CANDELA_PER_SQUARE_INCH = 'P28'; + + /** + * footlambert + */ + public const REC20_FOOTLAMBERT = 'P29'; + + /** + * lambert + */ + public const REC20_LAMBERT = 'P30'; + + /** + * stilb + */ + public const REC20_STILB = 'P31'; + + /** + * candela per square foot + */ + public const REC20_CANDELA_PER_SQUARE_FOOT = 'P32'; + + /** + * kilocandela + */ + public const REC20_KILOCANDELA = 'P33'; + + /** + * millicandela + */ + public const REC20_MILLICANDELA = 'P34'; + + /** + * Hefner-Kerze + */ + public const REC20_HEFNERKERZE = 'P35'; + + /** + * international candle + */ + public const REC20_INTERNATIONAL_CANDLE = 'P36'; + + /** + * British thermal unit (international table) per square foot + */ + public const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_FOOT = 'P37'; + + /** + * British thermal unit (thermochemical) per square foot + */ + public const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SQUARE_FOOT = 'P38'; + + /** + * calorie (thermochemical) per square centimetre + */ + public const REC20_CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE = 'P39'; + + /** + * langley + */ + public const REC20_LANGLEY = 'P40'; + + /** + * decade (logarithmic) + */ + public const REC20_DECADE_LOGARITHMIC = 'P41'; + + /** + * pascal squared second + */ + public const REC20_PASCAL_SQUARED_SECOND = 'P42'; + + /** + * bel per metre + */ + public const REC20_BEL_PER_METRE = 'P43'; + + /** + * pound mole + */ + public const REC20_POUND_MOLE = 'P44'; + + /** + * pound mole per second + */ + public const REC20_POUND_MOLE_PER_SECOND = 'P45'; + + /** + * pound mole per minute + */ + public const REC20_POUND_MOLE_PER_MINUTE = 'P46'; + + /** + * kilomole per kilogram + */ + public const REC20_KILOMOLE_PER_KILOGRAM = 'P47'; + + /** + * pound mole per pound + */ + public const REC20_POUND_MOLE_PER_POUND = 'P48'; + + /** + * newton square metre per ampere + */ + public const REC20_NEWTON_SQUARE_METRE_PER_AMPERE = 'P49'; + + /** + * five pack + */ + public const REC20_FIVE_PACK = 'P5'; + + /** + * weber metre + */ + public const REC20_WEBER_METRE = 'P50'; + + /** + * mol per kilogram pascal + */ + public const REC20_MOL_PER_KILOGRAM_PASCAL = 'P51'; + + /** + * mol per cubic metre pascal + */ + public const REC20_MOL_PER_CUBIC_METRE_PASCAL = 'P52'; + + /** + * unit pole + */ + public const REC20_UNIT_POLE = 'P53'; + + /** + * milligray per second + */ + public const REC20_MILLIGRAY_PER_SECOND = 'P54'; + + /** + * microgray per second + */ + public const REC20_MICROGRAY_PER_SECOND = 'P55'; + + /** + * nanogray per second + */ + public const REC20_NANOGRAY_PER_SECOND = 'P56'; + + /** + * gray per minute + */ + public const REC20_GRAY_PER_MINUTE = 'P57'; + + /** + * milligray per minute + */ + public const REC20_MILLIGRAY_PER_MINUTE = 'P58'; + + /** + * microgray per minute + */ + public const REC20_MICROGRAY_PER_MINUTE = 'P59'; + + /** + * nanogray per minute + */ + public const REC20_NANOGRAY_PER_MINUTE = 'P60'; + + /** + * gray per hour + */ + public const REC20_GRAY_PER_HOUR = 'P61'; + + /** + * milligray per hour + */ + public const REC20_MILLIGRAY_PER_HOUR = 'P62'; + + /** + * microgray per hour + */ + public const REC20_MICROGRAY_PER_HOUR = 'P63'; + + /** + * nanogray per hour + */ + public const REC20_NANOGRAY_PER_HOUR = 'P64'; + + /** + * sievert per second + */ + public const REC20_SIEVERT_PER_SECOND = 'P65'; + + /** + * millisievert per second + */ + public const REC20_MILLISIEVERT_PER_SECOND = 'P66'; + + /** + * microsievert per second + */ + public const REC20_MICROSIEVERT_PER_SECOND = 'P67'; + + /** + * nanosievert per second + */ + public const REC20_NANOSIEVERT_PER_SECOND = 'P68'; + + /** + * rem per second + */ + public const REC20_REM_PER_SECOND = 'P69'; + + /** + * sievert per hour + */ + public const REC20_SIEVERT_PER_HOUR = 'P70'; + + /** + * millisievert per hour + */ + public const REC20_MILLISIEVERT_PER_HOUR = 'P71'; + + /** + * microsievert per hour + */ + public const REC20_MICROSIEVERT_PER_HOUR = 'P72'; + + /** + * nanosievert per hour + */ + public const REC20_NANOSIEVERT_PER_HOUR = 'P73'; + + /** + * sievert per minute + */ + public const REC20_SIEVERT_PER_MINUTE = 'P74'; + + /** + * millisievert per minute + */ + public const REC20_MILLISIEVERT_PER_MINUTE = 'P75'; + + /** + * microsievert per minute + */ + public const REC20_MICROSIEVERT_PER_MINUTE = 'P76'; + + /** + * nanosievert per minute + */ + public const REC20_NANOSIEVERT_PER_MINUTE = 'P77'; + + /** + * reciprocal square inch + */ + public const REC20_RECIPROCAL_SQUARE_INCH = 'P78'; + + /** + * pascal square metre per kilogram + */ + public const REC20_PASCAL_SQUARE_METRE_PER_KILOGRAM = 'P79'; + + /** + * millipascal per metre + */ + public const REC20_MILLIPASCAL_PER_METRE = 'P80'; + + /** + * kilopascal per metre + */ + public const REC20_KILOPASCAL_PER_METRE = 'P81'; + + /** + * hectopascal per metre + */ + public const REC20_HECTOPASCAL_PER_METRE = 'P82'; + + /** + * standard atmosphere per metre + */ + public const REC20_STANDARD_ATMOSPHERE_PER_METRE = 'P83'; + + /** + * technical atmosphere per metre + */ + public const REC20_TECHNICAL_ATMOSPHERE_PER_METRE = 'P84'; + + /** + * torr per metre + */ + public const REC20_TORR_PER_METRE = 'P85'; + + /** + * psi per inch + */ + public const REC20_PSI_PER_INCH = 'P86'; + + /** + * cubic metre per second square metre + */ + public const REC20_CUBIC_METRE_PER_SECOND_SQUARE_METRE = 'P87'; + + /** + * rhe + */ + public const REC20_RHE = 'P88'; + + /** + * pound-force foot per inch + */ + public const REC20_POUNDFORCE_FOOT_PER_INCH = 'P89'; + + /** + * pound-force inch per inch + */ + public const REC20_POUNDFORCE_INCH_PER_INCH = 'P90'; + + /** + * perm (0 ºC) + */ + public const REC20_PERM_0_C = 'P91'; + + /** + * perm (23 ºC) + */ + public const REC20_PERM_23_C = 'P92'; + + /** + * byte per second + */ + public const REC20_BYTE_PER_SECOND = 'P93'; + + /** + * kilobyte per second + */ + public const REC20_KILOBYTE_PER_SECOND = 'P94'; + + /** + * megabyte per second + */ + public const REC20_MEGABYTE_PER_SECOND = 'P95'; + + /** + * reciprocal volt + */ + public const REC20_RECIPROCAL_VOLT = 'P96'; + + /** + * reciprocal radian + */ + public const REC20_RECIPROCAL_RADIAN = 'P97'; + + /** + * pascal to the power sum of stoichiometric numbers + */ + public const REC20_PASCAL_TO_THE_POWER_SUM_OF_STOICHIOMETRIC_NUMBERS = 'P98'; + + /** + * mole per cubiv metre to the power sum of stoichiometric numbers + */ + public const REC20_MOLE_PER_CUBIV_METRE_TO_THE_POWER_SUM_OF_STOICHIOMETRIC_NUMBERS = 'P99'; + + /** + * pascal + */ + public const REC20_PASCAL = 'PAL'; + + /** + * pad + */ + public const REC20_PAD = 'PD'; + + /** + * proof litre + */ + public const REC20_PROOF_LITRE = 'PFL'; + + /** + * proof gallon + */ + public const REC20_PROOF_GALLON = 'PGL'; + + /** + * pitch + */ + public const REC20_PITCH = 'PI'; + + /** + * degree Plato + */ + public const REC20_DEGREE_PLATO = 'PLA'; + + /** + * pound per inch of length + */ + public const REC20_POUND_PER_INCH_OF_LENGTH = 'PO'; + + /** + * page per inch + */ + public const REC20_PAGE_PER_INCH = 'PQ'; + + /** + * pair + */ + public const REC20_PAIR = 'PR'; + + /** + * pound-force per square inch + */ + public const REC20_POUNDFORCE_PER_SQUARE_INCH = 'PS'; + + /** + * dry pint (US) + */ + public const REC20_DRY_PINT_US = 'PTD'; + + /** + * pint (UK) + */ + public const REC20_PINT_UK = 'PTI'; + + /** + * liquid pint (US) + */ + public const REC20_LIQUID_PINT_US = 'PTL'; + + /** + * portion + */ + public const REC20_PORTION = 'PTN'; + + /** + * joule per tesla + */ + public const REC20_JOULE_PER_TESLA = 'Q10'; + + /** + * erlang + */ + public const REC20_ERLANG = 'Q11'; + + /** + * octet + */ + public const REC20_OCTET = 'Q12'; + + /** + * octet per second + */ + public const REC20_OCTET_PER_SECOND = 'Q13'; + + /** + * shannon + */ + public const REC20_SHANNON = 'Q14'; + + /** + * hartley + */ + public const REC20_HARTLEY = 'Q15'; + + /** + * natural unit of information + */ + public const REC20_NATURAL_UNIT_OF_INFORMATION = 'Q16'; + + /** + * shannon per second + */ + public const REC20_SHANNON_PER_SECOND = 'Q17'; + + /** + * hartley per second + */ + public const REC20_HARTLEY_PER_SECOND = 'Q18'; + + /** + * natural unit of information per second + */ + public const REC20_NATURAL_UNIT_OF_INFORMATION_PER_SECOND = 'Q19'; + + /** + * second per kilogramm + */ + public const REC20_SECOND_PER_KILOGRAMM = 'Q20'; + + /** + * watt square metre + */ + public const REC20_WATT_SQUARE_METRE = 'Q21'; + + /** + * second per radian cubic metre + */ + public const REC20_SECOND_PER_RADIAN_CUBIC_METRE = 'Q22'; + + /** + * weber to the power minus one + */ + public const REC20_WEBER_TO_THE_POWER_MINUS_ONE = 'Q23'; + + /** + * reciprocal inch + */ + public const REC20_RECIPROCAL_INCH = 'Q24'; + + /** + * dioptre + */ + public const REC20_DIOPTRE = 'Q25'; + + /** + * one per one + */ + public const REC20_ONE_PER_ONE = 'Q26'; + + /** + * newton metre per metre + */ + public const REC20_NEWTON_METRE_PER_METRE = 'Q27'; + + /** + * kilogram per square metre pascal second + */ + public const REC20_KILOGRAM_PER_SQUARE_METRE_PASCAL_SECOND = 'Q28'; + + /** + * microgram per hectogram + */ + public const REC20_MICROGRAM_PER_HECTOGRAM = 'Q29'; + + /** + * pH (potential of Hydrogen) + */ + public const REC20_PH_POTENTIAL_OF_HYDROGEN = 'Q30'; + + /** + * kilojoule per gram + */ + public const REC20_KILOJOULE_PER_GRAM = 'Q31'; + + /** + * femtolitre + */ + public const REC20_FEMTOLITRE = 'Q32'; + + /** + * picolitre + */ + public const REC20_PICOLITRE = 'Q33'; + + /** + * nanolitre + */ + public const REC20_NANOLITRE = 'Q34'; + + /** + * megawatts per minute + */ + public const REC20_MEGAWATTS_PER_MINUTE = 'Q35'; + + /** + * square metre per cubic metre + */ + public const REC20_SQUARE_METRE_PER_CUBIC_METRE = 'Q36'; + + /** + * Standard cubic metre per day + */ + public const REC20_STANDARD_CUBIC_METRE_PER_DAY = 'Q37'; + + /** + * Standard cubic metre per hour + */ + public const REC20_STANDARD_CUBIC_METRE_PER_HOUR = 'Q38'; + + /** + * Normalized cubic metre per day + */ + public const REC20_NORMALIZED_CUBIC_METRE_PER_DAY = 'Q39'; + + /** + * Normalized cubic metre per hour + */ + public const REC20_NORMALIZED_CUBIC_METRE_PER_HOUR = 'Q40'; + + /** + * Joule per normalised cubic metre + */ + public const REC20_JOULE_PER_NORMALISED_CUBIC_METRE = 'Q41'; + + /** + * Joule per standard cubic metre + */ + public const REC20_JOULE_PER_STANDARD_CUBIC_METRE = 'Q42'; + + /** + * meal + */ + public const REC20_MEAL = 'Q3'; + + /** + * page - facsimile + */ + public const REC20_PAGE__FACSIMILE = 'QA'; + + /** + * quarter (of a year) + */ + public const REC20_QUARTER_OF_A_YEAR = 'QAN'; + + /** + * page - hardcopy + */ + public const REC20_PAGE__HARDCOPY = 'QB'; + + /** + * quire + */ + public const REC20_QUIRE = 'QR'; + + /** + * dry quart (US) + */ + public const REC20_DRY_QUART_US = 'QTD'; + + /** + * quart (UK) + */ + public const REC20_QUART_UK = 'QTI'; + + /** + * liquid quart (US) + */ + public const REC20_LIQUID_QUART_US = 'QTL'; + + /** + * quarter (UK) + */ + public const REC20_QUARTER_UK = 'QTR'; + + /** + * pica + */ + public const REC20_PICA = 'R1'; + + /** + * thousand cubic metre + */ + public const REC20_THOUSAND_CUBIC_METRE = 'R9'; + + /** + * running or operating hour + */ + public const REC20_RUNNING_OR_OPERATING_HOUR = 'RH'; + + /** + * ream + */ + public const REC20_REAM = 'RM'; + + /** + * room + */ + public const REC20_ROOM = 'ROM'; + + /** + * pound per ream + */ + public const REC20_POUND_PER_REAM = 'RP'; + + /** + * revolutions per minute + */ + public const REC20_REVOLUTIONS_PER_MINUTE = 'RPM'; + + /** + * revolutions per second + */ + public const REC20_REVOLUTIONS_PER_SECOND = 'RPS'; + + /** + * revenue ton mile + */ + public const REC20_REVENUE_TON_MILE = 'RT'; + + /** + * square foot per second + */ + public const REC20_SQUARE_FOOT_PER_SECOND = 'S3'; + + /** + * square metre per second + */ + public const REC20_SQUARE_METRE_PER_SECOND = 'S4'; + + /** + * half year (6 months) + */ + public const REC20_HALF_YEAR_6_MONTHS = 'SAN'; + + /** + * score + */ + public const REC20_SCORE = 'SCO'; + + /** + * scruple + */ + public const REC20_SCRUPLE = 'SCR'; + + /** + * second [unit of time] + */ + public const REC20_SECOND_UNIT_OF_TIME = 'SEC'; + + /** + * set + */ + public const REC20_SET = 'SET'; + + /** + * segment + */ + public const REC20_SEGMENT = 'SG'; + + /** + * siemens + */ + public const REC20_SIEMENS = 'SIE'; + + /** + * Standard cubic metre + */ + public const REC20_STANDARD_CUBIC_METRE = 'SM3'; + + /** + * mile (statute mile) + */ + public const REC20_MILE_STATUTE_MILE = 'SMI'; + + /** + * square + */ + public const REC20_SQUARE = 'SQ'; + + /** + * square, roofing + */ + public const REC20_SQUARE_ROOFING = 'SQR'; + + /** + * strip + */ + public const REC20_STRIP = 'SR'; + + /** + * stick + */ + public const REC20_STICK = 'STC'; + + /** + * stone (UK) + */ + public const REC20_STONE_UK = 'STI'; + + /** + * stick, cigarette + */ + public const REC20_STICK_CIGARETTE = 'STK'; + + /** + * standard litre + */ + public const REC20_STANDARD_LITRE = 'STL'; + + /** + * ton (US) or short ton (UK/US) + */ + public const REC20_TON_US_OR_SHORT_TON_UK_US = 'STN'; + + /** + * straw + */ + public const REC20_STRAW = 'STW'; + + /** + * skein + */ + public const REC20_SKEIN = 'SW'; + + /** + * shipment + */ + public const REC20_SHIPMENT = 'SX'; + + /** + * syringe + */ + public const REC20_SYRINGE = 'SYR'; + + /** + * telecommunication line in service + */ + public const REC20_TELECOMMUNICATION_LINE_IN_SERVICE = 'T0'; + + /** + * thousand piece + */ + public const REC20_THOUSAND_PIECE = 'T3'; + + /** + * kiloampere hour (thousand ampere hour) + */ + public const REC20_KILOAMPERE_HOUR_THOUSAND_AMPERE_HOUR = 'TAH'; + + /** + * total acid number + */ + public const REC20_TOTAL_ACID_NUMBER = 'TAN'; + + /** + * thousand square inch + */ + public const REC20_THOUSAND_SQUARE_INCH = 'TI'; + + /** + * metric ton, including container + */ + public const REC20_METRIC_TON_INCLUDING_CONTAINER = 'TIC'; + + /** + * metric ton, including inner packaging + */ + public const REC20_METRIC_TON_INCLUDING_INNER_PACKAGING = 'TIP'; + + /** + * tonne kilometre + */ + public const REC20_TONNE_KILOMETRE = 'TKM'; + + /** + * kilogram of imported meat, less offal + */ + public const REC20_KILOGRAM_OF_IMPORTED_MEAT_LESS_OFFAL = 'TMS'; + + /** + * tonne (metric ton) + */ + public const REC20_TONNE_METRIC_TON = 'TNE'; + + /** + * ten pack + */ + public const REC20_TEN_PACK = 'TP'; + + /** + * teeth per inch + */ + public const REC20_TEETH_PER_INCH = 'TPI'; + + /** + * ten pair + */ + public const REC20_TEN_PAIR = 'TPR'; + + /** + * thousand cubic metre per day + */ + public const REC20_THOUSAND_CUBIC_METRE_PER_DAY = 'TQD'; + + /** + * trillion (EUR) + */ + public const REC20_TRILLION_EUR = 'TRL'; + + /** + * ten set + */ + public const REC20_TEN_SET = 'TST'; + + /** + * ten thousand sticks + */ + public const REC20_TEN_THOUSAND_STICKS = 'TTS'; + + /** + * treatment + */ + public const REC20_TREATMENT = 'U1'; + + /** + * tablet + */ + public const REC20_TABLET = 'U2'; + + /** + * telecommunication line in service average + */ + public const REC20_TELECOMMUNICATION_LINE_IN_SERVICE_AVERAGE = 'UB'; + + /** + * telecommunication port + */ + public const REC20_TELECOMMUNICATION_PORT = 'UC'; + + /** + * volt - ampere per kilogram + */ + public const REC20_VOLT__AMPERE_PER_KILOGRAM = 'VA'; + + /** + * volt + */ + public const REC20_VOLT = 'VLT'; + + /** + * percent volume + */ + public const REC20_PERCENT_VOLUME = 'VP'; + + /** + * wet kilo + */ + public const REC20_WET_KILO = 'W2'; + + /** + * watt per kilogram + */ + public const REC20_WATT_PER_KILOGRAM = 'WA'; + + /** + * wet pound + */ + public const REC20_WET_POUND = 'WB'; + + /** + * cord + */ + public const REC20_CORD = 'WCD'; + + /** + * wet ton + */ + public const REC20_WET_TON = 'WE'; + + /** + * weber + */ + public const REC20_WEBER = 'WEB'; + + /** + * week + */ + public const REC20_WEEK = 'WEE'; + + /** + * wine gallon + */ + public const REC20_WINE_GALLON = 'WG'; + + /** + * watt hour + */ + public const REC20_WATT_HOUR = 'WHR'; + + /** + * working month + */ + public const REC20_WORKING_MONTH = 'WM'; + + /** + * standard + */ + public const REC20_STANDARD = 'WSD'; + + /** + * watt + */ + public const REC20_WATT = 'WTT'; + + /** + * Gunter's chain + */ + public const REC20_GUNTERS_CHAIN = 'X1'; + + /** + * square yard + */ + public const REC20_SQUARE_YARD = 'YDK'; + + /** + * cubic yard + */ + public const REC20_CUBIC_YARD = 'YDQ'; + + /** + * yard + */ + public const REC20_YARD = 'YRD'; + + /** + * hanging container + */ + public const REC20_HANGING_CONTAINER = 'Z11'; + + /** + * page + */ + public const REC20_PAGE = 'ZP'; + + /** + * mutually defined + */ + public const REC20_MUTUALLY_DEFINED = 'ZZ'; + + /** + * Drum, steel + */ + public const REC21_DRUM_STEEL = 'X1A'; + + /** + * Drum, aluminium + */ + public const REC21_DRUM_ALUMINIUM = 'X1B'; + + /** + * Drum, plywood + */ + public const REC21_DRUM_PLYWOOD = 'X1D'; + + /** + * Container, flexible + */ + public const REC21_CONTAINER_FLEXIBLE = 'X1F'; + + /** + * Drum, fibre + */ + public const REC21_DRUM_FIBRE = 'X1G'; + + /** + * Drum, wooden + */ + public const REC21_DRUM_WOODEN = 'X1W'; + + /** + * Barrel, wooden + */ + public const REC21_BARREL_WOODEN = 'X2C'; + + /** + * Jerrican, steel + */ + public const REC21_JERRICAN_STEEL = 'X3A'; + + /** + * Jerrican, plastic + */ + public const REC21_JERRICAN_PLASTIC = 'X3H'; + + /** + * Bag, super bulk + */ + public const REC21_BAG_SUPER_BULK = 'X43'; + + /** + * Bag, polybag + */ + public const REC21_BAG_POLYBAG = 'X44'; + + /** + * Box, steel + */ + public const REC21_BOX_STEEL = 'X4A'; + + /** + * Box, aluminium + */ + public const REC21_BOX_ALUMINIUM = 'X4B'; + + /** + * Box, natural wood + */ + public const REC21_BOX_NATURAL_WOOD = 'X4C'; + + /** + * Box, plywood + */ + public const REC21_BOX_PLYWOOD = 'X4D'; + + /** + * Box, reconstituted wood + */ + public const REC21_BOX_RECONSTITUTED_WOOD = 'X4F'; + + /** + * Box, fibreboard + */ + public const REC21_BOX_FIBREBOARD = 'X4G'; + + /** + * Box, plastic + */ + public const REC21_BOX_PLASTIC = 'X4H'; + + /** + * Bag, woven plastic + */ + public const REC21_BAG_WOVEN_PLASTIC = 'X5H'; + + /** + * Bag, textile + */ + public const REC21_BAG_TEXTILE = 'X5L'; + + /** + * Bag, paper + */ + public const REC21_BAG_PAPER = 'X5M'; + + /** + * Composite packaging, plastic receptacle + */ + public const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE = 'X6H'; + + /** + * Composite packaging, glass receptacle + */ + public const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE = 'X6P'; + + /** + * Case, car + */ + public const REC21_CASE_CAR = 'X7A'; + + /** + * Case, wooden + */ + public const REC21_CASE_WOODEN = 'X7B'; + + /** + * Pallet, wooden + */ + public const REC21_PALLET_WOODEN = 'X8A'; + + /** + * Crate, wooden + */ + public const REC21_CRATE_WOODEN = 'X8B'; + + /** + * Bundle, wooden + */ + public const REC21_BUNDLE_WOODEN = 'X8C'; + + /** + * Intermediate bulk container, rigid plastic + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC = 'XAA'; + + /** + * Receptacle, fibre + */ + public const REC21_RECEPTACLE_FIBRE = 'XAB'; + + /** + * Receptacle, paper + */ + public const REC21_RECEPTACLE_PAPER = 'XAC'; + + /** + * Receptacle, wooden + */ + public const REC21_RECEPTACLE_WOODEN = 'XAD'; + + /** + * Aerosol + */ + public const REC21_AEROSOL = 'XAE'; + + /** + * Pallet, modular, collars 80cms * 60cms + */ + public const REC21_PALLET_MODULAR_COLLARS_80CMS__60CMS = 'XAF'; + + /** + * Pallet, shrinkwrapped + */ + public const REC21_PALLET_SHRINKWRAPPED = 'XAG'; + + /** + * Pallet, 100cms * 110cms + */ + public const REC21_PALLET_100CMS__110CMS = 'XAH'; + + /** + * Clamshell + */ + public const REC21_CLAMSHELL = 'XAI'; + + /** + * Cone + */ + public const REC21_CONE = 'XAJ'; + + /** + * Ball + */ + public const REC21_BALL = 'XAL'; + + /** + * Ampoule, non-protected + */ + public const REC21_AMPOULE_NONPROTECTED = 'XAM'; + + /** + * Ampoule, protected + */ + public const REC21_AMPOULE_PROTECTED = 'XAP'; + + /** + * Atomizer + */ + public const REC21_ATOMIZER = 'XAT'; + + /** + * Capsule + */ + public const REC21_CAPSULE = 'XAV'; + + /** + * Belt + */ + public const REC21_BELT = 'XB4'; + + /** + * Barrel + */ + public const REC21_BARREL = 'XBA'; + + /** + * Bobbin + */ + public const REC21_BOBBIN = 'XBB'; + + /** + * Bottlecrate / bottlerack + */ + public const REC21_BOTTLECRATE___BOTTLERACK = 'XBC'; + + /** + * Board + */ + public const REC21_BOARD = 'XBD'; + + /** + * Bundle + */ + public const REC21_BUNDLE = 'XBE'; + + /** + * Balloon, non-protected + */ + public const REC21_BALLOON_NONPROTECTED = 'XBF'; + + /** + * Bag + */ + public const REC21_BAG = 'XBG'; + + /** + * Bunch + */ + public const REC21_BUNCH = 'XBH'; + + /** + * Bin + */ + public const REC21_BIN = 'XBI'; + + /** + * Bucket + */ + public const REC21_BUCKET = 'XBJ'; + + /** + * Basket + */ + public const REC21_BASKET = 'XBK'; + + /** + * Bale, compressed + */ + public const REC21_BALE_COMPRESSED = 'XBL'; + + /** + * Basin + */ + public const REC21_BASIN = 'XBM'; + + /** + * Bale, non-compressed + */ + public const REC21_BALE_NONCOMPRESSED = 'XBN'; + + /** + * Bottle, non-protected, cylindrical + */ + public const REC21_BOTTLE_NONPROTECTED_CYLINDRICAL = 'XBO'; + + /** + * Balloon, protected + */ + public const REC21_BALLOON_PROTECTED = 'XBP'; + + /** + * Bottle, protected cylindrical + */ + public const REC21_BOTTLE_PROTECTED_CYLINDRICAL = 'XBQ'; + + /** + * Bar + */ + public const REC21_BAR = 'XBR'; + + /** + * Bottle, non-protected, bulbous + */ + public const REC21_BOTTLE_NONPROTECTED_BULBOUS = 'XBS'; + + /** + * Bolt + */ + public const REC21_BOLT = 'XBT'; + + /** + * Butt + */ + public const REC21_BUTT = 'XBU'; + + /** + * Bottle, protected bulbous + */ + public const REC21_BOTTLE_PROTECTED_BULBOUS = 'XBV'; + + /** + * Box, for liquids + */ + public const REC21_BOX_FOR_LIQUIDS = 'XBW'; + + /** + * Box + */ + public const REC21_BOX = 'XBX'; + + /** + * Board, in bundle/bunch/truss + */ + public const REC21_BOARD_IN_BUNDLE_BUNCH_TRUSS = 'XBY'; + + /** + * Bars, in bundle/bunch/truss + */ + public const REC21_BARS_IN_BUNDLE_BUNCH_TRUSS = 'XBZ'; + + /** + * Can, rectangular + */ + public const REC21_CAN_RECTANGULAR = 'XCA'; + + /** + * Crate, beer + */ + public const REC21_CRATE_BEER = 'XCB'; + + /** + * Churn + */ + public const REC21_CHURN = 'XCC'; + + /** + * Can, with handle and spout + */ + public const REC21_CAN_WITH_HANDLE_AND_SPOUT = 'XCD'; + + /** + * Creel + */ + public const REC21_CREEL = 'XCE'; + + /** + * Coffer + */ + public const REC21_COFFER = 'XCF'; + + /** + * Cage + */ + public const REC21_CAGE = 'XCG'; + + /** + * Chest + */ + public const REC21_CHEST = 'XCH'; + + /** + * Canister + */ + public const REC21_CANISTER = 'XCI'; + + /** + * Coffin + */ + public const REC21_COFFIN = 'XCJ'; + + /** + * Cask + */ + public const REC21_CASK = 'XCK'; + + /** + * Coil + */ + public const REC21_COIL = 'XCL'; + + /** + * Card + */ + public const REC21_CARD = 'XCM'; + + /** + * Container, not otherwise specified as transport equipment + */ + public const REC21_CONTAINER_NOT_OTHERWISE_SPECIFIED_AS_TRANSPORT_EQUIPMENT = 'XCN'; + + /** + * Carboy, non-protected + */ + public const REC21_CARBOY_NONPROTECTED = 'XCO'; + + /** + * Carboy, protected + */ + public const REC21_CARBOY_PROTECTED = 'XCP'; + + /** + * Cartridge + */ + public const REC21_CARTRIDGE = 'XCQ'; + + /** + * Crate + */ + public const REC21_CRATE = 'XCR'; + + /** + * Case + */ + public const REC21_CASE = 'XCS'; + + /** + * Carton + */ + public const REC21_CARTON = 'XCT'; + + /** + * Cup + */ + public const REC21_CUP = 'XCU'; + + /** + * Cover + */ + public const REC21_COVER = 'XCV'; + + /** + * Cage, roll + */ + public const REC21_CAGE_ROLL = 'XCW'; + + /** + * Can, cylindrical + */ + public const REC21_CAN_CYLINDRICAL = 'XCX'; + + /** + * Cylinder + */ + public const REC21_CYLINDER = 'XCY'; + + /** + * Canvas + */ + public const REC21_CANVAS = 'XCZ'; + + /** + * Crate, multiple layer, plastic + */ + public const REC21_CRATE_MULTIPLE_LAYER_PLASTIC = 'XDA'; + + /** + * Crate, multiple layer, wooden + */ + public const REC21_CRATE_MULTIPLE_LAYER_WOODEN = 'XDB'; + + /** + * Crate, multiple layer, cardboard + */ + public const REC21_CRATE_MULTIPLE_LAYER_CARDBOARD = 'XDC'; + + /** + * Cage, Commonwealth Handling Equipment Pool (CHEP) + */ + public const REC21_CAGE_COMMONWEALTH_HANDLING_EQUIPMENT_POOL__CHEP = 'XDG'; + + /** + * Box, Commonwealth Handling Equipment Pool (CHEP), Eurobox + */ + public const REC21_BOX_COMMONWEALTH_HANDLING_EQUIPMENT_POOL_CHEP_EUROBOX = 'XDH'; + + /** + * Drum, iron + */ + public const REC21_DRUM_IRON = 'XDI'; + + /** + * Demijohn, non-protected + */ + public const REC21_DEMIJOHN_NONPROTECTED = 'XDJ'; + + /** + * Crate, bulk, cardboard + */ + public const REC21_CRATE_BULK_CARDBOARD = 'XDK'; + + /** + * Crate, bulk, plastic + */ + public const REC21_CRATE_BULK_PLASTIC = 'XDL'; + + /** + * Crate, bulk, wooden + */ + public const REC21_CRATE_BULK_WOODEN = 'XDM'; + + /** + * Dispenser + */ + public const REC21_DISPENSER = 'XDN'; + + /** + * Demijohn, protected + */ + public const REC21_DEMIJOHN_PROTECTED = 'XDP'; + + /** + * Drum + */ + public const REC21_DRUM = 'XDR'; + + /** + * Tray, one layer no cover, plastic + */ + public const REC21_TRAY_ONE_LAYER_NO_COVER_PLASTIC = 'XDS'; + + /** + * Tray, one layer no cover, wooden + */ + public const REC21_TRAY_ONE_LAYER_NO_COVER_WOODEN = 'XDT'; + + /** + * Tray, one layer no cover, polystyrene + */ + public const REC21_TRAY_ONE_LAYER_NO_COVER_POLYSTYRENE = 'XDU'; + + /** + * Tray, one layer no cover, cardboard + */ + public const REC21_TRAY_ONE_LAYER_NO_COVER_CARDBOARD = 'XDV'; + + /** + * Tray, two layers no cover, plastic tray + */ + public const REC21_TRAY_TWO_LAYERS_NO_COVER_PLASTIC_TRAY = 'XDW'; + + /** + * Tray, two layers no cover, wooden + */ + public const REC21_TRAY_TWO_LAYERS_NO_COVER_WOODEN = 'XDX'; + + /** + * Tray, two layers no cover, cardboard + */ + public const REC21_TRAY_TWO_LAYERS_NO_COVER_CARDBOARD = 'XDY'; + + /** + * Bag, plastic + */ + public const REC21_BAG_PLASTIC = 'XEC'; + + /** + * Case, with pallet base + */ + public const REC21_CASE_WITH_PALLET_BASE = 'XED'; + + /** + * Case, with pallet base, wooden + */ + public const REC21_CASE_WITH_PALLET_BASE_WOODEN = 'XEE'; + + /** + * Case, with pallet base, cardboard + */ + public const REC21_CASE_WITH_PALLET_BASE_CARDBOARD = 'XEF'; + + /** + * Case, with pallet base, plastic + */ + public const REC21_CASE_WITH_PALLET_BASE_PLASTIC = 'XEG'; + + /** + * Case, with pallet base, metal + */ + public const REC21_CASE_WITH_PALLET_BASE_METAL = 'XEH'; + + /** + * Case, isothermic + */ + public const REC21_CASE_ISOTHERMIC = 'XEI'; + + /** + * Envelope + */ + public const REC21_ENVELOPE = 'XEN'; + + /** + * Flexibag + */ + public const REC21_FLEXIBAG = 'XFB'; + + /** + * Crate, fruit + */ + public const REC21_CRATE_FRUIT = 'XFC'; + + /** + * Crate, framed + */ + public const REC21_CRATE_FRAMED = 'XFD'; + + /** + * Flexitank + */ + public const REC21_FLEXITANK = 'XFE'; + + /** + * Firkin + */ + public const REC21_FIRKIN = 'XFI'; + + /** + * Flask + */ + public const REC21_FLASK = 'XFL'; + + /** + * Footlocker + */ + public const REC21_FOOTLOCKER = 'XFO'; + + /** + * Filmpack + */ + public const REC21_FILMPACK = 'XFP'; + + /** + * Frame + */ + public const REC21_FRAME = 'XFR'; + + /** + * Foodtainer + */ + public const REC21_FOODTAINER = 'XFT'; + + /** + * Cart, flatbed + */ + public const REC21_CART_FLATBED = 'XFW'; + + /** + * Bag, flexible container + */ + public const REC21_BAG_FLEXIBLE_CONTAINER = 'XFX'; + + /** + * Bottle, gas + */ + public const REC21_BOTTLE_GAS = 'XGB'; + + /** + * Girder + */ + public const REC21_GIRDER = 'XGI'; + + /** + * Container, gallon + */ + public const REC21_CONTAINER_GALLON = 'XGL'; + + /** + * Receptacle, glass + */ + public const REC21_RECEPTACLE_GLASS = 'XGR'; + + /** + * Tray, containing horizontally stacked flat items + */ + public const REC21_TRAY_CONTAINING_HORIZONTALLY_STACKED_FLAT_ITEMS = 'XGU'; + + /** + * Bag, gunny + */ + public const REC21_BAG_GUNNY = 'XGY'; + + /** + * Girders, in bundle/bunch/truss + */ + public const REC21_GIRDERS_IN_BUNDLE_BUNCH_TRUSS = 'XGZ'; + + /** + * Basket, with handle, plastic + */ + public const REC21_BASKET_WITH_HANDLE_PLASTIC = 'XHA'; + + /** + * Basket, with handle, wooden + */ + public const REC21_BASKET_WITH_HANDLE_WOODEN = 'XHB'; + + /** + * Basket, with handle, cardboard + */ + public const REC21_BASKET_WITH_HANDLE_CARDBOARD = 'XHC'; + + /** + * Hogshead + */ + public const REC21_HOGSHEAD = 'XHG'; + + /** + * Hanger + */ + public const REC21_HANGER = 'XHN'; + + /** + * Hamper + */ + public const REC21_HAMPER = 'XHR'; + + /** + * Package, display, wooden + */ + public const REC21_PACKAGE_DISPLAY_WOODEN = 'XIA'; + + /** + * Package, display, cardboard + */ + public const REC21_PACKAGE_DISPLAY_CARDBOARD = 'XIB'; + + /** + * Package, display, plastic + */ + public const REC21_PACKAGE_DISPLAY_PLASTIC = 'XIC'; + + /** + * Package, display, metal + */ + public const REC21_PACKAGE_DISPLAY_METAL = 'XID'; + + /** + * Package, show + */ + public const REC21_PACKAGE_SHOW = 'XIE'; + + /** + * Package, flow + */ + public const REC21_PACKAGE_FLOW = 'XIF'; + + /** + * Package, paper wrapped + */ + public const REC21_PACKAGE_PAPER_WRAPPED = 'XIG'; + + /** + * Drum, plastic + */ + public const REC21_DRUM_PLASTIC = 'XIH'; + + /** + * Package, cardboard, with bottle grip-holes + */ + public const REC21_PACKAGE_CARDBOARD_WITH_BOTTLE_GRIPHOLES = 'XIK'; + + /** + * Tray, rigid, lidded stackable (CEN TS 14482:2002) + */ + public const REC21_TRAY_RIGID_LIDDED_STACKABLE_CEN_TS_144822002 = 'XIL'; + + /** + * Ingot + */ + public const REC21_INGOT = 'XIN'; + + /** + * Ingots, in bundle/bunch/truss + */ + public const REC21_INGOTS_IN_BUNDLE_BUNCH_TRUSS = 'XIZ'; + + /** + * Bag, jumbo + */ + public const REC21_BAG_JUMBO = 'XJB'; + + /** + * Jerrican, rectangular + */ + public const REC21_JERRICAN_RECTANGULAR = 'XJC'; + + /** + * Jug + */ + public const REC21_JUG = 'XJG'; + + /** + * Jar + */ + public const REC21_JAR = 'XJR'; + + /** + * Jutebag + */ + public const REC21_JUTEBAG = 'XJT'; + + /** + * Jerrican, cylindrical + */ + public const REC21_JERRICAN_CYLINDRICAL = 'XJY'; + + /** + * Keg + */ + public const REC21_KEG = 'XKG'; + + /** + * Kit + */ + public const REC21_KIT = 'XKI'; + + /** + * Luggage + */ + public const REC21_LUGGAGE = 'XLE'; + + /** + * Log + */ + public const REC21_LOG = 'XLG'; + + /** + * Lot + */ + public const REC21_LOT = 'XLT'; + + /** + * Lug + */ + public const REC21_LUG = 'XLU'; + + /** + * Liftvan + */ + public const REC21_LIFTVAN = 'XLV'; + + /** + * Logs, in bundle/bunch/truss + */ + public const REC21_LOGS_IN_BUNDLE_BUNCH_TRUSS = 'XLZ'; + + /** + * Crate, metal + */ + public const REC21_CRATE_METAL = 'XMA'; + + /** + * Bag, multiply + */ + public const REC21_BAG_MULTIPLY = 'XMB'; + + /** + * Crate, milk + */ + public const REC21_CRATE_MILK = 'XMC'; + + /** + * Container, metal + */ + public const REC21_CONTAINER_METAL = 'XME'; + + /** + * Receptacle, metal + */ + public const REC21_RECEPTACLE_METAL = 'XMR'; + + /** + * Sack, multi-wall + */ + public const REC21_SACK_MULTIWALL = 'XMS'; + + /** + * Mat + */ + public const REC21_MAT = 'XMT'; + + /** + * Receptacle, plastic wrapped + */ + public const REC21_RECEPTACLE_PLASTIC_WRAPPED = 'XMW'; + + /** + * Matchbox + */ + public const REC21_MATCHBOX = 'XMX'; + + /** + * Not available + */ + public const REC21_NOT_AVAILABLE = 'XNA'; + + /** + * Unpacked or unpackaged + */ + public const REC21_UNPACKED_OR_UNPACKAGED = 'XNE'; + + /** + * Unpacked or unpackaged, single unit + */ + public const REC21_UNPACKED_OR_UNPACKAGED_SINGLE_UNIT = 'XNF'; + + /** + * Unpacked or unpackaged, multiple units + */ + public const REC21_UNPACKED_OR_UNPACKAGED_MULTIPLE_UNITS = 'XNG'; + + /** + * Nest + */ + public const REC21_NEST = 'XNS'; + + /** + * Net + */ + public const REC21_NET = 'XNT'; + + /** + * Net, tube, plastic + */ + public const REC21_NET_TUBE_PLASTIC = 'XNU'; + + /** + * Net, tube, textile + */ + public const REC21_NET_TUBE_TEXTILE = 'XNV'; + + /** + * Pallet, CHEP 40 cm x 60 cm + */ + public const REC21_PALLET_CHEP_40_CM_X_60_CM = 'XOA'; + + /** + * Pallet, CHEP 80 cm x 120 cm + */ + public const REC21_PALLET_CHEP_80_CM_X_120_CM = 'XOB'; + + /** + * Pallet, CHEP 100 cm x 120 cm + */ + public const REC21_PALLET_CHEP_100_CM_X_120_CM = 'XOC'; + + /** + * Pallet, AS 4068-1993 + */ + public const REC21_PALLET_AS_40681993 = 'XOD'; + + /** + * Pallet, ISO T11 + */ + public const REC21_PALLET_ISO_T11 = 'XOE'; + + /** + * Platform, unspecified weight or dimension + */ + public const REC21_PLATFORM_UNSPECIFIED_WEIGHT_OR_DIMENSION = 'XOF'; + + /** + * Block + */ + public const REC21_BLOCK = 'XOK'; + + /** + * Octabin + */ + public const REC21_OCTABIN = 'XOT'; + + /** + * Container, outer + */ + public const REC21_CONTAINER_OUTER = 'XOU'; + + /** + * Pan + */ + public const REC21_PAN = 'XP2'; + + /** + * Packet + */ + public const REC21_PACKET = 'XPA'; + + /** + * Pallet, box Combined open-ended box and pallet + */ + public const REC21_PALLET_BOX_COMBINED_OPENENDED_BOX_AND_PALLET = 'XPB'; + + /** + * Parcel + */ + public const REC21_PARCEL = 'XPC'; + + /** + * Pallet, modular, collars 80cms * 100cms + */ + public const REC21_PALLET_MODULAR_COLLARS_80CMS__100CMS = 'XPD'; + + /** + * Pallet, modular, collars 80cms * 120cms + */ + public const REC21_PALLET_MODULAR_COLLARS_80CMS__120CMS = 'XPE'; + + /** + * Pen + */ + public const REC21_PEN = 'XPF'; + + /** + * Plate + */ + public const REC21_PLATE = 'XPG'; + + /** + * Pitcher + */ + public const REC21_PITCHER = 'XPH'; + + /** + * Pipe + */ + public const REC21_PIPE = 'XPI'; + + /** + * Punnet + */ + public const REC21_PUNNET = 'XPJ'; + + /** + * Package + */ + public const REC21_PACKAGE = 'XPK'; + + /** + * Pail + */ + public const REC21_PAIL = 'XPL'; + + /** + * Plank + */ + public const REC21_PLANK = 'XPN'; + + /** + * Pouch + */ + public const REC21_POUCH = 'XPO'; + + /** + * Piece + */ + public const REC21_PIECE = 'XPP'; + + /** + * Receptacle, plastic + */ + public const REC21_RECEPTACLE_PLASTIC = 'XPR'; + + /** + * Pot + */ + public const REC21_POT = 'XPT'; + + /** + * Tray + */ + public const REC21_TRAY = 'XPU'; + + /** + * Pipes, in bundle/bunch/truss + */ + public const REC21_PIPES_IN_BUNDLE_BUNCH_TRUSS = 'XPV'; + + /** + * Pallet + */ + public const REC21_PALLET = 'XPX'; + + /** + * Plates, in bundle/bunch/truss + */ + public const REC21_PLATES_IN_BUNDLE_BUNCH_TRUSS = 'XPY'; + + /** + * Planks, in bundle/bunch/truss + */ + public const REC21_PLANKS_IN_BUNDLE_BUNCH_TRUSS = 'XPZ'; + + /** + * Drum, steel, non-removable head + */ + public const REC21_DRUM_STEEL_NONREMOVABLE_HEAD = 'XQA'; + + /** + * Drum, steel, removable head + */ + public const REC21_DRUM_STEEL_REMOVABLE_HEAD = 'XQB'; + + /** + * Drum, aluminium, non-removable head + */ + public const REC21_DRUM_ALUMINIUM_NONREMOVABLE_HEAD = 'XQC'; + + /** + * Drum, aluminium, removable head + */ + public const REC21_DRUM_ALUMINIUM_REMOVABLE_HEAD = 'XQD'; + + /** + * Drum, plastic, non-removable head + */ + public const REC21_DRUM_PLASTIC_NONREMOVABLE_HEAD = 'XQF'; + + /** + * Drum, plastic, removable head + */ + public const REC21_DRUM_PLASTIC_REMOVABLE_HEAD = 'XQG'; + + /** + * Barrel, wooden, bung type + */ + public const REC21_BARREL_WOODEN_BUNG_TYPE = 'XQH'; + + /** + * Barrel, wooden, removable head + */ + public const REC21_BARREL_WOODEN_REMOVABLE_HEAD = 'XQJ'; + + /** + * Jerrican, steel, non-removable head + */ + public const REC21_JERRICAN_STEEL_NONREMOVABLE_HEAD = 'XQK'; + + /** + * Jerrican, steel, removable head + */ + public const REC21_JERRICAN_STEEL_REMOVABLE_HEAD = 'XQL'; + + /** + * Jerrican, plastic, non-removable head + */ + public const REC21_JERRICAN_PLASTIC_NONREMOVABLE_HEAD = 'XQM'; + + /** + * Jerrican, plastic, removable head + */ + public const REC21_JERRICAN_PLASTIC_REMOVABLE_HEAD = 'XQN'; + + /** + * Box, wooden, natural wood, ordinary + */ + public const REC21_BOX_WOODEN_NATURAL_WOOD_ORDINARY = 'XQP'; + + /** + * Box, wooden, natural wood, with sift proof walls + */ + public const REC21_BOX_WOODEN_NATURAL_WOOD_WITH_SIFT_PROOF_WALLS = 'XQQ'; + + /** + * Box, plastic, expanded + */ + public const REC21_BOX_PLASTIC_EXPANDED = 'XQR'; + + /** + * Box, plastic, solid + */ + public const REC21_BOX_PLASTIC_SOLID = 'XQS'; + + /** + * Rod + */ + public const REC21_ROD = 'XRD'; + + /** + * Ring + */ + public const REC21_RING = 'XRG'; + + /** + * Rack, clothing hanger + */ + public const REC21_RACK_CLOTHING_HANGER = 'XRJ'; + + /** + * Rack + */ + public const REC21_RACK = 'XRK'; + + /** + * Reel + */ + public const REC21_REEL = 'XRL'; + + /** + * Roll + */ + public const REC21_ROLL = 'XRO'; + + /** + * Rednet + */ + public const REC21_REDNET = 'XRT'; + + /** + * Rods, in bundle/bunch/truss + */ + public const REC21_RODS_IN_BUNDLE_BUNCH_TRUSS = 'XRZ'; + + /** + * Sack + */ + public const REC21_SACK = 'XSA'; + + /** + * Slab + */ + public const REC21_SLAB = 'XSB'; + + /** + * Crate, shallow + */ + public const REC21_CRATE_SHALLOW = 'XSC'; + + /** + * Spindle + */ + public const REC21_SPINDLE = 'XSD'; + + /** + * Sea-chest + */ + public const REC21_SEACHEST = 'XSE'; + + /** + * Sachet + */ + public const REC21_SACHET = 'XSH'; + + /** + * Skid + */ + public const REC21_SKID = 'XSI'; + + /** + * Case, skeleton + */ + public const REC21_CASE_SKELETON = 'XSK'; + + /** + * Slipsheet + */ + public const REC21_SLIPSHEET = 'XSL'; + + /** + * Sheetmetal + */ + public const REC21_SHEETMETAL = 'XSM'; + + /** + * Spool + */ + public const REC21_SPOOL = 'XSO'; + + /** + * Sheet, plastic wrapping + */ + public const REC21_SHEET_PLASTIC_WRAPPING = 'XSP'; + + /** + * Case, steel + */ + public const REC21_CASE_STEEL = 'XSS'; + + /** + * Sheet + */ + public const REC21_SHEET = 'XST'; + + /** + * Suitcase + */ + public const REC21_SUITCASE = 'XSU'; + + /** + * Envelope, steel + */ + public const REC21_ENVELOPE_STEEL = 'XSV'; + + /** + * Shrinkwrapped + */ + public const REC21_SHRINKWRAPPED = 'XSW'; + + /** + * Sleeve + */ + public const REC21_SLEEVE = 'XSY'; + + /** + * Sheets, in bundle/bunch/truss + */ + public const REC21_SHEETS_IN_BUNDLE_BUNCH_TRUSS = 'XSZ'; + + /** + * Tablet + */ + public const REC21_TABLET = 'XT1'; + + /** + * Tub + */ + public const REC21_TUB = 'XTB'; + + /** + * Tea-chest + */ + public const REC21_TEACHEST = 'XTC'; + + /** + * Tube, collapsible + */ + public const REC21_TUBE_COLLAPSIBLE = 'XTD'; + + /** + * Tyre + */ + public const REC21_TYRE = 'XTE'; + + /** + * Tank container, generic + */ + public const REC21_TANK_CONTAINER_GENERIC = 'XTG'; + + /** + * Tierce + */ + public const REC21_TIERCE = 'XTI'; + + /** + * Tank, rectangular + */ + public const REC21_TANK_RECTANGULAR = 'XTK'; + + /** + * Tub, with lid + */ + public const REC21_TUB_WITH_LID = 'XTL'; + + /** + * Tin + */ + public const REC21_TIN = 'XTN'; + + /** + * Tun + */ + public const REC21_TUN = 'XTO'; + + /** + * Trunk + */ + public const REC21_TRUNK = 'XTR'; + + /** + * Truss + */ + public const REC21_TRUSS = 'XTS'; + + /** + * Bag, tote + */ + public const REC21_BAG_TOTE = 'XTT'; + + /** + * Tube + */ + public const REC21_TUBE = 'XTU'; + + /** + * Tube, with nozzle + */ + public const REC21_TUBE_WITH_NOZZLE = 'XTV'; + + /** + * Pallet, triwall + */ + public const REC21_PALLET_TRIWALL = 'XTW'; + + /** + * Tank, cylindrical + */ + public const REC21_TANK_CYLINDRICAL = 'XTY'; + + /** + * Tubes, in bundle/bunch/truss + */ + public const REC21_TUBES_IN_BUNDLE_BUNCH_TRUSS = 'XTZ'; + + /** + * Uncaged + */ + public const REC21_UNCAGED = 'XUC'; + + /** + * Unit + */ + public const REC21_UNIT = 'XUN'; + + /** + * Vat + */ + public const REC21_VAT = 'XVA'; + + /** + * Bulk, gas (at 1031 mbar and 15°C) + */ + public const REC21_BULK_GAS_AT_1031_MBAR_AND_15C = 'XVG'; + + /** + * Vial + */ + public const REC21_VIAL = 'XVI'; + + /** + * Vanpack + */ + public const REC21_VANPACK = 'XVK'; + + /** + * Bulk, liquid + */ + public const REC21_BULK_LIQUID = 'XVL'; + + /** + * Bulk, solid, large particles (“nodulesâ€) + */ + public const REC21_BULK_SOLID_LARGE_PARTICLES_NODULES = 'XVO'; + + /** + * Vacuum-packed + */ + public const REC21_VACUUMPACKED = 'XVP'; + + /** + * Bulk, liquefied gas (at abnormal temperature/pressure) + */ + public const REC21_BULK_LIQUEFIED_GAS_AT_ABNORMAL_TEMPERATURE_PRESSURE = 'XVQ'; + + /** + * Vehicle + */ + public const REC21_VEHICLE = 'XVN'; + + /** + * Bulk, solid, granular particles (“grainsâ€) + */ + public const REC21_BULK_SOLID_GRANULAR_PARTICLES_GRAINS = 'XVR'; + + /** + * Bulk, scrap metal + */ + public const REC21_BULK_SCRAP_METAL = 'XVS'; + + /** + * Bulk, solid, fine particles (“powdersâ€) + */ + public const REC21_BULK_SOLID_FINE_PARTICLES_POWDERS = 'XVY'; + + /** + * Intermediate bulk container + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER = 'XWA'; + + /** + * Wickerbottle + */ + public const REC21_WICKERBOTTLE = 'XWB'; + + /** + * Intermediate bulk container, steel + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_STEEL = 'XWC'; + + /** + * Intermediate bulk container, aluminium + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_ALUMINIUM = 'XWD'; + + /** + * Intermediate bulk container, metal + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_METAL = 'XWF'; + + /** + * Intermediate bulk container, steel, pressurised > 10 kpa + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_STEEL_PRESSURISED__10_KPA = 'XWG'; + + /** + * Intermediate bulk container, aluminium, pressurised > 10 kpa + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_ALUMINIUM_PRESSURISED__10_KPA = 'XWH'; + + /** + * Intermediate bulk container, metal, pressure 10 kpa + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_METAL_PRESSURE_10_KPA = 'XWJ'; + + /** + * Intermediate bulk container, steel, liquid + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_STEEL_LIQUID = 'XWK'; + + /** + * Intermediate bulk container, aluminium, liquid + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_ALUMINIUM_LIQUID = 'XWL'; + + /** + * Intermediate bulk container, metal, liquid + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_METAL_LIQUID = 'XWM'; + + /** + * Intermediate bulk container, woven plastic, without coat/liner + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_WOVEN_PLASTIC_WITHOUT_COAT_LINER = 'XWN'; + + /** + * Intermediate bulk container, woven plastic, coated + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_WOVEN_PLASTIC_COATED = 'XWP'; + + /** + * Intermediate bulk container, woven plastic, with liner + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_WOVEN_PLASTIC_WITH_LINER = 'XWQ'; + + /** + * Intermediate bulk container, woven plastic, coated and liner + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_WOVEN_PLASTIC_COATED_AND_LINER = 'XWR'; + + /** + * Intermediate bulk container, plastic film + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_PLASTIC_FILM = 'XWS'; + + /** + * Intermediate bulk container, textile with out coat/liner + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_TEXTILE_WITH_OUT_COAT_LINER = 'XWT'; + + /** + * Intermediate bulk container, natural wood, with inner liner + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_NATURAL_WOOD_WITH_INNER_LINER = 'XWU'; + + /** + * Intermediate bulk container, textile, coated + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_TEXTILE_COATED = 'XWV'; + + /** + * Intermediate bulk container, textile, with liner + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_TEXTILE_WITH_LINER = 'XWW'; + + /** + * Intermediate bulk container, textile, coated and liner + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_TEXTILE_COATED_AND_LINER = 'XWX'; + + /** + * Intermediate bulk container, plywood, with inner liner + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_PLYWOOD_WITH_INNER_LINER = 'XWY'; + + /** + * Intermediate bulk container, reconstituted wood, with inner liner + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_RECONSTITUTED_WOOD_WITH_INNER_LINER = 'XWZ'; + + /** + * Bag, woven plastic, without inner coat/liner + */ + public const REC21_BAG_WOVEN_PLASTIC_WITHOUT_INNER_COAT_LINER = 'XXA'; + + /** + * Bag, woven plastic, sift proof + */ + public const REC21_BAG_WOVEN_PLASTIC_SIFT_PROOF = 'XXB'; + + /** + * Bag, woven plastic, water resistant + */ + public const REC21_BAG_WOVEN_PLASTIC_WATER_RESISTANT = 'XXC'; + + /** + * Bag, plastics film + */ + public const REC21_BAG_PLASTICS_FILM = 'XXD'; + + /** + * Bag, textile, without inner coat/liner + */ + public const REC21_BAG_TEXTILE_WITHOUT_INNER_COAT_LINER = 'XXF'; + + /** + * Bag, textile, sift proof + */ + public const REC21_BAG_TEXTILE_SIFT_PROOF = 'XXG'; + + /** + * Bag, textile, water resistant + */ + public const REC21_BAG_TEXTILE_WATER_RESISTANT = 'XXH'; + + /** + * Bag, paper, multi-wall + */ + public const REC21_BAG_PAPER_MULTIWALL = 'XXJ'; + + /** + * Bag, paper, multi-wall, water resistant + */ + public const REC21_BAG_PAPER_MULTIWALL_WATER_RESISTANT = 'XXK'; + + /** + * Composite packaging, plastic receptacle in steel drum + */ + public const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_STEEL_DRUM = 'XYA'; + + /** + * Composite packaging, plastic receptacle in steel crate box + */ + public const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_STEEL_CRATE_BOX = 'XYB'; + + /** + * Composite packaging, plastic receptacle in aluminium drum + */ + public const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_ALUMINIUM_DRUM = 'XYC'; + + /** + * Composite packaging, plastic receptacle in aluminium crate + */ + public const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_ALUMINIUM_CRATE = 'XYD'; + + /** + * Composite packaging, plastic receptacle in wooden box + */ + public const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_WOODEN_BOX = 'XYF'; + + /** + * Composite packaging, plastic receptacle in plywood drum + */ + public const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_PLYWOOD_DRUM = 'XYG'; + + /** + * Composite packaging, plastic receptacle in plywood box + */ + public const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_PLYWOOD_BOX = 'XYH'; + + /** + * Composite packaging, plastic receptacle in fibre drum + */ + public const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_FIBRE_DRUM = 'XYJ'; + + /** + * Composite packaging, plastic receptacle in fibreboard box + */ + public const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_FIBREBOARD_BOX = 'XYK'; + + /** + * Composite packaging, plastic receptacle in plastic drum + */ + public const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_PLASTIC_DRUM = 'XYL'; + + /** + * Composite packaging, plastic receptacle in solid plastic box + */ + public const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_SOLID_PLASTIC_BOX = 'XYM'; + + /** + * Composite packaging, glass receptacle in steel drum + */ + public const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_STEEL_DRUM = 'XYN'; + + /** + * Composite packaging, glass receptacle in steel crate box + */ + public const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_STEEL_CRATE_BOX = 'XYP'; + + /** + * Composite packaging, glass receptacle in aluminium drum + */ + public const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_ALUMINIUM_DRUM = 'XYQ'; + + /** + * Composite packaging, glass receptacle in aluminium crate + */ + public const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_ALUMINIUM_CRATE = 'XYR'; + + /** + * Composite packaging, glass receptacle in wooden box + */ + public const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_WOODEN_BOX = 'XYS'; + + /** + * Composite packaging, glass receptacle in plywood drum + */ + public const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_PLYWOOD_DRUM = 'XYT'; + + /** + * Composite packaging, glass receptacle in wickerwork hamper + */ + public const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_WICKERWORK_HAMPER = 'XYV'; + + /** + * Composite packaging, glass receptacle in fibre drum + */ + public const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_FIBRE_DRUM = 'XYW'; + + /** + * Composite packaging, glass receptacle in fibreboard box + */ + public const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_FIBREBOARD_BOX = 'XYX'; + + /** + * Composite packaging, glass receptacle in expandable plastic pack + */ + public const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_EXPANDABLE_PLASTIC_PACK = 'XYY'; + + /** + * Composite packaging, glass receptacle in solid plastic pack + */ + public const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_SOLID_PLASTIC_PACK = 'XYZ'; + + /** + * Intermediate bulk container, paper, multi-wall + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_PAPER_MULTIWALL = 'XZA'; + + /** + * Bag, large + */ + public const REC21_BAG_LARGE = 'XZB'; + + /** + * Intermediate bulk container, paper, multi-wall, water resistant + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_PAPER_MULTIWALL_WATER_RESISTANT = 'XZC'; + + /** + * Intermediate bulk container, rigid plastic, with structural equipment, + * solids + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_WITH_STRUCTURAL_EQUIPMENT_SOLIDS = 'XZD'; + + /** + * Intermediate bulk container, rigid plastic, freestanding, solids + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_FREESTANDING_SOLIDS = 'XZF'; + + /** + * Intermediate bulk container, rigid plastic, with structural equipment, + * pressurised + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_WITH_STRUCTURAL_EQUIPMENT_PRESSURISED = 'XZG'; + + /** + * Intermediate bulk container, rigid plastic, freestanding, pressurised + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_FREESTANDING_PRESSURISED = 'XZH'; + + /** + * Intermediate bulk container, rigid plastic, with structural equipment, + * liquids + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_WITH_STRUCTURAL_EQUIPMENT_LIQUIDS = 'XZJ'; + + /** + * Intermediate bulk container, rigid plastic, freestanding, liquids + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_FREESTANDING_LIQUIDS = 'XZK'; + + /** + * Intermediate bulk container, composite, rigid plastic, solids + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_RIGID_PLASTIC_SOLIDS = 'XZL'; + + /** + * Intermediate bulk container, composite, flexible plastic, solids + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_FLEXIBLE_PLASTIC_SOLIDS = 'XZM'; + + /** + * Intermediate bulk container, composite, rigid plastic, pressurised + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_RIGID_PLASTIC_PRESSURISED = 'XZN'; + + /** + * Intermediate bulk container, composite, flexible plastic, pressurised + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_FLEXIBLE_PLASTIC_PRESSURISED = 'XZP'; + + /** + * Intermediate bulk container, composite, rigid plastic, liquids + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_RIGID_PLASTIC_LIQUIDS = 'XZQ'; + + /** + * Intermediate bulk container, composite, flexible plastic, liquids + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_FLEXIBLE_PLASTIC_LIQUIDS = 'XZR'; + + /** + * Intermediate bulk container, composite + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE = 'XZS'; + + /** + * Intermediate bulk container, fibreboard + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_FIBREBOARD = 'XZT'; + + /** + * Intermediate bulk container, flexible + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_FLEXIBLE = 'XZU'; + + /** + * Intermediate bulk container, metal, other than steel + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_METAL_OTHER_THAN_STEEL = 'XZV'; + + /** + * Intermediate bulk container, natural wood + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_NATURAL_WOOD = 'XZW'; + + /** + * Intermediate bulk container, plywood + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_PLYWOOD = 'XZX'; + + /** + * Intermediate bulk container, reconstituted wood + */ + public const REC21_INTERMEDIATE_BULK_CONTAINER_RECONSTITUTED_WOOD = 'XZY'; + + /** + * Mutually defined + */ + public const REC21_MUTUALLY_DEFINED = 'XZZ'; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdVATExemptionReasonCode.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdVATExemptionReasonCode.php new file mode 100644 index 000000000..5c7fdc855 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdVATExemptionReasonCode.php @@ -0,0 +1,438 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + * @see https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:untdid.5305_3 + */ +class ZugferdVatCategoryCodes +{ + /** + * Canary Islands general indirect tax (L) + * + * Impuesto General Indirecto Canario (IGIC) is an indirect tax levied on + * goods and services supplied in the Canary Islands (Spain) by traders and + * professionals, as well as on import of goods. + */ + public const CANA_ISLA_GENE_INDI_TAX = 'L'; + + /** + * Duty paid by supplier (C) + * + * Duty associated with shipment of goods is paid by the supplier; customer + * receives goods with duty paid. + */ + public const DUTY_PAID_BY_SUPP = 'C'; + + /** + * Exempt for resale (AB) + * + * A tax category code indicating the item is tax exempt when the item is + * bought for future resale. + */ + public const EXEM_FOR_RESA = 'AB'; + + /** + * Exempt from tax (E) + * + * Code specifying that taxes are not applicable. + */ + public const EXEM_FROM_TAX = 'E'; + + /** + * Free export item, tax not charged (G) + * + * Code specifying that the item is free export and taxes are not charged. + */ + public const FREE_EXPO_ITEM_TAX_NOT_CHAR = 'G'; + + /** + * Higher rate (H) + * + * Code specifying a higher rate of duty or tax or fee. + */ + public const HIGH_RATE = 'H'; + + /** + * Lower rate (AA) + * + * Tax rate is lower than standard rate. + */ + public const LOWE_RATE = 'AA'; + + /** + * Mixed tax rate (A) + * + * Code specifying that the rate is based on mixed tax. + */ + public const MIXE_TAX_RATE = 'A'; + + /** + * Services outside scope of tax (O) + * + * Code specifying that taxes are not applicable to the services. + */ + public const SERV_OUTS_SCOP_OF_TAX = 'O'; + + /** + * Standard rate (S) + * + * Code specifying the standard rate. + */ + public const STAN_RATE = 'S'; + + /** + * Tax for production, services and importation in Ceuta and Melilla (M) + * + * Impuesto sobre la Producción, los Servicios y la Importación (IPSI) is an + * indirect municipal tax, levied on the production, processing and import of + * all kinds of movable tangible property, the supply of services and the + * transfer of immovable property located in the cities of Ceuta and Melilla. + */ + public const TAX_FOR_PROD_SERV_AND_IMPO_IN_CEUT_AND_MELI = 'M'; + + /** + * Transferred (VAT) (B) + * + * VAT not to be paid to the issuer of the invoice but directly to relevant + * tax authority. + */ + public const TRAN_VAT = 'B'; + + /** + * Value Added Tax (VAT) due from a previous invoice (AD) + * + * A code to indicate that the Value Added Tax (VAT) amount of a previous + * invoice is to be paid. + */ + public const VALU_ADDE_TAX_VAT_DUE_FROM_A_PREV_INVO = 'AD'; + + /** + * Value Added Tax (VAT) margin scheme - collector’s items and antiques (J) + * + * Indication that the VAT margin scheme for collector’s items and antiques + * is applied. + */ + public const VALU_ADDE_TAX_VAT_MARG_SCHE_COLL_ITEM_AND_ANTI = 'J'; + + /** + * Value Added Tax (VAT) margin scheme - second-hand goods (F) + * + * Indication that the VAT margin scheme for second-hand goods is applied. + */ + public const VALU_ADDE_TAX_VAT_MARG_SCHE_SECO_GOOD = 'F'; + + /** + * Value Added Tax (VAT) margin scheme - travel agents (D) + * + * Indication that the VAT margin scheme for travel agents is applied. + */ + public const VALU_ADDE_TAX_VAT_MARG_SCHE_TRAV_AGEN = 'D'; + + /** + * Value Added Tax (VAT) margin scheme - works of art Margin scheme — Works + * of art (I) + * + * Indication that the VAT margin scheme for works of art is applied. + */ + public const VALU_ADDE_TAX_VAT_MARG_SCHE_WORK_OF_ART_MARG_SCHE_WORK_OF_ART = 'I'; + + /** + * Value Added Tax (VAT) not now due for payment (AC) + * + * A code to indicate that the Value Added Tax (VAT) amount which is due on + * the current invoice is to be paid on receipt of a separate VAT payment + * request. + */ + public const VALU_ADDE_TAX_VAT_NOT_NOW_DUE_FOR_PAYM = 'AC'; + + /** + * VAT exempt for EEA intra-community supply of goods and services (K) + * + * A tax category code indicating the item is VAT exempt due to an + * intra-community supply in the European Economic Area. + */ + public const VAT_EXEM_FOR_EEA_INTR_SUPP_OF_GOOD_AND_SERV = 'K'; + + /** + * VAT Reverse Charge (AE) + * + * Code specifying that the standard VAT rate is levied from the invoicee. + */ + public const VAT_REVE_CHAR = 'AE'; + + /** + * Zero rated goods (Z) + * + * Code specifying that the goods are at a zero rate. + */ + public const ZERO_RATE_GOOD = 'Z'; +} diff --git a/vendor/horstoeko/zugferd/src/codelists/ZugferdVatTypeCodes.php b/vendor/horstoeko/zugferd/src/codelists/ZugferdVatTypeCodes.php new file mode 100644 index 000000000..e362d406c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelists/ZugferdVatTypeCodes.php @@ -0,0 +1,32 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + * @see https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:untdid.5305_3 + */ +class ZugferdVatTypeCodes +{ + /** + * Value added tax (VAT) + * + * A tax on domestic or imported goods applied to the value added + * at each stage in the production/distribution cycle. + */ + public const VALUE_ADDED_TAX = 'VAT'; +} diff --git a/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdAccountingAccountsClassificationTypes.php b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdAccountingAccountsClassificationTypes.php new file mode 100644 index 000000000..1dbf7a095 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdAccountingAccountsClassificationTypes.php @@ -0,0 +1,58 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +enum ZugferdAccountingAccountsClassificationTypes: int +{ + + /** + * The code indicates a general chart of accounts + */ + case GENERAL_ACCOUNT_CHART_OF_ACCOUNTS = 1; + + /** + * The code indicates a cost chart of accounts + */ + case COST_ACCOUNTING_CHART_OF_ACCOUNTS = 2; + + /** + * The code indicates a budget chart of accounts + */ + case BUDGETARY_ACCOUNT_CHART_OF_ACCOUNTS = 3; + + /** + * The code indicates a payable chart of accounts + */ + case PAYABLE_ACCOUNT_CHART_OF_ACCOUNTS = 4; + + /** + * The code indicates a receivable chart of accounts + */ + case RECEIVABLE_ACCOUNT_CHART_OF_ACCOUNTS = 5; + + /** + * The code indicates a job chart of accounts + */ + case JOB_ACCOUNT_CHART_OF_ACCOUNTS = 6; + + /** + * The code indicates a building site chart of accounts + */ + case BUILDING_SITE_ACCOUNT_CHART_OF_ACCOUNTS = 7; +} diff --git a/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdAllowanceCodes.php b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdAllowanceCodes.php new file mode 100644 index 000000000..db9b2f3b2 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdAllowanceCodes.php @@ -0,0 +1,118 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +enum ZugferdAllowanceCodes: int +{ + + /** + * Bonus for works ahead of schedule + */ + case BONUS_FOR_WORKS_AHEAD_OF_SCHEDULE = 41; + + /** + * Other bonus + */ + case OTHER_BONUS = 42; + + /** + * Manufacturer’s consumer discount + */ + case MANUFACTURERS_CONSUMER_DISCOUNT = 60; + + /** + * Due to military status + */ + case DUE_TO_MILITARY_STATUS = 62; + + /** + * Due to work accident + */ + case DUE_TO_WORK_ACCIDENT = 63; + + /** + * Special agreement + */ + case SPECIAL_AGREEMENT = 64; + + /** + * Production error discount + */ + case PRODUCTION_ERROR_DISCOUNT = 65; + + /** + * New outlet discount + */ + case NEW_OUTLET_DISCOUNT = 66; + + /** + * Sample discount + */ + case SAMPLE_DISCOUNT = 67; + + /** + * End-of-range discount + */ + case ENDOFRANGE_DISCOUNT = 68; + + /** + * Incoterm discount + */ + case INCOTERM_DISCOUNT = 70; + + /** + * Point of sales threshold allowance + */ + case POINT_OF_SALES_THRESHOLD_ALLOWANCE = 71; + + /** + * Material surcharge/deduction + */ + case MATERIAL_SURCHARGE_DEDUCTION = 88; + + /** + * Discount + */ + case DISCOUNT = 95; + + /** + * Special rebate + */ + case SPECIAL_REBATE = 100; + + /** + * Fixed long term + */ + case FIXED_LONG_TERM = 102; + + /** + * Temporary + */ + case TEMPORARY = 103; + + /** + * Standard + */ + case STANDARD = 104; + + /** + * Yearly turnover + */ + case YEARLY_TURNOVER = 105; +} diff --git a/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdChargeCodes.php b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdChargeCodes.php new file mode 100644 index 000000000..24788914b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdChargeCodes.php @@ -0,0 +1,908 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +enum ZugferdChargeCodes: string +{ + + /** + * Advertising + */ + case ADVERTISING = "AA"; + + /** + * Telecommunication + */ + case TELECOMMUNICATION = "AAA"; + + /** + * Technical modification + */ + case TECHNICAL_MODIFICATION = "AAC"; + + /** + * Job-order production + */ + case JOBORDER_PRODUCTION = "AAD"; + + /** + * Outlays + */ + case OUTLAYS = "AAE"; + + /** + * Off-premises + */ + case OFFPREMISES = "AAF"; + + /** + * Additional processing + */ + case ADDITIONAL_PROCESSING = "AAH"; + + /** + * Attesting + */ + case ATTESTING = "AAI"; + + /** + * Acceptance + */ + case ACCEPTANCE = "AAS"; + + /** + * Rush delivery + */ + case RUSH_DELIVERY = "AAT"; + + /** + * Special construction + */ + case SPECIAL_CONSTRUCTION = "AAV"; + + /** + * Airport facilities + */ + case AIRPORT_FACILITIES = "AAY"; + + /** + * Concession + */ + case CONCESSION = "AAZ"; + + /** + * Compulsory storage + */ + case COMPULSORY_STORAGE = "ABA"; + + /** + * Fuel removal + */ + case FUEL_REMOVAL = "ABB"; + + /** + * Into plane + */ + case INTO_PLANE = "ABC"; + + /** + * Overtime + */ + case OVERTIME = "ABD"; + + /** + * Tooling + */ + case TOOLING = "ABF"; + + /** + * Miscellaneous + */ + case MISCELLANEOUS = "ABK"; + + /** + * Additional packaging + */ + case ADDITIONAL_PACKAGING = "ABL"; + + /** + * Dunnage + */ + case DUNNAGE = "ABN"; + + /** + * Containerisation + */ + case CONTAINERISATION = "ABR"; + + /** + * Carton packing + */ + case CARTON_PACKING = "ABS"; + + /** + * Hessian wrapped + */ + case HESSIAN_WRAPPED = "ABT"; + + /** + * Polyethylene wrap packing + */ + case POLYETHYLENE_WRAP_PACKING = "ABU"; + + /** + * Miscellaneous treatment + */ + case MISCELLANEOUS_TREATMENT = "ACF"; + + /** + * Enamelling treatment + */ + case ENAMELLING_TREATMENT = "ACG"; + + /** + * Heat treatment + */ + case HEAT_TREATMENT = "ACH"; + + /** + * Plating treatment + */ + case PLATING_TREATMENT = "ACI"; + + /** + * Painting + */ + case PAINTING = "ACJ"; + + /** + * Polishing + */ + case POLISHING = "ACK"; + + /** + * Priming + */ + case PRIMING = "ACL"; + + /** + * Preservation treatment + */ + case PRESERVATION_TREATMENT = "ACM"; + + /** + * Fitting + */ + case FITTING = "ACS"; + + /** + * Consolidation + */ + case CONSOLIDATION = "ADC"; + + /** + * Bill of lading + */ + case BILL_OF_LADING = "ADE"; + + /** + * Airbag + */ + case AIRBAG = "ADJ"; + + /** + * Transfer + */ + case TRANSFER = "ADK"; + + /** + * Slipsheet + */ + case SLIPSHEET = "ADL"; + + /** + * Binding + */ + case BINDING = "ADM"; + + /** + * Repair or replacement of broken returnable package + */ + case REPAIR_OR_REPLACEMENT_OF_BROKEN_RETURNABLE_PACKAGE = "ADN"; + + /** + * Efficient logistics + */ + case EFFICIENT_LOGISTICS = "ADO"; + + /** + * Merchandising + */ + case MERCHANDISING = "ADP"; + + /** + * Product mix + */ + case PRODUCT_MIX = "ADQ"; + + /** + * Other services + */ + case OTHER_SERVICES = "ADR"; + + /** + * Pick-up + */ + case PICKUP = "ADT"; + + /** + * Chronic illness + */ + case CHRONIC_ILLNESS = "ADW"; + + /** + * New product introduction + */ + case NEW_PRODUCT_INTRODUCTION = "ADY"; + + /** + * Direct delivery + */ + case DIRECT_DELIVERY = "ADZ"; + + /** + * Diversion + */ + case DIVERSION = "AEA"; + + /** + * Disconnect + */ + case DISCONNECT = "AEB"; + + /** + * Distribution + */ + case DISTRIBUTION = "AEC"; + + /** + * Handling of hazardous cargo + */ + case HANDLING_OF_HAZARDOUS_CARGO = "AED"; + + /** + * Rents and leases + */ + case RENTS_AND_LEASES = "AEF"; + + /** + * Location differential + */ + case LOCATION_DIFFERENTIAL = "AEH"; + + /** + * Aircraft refueling + */ + case AIRCRAFT_REFUELING = "AEI"; + + /** + * Fuel shipped into storage + */ + case FUEL_SHIPPED_INTO_STORAGE = "AEJ"; + + /** + * Cash on delivery + */ + case CASH_ON_DELIVERY = "AEK"; + + /** + * Small order processing service + */ + case SMALL_ORDER_PROCESSING_SERVICE = "AEL"; + + /** + * Clerical or administrative services + */ + case CLERICAL_OR_ADMINISTRATIVE_SERVICES = "AEM"; + + /** + * Guarantee + */ + case GUARANTEE = "AEN"; + + /** + * Collection and recycling + */ + case COLLECTION_AND_RECYCLING = "AEO"; + + /** + * Copyright fee collection + */ + case COPYRIGHT_FEE_COLLECTION = "AEP"; + + /** + * Veterinary inspection service + */ + case VETERINARY_INSPECTION_SERVICE = "AES"; + + /** + * Pensioner service + */ + case PENSIONER_SERVICE = "AET"; + + /** + * Medicine free pass holder + */ + case MEDICINE_FREE_PASS_HOLDER = "AEU"; + + /** + * Environmental protection service + */ + case ENVIRONMENTAL_PROTECTION_SERVICE = "AEV"; + + /** + * Environmental clean-up service + */ + case ENVIRONMENTAL_CLEANUP_SERVICE = "AEW"; + + /** + * National cheque processing service outside account area + */ + case NATIONAL_CHEQUE_PROCESSING_SERVICE_OUTSIDE_ACCOUNT_AREA = "AEX"; + + /** + * National payment service outside account area + */ + case NATIONAL_PAYMENT_SERVICE_OUTSIDE_ACCOUNT_AREA = "AEY"; + + /** + * National payment service within account area + */ + case NATIONAL_PAYMENT_SERVICE_WITHIN_ACCOUNT_AREA = "AEZ"; + + /** + * Adjustments + */ + case ADJUSTMENTS = "AJ"; + + /** + * Authentication + */ + case AUTHENTICATION = "AU"; + + /** + * Cataloguing + */ + case CATALOGUING = "CA"; + + /** + * Cartage + */ + case CARTAGE = "CAB"; + + /** + * Certification + */ + case CERTIFICATION = "CAD"; + + /** + * Certificate of conformance + */ + case CERTIFICATE_OF_CONFORMANCE = "CAE"; + + /** + * Certificate of origin + */ + case CERTIFICATE_OF_ORIGIN = "CAF"; + + /** + * Cutting + */ + case CUTTING = "CAI"; + + /** + * Consular service + */ + case CONSULAR_SERVICE = "CAJ"; + + /** + * Customer collection + */ + case CUSTOMER_COLLECTION = "CAK"; + + /** + * Payroll payment service + */ + case PAYROLL_PAYMENT_SERVICE = "CAL"; + + /** + * Cash transportation + */ + case CASH_TRANSPORTATION = "CAM"; + + /** + * Home banking service + */ + case HOME_BANKING_SERVICE = "CAN"; + + /** + * Bilateral agreement service + */ + case BILATERAL_AGREEMENT_SERVICE = "CAO"; + + /** + * Insurance brokerage service + */ + case INSURANCE_BROKERAGE_SERVICE = "CAP"; + + /** + * Cheque generation + */ + case CHEQUE_GENERATION = "CAQ"; + + /** + * Preferential merchandising location + */ + case PREFERENTIAL_MERCHANDISING_LOCATION = "CAR"; + + /** + * Crane + */ + case CRANE = "CAS"; + + /** + * Special colour service + */ + case SPECIAL_COLOUR_SERVICE = "CAT"; + + /** + * Sorting + */ + case SORTING = "CAU"; + + /** + * Battery collection and recycling + */ + case BATTERY_COLLECTION_AND_RECYCLING = "CAV"; + + /** + * Product take back fee + */ + case PRODUCT_TAKE_BACK_FEE = "CAW"; + + /** + * Quality control released + */ + case QUALITY_CONTROL_RELEASED = "CAX"; + + /** + * Quality control held + */ + case QUALITY_CONTROL_HELD = "CAY"; + + /** + * Quality control embargo + */ + case QUALITY_CONTROL_EMBARGO = "CAZ"; + + /** + * Car loading + */ + case CAR_LOADING = "CD"; + + /** + * Cleaning + */ + case CLEANING = "CG"; + + /** + * Cigarette stamping + */ + case CIGARETTE_STAMPING = "CS"; + + /** + * Count and recount + */ + case COUNT_AND_RECOUNT = "CT"; + + /** + * Layout/design + */ + case LAYOUT_DESIGN = "DAB"; + + /** + * Assortment allowance + */ + case ASSORTMENT_ALLOWANCE = "DAC"; + + /** + * Driver assigned unloading + */ + case DRIVER_ASSIGNED_UNLOADING = "DAD"; + + /** + * Debtor bound + */ + case DEBTOR_BOUND = "DAF"; + + /** + * Dealer allowance + */ + case DEALER_ALLOWANCE = "DAG"; + + /** + * Allowance transferable to the consumer + */ + case ALLOWANCE_TRANSFERABLE_TO_THE_CONSUMER = "DAH"; + + /** + * Growth of business + */ + case GROWTH_OF_BUSINESS = "DAI"; + + /** + * Introduction allowance + */ + case INTRODUCTION_ALLOWANCE = "DAJ"; + + /** + * Multi-buy promotion + */ + case MULTIBUY_PROMOTION = "DAK"; + + /** + * Partnership + */ + case PARTNERSHIP = "DAL"; + + /** + * Return handling + */ + case RETURN_HANDLING = "DAM"; + + /** + * Minimum order not fulfilled charge + */ + case MINIMUM_ORDER_NOT_FULFILLED_CHARGE = "DAN"; + + /** + * Point of sales threshold allowance + */ + case POINT_OF_SALES_THRESHOLD_ALLOWANCE = "DAO"; + + /** + * Wholesaling discount + */ + case WHOLESALING_DISCOUNT = "DAP"; + + /** + * Documentary credits transfer commission + */ + case DOCUMENTARY_CREDITS_TRANSFER_COMMISSION = "DAQ"; + + /** + * Delivery + */ + case DELIVERY = "DL"; + + /** + * Engraving + */ + case ENGRAVING = "EG"; + + /** + * Expediting + */ + case EXPEDITING = "EP"; + + /** + * Exchange rate guarantee + */ + case EXCHANGE_RATE_GUARANTEE = "ER"; + + /** + * Fabrication + */ + case FABRICATION = "FAA"; + + /** + * Freight equalization + */ + case FREIGHT_EQUALIZATION = "FAB"; + + /** + * Freight extraordinary handling + */ + case FREIGHT_EXTRAORDINARY_HANDLING = "FAC"; + + /** + * Freight service + */ + case FREIGHT_SERVICE = "FC"; + + /** + * Filling/handling + */ + case FILLING_HANDLING = "FH"; + + /** + * Financing + */ + case FINANCING = "FI"; + + /** + * Grinding + */ + case GRINDING = "GAA"; + + /** + * Hose + */ + case HOSE = "HAA"; + + /** + * Handling + */ + case HANDLING = "HD"; + + /** + * Hoisting and hauling + */ + case HOISTING_AND_HAULING = "HH"; + + /** + * Installation + */ + case INSTALLATION = "IAA"; + + /** + * Installation and warranty + */ + case INSTALLATION_AND_WARRANTY = "IAB"; + + /** + * Inside delivery + */ + case INSIDE_DELIVERY = "ID"; + + /** + * Inspection + */ + case INSPECTION = "IF"; + + /** + * Installation and training + */ + case INSTALLATION_AND_TRAINING = "IR"; + + /** + * Invoicing + */ + case INVOICING = "IS"; + + /** + * Koshering + */ + case KOSHERING = "KO"; + + /** + * Carrier count + */ + case CARRIER_COUNT = "L1"; + + /** + * Labelling + */ + case LABELLING = "LA"; + + /** + * Labour + */ + case LABOUR = "LAA"; + + /** + * Repair and return + */ + case REPAIR_AND_RETURN = "LAB"; + + /** + * Legalisation + */ + case LEGALISATION = "LF"; + + /** + * Mounting + */ + case MOUNTING = "MAE"; + + /** + * Mail invoice + */ + case MAIL_INVOICE = "MI"; + + /** + * Mail invoice to each location + */ + case MAIL_INVOICE_TO_EACH_LOCATION = "ML"; + + /** + * Non-returnable containers + */ + case NONRETURNABLE_CONTAINERS = "NAA"; + + /** + * Outside cable connectors + */ + case OUTSIDE_CABLE_CONNECTORS = "OA"; + + /** + * Invoice with shipment + */ + case INVOICE_WITH_SHIPMENT = "PA"; + + /** + * Phosphatizing (steel treatment) + */ + case PHOSPHATIZING_STEEL_TREATMENT = "PAA"; + + /** + * Packing + */ + case PACKING = "PC"; + + /** + * Palletizing + */ + case PALLETIZING = "PL"; + + /** + * Repacking + */ + case REPACKING = "RAB"; + + /** + * Repair + */ + case REPAIR = "RAC"; + + /** + * Returnable container + */ + case RETURNABLE_CONTAINER = "RAD"; + + /** + * Restocking + */ + case RESTOCKING = "RAF"; + + /** + * Re-delivery + */ + case REDELIVERY = "RE"; + + /** + * Refurbishing + */ + case REFURBISHING = "RF"; + + /** + * Rail wagon hire + */ + case RAIL_WAGON_HIRE = "RH"; + + /** + * Loading + */ + case LOADING = "RV"; + + /** + * Salvaging + */ + case SALVAGING = "SA"; + + /** + * Shipping and handling + */ + case SHIPPING_AND_HANDLING = "SAA"; + + /** + * Special packaging + */ + case SPECIAL_PACKAGING = "SAD"; + + /** + * Stamping + */ + case STAMPING = "SAE"; + + /** + * Consignee unload + */ + case CONSIGNEE_UNLOAD = "SAI"; + + /** + * Shrink-wrap + */ + case SHRINKWRAP = "SG"; + + /** + * Special handling + */ + case SPECIAL_HANDLING = "SH"; + + /** + * Special finish + */ + case SPECIAL_FINISH = "SM"; + + /** + * Set-up + */ + case SETUP = "SU"; + + /** + * Tank renting + */ + case TANK_RENTING = "TAB"; + + /** + * Testing + */ + case TESTING = "TAC"; + + /** + * Transportation - third party billing + */ + case TRANSPORTATION__THIRD_PARTY_BILLING = "TT"; + + /** + * Transportation by vendor + */ + case TRANSPORTATION_BY_VENDOR = "TV"; + + /** + * Drop yard + */ + case DROP_YARD = "V1"; + + /** + * Drop dock + */ + case DROP_DOCK = "V2"; + + /** + * Warehousing + */ + case WAREHOUSING = "WH"; + + /** + * Combine all same day shipment + */ + case COMBINE_ALL_SAME_DAY_SHIPMENT = "XAA"; + + /** + * Split pick-up + */ + case SPLIT_PICKUP = "YY"; + + /** + * Mutually defined + */ + case MUTUALLY_DEFINED = "ZZZ"; +} diff --git a/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdCountryCodes.php b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdCountryCodes.php new file mode 100644 index 000000000..8618a02da --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdCountryCodes.php @@ -0,0 +1,1273 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +enum ZugferdCountryCodes: string +{ + + /** + * Andorra + */ + case ANDORRA = "AD"; + + /** + * United Arab Emirates (the) + */ + case UNITED_ARAB_EMIRATES_THE = "AE"; + + /** + * Afghanistan + */ + case AFGHANISTAN = "AF"; + + /** + * Antigua and Barbuda + */ + case ANTIGUA_AND_BARBUDA = "AG"; + + /** + * Anguilla + */ + case ANGUILLA = "AI"; + + /** + * Albania + */ + case ALBANIA = "AL"; + + /** + * Armenia + */ + case ARMENIA = "AM"; + + /** + * Angola + */ + case ANGOLA = "AO"; + + /** + * Antarctica + */ + case ANTARCTICA = "AQ"; + + /** + * Argentina + */ + case ARGENTINA = "AR"; + + /** + * American Samoa + */ + case AMERICAN_SAMOA = "AS"; + + /** + * Austria + */ + case AUSTRIA = "AT"; + + /** + * Australia + */ + case AUSTRALIA = "AU"; + + /** + * Aruba + */ + case ARUBA = "AW"; + + /** + * Ã…land Islands + */ + case LAND_ISLANDS = "AX"; + + /** + * Azerbaijan + */ + case AZERBAIJAN = "AZ"; + + /** + * Bosnia and Herzegovina + */ + case BOSNIA_AND_HERZEGOVINA = "BA"; + + /** + * Barbados + */ + case BARBADOS = "BB"; + + /** + * Bangladesh + */ + case BANGLADESH = "BD"; + + /** + * Belgium + */ + case BELGIUM = "BE"; + + /** + * Burkina Faso + */ + case BURKINA_FASO = "BF"; + + /** + * Bulgaria + */ + case BULGARIA = "BG"; + + /** + * Bahrain + */ + case BAHRAIN = "BH"; + + /** + * Burundi + */ + case BURUNDI = "BI"; + + /** + * Benin + */ + case BENIN = "BJ"; + + /** + * Saint Barthélemy + */ + case SAINT_BARTHLEMY = "BL"; + + /** + * Bermuda + */ + case BERMUDA = "BM"; + + /** + * Brunei Darussalam + */ + case BRUNEI_DARUSSALAM = "BN"; + + /** + * Bolivia (Plurinational State of) + */ + case BOLIVIA_PLURINATIONAL_STATE_OF = "BO"; + + /** + * Bonaire, Sint Eustatius and Saba + */ + case BONAIRE_SINT_EUSTATIUS_AND_SABA = "BQ"; + + /** + * Brazil + */ + case BRAZIL = "BR"; + + /** + * Bahamas (the) + */ + case BAHAMAS_THE = "BS"; + + /** + * Bhutan + */ + case BHUTAN = "BT"; + + /** + * Bouvet Island + */ + case BOUVET_ISLAND = "BV"; + + /** + * Botswana + */ + case BOTSWANA = "BW"; + + /** + * Belarus + */ + case BELARUS = "BY"; + + /** + * Belize + */ + case BELIZE = "BZ"; + + /** + * Canada + */ + case CANADA = "CA"; + + /** + * Cocos (Keeling) Islands (the) + */ + case COCOS_KEELING_ISLANDS_THE = "CC"; + + /** + * Congo (the Democratic Republic of the) + */ + case CONGO_THE_DEMOCRATIC_REPUBLIC_OF_THE = "CD"; + + /** + * Central African Republic (the) + */ + case CENTRAL_AFRICAN_REPUBLIC_THE = "CF"; + + /** + * Congo (the) + */ + case CONGO_THE = "CG"; + + /** + * Switzerland + */ + case SWITZERLAND = "CH"; + + /** + * Côte d'Ivoire + */ + case CTE_DIVOIRE = "CI"; + + /** + * Cook Islands (the) + */ + case COOK_ISLANDS_THE = "CK"; + + /** + * Chile + */ + case CHILE = "CL"; + + /** + * Cameroon + */ + case CAMEROON = "CM"; + + /** + * China + */ + case CHINA = "CN"; + + /** + * Colombia + */ + case COLOMBIA = "CO"; + + /** + * Costa Rica + */ + case COSTA_RICA = "CR"; + + /** + * Cuba + */ + case CUBA = "CU"; + + /** + * Cabo Verde + */ + case CABO_VERDE = "CV"; + + /** + * Curaçao + */ + case CURAAO = "CW"; + + /** + * Christmas Island + */ + case CHRISTMAS_ISLAND = "CX"; + + /** + * Cyprus + */ + case CYPRUS = "CY"; + + /** + * Czechia + */ + case CZECHIA = "CZ"; + + /** + * Germany + */ + case GERMANY = "DE"; + + /** + * Djibouti + */ + case DJIBOUTI = "DJ"; + + /** + * Denmark + */ + case DENMARK = "DK"; + + /** + * Dominica + */ + case DOMINICA = "DM"; + + /** + * Dominican Republic (the) + */ + case DOMINICAN_REPUBLIC_THE = "DO"; + + /** + * Algeria + */ + case ALGERIA = "DZ"; + + /** + * Ecuador + */ + case ECUADOR = "EC"; + + /** + * Estonia + */ + case ESTONIA = "EE"; + + /** + * Egypt + */ + case EGYPT = "EG"; + + /** + * Western Sahara* + */ + case WESTERN_SAHARA = "EH"; + + /** + * Eritrea + */ + case ERITREA = "ER"; + + /** + * Spain + */ + case SPAIN = "ES"; + + /** + * Ethiopia + */ + case ETHIOPIA = "ET"; + + /** + * Finland + */ + case FINLAND = "FI"; + + /** + * Fiji + */ + case FIJI = "FJ"; + + /** + * Falkland Islands (the) [Malvinas] + */ + case FALKLAND_ISLANDS_THE_MALVINAS = "FK"; + + /** + * Micronesia (Federated States of) + */ + case MICRONESIA_FEDERATED_STATES_OF = "FM"; + + /** + * Faroe Islands (the) + */ + case FAROE_ISLANDS_THE = "FO"; + + /** + * France + */ + case FRANCE = "FR"; + + /** + * Gabon + */ + case GABON = "GA"; + + /** + * United Kingdom of Great Britain and Northern Ireland (the) + */ + case UNITED_KINGDOM_OF_GREAT_BRITAIN_AND_NORTHERN_IRELAND_THE = "GB"; + + /** + * Grenada + */ + case GRENADA = "GD"; + + /** + * Georgia + */ + case GEORGIA = "GE"; + + /** + * French Guiana + */ + case FRENCH_GUIANA = "GF"; + + /** + * Guernsey + */ + case GUERNSEY = "GG"; + + /** + * Ghana + */ + case GHANA = "GH"; + + /** + * Gibraltar + */ + case GIBRALTAR = "GI"; + + /** + * Greenland + */ + case GREENLAND = "GL"; + + /** + * Gambia (the) + */ + case GAMBIA_THE = "GM"; + + /** + * Guinea + */ + case GUINEA = "GN"; + + /** + * Guadeloupe + */ + case GUADELOUPE = "GP"; + + /** + * Equatorial Guinea + */ + case EQUATORIAL_GUINEA = "GQ"; + + /** + * Greece + */ + case GREECE = "GR"; + + /** + * South Georgia and the South Sandwich Islands + */ + case SOUTH_GEORGIA_AND_THE_SOUTH_SANDWICH_ISLANDS = "GS"; + + /** + * Guatemala + */ + case GUATEMALA = "GT"; + + /** + * Guam + */ + case GUAM = "GU"; + + /** + * Guinea-Bissau + */ + case GUINEABISSAU = "GW"; + + /** + * Guyana + */ + case GUYANA = "GY"; + + /** + * Hong Kong + */ + case HONG_KONG = "HK"; + + /** + * Heard Island and McDonald Islands + */ + case HEARD_ISLAND_AND_MCDONALD_ISLANDS = "HM"; + + /** + * Honduras + */ + case HONDURAS = "HN"; + + /** + * Croatia + */ + case CROATIA = "HR"; + + /** + * Haiti + */ + case HAITI = "HT"; + + /** + * Hungary + */ + case HUNGARY = "HU"; + + /** + * Indonesia + */ + case INDONESIA = "ID"; + + /** + * Ireland + */ + case IRELAND = "IE"; + + /** + * Israel + */ + case ISRAEL = "IL"; + + /** + * Isle of Man + */ + case ISLE_OF_MAN = "IM"; + + /** + * India + */ + case INDIA = "IN"; + + /** + * British Indian Ocean Territory (the) + */ + case BRITISH_INDIAN_OCEAN_TERRITORY_THE = "IO"; + + /** + * Iraq + */ + case IRAQ = "IQ"; + + /** + * Iran (Islamic Republic of) + */ + case IRAN_ISLAMIC_REPUBLIC_OF = "IR"; + + /** + * Iceland + */ + case ICELAND = "IS"; + + /** + * Italy + */ + case ITALY = "IT"; + + /** + * Jersey + */ + case JERSEY = "JE"; + + /** + * Jamaica + */ + case JAMAICA = "JM"; + + /** + * Jordan + */ + case JORDAN = "JO"; + + /** + * Japan + */ + case JAPAN = "JP"; + + /** + * Kenya + */ + case KENYA = "KE"; + + /** + * Kyrgyzstan + */ + case KYRGYZSTAN = "KG"; + + /** + * Cambodia + */ + case CAMBODIA = "KH"; + + /** + * Kiribati + */ + case KIRIBATI = "KI"; + + /** + * Comoros (the) + */ + case COMOROS_THE = "KM"; + + /** + * Saint Kitts and Nevis + */ + case SAINT_KITTS_AND_NEVIS = "KN"; + + /** + * Korea (the Democratic People's Republic of) + */ + case KOREA_THE_DEMOCRATIC_PEOPLES_REPUBLIC_OF = "KP"; + + /** + * Korea (the Republic of) + */ + case KOREA_THE_REPUBLIC_OF = "KR"; + + /** + * Kuwait + */ + case KUWAIT = "KW"; + + /** + * Cayman Islands (the) + */ + case CAYMAN_ISLANDS_THE = "KY"; + + /** + * Kazakhstan + */ + case KAZAKHSTAN = "KZ"; + + /** + * Lao People's Democratic Republic (the) + */ + case LAO_PEOPLES_DEMOCRATIC_REPUBLIC_THE = "LA"; + + /** + * Lebanon + */ + case LEBANON = "LB"; + + /** + * Saint Lucia + */ + case SAINT_LUCIA = "LC"; + + /** + * Liechtenstein + */ + case LIECHTENSTEIN = "LI"; + + /** + * Sri Lanka + */ + case SRI_LANKA = "LK"; + + /** + * Liberia + */ + case LIBERIA = "LR"; + + /** + * Lesotho + */ + case LESOTHO = "LS"; + + /** + * Lithuania + */ + case LITHUANIA = "LT"; + + /** + * Luxembourg + */ + case LUXEMBOURG = "LU"; + + /** + * Latvia + */ + case LATVIA = "LV"; + + /** + * Libya + */ + case LIBYA = "LY"; + + /** + * Morocco + */ + case MOROCCO = "MA"; + + /** + * Monaco + */ + case MONACO = "MC"; + + /** + * Moldova (the Republic of) + */ + case MOLDOVA_THE_REPUBLIC_OF = "MD"; + + /** + * Montenegro + */ + case MONTENEGRO = "ME"; + + /** + * Saint Martin (French part) + */ + case SAINT_MARTIN_FRENCH_PART = "MF"; + + /** + * Madagascar + */ + case MADAGASCAR = "MG"; + + /** + * Marshall Islands (the) + */ + case MARSHALL_ISLANDS_THE = "MH"; + + /** + * North Macedonia + */ + case NORTH_MACEDONIA = "MK"; + + /** + * Mali + */ + case MALI = "ML"; + + /** + * Myanmar + */ + case MYANMAR = "MM"; + + /** + * Mongolia + */ + case MONGOLIA = "MN"; + + /** + * Macao + */ + case MACAO = "MO"; + + /** + * Northern Mariana Islands (the) + */ + case NORTHERN_MARIANA_ISLANDS_THE = "MP"; + + /** + * Martinique + */ + case MARTINIQUE = "MQ"; + + /** + * Mauritania + */ + case MAURITANIA = "MR"; + + /** + * Montserrat + */ + case MONTSERRAT = "MS"; + + /** + * Malta + */ + case MALTA = "MT"; + + /** + * Mauritius + */ + case MAURITIUS = "MU"; + + /** + * Maldives + */ + case MALDIVES = "MV"; + + /** + * Malawi + */ + case MALAWI = "MW"; + + /** + * Mexico + */ + case MEXICO = "MX"; + + /** + * Malaysia + */ + case MALAYSIA = "MY"; + + /** + * Mozambique + */ + case MOZAMBIQUE = "MZ"; + + /** + * Namibia + */ + case NAMIBIA = "NA"; + + /** + * New Caledonia + */ + case NEW_CALEDONIA = "NC"; + + /** + * Niger (the) + */ + case NIGER_THE = "NE"; + + /** + * Norfolk Island + */ + case NORFOLK_ISLAND = "NF"; + + /** + * Nigeria + */ + case NIGERIA = "NG"; + + /** + * Nicaragua + */ + case NICARAGUA = "NI"; + + /** + * Netherlands (the) + */ + case NETHERLANDS_THE = "NL"; + + /** + * Norway + */ + case NORWAY = "NO"; + + /** + * Nepal + */ + case NEPAL = "NP"; + + /** + * Nauru + */ + case NAURU = "NR"; + + /** + * Niue + */ + case NIUE = "NU"; + + /** + * New Zealand + */ + case NEW_ZEALAND = "NZ"; + + /** + * Oman + */ + case OMAN = "OM"; + + /** + * Panama + */ + case PANAMA = "PA"; + + /** + * Peru + */ + case PERU = "PE"; + + /** + * French Polynesia + */ + case FRENCH_POLYNESIA = "PF"; + + /** + * Papua New Guinea + */ + case PAPUA_NEW_GUINEA = "PG"; + + /** + * Philippines (the) + */ + case PHILIPPINES_THE = "PH"; + + /** + * Pakistan + */ + case PAKISTAN = "PK"; + + /** + * Poland + */ + case POLAND = "PL"; + + /** + * Saint Pierre and Miquelon + */ + case SAINT_PIERRE_AND_MIQUELON = "PM"; + + /** + * Pitcairn + */ + case PITCAIRN = "PN"; + + /** + * Puerto Rico + */ + case PUERTO_RICO = "PR"; + + /** + * Palestine, State of + */ + case PALESTINE_STATE_OF = "PS"; + + /** + * Portugal + */ + case PORTUGAL = "PT"; + + /** + * Palau + */ + case PALAU = "PW"; + + /** + * Paraguay + */ + case PARAGUAY = "PY"; + + /** + * Qatar + */ + case QATAR = "QA"; + + /** + * Réunion + */ + case RUNION = "RE"; + + /** + * Romania + */ + case ROMANIA = "RO"; + + /** + * Serbia + */ + case SERBIA = "RS"; + + /** + * Russian Federation (the) + */ + case RUSSIAN_FEDERATION_THE = "RU"; + + /** + * Rwanda + */ + case RWANDA = "RW"; + + /** + * Saudi Arabia + */ + case SAUDI_ARABIA = "SA"; + + /** + * Solomon Islands + */ + case SOLOMON_ISLANDS = "SB"; + + /** + * Seychelles + */ + case SEYCHELLES = "SC"; + + /** + * Sudan (the) + */ + case SUDAN_THE = "SD"; + + /** + * Sweden + */ + case SWEDEN = "SE"; + + /** + * Singapore + */ + case SINGAPORE = "SG"; + + /** + * Saint Helena, Ascension and Tristan da Cunha + */ + case SAINT_HELENA_ASCENSION_AND_TRISTAN_DA_CUNHA = "SH"; + + /** + * Slovenia + */ + case SLOVENIA = "SI"; + + /** + * Svalbard and Jan Mayen + */ + case SVALBARD_AND_JAN_MAYEN = "SJ"; + + /** + * Slovakia + */ + case SLOVAKIA = "SK"; + + /** + * Sierra Leone + */ + case SIERRA_LEONE = "SL"; + + /** + * San Marino + */ + case SAN_MARINO = "SM"; + + /** + * Senegal + */ + case SENEGAL = "SN"; + + /** + * Somalia + */ + case SOMALIA = "SO"; + + /** + * Suriname + */ + case SURINAME = "SR"; + + /** + * South Sudan + */ + case SOUTH_SUDAN = "SS"; + + /** + * Sao Tome and Principe + */ + case SAO_TOME_AND_PRINCIPE = "ST"; + + /** + * El Salvador + */ + case EL_SALVADOR = "SV"; + + /** + * Sint Maarten (Dutch part) + */ + case SINT_MAARTEN_DUTCH_PART = "SX"; + + /** + * Syrian Arab Republic (the) + */ + case SYRIAN_ARAB_REPUBLIC_THE = "SY"; + + /** + * Eswatini + */ + case ESWATINI = "SZ"; + + /** + * Turks and Caicos Islands (the) + */ + case TURKS_AND_CAICOS_ISLANDS_THE = "TC"; + + /** + * Chad + */ + case CHAD = "TD"; + + /** + * French Southern Territories (the) + */ + case FRENCH_SOUTHERN_TERRITORIES_THE = "TF"; + + /** + * Togo + */ + case TOGO = "TG"; + + /** + * Thailand + */ + case THAILAND = "TH"; + + /** + * Tajikistan + */ + case TAJIKISTAN = "TJ"; + + /** + * Tokelau + */ + case TOKELAU = "TK"; + + /** + * Timor-Leste + */ + case TIMORLESTE = "TL"; + + /** + * Turkmenistan + */ + case TURKMENISTAN = "TM"; + + /** + * Tunisia + */ + case TUNISIA = "TN"; + + /** + * Tonga + */ + case TONGA = "TO"; + + /** + * Turkey + */ + case TURKEY = "TR"; + + /** + * Trinidad and Tobago + */ + case TRINIDAD_AND_TOBAGO = "TT"; + + /** + * Tuvalu + */ + case TUVALU = "TV"; + + /** + * Taiwan (Province of China) + */ + case TAIWAN_PROVINCE_OF_CHINA = "TW"; + + /** + * Tanzania, the United Republic of + */ + case TANZANIA_THE_UNITED_REPUBLIC_OF = "TZ"; + + /** + * Ukraine + */ + case UKRAINE = "UA"; + + /** + * Uganda + */ + case UGANDA = "UG"; + + /** + * United States Minor Outlying Islands (the) + */ + case UNITED_STATES_MINOR_OUTLYING_ISLANDS_THE = "UM"; + + /** + * United States of America (the) + */ + case UNITED_STATES_OF_AMERICA_THE = "US"; + + /** + * Uruguay + */ + case URUGUAY = "UY"; + + /** + * Uzbekistan + */ + case UZBEKISTAN = "UZ"; + + /** + * Holy See (the) + */ + case HOLY_SEE_THE = "VA"; + + /** + * Saint Vincent and the Grenadines + */ + case SAINT_VINCENT_AND_THE_GRENADINES = "VC"; + + /** + * Venezuela (Bolivarian Republic of) + */ + case VENEZUELA_BOLIVARIAN_REPUBLIC_OF = "VE"; + + /** + * Virgin Islands (British) + */ + case VIRGIN_ISLANDS_BRITISH = "VG"; + + /** + * Virgin Islands (U.S.) + */ + case VIRGIN_ISLANDS_US = "VI"; + + /** + * Viet Nam + */ + case VIET_NAM = "VN"; + + /** + * Vanuatu + */ + case VANUATU = "VU"; + + /** + * Wallis and Futuna + */ + case WALLIS_AND_FUTUNA = "WF"; + + /** + * Samoa + */ + case SAMOA = "WS"; + + /** + * Yemen + */ + case YEMEN = "YE"; + + /** + * Mayotte + */ + case MAYOTTE = "YT"; + + /** + * South Africa + */ + case SOUTH_AFRICA = "ZA"; + + /** + * Zambia + */ + case ZAMBIA = "ZM"; + + /** + * Zimbabwe + */ + case ZIMBABWE = "ZW"; + + /** + * Kosovo + */ + case KOSOVO = "1A"; +} diff --git a/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdCurrencyCodes.php b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdCurrencyCodes.php new file mode 100644 index 000000000..5497f39e7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdCurrencyCodes.php @@ -0,0 +1,918 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +enum ZugferdCurrencyCodes: string +{ + + /** + * UAE Dirham + */ + case UAE_DIRHAM = "AED"; + + /** + * Afghani + */ + case AFGHANI = "AFN"; + + /** + * Lek + */ + case LEK = "ALL"; + + /** + * Armenian Dram + */ + case ARMENIAN_DRAM = "AMD"; + + /** + * Netherlands Antillean Guilder + */ + case NETHERLANDS_ANTILLEAN_GUILDER = "ANG"; + + /** + * Kwanza + */ + case KWANZA = "AOA"; + + /** + * Argentine Peso + */ + case ARGENTINE_PESO = "ARS"; + + /** + * Australian Dollar + */ + case AUSTRALIAN_DOLLAR = "AUD"; + + /** + * Aruban Florin + */ + case ARUBAN_FLORIN = "AWG"; + + /** + * Azerbaijan Manat + */ + case AZERBAIJAN_MANAT = "AZN"; + + /** + * Convertible Mark + */ + case CONVERTIBLE_MARK = "BAM"; + + /** + * Barbados Dollar + */ + case BARBADOS_DOLLAR = "BBD"; + + /** + * Taka + */ + case TAKA = "BDT"; + + /** + * Bulgarian Lev + */ + case BULGARIAN_LEV = "BGN"; + + /** + * Bahraini Dinar + */ + case BAHRAINI_DINAR = "BHD"; + + /** + * Burundi Franc + */ + case BURUNDI_FRANC = "BIF"; + + /** + * Bermudian Dollar + */ + case BERMUDIAN_DOLLAR = "BMD"; + + /** + * Brunei Dollar + */ + case BRUNEI_DOLLAR = "BND"; + + /** + * Boliviano + */ + case BOLIVIANO = "BOB"; + + /** + * Mvdol + */ + case MVDOL = "BOV"; + + /** + * Brazilian Real + */ + case BRAZILIAN_REAL = "BRL"; + + /** + * Bahamian Dollar + */ + case BAHAMIAN_DOLLAR = "BSD"; + + /** + * Ngultrum + */ + case NGULTRUM = "BTN"; + + /** + * Pula + */ + case PULA = "BWP"; + + /** + * Belarusian Ruble + */ + case BELARUSIAN_RUBLE = "BYN"; + + /** + * Belize Dollar + */ + case BELIZE_DOLLAR = "BZD"; + + /** + * Canadian Dollar + */ + case CANADIAN_DOLLAR = "CAD"; + + /** + * Congolese Franc + */ + case CONGOLESE_FRANC = "CDF"; + + /** + * WIR Euro + */ + case WIR_EURO = "CHE"; + + /** + * Swiss Franc + */ + case SWISS_FRANC = "CHF"; + + /** + * WIR Franc + */ + case WIR_FRANC = "CHW"; + + /** + * Unidad de Fomento + */ + case UNIDAD_DE_FOMENTO = "CLF"; + + /** + * Chilean Peso + */ + case CHILEAN_PESO = "CLP"; + + /** + * Yuan Renminbi + */ + case YUAN_RENMINBI = "CNY"; + + /** + * Colombian Peso + */ + case COLOMBIAN_PESO = "COP"; + + /** + * Unidad de Valor Real + */ + case UNIDAD_DE_VALOR_REAL = "COU"; + + /** + * Costa Rican Colon + */ + case COSTA_RICAN_COLON = "CRC"; + + /** + * Peso Convertible + */ + case PESO_CONVERTIBLE = "CUC"; + + /** + * Cuban Peso + */ + case CUBAN_PESO = "CUP"; + + /** + * Cabo Verde Escudo + */ + case CABO_VERDE_ESCUDO = "CVE"; + + /** + * Czech Koruna + */ + case CZECH_KORUNA = "CZK"; + + /** + * Djibouti Franc + */ + case DJIBOUTI_FRANC = "DJF"; + + /** + * Danish Krone + */ + case DANISH_KRONE = "DKK"; + + /** + * Dominican Peso + */ + case DOMINICAN_PESO = "DOP"; + + /** + * Algerian Dinar + */ + case ALGERIAN_DINAR = "DZD"; + + /** + * Egyptian Pound + */ + case EGYPTIAN_POUND = "EGP"; + + /** + * Nakfa + */ + case NAKFA = "ERN"; + + /** + * Ethiopian Birr + */ + case ETHIOPIAN_BIRR = "ETB"; + + /** + * Euro + */ + case EURO = "EUR"; + + /** + * Fiji Dollar + */ + case FIJI_DOLLAR = "FJD"; + + /** + * Falkland Islands Pound + */ + case FALKLAND_ISLANDS_POUND = "FKP"; + + /** + * Pound Sterling + */ + case POUND_STERLING = "GBP"; + + /** + * Lari + */ + case LARI = "GEL"; + + /** + * Ghana Cedi + */ + case GHANA_CEDI = "GHS"; + + /** + * Gibraltar Pound + */ + case GIBRALTAR_POUND = "GIP"; + + /** + * Dalasi + */ + case DALASI = "GMD"; + + /** + * Guinean Franc + */ + case GUINEAN_FRANC = "GNF"; + + /** + * Quetzal + */ + case QUETZAL = "GTQ"; + + /** + * Guyana Dollar + */ + case GUYANA_DOLLAR = "GYD"; + + /** + * Hong Kong Dollar + */ + case HONG_KONG_DOLLAR = "HKD"; + + /** + * Lempira + */ + case LEMPIRA = "HNL"; + + /** + * Kuna + */ + case KUNA = "HRK"; + + /** + * Gourde + */ + case GOURDE = "HTG"; + + /** + * Forint + */ + case FORINT = "HUF"; + + /** + * Rupiah + */ + case RUPIAH = "IDR"; + + /** + * New Israeli Sheqel + */ + case NEW_ISRAELI_SHEQEL = "ILS"; + + /** + * Indian Rupee + */ + case INDIAN_RUPEE = "INR"; + + /** + * Iraqi Dinar + */ + case IRAQI_DINAR = "IQD"; + + /** + * Iranian Rial + */ + case IRANIAN_RIAL = "IRR"; + + /** + * Iceland Krona + */ + case ICELAND_KRONA = "ISK"; + + /** + * Jamaican Dollar + */ + case JAMAICAN_DOLLAR = "JMD"; + + /** + * Jordanian Dinar + */ + case JORDANIAN_DINAR = "JOD"; + + /** + * Yen + */ + case YEN = "JPY"; + + /** + * Kenyan Shilling + */ + case KENYAN_SHILLING = "KES"; + + /** + * Som + */ + case SOM = "KGS"; + + /** + * Riel + */ + case RIEL = "KHR"; + + /** + * Comorian Franc + */ + case COMORIAN_FRANC = "KMF"; + + /** + * North Korean Won + */ + case NORTH_KOREAN_WON = "KPW"; + + /** + * Won + */ + case WON = "KRW"; + + /** + * Kuwaiti Dinar + */ + case KUWAITI_DINAR = "KWD"; + + /** + * Cayman Islands Dollar + */ + case CAYMAN_ISLANDS_DOLLAR = "KYD"; + + /** + * Tenge + */ + case TENGE = "KZT"; + + /** + * Lao Kip + */ + case LAO_KIP = "LAK"; + + /** + * Lebanese Pound + */ + case LEBANESE_POUND = "LBP"; + + /** + * Sri Lanka Rupee + */ + case SRI_LANKA_RUPEE = "LKR"; + + /** + * Liberian Dollar + */ + case LIBERIAN_DOLLAR = "LRD"; + + /** + * Loti + */ + case LOTI = "LSL"; + + /** + * Libyan Dinar + */ + case LIBYAN_DINAR = "LYD"; + + /** + * Moroccan Dirham + */ + case MOROCCAN_DIRHAM = "MAD"; + + /** + * Moldovan Leu + */ + case MOLDOVAN_LEU = "MDL"; + + /** + * Malagasy Ariary + */ + case MALAGASY_ARIARY = "MGA"; + + /** + * Denar + */ + case DENAR = "MKD"; + + /** + * Kyat + */ + case KYAT = "MMK"; + + /** + * Tugrik + */ + case TUGRIK = "MNT"; + + /** + * Pataca + */ + case PATACA = "MOP"; + + /** + * Ouguiya + */ + case OUGUIYA = "MRU"; + + /** + * Mauritius Rupee + */ + case MAURITIUS_RUPEE = "MUR"; + + /** + * Rufiyaa + */ + case RUFIYAA = "MVR"; + + /** + * Malawi Kwacha + */ + case MALAWI_KWACHA = "MWK"; + + /** + * Mexican Peso + */ + case MEXICAN_PESO = "MXN"; + + /** + * Mexican Unidad de Inversion (UDI) + */ + case MEXICAN_UNIDAD_DE_INVERSION_UDI = "MXV"; + + /** + * Malaysian Ringgit + */ + case MALAYSIAN_RINGGIT = "MYR"; + + /** + * Mozambique Metical + */ + case MOZAMBIQUE_METICAL = "MZN"; + + /** + * Namibia Dollar + */ + case NAMIBIA_DOLLAR = "NAD"; + + /** + * Naira + */ + case NAIRA = "NGN"; + + /** + * Cordoba Oro + */ + case CORDOBA_ORO = "NIO"; + + /** + * Norwegian Krone + */ + case NORWEGIAN_KRONE = "NOK"; + + /** + * Nepalese Rupee + */ + case NEPALESE_RUPEE = "NPR"; + + /** + * New Zealand Dollar + */ + case NEW_ZEALAND_DOLLAR = "NZD"; + + /** + * Rial Omani + */ + case RIAL_OMANI = "OMR"; + + /** + * Balboa + */ + case BALBOA = "PAB"; + + /** + * Sol + */ + case SOL = "PEN"; + + /** + * Kina + */ + case KINA = "PGK"; + + /** + * Philippine Peso + */ + case PHILIPPINE_PESO = "PHP"; + + /** + * Pakistan Rupee + */ + case PAKISTAN_RUPEE = "PKR"; + + /** + * Zloty + */ + case ZLOTY = "PLN"; + + /** + * Guarani + */ + case GUARANI = "PYG"; + + /** + * Qatari Rial + */ + case QATARI_RIAL = "QAR"; + + /** + * Romanian Leu + */ + case ROMANIAN_LEU = "RON"; + + /** + * Serbian Dinar + */ + case SERBIAN_DINAR = "RSD"; + + /** + * Russian Ruble + */ + case RUSSIAN_RUBLE = "RUB"; + + /** + * Rwanda Franc + */ + case RWANDA_FRANC = "RWF"; + + /** + * Saudi Riyal + */ + case SAUDI_RIYAL = "SAR"; + + /** + * Solomon Islands Dollar + */ + case SOLOMON_ISLANDS_DOLLAR = "SBD"; + + /** + * Seychelles Rupee + */ + case SEYCHELLES_RUPEE = "SCR"; + + /** + * Sudanese Pound + */ + case SUDANESE_POUND = "SDG"; + + /** + * Swedish Krona + */ + case SWEDISH_KRONA = "SEK"; + + /** + * Singapore Dollar + */ + case SINGAPORE_DOLLAR = "SGD"; + + /** + * Saint Helena Pound + */ + case SAINT_HELENA_POUND = "SHP"; + + /** + * Leone + */ + case LEONE = "SLL"; + + /** + * Somali Shilling + */ + case SOMALI_SHILLING = "SOS"; + + /** + * Surinam Dollar + */ + case SURINAM_DOLLAR = "SRD"; + + /** + * South Sudanese Pound + */ + case SOUTH_SUDANESE_POUND = "SSP"; + + /** + * Dobra + */ + case DOBRA = "STN"; + + /** + * El Salvador Colon + */ + case EL_SALVADOR_COLON = "SVC"; + + /** + * Syrian Pound + */ + case SYRIAN_POUND = "SYP"; + + /** + * Lilangeni + */ + case LILANGENI = "SZL"; + + /** + * Baht + */ + case BAHT = "THB"; + + /** + * Somoni + */ + case SOMONI = "TJS"; + + /** + * Turkmenistan New Manat + */ + case TURKMENISTAN_NEW_MANAT = "TMT"; + + /** + * Tunisian Dinar + */ + case TUNISIAN_DINAR = "TND"; + + /** + * Pa’anga + */ + case PAANGA = "TOP"; + + /** + * Turkish Lira + */ + case TURKISH_LIRA = "TRY"; + + /** + * Trinidad and Tobago Dollar + */ + case TRINIDAD_AND_TOBAGO_DOLLAR = "TTD"; + + /** + * New Taiwan Dollar + */ + case NEW_TAIWAN_DOLLAR = "TWD"; + + /** + * Tanzanian Shilling + */ + case TANZANIAN_SHILLING = "TZS"; + + /** + * Hryvnia + */ + case HRYVNIA = "UAH"; + + /** + * Uganda Shilling + */ + case UGANDA_SHILLING = "UGX"; + + /** + * US Dollar + */ + case US_DOLLAR = "USD"; + + /** + * US Dollar (Next day) + */ + case US_DOLLAR_NEXT_DAY = "USN"; + + /** + * Uruguay Peso en Unidades Indexadas (UI) + */ + case URUGUAY_PESO_EN_UNIDADES_INDEXADAS_UI = "UYI"; + + /** + * Peso Uruguayo + */ + case PESO_URUGUAYO = "UYU"; + + /** + * Unidad Previsional + */ + case UNIDAD_PREVISIONAL = "UYW"; + + /** + * Uzbekistan Sum + */ + case UZBEKISTAN_SUM = "UZS"; + + /** + * Bolívar Soberano + */ + case BOLVAR_SOBERANO = "VES"; + + /** + * Dong + */ + case DONG = "VND"; + + /** + * Vatu + */ + case VATU = "VUV"; + + /** + * Tala + */ + case TALA = "WST"; + + /** + * CFA Franc BEAC + */ + case CFA_FRANC_BEAC = "XAF"; + + /** + * Silver + */ + case SILVER = "XAG"; + + /** + * Gold + */ + case GOLD = "XAU"; + + /** + * Bond Markets Unit European Composite Unit (EURCO) + */ + case BOND_MARKETS_UNIT_EUROPEAN_COMPOSITE_UNIT_EURCO = "XBA"; + + /** + * Bond Markets Unit European Monetary Unit (E.M.U.-6) + */ + case BOND_MARKETS_UNIT_EUROPEAN_MONETARY_UNIT_EMU6 = "XBB"; + + /** + * Bond Markets Unit European Unit of Account 9 (E.U.A.-9) + */ + case BOND_MARKETS_UNIT_EUROPEAN_UNIT_OF_ACCOUNT_9_EUA9 = "XBC"; + + /** + * Bond Markets Unit European Unit of Account 17 (E.U.A.-17) + */ + case BOND_MARKETS_UNIT_EUROPEAN_UNIT_OF_ACCOUNT_17_EUA17 = "XBD"; + + /** + * East Caribbean Dollar + */ + case EAST_CARIBBEAN_DOLLAR = "XCD"; + + /** + * SDR (Special Drawing Right) + */ + case SDR_SPECIAL_DRAWING_RIGHT = "XDR"; + + /** + * CFA Franc BCEAO + */ + case CFA_FRANC_BCEAO = "XOF"; + + /** + * Palladium + */ + case PALLADIUM = "XPD"; + + /** + * CFP Franc + */ + case CFP_FRANC = "XPF"; + + /** + * Platinum + */ + case PLATINUM = "XPT"; + + /** + * Sucre + */ + case SUCRE = "XSU"; + + /** + * Codes specifically reserved for testing purposes + */ + case CODES_SPECIFICALLY_RESERVED_FOR_TESTING_PURPOSES = "XTS"; + + /** + * ADB Unit of Account + */ + case ADB_UNIT_OF_ACCOUNT = "XUA"; + + /** + * The codes assigned for transactions where no currency is involved + */ + case THE_CODES_ASSIGNED_FOR_TRANSACTIONS_WHERE_NO_CURRENCY_IS_INVOLVED = "XXX"; + + /** + * Yemeni Rial + */ + case YEMENI_RIAL = "YER"; + + /** + * Rand + */ + case RAND = "ZAR"; + + /** + * Zambian Kwacha + */ + case ZAMBIAN_KWACHA = "ZMW"; + + /** + * Zimbabwe Dollar + */ + case ZIMBABWE_DOLLAR = "ZWL"; +} diff --git a/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdDutyTaxFeeCategories.php b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdDutyTaxFeeCategories.php new file mode 100644 index 000000000..f4da57cb6 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdDutyTaxFeeCategories.php @@ -0,0 +1,68 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +enum ZugferdDutyTaxFeeCategories: string +{ + + /** + * Standard rate + */ + case STANDARD_RATE = "S"; + + /** + * Zero rated goods + */ + case ZERO_RATED_GOODS = "Z"; + + /** + * Exempt from tax + */ + case EXEMPT_FROM_TAX = "E"; + + /** + * VAT Reverse charge + */ + case VAT_REVERSE_CHARGE = "AE"; + + /** + * VAT exempt for EEA intra-community supply of goods and services + */ + case VAT_EXEMPT_FOR_EEA_INTRACOMMUNITY_SUPPLY_OF_GOODS_AND_SERVICES = "K"; + + /** + * Free export item, tax not charged + */ + case FREE_EXPORT_ITEM_TAX_NOT_CHARGED = "G"; + + /** + * Service outside scope of tax + */ + case SERVICE_OUTSIDE_SCOPE_OF_TAX = "O"; + + /** + * Canary Islands general indirect tax + */ + case CANARY_ISLANDS_GENERAL_INDIRECT_TAX = "L"; + + /** + * Tax for production, services and importation in Ceuta and Melilla + */ + case TAX_FOR_PRODUCTION_SERVICES_AND_IMPORTATION_IN_CEUTA_AND_MELILLA = "M"; +} diff --git a/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdElectronicAddressScheme.php b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdElectronicAddressScheme.php new file mode 100644 index 000000000..7827002a9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdElectronicAddressScheme.php @@ -0,0 +1,479 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +enum ZugferdInvoiceType: int +{ + + /** + * Debit note related to goods or services (80) + * is an Invoice + */ + case DEBITNOTERELATEDTOGOODSSERVICES = 80; + + /** + * Credit note related to goods or services (81) + * is a Credit Note + */ + case CREDITNOTERELATEDTOGOODSSERVICES = 81; + + /** + * Metered services invoice (82) + * is an Invoice + */ + case METEREDSERVICESINVOICE = 82; + + /** + * Credit note related to financial adjustments (83) + * is a Credit Note + */ + case CREDITNOTERELATEDTOFINANCIALADJUSTMENTS = 83; + + /** + * Debit note related to financial adjustments (84) + * is an Invoice + */ + case DEBITNOTERELATEDTOFINANCIALADJUSTMENTS = 84; + + /** + * Invoicing data sheet (130) + * is an Invoice + */ + case INVOICINGDATASHEET = 130; + + /** + * Direct payment valuation (202) + * is an Invoice + */ + case DIRECTPAYMENTVALUATION = 202; + + /** + * Provisional payment valuation (203) + * is an Invoice + */ + case PROVISIONALPAYMENTVALUATION = 203; + + /** + * Payment valuation (204) + * is an Invoice + */ + case PAYMENTVALUATION = 204; + + /** + * Interim application for payment (211) + * is an Invoice + */ + case 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 + */ + case SELFBILLEDCREDITNOTE = 261; + + /** + * Consolidated credit note - goods and services (262) + * is a Credit Note + */ + case CONSOLIDATEDCREDITNOTESGOODSERVICES = 262; + + /** + * Price variation invoice (295) + * is an Invoice + */ + case PRICEVARIATIONINVOICE = 295; + + /** + * Credit note for price variation (296) + * is a Credit Note + */ + case CREDITNOTEPRICEVARIATION = 296; + + /** + * Delcredere credit note (308) + * is a Credit Note + */ + case DELCREDERECREDITNOTE = 308; + + /** + * Proforma invoice (325) + * is an Invoice + */ + case PROFORMAINVOICE = 325; + + /** + * Partial invoice (326) + * is an Invoice + * + * Teilrechnung + */ + case PARTIALINVOICE = 326; + + /** + * Commercial invoice (380) + * is an Invoice + * + * This is the main invoice type + * + * Handelsrechnung + */ + case INVOICE = 380; + + /** + * Credit note (381) + * is a Credit Note + * + * This is the main credit note type + * + * Gutschriftanzeige + */ + case CREDITNOTE = 381; + + /** + * Debit note (383) + * is an Invoice + * + * Belastungsanzeige + */ + case DEBITNOTE = 383; + + /** + * Corrected invoice (384) + * is an Invoice + * + * Rechnungskorrektur + */ + case CORRECTION = 384; + + /** + * Consolidated invoice (385) + * is an Invoice + */ + case 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. + */ + case PREPAYMENTINVOICE = 386; + + /** + * Hire invoice (387) + * is an Invoice + */ + case HIREINVOICE = 387; + + /** + * Tax invoice (388) + * is an Invoice + */ + case 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. + */ + case SELFBILLEDINVOICE = 389; + + /** + * Delcredere invoice (390) + * is an Invoice + */ + case DELCREDEREINVOICE = 390; + + /** + * Factored invoice (393) + * is an Invoice + */ + case FACTOREDINVOICE = 393; + + /** + * Lease invoice (394) + * is an Invoice + */ + case LEASEINVOICE = 394; + + /** + * Consignment invoice (395) + * is an Invoice + */ + case CONSIGNMENTINVOICE = 395; + + /** + * Factored credit note (396) + * is a Credit Note + */ + case FACTOREDCREDITNOTE = 396; + + /** + * Optical Character Reading (OCR) payment credit note (420) + * is a Credit Note + */ + case OCRPAYMENTCREDITNOTE = 420; + + /** + * Debit advice (456) + * is an Invoice + */ + case DEBITADVICE = 456; + + /** + * Reversal of debit (457) + * is an Invoice + */ + case REVERSALOFDEBIT = 457; + + /** + * Reversal of credit (458) + * is a Credit Note + */ + case REVERSALOFCREDIT = 458; + + /** + * Self billed debit note (527) + * is an Invoice + */ + case SELFBILLEDDEBITNOTE = 527; + + /** + * Insurer's invoice (575) + * is an Invoice + */ + case INSURERSINVOICE = 575; + + /** + * Forwarder's invoice (623) + * is an Invoice + */ + case FORWARDERSINVOICE = 623; + + /** + * Port charges documents (633) + * is an Invoice + */ + case 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! + */ + case INVOICEINFORMATION = 751; + + /** + * Freight invoice (780) + * is an Invoice + */ + case FREIGHTINVOICE = 780; + + /** + * Customs invoice (935) + * is an Invoice + */ + case CUSTOMSINVOICE = 935; + + /** + * Corrected invoice (1380) + * is an Invoice + * + * Old ZUGFeRD variant, use Corrected Invoice (384) instead + */ + case CORRECTIONOLD = 1380; +} diff --git a/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdItemTypeIdentificationCodes.php b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdItemTypeIdentificationCodes.php new file mode 100644 index 000000000..9dc8f467f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdItemTypeIdentificationCodes.php @@ -0,0 +1,928 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +enum ZugferdItemTypeIdentificationCodes: string +{ + + /** + * Product version number + */ + case UNTDID_7143_AA = 'AA'; + + /** + * Assembly + */ + case UNTDID_7143_AB = 'AB'; + + /** + * HIBC (Health Industry Bar Code) + */ + case UNTDID_7143_AC = 'AC'; + + /** + * Cold roll number + */ + case UNTDID_7143_AD = 'AD'; + + /** + * Hot roll number + */ + case UNTDID_7143_AE = 'AE'; + + /** + * Slab number + */ + case UNTDID_7143_AF = 'AF'; + + /** + * Software revision number + */ + case UNTDID_7143_AG = 'AG'; + + /** + * UPC (Universal Product Code) Consumer package code (1-5-5) + */ + case UNTDID_7143_AH = 'AH'; + + /** + * UPC (Universal Product Code) Consumer package code (1-5-5- + */ + case UNTDID_7143_AI = 'AI'; + + /** + * Sample number + */ + case UNTDID_7143_AJ = 'AJ'; + + /** + * Pack number + */ + case UNTDID_7143_AK = 'AK'; + + /** + * UPC (Universal Product Code) Shipping container code (1-2- + */ + case UNTDID_7143_AL = 'AL'; + + /** + * UPC (Universal Product Code)/EAN (European article number) + */ + case UNTDID_7143_AM = 'AM'; + + /** + * UPC (Universal Product Code) suffix + */ + case UNTDID_7143_AN = 'AN'; + + /** + * State label code + */ + case UNTDID_7143_AO = 'AO'; + + /** + * Heat number + */ + case UNTDID_7143_AP = 'AP'; + + /** + * Coupon number + */ + case UNTDID_7143_AQ = 'AQ'; + + /** + * Resource number + */ + case UNTDID_7143_AR = 'AR'; + + /** + * Work task number + */ + case UNTDID_7143_AS = 'AS'; + + /** + * Price look up number + */ + case UNTDID_7143_AT = 'AT'; + + /** + * NSN (North Atlantic Treaty Organization Stock Number) + */ + case UNTDID_7143_AU = 'AU'; + + /** + * Refined product code + */ + case UNTDID_7143_AV = 'AV'; + + /** + * Exhibit + */ + case UNTDID_7143_AW = 'AW'; + + /** + * End item + */ + case UNTDID_7143_AX = 'AX'; + + /** + * Federal supply classification + */ + case UNTDID_7143_AY = 'AY'; + + /** + * Engineering data list + */ + case UNTDID_7143_AZ = 'AZ'; + + /** + * Milestone event number + */ + case UNTDID_7143_BA = 'BA'; + + /** + * Lot number + */ + case UNTDID_7143_BB = 'BB'; + + /** + * National drug code 4-4-2 format + */ + case UNTDID_7143_BC = 'BC'; + + /** + * National drug code 5-3-2 format + */ + case UNTDID_7143_BD = 'BD'; + + /** + * National drug code 5-4-1 format + */ + case UNTDID_7143_BE = 'BE'; + + /** + * National drug code 5-4-2 format + */ + case UNTDID_7143_BF = 'BF'; + + /** + * National drug code + */ + case UNTDID_7143_BG = 'BG'; + + /** + * Part number + */ + case UNTDID_7143_BH = 'BH'; + + /** + * Local Stock Number (LSN) + */ + case UNTDID_7143_BI = 'BI'; + + /** + * Next higher assembly number + */ + case UNTDID_7143_BJ = 'BJ'; + + /** + * Data category + */ + case UNTDID_7143_BK = 'BK'; + + /** + * Control number + */ + case UNTDID_7143_BL = 'BL'; + + /** + * Special material identification code + */ + case UNTDID_7143_BM = 'BM'; + + /** + * Locally assigned control number + */ + case UNTDID_7143_BN = 'BN'; + + /** + * Buyer's colour + */ + case UNTDID_7143_BO = 'BO'; + + /** + * Buyer's part number + */ + case UNTDID_7143_BP = 'BP'; + + /** + * Variable measure product code + */ + case UNTDID_7143_BQ = 'BQ'; + + /** + * Financial phase + */ + case UNTDID_7143_BR = 'BR'; + + /** + * Contract breakdown + */ + case UNTDID_7143_BS = 'BS'; + + /** + * Technical phase + */ + case UNTDID_7143_BT = 'BT'; + + /** + * Dye lot number + */ + case UNTDID_7143_BU = 'BU'; + + /** + * Daily statement of activities + */ + case UNTDID_7143_BV = 'BV'; + + /** + * Periodical statement of activities within a bilaterally + */ + case UNTDID_7143_BW = 'BW'; + + /** + * Calendar week statement of activities + */ + case UNTDID_7143_BX = 'BX'; + + /** + * Calendar month statement of activities + */ + case UNTDID_7143_BY = 'BY'; + + /** + * Original equipment number + */ + case UNTDID_7143_BZ = 'BZ'; + + /** + * Industry commodity code + */ + case UNTDID_7143_CC = 'CC'; + + /** + * Commodity grouping + */ + case UNTDID_7143_CG = 'CG'; + + /** + * Colour number + */ + case UNTDID_7143_CL = 'CL'; + + /** + * Contract number + */ + case UNTDID_7143_CR = 'CR'; + + /** + * Customs article number + */ + case UNTDID_7143_CV = 'CV'; + + /** + * Drawing revision number + */ + case UNTDID_7143_DR = 'DR'; + + /** + * Drawing + */ + case UNTDID_7143_DW = 'DW'; + + /** + * Engineering change level + */ + case UNTDID_7143_EC = 'EC'; + + /** + * Material code + */ + case UNTDID_7143_EF = 'EF'; + + /** + * International Article Numbering Association (EAN) + */ + case UNTDID_7143_EN = 'EN'; + + /** + * Fish species + */ + case UNTDID_7143_FS = 'FS'; + + /** + * Buyer's internal product group code + */ + case UNTDID_7143_GB = 'GB'; + + /** + * National product group code + */ + case UNTDID_7143_GN = 'GN'; + + /** + * General specification number + */ + case UNTDID_7143_GS = 'GS'; + + /** + * Harmonised system + */ + case UNTDID_7143_HS = 'HS'; + + /** + * ISBN (International Standard Book Number) + */ + case UNTDID_7143_IB = 'IB'; + + /** + * Buyer's item number + */ + case UNTDID_7143_IN = 'IN'; + + /** + * ISSN (International Standard Serial Number) + */ + case UNTDID_7143_IS = 'IS'; + + /** + * Buyer's style number + */ + case UNTDID_7143_IT = 'IT'; + + /** + * Buyer's size code + */ + case UNTDID_7143_IZ = 'IZ'; + + /** + * Machine number + */ + case UNTDID_7143_MA = 'MA'; + + /** + * Manufacturer's (producer's) article number + */ + case UNTDID_7143_MF = 'MF'; + + /** + * Model number + */ + case UNTDID_7143_MN = 'MN'; + + /** + * Product/service identification number + */ + case UNTDID_7143_MP = 'MP'; + + /** + * Batch number + */ + case UNTDID_7143_NB = 'NB'; + + /** + * Customer order number + */ + case UNTDID_7143_ON = 'ON'; + + /** + * Part number description + */ + case UNTDID_7143_PD = 'PD'; + + /** + * Purchaser's order line number + */ + case UNTDID_7143_PL = 'PL'; + + /** + * Purchase order number + */ + case UNTDID_7143_PO = 'PO'; + + /** + * Promotional variant number + */ + case UNTDID_7143_PV = 'PV'; + + /** + * Buyer's qualifier for size + */ + case UNTDID_7143_QS = 'QS'; + + /** + * Returnable container number + */ + case UNTDID_7143_RC = 'RC'; + + /** + * Release number + */ + case UNTDID_7143_RN = 'RN'; + + /** + * Run number + */ + case UNTDID_7143_RU = 'RU'; + + /** + * Record keeping of model year + */ + case UNTDID_7143_RY = 'RY'; + + /** + * Supplier's article number + */ + case UNTDID_7143_SA = 'SA'; + + /** + * Standard group of products (mixed assortment) + */ + case UNTDID_7143_SG = 'SG'; + + /** + * SKU (Stock keeping unit) + */ + case UNTDID_7143_SK = 'SK'; + + /** + * Serial number + */ + case UNTDID_7143_SN = 'SN'; + + /** + * RSK number + */ + case UNTDID_7143_SRS = 'SRS'; + + /** + * IFLS (Institut Francais du Libre Service) 5 digit product + */ + case UNTDID_7143_SRT = 'SRT'; + + /** + * IFLS (Institut Francais du Libre Service) 9 digit product + */ + case UNTDID_7143_SRU = 'SRU'; + + /** + * GS1 Global Trade Item Number + */ + case UNTDID_7143_SRV = 'SRV'; + + /** + * EDIS (Energy Data Identification System) + */ + case UNTDID_7143_SRW = 'SRW'; + + /** + * Slaughter number + */ + case UNTDID_7143_SRX = 'SRX'; + + /** + * Official animal number + */ + case UNTDID_7143_SRY = 'SRY'; + + /** + * Harmonized tariff schedule + */ + case UNTDID_7143_SRZ = 'SRZ'; + + /** + * Supplier's supplier article number + */ + case UNTDID_7143_SS = 'SS'; + + /** + * 46 Level DOT Code + */ + case UNTDID_7143_SSA = 'SSA'; + + /** + * Airline Tariff 6D + */ + case UNTDID_7143_SSB = 'SSB'; + + /** + * Title 49 Code of Federal Regulations + */ + case UNTDID_7143_SSC = 'SSC'; + + /** + * International Civil Aviation Administration code + */ + case UNTDID_7143_SSD = 'SSD'; + + /** + * Hazardous Materials ID DOT + */ + case UNTDID_7143_SSE = 'SSE'; + + /** + * Endorsement + */ + case UNTDID_7143_SSF = 'SSF'; + + /** + * Air Force Regulation 71-4 + */ + case UNTDID_7143_SSG = 'SSG'; + + /** + * Breed + */ + case UNTDID_7143_SSH = 'SSH'; + + /** + * Chemical Abstract Service (CAS) registry number + */ + case UNTDID_7143_SSI = 'SSI'; + + /** + * Engine model designation + */ + case UNTDID_7143_SSJ = 'SSJ'; + + /** + * Institutional Meat Purchase Specifications (IMPS) Number + */ + case UNTDID_7143_SSK = 'SSK'; + + /** + * Price Look-Up code (PLU) + */ + case UNTDID_7143_SSL = 'SSL'; + + /** + * International Maritime Organization (IMO) Code + */ + case UNTDID_7143_SSM = 'SSM'; + + /** + * Bureau of Explosives 600-A (rail) + */ + case UNTDID_7143_SSN = 'SSN'; + + /** + * United Nations Dangerous Goods List + */ + case UNTDID_7143_SSO = 'SSO'; + + /** + * International Code of Botanical Nomenclature (ICBN) + */ + case UNTDID_7143_SSP = 'SSP'; + + /** + * International Code of Zoological Nomenclature (ICZN) + */ + case UNTDID_7143_SSQ = 'SSQ'; + + /** + * International Code of Nomenclature for Cultivated Plants + */ + case UNTDID_7143_SSR = 'SSR'; + + /** + * Distributor’s article identifier + */ + case UNTDID_7143_SSS = 'SSS'; + + /** + * Norwegian Classification system ENVA + */ + case UNTDID_7143_SST = 'SST'; + + /** + * Supplier assigned classification + */ + case UNTDID_7143_SSU = 'SSU'; + + /** + * Mexican classification system AMECE + */ + case UNTDID_7143_SSV = 'SSV'; + + /** + * German classification system CCG + */ + case UNTDID_7143_SSW = 'SSW'; + + /** + * Finnish classification system EANFIN + */ + case UNTDID_7143_SSX = 'SSX'; + + /** + * Canadian classification system ICC + */ + case UNTDID_7143_SSY = 'SSY'; + + /** + * French classification system IFLS5 + */ + case UNTDID_7143_SSZ = 'SSZ'; + + /** + * Style number + */ + case UNTDID_7143_ST = 'ST'; + + /** + * Dutch classification system CBL + */ + case UNTDID_7143_STA = 'STA'; + + /** + * Japanese classification system JICFS + */ + case UNTDID_7143_STB = 'STB'; + + /** + * European Union dairy subsidy eligibility classification + */ + case UNTDID_7143_STC = 'STC'; + + /** + * GS1 Spain classification system + */ + case UNTDID_7143_STD = 'STD'; + + /** + * GS1 Poland classification system + */ + case UNTDID_7143_STE = 'STE'; + + /** + * Federal Agency on Technical Regulating and Metrology of the + */ + case UNTDID_7143_STF = 'STF'; + + /** + * Efficient Consumer Response (ECR) Austria classification + */ + case UNTDID_7143_STG = 'STG'; + + /** + * GS1 Italy classification system + */ + case UNTDID_7143_STH = 'STH'; + + /** + * CPV (Common Procurement Vocabulary) + */ + case UNTDID_7143_STI = 'STI'; + + /** + * IFDA (International Foodservice Distributors Association) + */ + case UNTDID_7143_STJ = 'STJ'; + + /** + * AHFS (American Hospital Formulary Service) pharmacologic - + */ + case UNTDID_7143_STK = 'STK'; + + /** + * ATC (Anatomical Therapeutic Chemical) classification system + */ + case UNTDID_7143_STL = 'STL'; + + /** + * CLADIMED (Classification des Dispositifs Médicaux) + */ + case UNTDID_7143_STM = 'STM'; + + /** + * CMDR (Canadian Medical Device Regulations) classification + */ + case UNTDID_7143_STN = 'STN'; + + /** + * CNDM (Classificazione Nazionale dei Dispositivi Medici) + */ + case UNTDID_7143_STO = 'STO'; + + /** + * UK DM&D (Dictionary of Medicines & Devices) standard coding + */ + case UNTDID_7143_STP = 'STP'; + + /** + * eCl@ss + */ + case UNTDID_7143_STQ = 'STQ'; + + /** + * EDMA (European Diagnostic Manufacturers Association) + */ + case UNTDID_7143_STR = 'STR'; + + /** + * EGAR (European Generic Article Register) + */ + case UNTDID_7143_STS = 'STS'; + + /** + * GMDN (Global Medical Devices Nomenclature) + */ + case UNTDID_7143_STT = 'STT'; + + /** + * GPI (Generic Product Identifier) + */ + case UNTDID_7143_STU = 'STU'; + + /** + * HCPCS (Healthcare Common Procedure Coding System) + */ + case UNTDID_7143_STV = 'STV'; + + /** + * ICPS (International Classification for Patient Safety) + */ + case UNTDID_7143_STW = 'STW'; + + /** + * MedDRA (Medical Dictionary for Regulatory Activities) + */ + case UNTDID_7143_STX = 'STX'; + + /** + * Medical Columbus + */ + case UNTDID_7143_STY = 'STY'; + + /** + * NAPCS (North American Product Classification System) + */ + case UNTDID_7143_STZ = 'STZ'; + + /** + * NHS (National Health Services) eClass + */ + case UNTDID_7143_SUA = 'SUA'; + + /** + * US FDA (Food and Drug Administration) Product Code + */ + case UNTDID_7143_SUB = 'SUB'; + + /** + * SNOMED CT (Systematized Nomenclature of Medicine-Clinical + */ + case UNTDID_7143_SUC = 'SUC'; + + /** + * UMDNS (Universal Medical Device Nomenclature System) + */ + case UNTDID_7143_SUD = 'SUD'; + + /** + * GS1 Global Returnable Asset Identifier, non-serialised + */ + case UNTDID_7143_SUE = 'SUE'; + + /** + * IMEI + */ + case UNTDID_7143_SUF = 'SUF'; + + /** + * Waste Type (EMSA) + */ + case UNTDID_7143_SUG = 'SUG'; + + /** + * Ship's store classification type + */ + case UNTDID_7143_SUH = 'SUH'; + + /** + * Emergency fire code + */ + case UNTDID_7143_SUI = 'SUI'; + + /** + * Emergency spillage code + */ + case UNTDID_7143_SUJ = 'SUJ'; + + /** + * IMDG packing group + */ + case UNTDID_7143_SUK = 'SUK'; + + /** + * MARPOL Code IBC + */ + case UNTDID_7143_SUL = 'SUL'; + + /** + * IMDG subsidiary risk class + */ + case UNTDID_7143_SUM = 'SUM'; + + /** + * Transport group number + */ + case UNTDID_7143_TG = 'TG'; + + /** + * Taxonomic Serial Number + */ + case UNTDID_7143_TSN = 'TSN'; + + /** + * IMDG main hazard class + */ + case UNTDID_7143_TSO = 'TSO'; + + /** + * EU Combined Nomenclature + */ + case UNTDID_7143_TSP = 'TSP'; + + /** + * Therapeutic classification number + */ + case UNTDID_7143_TSQ = 'TSQ'; + + /** + * European Waste Catalogue + */ + case UNTDID_7143_TSR = 'TSR'; + + /** + * Price grouping code + */ + case UNTDID_7143_TSS = 'TSS'; + + /** + * UNSPSC + */ + case UNTDID_7143_TST = 'TST'; + + /** + * Ultimate customer's article number + */ + case UNTDID_7143_UA = 'UA'; + + /** + * UPC (Universal product code) + */ + case UNTDID_7143_UP = 'UP'; + + /** + * Vendor item number + */ + case UNTDID_7143_VN = 'VN'; + + /** + * Vendor's (seller's) part number + */ + case UNTDID_7143_VP = 'VP'; + + /** + * Vendor's supplemental item number + */ + case UNTDID_7143_VS = 'VS'; + + /** + * Vendor specification number + */ + case UNTDID_7143_VX = 'VX'; + + /** + * Mutually defined + */ + case UNTDID_7143_ZZZ = 'ZZZ'; +} diff --git a/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdPaymentMeans.php b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdPaymentMeans.php new file mode 100644 index 000000000..fe4dfc13c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdPaymentMeans.php @@ -0,0 +1,433 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +enum ZugferdPaymentMeans: int +{ + + /** + * Instrument not defined + */ + case UNTDID_4461_1 = 1; + + /** + * Automated clearing house credit + */ + case UNTDID_4461_2 = 2; + + /** + * Automated clearing house debit + */ + case UNTDID_4461_3 = 3; + + /** + * ACH demand debit reversal + */ + case UNTDID_4461_4 = 4; + + /** + * ACH demand credit reversal + */ + case UNTDID_4461_5 = 5; + + /** + * ACH demand credit + */ + case UNTDID_4461_6 = 6; + + /** + * ACH demand debit + */ + case UNTDID_4461_7 = 7; + + /** + * Hold + */ + case UNTDID_4461_8 = 8; + + /** + * National or regional clearing + */ + case UNTDID_4461_9 = 9; + + /** + * In cash + */ + case UNTDID_4461_10 = 10; + + /** + * ACH savings credit reversal + */ + case UNTDID_4461_11 = 11; + + /** + * ACH savings debit reversal + */ + case UNTDID_4461_12 = 12; + + /** + * ACH savings credit + */ + case UNTDID_4461_13 = 13; + + /** + * ACH savings debit + */ + case UNTDID_4461_14 = 14; + + /** + * Bookentry credit + */ + case UNTDID_4461_15 = 15; + + /** + * Bookentry debit + */ + case UNTDID_4461_16 = 16; + + /** + * ACH demand cash concentration/disbursement (CCD) credit + */ + case UNTDID_4461_17 = 17; + + /** + * ACH demand cash concentration/disbursement (CCD) debit + */ + case UNTDID_4461_18 = 18; + + /** + * ACH demand corporate trade payment (CTP) credit + */ + case UNTDID_4461_19 = 19; + + /** + * Cheque + */ + case UNTDID_4461_20 = 20; + + /** + * Banker's draft + */ + case UNTDID_4461_21 = 21; + + /** + * Certified banker's draft + */ + case UNTDID_4461_22 = 22; + + /** + * Bank cheque (issued by a banking or similar establishment) + */ + case UNTDID_4461_23 = 23; + + /** + * Bill of exchange awaiting acceptance + */ + case UNTDID_4461_24 = 24; + + /** + * Certified cheque + */ + case UNTDID_4461_25 = 25; + + /** + * Local cheque + */ + case UNTDID_4461_26 = 26; + + /** + * ACH demand corporate trade payment (CTP) debit + */ + case UNTDID_4461_27 = 27; + + /** + * ACH demand corporate trade exchange (CTX) credit + */ + case UNTDID_4461_28 = 28; + + /** + * ACH demand corporate trade exchange (CTX) debit + */ + case UNTDID_4461_29 = 29; + + /** + * Credit transfer + */ + case UNTDID_4461_30 = 30; + + /** + * Debit transfer + */ + case UNTDID_4461_31 = 31; + + /** + * ACH demand cash concentration/disbursement plus (CCD+) + */ + case UNTDID_4461_32 = 32; + + /** + * ACH demand cash concentration/disbursement plus (CCD+) + */ + case UNTDID_4461_33 = 33; + + /** + * ACH prearranged payment and deposit (PPD) + */ + case UNTDID_4461_34 = 34; + + /** + * ACH savings cash concentration/disbursement (CCD) credit + */ + case UNTDID_4461_35 = 35; + + /** + * ACH savings cash concentration/disbursement (CCD) debit + */ + case UNTDID_4461_36 = 36; + + /** + * ACH savings corporate trade payment (CTP) credit + */ + case UNTDID_4461_37 = 37; + + /** + * ACH savings corporate trade payment (CTP) debit + */ + case UNTDID_4461_38 = 38; + + /** + * ACH savings corporate trade exchange (CTX) credit + */ + case UNTDID_4461_39 = 39; + + /** + * ACH savings corporate trade exchange (CTX) debit + */ + case UNTDID_4461_40 = 40; + + /** + * ACH savings cash concentration/disbursement plus (CCD+) + */ + case UNTDID_4461_41 = 41; + + /** + * Payment to bank account + */ + case UNTDID_4461_42 = 42; + + /** + * ACH savings cash concentration/disbursement plus (CCD+) + */ + case UNTDID_4461_43 = 43; + + /** + * Accepted bill of exchange + */ + case UNTDID_4461_44 = 44; + + /** + * Referenced home-banking credit transfer + */ + case UNTDID_4461_45 = 45; + + /** + * Interbank debit transfer + */ + case UNTDID_4461_46 = 46; + + /** + * Home-banking debit transfer + */ + case UNTDID_4461_47 = 47; + + /** + * Bank card + */ + case UNTDID_4461_48 = 48; + + /** + * Direct debit + */ + case UNTDID_4461_49 = 49; + + /** + * Payment by postgiro + */ + case UNTDID_4461_50 = 50; + + /** + * FR, norme 6 97-Telereglement CFONB (French Organisation for + */ + case UNTDID_4461_51 = 51; + + /** + * Urgent commercial payment + */ + case UNTDID_4461_52 = 52; + + /** + * Urgent Treasury Payment + */ + case UNTDID_4461_53 = 53; + + /** + * Credit card + */ + case UNTDID_4461_54 = 54; + + /** + * Debit card + */ + case UNTDID_4461_55 = 55; + + /** + * Bankgiro + */ + case UNTDID_4461_56 = 56; + + /** + * Standing agreement + */ + case UNTDID_4461_57 = 57; + + /** + * SEPA credit transfer + */ + case UNTDID_4461_58 = 58; + + /** + * SEPA direct debit + */ + case UNTDID_4461_59 = 59; + + /** + * Promissory note + */ + case UNTDID_4461_60 = 60; + + /** + * Promissory note signed by the debtor + */ + case UNTDID_4461_61 = 61; + + /** + * Promissory note signed by the debtor and endorsed by a bank + */ + case UNTDID_4461_62 = 62; + + /** + * Promissory note signed by the debtor and endorsed by a + */ + case UNTDID_4461_63 = 63; + + /** + * Promissory note signed by a bank + */ + case UNTDID_4461_64 = 64; + + /** + * Promissory note signed by a bank and endorsed by another + */ + case UNTDID_4461_65 = 65; + + /** + * Promissory note signed by a third party + */ + case UNTDID_4461_66 = 66; + + /** + * Promissory note signed by a third party and endorsed by a + */ + case UNTDID_4461_67 = 67; + + /** + * Online payment service + */ + case UNTDID_4461_68 = 68; + + /** + * Transfer Advice + */ + case UNTDID_4461_69 = 69; + + /** + * Bill drawn by the creditor on the debtor + */ + case UNTDID_4461_70 = 70; + + /** + * Bill drawn by the creditor on a bank + */ + case UNTDID_4461_74 = 74; + + /** + * Bill drawn by the creditor, endorsed by another bank + */ + case UNTDID_4461_75 = 75; + + /** + * Bill drawn by the creditor on a bank and endorsed by a + */ + case UNTDID_4461_76 = 76; + + /** + * Bill drawn by the creditor on a third party + */ + case UNTDID_4461_77 = 77; + + /** + * Bill drawn by creditor on third party, accepted and + */ + case UNTDID_4461_78 = 78; + + /** + * Not transferable banker's draft + */ + case UNTDID_4461_91 = 91; + + /** + * Not transferable local cheque + */ + case UNTDID_4461_92 = 92; + + /** + * Reference giro + */ + case UNTDID_4461_93 = 93; + + /** + * Urgent giro + */ + case UNTDID_4461_94 = 94; + + /** + * Free format giro + */ + case UNTDID_4461_95 = 95; + + /** + * Requested method for payment was not used + */ + case UNTDID_4461_96 = 96; + + /** + * Clearing between partners + */ + case UNTDID_4461_97 = 97; +} diff --git a/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdReferenceCodeQualifiers.php b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdReferenceCodeQualifiers.php new file mode 100644 index 000000000..b72db13f7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdReferenceCodeQualifiers.php @@ -0,0 +1,5947 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + * @see https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:untdid.1153 + */ +enum ZugferdReferenceCodeQualifiers: string +{ + + /** + * Accident reference number (APP) + * + * Reference number assigned to an accident. + */ + case ACCI_REFE_NUMB = 'APP'; + + /** + * Account number (ADE) + * + * Identification number of an account. + */ + case ACCO_NUMB = 'ADE'; + + /** + * Account party's bank reference (AGC) + * + * Reference number of the account party's bank. + */ + case ACCO_PART_BANK_REFE = 'AGC'; + + /** + * Account party's reference (AFN) + * + * Reference of the account party. + */ + case ACCO_PART_REFE = 'AFN'; + + /** + * Account payable number (AV) + * + * Reference number assigned by accounts payable department to the account of + * a specific creditor. + */ + case ACCO_PAYA_NUMB = 'AV'; + + /** + * Account servicing bank's reference number (ANA) + * + * Reference number of the account servicing bank. + */ + case ACCO_SERV_BANK_REFE_NUMB = 'ANA'; + + /** + * Accounting entry (AWQ) + * + * Accounting entry to which this item is related. + */ + case ACCO_ENTR = 'AWQ'; + + /** + * Accounting file reference (AOD) + * + * Reference of an accounting file. + */ + case ACCO_FILE_REFE = 'AOD'; + + /** + * Accounting transmission number (ASU) + * + * A number used to identify the transmission of an accounting book entry. + */ + case ACCO_TRAN_NUMB = 'ASU'; + + /** + * Accounts receivable number (AP) + * + * Reference number assigned by accounts receivable department to the account + * of a specific debtor. + */ + case ACCO_RECE_NUMB = 'AP'; + + /** + * Action authorization number (AKO) + * + * A reference number authorizing an action. + */ + case ACTI_AUTH_NUMB = 'AKO'; + + /** + * Activite Principale Exercee (APE) identifier (AQQ) + * + * The French industry code for the main activity of a company. + */ + case ACTI_PRIN_EXER_APE_IDEN = 'AQQ'; + + /** + * Additional reference number (ACD) + * + * [1010] Reference number provided in addition to another given reference. + */ + case ADDI_REFE_NUMB = 'ACD'; + + /** + * Addressee reference (ACF) + * + * A reference number of an addressee. + */ + case ADDR_REFE = 'ACF'; + + /** + * Administrative Reference Code (AWT) + * + * Reference number assigned by Customs to a ‘shipment of excise goods’. + */ + case ADMI_REFE_CODE = 'AWT'; + + /** + * Advise through bank's reference (AMP) + * + * Financial institution through which the advising bank is to advise the + * documentary credit. + */ + case ADVI_THRO_BANK_REFE = 'AMP'; + + /** + * Advising bank's reference (AWD) + * + * Reference number of the advising bank. + */ + case ADVI_BANK_REFE = 'AWD'; + + /** + * Agency clause number (AJE) + * + * A number indicating a clause applicable to a particular agency. + */ + case AGEN_CLAU_NUMB = 'AJE'; + + /** + * Agent's bank reference (AGD) + * + * Reference number issued by the agent's bank. + */ + case AGEN_BANK_REFE = 'AGD'; + + /** + * Agent's reference (AGE) + * + * Reference number of the agent. + */ + case AGEN_REFE = 'AGE'; + + /** + * AGERD (Aerospace Ground Equipment Requirement Data) number (ALU) + * + * Identifies the equipment required to conduct maintenance. + */ + case AGER_AERO_GROU_EQUI_REQU_DATA_NUMB = 'ALU'; + + /** + * Agreement number (AJS) + * + * A number specifying an agreement between parties. + */ + case AGRE_NUMB = 'AJS'; + + /** + * Agreement to pay number (AGA) + * + * A number that identifies an agreement to pay. + */ + case AGRE_TO_PAY_NUMB = 'AGA'; + + /** + * Air cargo transfer manifest (AC) + * + * A number assigned to an air cargo list of goods to be transferred. + */ + case AIR_CARG_TRAN_MANI = 'AC'; + + /** + * Air waybill number (AWB) + * + * Reference number assigned to an air waybill, see: 1001 = 740. + */ + case AIR_WAYB_NUMB = 'AWB'; + + /** + * Airlines flight identification number (AF) + * + * (8028) Identification of a commercial flight by carrier code and number as + * assigned by the airline (IATA). + */ + case AIRL_FLIG_IDEN_NUMB = 'AF'; + + /** + * Allocated seat (SEA) + * + * Reference to a seat allocated to a passenger. + */ + case ALLO_SEAT = 'SEA'; + + /** + * Allotment identification (Air) (ABY) + * + * Reference assigned to guarantied capacity on one or more specific flights + * on specific date(s) to third parties as agents and other airlines. + */ + case ALLO_IDEN_AIR = 'ABY'; + + /** + * Analysis number/test number (ADD) + * + * Number given to a specific analysis or test operation. + */ + case ANAL_NUMB_NUMB = 'ADD'; + + /** + * Animal farm licence number (CFF) + * + * Veterinary licence number allocated by a national authority to an animal + * farm. + */ + case ANIM_FARM_LICE_NUMB = 'CFF'; + + /** + * Anti-dumping case number (ABC) + * + * Reference issued by a Customs administration pertaining to a past or + * current investigation of goods "dumped" at a price lower than the + * exporter's domestic market price. + */ + case ANTI_CASE_NUMB = 'ABC'; + + /** + * Applicable coefficient identification number (APT) + * + * The identification number of the coefficient which is applicable. + */ + case APPL_COEF_IDEN_NUMB = 'APT'; + + /** + * Applicable instructions or standards (AEH) + * + * Instructions or standards applicable for the whole message or a message + * line item. These instructions or standards may be published by a neutral + * organization or authority or another party concerned. + */ + case APPL_INST_OR_STAN = 'AEH'; + + /** + * Applicant's bank reference (AFQ) + * + * Reference number of the applicant's bank. + */ + case APPL_BANK_REFE = 'AFQ'; + + /** + * Applicant's reference (AGF) + * + * Reference number of the applicant. + */ + case APPL_REFE = 'AGF'; + + /** + * Application for financial support reference number (AUK) + * + * Reference number assigned to an application for financial support. + */ + case APPL_FOR_FINA_SUPP_REFE_NUMB = 'AUK'; + + /** + * Application reference number (AGK) + * + * A number that identifies an application reference. + */ + case APPL_REFE_NUMB = 'AGK'; + + /** + * Appropriation number (AKP) + * + * The number identifying a type of funding for a specific purpose + * (appropriation). + */ + case APPR_NUMB = 'AKP'; + + /** + * Article number (ABU) + * + * A number that identifies an article. + */ + case ARTI_NUMB = 'ABU'; + + /** + * Assembly number (AEB) + * + * A number that identifies an assembly. + */ + case ASSE_NUMB = 'AEB'; + + /** + * Associated invoices (AFL) + * + * A number that identifies associated invoices. + */ + case ASSO_INVO = 'AFL'; + + /** + * Assuming company (ASC) + * + * A number that identifies an assuming company. + */ + case ASSU_COMP = 'ASC'; + + /** + * ATA carnet number (ACG) + * + * Reference number assigned to an ATA carnet. + */ + case ATA_CARN_NUMB = 'ACG'; + + /** + * Authorisation for repair reference (APV) + * + * Reference of the authorisation for repair. + */ + case AUTH_FOR_REPA_REFE = 'APV'; + + /** + * Authority issued equipment identification (AHB) + * + * Identification issued by an authority, e.g. government, airport authority. + */ + case AUTH_ISSU_EQUI_IDEN = 'AHB'; + + /** + * Authorization for expense (AFE) number (AE) + * + * A number that identifies an authorization for expense (AFE). + */ + case AUTH_FOR_EXPE_AFE_NUMB = 'AE'; + + /** + * Authorization number (ANJ) + * + * A number which uniquely identifies an authorization. + */ + case AUTH_NUMB = 'ANJ'; + + /** + * Authorization number for exception to dangerous goods regulations (ALF) + * + * Reference number allocated by an authority. This number contains an + * approval concerning exceptions on the existing dangerous goods regulations. + */ + case AUTH_NUMB_FOR_EXCE_TO_DANG_GOOD_REGU = 'ALF'; + + /** + * Authorization to meet competition number (AU) + * + * A number assigned by a requestor to an offer incoming following request for + * quote. + */ + case AUTH_TO_MEET_COMP_NUMB = 'AU'; + + /** + * Bankgiro reference (ATL) + * + * Reference of the Bankgiro. + */ + case BANK_REFE = 'ATL'; + + /** + * Bank's batch interbank transaction reference number (AAH) + * + * Reference number allocated by the bank to a batch of different underlying + * interbank transactions. + */ + case BANK_BATC_INTE_TRAN_REFE_NUMB = 'AAH'; + + /** + * Bank's common transaction reference number (AII) + * + * Bank's reference number allocated by the bank to different underlying + * individual transactions. + */ + case BANK_COMM_TRAN_REFE_NUMB = 'AII'; + + /** + * Bank's documentary procedure reference (ATG) + * + * Reference allocated by the bank to a documentary procedure. + */ + case BANK_DOCU_PROC_REFE = 'ATG'; + + /** + * Bank's individual interbank transaction reference number (AAI) + * + * Reference number allocated by the bank to one specific interbank + * transaction. + */ + case BANK_INDI_INTE_TRAN_REFE_NUMB = 'AAI'; + + /** + * Bank's individual transaction reference number (AIK) + * + * Bank's reference number allocated by the bank to one specific transaction. + */ + case BANK_INDI_TRAN_REFE_NUMB = 'AIK'; + + /** + * Banker's acceptance (ACX) + * + * Reference number for banker's acceptance issued by the accepting financial + * institution. + */ + case BANK_ACCE = 'ACX'; + + /** + * Bankruptcy procedure number (AQZ) + * + * A number identifying a bankruptcy procedure. + */ + case BANK_PROC_NUMB = 'AQZ'; + + /** + * Bar coded label serial number (LS) + * + * The serial number on a bar code label. + */ + case BAR_CODE_LABE_SERI_NUMB = 'LS'; + + /** + * Batch number/lot number (BT) + * + * [7338] Reference number assigned by manufacturer to a series of similar + * products or goods produced under similar conditions. + */ + case BATC_NUMB_NUMB = 'BT'; + + /** + * Battery and accumulator producer registration number (BTP) + * + * Registration number of producer of batteries and accumulators. + */ + case BATT_AND_ACCU_PROD_REGI_NUMB = 'BTP'; + + /** + * Beginning job sequence number (AQN) + * + * The number designating the beginning of the job sequence. + */ + case BEGI_JOB_SEQU_NUMB = 'AQN'; + + /** + * Beginning meter reading actual (BA) + * + * Meter reading at the beginning of an invoicing period. + */ + case BEGI_METE_READ_ACTU = 'BA'; + + /** + * Beginning meter reading estimated (BE) + * + * Meter reading at the beginning of an invoicing period where an actual + * reading is not available. + */ + case BEGI_METE_READ_ESTI = 'BE'; + + /** + * Beneficiary's bank reference (AFS) + * + * Reference number of the beneficiary's bank. + */ + case BENE_BANK_REFE = 'AFS'; + + /** + * Beneficiary's reference (AFO) + * + * Reference of the beneficiary. + */ + case BENE_REFE = 'AFO'; + + /** + * Bid number (BD) + * + * Number assigned by a submitter of a bid to his bid. + */ + case BID_NUMB = 'BD'; + + /** + * Bill of lading number (BM) + * + * Reference number assigned to a bill of lading, see: 1001 = 705. + */ + case BILL_OF_LADI_NUMB = 'BM'; + + /** + * Bill of quantities number (AFX) + * + * Reference number assigned to a bill of quantities. + */ + case BILL_OF_QUAN_NUMB = 'AFX'; + + /** + * Blanket order number (BO) + * + * Reference number assigned by the order issuer to a blanket order. + */ + case BLAN_ORDE_NUMB = 'BO'; + + /** + * Blended with number (BW) + * + * The batch/lot/package number a product is blended with. + */ + case BLEN_WITH_NUMB = 'BW'; + + /** + * Book number (ART) + * + * A number assigned to identify a book. + */ + case BOOK_NUMB = 'ART'; + + /** + * Bordereau number (AFC) + * + * Reference number assigned to a bordereau, see: 1001 = 787. + */ + case BORD_NUMB = 'AFC'; + + /** + * Broker or sales office number (BR) + * + * A number that identifies a broker or sales office. + */ + case BROK_OR_SALE_OFFI_NUMB = 'BR'; + + /** + * Broker reference 3 (AVK) + * + * Third reference of a broker. + */ + case BROK_REFE = 'AVK'; + + /** + * Budget chapter (ASD) + * + * A reference to the chapter in a budget. + */ + case BUDG_CHAP = 'ASD'; + + /** + * Bureau signing (statement reference) (ADI) + * + * A statement reference that identifies a bureau signing. + */ + case BURE_SIGN_STAT_REFE = 'ADI'; + + /** + * Buyer's catalogue number (AMW) + * + * Identification of a catalogue maintained by a buyer. + */ + case BUYE_CATA_NUMB = 'AMW'; + + /** + * Buyer's contract number (BC) + * + * Reference number assigned by buyer to a contract. + */ + case BUYE_CONT_NUMB = 'BC'; + + /** + * Buyer's debtor number (DB) + * + * Reference number assigned to a debtor. + */ + case BUYE_DEBT_NUMB = 'DB'; + + /** + * Buyer's fund number (AWW) + * + * A reference number indicating the fund number used by the buyer. + */ + case BUYE_FUND_NUMB = 'AWW'; + + /** + * Buyer's item number (ADA) + * + * [7304] Reference number assigned by the buyer to an item. + */ + case BUYE_ITEM_NUMB = 'ADA'; + + /** + * CAD file layer convention (ANF) + * + * Reference number identifying a layer convention for a file in a Computer + * Aided Design (CAD) environment. + */ + case CAD_FILE_LAYE_CONV = 'ANF'; + + /** + * Cadastro Geral do Contribuinte (CGC) (ASW) + * + * Brazilian taxpayer number. + */ + case CADA_GERA_DO_CONT_CGC = 'ASW'; + + /** + * Calendar (AOJ) + * + * A calendar reference number. + */ + case CALENDAR = 'AOJ'; + + /** + * Call off order number (COF) + * + * A number that identifies a call off order. + */ + case CALL_OFF_ORDE_NUMB = 'COF'; + + /** + * Canadian excise entry number (AMN) + * + * An excise entry number assigned by the Canadian Customs. + */ + case CANA_EXCI_ENTR_NUMB = 'AMN'; + + /** + * Cargo acceptance order reference number (ACA) + * + * Reference assigned to the cargo acceptance order. + */ + case CARG_ACCE_ORDE_REFE_NUMB = 'ACA'; + + /** + * Cargo control number (XC) + * + * Reference used to identify and control a carrier and consignment from + * initial entry into a country until release of the cargo by Customs. + */ + case CARG_CONT_NUMB = 'XC'; + + /** + * Cargo manifest number (AFB) + * + * [1037] Reference number assigned to a cargo manifest. + */ + case CARG_MANI_NUMB = 'AFB'; + + /** + * Carrier's agent reference number (AAY) + * + * Reference number assigned by the carriers agent to a transaction. + */ + case CARR_AGEN_REFE_NUMB = 'AAY'; + + /** + * Carrier's reference number (CN) + * + * Reference number assigned by carrier to a consignment. + */ + case CARR_REFE_NUMB = 'CN'; + + /** + * Case number (AMH) + * + * Number assigned to a case. + */ + case CASE_NUMB = 'AMH'; + + /** + * Case of need party's reference (ANO) + * + * Reference number of the case of need party. + */ + case CASE_OF_NEED_PART_REFE = 'ANO'; + + /** + * Catalogue sequence number (AKS) + * + * A number which uniquely identifies an item within a catalogue according to + * a standard numbering system. + */ + case CATA_SEQU_NUMB = 'AKS'; + + /** + * Catastrophe number (ADG) + * + * A number that identifies a catastrophe. + */ + case CATA_NUMB = 'ADG'; + + /** + * Category of work reference (AWH) + * + * A reference identifying a category of work. + */ + case CATE_OF_WORK_REFE = 'AWH'; + + /** + * CD-ROM (ASY) + * + * Identity number of the Compact Disk Read Only Memory (CD-ROM). + */ + case CDROM = 'ASY'; + + /** + * Cedent's claim number (APD) + * + * To identify the number assigned to the claim by the ceding company. + */ + case CEDE_CLAI_NUMB = 'APD'; + + /** + * Ceding company (CEC) + * + * Company selling obligations to a third party. + */ + case CEDI_COMP = 'CEC'; + + /** + * Ceiling formula reference number (APJ) + * + * The reference number which identifies a formula for determining a ceiling. + */ + case CEIL_FORM_REFE_NUMB = 'APJ'; + + /** + * Central secretariat log number (AQE) + * + * The reference log number assigned by the central secretariat for the Data + * Maintenance Request (DMR). + */ + case CENT_SECR_LOG_NUMB = 'AQE'; + + /** + * Central secretariat log number, child Data Maintenance Request (DMR) (AQG) + * + * The reference log number assigned by the central secretariat for the child + * Data Maintenance Request (DMR). + */ + case CENT_SECR_LOG_NUMB_CHIL_DATA_MAIN_REQU_DMR = 'AQG'; + + /** + * Central secretariat log number, parent Data Maintenance Request (DMR) (AQF) + * + * The reference log number assigned by the central secretariat for the parent + * Data Maintenance Request (DMR). + */ + case CENT_SECR_LOG_NUMB_PARE_DATA_MAIN_REQU_DMR = 'AQF'; + + /** + * Certificate of conformity (AID) + * + * Certificate certifying the conformity to predefined definitions. + */ + case CERT_OF_CONF = 'AID'; + + /** + * Chamber of Commerce registration number (AHO) + * + * The registration number by which a company/organization is known to the + * Chamber of Commerce. + */ + case CHAM_OF_COMM_REGI_NUMB = 'AHO'; + + /** + * Charge card account number (AIU) + * + * Number to identify charge card account. + */ + case CHAR_CARD_ACCO_NUMB = 'AIU'; + + /** + * Charges note document attachment indicator (CNO) + * + * [1070] Indication that a charges note has been established and attached to + * a transport contract document or not. + */ + case CHAR_NOTE_DOCU_ATTA_INDI = 'CNO'; + + /** + * Checking number (CKN) + * + * Number assigned by checking party to one specific check action. + */ + case CHEC_NUMB = 'CKN'; + + /** + * Cheque number (CK) + * + * Unique number assigned to one specific cheque. + */ + case CHEQ_NUMB = 'CK'; + + /** + * Circular publication number (AJF) + * + * A number specifying a circular publication. + */ + case CIRC_PUBL_NUMB = 'AJF'; + + /** + * Civil action number (AAX) + * + * A reference number identifying the civil action. + */ + case CIVI_ACTI_NUMB = 'AAX'; + + /** + * Clave Unica de Identificacion Tributaria (CUIT) (ATU) + * + * Tax identification number in Argentina. + */ + case CLAV_UNIC_DE_IDEN_TRIB_CUIT = 'ATU'; + + /** + * Clearing reference (ANX) + * + * Reference allocated by a clearing procedure. + */ + case CLEA_REFE = 'ANX'; + + /** + * Cold roll number (ACQ) + * + * Number attributed to a cold roll coil. + */ + case COLD_ROLL_NUMB = 'ACQ'; + + /** + * Collecting bank's reference (ANP) + * + * Reference number of the collecting bank. + */ + case COLL_BANK_REFE = 'ANP'; + + /** + * Collection advice document identifier (ACN) + * + * [1030] Reference number to identify a collection advice document. + */ + case COLL_ADVI_DOCU_IDEN = 'ACN'; + + /** + * Collection instrument number (ATN) + * + * To identify the number of an instrument used to remit funds to a + * beneficiary. + */ + case COLL_INST_NUMB = 'ATN'; + + /** + * Collection reference (AUD) + * + * A reference identifying a collection. + */ + case COLL_REFE = 'AUD'; + + /** + * Commercial account summary reference number (APQ) + * + * A reference number identifying a commercial account summary. + */ + case COMM_ACCO_SUMM_REFE_NUMB = 'APQ'; + + /** + * Commodity number (AED) + * + * A number that identifies a commodity. + */ + case COMM_NUMB = 'AED'; + + /** + * Common transaction reference number (AIH) + * + * Reference number applicable to different underlying individual + * transactions. + */ + case COMM_TRAN_REFE_NUMB = 'AIH'; + + /** + * Companies Registry Office (CRO) number (ARC) + * + * Identifies the reference number assigned by the Companies Registry Office + * (CRO). + */ + case COMP_REGI_OFFI_CRO_NUMB = 'ARC'; + + /** + * Company / syndicate reference 2 (ADK) + * + * Second reference of a company/syndicate. + */ + case COMP_SYND_REFE = 'ADK'; + + /** + * Company issued equipment ID (AGP) + * + * Owner/operator, non-government issued equipment reference number. + */ + case COMP_ISSU_EQUI_ID = 'AGP'; + + /** + * Company trading account number (AWX) + * + * A reference number identifying a company trading account. + */ + case COMP_TRAD_ACCO_NUMB = 'AWX'; + + /** + * Company/place registration number (XA) + * + * Company registration and place as legally required. + */ + case COMP_REGI_NUMB = 'XA'; + + /** + * Completed units payment request reference (ANB) + * + * A reference to a payment request for completed units. + */ + case COMP_UNIT_PAYM_REQU_REFE = 'ANB'; + + /** + * Compliance code number (AIA) + * + * Number assigned to indicate regulatory compliance. + */ + case COMP_CODE_NUMB = 'AIA'; + + /** + * Condition of purchase document number (CP) + * + * Reference number identifying the conditions of purchase relevant to a + * purchase. + */ + case COND_OF_PURC_DOCU_NUMB = 'CP'; + + /** + * Condition of sale document number (CS) + * + * Reference number identifying the conditions of sale relevant to a sale. + */ + case COND_OF_SALE_DOCU_NUMB = 'CS'; + + /** + * Connected location (AWN) + * + * Reference of a connected location. + */ + case CONN_LOCA = 'AWN'; + + /** + * Connecting point to central grid (AUV) + * + * Reference to a connecting point to a central grid. + */ + case CONN_POIN_TO_CENT_GRID = 'AUV'; + + /** + * Consignor's further order (CFO) + * + * Reference of an order given by the consignor after departure of the means + * of transport. + */ + case CONS_FURT_ORDE = 'CFO'; + + /** + * Consolidated invoice number (AIZ) + * + * Invoice number into which other invoices are consolidated. + */ + case CONS_INVO_NUMB = 'AIZ'; + + /** + * Consignee's order number (CG) + * + * A number that identifies a consignee's order. + */ + case CONS_ORDE_NUMB = 'CG'; + + /** + * Consignee's reference (ANT) + * + * Reference number of the consignee. + */ + case CONS_REFE = 'ANT'; + + /** + * Consignment contract number (AXP) + * + * Reference number identifying a consignment contract. + */ + case CONS_CONT_NUMB = 'AXP'; + + /** + * Consignment identifier, carrier assigned (BN) + * + * [1016] Reference number assigned by a carrier of its agent to identify a + * specific consignment such as a booking reference number when cargo space is + * reserved prior to loading. + */ + case CONS_IDEN_CARR_ASSI = 'BN'; + + /** + * Consignment identifier, consignor assigned (CU) + * + * [1140] Reference number assigned by the consignor to identify a particular + * consignment. + */ + case CONS_IDEN_CONS_ASSI = 'CU'; + + /** + * Consignment identifier, freight forwarder assigned (FF) + * + * [1460] Reference number assigned by the freight forwarder to identify a + * particular consignment. + */ + case CONS_IDEN_FREI_FORW_ASSI = 'FF'; + + /** + * Consignment information (AVL) + * + * Code identifying that the reference number given applies to the consignment + * information segment group in the referred message . + */ + case CONS_INFO = 'AVL'; + + /** + * Consignment receipt identifier (REN) + * + * [1150] Reference number assigned to identify a consignment upon its arrival + * at its destination. + */ + case CONS_RECE_IDEN = 'REN'; + + /** + * Consignment stock contract (AUF) + * + * Reference identifying a consignment stock contract. + */ + case CONS_STOC_CONT = 'AUF'; + + /** + * Consolidated orders' reference (AUP) + * + * A reference number to identify orders which have been, or shall be + * consolidated. + */ + case CONS_ORDE_REFE = 'AUP'; + + /** + * Constraint notation (AOX) + * + * Identifies a reference to a constraint notation. + */ + case CONS_NOTA = 'AOX'; + + /** + * Consumption data request number (AMF) + * + * A number which identifies a request for consumption data. + */ + case CONS_DATA_REQU_NUMB = 'AMF'; + + /** + * Container disposition order reference number (AKA) + * + * Reference assigned to the empty container disposition order. + */ + case CONT_DISP_ORDE_REFE_NUMB = 'AKA'; + + /** + * Container operators reference number (CV) + * + * Reference number assigned by the party operating or controlling the + * transport container to a transaction or consignment. + */ + case CONT_OPER_REFE_NUMB = 'CV'; + + /** + * Container prefix (AKB) + * + * The first part of the unique identification of a container formed by an + * alpha code identifying the owner of the container. + */ + case CONT_PREF = 'AKB'; + + /** + * Container work order reference number (ADO) + * + * Reference number assigned by the principal to the work order for a (set of) + * container(s). + */ + case CONT_WORK_ORDE_REFE_NUMB = 'ADO'; + + /** + * Container/equipment receipt number (ER) + * + * Number of the Equipment Interchange Receipt issued for full or empty + * equipment received. + */ + case CONT_RECE_NUMB = 'ER'; + + /** + * Contract breakdown reference (APR) + * + * A reference which identifies a specific breakdown of a contract. + */ + case CONT_BREA_REFE = 'APR'; + + /** + * Contract document addendum identifier (AAD) + * + * [1318] Reference number to identify an addendum to a contract. + */ + case CONT_DOCU_ADDE_IDEN = 'AAD'; + + /** + * Contract number (CT) + * + * [1296] Reference number of a contract concluded between parties. + */ + case CONT_NUMB = 'CT'; + + /** + * Contract party reference number (AGB) + * + * Reference number assigned to a party for a particular contract. + */ + case CONT_PART_REFE_NUMB = 'AGB'; + + /** + * Contractor registration number (APS) + * + * A reference number used to identify a contractor. + */ + case CONT_REGI_NUMB = 'APS'; + + /** + * Contractor request reference (APO) + * + * Reference identifying a request made by a contractor. + */ + case CONT_REQU_REFE = 'APO'; + + /** + * Converted Postgiro number (ATO) + * + * To identify the reference number of a giro payment having been converted to + * a Postgiro account. + */ + case CONV_POST_NUMB = 'ATO'; + + /** + * Cooperation contract number (CZ) + * + * Number issued by a party concerned given to a contract on cooperation of + * two or more parties. + */ + case COOP_CONT_NUMB = 'CZ'; + + /** + * Cost account (AOU) + * + * A cost control account reference. + */ + case COST_ACCO = 'AOU'; + + /** + * Cost accounting document (CAY) + * + * The reference to a cost accounting document. + */ + case COST_ACCO_DOCU = 'CAY'; + + /** + * Cost centre (AWE) + * + * A number identifying a cost centre. + */ + case COST_CENT = 'AWE'; + + /** + * Cost centre alignment number (ATP) + * + * Number used in the financial management process to align cost allocations. + */ + case COST_CENT_ALIG_NUMB = 'ATP'; + + /** + * Costa Rican judicial number (ARD) + * + * A number assigned by the government to a business in Costa Rica. + */ + case COST_RICA_JUDI_NUMB = 'ARD'; + + /** + * Credit memo number (CM) + * + * Reference number assigned by issuer to a credit memo. + */ + case CRED_MEMO_NUMB = 'CM'; + + /** + * Credit note number (CD) + * + * [1113] Reference number assigned to a credit note. + */ + case CRED_NOTE_NUMB = 'CD'; + + /** + * Credit rating agency's reference number (AGH) + * + * Reference number assigned by a credit rating agency to a debtor. + */ + case CRED_RATI_AGEN_REFE_NUMB = 'AGH'; + + /** + * Creditor's reference number (AHL) + * + * Reference number of the party to whom a debt is owed. + */ + case CRED_REFE_NUMB = 'AHL'; + + /** + * Current invoice number (OH) + * + * Reference number identifying the current invoice. + */ + case CURR_INVO_NUMB = 'OH'; + + /** + * Customer catalogue number (CH) + * + * Number identifying a catalogue for customer's usage. + */ + case CUST_CATA_NUMB = 'CH'; + + /** + * Customer material specification number (ACJ) + * + * Number for a material specification given by customer. + */ + case CUST_MATE_SPEC_NUMB = 'ACJ'; + + /** + * Customer process specification number (AEF) + * + * Retrieval number for a process specification defined by customer. + */ + case CUST_PROC_SPEC_NUMB = 'AEF'; + + /** + * Customer reference number (CR) + * + * Reference number assigned by the customer to a transaction. + */ + case CUST_REFE_NUMB = 'CR'; + + /** + * Customer reference number assigned to previous balance of payment + * information (ALC) + * + * Identification number of the previous balance of payments information from + * customer message. + */ + case CUST_REFE_NUMB_ASSI_TO_PREV_BALA_OF_PAYM_INFO = 'ALC'; + + /** + * Customer specification number (AEG) + * + * Retrieval number for a specification defined by customer. + */ + case CUST_SPEC_NUMB = 'AEG'; + + /** + * Customer travel service identifier (AVI) + * + * A reference identifying a travel service to a customer. + */ + case CUST_TRAV_SERV_IDEN = 'AVI'; + + /** + * Customer's common transaction reference number (AIL) + * + * Customer's reference number allocated by the customer to different + * underlying individual transactions. + */ + case CUST_COMM_TRAN_REFE_NUMB = 'AIL'; + + /** + * Customer's documentary procedure reference (ATH) + * + * Reference allocated by a customer to a documentary procedure. + */ + case CUST_DOCU_PROC_REFE = 'ATH'; + + /** + * Customer's individual transaction reference number (AIJ) + * + * Customer's reference number allocated by the customer to one specific + * transaction. + */ + case CUST_INDI_TRAN_REFE_NUMB = 'AIJ'; + + /** + * Customer's unit inventory number (AEN) + * + * Number assigned by customer to a unique unit for inventory purposes. + */ + case CUST_UNIT_INVE_NUMB = 'AEN'; + + /** + * Customs binding ruling number (AUQ) + * + * Binding ruling number issued by customs. + */ + case CUST_BIND_RULI_NUMB = 'AUQ'; + + /** + * Customs decision request number (ABG) + * + * Reference issued by Customs pertaining to a pending tariff classification + * decision requested by an importer or agent. + */ + case CUST_DECI_REQU_NUMB = 'ABG'; + + /** + * Customs guarantee number (ABL) + * + * Reference assigned to a Customs guarantee. + */ + case CUST_GUAR_NUMB = 'ABL'; + + /** + * Customs item number (AFD) + * + * Number (1496 in CST) assigned by the declarant to an item. + */ + case CUST_ITEM_NUMB = 'AFD'; + + /** + * Customs non-binding ruling number (AUR) + * + * Non-binding ruling number issued by customs. + */ + case CUST_NONB_RULI_NUMB = 'AUR'; + + /** + * Customs pre-approval ruling number (AUZ) + * + * Pre-approval ruling number issued by Customs. + */ + case CUST_PREA_RULI_NUMB = 'AUZ'; + + /** + * Customs preference inquiry number (AIP) + * + * The number assigned by Customs to a preference inquiry. + */ + case CUST_PREF_INQU_NUMB = 'AIP'; + + /** + * Customs release code (AHZ) + * + * A code associated to a requirement that must be presented to gain the + * release of goods by Customs. + */ + case CUST_RELE_CODE = 'AHZ'; + + /** + * Customs tariff number (ABD) + * + * (7357) Code number of the goods in accordance with the tariff nomenclature + * system of classification in use where the Customs declaration is made. + */ + case CUST_TARI_NUMB = 'ABD'; + + /** + * Customs transhipment number (AIO) + * + * Approval number issued by Customs for cargo to be transhipped under Customs + * control. + */ + case CUST_TRAN_NUMB = 'AIO'; + + /** + * Customs valuation decision number (ABA) + * + * Reference by an importing party to a previous decision made by a Customs + * administration regarding the valuation of goods. + */ + case CUST_VALU_DECI_NUMB = 'ABA'; + + /** + * Dangerous Goods information (AVN) + * + * Code identifying that the reference number given applies to the dangerous + * goods information segment group in the referred message. + */ + case DANG_GOOD_INFO = 'AVN'; + + /** + * Dangerous goods security number (ALG) + * + * Reference number allocated by an authority in order to control the + * dangerous goods on board of a specific means of transport for dangerous + * goods security purposes. + */ + case DANG_GOOD_SECU_NUMB = 'ALG'; + + /** + * Dangerous goods transport licence number (ALH) + * + * Licence number allocated by an authority as to the permission of carrying + * dangerous goods by a specific means of transport. + */ + case DANG_GOOD_TRAN_LICE_NUMB = 'ALH'; + + /** + * Data structure tag (AQD) + * + * The tag assigned to a data structure. + */ + case DATA_STRU_TAG = 'AQD'; + + /** + * Debit account number (DAN) + * + * Reference number assigned by issuer to a debit account. + */ + case DEBI_ACCO_NUMB = 'DAN'; + + /** + * Debit card number (AAF) + * + * A reference number identifying a debit card. + */ + case DEBI_CARD_NUMB = 'AAF'; + + /** + * Debit letter number (CED) + * + * Reference number identifying the letter of debit document. + */ + case DEBI_LETT_NUMB = 'CED'; + + /** + * Debit note number (DL) + * + * [1117] Reference number assigned by issuer to a debit note. + */ + case DEBI_NOTE_NUMB = 'DL'; + + /** + * Debit reference number (AOI) + * + * The reference number of a debit instruction. + */ + case DEBI_REFE_NUMB = 'AOI'; + + /** + * Debtor's reference number (AHM) + * + * Reference number of the party who owes an amount of money. + */ + case DEBT_REFE_NUMB = 'AHM'; + + /** + * Declarant's Customs identity number (ABP) + * + * Reference to the party whose posted bond or security is being declared in + * order to accept responsibility for a goods declaration and the applicable + * duties and taxes. + */ + case DECL_CUST_IDEN_NUMB = 'ABP'; + + /** + * Declarant's reference number (ABE) + * + * Unique reference number assigned to a document or a message by the + * declarant for identification purposes. + */ + case DECL_REFE_NUMB = 'ABE'; + + /** + * Defense priorities allocation system priority rating (AJQ) + * + * A reference indicating a priority rating assigned to allocate resources for + * defense purchases. + */ + case DEFE_PRIO_ALLO_SYST_PRIO_RATI = 'AJQ'; + + /** + * Deferment approval number (DA) + * + * Number assigned by authorities to a party to approve deferment of payment + * of tax or duties. + */ + case DEFE_APPR_NUMB = 'DA'; + + /** + * Delivery note number (DQ) + * + * [1033] Reference number assigned by the issuer to a delivery note. + */ + case DELI_NOTE_NUMB = 'DQ'; + + /** + * Delivery number (transport) (AEL) + * + * Reference number by which a haulier/carrier will announce himself at the + * container terminal or depot when delivering equipment. + */ + case DELI_NUMB_TRAN = 'AEL'; + + /** + * Delivery order number (AAJ) + * + * Reference number assigned by issuer to a delivery order. + */ + case DELI_ORDE_NUMB = 'AAJ'; + + /** + * Delivery route reference (AUS) + * + * A reference to the route of the delivery. + */ + case DELI_ROUT_REFE = 'AUS'; + + /** + * Delivery schedule number (AAN) + * + * Reference number assigned by buyer to a delivery schedule. + */ + case DELI_SCHE_NUMB = 'AAN'; + + /** + * Delivery verification certificate (AGL) + * + * Formal identification of delivery verification certificate which is a + * formal document from Customs etc. confirming that physical goods have been + * delivered. It may be needed to support a tax reclaim based on an invoice. + */ + case DELI_VERI_CERT = 'AGL'; + + /** + * Department (AOQ) + * + * Section of an organisation. + */ + case DEPARTMENT = 'AOQ'; + + /** + * Department number (AMV) + * + * Number assigned to a department within an organization. + */ + case DEPA_NUMB = 'AMV'; + + /** + * Department of transportation bond number (AIB) + * + * Number of a bond assigned by the department of transportation. + */ + case DEPA_OF_TRAN_BOND_NUMB = 'AIB'; + + /** + * Deposit reference number (ANL) + * + * A reference number identifying a deposit. + */ + case DEPO_REFE_NUMB = 'ANL'; + + /** + * Despatch advice number (AAK) + * + * [1035] Reference number assigned by issuing party to a despatch advice. + */ + case DESP_ADVI_NUMB = 'AAK'; + + /** + * Despatch note (post parcels) number (AEZ) + * + * (1128) Reference number assigned to a despatch note (post parcels), see: + * 1001 = 750. + */ + case DESP_NOTE_POST_PARC_NUMB = 'AEZ'; + + /** + * Despatch note document identifier (AAU) + * + * [1128] Reference number to identify a Despatch Note. + */ + case DESP_NOTE_DOCU_IDEN = 'AAU'; + + /** + * Direct debit reference (AKJ) + * + * Reference number assigned to the direct debit operation. + */ + case DIRE_DEBI_REFE = 'AKJ'; + + /** + * Direct payment valuation number (AFT) + * + * Reference number assigned to a direct payment valuation. + */ + case DIRE_PAYM_VALU_NUMB = 'AFT'; + + /** + * Direct payment valuation request number (AFU) + * + * Reference number assigned to a direct payment valuation request. + */ + case DIRE_PAYM_VALU_REQU_NUMB = 'AFU'; + + /** + * Dispensation reference (ASA) + * + * A reference number assigned to an official exemption from a law or + * obligation. + */ + case DISP_REFE = 'ASA'; + + /** + * Dispute number (AGG) + * + * Reference number to a dispute notice. + */ + case DISP_NUMB = 'AGG'; + + /** + * Distributor invoice number (DI) + * + * Reference number assigned by issuer to a distributor invoice. + */ + case DIST_INVO_NUMB = 'DI'; + + /** + * Dock receipt number (DR) + * + * Number of the cargo receipt submitted when cargo is delivered to a marine + * terminal. + */ + case DOCK_RECE_NUMB = 'DR'; + + /** + * Docket number (AAW) + * + * A reference number identifying the docket. + */ + case DOCK_NUMB = 'AAW'; + + /** + * Document identifier (DM) + * + * [1004] Reference number identifying a specific document. + */ + case DOCU_IDEN = 'DM'; + + /** + * Document line identifier (LI) + * + * [1156] To identify a line of a document. + */ + case DOCU_LINE_IDEN = 'LI'; + + /** + * Document page identifier (ARO) + * + * [1212] To identify a page number. + */ + case DOCU_PAGE_IDEN = 'ARO'; + + /** + * Document reference, internal (CAW) + * + * Internal reference to a document. + */ + case DOCU_REFE_INTE = 'CAW'; + + /** + * Document reference, original (AWR) + * + * The original reference of a document. + */ + case DOCU_REFE_ORIG = 'AWR'; + + /** + * Document volume number (ARS) + * + * The number of a document volume. + */ + case DOCU_VOLU_NUMB = 'ARS'; + + /** + * Documentary credit amendment number (AWC) + * + * Number of the amendment of the documentary credit. + */ + case DOCU_CRED_AMEN_NUMB = 'AWC'; + + /** + * Documentary credit identifier (AAC) + * + * [1172] Reference number to identify a documentary credit. + */ + case DOCU_CRED_IDEN = 'AAC'; + + /** + * Documentary payment reference (AOA) + * + * Reference of the documentary payment. + */ + case DOCU_PAYM_REFE = 'AOA'; + + /** + * Domestic flight number (AGQ) + * + * Airline flight number assigned to a flight originating and terminating + * within the same country. + */ + case DOME_FLIG_NUMB = 'AGQ'; + + /** + * Domestic inventory management code (ALB) + * + * Code to identify the management of domestic inventory. + */ + case DOME_INVE_MANA_CODE = 'ALB'; + + /** + * Drawee's reference (ANN) + * + * Reference number of the drawee. + */ + case DRAW_REFE = 'ANN'; + + /** + * Drawing list number (AEQ) + * + * Reference number identifying a drawing list. + */ + case DRAW_LIST_NUMB = 'AEQ'; + + /** + * Drawing number (AAL) + * + * Reference number identifying a specific product drawing. + */ + case DRAW_NUMB = 'AAL'; + + /** + * Dun and Bradstreet Canada's 8 digit Standard Industrial Classification + * (SIC) code (AQP) + * + * Dun and Bradstreet Canada's 8 digit Standard Industrial Classification + * (SIC) code identifying activities of the company. + */ + case DUN_AND_BRAD_CANA__DIGI_STAN_INDU_CLAS_SIC_CODE = 'AQP'; + + /** + * Dun and Bradstreet US 8 digit Standard Industrial Classification (SIC) code (AQR) + * + * Dun and Bradstreet United States' 8 digit Standard Industrial + * Classification (SIC) code identifying activities of the company. + */ + case DUN_AND_BRAD_US__DIGI_STAN_INDU_CLAS_SIC_CODE = 'AQR'; + + /** + * Duty free products receipt authorisation number (ASF) + * + * Authorisation number allocated for the receipt of duty free products. + */ + case DUTY_FREE_PROD_RECE_AUTH_NUMB = 'ASF'; + + /** + * Duty free products security number (ASE) + * + * A security number allocated for duty free products. + */ + case DUTY_FREE_PROD_SECU_NUMB = 'ASE'; + + /** + * Duty memo number (ACY) + * + * Reference number assigned by customs to a duty memo. + */ + case DUTY_MEMO_NUMB = 'ACY'; + + /** + * Economic Operators Registration and Identification Number (EORI) (AVY) + * + * Number assigned by an authority to an economic operator. + */ + case ECON_OPER_REGI_AND_IDEN_NUMB_EORI = 'AVY'; + + /** + * Electrical and electronic equipment producer registration number (EEP) + * + * Registration number of producer of electrical and electronic equipment. + */ + case ELEC_AND_ELEC_EQUI_PROD_REGI_NUMB = 'EEP'; + + /** + * Embargo number (EN) + * + * Number assigned to specific goods or a family of goods in a classification + * of embargo measures. + */ + case EMBA_NUMB = 'EN'; + + /** + * Embargo permit number (EB) + * + * Reference number assigned by issuer to an embargo permit. + */ + case EMBA_PERM_NUMB = 'EB'; + + /** + * Employer identification number of service bureau (AGS) + * + * Reference number assigned by a service/processing bureau to an employer. + */ + case EMPL_IDEN_NUMB_OF_SERV_BURE = 'AGS'; + + /** + * Employer's identification number (EI) + * + * Number issued by an authority to identify an employer. + */ + case EMPL_IDEN_NUMB = 'EI'; + + /** + * Empty container bill number (AEW) + * + * Reference number assigned to an empty container bill, see: 1001 = 708. + */ + case EMPT_CONT_BILL_NUMB = 'AEW'; + + /** + * End item number (AJU) + * + * A number specifying the end item applicable to a subordinate item. + */ + case END_ITEM_NUMB = 'AJU'; + + /** + * End use authorization number (ABB) + * + * Reference issued by a Customs administration authorizing a preferential + * rate of duty if a product is used for a specified purpose, see: 1001 = 990. + */ + case END_USE_AUTH_NUMB = 'ABB'; + + /** + * Ending job sequence number (JE) + * + * A number that identifies the ending job sequence. + */ + case ENDI_JOB_SEQU_NUMB = 'JE'; + + /** + * Ending meter reading actual (EA) + * + * Meter reading at the end of an invoicing period. + */ + case ENDI_METE_READ_ACTU = 'EA'; + + /** + * Ending meter reading estimated (EE) + * + * Meter reading at the end of an invoicing period where an actual reading is + * not available. + */ + case ENDI_METE_READ_ESTI = 'EE'; + + /** + * Enquiry number (AAV) + * + * Reference number assigned to an enquiry. + */ + case ENQU_NUMB = 'AAV'; + + /** + * Entity reference number, previous (AUX) + * + * The previous reference number assigned to an entity. + */ + case ENTI_REFE_NUMB_PREV = 'AUX'; + + /** + * Entry flagging (CAU) + * + * Reference to a flagging of entries. + */ + case ENTR_FLAG = 'CAU'; + + /** + * Entry point assessment log number (AQA) + * + * The reference log number assigned by an entry point assessment group for + * the DMR. + */ + case ENTR_POIN_ASSE_LOG_NUMB = 'AQA'; + + /** + * Entry point assessment log number, child DMR (AQC) + * + * The reference log number assigned by an entry point assessment group for a + * child Data Maintenance Request (DMR). + */ + case ENTR_POIN_ASSE_LOG_NUMB_CHIL_DMR = 'AQC'; + + /** + * Entry point assessment log number, parent DMR (AQB) + * + * The reference log number assigned by an entry point assessment group for + * the parent Data Maintenance Request (DMR). + */ + case ENTR_POIN_ASSE_LOG_NUMB_PARE_DMR = 'AQB'; + + /** + * Equipment number (EQ) + * + * Number assigned by the manufacturer to specific equipment. + */ + case EQUI_NUMB = 'EQ'; + + /** + * Equipment owner reference number (APC) + * + * Reference number issued by the owner of the equipment. + */ + case EQUI_OWNE_REFE_NUMB = 'APC'; + + /** + * Equipment sequence number (SQ) + * + * (1492) A temporary reference number identifying a particular piece of + * equipment within a series of pieces of equipment. + */ + case EQUI_SEQU_NUMB = 'SQ'; + + /** + * Equipment transport charge number (ACZ) + * + * Reference assigned to a specific equipment transportation charge. + */ + case EQUI_TRAN_CHAR_NUMB = 'ACZ'; + + /** + * Error position (AWL) + * + * Reference to the position of an error in a message. + */ + case ERRO_POSI = 'AWL'; + + /** + * Estimate order reference number (ACV) + * + * Reference number assigned by the ordering party of the estimate order. + */ + case ESTI_ORDE_REFE_NUMB = 'ACV'; + + /** + * ETERMS reference (AOY) + * + * Identifies a reference to the ICC (International Chamber of Commerce) + * ETERMS(tm) repository of electronic commerce trading terms and conditions. + */ + case ETER_REFE = 'AOY'; + + /** + * Eur 1 certificate number (AEE) + * + * Reference number assigned to a Eur 1 certificate. + */ + case EUR__CERT_NUMB = 'AEE'; + + /** + * European Value Added Tax identification (CAX) + * + * Value Added Tax identification number according to European regulation. + */ + case EURO_VALU_ADDE_TAX_IDEN = 'CAX'; + + /** + * Event reference number (AIV) + * + * [1007] Reference number identifying an event. + */ + case EVEN_REFE_NUMB = 'AIV'; + + /** + * Exceptional transport authorisation number (ATT) + * + * Authorisation number for exceptional transport (using specific equipment, + * out of gauge, materials and/or specific routing). + */ + case EXCE_TRAN_AUTH_NUMB = 'ATT'; + + /** + * Excess transportation number (ET) + * + * (1041) Number assigned to excess transport. + */ + case EXCE_TRAN_NUMB = 'ET'; + + /** + * Export clearance instruction reference number (ABR) + * + * Reference number of the clearance instructions given by the consignor + * through different means. + */ + case EXPO_CLEA_INST_REFE_NUMB = 'ABR'; + + /** + * Export control classification number (AVJ) + * + * Number identifying the classification of goods covered by an export + * licence. + */ + case EXPO_CONT_CLAS_NUMB = 'AVJ'; + + /** + * Export Control Commodity number (ECCN) (AFE) + * + * Reference number to relevant item within Commodity Control List covering + * actual products change functionality. + */ + case EXPO_CONT_COMM_NUMB_ECCN = 'AFE'; + + /** + * Export declaration (ED) + * + * Number assigned by the exporter to his export declaration number submitted + * to an authority. + */ + case EXPO_DECL = 'ED'; + + /** + * Export establishment number (AIC) + * + * Number to identify export establishment. + */ + case EXPO_ESTA_NUMB = 'AIC'; + + /** + * Export permit identifier (EX) + * + * [1208] Reference number to identify an export licence or permit. + */ + case EXPO_PERM_IDEN = 'EX'; + + /** + * Exporter's reference number (ERN) + * + * Reference to a party exporting goods. + */ + case EXPO_REFE_NUMB = 'ERN'; + + /** + * External object reference (ATS) + * + * A reference identifying an external object. + */ + case EXTE_OBJE_REFE = 'ATS'; + + /** + * Federal supply schedule item number (AJV) + * + * A number specifying an item listed in a federal supply schedule. + */ + case FEDE_SUPP_SCHE_ITEM_NUMB = 'AJV'; + + /** + * File conversion journal (ANI) + * + * Reference number identifying a journal recording details about conversion + * operations between file formats. + */ + case FILE_CONV_JOUR = 'ANI'; + + /** + * File identification number (AQY) + * + * A number assigned to identify a file. + */ + case FILE_IDEN_NUMB = 'AQY'; + + /** + * File line identifier (FI) + * + * Number assigned by the file issuer or sender to identify a specific line. + */ + case FILE_LINE_IDEN = 'FI'; + + /** + * File version number (FV) + * + * Number given to a version of an identified file. + */ + case FILE_VERS_NUMB = 'FV'; + + /** + * Final sequence number (FS) + * + * A number that identifies the final sequence. + */ + case FINA_SEQU_NUMB = 'FS'; + + /** + * Financial cancellation reference number (ATA) + * + * Reference number of a financial cancellation. + */ + case FINA_CANC_REFE_NUMB = 'ATA'; + + /** + * Financial management reference (ALY) + * + * A financial management reference. + */ + case FINA_MANA_REFE = 'ALY'; + + /** + * Financial phase reference (ARW) + * + * A reference which identifies a specific financial phase. + */ + case FINA_PHAS_REFE = 'ARW'; + + /** + * Financial settlement party's reference number (AMX) + * + * Reference number of the party who is responsible for the financial + * settlement. + */ + case FINA_SETT_PART_REFE_NUMB = 'AMX'; + + /** + * Financial transaction reference number (ANU) + * + * Reference number of the financial transaction. + */ + case FINA_TRAN_REFE_NUMB = 'ANU'; + + /** + * Firm booking reference number (AXE) + * + * A reference number identifying a previous firm booking. + */ + case FIRM_BOOK_REFE_NUMB = 'AXE'; + + /** + * First financial institution's transaction reference (AVA) + * + * Identifies the reference given to the individual transaction by the + * financial institution that is the transaction's point of entry into the + * interbank transaction chain. + */ + case FIRS_FINA_INST_TRAN_REFE = 'AVA'; + + /** + * Fiscal number (FC) + * + * Tax payer's number. Number assigned to individual persons as well as to + * corporates by a public institution; this number is different from the VAT + * registration number. + */ + case FISC_NUMB = 'FC'; + + /** + * Flat rack container bundle identification number (ATW) + * + * Reference number assigned to a bundle of flat rack containers. + */ + case FLAT_RACK_CONT_BUND_IDEN_NUMB = 'ATW'; + + /** + * Flow reference number (FLW) + * + * Number given to a usual sender which has regular expeditions of the same + * goods, to the same destination, defining all general conditions of the + * transport. + */ + case FLOW_REFE_NUMB = 'FLW'; + + /** + * Foreign exchange (FO) + * + * Exchange of two currencies at an agreed rate. + */ + case FORE_EXCH = 'FO'; + + /** + * Foreign exchange contract number (FX) + * + * Reference number identifying a foreign exchange contract. + */ + case FORE_EXCH_CONT_NUMB = 'FX'; + + /** + * Foreign military sales number (AJP) + * + * A number specifying a sale to a foreign military. + */ + case FORE_MILI_SALE_NUMB = 'AJP'; + + /** + * Foreign resident identification number (ASX) + * + * Number assigned by a government agency to identify a foreign resident. + */ + case FORE_RESI_IDEN_NUMB = 'ASX'; + + /** + * Formal report number (ASP) + * + * A number uniquely identifying a formal report. + */ + case FORM_REPO_NUMB = 'ASP'; + + /** + * Formal statement reference (ASH) + * + * A reference to a formal statement. + */ + case FORM_STAT_REFE = 'ASH'; + + /** + * Formula reference number (AXM) + * + * The reference number which identifies a formula. + */ + case FORM_REFE_NUMB = 'AXM'; + + /** + * Forwarding order number (AKT) + * + * Reference number assigned to the forwarding order by the ordering customer. + */ + case FORW_ORDE_NUMB = 'AKT'; + + /** + * Framework Agreement Number (AVV) + * + * A reference to an agreement between one or more contracting authorities and + * one or more economic operators, the purpose of which is to establish the + * terms governing contracts to be awarded during a given period, in + * particular with regard to price and, where appropriate, the quantity + * envisaged. + */ + case FRAM_AGRE_NUMB = 'AVV'; + + /** + * Free zone identifier (FT) + * + * Identifier to specify the territory of a State where any goods introduced + * are generally regarded, insofar as import duties and taxes are concerned, + * as being outside the Customs territory and are not subject to usual Customs + * control (CCC). + */ + case FREE_ZONE_IDEN = 'FT'; + + /** + * Freight bill number (FN) + * + * Reference number assigned by issuing party to a freight bill. + */ + case FREI_BILL_NUMB = 'FN'; + + /** + * Freight Forwarder number (AHY) + * + * An identification code of a Freight Forwarder. + */ + case FREI_FORW_NUMB = 'AHY'; + + /** + * Functional work group (AOO) + * + * A reference to identify a functional group performing work. + */ + case FUNC_WORK_GROU = 'AOO'; + + /** + * Fund account number (ASQ) + * + * Account number of fund. + */ + case FUND_ACCO_NUMB = 'ASQ'; + + /** + * Fund code number (AHD) + * + * Reference number to identify appropriation and branch chargeable for item. + */ + case FUND_CODE_NUMB = 'AHD'; + + /** + * General cargo consignment reference number (AKR) + * + * Reference number identifying a particular general cargo (non-containerised + * or break bulk) consignment. + */ + case GENE_CARG_CONS_REFE_NUMB = 'AKR'; + + /** + * General declaration number (GDN) + * + * Number of the declaration of incoming goods out of a vessel. + */ + case GENE_DECL_NUMB = 'GDN'; + + /** + * General order number (OR) + * + * Customs number assigned to imported merchandise that has been left + * unclaimed and subsequently moved to a Customs bonded warehouse for storage. + */ + case GENE_ORDE_NUMB = 'OR'; + + /** + * General purpose message reference number (APG) + * + * A reference number identifying a general purpose message. + */ + case GENE_PURP_MESS_REFE_NUMB = 'APG'; + + /** + * Goods and Services Tax identification number (AMT) + * + * Identifier assigned to an entity by a tax authority for Goods and Services + * Tax (GST) related purposes. + */ + case GOOD_AND_SERV_TAX_IDEN_NUMB = 'AMT'; + + /** + * Goods declaration document identifier, Customs (ABT) + * + * [1426] Reference number, assigned or accepted by Customs, to identify a + * goods declaration. + */ + case GOOD_DECL_DOCU_IDEN_CUST = 'ABT'; + + /** + * Goods declaration number (AAE) + * + * Reference number assigned to a goods declaration. + */ + case GOOD_DECL_NUMB = 'AAE'; + + /** + * Goods item information (AVM) + * + * Code identifying that the reference number given applies to the goods item + * information segment group in the referred message. + */ + case GOOD_ITEM_INFO = 'AVM'; + + /** + * Government agency reference number (AEA) + * + * Coded reference number that pertains to the business of a government + * agency. + */ + case GOVE_AGEN_REFE_NUMB = 'AEA'; + + /** + * Government bill of lading (AKH) + * + * Bill of lading as defined by the government. + */ + case GOVE_BILL_OF_LADI = 'AKH'; + + /** + * Government contract number (GC) + * + * Number assigned to a specific government/public contract. + */ + case GOVE_CONT_NUMB = 'GC'; + + /** + * Government quality assurance and control level Number (AMI) + * + * A number which identifies the level of quality assurance and control + * required by the government for an article. + */ + case GOVE_QUAL_ASSU_AND_CONT_LEVE_NUMB = 'AMI'; + + /** + * Government reference number (GN) + * + * A number that identifies a government reference. + */ + case GOVE_REFE_NUMB = 'GN'; + + /** + * Grid operator's customer reference number (CAZ) + * + * A number, assigned by a grid operator, to reference a customer. + */ + case GRID_OPER_CUST_REFE_NUMB = 'CAZ'; + + /** + * Group accounting (ADT) + * + * A number that identifies group accounting. + */ + case GROU_ACCO = 'ADT'; + + /** + * Group reference number (AST) + * + * The reference number identifying a group. + */ + case GROU_REFE_NUMB = 'AST'; + + /** + * Guarantee number (ATM) + * + * Number of a guarantee. + */ + case GUAR_NUMB = 'ATM'; + + /** + * Handling and movement reference number (AWZ) + * + * A reference number identifying a previously transmitted cargo/goods + * handling and movement message. + */ + case HAND_AND_MOVE_REFE_NUMB = 'AWZ'; + + /** + * Harmonised system number (HS) + * + * Number specifying the goods classification under the Harmonised Commodity + * Description and Coding System of the Customs Co-operation Council (CCC). + */ + case HARM_SYST_NUMB = 'HS'; + + /** + * Hash value (AVW) + * + * Contains the hash value of a related document. + */ + case HASH_VALU = 'AVW'; + + /** + * Hastening number (AMD) + * + * A number which uniquely identifies a request to hasten an action. + */ + case HAST_NUMB = 'AMD'; + + /** + * Hot roll number (ACP) + * + * Number attributed to a hot roll coil. + */ + case HOT_ROLL_NUMB = 'ACP'; + + /** + * House bill of lading number (BH) + * + * [1039] Reference number assigned to a house bill of lading. + */ + case HOUS_BILL_OF_LADI_NUMB = 'BH'; + + /** + * House waybill number (HWB) + * + * Reference number assigned to a house waybill, see: 1001 = 703. + */ + case HOUS_WAYB_NUMB = 'HWB'; + + /** + * Hygienic Certificate number, national (AWS) + * + * Nationally set Hygienic Certificate number, such as sanitary, + * epidemiologic. + */ + case HYGI_CERT_NUMB_NATI = 'AWS'; + + /** + * IATA Cargo Agent CASS Address number (CAS) + * + * Code issued by IATA to identify agent locations for CASS billing purposes. + */ + case IATA_CARG_AGEN_CASS_ADDR_NUMB = 'CAS'; + + /** + * IATA cargo agent code number (ICA) + * + * Code issued by IATA identify each IATA Cargo Agent whose name is entered on + * the Cargo Agency List. + */ + case IATA_CARG_AGEN_CODE_NUMB = 'ICA'; + + /** + * Image reference (AUI) + * + * A reference number identifying an image. + */ + case IMAG_REFE = 'AUI'; + + /** + * Immediate exportation no. for in bond movement (AFK) + * + * A number that identifies the immediate exportation number for an in bond + * movement. + */ + case IMME_EXPO_NO_FOR_IN_BOND_MOVE = 'AFK'; + + /** + * Immediate transportation no. for in bond movement (AFI) + * + * A number that identifies immediate transportation for in bond movement. + */ + case IMME_TRAN_NO_FOR_IN_BOND_MOVE = 'AFI'; + + /** + * Implementation version number (AOZ) + * + * Identifies a version number of an implementation. + */ + case IMPL_VERS_NUMB = 'AOZ'; + + /** + * Import clearance instruction reference number (ABS) + * + * Reference number of the import clearance instructions given by the + * consignor/consignee through different means. + */ + case IMPO_CLEA_INST_REFE_NUMB = 'ABS'; + + /** + * Import permit identifier (IP) + * + * [1107] Reference number to identify an import licence or permit. + */ + case IMPO_PERM_IDEN = 'IP'; + + /** + * Importer reference number (ABQ) + * + * Reference number assigned by the importer to identify a particular shipment + * for his own purposes. + */ + case IMPO_REFE_NUMB = 'ABQ'; + + /** + * Importer's letter of credit reference (AUG) + * + * Letter of credit reference issued by importer. + */ + case IMPO_LETT_OF_CRED_REFE = 'AUG'; + + /** + * Imputation account (ARV) + * + * An account to which an amount is to be posted. + */ + case IMPU_ACCO = 'ARV'; + + /** + * In bond number (IB) + * + * Customs assigned number that is used to control the movement of imported + * cargo prior to its formal Customs clearing. + */ + case IN_BOND_NUMB = 'IB'; + + /** + * Incorporated legal reference (APA) + * + * Identifies a legal reference which is deemed incorporated by reference. + */ + case INCO_LEGA_REFE = 'APA'; + + /** + * Individual transaction reference number (AIM) + * + * Reference number applying to one specific transaction. + */ + case INDI_TRAN_REFE_NUMB = 'AIM'; + + /** + * Initial sample inspection report number (II) + * + * Inspection report number given to the initial sample inspection. + */ + case INIT_SAMP_INSP_REPO_NUMB = 'II'; + + /** + * Inland transport order number (ADN) + * + * Reference number assigned by the principal to the transport order for + * inland carriage. + */ + case INLA_TRAN_ORDE_NUMB = 'ADN'; + + /** + * Institut Belgo-Luxembourgeois de Codification (IBLC) number (ATR) + * + * An identification number assigned by the Luxembourg National Bank to a + * business in Luxembourg. + */ + case INST_BELG_DE_CODI_IBLC_NUMB = 'ATR'; + + /** + * Institute of Security and Future Market Development (ISFMD) serial number (AQX) + * + * A number used to identify a public but not publicly traded company. + */ + case INST_OF_SECU_AND_FUTU_MARK_DEVE_ISFM_SERI_NUMB = 'AQX'; + + /** + * Instruction for returns number (AXB) + * + * A reference number identifying a previously communicated instruction for + * return message. + */ + case INST_FOR_RETU_NUMB = 'AXB'; + + /** + * Instruction to despatch reference number (AXA) + * + * A reference number identifying a previously transmitted instruction to + * despatch message. + */ + case INST_TO_DESP_REFE_NUMB = 'AXA'; + + /** + * Insurance certificate reference number (ICE) + * + * A number that identifies an insurance certificate reference. + */ + case INSU_CERT_REFE_NUMB = 'ICE'; + + /** + * Insurance contract reference number (ICO) + * + * A number that identifies an insurance contract reference. + */ + case INSU_CONT_REFE_NUMB = 'ICO'; + + /** + * Insurer assigned reference number (AMM) + * + * A unique reference number assigned by the insurer. + */ + case INSU_ASSI_REFE_NUMB = 'AMM'; + + /** + * Integrated logistic support cross reference number (AMU) + * + * Provides the identification of the reference which allows cross referencing + * of items between different areas of integrated logistics support. + */ + case INTE_LOGI_SUPP_CROS_REFE_NUMB = 'AMU'; + + /** + * Interchange number new (INN) + * + * Number assigned by the interchange sender to identify one specific + * interchange. This number points to the actual interchange. + */ + case INTE_NUMB_NEW = 'INN'; + + /** + * Interchange number old (INO) + * + * Number assigned by the interchange sender to identify one specific + * interchange. This number points to the previous interchange. + */ + case INTE_NUMB_OLD = 'INO'; + + /** + * Intermediary broker (INB) + * + * A number that identifies an intermediary broker. + */ + case INTE_BROK = 'INB'; + + /** + * Internal customer number (IT) + * + * Number assigned by a seller, supplier etc. to identify a customer within + * his enterprise. + */ + case INTE_CUST_NUMB = 'IT'; + + /** + * Internal data process number (AWG) + * + * A number identifying an internal data process. + */ + case INTE_DATA_PROC_NUMB = 'AWG'; + + /** + * Internal order number (IL) + * + * Number assigned to an order for internal handling/follow up. + */ + case INTE_ORDE_NUMB = 'IL'; + + /** + * Internal vendor number (IA) + * + * Number identifying the company-internal vending department/unit. + */ + case INTE_VEND_NUMB = 'IA'; + + /** + * International assessment log number (AQH) + * + * The reference log number assigned to a Data Maintenance Request (DMR) + * changed in international assessment. + */ + case INTE_ASSE_LOG_NUMB = 'AQH'; + + /** + * International assessment log number, child Data Maintenance Request (DMR) (AQJ) + * + * The reference log number assigned to a Data Maintenance Request (DMR) + * changed in international assessment that is a child to the current DMR. + */ + case INTE_ASSE_LOG_NUMB_CHIL_DATA_MAIN_REQU_DMR = 'AQJ'; + + /** + * International assessment log number, parent Data Maintenance Request (DMR) (AQI) + * + * The reference log number assigned to a Data Maintenance Request (DMR) + * changed in international assessment that is a parent to the current DMR. + */ + case INTE_ASSE_LOG_NUMB_PARE_DATA_MAIN_REQU_DMR = 'AQI'; + + /** + * International flight number (AGR) + * + * Airline flight number assigned to a flight originating and terminating + * across national borders. + */ + case INTE_FLIG_NUMB = 'AGR'; + + /** + * International Standard Industrial Classification (ISIC) code (AUY) + * + * A code specifying an international standard industrial classification. + */ + case INTE_STAN_INDU_CLAS_ISIC_CODE = 'AUY'; + + /** + * Intra-plant routing (ABV) + * + * To define routing within a plant. + */ + case INTR_ROUT = 'ABV'; + + /** + * Inventory report reference number (API) + * + * A reference number identifying an inventory report. + */ + case INVE_REPO_REFE_NUMB = 'API'; + + /** + * Inventory report request number (AVD) + * + * Reference number assigned to a request for an inventory report. + */ + case INVE_REPO_REQU_NUMB = 'AVD'; + + /** + * Investment reference number (ASB) + * + * A reference to a specific investment. + */ + case INVE_REFE_NUMB = 'ASB'; + + /** + * Invoice document identifier (IV) + * + * [1334] Reference number to identify an invoice. + */ + case INVO_DOCU_IDEN = 'IV'; + + /** + * Invoice number suffix (IS) + * + * A number added at the end of an invoice number. + */ + case INVO_NUMB_SUFF = 'IS'; + + /** + * Invoicing data sheet reference number (APH) + * + * A reference number identifying an invoicing data sheet. + */ + case INVO_DATA_SHEE_REFE_NUMB = 'APH'; + + /** + * Iron charge number (ACO) + * + * Number attributed to the iron charge for the production of steel products. + */ + case IRON_CHAR_NUMB = 'ACO'; + + /** + * Issued prescription identification (AUC) + * + * The identification of the issued prescription. + */ + case ISSU_PRES_IDEN = 'AUC'; + + /** + * Issuing bank's reference (AFR) + * + * Reference number of the issuing bank. + */ + case ISSU_BANK_REFE = 'AFR'; + + /** + * Job number (JB) + * + * [1043] Identifies a piece of work. + */ + case JOB_NUMB = 'JB'; + + /** + * Joint venture reference number (AHN) + * + * Reference number assigned to a joint venture agreement. + */ + case JOIN_VENT_REFE_NUMB = 'AHN'; + + /** + * Judgment number (ATC) + * + * A reference number identifying the legal decision. + */ + case JUDG_NUMB = 'ATC'; + + /** + * Kamer Van Koophandel (KVK) number (ATQ) + * + * An identification number assigned by the Dutch Chamber of Commerce to a + * business in the Netherlands. + */ + case KAME_VAN_KOOP_KVK_NUMB = 'ATQ'; + + /** + * Laboratory registration number (AHH) + * + * Reference number is the official registration number of the laboratory. + */ + case LABO_REGI_NUMB = 'AHH'; + + /** + * Last received banking status message reference (ATF) + * + * Reference number of the latest received banking status message. + */ + case LAST_RECE_BANK_STAT_MESS_REFE = 'ATF'; + + /** + * Latest accounting entry record reference (AWP) + * + * Code identifying the reference of the latest accounting entry record. + */ + case LATE_ACCO_ENTR_RECO_REFE = 'AWP'; + + /** + * Lease contract reference (AKV) + * + * Reference number of the lease contract. + */ + case LEAS_CONT_REFE = 'AKV'; + + /** + * Letter of credit number (LC) + * + * Reference number identifying the letter of credit document. + */ + case LETT_OF_CRED_NUMB = 'LC'; + + /** + * Lloyd's claims office reference (ADW) + * + * A number that identifies a Lloyd's claims office. + */ + case LLOY_CLAI_OFFI_REFE = 'ADW'; + + /** + * Load planning number (LO) + * + * The reference that identifies the load planning number. + */ + case LOAD_PLAN_NUMB = 'LO'; + + /** + * Loading authorisation identifier (LAN) + * + * [4092] Identifier assigned to the loading authorisation granted by the + * forwarding location e.g. railway or airport, when the consignment is + * subject to traffic limitations. + */ + case LOAD_AUTH_IDEN = 'LAN'; + + /** + * Loan (ADC) + * + * Reference number for loan allocated by lending financial institution. + */ + case LOAN = 'ADC'; + + /** + * Local Reference Number (AVZ) + * + * Number assigned by a national customs authority to an Entry Summary + * Declaration. + */ + case LOCA_REFE_NUMB = 'AVZ'; + + /** + * Lockbox (LB) + * + * Type of cash management system offered by financial institutions to provide + * for collection of customers 'receivables'. + */ + case LOCKBOX = 'LB'; + + /** + * Loss/event number (ACU) + * + * To reference to the unique number that is assigned to each major loss + * hitting the reinsurance industry. + */ + case LOSS_NUMB = 'ACU'; + + /** + * Lower number in range (LAR) + * + * Lower number in a range of numbers. + */ + case LOWE_NUMB_IN_RANG = 'LAR'; + + /** + * Mailing reference number (MRN) + * + * Identifies the party designated by the importer to receive certain customs + * correspondence in lieu of its being mailed directly to the importer. + */ + case MAIL_REFE_NUMB = 'MRN'; + + /** + * Major force program number (AHF) + * + * Reference number according to Major Force Program (US). + */ + case MAJO_FORC_PROG_NUMB = 'AHF'; + + /** + * Mandate Reference (AVS) + * + * Reference to a specific mandate given by the relevant party for underlying + * business or action. + */ + case MAND_REFE = 'AVS'; + + /** + * Manual processing authority number (AHV) + * + * Number allocated to allow the manual processing of an entity. + */ + case MANU_PROC_AUTH_NUMB = 'AHV'; + + /** + * Manufacturer defined repair rates reference (APW) + * + * Reference assigned by a manufacturer to their repair rates. + */ + case MANU_DEFI_REPA_RATE_REFE = 'APW'; + + /** + * Manufacturer's material safety data sheet number (MSS) + * + * A number that identifies a manufacturer's material safety data sheet. + */ + case MANU_MATE_SAFE_DATA_SHEE_NUMB = 'MSS'; + + /** + * Manufacturer's part number (MF) + * + * Reference number assigned by the manufacturer to his product or part. + */ + case MANU_PART_NUMB = 'MF'; + + /** + * Manufacturing order number (MH) + * + * Reference number assigned by manufacturer for a given production quantity + * of products. + */ + case MANU_ORDE_NUMB = 'MH'; + + /** + * Manufacturing quality agreement number (AUL) + * + * Reference number of a manufacturing quality agreement. + */ + case MANU_QUAL_AGRE_NUMB = 'AUL'; + + /** + * Marketing plan identification number (MPIN) (AUW) + * + * Number identifying a marketing plan. + */ + case MARK_PLAN_IDEN_NUMB_MPIN = 'AUW'; + + /** + * Marking/label reference (AFF) + * + * Reference where marking/label information derives from. + */ + case MARK_REFE = 'AFF'; + + /** + * Master account number (ASS) + * + * A reference number identifying a master account. + */ + case MAST_ACCO_NUMB = 'ASS'; + + /** + * Master air waybill number (MWB) + * + * Reference number assigned to a master air waybill, see: 1001 = 741. + */ + case MAST_AIR_WAYB_NUMB = 'MWB'; + + /** + * Master bill of lading number (MB) + * + * Reference number assigned to a master bill of lading, see: 1001 = 704. + */ + case MAST_BILL_OF_LADI_NUMB = 'MB'; + + /** + * Master label number (AAT) + * + * Identifies the master label number of any package type. + */ + case MAST_LABE_NUMB = 'AAT'; + + /** + * Master solicitation procedures, terms, and conditions number (AJM) + * + * A number indicating a master solicitation containing procedures, terms and + * conditions. + */ + case MAST_SOLI_PROC_TERM_AND_COND_NUMB = 'AJM'; + + /** + * Matching of entries, balanced (CAT) + * + * Reference to a balanced matching of entries. + */ + case MATC_OF_ENTR_BALA = 'CAT'; + + /** + * Matching of entries, unbalanced (CAV) + * + * Reference to an unbalanced matching of entries. + */ + case MATC_OF_ENTR_UNBA = 'CAV'; + + /** + * Matured certificate of deposit (ADB) + * + * Reference number for certificate of deposit allocated by issuing financial + * institution. + */ + case MATU_CERT_OF_DEPO = 'ADB'; + + /** + * Meat cutting plant approval number (AVH) + * + * Veterinary licence number allocated by a national authority to a meat + * cutting plant. + */ + case MEAT_CUTT_PLAN_APPR_NUMB = 'AVH'; + + /** + * Meat processing establishment registration number (AHS) + * + * Registration number allocated to a registered meat packing establishment by + * the local quarantine and inspection authority. + */ + case MEAT_PROC_ESTA_REGI_NUMB = 'AHS'; + + /** + * Member number (AGU) + * + * Reference number assigned to a person as a member of a group of persons or + * a service scheme. + */ + case MEMB_NUMB = 'AGU'; + + /** + * Message batch number (ALL) + * + * A number identifying a batch of messages. + */ + case MESS_BATC_NUMB = 'ALL'; + + /** + * Message design group number (AQL) + * + * Reference number for a message design group. + */ + case MESS_DESI_GROU_NUMB = 'AQL'; + + /** + * Message recipient (MR) + * + * A number that identifies the message recipient. + */ + case MESS_RECI = 'MR'; + + /** + * Message sender (MS) + * + * A number that identifies the message sender. + */ + case MESS_SEND = 'MS'; + + /** + * Meter reading at the beginning of the delivery (AKK) + * + * Meter reading at the beginning of the delivery. + */ + case METE_READ_AT_THE_BEGI_OF_THE_DELI = 'AKK'; + + /** + * Meter reading at the end of delivery (AKL) + * + * Meter reading at the end of the delivery. + */ + case METE_READ_AT_THE_END_OF_DELI = 'AKL'; + + /** + * Meter unit number (MG) + * + * Number identifying a unique meter unit. + */ + case METE_UNIT_NUMB = 'MG'; + + /** + * Metered services consumption report number (AXC) + * + * A reference number identifying a previously communicated metered services + * consumption report. + */ + case METE_SERV_CONS_REPO_NUMB = 'AXC'; + + /** + * Metering point (AVE) + * + * Reference to a metering point. + */ + case METE_POIN = 'AVE'; + + /** + * Military Interdepartmental Purchase Request (MIPR) number (AJO) + * + * A number indicating an interdepartmental purchase request used by the + * military. + */ + case MILI_INTE_PURC_REQU_MIPR_NUMB = 'AJO'; + + /** + * Ministerial certificate of homologation (AIE) + * + * Certificate of approval for components which are subject to legal + * restrictions and must be approved by the government. + */ + case MINI_CERT_OF_HOMO = 'AIE'; + + /** + * Model (ALX) + * + * (7242) A reference used to identify a model. + */ + case MODEL = 'ALX'; + + /** + * Motor vehicle identification number (VT) + * + * (8213) Reference identifying a motor vehicle used for transport. Normally + * is the vehicle registration number. + */ + case MOTO_VEHI_IDEN_NUMB = 'VT'; + + /** + * Movement reference number (AVX) + * + * Number assigned by customs referencing receipt of an Entry Summary + * Declaration. + */ + case MOVE_REFE_NUMB = 'AVX'; + + /** + * Municipality assigned business registry number (AAR) + * + * A reference number assigned by a municipality to identify a business. + */ + case MUNI_ASSI_BUSI_REGI_NUMB = 'AAR'; + + /** + * Mutually defined reference number (ZZZ) + * + * Number based on party agreement. + */ + case MUTU_DEFI_REFE_NUMB = 'ZZZ'; + + /** + * Named bank's reference (ANM) + * + * Reference number of the named bank. + */ + case NAME_BANK_REFE = 'ANM'; + + /** + * National government business identification number (ARA) + * + * A business identification number which is assigned by a national + * government. + */ + case NATI_GOVE_BUSI_IDEN_NUMB = 'ARA'; + + /** + * Net area (AWJ) + * + * Reference to an area of a net. + */ + case NET_AREA = 'AWJ'; + + /** + * Net area supplier reference (AUT) + * + * A reference identifying a supplier within a net area. + */ + case NET_AREA_SUPP_REFE = 'AUT'; + + /** + * Next rental agreement number (AMB) + * + * Number to identify the next rental agreement. + */ + case NEXT_RENT_AGRE_NUMB = 'AMB'; + + /** + * Next rental agreement reason number (ALJ) + * + * Number to identify the reason for the next rental agreement. + */ + case NEXT_RENT_AGRE_REAS_NUMB = 'ALJ'; + + /** + * Nomenclature Activity Classification Economy (NACE) identifier (AQS) + * + * A European industry classification code used to identify the activity of a + * company. + */ + case NOME_ACTI_CLAS_ECON_NACE_IDEN = 'AQS'; + + /** + * Nomination number (AHG) + * + * Reference number assigned by a shipper to a request/ commitment-to-ship on + * a pipeline system. + */ + case NOMI_NUMB = 'AHG'; + + /** + * Non-negotiable maritime transport document number (AEX) + * + * Reference number assigned to a sea waybill, see: 1001 = 712. + */ + case NONN_MARI_TRAN_DOCU_NUMB = 'AEX'; + + /** + * Norme Activite Francaise (NAF) identifier (AQT) + * + * A French industry classification code assigned by the French government to + * identify the activity of a company. + */ + case NORM_ACTI_FRAN_NAF_IDEN = 'AQT'; + + /** + * North American hazardous goods classification number (NA) + * + * Reference to materials designated as hazardous for purposes of + * transportation in North American commerce. + */ + case NORT_AMER_HAZA_GOOD_CLAS_NUMB = 'NA'; + + /** + * Nota Fiscal (NF) + * + * Nota Fiscal is a registration number for shipments / deliveries within + * Brazil, issued by the local tax authorities and mandated for each shipment. + */ + case NOTA_FISC = 'NF'; + + /** + * NOTIfication for COLlection number (NOTICOL) (ALZ) + * + * A reference assigned by a consignor to a notification document which + * indicates the availability of goods for collection. + */ + case NOTI_FOR_COLL_NUMB_NOTI = 'ALZ'; + + /** + * Number of temporary importation document (AGM) + * + * Number assigned by customs to identify consignment in transit. + */ + case NUMB_OF_TEMP_IMPO_DOCU = 'AGM'; + + /** + * Numero de Identificacion Tributaria (NIT) (ARE) + * + * A number assigned by the government to a business in some Latin American + * countries. + */ + case NUME_DE_IDEN_TRIB_NIT = 'ARE'; + + /** + * Offer number (AAG) + * + * (1332) Reference number assigned by issuing party to an offer. + */ + case OFFE_NUMB = 'AAG'; + + /** + * Order acknowledgement document identifier (AAA) + * + * [1018] Reference number identifying the acknowledgement of an order. + */ + case ORDE_ACKN_DOCU_IDEN = 'AAA'; + + /** + * Order document identifier, buyer assigned (ON) + * + * [1022] Identifier assigned by the buyer to an order. + */ + case ORDE_DOCU_IDEN_BUYE_ASSI = 'ON'; + + /** + * Order number (vendor) (VN) + * + * Reference number assigned by supplier to a buyer's purchase order. + */ + case ORDE_NUMB_VEND = 'VN'; + + /** + * Order shipment grouping reference (CBB) + * + * A reference number identifying the grouping of purchase orders into one + * shipment. + */ + case ORDE_SHIP_GROU_REFE = 'CBB'; + + /** + * Order status enquiry number (AXD) + * + * A reference number to a previously sent order status enquiry. + */ + case ORDE_STAT_ENQU_NUMB = 'AXD'; + + /** + * Ordering customer consignment reference number (ADL) + * + * Reference number assigned to the consignment by the ordering customer. + */ + case ORDE_CUST_CONS_REFE_NUMB = 'ADL'; + + /** + * Ordering customer's second reference number (AKI) + * + * Ordering customer's second reference number. + */ + case ORDE_CUST_SECO_REFE_NUMB = 'AKI'; + + /** + * Organisation breakdown structure (AOM) + * + * A structure reference that identifies the breakdown of an organisation. + */ + case ORGA_BREA_STRU = 'AOM'; + + /** + * Original certificate number (AIR) + * + * Number giving reference to an original certificate number. + */ + case ORIG_CERT_NUMB = 'AIR'; + + /** + * Original filing number (ARN) + * + * A number assigned to the original filing. + */ + case ORIG_FILI_NUMB = 'ARN'; + + /** + * Original Mandate Reference (AVR) + * + * Reference to a specific related original mandate given by the relevant + * party for underlying business or action in case of reference or mandate + * change. + */ + case ORIG_MAND_REFE = 'AVR'; + + /** + * Original purchase order (OP) + * + * Reference to the order previously sent. + */ + case ORIG_PURC_ORDE = 'OP'; + + /** + * Original submitter log number (APX) + * + * A control number assigned by the original submitter. + */ + case ORIG_SUBM_LOG_NUMB = 'APX'; + + /** + * Original submitter, child Data Maintenance Request (DMR) log number (APZ) + * + * A Data Maintenance Request (DMR) original submitter's reference log number + * for a child DMR. + */ + case ORIG_SUBM_CHIL_DATA_MAIN_REQU_DMR_LOG_NUMB = 'APZ'; + + /** + * Original submitter, parent Data Maintenance Request (DMR) log number (APY) + * + * A Data Maintenance Request (DMR) original submitter's reference log number + * for the parent DMR. + */ + case ORIG_SUBM_PARE_DATA_MAIN_REQU_DMR_LOG_NUMB = 'APY'; + + /** + * Originator's reference (ABO) + * + * A unique reference assigned by the originator. + */ + case ORIG_REFE = 'ABO'; + + /** + * Outerpackaging unit identification (ACI) + * + * Identifying marks on packing units contained within an outermost shipping + * unit. + */ + case OUTE_UNIT_IDEN = 'ACI'; + + /** + * Package number (CW) + * + * (7070) Reference number identifying a package or carton within a + * consignment. + */ + case PACK_NUMB = 'CW'; + + /** + * Packaging specification number (AHA) + * + * Reference number of documentation specifying the technical detail of + * packaging requirements. + */ + case PACK_SPEC_NUMB = 'AHA'; + + /** + * Packaging unit identification (ACH) + * + * Identifying marks on packing units. + */ + case PACK_UNIT_IDEN = 'ACH'; + + /** + * Packing list number (PK) + * + * [1014] Reference number assigned to a packing list. + */ + case PACK_LIST_NUMB = 'PK'; + + /** + * Packing plant number (AIQ) + * + * Number to identify packing establishment. + */ + case PACK_PLAN_NUMB = 'AIQ'; + + /** + * Paragraph (AJJ) + * + * A reference indicating a paragraph cited as the source of information. + */ + case PARAGRAPH = 'AJJ'; + + /** + * Parent file (AND) + * + * Identifies the parent file in a structure of related files. + */ + case PARE_FILE = 'AND'; + + /** + * Part reference indicator in a drawing (AJA) + * + * To designate the number which provides a cross reference between parts + * contained in a drawing and a parts catalogue. + */ + case PART_REFE_INDI_IN_A_DRAW = 'AJA'; + + /** + * Partial shipment identifier (AAP) + * + * [1310] Identifier of a shipment which is part of an order. + */ + case PART_SHIP_IDEN = 'AAP'; + + /** + * Party information message reference (ASG) + * + * Reference identifying a party information message. + */ + case PART_INFO_MESS_REFE = 'ASG'; + + /** + * Party reference (AUB) + * + * The reference to a party. + */ + case PART_REFE = 'AUB'; + + /** + * Party sequence number (APM) + * + * Reference identifying a party sequence number. + */ + case PART_SEQU_NUMB = 'APM'; + + /** + * Passenger reservation number (AVF) + * + * Number assigned by the travel supplier to identify the passenger + * reservation. + */ + case PASS_RESE_NUMB = 'AVF'; + + /** + * Passport number (AIG) + * + * Number assigned to a passport. + */ + case PASS_NUMB = 'AIG'; + + /** + * Password (ASO) + * + * Code used for authentication purposes. + */ + case PASSWORD = 'ASO'; + + /** + * Patron number (ARF) + * + * A number assigned by the government to a business in some Latin American + * countries. Note that "Patron" is a Spanish word, it is not a person who + * gives financial or other support. + */ + case PATR_NUMB = 'ARF'; + + /** + * Payer's financial institution account number (PB) + * + * Originated company account number (ACH transfer), check, draft or wire. + */ + case PAYE_FINA_INST_ACCO_NUMB = 'PB'; + + /** + * Payee's financial institution transit routing No. (RT) + * + * RDFI Transit routing number (ACH transfer). + */ + case PAYE_FINA_INST_TRAN_ROUT_NO = 'RT'; + + /** + * Payer's reference number (AHK) + * + * Reference number of the party who pays. + */ + case PAYE_REFE_NUMB = 'AHK'; + + /** + * Payer's financial institution transit routing No.(ACH transfers) (RR) + * + * ODFI (ACH transfer). + */ + case PAYE_FINA_INST_TRAN_ROUT_NOAC_TRAN = 'RR'; + + /** + * Payment in advance request reference (ANC) + * + * A reference to a request for payment in advance. + */ + case PAYM_IN_ADVA_REQU_REFE = 'ANC'; + + /** + * Payment instalment reference number (APB) + * + * A reference number given to a payment instalment to identify a specific + * instance of payment of a debt which can be paid at specified intervals. + */ + case PAYM_INST_REFE_NUMB = 'APB'; + + /** + * Payment order number (AEK) + * + * A number that identifies a payment order. + */ + case PAYM_ORDE_NUMB = 'AEK'; + + /** + * Payment plan reference (AMJ) + * + * A number which uniquely identifies a payment plan. + */ + case PAYM_PLAN_REFE = 'AMJ'; + + /** + * Payment reference (PQ) + * + * Reference number assigned to a payment. + */ + case PAYM_REFE = 'PQ'; + + /** + * Payment valuation number (AFY) + * + * Reference number assigned to a payment valuation. + */ + case PAYM_VALU_NUMB = 'AFY'; + + /** + * Payroll deduction advice reference (AXR) + * + * A reference number identifying a payroll deduction advice. + */ + case PAYR_DEDU_ADVI_REFE = 'AXR'; + + /** + * Payroll number (AGZ) + * + * Reference number assigned to the payroll of an organisation. + */ + case PAYR_NUMB = 'AGZ'; + + /** + * Performed prescription identification (AUH) + * + * The identification of the prescription that has been carried into effect. + */ + case PERF_PRES_IDEN = 'AUH'; + + /** + * Person registration number (AVP) + * + * A number assigned to an individual. + */ + case PERS_REGI_NUMB = 'AVP'; + + /** + * Personal identity card number (ARJ) + * + * An identity card number assigned to a person. + */ + case PERS_IDEN_CARD_NUMB = 'ARJ'; + + /** + * Phone number (AWV) + * + * A sequence of digits used to call from one telephone line to another in a + * public telephone network. + */ + case PHON_NUMB = 'AWV'; + + /** + * Physical inventory recount reference number (ALN) + * + * A reference to a re-count of physically held inventory. + */ + case PHYS_INVE_RECO_REFE_NUMB = 'ALN'; + + /** + * Physical medium (ASZ) + * + * Identifies the physical medium. + */ + case PHYS_MEDI = 'ASZ'; + + /** + * Pick-up sheet number (AWU) + * + * Reference number assigned to a pick-up sheet. + */ + case PICK_SHEE_NUMB = 'AWU'; + + /** + * Picture of a generic product (ASL) + * + * Reference identifying a picture of a generic product. + */ + case PICT_OF_A_GENE_PROD = 'ASL'; + + /** + * Picture of actual product (ASK) + * + * Reference identifying the picture of an actual product. + */ + case PICT_OF_ACTU_PROD = 'ASK'; + + /** + * Pilotage services exemption number (AVO) + * + * Number identifying the permit to not use pilotage services. + */ + case PILO_SERV_EXEM_NUMB = 'AVO'; + + /** + * Pipeline number (AMZ) + * + * Number to identify a pipeline. + */ + case PIPE_NUMB = 'AMZ'; + + /** + * Place of packing approval number (AVQ) + * + * Approval Number of the place where goods are packaged. + */ + case PLAC_OF_PACK_APPR_NUMB = 'AVQ'; + + /** + * Place of positioning reference (AUA) + * + * Identifies the reference pertaining to the place of positioning. + */ + case PLAC_OF_POSI_REFE = 'AUA'; + + /** + * Planning package (AOT) + * + * A reference for a planning package of work. + */ + case PLAN_PACK = 'AOT'; + + /** + * Plant number (PE) + * + * A number that identifies a plant. + */ + case PLAN_NUMB = 'PE'; + + /** + * Plot file (ANH) + * + * Reference number indicating that the file is a plot file. + */ + case PLOT_FILE = 'ANH'; + + /** + * Policy form number (AWI) + * + * Number assigned to a policy form. + */ + case POLI_FORM_NUMB = 'AWI'; + + /** + * Policy number (AKZ) + * + * Number assigned to a policy. + */ + case POLI_NUMB = 'AKZ'; + + /** + * Post-entry reference (AEJ) + * + * Reference to a message related to a post-entry. + */ + case POST_REFE = 'AEJ'; + + /** + * Pre-agreement number (AXN) + * + * A reference number identifying a pre-agreement. + */ + case PREA_NUMB = 'AXN'; + + /** + * Premium rate table (AMO) + * + * Identifies the premium rate table. + */ + case PREM_RATE_TABL = 'AMO'; + + /** + * Presenting bank's reference (ANS) + * + * Reference number of the presenting bank. + */ + case PRES_BANK_REFE = 'ANS'; + + /** + * Previous banking status message reference (ATE) + * + * Message reference number of the previous banking status message being + * responded to. + */ + case PREV_BANK_STAT_MESS_REFE = 'ATE'; + + /** + * Previous cargo control number (XP) + * + * Where a consignment is deconsolidated and/or transferred to the control of + * another carrier or freight forwarder (e.g. housebill, abstract) this + * references the previous (e.g. master) cargo control number. + */ + case PREV_CARG_CONT_NUMB = 'XP'; + + /** + * Previous credit advice reference number (ALD) + * + * Reference number of the previous "Credit advice" message. + */ + case PREV_CRED_ADVI_REFE_NUMB = 'ALD'; + + /** + * Previous delivery instruction number (AIF) + * + * The identification of a previous delivery instruction. + */ + case PREV_DELI_INST_NUMB = 'AIF'; + + /** + * Previous delivery schedule number (ALM) + * + * A reference number identifying a previous delivery schedule. + */ + case PREV_DELI_SCHE_NUMB = 'ALM'; + + /** + * Previous highest schedule number (SH) + * + * Number of the latest schedule of a previous period (ODETTE DELINS). + */ + case PREV_HIGH_SCHE_NUMB = 'SH'; + + /** + * Previous invoice number (OI) + * + * Reference number identifying a previously issued invoice. + */ + case PREV_INVO_NUMB = 'OI'; + + /** + * Previous member number (AGV) + * + * Reference number previously assigned to a member. + */ + case PREV_MEMB_NUMB = 'AGV'; + + /** + * Previous rental agreement number (ALI) + * + * Number to identify the previous rental agreement number. + */ + case PREV_RENT_AGRE_NUMB = 'ALI'; + + /** + * Previous request for metered reading reference number (AMA) + * + * Number to identify a previous request for a recording or reading of a + * measuring device. + */ + case PREV_REQU_FOR_METE_READ_REFE_NUMB = 'AMA'; + + /** + * Previous scheme/plan number (AGX) + * + * Reference number previously assigned to a service scheme or plan. + */ + case PREV_SCHE_NUMB = 'AGX'; + + /** + * Previous tax control number (ALT) + * + * A reference number identifying a previous tax control number. + */ + case PREV_TAX_CONT_NUMB = 'ALT'; + + /** + * Price list number (PL) + * + * Reference number assigned to a price list. + */ + case PRIC_LIST_NUMB = 'PL'; + + /** + * Price list version number (PI) + * + * A number that identifies the version of a price list. + */ + case PRIC_LIST_VERS_NUMB = 'PI'; + + /** + * Price quote number (PR) + * + * Reference number assigned by the seller to a quote. + */ + case PRIC_QUOT_NUMB = 'PR'; + + /** + * Price variation formula reference number (APK) + * + * The reference number which identifies a price variation formula. + */ + case PRIC_VARI_FORM_REFE_NUMB = 'APK'; + + /** + * Price/sales catalogue response reference number (APF) + * + * A reference number identifying a response to a price/sales catalogue. + */ + case PRIC_CATA_RESP_REFE_NUMB = 'APF'; + + /** + * Primary reference (AES) + * + * A number that identifies the primary reference. + */ + case PRIM_REFE = 'AES'; + + /** + * Prime contractor contract number (PF) + * + * Reference number assigned by the client to the contract of the prime + * contractor. + */ + case PRIM_CONT_CONT_NUMB = 'PF'; + + /** + * Principal reference number (ACL) + * + * A number that identifies the principal reference. + */ + case PRIN_REFE_NUMB = 'ACL'; + + /** + * Principal's bank reference (ANR) + * + * Reference number of the principal's bank. + */ + case PRIN_BANK_REFE = 'ANR'; + + /** + * Principal's reference (AOH) + * + * Reference number of the principal. + */ + case PRIN_REFE = 'AOH'; + + /** + * Prior contractor registration number (ARY) + * + * A previous reference number used to identify a contractor. + */ + case PRIO_CONT_REGI_NUMB = 'ARY'; + + /** + * Prior Data Universal Number System (DUNS) number (ARB) + * + * A previously assigned Data Universal Number System (DUNS) number. + */ + case PRIO_DATA_UNIV_NUMB_SYST_DUNS_NUMB = 'ARB'; + + /** + * Prior policy number (AKY) + * + * The number of the prior policy. + */ + case PRIO_POLI_NUMB = 'AKY'; + + /** + * Prior purchase order number (PW) + * + * Reference number of a purchase order previously sent to the supplier. + */ + case PRIO_PURC_ORDE_NUMB = 'PW'; + + /** + * Prior trading partner identification number (ASN) + * + * Code specifying an identification number previously assigned to a trading + * partner. + */ + case PRIO_TRAD_PART_IDEN_NUMB = 'ASN'; + + /** + * Processing plant number (AIS) + * + * Number to identify processing plant. + */ + case PROC_PLAN_NUMB = 'AIS'; + + /** + * Procurement budget number (ALA) + * + * A number which uniquely identifies a procurement budget against which + * commitments or invoices can be allocated. + */ + case PROC_BUDG_NUMB = 'ALA'; + + /** + * Product certification number (AXO) + * + * Number assigned by a governing body (or their agents) to a product which + * certifies compliance with a standard. + */ + case PROD_CERT_NUMB = 'AXO'; + + /** + * Product change authority number (AKQ) + * + * Number which authorises a change in form, fit or function of a product. + */ + case PROD_CHAN_AUTH_NUMB = 'AKQ'; + + /** + * Product characteristics directory (AVB) + * + * A reference to a product characteristics directory. + */ + case PROD_CHAR_DIRE = 'AVB'; + + /** + * Product data file number (ASV) + * + * The number of a product data file. + */ + case PROD_DATA_FILE_NUMB = 'ASV'; + + /** + * Product inquiry number (AXF) + * + * A reference number identifying a previously communicated product inquiry. + */ + case PROD_INQU_NUMB = 'AXF'; + + /** + * Product reservation number (AEO) + * + * Number assigned by seller to identify reservation of specified products. + */ + case PROD_RESE_NUMB = 'AEO'; + + /** + * Product sourcing agreement number (AIN) + * + * Reference number assigned to a product sourcing agreement. + */ + case PROD_SOUR_AGRE_NUMB = 'AIN'; + + /** + * Product specification reference number (AXQ) + * + * Number assigned by the issuer to his product specification. + */ + case PROD_SPEC_REFE_NUMB = 'AXQ'; + + /** + * Production code (PC) + * + * Number assigned by the manufacturer to a specified article or batch to + * identify the manufacturing date etc. for subsequent reference. + */ + case PROD_CODE = 'PC'; + + /** + * Profile number (AMG) + * + * Reference number allocated to a discrete set of criteria. + */ + case PROF_NUMB = 'AMG'; + + /** + * Proforma invoice document identifier (AAB) + * + * [1088] Reference number to identify a proforma invoice. + */ + case PROF_INVO_DOCU_IDEN = 'AAB'; + + /** + * Project number (AEP) + * + * Reference number assigned to a project. + */ + case PROJ_NUMB = 'AEP'; + + /** + * Project specification number (AER) + * + * Reference number identifying a project specification. + */ + case PROJ_SPEC_NUMB = 'AER'; + + /** + * Promotion deal number (PD) + * + * Number assigned by a vendor to a special promotion activity. + */ + case PROM_DEAL_NUMB = 'PD'; + + /** + * Proof of delivery reference number (ASI) + * + * A reference number identifying a proof of delivery which is generated by + * the goods recipient. + */ + case PROO_OF_DELI_REFE_NUMB = 'ASI'; + + /** + * Proposed purchase order reference number (AUJ) + * + * A reference number assigned to a proposed purchase order. + */ + case PROP_PURC_ORDE_REFE_NUMB = 'AUJ'; + + /** + * Public filing registration number (ARP) + * + * A number assigned at the time of registration of a public filing. + */ + case PUBL_FILI_REGI_NUMB = 'ARP'; + + /** + * Publication issue number (ARM) + * + * A number assigned to identify a publication issue. + */ + case PUBL_ISSU_NUMB = 'ARM'; + + /** + * Purchase for export Customs agreement number (ATB) + * + * A number assigned by a Customs authority allowing the purchase of goods + * free of tax because they are to be exported immediately after the purchase. + */ + case PURC_FOR_EXPO_CUST_AGRE_NUMB = 'ATB'; + + /** + * Purchase order change number (PP) + * + * Reference number assigned by a buyer for a revision of a purchase order. + */ + case PURC_ORDE_CHAN_NUMB = 'PP'; + + /** + * Purchase order number suffix (PS) + * + * A number added at the end of a purchase order number. + */ + case PURC_ORDE_NUMB_SUFF = 'PS'; + + /** + * Purchase order response number (POR) + * + * Reference number assigned by the seller to an order response. + */ + case PURC_ORDE_RESP_NUMB = 'POR'; + + /** + * Purchaser's request reference (APN) + * + * Reference identifying a request made by the purchaser. + */ + case PURC_REQU_REFE = 'APN'; + + /** + * Purchasing activity clause number (AJC) + * + * A number indicating a clause applicable to a purchasing activity. + */ + case PURC_ACTI_CLAU_NUMB = 'AJC'; + + /** + * Quantity valuation number (AFV) + * + * Reference number assigned to a quantity valuation. + */ + case QUAN_VALU_NUMB = 'AFV'; + + /** + * Quantity valuation request number (AFW) + * + * Reference number assigned to a quantity valuation request. + */ + case QUAN_VALU_REQU_NUMB = 'AFW'; + + /** + * Quarantine/treatment status reference number (AHT) + * + * Coded quarantine/treatment status of a container and its cargo and packing + * materials, generated by a shipping company based upon declarations + * presented by a shipper. + */ + case QUAR_STAT_REFE_NUMB = 'AHT'; + + /** + * Quota number (ABJ) + * + * Reference number allocated by a government authority to identify a quota. + */ + case QUOT_NUMB = 'ABJ'; + + /** + * Rail waybill number (WY) + * + * The number on a rail waybill. + */ + case RAIL_WAYB_NUMB = 'WY'; + + /** + * Rail/road routing code (RC) + * + * International Western and Eastern European route code used in all rail + * organizations and specified in the international tariffs (rail tariffs) + * known by the customers. + */ + case RAIL_ROUT_CODE = 'RC'; + + /** + * Railway consignment note number (RCN) + * + * Reference number assigned to a rail consignment note, see: 1001 = 720. + */ + case RAIL_CONS_NOTE_NUMB = 'RCN'; + + /** + * Railway wagon number (ACR) + * + * (8260) Registered identification initials and numbers of railway wagon. + * Synonym: Rail car number. + */ + case RAIL_WAGO_NUMB = 'ACR'; + + /** + * Rate code number (AWA) + * + * Number assigned by a buyer to rate a product. + */ + case RATE_CODE_NUMB = 'AWA'; + + /** + * Rate note number (AHX) + * + * Reference assigned to a specific rate. + */ + case RATE_NOTE_NUMB = 'AHX'; + + /** + * Receiver's file reference number (AOF) + * + * File reference number assigned by the receiver. + */ + case RECE_FILE_REFE_NUMB = 'AOF'; + + /** + * Receiving advice number (ALO) + * + * A reference number to a receiving advice. + */ + case RECE_ADVI_NUMB = 'ALO'; + + /** + * Receiving bank's authorization number (ANW) + * + * Authorization number of the receiving bank. + */ + case RECE_BANK_AUTH_NUMB = 'ANW'; + + /** + * Receiving Bankgiro number (ATJ) + * + * Number of the receiving Bankgiro. + */ + case RECE_BANK_NUMB = 'ATJ'; + + /** + * Receiving party's member identification (AGY) + * + * Identification used by the receiving party for a member of a service scheme + * or group of persons. + */ + case RECE_PART_MEMB_IDEN = 'AGY'; + + /** + * Reference number assigned by third party (ANK) + * + * Reference number assigned by a third party. + */ + case REFE_NUMB_ASSI_BY_THIR_PART = 'ANK'; + + /** + * Reference number of a request for metered reading (AMC) + * + * Number to identify a request for a recording or reading of a measuring + * device to be taken. + */ + case REFE_NUMB_OF_A_REQU_FOR_METE_READ = 'AMC'; + + /** + * Reference number quoted on statement (AGN) + * + * Reference number quoted on the statement sent to the beneficiary for + * information purposes. + */ + case REFE_NUMB_QUOT_ON_STAT = 'AGN'; + + /** + * Reference number to previous message (ACW) + * + * Reference number assigned to the message which was previously issued (e.g. + * in the case of a cancellation, the primary reference of the message to be + * cancelled will be quoted in this element). + */ + case REFE_NUMB_TO_PREV_MESS = 'ACW'; + + /** + * Reference to account servicing bank's message (APL) + * + * Reference to the account servicing bank's message. + */ + case REFE_TO_ACCO_SERV_BANK_MESS = 'APL'; + + /** + * Referred product for chemical analysis (AIY) + * + * A product number identifying the product which is used for chemical + * analysis considered valid for a group of products. + */ + case REFE_PROD_FOR_CHEM_ANAL = 'AIY'; + + /** + * Referred product for mechanical analysis (AIX) + * + * A product number identifying the product which is used for mechanical + * analysis considered valid for a group of products. + */ + case REFE_PROD_FOR_MECH_ANAL = 'AIX'; + + /** + * Regiristo Federal de Contribuyentes (ARQ) + * + * A federal tax identification number assigned by the Mexican tax authority. + */ + case REGI_FEDE_DE_CONT = 'ARQ'; + + /** + * Registered capital reference (ALV) + * + * Registered capital reference of a company. + */ + case REGI_CAPI_REFE = 'ALV'; + + /** + * Registered contractor activity type (AQU) + * + * Reference number identifying the type of registered contractor activity. + */ + case REGI_CONT_ACTI_TYPE = 'AQU'; + + /** + * Registration number of previous Customs declaration (AEI) + * + * Registration number of the Customs declaration lodged for the previous + * Customs procedure. + */ + case REGI_NUMB_OF_PREV_CUST_DECL = 'AEI'; + + /** + * Registro Informacion Fiscal (RIF) number (ARG) + * + * A number assigned by the government to a business in some Latin American + * countries. + */ + case REGI_INFO_FISC_RIF_NUMB = 'ARG'; + + /** + * Registro Unico de Contribuyente (RUC) number (ARH) + * + * A number assigned by the government to a business in some Latin American + * countries. + */ + case REGI_UNIC_DE_CONT_RUC_NUMB = 'ARH'; + + /** + * Registro Unico Tributario (RUT) (ATV) + * + * Tax identification number in Chile. + */ + case REGI_UNIC_TRIB_RUT = 'ATV'; + + /** + * Reinsurer's claim number (APE) + * + * To identify the number assigned to the claim by the reinsurer. + */ + case REIN_CLAI_NUMB = 'APE'; + + /** + * Related document number (ACE) + * + * Reference number identifying a related document. + */ + case RELA_DOCU_NUMB = 'ACE'; + + /** + * Related party (AWO) + * + * Reference of a related party. + */ + case RELA_PART = 'AWO'; + + /** + * Release number (RE) + * + * Reference number assigned to identify a release of a set of rules, + * conventions, conditions, etc. + */ + case RELE_NUMB = 'RE'; + + /** + * Remittance advice number (RA) + * + * A number that identifies a remittance advice. + */ + case REMI_ADVI_NUMB = 'RA'; + + /** + * Remitting bank's reference (ANQ) + * + * Reference number of the remitting bank. + */ + case REMI_BANK_REFE = 'ANQ'; + + /** + * Repair data request number (AME) + * + * A number which uniquely identifies a request for data about repairs. + */ + case REPA_DATA_REQU_NUMB = 'AME'; + + /** + * Repair estimate number (ABF) + * + * A number identifying a repair estimate. + */ + case REPA_ESTI_NUMB = 'ABF'; + + /** + * Replaced meter unit number (AMK) + * + * Number identifying the replaced meter unit. + */ + case REPL_METE_UNIT_NUMB = 'AMK'; + + /** + * Replacing part number (ABM) + * + * New part number which replaces the existing part number. + */ + case REPL_PART_NUMB = 'ABM'; + + /** + * Replenishment purchase order number (AFH) + * + * Purchase order number specified by the buyer for the assignment to vendor's + * replenishment orders in a vendor managed inventory program. + */ + case REPL_PURC_ORDE_NUMB = 'AFH'; + + /** + * Replenishment purchase order range end number (AML) + * + * Ending number of a range of purchase order numbers assigned by the buyer to + * vendor's replenishment orders. + */ + case REPL_PURC_ORDE_RANG_END_NUMB = 'AML'; + + /** + * Replenishment purchase order range start number (AKM) + * + * Starting number of a range of purchase order numbers assigned by the buyer + * to vendor's replenishment orders. + */ + case REPL_PURC_ORDE_RANG_STAR_NUMB = 'AKM'; + + /** + * Report number (ADY) + * + * Reference to a report to Customs by a carrier at the point of entry, + * encompassing both conveyance and consignment information. + */ + case REPO_NUMB = 'ADY'; + + /** + * Reporting form number (ALE) + * + * Reference number assigned to the reporting form. + */ + case REPO_FORM_NUMB = 'ALE'; + + /** + * Request for cancellation number (AET) + * + * A number that identifies a request for cancellation. + */ + case REQU_FOR_CANC_NUMB = 'AET'; + + /** + * Request for quote number (AHU) + * + * Reference number assigned by the requestor to a request for quote. + */ + case REQU_FOR_QUOT_NUMB = 'AHU'; + + /** + * Request number (AGI) + * + * The reference number of a request. + */ + case REQU_NUMB = 'AGI'; + + /** + * Reservation office identifier (LRC) + * + * Reference to the office where a reservation was made. + */ + case RESE_OFFI_IDEN = 'LRC'; + + /** + * Reservation station indentifier (AVT) + * + * Reference to the station where a reservation was made. + */ + case RESE_STAT_INDE = 'AVT'; + + /** + * Reserved goods identifier (AWY) + * + * A reference number identifying goods in stock which have been reserved for + * a party. + */ + case RESE_GOOD_IDEN = 'AWY'; + + /** + * Returnable container reference number (ALP) + * + * A reference number identifying a returnable container. + */ + case RETU_CONT_REFE_NUMB = 'ALP'; + + /** + * Returns notice number (ALQ) + * + * A reference number to a returns notice. + */ + case RETU_NOTI_NUMB = 'ALQ'; + + /** + * Road consignment note number (CMR) + * + * Reference number assigned to a road consignment note, see: 1001 = 730. + */ + case ROAD_CONS_NOTE_NUMB = 'CMR'; + + /** + * Safe custody number (ASR) + * + * The number of a file or portfolio kept for safe custody on behalf of + * clients. + */ + case SAFE_CUST_NUMB = 'ASR'; + + /** + * Safe deposit box number (ATI) + * + * Number of the safe deposit box. + */ + case SAFE_DEPO_BOX_NUMB = 'ATI'; + + /** + * Sales department number (SD) + * + * A number that identifies a sales department. + */ + case SALE_DEPA_NUMB = 'SD'; + + /** + * Sales forecast number (ALR) + * + * A reference number identifying a sales forecast. + */ + case SALE_FORE_NUMB = 'ALR'; + + /** + * Sales office number (SM) + * + * A number that identifies a sales office. + */ + case SALE_OFFI_NUMB = 'SM'; + + /** + * Sales person number (SA) + * + * Identification number of a sales person. + */ + case SALE_PERS_NUMB = 'SA'; + + /** + * Sales region number (SB) + * + * A number that identifies a sales region. + */ + case SALE_REGI_NUMB = 'SB'; + + /** + * Sales report number (ALS) + * + * A reference number identifying a sales report. + */ + case SALE_REPO_NUMB = 'ALS'; + + /** + * Scan line (SP) + * + * A number that identifies a scan line. + */ + case SCAN_LINE = 'SP'; + + /** + * Scheme/plan number (AGW) + * + * Reference number assigned to a service scheme or plan. + */ + case SCHE_NUMB = 'AGW'; + + /** + * Second beneficiary's reference (AFP) + * + * Reference of the second beneficiary. + */ + case SECO_BENE_REFE = 'AFP'; + + /** + * Secondary Customs reference (AFM) + * + * A number that identifies the secondary customs reference. + */ + case SECO_CUST_REFE = 'AFM'; + + /** + * Secretariat number (ATD) + * + * A reference number identifying a secretariat. + */ + case SECR_NUMB = 'ATD'; + + /** + * Secure delivery terms and conditions agreement reference (ADX) + * + * A reference to a secure delivery terms and conditions agreement. A secured + * delivery agreement is an agreement containing terms and conditions to + * secure deliveries in case of failure in the production or logistics process + * of the supplier. + */ + case SECU_DELI_TERM_AND_COND_AGRE_REFE = 'ADX'; + + /** + * Seller's catalogue number (ABN) + * + * Identification number assigned to a seller's catalogue. + */ + case SELL_CATA_NUMB = 'ABN'; + + /** + * Sellers reference number (SS) + * + * Reference number assigned to a transaction by the seller. + */ + case SELL_REFE_NUMB = 'SS'; + + /** + * Sender's clause number (AQO) + * + * The number that identifies the sender's clause. + */ + case SEND_CLAU_NUMB = 'AQO'; + + /** + * Sender's file reference number (AOE) + * + * File reference number assigned by the sender. + */ + case SEND_FILE_REFE_NUMB = 'AOE'; + + /** + * Sender's reference to the original message (AGO) + * + * The reference provided by the sender of the original message. + */ + case SEND_REFE_TO_THE_ORIG_MESS = 'AGO'; + + /** + * Sending bank's reference number (ANY) + * + * Reference number of the sending bank. + */ + case SEND_BANK_REFE_NUMB = 'ANY'; + + /** + * Sending Bankgiro number (ATK) + * + * Number of the sending Bankgiro. + */ + case SEND_BANK_NUMB = 'ATK'; + + /** + * Serial number (SE) + * + * Identification number of an item which distinguishes this specific item out + * of an number of identical items. + */ + case SERI_NUMB = 'SE'; + + /** + * Serial shipping container code (AXI) + * + * Reference number identifying a logistic unit. + */ + case SERI_SHIP_CONT_CODE = 'AXI'; + + /** + * Service category reference (AWM) + * + * Reference identifying the service category. + */ + case SERV_CATE_REFE = 'AWM'; + + /** + * Service group identification number (AGT) + * + * Identification used for a group of services. + */ + case SERV_GROU_IDEN_NUMB = 'AGT'; + + /** + * Service provider (AWK) + * + * Reference of the service provider. + */ + case SERV_PROV = 'AWK'; + + /** + * Service relation number (AXH) + * + * A reference number identifying the relationship between a service provider + * and a service client, e.g., treatment of a patient in a hospital, usage by + * a member of a library facility, etc. + */ + case SERV_RELA_NUMB = 'AXH'; + + /** + * Ship from (SF) + * + * A number that identifies a ship from location. + */ + case SHIP_FROM = 'SF'; + + /** + * Ship notice/manifest number (MA) + * + * The number assigned to a ship notice or manifest. + */ + case SHIP_NOTI_NUMB = 'MA'; + + /** + * Ship's stay reference number (ATZ) + * + * (1099) Reference number assigned by a port authority to the stay of a + * vessel in the port. + */ + case SHIP_STAY_REFE_NUMB = 'ATZ'; + + /** + * Shipment reference number (SRN) + * + * [1065] Reference number assigned to a shipment. + */ + case SHIP_REFE_NUMB = 'SRN'; + + /** + * Shipowner's authorization number (ADM) + * + * Reference number assigned by the shipowner as an authorization number to + * transport certain goods (such as hazardous goods, cool or reefer goods). + */ + case SHIP_AUTH_NUMB = 'ADM'; + + /** + * Shipping label serial number (LA) + * + * The serial number on a shipping label. + */ + case SHIP_LABE_SERI_NUMB = 'LA'; + + /** + * Shipping note number (AEV) + * + * [1123] Reference number assigned to a shipping note. + */ + case SHIP_NOTE_NUMB = 'AEV'; + + /** + * Shipping unit identification (ACC) + * + * Identifying marks on the outermost unit that is used to transport + * merchandise. + */ + case SHIP_UNIT_IDEN = 'ACC'; + + /** + * SID (Shipper's identifying number for shipment) (SI) + * + * A number that identifies the SID (shipper's identification) number for a + * shipment. + */ + case SID_SHIP_IDEN_NUMB_FOR_SHIP = 'SI'; + + /** + * Signal code number (AHE) + * + * Reference number to identify a signal. + */ + case SIGN_CODE_NUMB = 'AHE'; + + /** + * Single transaction sequence number (AGJ) + * + * A number that identifies a single transaction sequence. + */ + case SING_TRAN_SEQU_NUMB = 'AGJ'; + + /** + * Site specific procedures, terms, and conditions number (AJL) + * + * A number indicating a set of site specific procedures, terms and + * conditions. + */ + case SITE_SPEC_PROC_TERM_AND_COND_NUMB = 'AJL'; + + /** + * Situation number (AFZ) + * + * Common reference number given to documents concerning a determined period + * of works. + */ + case SITU_NUMB = 'AFZ'; + + /** + * Slaughter plant number (AIT) + * + * Number to identify slaughter plant. + */ + case SLAU_PLAN_NUMB = 'AIT'; + + /** + * Slaughterhouse approval number (AVG) + * + * Veterinary licence number allocated by a national authority to a + * slaughterhouse. + */ + case SLAU_APPR_NUMB = 'AVG'; + + /** + * Social security number (ARR) + * + * An identification number assigned to an individual by the social security + * administration. + */ + case SOCI_SECU_NUMB = 'ARR'; + + /** + * Software editor reference (AUM) + * + * Reference identifying the software editor. + */ + case SOFT_EDIT_REFE = 'AUM'; + + /** + * Software quality reference (AUO) + * + * Reference allocated to the software by a quality assurance agency. + */ + case SOFT_QUAL_REFE = 'AUO'; + + /** + * Software reference (AUN) + * + * Reference identifying the software. + */ + case SOFT_REFE = 'AUN'; + + /** + * Source document internal reference (AOG) + * + * Reference number assigned to a source document for internal usage. + */ + case SOUR_DOCU_INTE_REFE = 'AOG'; + + /** + * Special budget account number (APU) + * + * The number of a special budget account. + */ + case SPEC_BUDG_ACCO_NUMB = 'APU'; + + /** + * Special instructions number (AJK) + * + * A number indicating a citation used for special instructions. + */ + case SPEC_INST_NUMB = 'AJK'; + + /** + * Specification number (SZ) + * + * Number assigned by the issuer to his specification. + */ + case SPEC_NUMB = 'SZ'; + + /** + * Split delivery number (AXG) + * + * A reference number identifying a split delivery. + */ + case SPLI_DELI_NUMB = 'AXG'; + + /** + * Standard Carrier Alpha Code (SCAC) number (AAZ) + * + * For maritime shipments, this code qualifies a Standard Alpha Carrier Code + * (SCAC) as issued by the United Stated National Motor Traffic Association + * Inc. + */ + case STAN_CARR_ALPH_CODE_SCAC_NUMB = 'AAZ'; + + /** + * Standard Industry Classification (SIC) number (AJT) + * + * A number specifying a standard industry classification. + */ + case STAN_INDU_CLAS_SIC_NUMB = 'AJT'; + + /** + * Standard number of inspection document (ALW) + * + * Code identifying the standard number of the inspection document supplied. + */ + case STAN_NUMB_OF_INSP_DOCU = 'ALW'; + + /** + * Standard's code number (GD) + * + * Number to identify a specific parameter within a standardization + * description (e.g. M5 for screws or DIN A4 for paper). + */ + case STAN_CODE_NUMB = 'GD'; + + /** + * Standard's number (GA) + * + * Number to identify a standardization description (e.g. ISO 9375). + */ + case STAN_NUMB = 'GA'; + + /** + * Standard's version number (AMY) + * + * The version number assigned to a standard. + */ + case STAN_VERS_NUMB = 'AMY'; + + /** + * State or province assigned entity identification (AQW) + * + * Reference number of an entity assigned by a state or province. + */ + case STAT_OR_PROV_ASSI_ENTI_IDEN = 'AQW'; + + /** + * Statement number (ADP) + * + * A reference number identifying a statement. + */ + case STAT_NUMB = 'ADP'; + + /** + * Statement of work (AOR) + * + * A reference number for a statement of work. + */ + case STAT_OF_WORK = 'AOR'; + + /** + * Station reference number (STA) + * + * International UIC code assigned to every European rail station (CIM + * convention). + */ + case STAT_REFE_NUMB = 'STA'; + + /** + * Statistic Bundes Amt (SBA) identifier (AQV) + * + * A German industry classification code issued by Statistic Bundes Amt (SBA) + * to identify the activity of a company. + */ + case STAT_BUND_AMT_SBA_IDEN = 'AQV'; + + /** + * Status report number (AQK) + * + * (1125) The reference number for a status report. + */ + case STAT_REPO_NUMB = 'AQK'; + + /** + * Stock adjustment number (ARZ) + * + * A number identifying a stock adjustment. + */ + case STOC_ADJU_NUMB = 'ARZ'; + + /** + * Stock exchange company identifier (ARU) + * + * A reference assigned by the stock exchange to a company. + */ + case STOC_EXCH_COMP_IDEN = 'ARU'; + + /** + * Stock keeping unit number (ABW) + * + * A number that identifies the stock keeping unit. + */ + case STOC_KEEP_UNIT_NUMB = 'ABW'; + + /** + * Sub file (ANE) + * + * Identifies the sub file in a structure of related files. + */ + case SUB_FILE = 'ANE'; + + /** + * Sub-house bill of lading number (ABH) + * + * Reference assigned to a sub-house bill of lading. + */ + case SUBH_BILL_OF_LADI_NUMB = 'ABH'; + + /** + * Substitute air waybill number (AEY) + * + * Reference number assigned to a substitute air waybill, see: 1001 = 743. + */ + case SUBS_AIR_WAYB_NUMB = 'AEY'; + + /** + * Suffix (AJY) + * + * A reference to specify a suffix added to the end of a basic identifier. + */ + case SUFFIX = 'AJY'; + + /** + * Supplier's control number (AEU) + * + * Reference to a file regarding a control of the supplier carried out on + * departure of the goods. + */ + case SUPP_CONT_NUMB = 'AEU'; + + /** + * Supplier's credit claim reference number (ASJ) + * + * A reference number identifying a supplier's credit claim. + */ + case SUPP_CRED_CLAI_REFE_NUMB = 'ASJ'; + + /** + * Supplier's customer reference number (AVC) + * + * A number, assigned by a supplier, to reference a customer. + */ + case SUPP_CUST_REFE_NUMB = 'AVC'; + + /** + * Swap order number (SW) + * + * Number assigned by the seller to a swap order (see definition of DE 1001, + * code 229). + */ + case SWAP_ORDE_NUMB = 'SW'; + + /** + * Symbol number (AEC) + * + * A number that identifies a symbol. + */ + case SYMB_NUMB = 'AEC'; + + /** + * Systeme Informatique pour le Repertoire des ENtreprises (SIREN) number (ARK) + * + * An identification number known as a SIREN assigned to a business in France. + */ + case SYST_INFO_POUR_LE_REPE_DES_ENTR_SIRE_NUMB = 'ARK'; + + /** + * Systeme Informatique pour le Repertoire des ETablissements (SIRET) number (ARL) + * + * An identification number known as a SIRET assigned to a business location + * in France. + */ + case SYST_INFO_POUR_LE_REPE_DES_ETAB_SIRE_NUMB = 'ARL'; + + /** + * Tariff number (AFG) + * + * A number that identifies a tariff. + */ + case TARI_NUMB = 'AFG'; + + /** + * Tax exemption licence number (TL) + * + * Number assigned by the tax authorities to a party indicating its tax + * exemption authorization. This number could relate to a specified business + * type, a specified local area or a class of products. + */ + case TAX_EXEM_LICE_NUMB = 'TL'; + + /** + * Tax payment identifier (ABI) + * + * [1168] Reference number identifying a payment of a duty or tax e.g. under a + * transit procedure. + */ + case TAX_PAYM_IDEN = 'ABI'; + + /** + * Tax registration number (AHP) + * + * The registration number by which a company/organization is identified with + * the tax administration. + */ + case TAX_REGI_NUMB = 'AHP'; + + /** + * Team assignment number (CST) + * + * Team number assigned to a group that is responsible for working a + * particular transaction. + */ + case TEAM_ASSI_NUMB = 'CST'; + + /** + * Technical document number (AJW) + * + * A number specifying a technical document. + */ + case TECH_DOCU_NUMB = 'AJW'; + + /** + * Technical order number (AJX) + * + * A reference to an order that specifies a technical change. + */ + case TECH_ORDE_NUMB = 'AJX'; + + /** + * Technical phase reference (ARX) + * + * A reference which identifies a specific technical phase. + */ + case TECH_PHAS_REFE = 'ARX'; + + /** + * Technical regulation (ANG) + * + * Reference number identifying a technical regulation. + */ + case TECH_REGU = 'ANG'; + + /** + * Telex message number (TE) + * + * Reference number identifying a telex message. + */ + case TELE_MESS_NUMB = 'TE'; + + /** + * Terminal operator's consignment reference (TCR) + * + * Reference assigned to a consignment by the terminal operator. + */ + case TERM_OPER_CONS_REFE = 'TCR'; + + /** + * Test report number (TP) + * + * Reference number identifying a test report document relevant to the + * product. + */ + case TEST_REPO_NUMB = 'TP'; + + /** + * Test specification number (AXJ) + * + * A reference number identifying a test specification. + */ + case TEST_SPEC_NUMB = 'AXJ'; + + /** + * Text Element Identifier deletion reference (ABX) + * + * The reference used within a given TEI (Text Element Identifier) which is to + * be deleted. + */ + case TEXT_ELEM_IDEN_DELE_REFE = 'ABX'; + + /** + * Third bank's reference (AKN) + * + * Reference number of the third bank. + */ + case THIR_BANK_REFE = 'AKN'; + + /** + * Through bill of lading number (AFA) + * + * Reference number assigned to a through bill of lading, see: 1001 = 761. + */ + case THRO_BILL_OF_LADI_NUMB = 'AFA'; + + /** + * Ticket control number (CBA) + * + * Reference giving access to all the details associated with the ticket. + */ + case TICK_CONT_NUMB = 'CBA'; + + /** + * Time series reference (AUU) + * + * Reference to a time series. + */ + case TIME_SERI_REFE = 'AUU'; + + /** + * TIR carnet number (TI) + * + * Reference number assigned to a TIR carnet. + */ + case TIR_CARN_NUMB = 'TI'; + + /** + * Tokyo SHOKO Research (TSR) business identifier (ARI) + * + * A number assigned to a business by TSR. + */ + case TOKY_SHOK_RESE_TSR_BUSI_IDEN = 'ARI'; + + /** + * Tooling contract number (AXL) + * + * A reference number of the tooling contract. + */ + case TOOL_CONT_NUMB = 'AXL'; + + /** + * TRACES party identification (AXS) + * + * The party identification number used in the European Union's Trade Control + * and Expert System (TRACES). + */ + case TRAC_PART_IDEN = 'AXS'; + + /** + * Trader account number (ADZ) + * + * Number assigned by a Customs authority which uniquely identifies a trader + * (i.e. importer, exporter or declarant) for Customs purposes. + */ + case TRAD_ACCO_NUMB = 'ADZ'; + + /** + * Trading partner identification number (ASM) + * + * Code specifying an identification assigned to an entity with whom one + * conducts trade. + */ + case TRAD_PART_IDEN_NUMB = 'ASM'; + + /** + * Training flight number (AHC) + * + * Non-revenue producing airline flight for training purposes. + */ + case TRAI_FLIG_NUMB = 'AHC'; + + /** + * Transaction reference number (TN) + * + * Reference applied to a transaction between two or more parties over a + * defined life cycle; e.g. number applied by importer or broker to obtain + * release from Customs, may then used to control declaration through final + * accounting (synonyms: declaration, entry number). + */ + case TRAN_REFE_NUMB = 'TN'; + + /** + * Transfer number (TF) + * + * An extra number assigned to goods or a container which functions as a + * reference number or as an authorization number to get the goods or + * container released from a certain party. + */ + case TRAN_NUMB = 'TF'; + + /** + * Transit (onward carriage) guarantee (bond) number (ABK) + * + * Reference number to identify the guarantee or security provided for Customs + * transit operation (CCC). + */ + case TRAN_ONWA_CARR_GUAR_BOND_NUMB = 'ABK'; + + /** + * Transport contract document identifier (AAS) + * + * [1188] Reference number to identify a document evidencing a transport + * contract. + */ + case TRAN_CONT_DOCU_IDEN = 'AAS'; + + /** + * Transport contract reference number (AHI) + * + * Reference number of a transport contract. + */ + case TRAN_CONT_REFE_NUMB = 'AHI'; + + /** + * Transport costs reference number (AKW) + * + * Reference number of the transport costs. + */ + case TRAN_COST_REFE_NUMB = 'AKW'; + + /** + * Transport equipment acceptance order reference (ATX) + * + * Reference number assigned to an order to accept transport equipment that is + * to be delivered by an inland carrier to a specified facility. + */ + case TRAN_EQUI_ACCE_ORDE_REFE = 'ATX'; + + /** + * Transport equipment gross mass verification order reference (VOR) + * + * Reference number identifying the order for obtaining a Verified Gross Mass + * (weight) of a packed transport equipment as per SOLAS Chapter VI, + * Regulation 2, paragraphs 4-6. + */ + case TRAN_EQUI_GROS_MASS_VERI_ORDE_REFE = 'VOR'; + + /** + * Transport equipment gross mass verification reference number (VGR) + * + * Reference number identifying the documentation of a transport equipment + * gross mass (weight) verification. + */ + case TRAN_EQUI_GROS_MASS_VERI_REFE_NUMB = 'VGR'; + + /** + * Transport equipment identifier (AAQ) + * + * [8260] To identify a piece if transport equipment e.g. container or unit + * load device. + */ + case TRAN_EQUI_IDEN = 'AAQ'; + + /** + * Transport equipment release order reference (ATY) + * + * Reference number assigned to an order to release transport equipment which + * is to be picked up by an inland carrier from a specified facility. + */ + case TRAN_EQUI_RELE_ORDE_REFE = 'ATY'; + + /** + * Transport equipment return reference (AKC) + * + * Reference known at the address to return equipment to. + */ + case TRAN_EQUI_RETU_REFE = 'AKC'; + + /** + * Transport equipment seal identifier (SN) + * + * [9308] The identification number of a seal affixed to a piece of transport + * equipment. + */ + case TRAN_EQUI_SEAL_IDEN = 'SN'; + + /** + * Transport equipment stripping order (AKX) + * + * Reference number assigned to the order to strip goods from transport + * equipment. + */ + case TRAN_EQUI_STRI_ORDE = 'AKX'; + + /** + * Transport equipment stuffing order (AKF) + * + * Reference number assigned to the order to stuff goods in transport + * equipment. + */ + case TRAN_EQUI_STUF_ORDE = 'AKF'; + + /** + * Transport equipment survey reference (AKD) + * + * Reference number assigned by the ordering party to the transport equipment + * survey order. + */ + case TRAN_EQUI_SURV_REFE = 'AKD'; + + /** + * Transport equipment survey reference number (AKU) + * + * Reference number known at the address where the transport equipment will be + * or has been surveyed. + */ + case TRAN_EQUI_SURV_REFE_NUMB = 'AKU'; + + /** + * Transport equipment survey report number (AKE) + * + * Reference number used by a party to identify its transport equipment survey + * report. + */ + case TRAN_EQUI_SURV_REPO_NUMB = 'AKE'; + + /** + * Transport instruction number (TIN) + * + * Reference number identifying a transport instruction. + */ + case TRAN_INST_NUMB = 'TIN'; + + /** + * Transport means journey identifier (CRN) + * + * [8028] To identify a journey of a means of transport, for example voyage + * number, flight number, trip number. + */ + case TRAN_MEAN_JOUR_IDEN = 'CRN'; + + /** + * Transport route (AEM) + * + * A predefined and identified sequence of points where goods are collected, + * agreed between partners, e.g. the party in charge of organizing the + * transport and the parties where goods will be collected. The same + * collecting points may be included in different transport routes, but in a + * different sequence. + */ + case TRAN_ROUT = 'AEM'; + + /** + * Transport section reference number (AIW) + * + * A number identifying a transport section. + */ + case TRAN_SECT_REFE_NUMB = 'AIW'; + + /** + * Transport status report number (AXK) + * + * [1125] A reference number identifying a transport status report. + */ + case TRAN_STAT_REPO_NUMB = 'AXK'; + + /** + * Transportation account number (AJZ) + * + * An account number to be charged or credited for transportation. + */ + case TRAN_ACCO_NUMB = 'AJZ'; + + /** + * Transportation Control Number (TCN) (AOW) + * + * A number assigned for transportation purposes. + */ + case TRAN_CONT_NUMB_TCN = 'AOW'; + + /** + * Transportation exportation no. for in bond movement (AFJ) + * + * A number that identifies the transportation exportation number for an in + * bond movement. + */ + case TRAN_EXPO_NO_FOR_IN_BOND_MOVE = 'AFJ'; + + /** + * Travel service (AUE) + * + * Reference identifying a travel service. + */ + case TRAV_SERV = 'AUE'; + + /** + * Treaty number (ADF) + * + * A number that identifies a treaty. + */ + case TREA_NUMB = 'ADF'; + + /** + * Trucker's bill of lading (TB) + * + * A cargo list/description issued by a motor carrier of freight. + */ + case TRUC_BILL_OF_LADI = 'TB'; + + /** + * U.S. Code of Federal Regulations (CFR) (AJB) + * + * A reference indicating a citation from the U.S. Code of Federal Regulations + * (CFR). + */ + case US_CODE_OF_FEDE_REGU_CFR = 'AJB'; + + /** + * U.S. Defense Federal Acquisition Regulation Supplement (AJD) + * + * A reference indicating a citation from the U.S. Defense Federal Acquisition + * Regulation Supplement. + */ + case US_DEFE_FEDE_ACQU_REGU_SUPP = 'AJD'; + + /** + * U.S. Department of Veterans Affairs Acquisition Regulation (AJN) + * + * A reference indicating a citation from the U.S. Department of Veterans + * Affairs Acquisition Regulation. + */ + case US_DEPA_OF_VETE_AFFA_ACQU_REGU = 'AJN'; + + /** + * U.S. Federal Acquisition Regulation (AJG) + * + * A reference indicating a citation from the U.S. Federal Acquisition + * Regulation. + */ + case US_FEDE_ACQU_REGU = 'AJG'; + + /** + * U.S. Federal Information Resources Management Regulation (AJI) + * + * A reference indicating a citation from U.S. Federal Information Resources + * Management Regulation. + */ + case US_FEDE_INFO_RESO_MANA_REGU = 'AJI'; + + /** + * U.S. General Services Administration Regulation (AJH) + * + * A reference indicating a citation from U.S. General Services Administration + * Regulation. + */ + case US_GENE_SERV_ADMI_REGU = 'AJH'; + + /** + * Ultimate customer's order number (UO) + * + * The originator's order number as forwarded in a sequence of parties + * involved. + */ + case ULTI_CUST_ORDE_NUMB = 'UO'; + + /** + * Ultimate customer's reference number (UC) + * + * The originator's reference number as forwarded in a sequence of parties + * involved. + */ + case ULTI_CUST_REFE_NUMB = 'UC'; + + /** + * Uniform Resource Identifier (URI) + * + * A string of characters used to identify a name of a resource on the + * worldwide web. + */ + case UNIF_RESO_IDEN = 'URI'; + + /** + * Unique claims reference number of the sender (ACT) + * + * A number that identifies the unique claims reference of the sender. + */ + case UNIQ_CLAI_REFE_NUMB_OF_THE_SEND = 'ACT'; + + /** + * Unique consignment reference number (UCN) + * + * [1202] Unique reference identifying a particular consignment of goods. + * Synonym: UCR, UCRN. + */ + case UNIQ_CONS_REFE_NUMB = 'UCN'; + + /** + * Unique goods shipment identifier (AVU) + * + * Unique identifier assigned to a shipment of goods linking trade, tracking + * and transport information. + */ + case UNIQ_GOOD_SHIP_IDEN = 'AVU'; + + /** + * Unique market reference (ADQ) + * + * A number that identifies a unique market. + */ + case UNIQ_MARK_REFE = 'ADQ'; + + /** + * United Nations Dangerous Goods identifier (UN) + * + * [7124] United Nations Dangerous Goods Identifier (UNDG) is the unique + * serial number assigned within the United Nations to substances and articles + * contained in a list of the dangerous goods most commonly carried. + */ + case UNIT_NATI_DANG_GOOD_IDEN = 'UN'; + + /** + * Upper number of range (UAR) + * + * Upper number in a range of numbers. + */ + case UPPE_NUMB_OF_RANG = 'UAR'; + + /** + * US Customs Service (USCS) entry code (AQM) + * + * An entry number assigned by the United States (US) customs service. + */ + case US_CUST_SERV_USCS_ENTR_CODE = 'AQM'; + + /** + * US government agency number (ACB) + * + * A number that identifies a United States Government agency. + */ + case US_GOVE_AGEN_NUMB = 'ACB'; + + /** + * US, Department of Transportation bond surety code (AMQ) + * + * A bond surety code assigned by the United States Department of + * Transportation (DOT). + */ + case US_DEPA_OF_TRAN_BOND_SURE_CODE = 'AMQ'; + + /** + * US, Federal Communications Commission (FCC) import condition number (AMS) + * + * A number known as the United States Federal Communications Commission (FCC) + * import condition number applying to certain types of regulated + * communications equipment. + */ + case US_FEDE_COMM_COMM_FCC_IMPO_COND_NUMB = 'AMS'; + + /** + * US, Food and Drug Administration establishment indicator (AMR) + * + * An establishment indicator assigned by the United States Food and Drug + * Administration. + */ + case US_FOOD_AND_DRUG_ADMI_ESTA_INDI = 'AMR'; + + /** + * VAT registration number (VA) + * + * Unique number assigned by the relevant tax authority to identify a party + * for use in relation to Value Added Tax (VAT). + */ + case VAT_REGI_NUMB = 'VA'; + + /** + * Vehicle Identification Number (VIN) (AKG) + * + * The identification number which uniquely distinguishes one vehicle from + * another through the lifespan of the vehicle. + */ + case VEHI_IDEN_NUMB_VIN = 'AKG'; + + /** + * Vehicle licence number (ABZ) + * + * Number of the licence issued for a vehicle by an agency of government. + */ + case VEHI_LICE_NUMB = 'ABZ'; + + /** + * Vendor contract number (VC) + * + * Number assigned by the vendor to a contract. + */ + case VEND_CONT_NUMB = 'VC'; + + /** + * Vendor ID number (VR) + * + * A number that identifies a vendor's identification. + */ + case VEND_ID_NUMB = 'VR'; + + /** + * Vendor order number suffix (VS) + * + * The suffix for a vendor order number. + */ + case VEND_ORDE_NUMB_SUFF = 'VS'; + + /** + * Vendor product number (VP) + * + * Number assigned by vendor to another manufacturer's product. + */ + case VEND_PROD_NUMB = 'VP'; + + /** + * Vessel identifier (VM) + * + * (8123) Reference identifying a vessel. + */ + case VESS_IDEN = 'VM'; + + /** + * Voucher number (VV) + * + * Reference number identifying a voucher. + */ + case VOUC_NUMB = 'VV'; + + /** + * Voyage number (VON) + * + * (8028) Reference number assigned to the voyage of the vessel. + */ + case VOYA_NUMB = 'VON'; + + /** + * Wage determination number (AJR) + * + * A number specifying a wage determination. + */ + case WAGE_DETE_NUMB = 'AJR'; + + /** + * Warehouse entry number (WE) + * + * Entry number under which imported merchandise was placed in a Customs + * bonded warehouse. + */ + case WARE_ENTR_NUMB = 'WE'; + + /** + * Warehouse receipt number (WR) + * + * A number identifying a warehouse receipt. + */ + case WARE_RECE_NUMB = 'WR'; + + /** + * Warehouse storage location number (WS) + * + * A number identifying a warehouse storage location. + */ + case WARE_STOR_LOCA_NUMB = 'WS'; + + /** + * Waybill number (AAM) + * + * Reference number assigned to a waybill, see: 1001 = 700. + */ + case WAYB_NUMB = 'AAM'; + + /** + * Weight agreement number (WM) + * + * A number identifying a weight agreement. + */ + case WEIG_AGRE_NUMB = 'WM'; + + /** + * Well number (WN) + * + * A number assigned to a shaft sunk into the ground. + */ + case WELL_NUMB = 'WN'; + + /** + * Wool identification number (AHQ) + * + * Shipping Identification Mark (SIM) allocated to a wool consignment by a + * shipping company. + */ + case WOOL_IDEN_NUMB = 'AHQ'; + + /** + * Wool tax reference number (AHR) + * + * Reference or indication of the payment of wool tax. + */ + case WOOL_TAX_REFE_NUMB = 'AHR'; + + /** + * Work breakdown structure (AOL) + * + * A structure reference that identifies the breakdown of work for a project. + */ + case WORK_BREA_STRU = 'AOL'; + + /** + * Work item quantity determination (AWF) + * + * A reference assigned to a work item quantity determination. + */ + case WORK_ITEM_QUAN_DETE = 'AWF'; + + /** + * Work order (AOV) + * + * Reference number for an order to do work. + */ + case WORK_ORDE = 'AOV'; + + /** + * Work package (AOS) + * + * A reference for a detailed package of work. + */ + case WORK_PACK = 'AOS'; + + /** + * Work shift (AOK) + * + * A work shift reference number. + */ + case WORK_SHIF = 'AOK'; + + /** + * Work task charge number (AON) + * + * A reference assigned to a specific work task charge. + */ + case WORK_TASK_CHAR_NUMB = 'AON'; + + /** + * Work team (AOP) + * + * A reference to identify a team performing work. + */ + case WORK_TEAM = 'AOP'; +} diff --git a/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdSchemeIdentifiers.php b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdSchemeIdentifiers.php new file mode 100644 index 000000000..8da8ef625 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdSchemeIdentifiers.php @@ -0,0 +1,1080 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +enum ZugferdSchemeIdentifiers: string +{ + + /** + * System Information et Repertoire des Entreprise et des Etablissements: + * SIRENE + */ + case ISO_6523_0002 = '0002'; + + /** + * Codification Numerique des Etablissments Financiers En Belgique + */ + case ISO_6523_0003 = '0003'; + + /** + * NBS/OSI NETWORK + */ + case ISO_6523_0004 = '0004'; + + /** + * USA FED GOV OSI NETWORK + */ + case ISO_6523_0005 = '0005'; + + /** + * USA DOD OSI NETWORK + */ + case ISO_6523_0006 = '0006'; + + /** + * Organisationsnummer + */ + case ISO_6523_0007 = '0007'; + + /** + * LE NUMERO NATIONAL + */ + case ISO_6523_0008 = '0008'; + + /** + * SIRET-CODE + */ + case ISO_6523_0009 = '0009'; + + /** + * Organizational Identifiers for Structured Names under ISO 9541 Part 2 + */ + case ISO_6523_0010 = '0010'; + + /** + * International Code Designator for the Identification of OSI-based, + * Amateur Radio Organizations, Network Objects and Application Services. + */ + case ISO_6523_0011 = '0011'; + + /** + * European Computer Manufacturers Association: ECMA + */ + case ISO_6523_0012 = '0012'; + + /** + * VSA FTP CODE (FTP = File Transfer Protocol) + */ + case ISO_6523_0013 = '0013'; + + /** + * NIST/OSI Implememts' Workshop + */ + case ISO_6523_0014 = '0014'; + + /** + * Electronic Data Interchange: EDI + */ + case ISO_6523_0015 = '0015'; + + /** + * EWOS Object Identifiers + */ + case ISO_6523_0016 = '0016'; + + /** + * COMMON LANGUAGE + */ + case ISO_6523_0017 = '0017'; + + /** + * SNA/OSI Network + */ + case ISO_6523_0018 = '0018'; + + /** + * Air Transport Industry Services Communications Network + */ + case ISO_6523_0019 = '0019'; + + /** + * European Laboratory for Particle Physics: CERN + */ + case ISO_6523_0020 = '0020'; + + /** + * SOCIETY FOR WORLDWIDE INTERBANK FINANCIAL, TELECOMMUNICATION + * S.W.I.F.T. + */ + case ISO_6523_0021 = '0021'; + + /** + * OSF Distributed Computing Object Identification + */ + case ISO_6523_0022 = '0022'; + + /** + * Nordic University and Research Network: NORDUnet + */ + case ISO_6523_0023 = '0023'; + + /** + * Digital Equipment Corporation: DEC + */ + case ISO_6523_0024 = '0024'; + + /** + * OSI ASIA-OCEANIA WORKSHOP + */ + case ISO_6523_0025 = '0025'; + + /** + * NATO ISO 6523 ICDE coding scheme + */ + case ISO_6523_0026 = '0026'; + + /** + * Aeronautical Telecommunications Network (ATN) + */ + case ISO_6523_0027 = '0027'; + + /** + * International Standard ISO 6523 + */ + case ISO_6523_0028 = '0028'; + + /** + * The All-Union Classifier of Enterprises and Organisations + */ + case ISO_6523_0029 = '0029'; + + /** + * AT&T/OSI Network + */ + case ISO_6523_0030 = '0030'; + + /** + * EDI Partner Identification Code + */ + case ISO_6523_0031 = '0031'; + + /** + * Telecom Australia + */ + case ISO_6523_0032 = '0032'; + + /** + * S G W OSI Internetwork + */ + case ISO_6523_0033 = '0033'; + + /** + * Reuter Open Address Standard + */ + case ISO_6523_0034 = '0034'; + + /** + * ISO 6523 - ICD + */ + case ISO_6523_0035 = '0035'; + + /** + * TeleTrust Object Identifiers + */ + case ISO_6523_0036 = '0036'; + + /** + * LY-tunnus + */ + case ISO_6523_0037 = '0037'; + + /** + * The Australian GOSIP Network + */ + case ISO_6523_0038 = '0038'; + + /** + * The OZ DOD OSI Network + */ + case ISO_6523_0039 = '0039'; + + /** + * Unilever Group Companies + */ + case ISO_6523_0040 = '0040'; + + /** + * Citicorp Global Information Network + */ + case ISO_6523_0041 = '0041'; + + /** + * DBP Telekom Object Identifiers + */ + case ISO_6523_0042 = '0042'; + + /** + * HydroNETT + */ + case ISO_6523_0043 = '0043'; + + /** + * Thai Industrial Standards Institute (TISI) + */ + case ISO_6523_0044 = '0044'; + + /** + * ICI Company Identification System + */ + case ISO_6523_0045 = '0045'; + + /** + * FUNLOC + */ + case ISO_6523_0046 = '0046'; + + /** + * BULL ODI/DSA/UNIX Network + */ + case ISO_6523_0047 = '0047'; + + /** + * OSINZ + */ + case ISO_6523_0048 = '0048'; + + /** + * Auckland Area Health + */ + case ISO_6523_0049 = '0049'; + + /** + * Firmenich + */ + case ISO_6523_0050 = '0050'; + + /** + * AGFA-DIS + */ + case ISO_6523_0051 = '0051'; + + /** + * Society of Motion Picture and Television Engineers (SMPTE) + */ + case ISO_6523_0052 = '0052'; + + /** + * Migros_Network M_NETOPZ + */ + case ISO_6523_0053 = '0053'; + + /** + * ISO6523 - ICDPCR + */ + case ISO_6523_0054 = '0054'; + + /** + * Energy Net + */ + case ISO_6523_0055 = '0055'; + + /** + * Nokia Object Identifiers (NOI) + */ + case ISO_6523_0056 = '0056'; + + /** + * Saint Gobain + */ + case ISO_6523_0057 = '0057'; + + /** + * Siemens Corporate Network + */ + case ISO_6523_0058 = '0058'; + + /** + * DANZNET + */ + case ISO_6523_0059 = '0059'; + + /** + * Data Universal Numbering System (D-U-N-S Number) + */ + case ISO_6523_0060 = '0060'; + + /** + * SOFFEX OSI + */ + case ISO_6523_0061 = '0061'; + + /** + * KPN OVN + */ + case ISO_6523_0062 = '0062'; + + /** + * ascomOSINet + */ + case ISO_6523_0063 = '0063'; + + /** + * UTC: Uniforme Transport Code + */ + case ISO_6523_0064 = '0064'; + + /** + * SOLVAY OSI CODING + */ + case ISO_6523_0065 = '0065'; + + /** + * Roche Corporate Network + */ + case ISO_6523_0066 = '0066'; + + /** + * ZellwegerOSINet + */ + case ISO_6523_0067 = '0067'; + + /** + * Intel Corporation OSI + */ + case ISO_6523_0068 = '0068'; + + /** + * SITA Object Identifier Tree + */ + case ISO_6523_0069 = '0069'; + + /** + * DaimlerChrysler Corporate Network + */ + case ISO_6523_0070 = '0070'; + + /** + * LEGO /OSI NETWORK + */ + case ISO_6523_0071 = '0071'; + + /** + * NAVISTAR/OSI Network + */ + case ISO_6523_0072 = '0072'; + + /** + * ICD Formatted ATM address + */ + case ISO_6523_0073 = '0073'; + + /** + * ARINC + */ + case ISO_6523_0074 = '0074'; + + /** + * Alcanet/Alcatel-Alsthom Corporate Network + */ + case ISO_6523_0075 = '0075'; + + /** + * Sistema Italiano di Identificazione di ogetti gestito da UNINFO + */ + case ISO_6523_0076 = '0076'; + + /** + * Sistema Italiano di Indirizzamento di Reti OSI Gestito da UNINFO + */ + case ISO_6523_0077 = '0077'; + + /** + * Mitel terminal or switching equipment + */ + case ISO_6523_0078 = '0078'; + + /** + * ATM Forum + */ + case ISO_6523_0079 = '0079'; + + /** + * UK National Health Service Scheme, (EDIRA compliant) + */ + case ISO_6523_0080 = '0080'; + + /** + * International NSAP + */ + case ISO_6523_0081 = '0081'; + + /** + * Norwegian Telecommunications Authority's, NTA'S, EDI, identifier + * scheme (EDIRA compliant) + */ + case ISO_6523_0082 = '0082'; + + /** + * Advanced Telecommunications Modules Limited, Corporate Network + */ + case ISO_6523_0083 = '0083'; + + /** + * Athens Chamber of Commerce & Industry Scheme (EDIRA compliant) + */ + case ISO_6523_0084 = '0084'; + + /** + * Swiss Chambers of Commerce Scheme (EDIRA) compliant + */ + case ISO_6523_0085 = '0085'; + + /** + * United States Council for International Business (USCIB) Scheme, + * (EDIRA compliant) + */ + case ISO_6523_0086 = '0086'; + + /** + * National Federation of Chambers of Commerce & Industry of Belgium, + * Scheme (EDIRA compliant) + */ + case ISO_6523_0087 = '0087'; + + /** + * EAN Location Code + */ + case ISO_6523_0088 = '0088'; + + /** + * The Association of British Chambers of Commerce Ltd. Scheme, (EDIRA + * compliant) + */ + case ISO_6523_0089 = '0089'; + + /** + * Internet IP addressing - ISO 6523 ICD encoding + */ + case ISO_6523_0090 = '0090'; + + /** + * Cisco Sysytems / OSI Network + */ + case ISO_6523_0091 = '0091'; + + /** + * Revenue Canada Business Number Registration (EDIRA compliant) + */ + case ISO_6523_0093 = '0093'; + + /** + * DEUTSCHER INDUSTRIE- UND HANDELSTAG (DIHT) Scheme (EDIRA compliant) + */ + case ISO_6523_0094 = '0094'; + + /** + * Hewlett - Packard Company Internal AM Network + */ + case ISO_6523_0095 = '0095'; + + /** + * DANISH CHAMBER OF COMMERCE Scheme (EDIRA compliant) + */ + case ISO_6523_0096 = '0096'; + + /** + * FTI - Ediforum Italia, (EDIRA compliant) + */ + case ISO_6523_0097 = '0097'; + + /** + * CHAMBER OF COMMERCE TEL AVIV-JAFFA Scheme (EDIRA compliant) + */ + case ISO_6523_0098 = '0098'; + + /** + * Siemens Supervisory Systems Network + */ + case ISO_6523_0099 = '0099'; + + /** + * PNG_ICD Scheme + */ + case ISO_6523_0100 = '0100'; + + /** + * South African Code Allocation + */ + case ISO_6523_0101 = '0101'; + + /** + * HEAG + */ + case ISO_6523_0102 = '0102'; + + /** + * BT - ICD Coding System + */ + case ISO_6523_0104 = '0104'; + + /** + * Portuguese Chamber of Commerce and Industry Scheme (EDIRA compliant) + */ + case 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) + */ + case ISO_6523_0106 = '0106'; + + /** + * Association of Swedish Chambers of Commerce and Industry Scheme (EDIRA + * compliant) + */ + case ISO_6523_0107 = '0107'; + + /** + * Australian Chambers of Commerce and Industry Scheme (EDIRA compliant) + */ + case ISO_6523_0108 = '0108'; + + /** + * BellSouth ICD AESA (ATM End System Address) + */ + case ISO_6523_0109 = '0109'; + + /** + * Bell Atlantic + */ + case ISO_6523_0110 = '0110'; + + /** + * Object Identifiers + */ + case ISO_6523_0111 = '0111'; + + /** + * ISO register for Standards producing Organizations + */ + case ISO_6523_0112 = '0112'; + + /** + * OriginNet + */ + case ISO_6523_0113 = '0113'; + + /** + * Check Point Software Technologies + */ + case ISO_6523_0114 = '0114'; + + /** + * Pacific Bell Data Communications Network + */ + case ISO_6523_0115 = '0115'; + + /** + * PSS Object Identifiers + */ + case ISO_6523_0116 = '0116'; + + /** + * STENTOR-ICD CODING SYSTEM + */ + case ISO_6523_0117 = '0117'; + + /** + * ATM-Network ZN'96 + */ + case ISO_6523_0118 = '0118'; + + /** + * MCI / OSI Network + */ + case ISO_6523_0119 = '0119'; + + /** + * Advantis + */ + case ISO_6523_0120 = '0120'; + + /** + * Affable Software Data Interchange Codes + */ + case ISO_6523_0121 = '0121'; + + /** + * BB-DATA GmbH + */ + case ISO_6523_0122 = '0122'; + + /** + * BASF Company ATM-Network + */ + case ISO_6523_0123 = '0123'; + + /** + * IOTA Identifiers for Organizations for Telecommunications Addressing + * using the ICD system format defined in ISO/IEC 8348 + */ + case ISO_6523_0124 = '0124'; + + /** + * Henkel Corporate Network (H-Net) + */ + case ISO_6523_0125 = '0125'; + + /** + * GTE/OSI Network + */ + case ISO_6523_0126 = '0126'; + + /** + * Dresdner Bank Corporate Network + */ + case ISO_6523_0127 = '0127'; + + /** + * BCNR (Swiss Clearing Bank Number) + */ + case ISO_6523_0128 = '0128'; + + /** + * BPI (Swiss Business Partner Identification) code + */ + case ISO_6523_0129 = '0129'; + + /** + * Directorates of the European Commission + */ + case ISO_6523_0130 = '0130'; + + /** + * Code for the Identification of National Organizations + */ + case ISO_6523_0131 = '0131'; + + /** + * Certicom Object Identifiers + */ + case ISO_6523_0132 = '0132'; + + /** + * TC68 OID + */ + case ISO_6523_0133 = '0133'; + + /** + * Infonet Services Corporation + */ + case ISO_6523_0134 = '0134'; + + /** + * SIA Object Identifiers + */ + case ISO_6523_0135 = '0135'; + + /** + * Cable & Wireless Global ATM End-System Address Plan + */ + case ISO_6523_0136 = '0136'; + + /** + * Global AESA scheme + */ + case ISO_6523_0137 = '0137'; + + /** + * France Telecom ATM End System Address Plan + */ + case ISO_6523_0138 = '0138'; + + /** + * Savvis Communications AESA:. + */ + case ISO_6523_0139 = '0139'; + + /** + * Toshiba Organizations, Partners, And Suppliers' (TOPAS) Code + */ + case ISO_6523_0140 = '0140'; + + /** + * NATO Commercial and Government Entity system + */ + case ISO_6523_0141 = '0141'; + + /** + * SECETI Object Identifiers + */ + case ISO_6523_0142 = '0142'; + + /** + * EINESTEINet AG + */ + case ISO_6523_0143 = '0143'; + + /** + * DoDAAC (Department of Defense Activity Address Code) + */ + case ISO_6523_0144 = '0144'; + + /** + * DGCP (Direction Générale de la Comptabilité Publique)administrative + * accounting identification scheme + */ + case ISO_6523_0145 = '0145'; + + /** + * DGI (Direction Générale des Impots) code + */ + case ISO_6523_0146 = '0146'; + + /** + * Standard Company Code + */ + case ISO_6523_0147 = '0147'; + + /** + * ITU (International Telecommunications Union)Data Network + * Identification Codes (DNIC) + */ + case ISO_6523_0148 = '0148'; + + /** + * Global Business Identifier + */ + case ISO_6523_0149 = '0149'; + + /** + * Madge Networks Ltd- ICD ATM Addressing Scheme + */ + case ISO_6523_0150 = '0150'; + + /** + * Australian Business Number (ABN) Scheme + */ + case ISO_6523_0151 = '0151'; + + /** + * Edira Scheme Identifier Code + */ + case ISO_6523_0152 = '0152'; + + /** + * Concert Global Network Services ICD AESA + */ + case ISO_6523_0153 = '0153'; + + /** + * Identification number of economic subjects: (ICO) + */ + case ISO_6523_0154 = '0154'; + + /** + * Global Crossing AESA (ATM End System Address) + */ + case ISO_6523_0155 = '0155'; + + /** + * AUNA + */ + case ISO_6523_0156 = '0156'; + + /** + * ATM interconnection with the Dutch KPN Telecom + */ + case ISO_6523_0157 = '0157'; + + /** + * Identification number of economic subject (ICO) Act on State + * Statistics of 29 November 2'001, § 27 + */ + case ISO_6523_0158 = '0158'; + + /** + * ACTALIS Object Identifiers + */ + case ISO_6523_0159 = '0159'; + + /** + * GTIN - Global Trade Item Number + */ + case ISO_6523_0160 = '0160'; + + /** + * ECCMA Open Technical Directory + */ + case ISO_6523_0161 = '0161'; + + /** + * CEN/ISSS Object Identifier Scheme + */ + case ISO_6523_0162 = '0162'; + + /** + * US-EPA Facility Identifier + */ + case ISO_6523_0163 = '0163'; + + /** + * TELUS Corporation + */ + case ISO_6523_0164 = '0164'; + + /** + * FIEIE Object identifiers + */ + case ISO_6523_0165 = '0165'; + + /** + * Swissguide Identifier Scheme + */ + case ISO_6523_0166 = '0166'; + + /** + * Priority Telecom ATM End System Address Plan + */ + case ISO_6523_0167 = '0167'; + + /** + * Vodafone Ireland OSI Addressing + */ + case ISO_6523_0168 = '0168'; + + /** + * Swiss Federal Business Identification Number. Central Business names + * Index (zefix) Identification Number + */ + case ISO_6523_0169 = '0169'; + + /** + * Teikoku Company Code + */ + case ISO_6523_0170 = '0170'; + + /** + * Luxembourg CP & CPS (Certification Policy and Certification Practice + * Statement) Index + */ + case ISO_6523_0171 = '0171'; + + /** + * Project Group “Lists of Properties†(PROLIST®) + */ + case ISO_6523_0172 = '0172'; + + /** + * eCI@ss + */ + case ISO_6523_0173 = '0173'; + + /** + * StepNexus + */ + case ISO_6523_0174 = '0174'; + + /** + * Siemens AG + */ + case ISO_6523_0175 = '0175'; + + /** + * Paradine GmbH + */ + case ISO_6523_0176 = '0176'; + + /** + * Odette International Limited + */ + case ISO_6523_0177 = '0177'; + + /** + * Route1 MobiNET + */ + case ISO_6523_0178 = '0178'; + + /** + * Penango Object Identifiers + */ + case ISO_6523_0179 = '0179'; + + /** + * Lithuanian military PKI + */ + case ISO_6523_0180 = '0180'; + + /** + * Numéro d'identification suisse des enterprises (IDE), Swiss Unique + * Business Identification Number (UIDB) + */ + case ISO_6523_0183 = '0183'; + + /** + * DIGSTORG + */ + case ISO_6523_0184 = '0184'; + + /** + * Perceval Object Code + */ + case ISO_6523_0185 = '0185'; + + /** + * TrustPoint Object Identifiers + */ + case ISO_6523_0186 = '0186'; + + /** + * Amazon Unique Identification Scheme + */ + case ISO_6523_0187 = '0187'; + + /** + * Corporate Number of The Social Security and Tax Number System + */ + case ISO_6523_0188 = '0188'; + + /** + * European Business Identifier (EBID) + */ + case ISO_6523_0189 = '0189'; + + /** + * Organisatie Indentificatie Nummer (OIN) + */ + case ISO_6523_0190 = '0190'; + + /** + * Company Code (Estonia) + */ + case ISO_6523_0191 = '0191'; + + /** + * Organisasjonsnummer + */ + case ISO_6523_0192 = '0192'; + + /** + * UBL.BE Party Identifier + */ + case ISO_6523_0193 = '0193'; + + /** + * KOIOS Open Technical Dictionary + */ + case ISO_6523_0194 = '0194'; + + /** + * Singapore Nationwide E-lnvoice Framework + */ + case ISO_6523_0195 = '0195'; + + /** + * Icelandic identifier - Ãslensk kennitala + */ + case ISO_6523_0196 = '0196'; + + /** + * Name not known + */ + case ISO_6523_0197 = '0197'; + + /** + * ERSTORG + */ + case ISO_6523_0198 = '0198'; + + /** + * Legal Entity Identifier (LEI) + */ + case ISO_6523_0199 = '0199'; + + /** + * Legal entity code (Lithuania) + */ + case ISO_6523_0200 = '0200'; + + /** + * Codice Univoco Unità Organizzativa iPA + */ + case ISO_6523_0201 = '0201'; + + /** + * Indirizzo di Posta Elettronica Certificata + */ + case ISO_6523_0202 = '0202'; + + /** + * eDelivery Network Participant identifier + */ + case ISO_6523_0203 = '0203'; + + /** + * Leitweg-ID + */ + case ISO_6523_0204 = '0204'; + + /** + * CODDEST + */ + case ISO_6523_0205 = '0205'; + + /** + * Registre du Commerce et de l’Industrie : RCI + */ + case ISO_6523_0206 = '0206'; + + /** + * PiLog Ontology Codification Identifier (POCI) + */ + case ISO_6523_0207 = '0207'; + + /** + * Numero d'entreprise / ondernemingsnummer / Unternehmensnummer + */ + case ISO_6523_0208 = '0208'; + + /** + * GS1 identification keys + */ + case ISO_6523_0209 = '0209'; + + /** + * CODICE FISCALE + */ + case ISO_6523_0210 = '0210'; + + /** + * PARTITA IVA + */ + case ISO_6523_0211 = '0211'; + + /** + * Finnish Organization Identifier + */ + case ISO_6523_0212 = '0212'; + + /** + * Finnish Organization Value Add Tax Identifier + */ + case ISO_6523_0213 = '0213'; +} diff --git a/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdTextSubjectCodeQualifiers.php b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdTextSubjectCodeQualifiers.php new file mode 100644 index 000000000..44fbcec8d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdTextSubjectCodeQualifiers.php @@ -0,0 +1,1938 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +enum ZugferdTextSubjectCodeQualifiers: string +{ + + /** + * Goods item description + */ + case UNTDID_4451_AAA = 'AAA'; + + /** + * Payment term + */ + case UNTDID_4451_AAB = 'AAB'; + + /** + * Dangerous goods additional information + */ + case UNTDID_4451_AAC = 'AAC'; + + /** + * Dangerous goods technical name + */ + case UNTDID_4451_AAD = 'AAD'; + + /** + * Acknowledgement description + */ + case UNTDID_4451_AAE = 'AAE'; + + /** + * Rate additional information + */ + case UNTDID_4451_AAF = 'AAF'; + + /** + * Party instructions + */ + case UNTDID_4451_AAG = 'AAG'; + + /** + * General information + */ + case UNTDID_4451_AAI = 'AAI'; + + /** + * Additional conditions of sale/purchase + */ + case UNTDID_4451_AAJ = 'AAJ'; + + /** + * Price conditions + */ + case UNTDID_4451_AAK = 'AAK'; + + /** + * Goods dimensions in characters + */ + case UNTDID_4451_AAL = 'AAL'; + + /** + * Equipment re-usage restrictions + */ + case UNTDID_4451_AAM = 'AAM'; + + /** + * Handling restriction + */ + case UNTDID_4451_AAN = 'AAN'; + + /** + * Error description (free text) + */ + case UNTDID_4451_AAO = 'AAO'; + + /** + * Response (free text) + */ + case UNTDID_4451_AAP = 'AAP'; + + /** + * Package content's description + */ + case UNTDID_4451_AAQ = 'AAQ'; + + /** + * Terms of delivery + */ + case UNTDID_4451_AAR = 'AAR'; + + /** + * Bill of lading remarks + */ + case UNTDID_4451_AAS = 'AAS'; + + /** + * Mode of settlement information + */ + case UNTDID_4451_AAT = 'AAT'; + + /** + * Consignment invoice information + */ + case UNTDID_4451_AAU = 'AAU'; + + /** + * Clearance invoice information + */ + case UNTDID_4451_AAV = 'AAV'; + + /** + * Letter of credit information + */ + case UNTDID_4451_AAW = 'AAW'; + + /** + * License information + */ + case UNTDID_4451_AAX = 'AAX'; + + /** + * Certification statements + */ + case UNTDID_4451_AAY = 'AAY'; + + /** + * Additional export information + */ + case UNTDID_4451_AAZ = 'AAZ'; + + /** + * Tariff statements + */ + case UNTDID_4451_ABA = 'ABA'; + + /** + * Medical history + */ + case UNTDID_4451_ABB = 'ABB'; + + /** + * Conditions of sale or purchase + */ + case UNTDID_4451_ABC = 'ABC'; + + /** + * Contract document type + */ + case UNTDID_4451_ABD = 'ABD'; + + /** + * Additional terms and/or conditions (documentary credit) + */ + case UNTDID_4451_ABE = 'ABE'; + + /** + * Instructions or information about standby documentary + */ + case UNTDID_4451_ABF = 'ABF'; + + /** + * Instructions or information about partial shipment(s) + */ + case UNTDID_4451_ABG = 'ABG'; + + /** + * Instructions or information about transhipment(s) + */ + case UNTDID_4451_ABH = 'ABH'; + + /** + * Additional handling instructions documentary credit + */ + case UNTDID_4451_ABI = 'ABI'; + + /** + * Domestic routing information + */ + case UNTDID_4451_ABJ = 'ABJ'; + + /** + * Chargeable category of equipment + */ + case UNTDID_4451_ABK = 'ABK'; + + /** + * Government information + */ + case UNTDID_4451_ABL = 'ABL'; + + /** + * Onward routing information + */ + case UNTDID_4451_ABM = 'ABM'; + + /** + * Accounting information + */ + case UNTDID_4451_ABN = 'ABN'; + + /** + * Discrepancy information + */ + case UNTDID_4451_ABO = 'ABO'; + + /** + * Confirmation instructions + */ + case UNTDID_4451_ABP = 'ABP'; + + /** + * Method of issuance + */ + case UNTDID_4451_ABQ = 'ABQ'; + + /** + * Documents delivery instructions + */ + case UNTDID_4451_ABR = 'ABR'; + + /** + * Additional conditions + */ + case UNTDID_4451_ABS = 'ABS'; + + /** + * Information/instructions about additional amounts covered + */ + case UNTDID_4451_ABT = 'ABT'; + + /** + * Deferred payment termed additional + */ + case UNTDID_4451_ABU = 'ABU'; + + /** + * Acceptance terms additional + */ + case UNTDID_4451_ABV = 'ABV'; + + /** + * Negotiation terms additional + */ + case UNTDID_4451_ABW = 'ABW'; + + /** + * Document name and documentary requirements + */ + case UNTDID_4451_ABX = 'ABX'; + + /** + * Instructions/information about revolving documentary credit + */ + case UNTDID_4451_ABZ = 'ABZ'; + + /** + * Documentary requirements + */ + case UNTDID_4451_ACA = 'ACA'; + + /** + * Additional information + */ + case UNTDID_4451_ACB = 'ACB'; + + /** + * Factor assignment clause + */ + case UNTDID_4451_ACC = 'ACC'; + + /** + * Reason + */ + case UNTDID_4451_ACD = 'ACD'; + + /** + * Dispute + */ + case UNTDID_4451_ACE = 'ACE'; + + /** + * Additional attribute information + */ + case UNTDID_4451_ACF = 'ACF'; + + /** + * Absence declaration + */ + case UNTDID_4451_ACG = 'ACG'; + + /** + * Aggregation statement + */ + case UNTDID_4451_ACH = 'ACH'; + + /** + * Compilation statement + */ + case UNTDID_4451_ACI = 'ACI'; + + /** + * Definitional exception + */ + case UNTDID_4451_ACJ = 'ACJ'; + + /** + * Privacy statement + */ + case UNTDID_4451_ACK = 'ACK'; + + /** + * Quality statement + */ + case UNTDID_4451_ACL = 'ACL'; + + /** + * Statistical description + */ + case UNTDID_4451_ACM = 'ACM'; + + /** + * Statistical definition + */ + case UNTDID_4451_ACN = 'ACN'; + + /** + * Statistical name + */ + case UNTDID_4451_ACO = 'ACO'; + + /** + * Statistical title + */ + case UNTDID_4451_ACP = 'ACP'; + + /** + * Off-dimension information + */ + case UNTDID_4451_ACQ = 'ACQ'; + + /** + * Unexpected stops information + */ + case UNTDID_4451_ACR = 'ACR'; + + /** + * Principles + */ + case UNTDID_4451_ACS = 'ACS'; + + /** + * Terms and definition + */ + case UNTDID_4451_ACT = 'ACT'; + + /** + * Segment name + */ + case UNTDID_4451_ACU = 'ACU'; + + /** + * Simple data element name + */ + case UNTDID_4451_ACV = 'ACV'; + + /** + * Scope + */ + case UNTDID_4451_ACW = 'ACW'; + + /** + * Message type name + */ + case UNTDID_4451_ACX = 'ACX'; + + /** + * Introduction + */ + case UNTDID_4451_ACY = 'ACY'; + + /** + * Glossary + */ + case UNTDID_4451_ACZ = 'ACZ'; + + /** + * Functional definition + */ + case UNTDID_4451_ADA = 'ADA'; + + /** + * Examples + */ + case UNTDID_4451_ADB = 'ADB'; + + /** + * Cover page + */ + case UNTDID_4451_ADC = 'ADC'; + + /** + * Dependency (syntax) notes + */ + case UNTDID_4451_ADD = 'ADD'; + + /** + * Code value name + */ + case UNTDID_4451_ADE = 'ADE'; + + /** + * Code list name + */ + case UNTDID_4451_ADF = 'ADF'; + + /** + * Clarification of usage + */ + case UNTDID_4451_ADG = 'ADG'; + + /** + * Composite data element name + */ + case UNTDID_4451_ADH = 'ADH'; + + /** + * Field of application + */ + case UNTDID_4451_ADI = 'ADI'; + + /** + * Type of assets and liabilities + */ + case UNTDID_4451_ADJ = 'ADJ'; + + /** + * Promotion information + */ + case UNTDID_4451_ADK = 'ADK'; + + /** + * Meter condition + */ + case UNTDID_4451_ADL = 'ADL'; + + /** + * Meter reading information + */ + case UNTDID_4451_ADM = 'ADM'; + + /** + * Type of transaction reason + */ + case UNTDID_4451_ADN = 'ADN'; + + /** + * Type of survey question + */ + case UNTDID_4451_ADO = 'ADO'; + + /** + * Carrier's agent counter information + */ + case UNTDID_4451_ADP = 'ADP'; + + /** + * Description of work item on equipment + */ + case UNTDID_4451_ADQ = 'ADQ'; + + /** + * Message definition + */ + case UNTDID_4451_ADR = 'ADR'; + + /** + * Booked item information + */ + case UNTDID_4451_ADS = 'ADS'; + + /** + * Source of document + */ + case UNTDID_4451_ADT = 'ADT'; + + /** + * Note + */ + case UNTDID_4451_ADU = 'ADU'; + + /** + * Fixed part of segment clarification text + */ + case UNTDID_4451_ADV = 'ADV'; + + /** + * Characteristics of goods + */ + case UNTDID_4451_ADW = 'ADW'; + + /** + * Additional discharge instructions + */ + case UNTDID_4451_ADX = 'ADX'; + + /** + * Container stripping instructions + */ + case UNTDID_4451_ADY = 'ADY'; + + /** + * CSC (Container Safety Convention) plate information + */ + case UNTDID_4451_ADZ = 'ADZ'; + + /** + * Cargo remarks + */ + case UNTDID_4451_AEA = 'AEA'; + + /** + * Temperature control instructions + */ + case UNTDID_4451_AEB = 'AEB'; + + /** + * Text refers to expected data + */ + case UNTDID_4451_AEC = 'AEC'; + + /** + * Text refers to received data + */ + case UNTDID_4451_AED = 'AED'; + + /** + * Section clarification text + */ + case UNTDID_4451_AEE = 'AEE'; + + /** + * Information to the beneficiary + */ + case UNTDID_4451_AEF = 'AEF'; + + /** + * Information to the applicant + */ + case UNTDID_4451_AEG = 'AEG'; + + /** + * Instructions to the beneficiary + */ + case UNTDID_4451_AEH = 'AEH'; + + /** + * Instructions to the applicant + */ + case UNTDID_4451_AEI = 'AEI'; + + /** + * Controlled atmosphere + */ + case UNTDID_4451_AEJ = 'AEJ'; + + /** + * Take off annotation + */ + case UNTDID_4451_AEK = 'AEK'; + + /** + * Price variation narrative + */ + case UNTDID_4451_AEL = 'AEL'; + + /** + * Documentary credit amendment instructions + */ + case UNTDID_4451_AEM = 'AEM'; + + /** + * Standard method narrative + */ + case UNTDID_4451_AEN = 'AEN'; + + /** + * Project narrative + */ + case UNTDID_4451_AEO = 'AEO'; + + /** + * Radioactive goods, additional information + */ + case UNTDID_4451_AEP = 'AEP'; + + /** + * Bank-to-bank information + */ + case UNTDID_4451_AEQ = 'AEQ'; + + /** + * Reimbursement instructions + */ + case UNTDID_4451_AER = 'AER'; + + /** + * Reason for amending a message + */ + case UNTDID_4451_AES = 'AES'; + + /** + * Instructions to the paying and/or accepting and/or + */ + case UNTDID_4451_AET = 'AET'; + + /** + * Interest instructions + */ + case UNTDID_4451_AEU = 'AEU'; + + /** + * Agent commission + */ + case UNTDID_4451_AEV = 'AEV'; + + /** + * Remitting bank instructions + */ + case UNTDID_4451_AEW = 'AEW'; + + /** + * Instructions to the collecting bank + */ + case UNTDID_4451_AEX = 'AEX'; + + /** + * Collection amount instructions + */ + case UNTDID_4451_AEY = 'AEY'; + + /** + * Internal auditing information + */ + case UNTDID_4451_AEZ = 'AEZ'; + + /** + * Constraint + */ + case UNTDID_4451_AFA = 'AFA'; + + /** + * Comment + */ + case UNTDID_4451_AFB = 'AFB'; + + /** + * Semantic note + */ + case UNTDID_4451_AFC = 'AFC'; + + /** + * Help text + */ + case UNTDID_4451_AFD = 'AFD'; + + /** + * Legend + */ + case UNTDID_4451_AFE = 'AFE'; + + /** + * Batch code structure + */ + case UNTDID_4451_AFF = 'AFF'; + + /** + * Product application + */ + case UNTDID_4451_AFG = 'AFG'; + + /** + * Customer complaint + */ + case UNTDID_4451_AFH = 'AFH'; + + /** + * Probable cause of fault + */ + case UNTDID_4451_AFI = 'AFI'; + + /** + * Defect description + */ + case UNTDID_4451_AFJ = 'AFJ'; + + /** + * Repair description + */ + case UNTDID_4451_AFK = 'AFK'; + + /** + * Review comments + */ + case UNTDID_4451_AFL = 'AFL'; + + /** + * Title + */ + case UNTDID_4451_AFM = 'AFM'; + + /** + * Description of amount + */ + case UNTDID_4451_AFN = 'AFN'; + + /** + * Responsibilities + */ + case UNTDID_4451_AFO = 'AFO'; + + /** + * Supplier + */ + case UNTDID_4451_AFP = 'AFP'; + + /** + * Purchase region + */ + case UNTDID_4451_AFQ = 'AFQ'; + + /** + * Affiliation + */ + case UNTDID_4451_AFR = 'AFR'; + + /** + * Borrower + */ + case UNTDID_4451_AFS = 'AFS'; + + /** + * Line of business + */ + case UNTDID_4451_AFT = 'AFT'; + + /** + * Financial institution + */ + case UNTDID_4451_AFU = 'AFU'; + + /** + * Business founder + */ + case UNTDID_4451_AFV = 'AFV'; + + /** + * Business history + */ + case UNTDID_4451_AFW = 'AFW'; + + /** + * Banking arrangements + */ + case UNTDID_4451_AFX = 'AFX'; + + /** + * Business origin + */ + case UNTDID_4451_AFY = 'AFY'; + + /** + * Brand names' description + */ + case UNTDID_4451_AFZ = 'AFZ'; + + /** + * Business financing details + */ + case UNTDID_4451_AGA = 'AGA'; + + /** + * Competition + */ + case UNTDID_4451_AGB = 'AGB'; + + /** + * Construction process details + */ + case UNTDID_4451_AGC = 'AGC'; + + /** + * Construction specialty + */ + case UNTDID_4451_AGD = 'AGD'; + + /** + * Contract information + */ + case UNTDID_4451_AGE = 'AGE'; + + /** + * Corporate filing + */ + case UNTDID_4451_AGF = 'AGF'; + + /** + * Customer information + */ + case UNTDID_4451_AGG = 'AGG'; + + /** + * Copyright notice + */ + case UNTDID_4451_AGH = 'AGH'; + + /** + * Contingent debt + */ + case UNTDID_4451_AGI = 'AGI'; + + /** + * Conviction details + */ + case UNTDID_4451_AGJ = 'AGJ'; + + /** + * Equipment + */ + case UNTDID_4451_AGK = 'AGK'; + + /** + * Workforce description + */ + case UNTDID_4451_AGL = 'AGL'; + + /** + * Exemption + */ + case UNTDID_4451_AGM = 'AGM'; + + /** + * Future plans + */ + case UNTDID_4451_AGN = 'AGN'; + + /** + * Interviewee conversation information + */ + case UNTDID_4451_AGO = 'AGO'; + + /** + * Intangible asset + */ + case UNTDID_4451_AGP = 'AGP'; + + /** + * Inventory + */ + case UNTDID_4451_AGQ = 'AGQ'; + + /** + * Investment + */ + case UNTDID_4451_AGR = 'AGR'; + + /** + * Intercompany relations information + */ + case UNTDID_4451_AGS = 'AGS'; + + /** + * Joint venture + */ + case UNTDID_4451_AGT = 'AGT'; + + /** + * Loan + */ + case UNTDID_4451_AGU = 'AGU'; + + /** + * Long term debt + */ + case UNTDID_4451_AGV = 'AGV'; + + /** + * Location + */ + case UNTDID_4451_AGW = 'AGW'; + + /** + * Current legal structure + */ + case UNTDID_4451_AGX = 'AGX'; + + /** + * Marital contract + */ + case UNTDID_4451_AGY = 'AGY'; + + /** + * Marketing activities + */ + case UNTDID_4451_AGZ = 'AGZ'; + + /** + * Merger + */ + case UNTDID_4451_AHA = 'AHA'; + + /** + * Marketable securities + */ + case UNTDID_4451_AHB = 'AHB'; + + /** + * Business debt + */ + case UNTDID_4451_AHC = 'AHC'; + + /** + * Original legal structure + */ + case UNTDID_4451_AHD = 'AHD'; + + /** + * Employee sharing arrangements + */ + case UNTDID_4451_AHE = 'AHE'; + + /** + * Organization details + */ + case UNTDID_4451_AHF = 'AHF'; + + /** + * Public record details + */ + case UNTDID_4451_AHG = 'AHG'; + + /** + * Price range + */ + case UNTDID_4451_AHH = 'AHH'; + + /** + * Qualifications + */ + case UNTDID_4451_AHI = 'AHI'; + + /** + * Registered activity + */ + case UNTDID_4451_AHJ = 'AHJ'; + + /** + * Criminal sentence + */ + case UNTDID_4451_AHK = 'AHK'; + + /** + * Sales method + */ + case UNTDID_4451_AHL = 'AHL'; + + /** + * Educational institution information + */ + case UNTDID_4451_AHM = 'AHM'; + + /** + * Status details + */ + case UNTDID_4451_AHN = 'AHN'; + + /** + * Sales + */ + case UNTDID_4451_AHO = 'AHO'; + + /** + * Spouse information + */ + case UNTDID_4451_AHP = 'AHP'; + + /** + * Educational degree information + */ + case UNTDID_4451_AHQ = 'AHQ'; + + /** + * Shareholding information + */ + case UNTDID_4451_AHR = 'AHR'; + + /** + * Sales territory + */ + case UNTDID_4451_AHS = 'AHS'; + + /** + * Accountant's comments + */ + case UNTDID_4451_AHT = 'AHT'; + + /** + * Exemption law location + */ + case UNTDID_4451_AHU = 'AHU'; + + /** + * Share classifications + */ + case UNTDID_4451_AHV = 'AHV'; + + /** + * Forecast + */ + case UNTDID_4451_AHW = 'AHW'; + + /** + * Event location + */ + case UNTDID_4451_AHX = 'AHX'; + + /** + * Facility occupancy + */ + case UNTDID_4451_AHY = 'AHY'; + + /** + * Import and export details + */ + case UNTDID_4451_AHZ = 'AHZ'; + + /** + * Additional facility information + */ + case UNTDID_4451_AIA = 'AIA'; + + /** + * Inventory value + */ + case UNTDID_4451_AIB = 'AIB'; + + /** + * Education + */ + case UNTDID_4451_AIC = 'AIC'; + + /** + * Event + */ + case UNTDID_4451_AID = 'AID'; + + /** + * Agent + */ + case UNTDID_4451_AIE = 'AIE'; + + /** + * Domestically agreed financial statement details + */ + case UNTDID_4451_AIF = 'AIF'; + + /** + * Other current asset description + */ + case UNTDID_4451_AIG = 'AIG'; + + /** + * Other current liability description + */ + case UNTDID_4451_AIH = 'AIH'; + + /** + * Former business activity + */ + case UNTDID_4451_AII = 'AII'; + + /** + * Trade name use + */ + case UNTDID_4451_AIJ = 'AIJ'; + + /** + * Signing authority + */ + case UNTDID_4451_AIK = 'AIK'; + + /** + * Guarantee + */ + case UNTDID_4451_AIL = 'AIL'; + + /** + * Holding company operation + */ + case UNTDID_4451_AIM = 'AIM'; + + /** + * Consignment routing + */ + case UNTDID_4451_AIN = 'AIN'; + + /** + * Letter of protest + */ + case UNTDID_4451_AIO = 'AIO'; + + /** + * Question + */ + case UNTDID_4451_AIP = 'AIP'; + + /** + * Party information + */ + case UNTDID_4451_AIQ = 'AIQ'; + + /** + * Area boundaries description + */ + case UNTDID_4451_AIR = 'AIR'; + + /** + * Advertisement information + */ + case UNTDID_4451_AIS = 'AIS'; + + /** + * Financial statement details + */ + case UNTDID_4451_AIT = 'AIT'; + + /** + * Access instructions + */ + case UNTDID_4451_AIU = 'AIU'; + + /** + * Liquidity + */ + case UNTDID_4451_AIV = 'AIV'; + + /** + * Credit line + */ + case UNTDID_4451_AIW = 'AIW'; + + /** + * Warranty terms + */ + case UNTDID_4451_AIX = 'AIX'; + + /** + * Division description + */ + case UNTDID_4451_AIY = 'AIY'; + + /** + * Reporting instruction + */ + case UNTDID_4451_AIZ = 'AIZ'; + + /** + * Examination result + */ + case UNTDID_4451_AJA = 'AJA'; + + /** + * Laboratory result + */ + case UNTDID_4451_AJB = 'AJB'; + + /** + * Allowance/charge information + */ + case UNTDID_4451_ALC = 'ALC'; + + /** + * X-ray result + */ + case UNTDID_4451_ALD = 'ALD'; + + /** + * Pathology result + */ + case UNTDID_4451_ALE = 'ALE'; + + /** + * Intervention description + */ + case UNTDID_4451_ALF = 'ALF'; + + /** + * Summary of admittance + */ + case UNTDID_4451_ALG = 'ALG'; + + /** + * Medical treatment course detail + */ + case UNTDID_4451_ALH = 'ALH'; + + /** + * Prognosis + */ + case UNTDID_4451_ALI = 'ALI'; + + /** + * Instruction to patient + */ + case UNTDID_4451_ALJ = 'ALJ'; + + /** + * Instruction to physician + */ + case UNTDID_4451_ALK = 'ALK'; + + /** + * All documents + */ + case UNTDID_4451_ALL = 'ALL'; + + /** + * Medicine treatment + */ + case UNTDID_4451_ALM = 'ALM'; + + /** + * Medicine dosage and administration + */ + case UNTDID_4451_ALN = 'ALN'; + + /** + * Availability of patient + */ + case UNTDID_4451_ALO = 'ALO'; + + /** + * Reason for service request + */ + case UNTDID_4451_ALP = 'ALP'; + + /** + * Purpose of service + */ + case UNTDID_4451_ALQ = 'ALQ'; + + /** + * Arrival conditions + */ + case UNTDID_4451_ARR = 'ARR'; + + /** + * Service requester's comment + */ + case UNTDID_4451_ARS = 'ARS'; + + /** + * Authentication + */ + case UNTDID_4451_AUT = 'AUT'; + + /** + * Requested location description + */ + case UNTDID_4451_AUU = 'AUU'; + + /** + * Medicine administration condition + */ + case UNTDID_4451_AUV = 'AUV'; + + /** + * Patient information + */ + case UNTDID_4451_AUW = 'AUW'; + + /** + * Precautionary measure + */ + case UNTDID_4451_AUX = 'AUX'; + + /** + * Service characteristic + */ + case UNTDID_4451_AUY = 'AUY'; + + /** + * Planned event comment + */ + case UNTDID_4451_AUZ = 'AUZ'; + + /** + * Expected delay comment + */ + case UNTDID_4451_AVA = 'AVA'; + + /** + * Transport requirements comment + */ + case UNTDID_4451_AVB = 'AVB'; + + /** + * Temporary approval condition + */ + case UNTDID_4451_AVC = 'AVC'; + + /** + * Customs Valuation Information + */ + case UNTDID_4451_AVD = 'AVD'; + + /** + * Value Added Tax (VAT) margin scheme + */ + case UNTDID_4451_AVE = 'AVE'; + + /** + * Maritime Declaration of Health + */ + case UNTDID_4451_AVF = 'AVF'; + + /** + * Passenger baggage information + */ + case UNTDID_4451_BAG = 'BAG'; + + /** + * Maritime Declaration of Health + */ + case UNTDID_4451_BAH = 'BAH'; + + /** + * Additional product information address + */ + case UNTDID_4451_BAI = 'BAI'; + + /** + * Information to be printed on despatch advice + */ + case UNTDID_4451_BAJ = 'BAJ'; + + /** + * Missing goods remarks + */ + case UNTDID_4451_BAK = 'BAK'; + + /** + * Non-acceptance information + */ + case UNTDID_4451_BAL = 'BAL'; + + /** + * Returns information + */ + case UNTDID_4451_BAM = 'BAM'; + + /** + * Sub-line item information + */ + case UNTDID_4451_BAN = 'BAN'; + + /** + * Test information + */ + case UNTDID_4451_BAO = 'BAO'; + + /** + * External link + */ + case UNTDID_4451_BAP = 'BAP'; + + /** + * VAT exemption reason + */ + case UNTDID_4451_BAQ = 'BAQ'; + + /** + * Processing Instructions + */ + case UNTDID_4451_BAR = 'BAR'; + + /** + * Relay Instructions + */ + case UNTDID_4451_BAS = 'BAS'; + + /** + * Transport contract document clause + */ + case UNTDID_4451_BLC = 'BLC'; + + /** + * Instruction to prepare the patient + */ + case UNTDID_4451_BLD = 'BLD'; + + /** + * Medicine treatment comment + */ + case UNTDID_4451_BLE = 'BLE'; + + /** + * Examination result comment + */ + case UNTDID_4451_BLF = 'BLF'; + + /** + * Service request comment + */ + case UNTDID_4451_BLG = 'BLG'; + + /** + * Prescription reason + */ + case UNTDID_4451_BLH = 'BLH'; + + /** + * Prescription comment + */ + case UNTDID_4451_BLI = 'BLI'; + + /** + * Clinical investigation comment + */ + case UNTDID_4451_BLJ = 'BLJ'; + + /** + * Medicinal specification comment + */ + case UNTDID_4451_BLK = 'BLK'; + + /** + * Economic contribution comment + */ + case UNTDID_4451_BLL = 'BLL'; + + /** + * Status of a plan + */ + case UNTDID_4451_BLM = 'BLM'; + + /** + * Random sample test information + */ + case UNTDID_4451_BLN = 'BLN'; + + /** + * Period of time + */ + case UNTDID_4451_BLO = 'BLO'; + + /** + * Legislation + */ + case UNTDID_4451_BLP = 'BLP'; + + /** + * Security measures requested + */ + case UNTDID_4451_BLQ = 'BLQ'; + + /** + * Transport contract document remark + */ + case UNTDID_4451_BLR = 'BLR'; + + /** + * Previous port of call security information + */ + case UNTDID_4451_BLS = 'BLS'; + + /** + * Security information + */ + case UNTDID_4451_BLT = 'BLT'; + + /** + * Waste information + */ + case UNTDID_4451_BLU = 'BLU'; + + /** + * B2C marketing information, short description + */ + case UNTDID_4451_BLV = 'BLV'; + + /** + * B2B marketing information, long description + */ + case UNTDID_4451_BLW = 'BLW'; + + /** + * B2C marketing information, long description + */ + case UNTDID_4451_BLX = 'BLX'; + + /** + * Product ingredients + */ + case UNTDID_4451_BLY = 'BLY'; + + /** + * Location short name + */ + case UNTDID_4451_BLZ = 'BLZ'; + + /** + * Packaging material information + */ + case UNTDID_4451_BMA = 'BMA'; + + /** + * Filler material information + */ + case UNTDID_4451_BMB = 'BMB'; + + /** + * Ship-to-ship activity information + */ + case UNTDID_4451_BMC = 'BMC'; + + /** + * Package material description + */ + case UNTDID_4451_BMD = 'BMD'; + + /** + * Consumer level package marking + */ + case UNTDID_4451_BME = 'BME'; + + /** + * Customs clearance instructions + */ + case UNTDID_4451_CCI = 'CCI'; + + /** + * Customs clearance instructions export + */ + case UNTDID_4451_CEX = 'CEX'; + + /** + * Change information + */ + case UNTDID_4451_CHG = 'CHG'; + + /** + * Customs clearance instruction import + */ + case UNTDID_4451_CIP = 'CIP'; + + /** + * Clearance place requested + */ + case UNTDID_4451_CLP = 'CLP'; + + /** + * Loading remarks + */ + case UNTDID_4451_CLR = 'CLR'; + + /** + * Order information + */ + case UNTDID_4451_COI = 'COI'; + + /** + * Customer remarks + */ + case UNTDID_4451_CUR = 'CUR'; + + /** + * Customs declaration information + */ + case UNTDID_4451_CUS = 'CUS'; + + /** + * Damage remarks + */ + case UNTDID_4451_DAR = 'DAR'; + + /** + * Document issuer declaration + */ + case UNTDID_4451_DCL = 'DCL'; + + /** + * Delivery information + */ + case UNTDID_4451_DEL = 'DEL'; + + /** + * Delivery instructions + */ + case UNTDID_4451_DIN = 'DIN'; + + /** + * Documentation instructions + */ + case UNTDID_4451_DOC = 'DOC'; + + /** + * Duty declaration + */ + case UNTDID_4451_DUT = 'DUT'; + + /** + * Effective used routing + */ + case UNTDID_4451_EUR = 'EUR'; + + /** + * First block to be printed on the transport contract + */ + case UNTDID_4451_FBC = 'FBC'; + + /** + * Government bill of lading information + */ + case UNTDID_4451_GBL = 'GBL'; + + /** + * Entire transaction set + */ + case UNTDID_4451_GEN = 'GEN'; + + /** + * Further information concerning GGVS par. 7 + */ + case UNTDID_4451_GS7 = 'GS7'; + + /** + * Consignment handling instruction + */ + case UNTDID_4451_HAN = 'HAN'; + + /** + * Hazard information + */ + case UNTDID_4451_HAZ = 'HAZ'; + + /** + * Consignment information for consignee + */ + case UNTDID_4451_ICN = 'ICN'; + + /** + * Insurance instructions + */ + case UNTDID_4451_IIN = 'IIN'; + + /** + * Invoice mailing instructions + */ + case UNTDID_4451_IMI = 'IMI'; + + /** + * Commercial invoice item description + */ + case UNTDID_4451_IND = 'IND'; + + /** + * Insurance information + */ + case UNTDID_4451_INS = 'INS'; + + /** + * Invoice instruction + */ + case UNTDID_4451_INV = 'INV'; + + /** + * Information for railway purpose + */ + case UNTDID_4451_IRP = 'IRP'; + + /** + * Inland transport details + */ + case UNTDID_4451_ITR = 'ITR'; + + /** + * Testing instructions + */ + case UNTDID_4451_ITS = 'ITS'; + + /** + * Location Alias + */ + case UNTDID_4451_LAN = 'LAN'; + + /** + * Line item + */ + case UNTDID_4451_LIN = 'LIN'; + + /** + * Loading instruction + */ + case UNTDID_4451_LOI = 'LOI'; + + /** + * Miscellaneous charge order + */ + case UNTDID_4451_MCO = 'MCO'; + + /** + * Maritime Declaration of Health + */ + case UNTDID_4451_MDH = 'MDH'; + + /** + * Additional marks/numbers information + */ + case UNTDID_4451_MKS = 'MKS'; + + /** + * Order instruction + */ + case UNTDID_4451_ORI = 'ORI'; + + /** + * Other service information + */ + case UNTDID_4451_OSI = 'OSI'; + + /** + * Packing/marking information + */ + case UNTDID_4451_PAC = 'PAC'; + + /** + * Payment instructions information + */ + case UNTDID_4451_PAI = 'PAI'; + + /** + * Payables information + */ + case UNTDID_4451_PAY = 'PAY'; + + /** + * Packaging information + */ + case UNTDID_4451_PKG = 'PKG'; + + /** + * Packaging terms information + */ + case UNTDID_4451_PKT = 'PKT'; + + /** + * Payment detail/remittance information + */ + case UNTDID_4451_PMD = 'PMD'; + + /** + * Payment information + */ + case UNTDID_4451_PMT = 'PMT'; + + /** + * Product information + */ + case UNTDID_4451_PRD = 'PRD'; + + /** + * Price calculation formula + */ + case UNTDID_4451_PRF = 'PRF'; + + /** + * Priority information + */ + case UNTDID_4451_PRI = 'PRI'; + + /** + * Purchasing information + */ + case UNTDID_4451_PUR = 'PUR'; + + /** + * Quarantine instructions + */ + case UNTDID_4451_QIN = 'QIN'; + + /** + * Quality demands/requirements + */ + case UNTDID_4451_QQD = 'QQD'; + + /** + * Quotation instruction/information + */ + case UNTDID_4451_QUT = 'QUT'; + + /** + * Risk and handling information + */ + case UNTDID_4451_RAH = 'RAH'; + + /** + * Regulatory information + */ + case UNTDID_4451_REG = 'REG'; + + /** + * Return to origin information + */ + case UNTDID_4451_RET = 'RET'; + + /** + * Receivables + */ + case UNTDID_4451_REV = 'REV'; + + /** + * Consignment route + */ + case UNTDID_4451_RQR = 'RQR'; + + /** + * Safety information + */ + case UNTDID_4451_SAF = 'SAF'; + + /** + * Consignment documentary instruction + */ + case UNTDID_4451_SIC = 'SIC'; + + /** + * Special instructions + */ + case UNTDID_4451_SIN = 'SIN'; + + /** + * Ship line requested + */ + case UNTDID_4451_SLR = 'SLR'; + + /** + * Special permission for transport, generally + */ + case UNTDID_4451_SPA = 'SPA'; + + /** + * Special permission concerning the goods to be transported + */ + case UNTDID_4451_SPG = 'SPG'; + + /** + * Special handling + */ + case UNTDID_4451_SPH = 'SPH'; + + /** + * Special permission concerning package + */ + case UNTDID_4451_SPP = 'SPP'; + + /** + * Special permission concerning transport means + */ + case UNTDID_4451_SPT = 'SPT'; + + /** + * Subsidiary risk number (IATA/DGR) + */ + case UNTDID_4451_SRN = 'SRN'; + + /** + * Special service request + */ + case UNTDID_4451_SSR = 'SSR'; + + /** + * Supplier remarks + */ + case UNTDID_4451_SUR = 'SUR'; + + /** + * Consignment tariff + */ + case UNTDID_4451_TCA = 'TCA'; + + /** + * Consignment transport + */ + case UNTDID_4451_TDT = 'TDT'; + + /** + * Transportation information + */ + case UNTDID_4451_TRA = 'TRA'; + + /** + * Requested tariff + */ + case UNTDID_4451_TRR = 'TRR'; + + /** + * Tax declaration + */ + case UNTDID_4451_TXD = 'TXD'; + + /** + * Warehouse instruction/information + */ + case UNTDID_4451_WHI = 'WHI'; + + /** + * Mutually defined + */ + case UNTDID_4451_ZZZ = 'ZZZ'; +} diff --git a/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdUnitCodes.php b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdUnitCodes.php new file mode 100644 index 000000000..1366e97d5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdUnitCodes.php @@ -0,0 +1,10604 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +enum ZugferdUnitCodes: string +{ + + /** + * group + */ + case REC20_GROUP = '10'; + + /** + * outfit + */ + case REC20_OUTFIT = '11'; + + /** + * ration + */ + case REC20_RATION = '13'; + + /** + * shot + */ + case REC20_SHOT = '14'; + + /** + * stick, military + */ + case REC20_STICK_MILITARY = '15'; + + /** + * twenty foot container + */ + case REC20_TWENTY_FOOT_CONTAINER = '20'; + + /** + * forty foot container + */ + case REC20_FORTY_FOOT_CONTAINER = '21'; + + /** + * decilitre per gram + */ + case REC20_DECILITRE_PER_GRAM = '22'; + + /** + * gram per cubic centimetre + */ + case REC20_GRAM_PER_CUBIC_CENTIMETRE = '23'; + + /** + * theoretical pound + */ + case REC20_THEORETICAL_POUND = '24'; + + /** + * gram per square centimetre + */ + case REC20_GRAM_PER_SQUARE_CENTIMETRE = '25'; + + /** + * theoretical ton + */ + case REC20_THEORETICAL_TON = '27'; + + /** + * kilogram per square metre + */ + case REC20_KILOGRAM_PER_SQUARE_METRE = '28'; + + /** + * kilopascal square metre per gram + */ + case REC20_KILOPASCAL_SQUARE_METRE_PER_GRAM = '33'; + + /** + * kilopascal per millimetre + */ + case REC20_KILOPASCAL_PER_MILLIMETRE = '34'; + + /** + * millilitre per square centimetre second + */ + case REC20_MILLILITRE_PER_SQUARE_CENTIMETRE_SECOND = '35'; + + /** + * ounce per square foot + */ + case REC20_OUNCE_PER_SQUARE_FOOT = '37'; + + /** + * ounce per square foot per 0,01inch + */ + case REC20_OUNCE_PER_SQUARE_FOOT_PER_001INCH = '38'; + + /** + * millilitre per second + */ + case REC20_MILLILITRE_PER_SECOND = '40'; + + /** + * millilitre per minute + */ + case REC20_MILLILITRE_PER_MINUTE = '41'; + + /** + * sitas + */ + case REC20_SITAS = '56'; + + /** + * mesh + */ + case REC20_MESH = '57'; + + /** + * net kilogram + */ + case REC20_NET_KILOGRAM = '58'; + + /** + * part per million + */ + case REC20_PART_PER_MILLION = '59'; + + /** + * percent weight + */ + case REC20_PERCENT_WEIGHT = '60'; + + /** + * part per billion (US) + */ + case REC20_PART_PER_BILLION_US = '61'; + + /** + * millipascal + */ + case REC20_MILLIPASCAL = '74'; + + /** + * milli-inch + */ + case REC20_MILLIINCH = '77'; + + /** + * pound per square inch absolute + */ + case REC20_POUND_PER_SQUARE_INCH_ABSOLUTE = '80'; + + /** + * henry + */ + case REC20_HENRY = '81'; + + /** + * foot pound-force + */ + case REC20_FOOT_POUNDFORCE = '85'; + + /** + * pound per cubic foot + */ + case REC20_POUND_PER_CUBIC_FOOT = '87'; + + /** + * poise + */ + case REC20_POISE = '89'; + + /** + * stokes + */ + case REC20_STOKES = '91'; + + /** + * fixed rate + */ + case REC20_FIXED_RATE = '1I'; + + /** + * radian per second + */ + case REC20_RADIAN_PER_SECOND = '2A'; + + /** + * radian per second squared + */ + case REC20_RADIAN_PER_SECOND_SQUARED = '2B'; + + /** + * roentgen + */ + case REC20_ROENTGEN = '2C'; + + /** + * volt AC + */ + case REC20_VOLT_AC = '2G'; + + /** + * volt DC + */ + case REC20_VOLT_DC = '2H'; + + /** + * British thermal unit (international table) per hour + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_HOUR = '2I'; + + /** + * cubic centimetre per second + */ + case REC20_CUBIC_CENTIMETRE_PER_SECOND = '2J'; + + /** + * cubic foot per hour + */ + case REC20_CUBIC_FOOT_PER_HOUR = '2K'; + + /** + * cubic foot per minute + */ + case REC20_CUBIC_FOOT_PER_MINUTE = '2L'; + + /** + * centimetre per second + */ + case REC20_CENTIMETRE_PER_SECOND = '2M'; + + /** + * decibel + */ + case REC20_DECIBEL = '2N'; + + /** + * kilobyte + */ + case REC20_KILOBYTE = '2P'; + + /** + * kilobecquerel + */ + case REC20_KILOBECQUEREL = '2Q'; + + /** + * kilocurie + */ + case REC20_KILOCURIE = '2R'; + + /** + * megagram + */ + case REC20_MEGAGRAM = '2U'; + + /** + * metre per minute + */ + case REC20_METRE_PER_MINUTE = '2X'; + + /** + * milliroentgen + */ + case REC20_MILLIROENTGEN = '2Y'; + + /** + * millivolt + */ + case REC20_MILLIVOLT = '2Z'; + + /** + * megajoule + */ + case REC20_MEGAJOULE = '3B'; + + /** + * manmonth + */ + case REC20_MANMONTH = '3C'; + + /** + * centistokes + */ + case REC20_CENTISTOKES = '4C'; + + /** + * microlitre + */ + case REC20_MICROLITRE = '4G'; + + /** + * micrometre (micron) + */ + case REC20_MICROMETRE_MICRON = '4H'; + + /** + * milliampere + */ + case REC20_MILLIAMPERE = '4K'; + + /** + * megabyte + */ + case REC20_MEGABYTE = '4L'; + + /** + * milligram per hour + */ + case REC20_MILLIGRAM_PER_HOUR = '4M'; + + /** + * megabecquerel + */ + case REC20_MEGABECQUEREL = '4N'; + + /** + * microfarad + */ + case REC20_MICROFARAD = '4O'; + + /** + * newton per metre + */ + case REC20_NEWTON_PER_METRE = '4P'; + + /** + * ounce inch + */ + case REC20_OUNCE_INCH = '4Q'; + + /** + * ounce foot + */ + case REC20_OUNCE_FOOT = '4R'; + + /** + * picofarad + */ + case REC20_PICOFARAD = '4T'; + + /** + * pound per hour + */ + case REC20_POUND_PER_HOUR = '4U'; + + /** + * ton (US) per hour + */ + case REC20_TON_US_PER_HOUR = '4W'; + + /** + * kilolitre per hour + */ + case REC20_KILOLITRE_PER_HOUR = '4X'; + + /** + * barrel (US) per minute + */ + case REC20_BARREL_US_PER_MINUTE = '5A'; + + /** + * batch + */ + case REC20_BATCH = '5B'; + + /** + * MMSCF/day + */ + case REC20_MMSCF_DAY = '5E'; + + /** + * hydraulic horse power + */ + case REC20_HYDRAULIC_HORSE_POWER = '5J'; + + /** + * ampere square metre per joule second + */ + case REC20_AMPERE_SQUARE_METRE_PER_JOULE_SECOND = 'A10'; + + /** + * angstrom + */ + case REC20_ANGSTROM = 'A11'; + + /** + * astronomical unit + */ + case REC20_ASTRONOMICAL_UNIT = 'A12'; + + /** + * attojoule + */ + case REC20_ATTOJOULE = 'A13'; + + /** + * barn + */ + case REC20_BARN = 'A14'; + + /** + * barn per electronvolt + */ + case REC20_BARN_PER_ELECTRONVOLT = 'A15'; + + /** + * barn per steradian electronvolt + */ + case REC20_BARN_PER_STERADIAN_ELECTRONVOLT = 'A16'; + + /** + * barn per steradian + */ + case REC20_BARN_PER_STERADIAN = 'A17'; + + /** + * becquerel per kilogram + */ + case REC20_BECQUEREL_PER_KILOGRAM = 'A18'; + + /** + * becquerel per cubic metre + */ + case REC20_BECQUEREL_PER_CUBIC_METRE = 'A19'; + + /** + * ampere per centimetre + */ + case REC20_AMPERE_PER_CENTIMETRE = 'A2'; + + /** + * British thermal unit (international table) per second square foot + * degree Rankine + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SECOND_SQUARE_FOOT_DEGREE_RANKINE = 'A20'; + + /** + * British thermal unit (international table) per pound degree Rankine + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_POUND_DEGREE_RANKINE = 'A21'; + + /** + * British thermal unit (international table) per second foot degree + * Rankine + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SECOND_FOOT_DEGREE_RANKINE = 'A22'; + + /** + * British thermal unit (international table) per hour square foot degree + * Rankine + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_HOUR_SQUARE_FOOT_DEGREE_RANKINE = 'A23'; + + /** + * candela per square metre + */ + case REC20_CANDELA_PER_SQUARE_METRE = 'A24'; + + /** + * coulomb metre + */ + case REC20_COULOMB_METRE = 'A26'; + + /** + * coulomb metre squared per volt + */ + case REC20_COULOMB_METRE_SQUARED_PER_VOLT = 'A27'; + + /** + * coulomb per cubic centimetre + */ + case REC20_COULOMB_PER_CUBIC_CENTIMETRE = 'A28'; + + /** + * coulomb per cubic metre + */ + case REC20_COULOMB_PER_CUBIC_METRE = 'A29'; + + /** + * ampere per millimetre + */ + case REC20_AMPERE_PER_MILLIMETRE = 'A3'; + + /** + * coulomb per cubic millimetre + */ + case REC20_COULOMB_PER_CUBIC_MILLIMETRE = 'A30'; + + /** + * coulomb per kilogram second + */ + case REC20_COULOMB_PER_KILOGRAM_SECOND = 'A31'; + + /** + * coulomb per mole + */ + case REC20_COULOMB_PER_MOLE = 'A32'; + + /** + * coulomb per square centimetre + */ + case REC20_COULOMB_PER_SQUARE_CENTIMETRE = 'A33'; + + /** + * coulomb per square metre + */ + case REC20_COULOMB_PER_SQUARE_METRE = 'A34'; + + /** + * coulomb per square millimetre + */ + case REC20_COULOMB_PER_SQUARE_MILLIMETRE = 'A35'; + + /** + * cubic centimetre per mole + */ + case REC20_CUBIC_CENTIMETRE_PER_MOLE = 'A36'; + + /** + * cubic decimetre per mole + */ + case REC20_CUBIC_DECIMETRE_PER_MOLE = 'A37'; + + /** + * cubic metre per coulomb + */ + case REC20_CUBIC_METRE_PER_COULOMB = 'A38'; + + /** + * cubic metre per kilogram + */ + case REC20_CUBIC_METRE_PER_KILOGRAM = 'A39'; + + /** + * ampere per square centimetre + */ + case REC20_AMPERE_PER_SQUARE_CENTIMETRE = 'A4'; + + /** + * cubic metre per mole + */ + case REC20_CUBIC_METRE_PER_MOLE = 'A40'; + + /** + * ampere per square metre + */ + case REC20_AMPERE_PER_SQUARE_METRE = 'A41'; + + /** + * curie per kilogram + */ + case REC20_CURIE_PER_KILOGRAM = 'A42'; + + /** + * deadweight tonnage + */ + case REC20_DEADWEIGHT_TONNAGE = 'A43'; + + /** + * decalitre + */ + case REC20_DECALITRE = 'A44'; + + /** + * decametre + */ + case REC20_DECAMETRE = 'A45'; + + /** + * decitex + */ + case REC20_DECITEX = 'A47'; + + /** + * degree Rankine + */ + case REC20_DEGREE_RANKINE = 'A48'; + + /** + * ampere square metre + */ + case REC20_AMPERE_SQUARE_METRE = 'A5'; + + /** + * electronvolt + */ + case REC20_ELECTRONVOLT = 'A53'; + + /** + * electronvolt per metre + */ + case REC20_ELECTRONVOLT_PER_METRE = 'A54'; + + /** + * electronvolt square metre + */ + case REC20_ELECTRONVOLT_SQUARE_METRE = 'A55'; + + /** + * electronvolt square metre per kilogram + */ + case REC20_ELECTRONVOLT_SQUARE_METRE_PER_KILOGRAM = 'A56'; + + /** + * 8-part cloud cover + */ + case REC20_8PART_CLOUD_COVER = 'A59'; + + /** + * ampere per square metre kelvin squared + */ + case REC20_AMPERE_PER_SQUARE_METRE_KELVIN_SQUARED = 'A6'; + + /** + * exajoule + */ + case REC20_EXAJOULE = 'A68'; + + /** + * farad per metre + */ + case REC20_FARAD_PER_METRE = 'A69'; + + /** + * ampere per square millimetre + */ + case REC20_AMPERE_PER_SQUARE_MILLIMETRE = 'A7'; + + /** + * femtojoule + */ + case REC20_FEMTOJOULE = 'A70'; + + /** + * femtometre + */ + case REC20_FEMTOMETRE = 'A71'; + + /** + * foot per second squared + */ + case REC20_FOOT_PER_SECOND_SQUARED = 'A73'; + + /** + * foot pound-force per second + */ + case REC20_FOOT_POUNDFORCE_PER_SECOND = 'A74'; + + /** + * freight ton + */ + case REC20_FREIGHT_TON = 'A75'; + + /** + * gal + */ + case REC20_GAL = 'A76'; + + /** + * ampere second + */ + case REC20_AMPERE_SECOND = 'A8'; + + /** + * gigacoulomb per cubic metre + */ + case REC20_GIGACOULOMB_PER_CUBIC_METRE = 'A84'; + + /** + * gigaelectronvolt + */ + case REC20_GIGAELECTRONVOLT = 'A85'; + + /** + * gigahertz + */ + case REC20_GIGAHERTZ = 'A86'; + + /** + * gigaohm + */ + case REC20_GIGAOHM = 'A87'; + + /** + * gigaohm metre + */ + case REC20_GIGAOHM_METRE = 'A88'; + + /** + * gigapascal + */ + case REC20_GIGAPASCAL = 'A89'; + + /** + * rate + */ + case REC20_RATE = 'A9'; + + /** + * gigawatt + */ + case REC20_GIGAWATT = 'A90'; + + /** + * gon + */ + case REC20_GON = 'A91'; + + /** + * gram per cubic metre + */ + case REC20_GRAM_PER_CUBIC_METRE = 'A93'; + + /** + * gram per mole + */ + case REC20_GRAM_PER_MOLE = 'A94'; + + /** + * gray + */ + case REC20_GRAY = 'A95'; + + /** + * gray per second + */ + case REC20_GRAY_PER_SECOND = 'A96'; + + /** + * hectopascal + */ + case REC20_HECTOPASCAL = 'A97'; + + /** + * henry per metre + */ + case REC20_HENRY_PER_METRE = 'A98'; + + /** + * bit + */ + case REC20_BIT = 'A99'; + + /** + * ball + */ + case REC20_BALL = 'AA'; + + /** + * bulk pack + */ + case REC20_BULK_PACK = 'AB'; + + /** + * acre + */ + case REC20_ACRE = 'ACR'; + + /** + * activity + */ + case REC20_ACTIVITY = 'ACT'; + + /** + * byte + */ + case REC20_BYTE = 'AD'; + + /** + * ampere per metre + */ + case REC20_AMPERE_PER_METRE = 'AE'; + + /** + * additional minute + */ + case REC20_ADDITIONAL_MINUTE = 'AH'; + + /** + * average minute per call + */ + case REC20_AVERAGE_MINUTE_PER_CALL = 'AI'; + + /** + * fathom + */ + case REC20_FATHOM = 'AK'; + + /** + * access line + */ + case REC20_ACCESS_LINE = 'AL'; + + /** + * ampere hour + */ + case REC20_AMPERE_HOUR = 'AMH'; + + /** + * ampere + */ + case REC20_AMPERE = 'AMP'; + + /** + * year + */ + case REC20_YEAR = 'ANN'; + + /** + * troy ounce or apothecary ounce + */ + case REC20_TROY_OUNCE_OR_APOTHECARY_OUNCE = 'APZ'; + + /** + * anti-hemophilic factor (AHF) unit + */ + case REC20_ANTIHEMOPHILIC_FACTOR_AHF_UNIT = 'AQ'; + + /** + * assortment + */ + case REC20_ASSORTMENT = 'AS'; + + /** + * alcoholic strength by mass + */ + case REC20_ALCOHOLIC_STRENGTH_BY_MASS = 'ASM'; + + /** + * alcoholic strength by volume + */ + case REC20_ALCOHOLIC_STRENGTH_BY_VOLUME = 'ASU'; + + /** + * standard atmosphere + */ + case REC20_STANDARD_ATMOSPHERE = 'ATM'; + + /** + * american wire gauge + */ + case REC20_AMERICAN_WIRE_GAUGE = 'AWG'; + + /** + * assembly + */ + case REC20_ASSEMBLY = 'AY'; + + /** + * British thermal unit (international table) per pound + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_POUND = 'AZ'; + + /** + * barrel (US) per day + */ + case REC20_BARREL_US_PER_DAY = 'B1'; + + /** + * bit per second + */ + case REC20_BIT_PER_SECOND = 'B10'; + + /** + * joule per kilogram kelvin + */ + case REC20_JOULE_PER_KILOGRAM_KELVIN = 'B11'; + + /** + * joule per metre + */ + case REC20_JOULE_PER_METRE = 'B12'; + + /** + * joule per square metre + */ + case REC20_JOULE_PER_SQUARE_METRE = 'B13'; + + /** + * joule per metre to the fourth power + */ + case REC20_JOULE_PER_METRE_TO_THE_FOURTH_POWER = 'B14'; + + /** + * joule per mole + */ + case REC20_JOULE_PER_MOLE = 'B15'; + + /** + * joule per mole kelvin + */ + case REC20_JOULE_PER_MOLE_KELVIN = 'B16'; + + /** + * credit + */ + case REC20_CREDIT = 'B17'; + + /** + * joule second + */ + case REC20_JOULE_SECOND = 'B18'; + + /** + * digit + */ + case REC20_DIGIT = 'B19'; + + /** + * joule square metre per kilogram + */ + case REC20_JOULE_SQUARE_METRE_PER_KILOGRAM = 'B20'; + + /** + * kelvin per watt + */ + case REC20_KELVIN_PER_WATT = 'B21'; + + /** + * kiloampere + */ + case REC20_KILOAMPERE = 'B22'; + + /** + * kiloampere per square metre + */ + case REC20_KILOAMPERE_PER_SQUARE_METRE = 'B23'; + + /** + * kiloampere per metre + */ + case REC20_KILOAMPERE_PER_METRE = 'B24'; + + /** + * kilobecquerel per kilogram + */ + case REC20_KILOBECQUEREL_PER_KILOGRAM = 'B25'; + + /** + * kilocoulomb + */ + case REC20_KILOCOULOMB = 'B26'; + + /** + * kilocoulomb per cubic metre + */ + case REC20_KILOCOULOMB_PER_CUBIC_METRE = 'B27'; + + /** + * kilocoulomb per square metre + */ + case REC20_KILOCOULOMB_PER_SQUARE_METRE = 'B28'; + + /** + * kiloelectronvolt + */ + case REC20_KILOELECTRONVOLT = 'B29'; + + /** + * batting pound + */ + case REC20_BATTING_POUND = 'B3'; + + /** + * gibibit + */ + case REC20_GIBIBIT = 'B30'; + + /** + * kilogram metre per second + */ + case REC20_KILOGRAM_METRE_PER_SECOND = 'B31'; + + /** + * kilogram metre squared + */ + case REC20_KILOGRAM_METRE_SQUARED = 'B32'; + + /** + * kilogram metre squared per second + */ + case REC20_KILOGRAM_METRE_SQUARED_PER_SECOND = 'B33'; + + /** + * kilogram per cubic decimetre + */ + case REC20_KILOGRAM_PER_CUBIC_DECIMETRE = 'B34'; + + /** + * kilogram per litre + */ + case REC20_KILOGRAM_PER_LITRE = 'B35'; + + /** + * barrel, imperial + */ + case REC20_BARREL_IMPERIAL = 'B4'; + + /** + * kilojoule per kelvin + */ + case REC20_KILOJOULE_PER_KELVIN = 'B41'; + + /** + * kilojoule per kilogram + */ + case REC20_KILOJOULE_PER_KILOGRAM = 'B42'; + + /** + * kilojoule per kilogram kelvin + */ + case REC20_KILOJOULE_PER_KILOGRAM_KELVIN = 'B43'; + + /** + * kilojoule per mole + */ + case REC20_KILOJOULE_PER_MOLE = 'B44'; + + /** + * kilomole + */ + case REC20_KILOMOLE = 'B45'; + + /** + * kilomole per cubic metre + */ + case REC20_KILOMOLE_PER_CUBIC_METRE = 'B46'; + + /** + * kilonewton + */ + case REC20_KILONEWTON = 'B47'; + + /** + * kilonewton metre + */ + case REC20_KILONEWTON_METRE = 'B48'; + + /** + * kiloohm + */ + case REC20_KILOOHM = 'B49'; + + /** + * kiloohm metre + */ + case REC20_KILOOHM_METRE = 'B50'; + + /** + * kilosecond + */ + case REC20_KILOSECOND = 'B52'; + + /** + * kilosiemens + */ + case REC20_KILOSIEMENS = 'B53'; + + /** + * kilosiemens per metre + */ + case REC20_KILOSIEMENS_PER_METRE = 'B54'; + + /** + * kilovolt per metre + */ + case REC20_KILOVOLT_PER_METRE = 'B55'; + + /** + * kiloweber per metre + */ + case REC20_KILOWEBER_PER_METRE = 'B56'; + + /** + * light year + */ + case REC20_LIGHT_YEAR = 'B57'; + + /** + * litre per mole + */ + case REC20_LITRE_PER_MOLE = 'B58'; + + /** + * lumen hour + */ + case REC20_LUMEN_HOUR = 'B59'; + + /** + * lumen per square metre + */ + case REC20_LUMEN_PER_SQUARE_METRE = 'B60'; + + /** + * lumen per watt + */ + case REC20_LUMEN_PER_WATT = 'B61'; + + /** + * lumen second + */ + case REC20_LUMEN_SECOND = 'B62'; + + /** + * lux hour + */ + case REC20_LUX_HOUR = 'B63'; + + /** + * lux second + */ + case REC20_LUX_SECOND = 'B64'; + + /** + * megaampere per square metre + */ + case REC20_MEGAAMPERE_PER_SQUARE_METRE = 'B66'; + + /** + * megabecquerel per kilogram + */ + case REC20_MEGABECQUEREL_PER_KILOGRAM = 'B67'; + + /** + * gigabit + */ + case REC20_GIGABIT = 'B68'; + + /** + * megacoulomb per cubic metre + */ + case REC20_MEGACOULOMB_PER_CUBIC_METRE = 'B69'; + + /** + * cycle + */ + case REC20_CYCLE = 'B7'; + + /** + * megacoulomb per square metre + */ + case REC20_MEGACOULOMB_PER_SQUARE_METRE = 'B70'; + + /** + * megaelectronvolt + */ + case REC20_MEGAELECTRONVOLT = 'B71'; + + /** + * megagram per cubic metre + */ + case REC20_MEGAGRAM_PER_CUBIC_METRE = 'B72'; + + /** + * meganewton + */ + case REC20_MEGANEWTON = 'B73'; + + /** + * meganewton metre + */ + case REC20_MEGANEWTON_METRE = 'B74'; + + /** + * megaohm + */ + case REC20_MEGAOHM = 'B75'; + + /** + * megaohm metre + */ + case REC20_MEGAOHM_METRE = 'B76'; + + /** + * megasiemens per metre + */ + case REC20_MEGASIEMENS_PER_METRE = 'B77'; + + /** + * megavolt + */ + case REC20_MEGAVOLT = 'B78'; + + /** + * megavolt per metre + */ + case REC20_MEGAVOLT_PER_METRE = 'B79'; + + /** + * joule per cubic metre + */ + case REC20_JOULE_PER_CUBIC_METRE = 'B8'; + + /** + * gigabit per second + */ + case REC20_GIGABIT_PER_SECOND = 'B80'; + + /** + * reciprocal metre squared reciprocal second + */ + case REC20_RECIPROCAL_METRE_SQUARED_RECIPROCAL_SECOND = 'B81'; + + /** + * inch per linear foot + */ + case REC20_INCH_PER_LINEAR_FOOT = 'B82'; + + /** + * metre to the fourth power + */ + case REC20_METRE_TO_THE_FOURTH_POWER = 'B83'; + + /** + * microampere + */ + case REC20_MICROAMPERE = 'B84'; + + /** + * microbar + */ + case REC20_MICROBAR = 'B85'; + + /** + * microcoulomb + */ + case REC20_MICROCOULOMB = 'B86'; + + /** + * microcoulomb per cubic metre + */ + case REC20_MICROCOULOMB_PER_CUBIC_METRE = 'B87'; + + /** + * microcoulomb per square metre + */ + case REC20_MICROCOULOMB_PER_SQUARE_METRE = 'B88'; + + /** + * microfarad per metre + */ + case REC20_MICROFARAD_PER_METRE = 'B89'; + + /** + * microhenry + */ + case REC20_MICROHENRY = 'B90'; + + /** + * microhenry per metre + */ + case REC20_MICROHENRY_PER_METRE = 'B91'; + + /** + * micronewton + */ + case REC20_MICRONEWTON = 'B92'; + + /** + * micronewton metre + */ + case REC20_MICRONEWTON_METRE = 'B93'; + + /** + * microohm + */ + case REC20_MICROOHM = 'B94'; + + /** + * microohm metre + */ + case REC20_MICROOHM_METRE = 'B95'; + + /** + * micropascal + */ + case REC20_MICROPASCAL = 'B96'; + + /** + * microradian + */ + case REC20_MICRORADIAN = 'B97'; + + /** + * microsecond + */ + case REC20_MICROSECOND = 'B98'; + + /** + * microsiemens + */ + case REC20_MICROSIEMENS = 'B99'; + + /** + * bar [unit of pressure] + */ + case REC20_BAR_UNIT_OF_PRESSURE = 'BAR'; + + /** + * base box + */ + case REC20_BASE_BOX = 'BB'; + + /** + * board foot + */ + case REC20_BOARD_FOOT = 'BFT'; + + /** + * brake horse power + */ + case REC20_BRAKE_HORSE_POWER = 'BHP'; + + /** + * billion (EUR) + */ + case REC20_BILLION_EUR = 'BIL'; + + /** + * dry barrel (US) + */ + case REC20_DRY_BARREL_US = 'BLD'; + + /** + * barrel (US) + */ + case REC20_BARREL_US = 'BLL'; + + /** + * hundred board foot + */ + case REC20_HUNDRED_BOARD_FOOT = 'BP'; + + /** + * beats per minute + */ + case REC20_BEATS_PER_MINUTE = 'BPM'; + + /** + * becquerel + */ + case REC20_BECQUEREL = 'BQL'; + + /** + * British thermal unit (international table) + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE = 'BTU'; + + /** + * bushel (US) + */ + case REC20_BUSHEL_US = 'BUA'; + + /** + * bushel (UK) + */ + case REC20_BUSHEL_UK = 'BUI'; + + /** + * call + */ + case REC20_CALL = 'C0'; + + /** + * millifarad + */ + case REC20_MILLIFARAD = 'C10'; + + /** + * milligal + */ + case REC20_MILLIGAL = 'C11'; + + /** + * milligram per metre + */ + case REC20_MILLIGRAM_PER_METRE = 'C12'; + + /** + * milligray + */ + case REC20_MILLIGRAY = 'C13'; + + /** + * millihenry + */ + case REC20_MILLIHENRY = 'C14'; + + /** + * millijoule + */ + case REC20_MILLIJOULE = 'C15'; + + /** + * millimetre per second + */ + case REC20_MILLIMETRE_PER_SECOND = 'C16'; + + /** + * millimetre squared per second + */ + case REC20_MILLIMETRE_SQUARED_PER_SECOND = 'C17'; + + /** + * millimole + */ + case REC20_MILLIMOLE = 'C18'; + + /** + * mole per kilogram + */ + case REC20_MOLE_PER_KILOGRAM = 'C19'; + + /** + * millinewton + */ + case REC20_MILLINEWTON = 'C20'; + + /** + * kibibit + */ + case REC20_KIBIBIT = 'C21'; + + /** + * millinewton per metre + */ + case REC20_MILLINEWTON_PER_METRE = 'C22'; + + /** + * milliohm metre + */ + case REC20_MILLIOHM_METRE = 'C23'; + + /** + * millipascal second + */ + case REC20_MILLIPASCAL_SECOND = 'C24'; + + /** + * milliradian + */ + case REC20_MILLIRADIAN = 'C25'; + + /** + * millisecond + */ + case REC20_MILLISECOND = 'C26'; + + /** + * millisiemens + */ + case REC20_MILLISIEMENS = 'C27'; + + /** + * millisievert + */ + case REC20_MILLISIEVERT = 'C28'; + + /** + * millitesla + */ + case REC20_MILLITESLA = 'C29'; + + /** + * microvolt per metre + */ + case REC20_MICROVOLT_PER_METRE = 'C3'; + + /** + * millivolt per metre + */ + case REC20_MILLIVOLT_PER_METRE = 'C30'; + + /** + * milliwatt + */ + case REC20_MILLIWATT = 'C31'; + + /** + * milliwatt per square metre + */ + case REC20_MILLIWATT_PER_SQUARE_METRE = 'C32'; + + /** + * milliweber + */ + case REC20_MILLIWEBER = 'C33'; + + /** + * mole + */ + case REC20_MOLE = 'C34'; + + /** + * mole per cubic decimetre + */ + case REC20_MOLE_PER_CUBIC_DECIMETRE = 'C35'; + + /** + * mole per cubic metre + */ + case REC20_MOLE_PER_CUBIC_METRE = 'C36'; + + /** + * kilobit + */ + case REC20_KILOBIT = 'C37'; + + /** + * mole per litre + */ + case REC20_MOLE_PER_LITRE = 'C38'; + + /** + * nanoampere + */ + case REC20_NANOAMPERE = 'C39'; + + /** + * nanocoulomb + */ + case REC20_NANOCOULOMB = 'C40'; + + /** + * nanofarad + */ + case REC20_NANOFARAD = 'C41'; + + /** + * nanofarad per metre + */ + case REC20_NANOFARAD_PER_METRE = 'C42'; + + /** + * nanohenry + */ + case REC20_NANOHENRY = 'C43'; + + /** + * nanohenry per metre + */ + case REC20_NANOHENRY_PER_METRE = 'C44'; + + /** + * nanometre + */ + case REC20_NANOMETRE = 'C45'; + + /** + * nanoohm metre + */ + case REC20_NANOOHM_METRE = 'C46'; + + /** + * nanosecond + */ + case REC20_NANOSECOND = 'C47'; + + /** + * nanotesla + */ + case REC20_NANOTESLA = 'C48'; + + /** + * nanowatt + */ + case REC20_NANOWATT = 'C49'; + + /** + * neper + */ + case REC20_NEPER = 'C50'; + + /** + * neper per second + */ + case REC20_NEPER_PER_SECOND = 'C51'; + + /** + * picometre + */ + case REC20_PICOMETRE = 'C52'; + + /** + * newton metre second + */ + case REC20_NEWTON_METRE_SECOND = 'C53'; + + /** + * newton metre squared per kilogram squared + */ + case REC20_NEWTON_METRE_SQUARED_PER_KILOGRAM_SQUARED = 'C54'; + + /** + * newton per square metre + */ + case REC20_NEWTON_PER_SQUARE_METRE = 'C55'; + + /** + * newton per square millimetre + */ + case REC20_NEWTON_PER_SQUARE_MILLIMETRE = 'C56'; + + /** + * newton second + */ + case REC20_NEWTON_SECOND = 'C57'; + + /** + * newton second per metre + */ + case REC20_NEWTON_SECOND_PER_METRE = 'C58'; + + /** + * octave + */ + case REC20_OCTAVE = 'C59'; + + /** + * ohm centimetre + */ + case REC20_OHM_CENTIMETRE = 'C60'; + + /** + * ohm metre + */ + case REC20_OHM_METRE = 'C61'; + + /** + * one + */ + case REC20_ONE = 'C62'; + + /** + * parsec + */ + case REC20_PARSEC = 'C63'; + + /** + * pascal per kelvin + */ + case REC20_PASCAL_PER_KELVIN = 'C64'; + + /** + * pascal second + */ + case REC20_PASCAL_SECOND = 'C65'; + + /** + * pascal second per cubic metre + */ + case REC20_PASCAL_SECOND_PER_CUBIC_METRE = 'C66'; + + /** + * pascal second per metre + */ + case REC20_PASCAL_SECOND_PER_METRE = 'C67'; + + /** + * petajoule + */ + case REC20_PETAJOULE = 'C68'; + + /** + * phon + */ + case REC20_PHON = 'C69'; + + /** + * centipoise + */ + case REC20_CENTIPOISE = 'C7'; + + /** + * picoampere + */ + case REC20_PICOAMPERE = 'C70'; + + /** + * picocoulomb + */ + case REC20_PICOCOULOMB = 'C71'; + + /** + * picofarad per metre + */ + case REC20_PICOFARAD_PER_METRE = 'C72'; + + /** + * picohenry + */ + case REC20_PICOHENRY = 'C73'; + + /** + * kilobit per second + */ + case REC20_KILOBIT_PER_SECOND = 'C74'; + + /** + * picowatt + */ + case REC20_PICOWATT = 'C75'; + + /** + * picowatt per square metre + */ + case REC20_PICOWATT_PER_SQUARE_METRE = 'C76'; + + /** + * pound-force + */ + case REC20_POUNDFORCE = 'C78'; + + /** + * kilovolt ampere hour + */ + case REC20_KILOVOLT_AMPERE_HOUR = 'C79'; + + /** + * millicoulomb per kilogram + */ + case REC20_MILLICOULOMB_PER_KILOGRAM = 'C8'; + + /** + * rad + */ + case REC20_RAD = 'C80'; + + /** + * radian + */ + case REC20_RADIAN = 'C81'; + + /** + * radian square metre per mole + */ + case REC20_RADIAN_SQUARE_METRE_PER_MOLE = 'C82'; + + /** + * radian square metre per kilogram + */ + case REC20_RADIAN_SQUARE_METRE_PER_KILOGRAM = 'C83'; + + /** + * radian per metre + */ + case REC20_RADIAN_PER_METRE = 'C84'; + + /** + * reciprocal angstrom + */ + case REC20_RECIPROCAL_ANGSTROM = 'C85'; + + /** + * reciprocal cubic metre + */ + case REC20_RECIPROCAL_CUBIC_METRE = 'C86'; + + /** + * reciprocal cubic metre per second + */ + case REC20_RECIPROCAL_CUBIC_METRE_PER_SECOND = 'C87'; + + /** + * reciprocal electron volt per cubic metre + */ + case REC20_RECIPROCAL_ELECTRON_VOLT_PER_CUBIC_METRE = 'C88'; + + /** + * reciprocal henry + */ + case REC20_RECIPROCAL_HENRY = 'C89'; + + /** + * coil group + */ + case REC20_COIL_GROUP = 'C9'; + + /** + * reciprocal joule per cubic metre + */ + case REC20_RECIPROCAL_JOULE_PER_CUBIC_METRE = 'C90'; + + /** + * reciprocal kelvin or kelvin to the power minus one + */ + case REC20_RECIPROCAL_KELVIN_OR_KELVIN_TO_THE_POWER_MINUS_ONE = 'C91'; + + /** + * reciprocal metre + */ + case REC20_RECIPROCAL_METRE = 'C92'; + + /** + * reciprocal square metre + */ + case REC20_RECIPROCAL_SQUARE_METRE = 'C93'; + + /** + * reciprocal minute + */ + case REC20_RECIPROCAL_MINUTE = 'C94'; + + /** + * reciprocal mole + */ + case REC20_RECIPROCAL_MOLE = 'C95'; + + /** + * reciprocal pascal or pascal to the power minus one + */ + case REC20_RECIPROCAL_PASCAL_OR_PASCAL_TO_THE_POWER_MINUS_ONE = 'C96'; + + /** + * reciprocal second + */ + case REC20_RECIPROCAL_SECOND = 'C97'; + + /** + * reciprocal second per metre squared + */ + case REC20_RECIPROCAL_SECOND_PER_METRE_SQUARED = 'C99'; + + /** + * carrying capacity in metric ton + */ + case REC20_CARRYING_CAPACITY_IN_METRIC_TON = 'CCT'; + + /** + * candela + */ + case REC20_CANDELA = 'CDL'; + + /** + * degree Celsius + */ + case REC20_DEGREE_CELSIUS = 'CEL'; + + /** + * hundred + */ + case REC20_HUNDRED = 'CEN'; + + /** + * card + */ + case REC20_CARD = 'CG'; + + /** + * centigram + */ + case REC20_CENTIGRAM = 'CGM'; + + /** + * coulomb per kilogram + */ + case REC20_COULOMB_PER_KILOGRAM = 'CKG'; + + /** + * hundred leave + */ + case REC20_HUNDRED_LEAVE = 'CLF'; + + /** + * centilitre + */ + case REC20_CENTILITRE = 'CLT'; + + /** + * square centimetre + */ + case REC20_SQUARE_CENTIMETRE = 'CMK'; + + /** + * cubic centimetre + */ + case REC20_CUBIC_CENTIMETRE = 'CMQ'; + + /** + * centimetre + */ + case REC20_CENTIMETRE = 'CMT'; + + /** + * hundred pack + */ + case REC20_HUNDRED_PACK = 'CNP'; + + /** + * cental (UK) + */ + case REC20_CENTAL_UK = 'CNT'; + + /** + * coulomb + */ + case REC20_COULOMB = 'COU'; + + /** + * content gram + */ + case REC20_CONTENT_GRAM = 'CTG'; + + /** + * metric carat + */ + case REC20_METRIC_CARAT = 'CTM'; + + /** + * content ton (metric) + */ + case REC20_CONTENT_TON_METRIC = 'CTN'; + + /** + * curie + */ + case REC20_CURIE = 'CUR'; + + /** + * hundred pound (cwt) / hundred weight (US) + */ + case REC20_HUNDRED_POUND_CWT___HUNDRED_WEIGHT_US = 'CWA'; + + /** + * hundred weight (UK) + */ + case REC20_HUNDRED_WEIGHT_UK = 'CWI'; + + /** + * kilowatt hour per hour + */ + case REC20_KILOWATT_HOUR_PER_HOUR = 'D03'; + + /** + * lot [unit of weight] + */ + case REC20_LOT__UNIT_OF_WEIGHT = 'D04'; + + /** + * reciprocal second per steradian + */ + case REC20_RECIPROCAL_SECOND_PER_STERADIAN = 'D1'; + + /** + * siemens per metre + */ + case REC20_SIEMENS_PER_METRE = 'D10'; + + /** + * mebibit + */ + case REC20_MEBIBIT = 'D11'; + + /** + * siemens square metre per mole + */ + case REC20_SIEMENS_SQUARE_METRE_PER_MOLE = 'D12'; + + /** + * sievert + */ + case REC20_SIEVERT = 'D13'; + + /** + * sone + */ + case REC20_SONE = 'D15'; + + /** + * square centimetre per erg + */ + case REC20_SQUARE_CENTIMETRE_PER_ERG = 'D16'; + + /** + * square centimetre per steradian erg + */ + case REC20_SQUARE_CENTIMETRE_PER_STERADIAN_ERG = 'D17'; + + /** + * metre kelvin + */ + case REC20_METRE_KELVIN = 'D18'; + + /** + * square metre kelvin per watt + */ + case REC20_SQUARE_METRE_KELVIN_PER_WATT = 'D19'; + + /** + * reciprocal second per steradian metre squared + */ + case REC20_RECIPROCAL_SECOND_PER_STERADIAN_METRE_SQUARED = 'D2'; + + /** + * square metre per joule + */ + case REC20_SQUARE_METRE_PER_JOULE = 'D20'; + + /** + * square metre per kilogram + */ + case REC20_SQUARE_METRE_PER_KILOGRAM = 'D21'; + + /** + * square metre per mole + */ + case REC20_SQUARE_METRE_PER_MOLE = 'D22'; + + /** + * pen gram (protein) + */ + case REC20_PEN_GRAM_PROTEIN = 'D23'; + + /** + * square metre per steradian + */ + case REC20_SQUARE_METRE_PER_STERADIAN = 'D24'; + + /** + * square metre per steradian joule + */ + case REC20_SQUARE_METRE_PER_STERADIAN_JOULE = 'D25'; + + /** + * square metre per volt second + */ + case REC20_SQUARE_METRE_PER_VOLT_SECOND = 'D26'; + + /** + * steradian + */ + case REC20_STERADIAN = 'D27'; + + /** + * terahertz + */ + case REC20_TERAHERTZ = 'D29'; + + /** + * terajoule + */ + case REC20_TERAJOULE = 'D30'; + + /** + * terawatt + */ + case REC20_TERAWATT = 'D31'; + + /** + * terawatt hour + */ + case REC20_TERAWATT_HOUR = 'D32'; + + /** + * tesla + */ + case REC20_TESLA = 'D33'; + + /** + * tex + */ + case REC20_TEX = 'D34'; + + /** + * megabit + */ + case REC20_MEGABIT = 'D36'; + + /** + * tonne per cubic metre + */ + case REC20_TONNE_PER_CUBIC_METRE = 'D41'; + + /** + * tropical year + */ + case REC20_TROPICAL_YEAR = 'D42'; + + /** + * unified atomic mass unit + */ + case REC20_UNIFIED_ATOMIC_MASS_UNIT = 'D43'; + + /** + * var + */ + case REC20_VAR = 'D44'; + + /** + * volt squared per kelvin squared + */ + case REC20_VOLT_SQUARED_PER_KELVIN_SQUARED = 'D45'; + + /** + * volt - ampere + */ + case REC20_VOLT__AMPERE = 'D46'; + + /** + * volt per centimetre + */ + case REC20_VOLT_PER_CENTIMETRE = 'D47'; + + /** + * volt per kelvin + */ + case REC20_VOLT_PER_KELVIN = 'D48'; + + /** + * millivolt per kelvin + */ + case REC20_MILLIVOLT_PER_KELVIN = 'D49'; + + /** + * kilogram per square centimetre + */ + case REC20_KILOGRAM_PER_SQUARE_CENTIMETRE = 'D5'; + + /** + * volt per metre + */ + case REC20_VOLT_PER_METRE = 'D50'; + + /** + * volt per millimetre + */ + case REC20_VOLT_PER_MILLIMETRE = 'D51'; + + /** + * watt per kelvin + */ + case REC20_WATT_PER_KELVIN = 'D52'; + + /** + * watt per metre kelvin + */ + case REC20_WATT_PER_METRE_KELVIN = 'D53'; + + /** + * watt per square metre + */ + case REC20_WATT_PER_SQUARE_METRE = 'D54'; + + /** + * watt per square metre kelvin + */ + case REC20_WATT_PER_SQUARE_METRE_KELVIN = 'D55'; + + /** + * watt per square metre kelvin to the fourth power + */ + case REC20_WATT_PER_SQUARE_METRE_KELVIN_TO_THE_FOURTH_POWER = 'D56'; + + /** + * watt per steradian + */ + case REC20_WATT_PER_STERADIAN = 'D57'; + + /** + * watt per steradian square metre + */ + case REC20_WATT_PER_STERADIAN_SQUARE_METRE = 'D58'; + + /** + * weber per metre + */ + case REC20_WEBER_PER_METRE = 'D59'; + + /** + * roentgen per second + */ + case REC20_ROENTGEN_PER_SECOND = 'D6'; + + /** + * weber per millimetre + */ + case REC20_WEBER_PER_MILLIMETRE = 'D60'; + + /** + * minute [unit of angle] + */ + case REC20_MINUTE_UNIT_OF_ANGLE = 'D61'; + + /** + * second [unit of angle] + */ + case REC20_SECOND_UNIT_OF_ANGLE = 'D62'; + + /** + * book + */ + case REC20_BOOK = 'D63'; + + /** + * round + */ + case REC20_ROUND = 'D65'; + + /** + * number of words + */ + case REC20_NUMBER_OF_WORDS = 'D68'; + + /** + * inch to the fourth power + */ + case REC20_INCH_TO_THE_FOURTH_POWER = 'D69'; + + /** + * joule square metre + */ + case REC20_JOULE_SQUARE_METRE = 'D73'; + + /** + * kilogram per mole + */ + case REC20_KILOGRAM_PER_MOLE = 'D74'; + + /** + * megacoulomb + */ + case REC20_MEGACOULOMB = 'D77'; + + /** + * megajoule per second + */ + case REC20_MEGAJOULE_PER_SECOND = 'D78'; + + /** + * microwatt + */ + case REC20_MICROWATT = 'D80'; + + /** + * microtesla + */ + case REC20_MICROTESLA = 'D81'; + + /** + * microvolt + */ + case REC20_MICROVOLT = 'D82'; + + /** + * millinewton metre + */ + case REC20_MILLINEWTON_METRE = 'D83'; + + /** + * microwatt per square metre + */ + case REC20_MICROWATT_PER_SQUARE_METRE = 'D85'; + + /** + * millicoulomb + */ + case REC20_MILLICOULOMB = 'D86'; + + /** + * millimole per kilogram + */ + case REC20_MILLIMOLE_PER_KILOGRAM = 'D87'; + + /** + * millicoulomb per cubic metre + */ + case REC20_MILLICOULOMB_PER_CUBIC_METRE = 'D88'; + + /** + * millicoulomb per square metre + */ + case REC20_MILLICOULOMB_PER_SQUARE_METRE = 'D89'; + + /** + * rem + */ + case REC20_REM = 'D91'; + + /** + * second per cubic metre + */ + case REC20_SECOND_PER_CUBIC_METRE = 'D93'; + + /** + * second per cubic metre radian + */ + case REC20_SECOND_PER_CUBIC_METRE_RADIAN = 'D94'; + + /** + * joule per gram + */ + case REC20_JOULE_PER_GRAM = 'D95'; + + /** + * decare + */ + case REC20_DECARE = 'DAA'; + + /** + * ten day + */ + case REC20_TEN_DAY = 'DAD'; + + /** + * day + */ + case REC20_DAY = 'DAY'; + + /** + * dry pound + */ + case REC20_DRY_POUND = 'DB'; + + /** + * degree [unit of angle] + */ + case REC20_DEGREE_UNIT_OF_ANGLE = 'DD'; + + /** + * decade + */ + case REC20_DECADE = 'DEC'; + + /** + * decigram + */ + case REC20_DECIGRAM = 'DG'; + + /** + * decagram + */ + case REC20_DECAGRAM = 'DJ'; + + /** + * decilitre + */ + case REC20_DECILITRE = 'DLT'; + + /** + * cubic decametre + */ + case REC20_CUBIC_DECAMETRE = 'DMA'; + + /** + * square decimetre + */ + case REC20_SQUARE_DECIMETRE = 'DMK'; + + /** + * standard kilolitre + */ + case REC20_STANDARD_KILOLITRE = 'DMO'; + + /** + * cubic decimetre + */ + case REC20_CUBIC_DECIMETRE = 'DMQ'; + + /** + * decimetre + */ + case REC20_DECIMETRE = 'DMT'; + + /** + * decinewton metre + */ + case REC20_DECINEWTON_METRE = 'DN'; + + /** + * dozen piece + */ + case REC20_DOZEN_PIECE = 'DPC'; + + /** + * dozen pair + */ + case REC20_DOZEN_PAIR = 'DPR'; + + /** + * displacement tonnage + */ + case REC20_DISPLACEMENT_TONNAGE = 'DPT'; + + /** + * dram (US) + */ + case REC20_DRAM_US = 'DRA'; + + /** + * dram (UK) + */ + case REC20_DRAM_UK = 'DRI'; + + /** + * dozen roll + */ + case REC20_DOZEN_ROLL = 'DRL'; + + /** + * dry ton + */ + case REC20_DRY_TON = 'DT'; + + /** + * decitonne + */ + case REC20_DECITONNE = 'DTN'; + + /** + * pennyweight + */ + case REC20_PENNYWEIGHT = 'DWT'; + + /** + * dozen + */ + case REC20_DOZEN = 'DZN'; + + /** + * dozen pack + */ + case REC20_DOZEN_PACK = 'DZP'; + + /** + * newton per square centimetre + */ + case REC20_NEWTON_PER_SQUARE_CENTIMETRE = 'E01'; + + /** + * megawatt hour per hour + */ + case REC20_MEGAWATT_HOUR_PER_HOUR = 'E07'; + + /** + * megawatt per hertz + */ + case REC20_MEGAWATT_PER_HERTZ = 'E08'; + + /** + * milliampere hour + */ + case REC20_MILLIAMPERE_HOUR = 'E09'; + + /** + * degree day + */ + case REC20_DEGREE_DAY = 'E10'; + + /** + * mille + */ + case REC20_MILLE = 'E12'; + + /** + * kilocalorie (international table) + */ + case REC20_KILOCALORIE_INTERNATIONAL_TABLE = 'E14'; + + /** + * kilocalorie (thermochemical) per hour + */ + case REC20_KILOCALORIE_THERMOCHEMICAL_PER_HOUR = 'E15'; + + /** + * million Btu(IT) per hour + */ + case REC20_MILLION_BTUIT_PER_HOUR = 'E16'; + + /** + * cubic foot per second + */ + case REC20_CUBIC_FOOT_PER_SECOND = 'E17'; + + /** + * tonne per hour + */ + case REC20_TONNE_PER_HOUR = 'E18'; + + /** + * ping + */ + case REC20_PING = 'E19'; + + /** + * megabit per second + */ + case REC20_MEGABIT_PER_SECOND = 'E20'; + + /** + * shares + */ + case REC20_SHARES = 'E21'; + + /** + * TEU + */ + case REC20_TEU = 'E22'; + + /** + * tyre + */ + case REC20_TYRE = 'E23'; + + /** + * active unit + */ + case REC20_ACTIVE_UNIT = 'E25'; + + /** + * dose + */ + case REC20_DOSE = 'E27'; + + /** + * air dry ton + */ + case REC20_AIR_DRY_TON = 'E28'; + + /** + * strand + */ + case REC20_STRAND = 'E30'; + + /** + * square metre per litre + */ + case REC20_SQUARE_METRE_PER_LITRE = 'E31'; + + /** + * litre per hour + */ + case REC20_LITRE_PER_HOUR = 'E32'; + + /** + * foot per thousand + */ + case REC20_FOOT_PER_THOUSAND = 'E33'; + + /** + * gigabyte + */ + case REC20_GIGABYTE = 'E34'; + + /** + * terabyte + */ + case REC20_TERABYTE = 'E35'; + + /** + * petabyte + */ + case REC20_PETABYTE = 'E36'; + + /** + * pixel + */ + case REC20_PIXEL = 'E37'; + + /** + * megapixel + */ + case REC20_MEGAPIXEL = 'E38'; + + /** + * dots per inch + */ + case REC20_DOTS_PER_INCH = 'E39'; + + /** + * gross kilogram + */ + case REC20_GROSS_KILOGRAM = 'E4'; + + /** + * part per hundred thousand + */ + case REC20_PART_PER_HUNDRED_THOUSAND = 'E40'; + + /** + * kilogram-force per square millimetre + */ + case REC20_KILOGRAMFORCE_PER_SQUARE_MILLIMETRE = 'E41'; + + /** + * kilogram-force per square centimetre + */ + case REC20_KILOGRAMFORCE_PER_SQUARE_CENTIMETRE = 'E42'; + + /** + * joule per square centimetre + */ + case REC20_JOULE_PER_SQUARE_CENTIMETRE = 'E43'; + + /** + * kilogram-force metre per square centimetre + */ + case REC20_KILOGRAMFORCE_METRE_PER_SQUARE_CENTIMETRE = 'E44'; + + /** + * milliohm + */ + case REC20_MILLIOHM = 'E45'; + + /** + * kilowatt hour per cubic metre + */ + case REC20_KILOWATT_HOUR_PER_CUBIC_METRE = 'E46'; + + /** + * kilowatt hour per kelvin + */ + case REC20_KILOWATT_HOUR_PER_KELVIN = 'E47'; + + /** + * service unit + */ + case REC20_SERVICE_UNIT = 'E48'; + + /** + * working day + */ + case REC20_WORKING_DAY = 'E49'; + + /** + * accounting unit + */ + case REC20_ACCOUNTING_UNIT = 'E50'; + + /** + * job + */ + case REC20_JOB = 'E51'; + + /** + * run foot + */ + case REC20_RUN_FOOT = 'E52'; + + /** + * test + */ + case REC20_TEST = 'E53'; + + /** + * trip + */ + case REC20_TRIP = 'E54'; + + /** + * use + */ + case REC20_USE = 'E55'; + + /** + * well + */ + case REC20_WELL = 'E56'; + + /** + * zone + */ + case REC20_ZONE = 'E57'; + + /** + * exabit per second + */ + case REC20_EXABIT_PER_SECOND = 'E58'; + + /** + * exbibyte + */ + case REC20_EXBIBYTE = 'E59'; + + /** + * pebibyte + */ + case REC20_PEBIBYTE = 'E60'; + + /** + * tebibyte + */ + case REC20_TEBIBYTE = 'E61'; + + /** + * gibibyte + */ + case REC20_GIBIBYTE = 'E62'; + + /** + * mebibyte + */ + case REC20_MEBIBYTE = 'E63'; + + /** + * kibibyte + */ + case REC20_KIBIBYTE = 'E64'; + + /** + * exbibit per metre + */ + case REC20_EXBIBIT_PER_METRE = 'E65'; + + /** + * exbibit per square metre + */ + case REC20_EXBIBIT_PER_SQUARE_METRE = 'E66'; + + /** + * exbibit per cubic metre + */ + case REC20_EXBIBIT_PER_CUBIC_METRE = 'E67'; + + /** + * gigabyte per second + */ + case REC20_GIGABYTE_PER_SECOND = 'E68'; + + /** + * gibibit per metre + */ + case REC20_GIBIBIT_PER_METRE = 'E69'; + + /** + * gibibit per square metre + */ + case REC20_GIBIBIT_PER_SQUARE_METRE = 'E70'; + + /** + * gibibit per cubic metre + */ + case REC20_GIBIBIT_PER_CUBIC_METRE = 'E71'; + + /** + * kibibit per metre + */ + case REC20_KIBIBIT_PER_METRE = 'E72'; + + /** + * kibibit per square metre + */ + case REC20_KIBIBIT_PER_SQUARE_METRE = 'E73'; + + /** + * kibibit per cubic metre + */ + case REC20_KIBIBIT_PER_CUBIC_METRE = 'E74'; + + /** + * mebibit per metre + */ + case REC20_MEBIBIT_PER_METRE = 'E75'; + + /** + * mebibit per square metre + */ + case REC20_MEBIBIT_PER_SQUARE_METRE = 'E76'; + + /** + * mebibit per cubic metre + */ + case REC20_MEBIBIT_PER_CUBIC_METRE = 'E77'; + + /** + * petabit + */ + case REC20_PETABIT = 'E78'; + + /** + * petabit per second + */ + case REC20_PETABIT_PER_SECOND = 'E79'; + + /** + * pebibit per metre + */ + case REC20_PEBIBIT_PER_METRE = 'E80'; + + /** + * pebibit per square metre + */ + case REC20_PEBIBIT_PER_SQUARE_METRE = 'E81'; + + /** + * pebibit per cubic metre + */ + case REC20_PEBIBIT_PER_CUBIC_METRE = 'E82'; + + /** + * terabit + */ + case REC20_TERABIT = 'E83'; + + /** + * terabit per second + */ + case REC20_TERABIT_PER_SECOND = 'E84'; + + /** + * tebibit per metre + */ + case REC20_TEBIBIT_PER_METRE = 'E85'; + + /** + * tebibit per cubic metre + */ + case REC20_TEBIBIT_PER_CUBIC_METRE = 'E86'; + + /** + * tebibit per square metre + */ + case REC20_TEBIBIT_PER_SQUARE_METRE = 'E87'; + + /** + * bit per metre + */ + case REC20_BIT_PER_METRE = 'E88'; + + /** + * bit per square metre + */ + case REC20_BIT_PER_SQUARE_METRE = 'E89'; + + /** + * reciprocal centimetre + */ + case REC20_RECIPROCAL_CENTIMETRE = 'E90'; + + /** + * reciprocal day + */ + case REC20_RECIPROCAL_DAY = 'E91'; + + /** + * cubic decimetre per hour + */ + case REC20_CUBIC_DECIMETRE_PER_HOUR = 'E92'; + + /** + * kilogram per hour + */ + case REC20_KILOGRAM_PER_HOUR = 'E93'; + + /** + * kilomole per second + */ + case REC20_KILOMOLE_PER_SECOND = 'E94'; + + /** + * mole per second + */ + case REC20_MOLE_PER_SECOND = 'E95'; + + /** + * degree per second + */ + case REC20_DEGREE_PER_SECOND = 'E96'; + + /** + * millimetre per degree Celcius metre + */ + case REC20_MILLIMETRE_PER_DEGREE_CELCIUS_METRE = 'E97'; + + /** + * degree Celsius per kelvin + */ + case REC20_DEGREE_CELSIUS_PER_KELVIN = 'E98'; + + /** + * hectopascal per bar + */ + case REC20_HECTOPASCAL_PER_BAR = 'E99'; + + /** + * each + */ + case REC20_EACH = 'EA'; + + /** + * electronic mail box + */ + case REC20_ELECTRONIC_MAIL_BOX = 'EB'; + + /** + * equivalent gallon + */ + case REC20_EQUIVALENT_GALLON = 'EQ'; + + /** + * bit per cubic metre + */ + case REC20_BIT_PER_CUBIC_METRE = 'F01'; + + /** + * kelvin per kelvin + */ + case REC20_KELVIN_PER_KELVIN = 'F02'; + + /** + * kilopascal per bar + */ + case REC20_KILOPASCAL_PER_BAR = 'F03'; + + /** + * millibar per bar + */ + case REC20_MILLIBAR_PER_BAR = 'F04'; + + /** + * megapascal per bar + */ + case REC20_MEGAPASCAL_PER_BAR = 'F05'; + + /** + * poise per bar + */ + case REC20_POISE_PER_BAR = 'F06'; + + /** + * pascal per bar + */ + case REC20_PASCAL_PER_BAR = 'F07'; + + /** + * milliampere per inch + */ + case REC20_MILLIAMPERE_PER_INCH = 'F08'; + + /** + * kelvin per hour + */ + case REC20_KELVIN_PER_HOUR = 'F10'; + + /** + * kelvin per minute + */ + case REC20_KELVIN_PER_MINUTE = 'F11'; + + /** + * kelvin per second + */ + case REC20_KELVIN_PER_SECOND = 'F12'; + + /** + * slug + */ + case REC20_SLUG = 'F13'; + + /** + * gram per kelvin + */ + case REC20_GRAM_PER_KELVIN = 'F14'; + + /** + * kilogram per kelvin + */ + case REC20_KILOGRAM_PER_KELVIN = 'F15'; + + /** + * milligram per kelvin + */ + case REC20_MILLIGRAM_PER_KELVIN = 'F16'; + + /** + * pound-force per foot + */ + case REC20_POUNDFORCE_PER_FOOT = 'F17'; + + /** + * kilogram square centimetre + */ + case REC20_KILOGRAM_SQUARE_CENTIMETRE = 'F18'; + + /** + * kilogram square millimetre + */ + case REC20_KILOGRAM_SQUARE_MILLIMETRE = 'F19'; + + /** + * pound inch squared + */ + case REC20_POUND_INCH_SQUARED = 'F20'; + + /** + * pound-force inch + */ + case REC20_POUNDFORCE_INCH = 'F21'; + + /** + * pound-force foot per ampere + */ + case REC20_POUNDFORCE_FOOT_PER_AMPERE = 'F22'; + + /** + * gram per cubic decimetre + */ + case REC20_GRAM_PER_CUBIC_DECIMETRE = 'F23'; + + /** + * kilogram per kilomol + */ + case REC20_KILOGRAM_PER_KILOMOL = 'F24'; + + /** + * gram per hertz + */ + case REC20_GRAM_PER_HERTZ = 'F25'; + + /** + * gram per day + */ + case REC20_GRAM_PER_DAY = 'F26'; + + /** + * gram per hour + */ + case REC20_GRAM_PER_HOUR = 'F27'; + + /** + * gram per minute + */ + case REC20_GRAM_PER_MINUTE = 'F28'; + + /** + * gram per second + */ + case REC20_GRAM_PER_SECOND = 'F29'; + + /** + * kilogram per day + */ + case REC20_KILOGRAM_PER_DAY = 'F30'; + + /** + * kilogram per minute + */ + case REC20_KILOGRAM_PER_MINUTE = 'F31'; + + /** + * milligram per day + */ + case REC20_MILLIGRAM_PER_DAY = 'F32'; + + /** + * milligram per minute + */ + case REC20_MILLIGRAM_PER_MINUTE = 'F33'; + + /** + * milligram per second + */ + case REC20_MILLIGRAM_PER_SECOND = 'F34'; + + /** + * gram per day kelvin + */ + case REC20_GRAM_PER_DAY_KELVIN = 'F35'; + + /** + * gram per hour kelvin + */ + case REC20_GRAM_PER_HOUR_KELVIN = 'F36'; + + /** + * gram per minute kelvin + */ + case REC20_GRAM_PER_MINUTE_KELVIN = 'F37'; + + /** + * gram per second kelvin + */ + case REC20_GRAM_PER_SECOND_KELVIN = 'F38'; + + /** + * kilogram per day kelvin + */ + case REC20_KILOGRAM_PER_DAY_KELVIN = 'F39'; + + /** + * kilogram per hour kelvin + */ + case REC20_KILOGRAM_PER_HOUR_KELVIN = 'F40'; + + /** + * kilogram per minute kelvin + */ + case REC20_KILOGRAM_PER_MINUTE_KELVIN = 'F41'; + + /** + * kilogram per second kelvin + */ + case REC20_KILOGRAM_PER_SECOND_KELVIN = 'F42'; + + /** + * milligram per day kelvin + */ + case REC20_MILLIGRAM_PER_DAY_KELVIN = 'F43'; + + /** + * milligram per hour kelvin + */ + case REC20_MILLIGRAM_PER_HOUR_KELVIN = 'F44'; + + /** + * milligram per minute kelvin + */ + case REC20_MILLIGRAM_PER_MINUTE_KELVIN = 'F45'; + + /** + * milligram per second kelvin + */ + case REC20_MILLIGRAM_PER_SECOND_KELVIN = 'F46'; + + /** + * newton per millimetre + */ + case REC20_NEWTON_PER_MILLIMETRE = 'F47'; + + /** + * pound-force per inch + */ + case REC20_POUNDFORCE_PER_INCH = 'F48'; + + /** + * rod [unit of distance] + */ + case REC20_ROD_UNIT_OF_DISTANCE = 'F49'; + + /** + * micrometre per kelvin + */ + case REC20_MICROMETRE_PER_KELVIN = 'F50'; + + /** + * centimetre per kelvin + */ + case REC20_CENTIMETRE_PER_KELVIN = 'F51'; + + /** + * metre per kelvin + */ + case REC20_METRE_PER_KELVIN = 'F52'; + + /** + * millimetre per kelvin + */ + case REC20_MILLIMETRE_PER_KELVIN = 'F53'; + + /** + * milliohm per metre + */ + case REC20_MILLIOHM_PER_METRE = 'F54'; + + /** + * ohm per mile (statute mile) + */ + case REC20_OHM_PER_MILE_STATUTE_MILE = 'F55'; + + /** + * ohm per kilometre + */ + case REC20_OHM_PER_KILOMETRE = 'F56'; + + /** + * milliampere per pound-force per square inch + */ + case REC20_MILLIAMPERE_PER_POUNDFORCE_PER_SQUARE_INCH = 'F57'; + + /** + * reciprocal bar + */ + case REC20_RECIPROCAL_BAR = 'F58'; + + /** + * milliampere per bar + */ + case REC20_MILLIAMPERE_PER_BAR = 'F59'; + + /** + * degree Celsius per bar + */ + case REC20_DEGREE_CELSIUS_PER_BAR = 'F60'; + + /** + * kelvin per bar + */ + case REC20_KELVIN_PER_BAR = 'F61'; + + /** + * gram per day bar + */ + case REC20_GRAM_PER_DAY_BAR = 'F62'; + + /** + * gram per hour bar + */ + case REC20_GRAM_PER_HOUR_BAR = 'F63'; + + /** + * gram per minute bar + */ + case REC20_GRAM_PER_MINUTE_BAR = 'F64'; + + /** + * gram per second bar + */ + case REC20_GRAM_PER_SECOND_BAR = 'F65'; + + /** + * kilogram per day bar + */ + case REC20_KILOGRAM_PER_DAY_BAR = 'F66'; + + /** + * kilogram per hour bar + */ + case REC20_KILOGRAM_PER_HOUR_BAR = 'F67'; + + /** + * kilogram per minute bar + */ + case REC20_KILOGRAM_PER_MINUTE_BAR = 'F68'; + + /** + * kilogram per second bar + */ + case REC20_KILOGRAM_PER_SECOND_BAR = 'F69'; + + /** + * milligram per day bar + */ + case REC20_MILLIGRAM_PER_DAY_BAR = 'F70'; + + /** + * milligram per hour bar + */ + case REC20_MILLIGRAM_PER_HOUR_BAR = 'F71'; + + /** + * milligram per minute bar + */ + case REC20_MILLIGRAM_PER_MINUTE_BAR = 'F72'; + + /** + * milligram per second bar + */ + case REC20_MILLIGRAM_PER_SECOND_BAR = 'F73'; + + /** + * gram per bar + */ + case REC20_GRAM_PER_BAR = 'F74'; + + /** + * milligram per bar + */ + case REC20_MILLIGRAM_PER_BAR = 'F75'; + + /** + * milliampere per millimetre + */ + case REC20_MILLIAMPERE_PER_MILLIMETRE = 'F76'; + + /** + * pascal second per kelvin + */ + case REC20_PASCAL_SECOND_PER_KELVIN = 'F77'; + + /** + * inch of water + */ + case REC20_INCH_OF_WATER = 'F78'; + + /** + * inch of mercury + */ + case REC20_INCH_OF_MERCURY = 'F79'; + + /** + * water horse power + */ + case REC20_WATER_HORSE_POWER = 'F80'; + + /** + * bar per kelvin + */ + case REC20_BAR_PER_KELVIN = 'F81'; + + /** + * hectopascal per kelvin + */ + case REC20_HECTOPASCAL_PER_KELVIN = 'F82'; + + /** + * kilopascal per kelvin + */ + case REC20_KILOPASCAL_PER_KELVIN = 'F83'; + + /** + * millibar per kelvin + */ + case REC20_MILLIBAR_PER_KELVIN = 'F84'; + + /** + * megapascal per kelvin + */ + case REC20_MEGAPASCAL_PER_KELVIN = 'F85'; + + /** + * poise per kelvin + */ + case REC20_POISE_PER_KELVIN = 'F86'; + + /** + * volt per litre minute + */ + case REC20_VOLT_PER_LITRE_MINUTE = 'F87'; + + /** + * newton centimetre + */ + case REC20_NEWTON_CENTIMETRE = 'F88'; + + /** + * newton metre per degree + */ + case REC20_NEWTON_METRE_PER_DEGREE = 'F89'; + + /** + * newton metre per ampere + */ + case REC20_NEWTON_METRE_PER_AMPERE = 'F90'; + + /** + * bar litre per second + */ + case REC20_BAR_LITRE_PER_SECOND = 'F91'; + + /** + * bar cubic metre per second + */ + case REC20_BAR_CUBIC_METRE_PER_SECOND = 'F92'; + + /** + * hectopascal litre per second + */ + case REC20_HECTOPASCAL_LITRE_PER_SECOND = 'F93'; + + /** + * hectopascal cubic metre per second + */ + case REC20_HECTOPASCAL_CUBIC_METRE_PER_SECOND = 'F94'; + + /** + * millibar litre per second + */ + case REC20_MILLIBAR_LITRE_PER_SECOND = 'F95'; + + /** + * millibar cubic metre per second + */ + case REC20_MILLIBAR_CUBIC_METRE_PER_SECOND = 'F96'; + + /** + * megapascal litre per second + */ + case REC20_MEGAPASCAL_LITRE_PER_SECOND = 'F97'; + + /** + * megapascal cubic metre per second + */ + case REC20_MEGAPASCAL_CUBIC_METRE_PER_SECOND = 'F98'; + + /** + * pascal litre per second + */ + case REC20_PASCAL_LITRE_PER_SECOND = 'F99'; + + /** + * degree Fahrenheit + */ + case REC20_DEGREE_FAHRENHEIT = 'FAH'; + + /** + * farad + */ + case REC20_FARAD = 'FAR'; + + /** + * fibre metre + */ + case REC20_FIBRE_METRE = 'FBM'; + + /** + * thousand cubic foot + */ + case REC20_THOUSAND_CUBIC_FOOT = 'FC'; + + /** + * hundred cubic metre + */ + case REC20_HUNDRED_CUBIC_METRE = 'FF'; + + /** + * micromole + */ + case REC20_MICROMOLE = 'FH'; + + /** + * failures in time + */ + case REC20_FAILURES_IN_TIME = 'FIT'; + + /** + * flake ton + */ + case REC20_FLAKE_TON = 'FL'; + + /** + * foot + */ + case REC20_FOOT = 'FOT'; + + /** + * pound per square foot + */ + case REC20_POUND_PER_SQUARE_FOOT = 'FP'; + + /** + * foot per minute + */ + case REC20_FOOT_PER_MINUTE = 'FR'; + + /** + * foot per second + */ + case REC20_FOOT_PER_SECOND = 'FS'; + + /** + * square foot + */ + case REC20_SQUARE_FOOT = 'FTK'; + + /** + * cubic foot + */ + case REC20_CUBIC_FOOT = 'FTQ'; + + /** + * pascal cubic metre per second + */ + case REC20_PASCAL_CUBIC_METRE_PER_SECOND = 'G01'; + + /** + * centimetre per bar + */ + case REC20_CENTIMETRE_PER_BAR = 'G04'; + + /** + * metre per bar + */ + case REC20_METRE_PER_BAR = 'G05'; + + /** + * millimetre per bar + */ + case REC20_MILLIMETRE_PER_BAR = 'G06'; + + /** + * square inch per second + */ + case REC20_SQUARE_INCH_PER_SECOND = 'G08'; + + /** + * square metre per second kelvin + */ + case REC20_SQUARE_METRE_PER_SECOND_KELVIN = 'G09'; + + /** + * stokes per kelvin + */ + case REC20_STOKES_PER_KELVIN = 'G10'; + + /** + * gram per cubic centimetre bar + */ + case REC20_GRAM_PER_CUBIC_CENTIMETRE_BAR = 'G11'; + + /** + * gram per cubic decimetre bar + */ + case REC20_GRAM_PER_CUBIC_DECIMETRE_BAR = 'G12'; + + /** + * gram per litre bar + */ + case REC20_GRAM_PER_LITRE_BAR = 'G13'; + + /** + * gram per cubic metre bar + */ + case REC20_GRAM_PER_CUBIC_METRE_BAR = 'G14'; + + /** + * gram per millilitre bar + */ + case REC20_GRAM_PER_MILLILITRE_BAR = 'G15'; + + /** + * kilogram per cubic centimetre bar + */ + case REC20_KILOGRAM_PER_CUBIC_CENTIMETRE_BAR = 'G16'; + + /** + * kilogram per litre bar + */ + case REC20_KILOGRAM_PER_LITRE_BAR = 'G17'; + + /** + * kilogram per cubic metre bar + */ + case REC20_KILOGRAM_PER_CUBIC_METRE_BAR = 'G18'; + + /** + * newton metre per kilogram + */ + case REC20_NEWTON_METRE_PER_KILOGRAM = 'G19'; + + /** + * US gallon per minute + */ + case REC20_US_GALLON_PER_MINUTE = 'G2'; + + /** + * pound-force foot per pound + */ + case REC20_POUNDFORCE_FOOT_PER_POUND = 'G20'; + + /** + * cup [unit of volume] + */ + case REC20_CUP_UNIT_OF_VOLUME = 'G21'; + + /** + * peck + */ + case REC20_PECK = 'G23'; + + /** + * tablespoon (US) + */ + case REC20_TABLESPOON_US = 'G24'; + + /** + * teaspoon (US) + */ + case REC20_TEASPOON_US = 'G25'; + + /** + * stere + */ + case REC20_STERE = 'G26'; + + /** + * cubic centimetre per kelvin + */ + case REC20_CUBIC_CENTIMETRE_PER_KELVIN = 'G27'; + + /** + * litre per kelvin + */ + case REC20_LITRE_PER_KELVIN = 'G28'; + + /** + * cubic metre per kelvin + */ + case REC20_CUBIC_METRE_PER_KELVIN = 'G29'; + + /** + * Imperial gallon per minute + */ + case REC20_IMPERIAL_GALLON_PER_MINUTE = 'G3'; + + /** + * millilitre per kelvin + */ + case REC20_MILLILITRE_PER_KELVIN = 'G30'; + + /** + * kilogram per cubic centimetre + */ + case REC20_KILOGRAM_PER_CUBIC_CENTIMETRE = 'G31'; + + /** + * ounce (avoirdupois) per cubic yard + */ + case REC20_OUNCE_AVOIRDUPOIS_PER_CUBIC_YARD = 'G32'; + + /** + * gram per cubic centimetre kelvin + */ + case REC20_GRAM_PER_CUBIC_CENTIMETRE_KELVIN = 'G33'; + + /** + * gram per cubic decimetre kelvin + */ + case REC20_GRAM_PER_CUBIC_DECIMETRE_KELVIN = 'G34'; + + /** + * gram per litre kelvin + */ + case REC20_GRAM_PER_LITRE_KELVIN = 'G35'; + + /** + * gram per cubic metre kelvin + */ + case REC20_GRAM_PER_CUBIC_METRE_KELVIN = 'G36'; + + /** + * gram per millilitre kelvin + */ + case REC20_GRAM_PER_MILLILITRE_KELVIN = 'G37'; + + /** + * kilogram per cubic centimetre kelvin + */ + case REC20_KILOGRAM_PER_CUBIC_CENTIMETRE_KELVIN = 'G38'; + + /** + * kilogram per litre kelvin + */ + case REC20_KILOGRAM_PER_LITRE_KELVIN = 'G39'; + + /** + * kilogram per cubic metre kelvin + */ + case REC20_KILOGRAM_PER_CUBIC_METRE_KELVIN = 'G40'; + + /** + * square metre per second bar + */ + case REC20_SQUARE_METRE_PER_SECOND_BAR = 'G41'; + + /** + * microsiemens per centimetre + */ + case REC20_MICROSIEMENS_PER_CENTIMETRE = 'G42'; + + /** + * microsiemens per metre + */ + case REC20_MICROSIEMENS_PER_METRE = 'G43'; + + /** + * nanosiemens per centimetre + */ + case REC20_NANOSIEMENS_PER_CENTIMETRE = 'G44'; + + /** + * nanosiemens per metre + */ + case REC20_NANOSIEMENS_PER_METRE = 'G45'; + + /** + * stokes per bar + */ + case REC20_STOKES_PER_BAR = 'G46'; + + /** + * cubic centimetre per day + */ + case REC20_CUBIC_CENTIMETRE_PER_DAY = 'G47'; + + /** + * cubic centimetre per hour + */ + case REC20_CUBIC_CENTIMETRE_PER_HOUR = 'G48'; + + /** + * cubic centimetre per minute + */ + case REC20_CUBIC_CENTIMETRE_PER_MINUTE = 'G49'; + + /** + * gallon (US) per hour + */ + case REC20_GALLON_US_PER_HOUR = 'G50'; + + /** + * litre per second + */ + case REC20_LITRE_PER_SECOND = 'G51'; + + /** + * cubic metre per day + */ + case REC20_CUBIC_METRE_PER_DAY = 'G52'; + + /** + * cubic metre per minute + */ + case REC20_CUBIC_METRE_PER_MINUTE = 'G53'; + + /** + * millilitre per day + */ + case REC20_MILLILITRE_PER_DAY = 'G54'; + + /** + * millilitre per hour + */ + case REC20_MILLILITRE_PER_HOUR = 'G55'; + + /** + * cubic inch per hour + */ + case REC20_CUBIC_INCH_PER_HOUR = 'G56'; + + /** + * cubic inch per minute + */ + case REC20_CUBIC_INCH_PER_MINUTE = 'G57'; + + /** + * cubic inch per second + */ + case REC20_CUBIC_INCH_PER_SECOND = 'G58'; + + /** + * milliampere per litre minute + */ + case REC20_MILLIAMPERE_PER_LITRE_MINUTE = 'G59'; + + /** + * volt per bar + */ + case REC20_VOLT_PER_BAR = 'G60'; + + /** + * cubic centimetre per day kelvin + */ + case REC20_CUBIC_CENTIMETRE_PER_DAY_KELVIN = 'G61'; + + /** + * cubic centimetre per hour kelvin + */ + case REC20_CUBIC_CENTIMETRE_PER_HOUR_KELVIN = 'G62'; + + /** + * cubic centimetre per minute kelvin + */ + case REC20_CUBIC_CENTIMETRE_PER_MINUTE_KELVIN = 'G63'; + + /** + * cubic centimetre per second kelvin + */ + case REC20_CUBIC_CENTIMETRE_PER_SECOND_KELVIN = 'G64'; + + /** + * litre per day kelvin + */ + case REC20_LITRE_PER_DAY_KELVIN = 'G65'; + + /** + * litre per hour kelvin + */ + case REC20_LITRE_PER_HOUR_KELVIN = 'G66'; + + /** + * litre per minute kelvin + */ + case REC20_LITRE_PER_MINUTE_KELVIN = 'G67'; + + /** + * litre per second kelvin + */ + case REC20_LITRE_PER_SECOND_KELVIN = 'G68'; + + /** + * cubic metre per day kelvin + */ + case REC20_CUBIC_METRE_PER_DAY_KELVIN = 'G69'; + + /** + * cubic metre per hour kelvin + */ + case REC20_CUBIC_METRE_PER_HOUR_KELVIN = 'G70'; + + /** + * cubic metre per minute kelvin + */ + case REC20_CUBIC_METRE_PER_MINUTE_KELVIN = 'G71'; + + /** + * cubic metre per second kelvin + */ + case REC20_CUBIC_METRE_PER_SECOND_KELVIN = 'G72'; + + /** + * millilitre per day kelvin + */ + case REC20_MILLILITRE_PER_DAY_KELVIN = 'G73'; + + /** + * millilitre per hour kelvin + */ + case REC20_MILLILITRE_PER_HOUR_KELVIN = 'G74'; + + /** + * millilitre per minute kelvin + */ + case REC20_MILLILITRE_PER_MINUTE_KELVIN = 'G75'; + + /** + * millilitre per second kelvin + */ + case REC20_MILLILITRE_PER_SECOND_KELVIN = 'G76'; + + /** + * millimetre to the fourth power + */ + case REC20_MILLIMETRE_TO_THE_FOURTH_POWER = 'G77'; + + /** + * cubic centimetre per day bar + */ + case REC20_CUBIC_CENTIMETRE_PER_DAY_BAR = 'G78'; + + /** + * cubic centimetre per hour bar + */ + case REC20_CUBIC_CENTIMETRE_PER_HOUR_BAR = 'G79'; + + /** + * cubic centimetre per minute bar + */ + case REC20_CUBIC_CENTIMETRE_PER_MINUTE_BAR = 'G80'; + + /** + * cubic centimetre per second bar + */ + case REC20_CUBIC_CENTIMETRE_PER_SECOND_BAR = 'G81'; + + /** + * litre per day bar + */ + case REC20_LITRE_PER_DAY_BAR = 'G82'; + + /** + * litre per hour bar + */ + case REC20_LITRE_PER_HOUR_BAR = 'G83'; + + /** + * litre per minute bar + */ + case REC20_LITRE_PER_MINUTE_BAR = 'G84'; + + /** + * litre per second bar + */ + case REC20_LITRE_PER_SECOND_BAR = 'G85'; + + /** + * cubic metre per day bar + */ + case REC20_CUBIC_METRE_PER_DAY_BAR = 'G86'; + + /** + * cubic metre per hour bar + */ + case REC20_CUBIC_METRE_PER_HOUR_BAR = 'G87'; + + /** + * cubic metre per minute bar + */ + case REC20_CUBIC_METRE_PER_MINUTE_BAR = 'G88'; + + /** + * cubic metre per second bar + */ + case REC20_CUBIC_METRE_PER_SECOND_BAR = 'G89'; + + /** + * millilitre per day bar + */ + case REC20_MILLILITRE_PER_DAY_BAR = 'G90'; + + /** + * millilitre per hour bar + */ + case REC20_MILLILITRE_PER_HOUR_BAR = 'G91'; + + /** + * millilitre per minute bar + */ + case REC20_MILLILITRE_PER_MINUTE_BAR = 'G92'; + + /** + * millilitre per second bar + */ + case REC20_MILLILITRE_PER_SECOND_BAR = 'G93'; + + /** + * cubic centimetre per bar + */ + case REC20_CUBIC_CENTIMETRE_PER_BAR = 'G94'; + + /** + * litre per bar + */ + case REC20_LITRE_PER_BAR = 'G95'; + + /** + * cubic metre per bar + */ + case REC20_CUBIC_METRE_PER_BAR = 'G96'; + + /** + * millilitre per bar + */ + case REC20_MILLILITRE_PER_BAR = 'G97'; + + /** + * microhenry per kiloohm + */ + case REC20_MICROHENRY_PER_KILOOHM = 'G98'; + + /** + * microhenry per ohm + */ + case REC20_MICROHENRY_PER_OHM = 'G99'; + + /** + * gallon (US) per day + */ + case REC20_GALLON_US_PER_DAY = 'GB'; + + /** + * gigabecquerel + */ + case REC20_GIGABECQUEREL = 'GBQ'; + + /** + * gram, dry weight + */ + case REC20_GRAM_DRY_WEIGHT = 'GDW'; + + /** + * pound per gallon (US) + */ + case REC20_POUND_PER_GALLON_US = 'GE'; + + /** + * gram per metre (gram per 100 centimetres) + */ + case REC20_GRAM_PER_METRE_GRAM_PER_100_CENTIMETRES = 'GF'; + + /** + * gram of fissile isotope + */ + case REC20_GRAM_OF_FISSILE_ISOTOPE = 'GFI'; + + /** + * great gross + */ + case REC20_GREAT_GROSS = 'GGR'; + + /** + * gill (US) + */ + case REC20_GILL_US = 'GIA'; + + /** + * gram, including container + */ + case REC20_GRAM_INCLUDING_CONTAINER = 'GIC'; + + /** + * gill (UK) + */ + case REC20_GILL_UK = 'GII'; + + /** + * gram, including inner packaging + */ + case REC20_GRAM_INCLUDING_INNER_PACKAGING = 'GIP'; + + /** + * gram per millilitre + */ + case REC20_GRAM_PER_MILLILITRE = 'GJ'; + + /** + * gram per litre + */ + case REC20_GRAM_PER_LITRE = 'GL'; + + /** + * dry gallon (US) + */ + case REC20_DRY_GALLON_US = 'GLD'; + + /** + * gallon (UK) + */ + case REC20_GALLON_UK = 'GLI'; + + /** + * gallon (US) + */ + case REC20_GALLON_US = 'GLL'; + + /** + * gram per square metre + */ + case REC20_GRAM_PER_SQUARE_METRE = 'GM'; + + /** + * milligram per square metre + */ + case REC20_MILLIGRAM_PER_SQUARE_METRE = 'GO'; + + /** + * milligram per cubic metre + */ + case REC20_MILLIGRAM_PER_CUBIC_METRE = 'GP'; + + /** + * microgram per cubic metre + */ + case REC20_MICROGRAM_PER_CUBIC_METRE = 'GQ'; + + /** + * gram + */ + case REC20_GRAM = 'GRM'; + + /** + * grain + */ + case REC20_GRAIN = 'GRN'; + + /** + * gross + */ + case REC20_GROSS = 'GRO'; + + /** + * gigajoule + */ + case REC20_GIGAJOULE = 'GV'; + + /** + * gigawatt hour + */ + case REC20_GIGAWATT_HOUR = 'GWH'; + + /** + * henry per kiloohm + */ + case REC20_HENRY_PER_KILOOHM = 'H03'; + + /** + * henry per ohm + */ + case REC20_HENRY_PER_OHM = 'H04'; + + /** + * millihenry per kiloohm + */ + case REC20_MILLIHENRY_PER_KILOOHM = 'H05'; + + /** + * millihenry per ohm + */ + case REC20_MILLIHENRY_PER_OHM = 'H06'; + + /** + * pascal second per bar + */ + case REC20_PASCAL_SECOND_PER_BAR = 'H07'; + + /** + * microbecquerel + */ + case REC20_MICROBECQUEREL = 'H08'; + + /** + * reciprocal year + */ + case REC20_RECIPROCAL_YEAR = 'H09'; + + /** + * reciprocal hour + */ + case REC20_RECIPROCAL_HOUR = 'H10'; + + /** + * reciprocal month + */ + case REC20_RECIPROCAL_MONTH = 'H11'; + + /** + * degree Celsius per hour + */ + case REC20_DEGREE_CELSIUS_PER_HOUR = 'H12'; + + /** + * degree Celsius per minute + */ + case REC20_DEGREE_CELSIUS_PER_MINUTE = 'H13'; + + /** + * degree Celsius per second + */ + case REC20_DEGREE_CELSIUS_PER_SECOND = 'H14'; + + /** + * square centimetre per gram + */ + case REC20_SQUARE_CENTIMETRE_PER_GRAM = 'H15'; + + /** + * square decametre + */ + case REC20_SQUARE_DECAMETRE = 'H16'; + + /** + * square hectometre + */ + case REC20_SQUARE_HECTOMETRE = 'H18'; + + /** + * cubic hectometre + */ + case REC20_CUBIC_HECTOMETRE = 'H19'; + + /** + * cubic kilometre + */ + case REC20_CUBIC_KILOMETRE = 'H20'; + + /** + * blank + */ + case REC20_BLANK = 'H21'; + + /** + * volt square inch per pound-force + */ + case REC20_VOLT_SQUARE_INCH_PER_POUNDFORCE = 'H22'; + + /** + * volt per inch + */ + case REC20_VOLT_PER_INCH = 'H23'; + + /** + * volt per microsecond + */ + case REC20_VOLT_PER_MICROSECOND = 'H24'; + + /** + * percent per kelvin + */ + case REC20_PERCENT_PER_KELVIN = 'H25'; + + /** + * ohm per metre + */ + case REC20_OHM_PER_METRE = 'H26'; + + /** + * degree per metre + */ + case REC20_DEGREE_PER_METRE = 'H27'; + + /** + * microfarad per kilometre + */ + case REC20_MICROFARAD_PER_KILOMETRE = 'H28'; + + /** + * microgram per litre + */ + case REC20_MICROGRAM_PER_LITRE = 'H29'; + + /** + * square micrometre (square micron) + */ + case REC20_SQUARE_MICROMETRE_SQUARE_MICRON = 'H30'; + + /** + * ampere per kilogram + */ + case REC20_AMPERE_PER_KILOGRAM = 'H31'; + + /** + * ampere squared second + */ + case REC20_AMPERE_SQUARED_SECOND = 'H32'; + + /** + * farad per kilometre + */ + case REC20_FARAD_PER_KILOMETRE = 'H33'; + + /** + * hertz metre + */ + case REC20_HERTZ_METRE = 'H34'; + + /** + * kelvin metre per watt + */ + case REC20_KELVIN_METRE_PER_WATT = 'H35'; + + /** + * megaohm per kilometre + */ + case REC20_MEGAOHM_PER_KILOMETRE = 'H36'; + + /** + * megaohm per metre + */ + case REC20_MEGAOHM_PER_METRE = 'H37'; + + /** + * megaampere + */ + case REC20_MEGAAMPERE = 'H38'; + + /** + * megahertz kilometre + */ + case REC20_MEGAHERTZ_KILOMETRE = 'H39'; + + /** + * newton per ampere + */ + case REC20_NEWTON_PER_AMPERE = 'H40'; + + /** + * newton metre watt to the power minus 0,5 + */ + case REC20_NEWTON_METRE_WATT_TO_THE_POWER_MINUS_05 = 'H41'; + + /** + * pascal per metre + */ + case REC20_PASCAL_PER_METRE = 'H42'; + + /** + * siemens per centimetre + */ + case REC20_SIEMENS_PER_CENTIMETRE = 'H43'; + + /** + * teraohm + */ + case REC20_TERAOHM = 'H44'; + + /** + * volt second per metre + */ + case REC20_VOLT_SECOND_PER_METRE = 'H45'; + + /** + * volt per second + */ + case REC20_VOLT_PER_SECOND = 'H46'; + + /** + * watt per cubic metre + */ + case REC20_WATT_PER_CUBIC_METRE = 'H47'; + + /** + * attofarad + */ + case REC20_ATTOFARAD = 'H48'; + + /** + * centimetre per hour + */ + case REC20_CENTIMETRE_PER_HOUR = 'H49'; + + /** + * reciprocal cubic centimetre + */ + case REC20_RECIPROCAL_CUBIC_CENTIMETRE = 'H50'; + + /** + * decibel per kilometre + */ + case REC20_DECIBEL_PER_KILOMETRE = 'H51'; + + /** + * decibel per metre + */ + case REC20_DECIBEL_PER_METRE = 'H52'; + + /** + * kilogram per bar + */ + case REC20_KILOGRAM_PER_BAR = 'H53'; + + /** + * kilogram per cubic decimetre kelvin + */ + case REC20_KILOGRAM_PER_CUBIC_DECIMETRE_KELVIN = 'H54'; + + /** + * kilogram per cubic decimetre bar + */ + case REC20_KILOGRAM_PER_CUBIC_DECIMETRE_BAR = 'H55'; + + /** + * kilogram per square metre second + */ + case REC20_KILOGRAM_PER_SQUARE_METRE_SECOND = 'H56'; + + /** + * inch per two pi radiant + */ + case REC20_INCH_PER_TWO_PI_RADIANT = 'H57'; + + /** + * metre per volt second + */ + case REC20_METRE_PER_VOLT_SECOND = 'H58'; + + /** + * square metre per newton + */ + case REC20_SQUARE_METRE_PER_NEWTON = 'H59'; + + /** + * cubic metre per cubic metre + */ + case REC20_CUBIC_METRE_PER_CUBIC_METRE = 'H60'; + + /** + * millisiemens per centimetre + */ + case REC20_MILLISIEMENS_PER_CENTIMETRE = 'H61'; + + /** + * millivolt per minute + */ + case REC20_MILLIVOLT_PER_MINUTE = 'H62'; + + /** + * milligram per square centimetre + */ + case REC20_MILLIGRAM_PER_SQUARE_CENTIMETRE = 'H63'; + + /** + * milligram per gram + */ + case REC20_MILLIGRAM_PER_GRAM = 'H64'; + + /** + * millilitre per cubic metre + */ + case REC20_MILLILITRE_PER_CUBIC_METRE = 'H65'; + + /** + * millimetre per year + */ + case REC20_MILLIMETRE_PER_YEAR = 'H66'; + + /** + * millimetre per hour + */ + case REC20_MILLIMETRE_PER_HOUR = 'H67'; + + /** + * millimole per gram + */ + case REC20_MILLIMOLE_PER_GRAM = 'H68'; + + /** + * picopascal per kilometre + */ + case REC20_PICOPASCAL_PER_KILOMETRE = 'H69'; + + /** + * picosecond + */ + case REC20_PICOSECOND = 'H70'; + + /** + * percent per month + */ + case REC20_PERCENT_PER_MONTH = 'H71'; + + /** + * percent per hectobar + */ + case REC20_PERCENT_PER_HECTOBAR = 'H72'; + + /** + * percent per decakelvin + */ + case REC20_PERCENT_PER_DECAKELVIN = 'H73'; + + /** + * watt per metre + */ + case REC20_WATT_PER_METRE = 'H74'; + + /** + * decapascal + */ + case REC20_DECAPASCAL = 'H75'; + + /** + * gram per millimetre + */ + case REC20_GRAM_PER_MILLIMETRE = 'H76'; + + /** + * module width + */ + case REC20_MODULE_WIDTH = 'H77'; + + /** + * French gauge + */ + case REC20_FRENCH_GAUGE = 'H79'; + + /** + * rack unit + */ + case REC20_RACK_UNIT = 'H80'; + + /** + * millimetre per minute + */ + case REC20_MILLIMETRE_PER_MINUTE = 'H81'; + + /** + * big point + */ + case REC20_BIG_POINT = 'H82'; + + /** + * litre per kilogram + */ + case REC20_LITRE_PER_KILOGRAM = 'H83'; + + /** + * gram millimetre + */ + case REC20_GRAM_MILLIMETRE = 'H84'; + + /** + * reciprocal week + */ + case REC20_RECIPROCAL_WEEK = 'H85'; + + /** + * piece + */ + case REC20_PIECE = 'H87'; + + /** + * megaohm kilometre + */ + case REC20_MEGAOHM_KILOMETRE = 'H88'; + + /** + * percent per ohm + */ + case REC20_PERCENT_PER_OHM = 'H89'; + + /** + * percent per degree + */ + case REC20_PERCENT_PER_DEGREE = 'H90'; + + /** + * percent per ten thousand + */ + case REC20_PERCENT_PER_TEN_THOUSAND = 'H91'; + + /** + * percent per one hundred thousand + */ + case REC20_PERCENT_PER_ONE_HUNDRED_THOUSAND = 'H92'; + + /** + * percent per hundred + */ + case REC20_PERCENT_PER_HUNDRED = 'H93'; + + /** + * percent per thousand + */ + case REC20_PERCENT_PER_THOUSAND = 'H94'; + + /** + * percent per volt + */ + case REC20_PERCENT_PER_VOLT = 'H95'; + + /** + * percent per bar + */ + case REC20_PERCENT_PER_BAR = 'H96'; + + /** + * percent per inch + */ + case REC20_PERCENT_PER_INCH = 'H98'; + + /** + * percent per metre + */ + case REC20_PERCENT_PER_METRE = 'H99'; + + /** + * hank + */ + case REC20_HANK = 'HA'; + + /** + * hectobar + */ + case REC20_HECTOBAR = 'HBA'; + + /** + * hundred boxes + */ + case REC20_HUNDRED_BOXES = 'HBX'; + + /** + * hundred count + */ + case REC20_HUNDRED_COUNT = 'HC'; + + /** + * hundred kilogram, dry weight + */ + case REC20_HUNDRED_KILOGRAM_DRY_WEIGHT = 'HDW'; + + /** + * head + */ + case REC20_HEAD = 'HEA'; + + /** + * hectogram + */ + case REC20_HECTOGRAM = 'HGM'; + + /** + * hundred cubic foot + */ + case REC20_HUNDRED_CUBIC_FOOT = 'HH'; + + /** + * hundred international unit + */ + case REC20_HUNDRED_INTERNATIONAL_UNIT = 'HIU'; + + /** + * hundred kilogram, net mass + */ + case REC20_HUNDRED_KILOGRAM_NET_MASS = 'HKM'; + + /** + * hectolitre + */ + case REC20_HECTOLITRE = 'HLT'; + + /** + * mile per hour (statute mile) + */ + case REC20_MILE_PER_HOUR_STATUTE_MILE = 'HM'; + + /** + * million cubic metre + */ + case REC20_MILLION_CUBIC_METRE = 'HMQ'; + + /** + * hectometre + */ + case REC20_HECTOMETRE = 'HMT'; + + /** + * hectolitre of pure alcohol + */ + case REC20_HECTOLITRE_OF_PURE_ALCOHOL = 'HPA'; + + /** + * hertz + */ + case REC20_HERTZ = 'HTZ'; + + /** + * hour + */ + case REC20_HOUR = 'HUR'; + + /** + * inch pound (pound inch) + */ + case REC20_INCH_POUND_POUND_INCH = 'IA'; + + /** + * person + */ + case REC20_PERSON = 'IE'; + + /** + * inch + */ + case REC20_INCH = 'INH'; + + /** + * square inch + */ + case REC20_SQUARE_INCH = 'INK'; + + /** + * cubic inch + */ + case REC20_CUBIC_INCH = 'INQ'; + + /** + * international sugar degree + */ + case REC20_INTERNATIONAL_SUGAR_DEGREE = 'ISD'; + + /** + * inch per second + */ + case REC20_INCH_PER_SECOND = 'IU'; + + /** + * international unit per gram + */ + case REC20_INTERNATIONAL_UNIT_PER_GRAM = 'IUG'; + + /** + * inch per second squared + */ + case REC20_INCH_PER_SECOND_SQUARED = 'IV'; + + /** + * percent per millimetre + */ + case REC20_PERCENT_PER_MILLIMETRE = 'J10'; + + /** + * per mille per psi + */ + case REC20_PER_MILLE_PER_PSI = 'J12'; + + /** + * degree API + */ + case REC20_DEGREE_API = 'J13'; + + /** + * degree Baume (origin scale) + */ + case REC20_DEGREE_BAUME_ORIGIN_SCALE = 'J14'; + + /** + * degree Baume (US heavy) + */ + case REC20_DEGREE_BAUME_US_HEAVY = 'J15'; + + /** + * degree Baume (US light) + */ + case REC20_DEGREE_BAUME_US_LIGHT = 'J16'; + + /** + * degree Balling + */ + case REC20_DEGREE_BALLING = 'J17'; + + /** + * degree Brix + */ + case REC20_DEGREE_BRIX = 'J18'; + + /** + * degree Fahrenheit hour square foot per British thermal unit + * (thermochemical) + */ + case REC20_DEGREE_FAHRENHEIT_HOUR_SQUARE_FOOT_PER_BRITISH_THERMAL_UNIT_THERMOCHEMICAL = 'J19'; + + /** + * joule per kilogram + */ + case REC20_JOULE_PER_KILOGRAM = 'J2'; + + /** + * degree Fahrenheit per kelvin + */ + case REC20_DEGREE_FAHRENHEIT_PER_KELVIN = 'J20'; + + /** + * degree Fahrenheit per bar + */ + case REC20_DEGREE_FAHRENHEIT_PER_BAR = 'J21'; + + /** + * degree Fahrenheit hour square foot per British thermal unit + * (international table) + */ + case REC20_DEGREE_FAHRENHEIT_HOUR_SQUARE_FOOT_PER_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE = 'J22'; + + /** + * degree Fahrenheit per hour + */ + case REC20_DEGREE_FAHRENHEIT_PER_HOUR = 'J23'; + + /** + * degree Fahrenheit per minute + */ + case REC20_DEGREE_FAHRENHEIT_PER_MINUTE = 'J24'; + + /** + * degree Fahrenheit per second + */ + case REC20_DEGREE_FAHRENHEIT_PER_SECOND = 'J25'; + + /** + * reciprocal degree Fahrenheit + */ + case REC20_RECIPROCAL_DEGREE_FAHRENHEIT = 'J26'; + + /** + * degree Oechsle + */ + case REC20_DEGREE_OECHSLE = 'J27'; + + /** + * degree Rankine per hour + */ + case REC20_DEGREE_RANKINE_PER_HOUR = 'J28'; + + /** + * degree Rankine per minute + */ + case REC20_DEGREE_RANKINE_PER_MINUTE = 'J29'; + + /** + * degree Rankine per second + */ + case REC20_DEGREE_RANKINE_PER_SECOND = 'J30'; + + /** + * degree Twaddell + */ + case REC20_DEGREE_TWADDELL = 'J31'; + + /** + * micropoise + */ + case REC20_MICROPOISE = 'J32'; + + /** + * microgram per kilogram + */ + case REC20_MICROGRAM_PER_KILOGRAM = 'J33'; + + /** + * microgram per cubic metre kelvin + */ + case REC20_MICROGRAM_PER_CUBIC_METRE_KELVIN = 'J34'; + + /** + * microgram per cubic metre bar + */ + case REC20_MICROGRAM_PER_CUBIC_METRE_BAR = 'J35'; + + /** + * microlitre per litre + */ + case REC20_MICROLITRE_PER_LITRE = 'J36'; + + /** + * baud + */ + case REC20_BAUD = 'J38'; + + /** + * British thermal unit (mean) + */ + case REC20_BRITISH_THERMAL_UNIT_MEAN = 'J39'; + + /** + * British thermal unit (international table) foot per hour square foot + * degree Fahrenheit + */ + case 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 + */ + case 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 + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_INCH_PER_SECOND_SQUAREFOOT_DEGREE_FAHRENHEIT = 'J42'; + + /** + * British thermal unit (international table) per pound degree Fahrenheit + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_POUND_DEGREE_FAHRENHEIT = 'J43'; + + /** + * British thermal unit (international table) per minute + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_MINUTE = 'J44'; + + /** + * British thermal unit (international table) per second + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SECOND = 'J45'; + + /** + * British thermal unit (thermochemical) foot per hour square foot + * degree Fahrenheit + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_FOOT_PER_HOUR_SQUAREFOOT_DEGREE_FAHRENHEIT = 'J46'; + + /** + * British thermal unit (thermochemical) per hour + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_HOUR = 'J47'; + + /** + * British thermal unit (thermochemical) inch per hour square foot + * degree Fahrenheit + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_INCH_PER_HOUR_SQUAREFOOT_DEGREE_FAHRENHEIT = 'J48'; + + /** + * British thermal unit (thermochemical) inch per second square foot + * degree Fahrenheit + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_INCH_PER_SECONDSQUARE_FOOT_DEGREE_FAHRENHEIT = 'J49'; + + /** + * British thermal unit (thermochemical) per pound degree Fahrenheit + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_POUND_DEGREE_FAHRENHEIT = 'J50'; + + /** + * British thermal unit (thermochemical) per minute + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_MINUTE = 'J51'; + + /** + * British thermal unit (thermochemical) per second + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SECOND = 'J52'; + + /** + * coulomb square metre per kilogram + */ + case REC20_COULOMB_SQUARE_METRE_PER_KILOGRAM = 'J53'; + + /** + * megabaud + */ + case REC20_MEGABAUD = 'J54'; + + /** + * watt second + */ + case REC20_WATT_SECOND = 'J55'; + + /** + * bar per bar + */ + case REC20_BAR_PER_BAR = 'J56'; + + /** + * barrel (UK petroleum) + */ + case REC20_BARREL_UK_PETROLEUM = 'J57'; + + /** + * barrel (UK petroleum) per minute + */ + case REC20_BARREL_UK_PETROLEUM_PER_MINUTE = 'J58'; + + /** + * barrel (UK petroleum) per day + */ + case REC20_BARREL_UK_PETROLEUM_PER_DAY = 'J59'; + + /** + * barrel (UK petroleum) per hour + */ + case REC20_BARREL_UK_PETROLEUM_PER_HOUR = 'J60'; + + /** + * barrel (UK petroleum) per second + */ + case REC20_BARREL_UK_PETROLEUM_PER_SECOND = 'J61'; + + /** + * barrel (US petroleum) per hour + */ + case REC20_BARREL_US_PETROLEUM_PER_HOUR = 'J62'; + + /** + * barrel (US petroleum) per second + */ + case REC20_BARREL_US_PETROLEUM_PER_SECOND = 'J63'; + + /** + * bushel (UK) per day + */ + case REC20_BUSHEL_UK_PER_DAY = 'J64'; + + /** + * bushel (UK) per hour + */ + case REC20_BUSHEL_UK_PER_HOUR = 'J65'; + + /** + * bushel (UK) per minute + */ + case REC20_BUSHEL_UK_PER_MINUTE = 'J66'; + + /** + * bushel (UK) per second + */ + case REC20_BUSHEL_UK_PER_SECOND = 'J67'; + + /** + * bushel (US dry) per day + */ + case REC20_BUSHEL_US_DRY_PER_DAY = 'J68'; + + /** + * bushel (US dry) per hour + */ + case REC20_BUSHEL_US_DRY_PER_HOUR = 'J69'; + + /** + * bushel (US dry) per minute + */ + case REC20_BUSHEL_US_DRY_PER_MINUTE = 'J70'; + + /** + * bushel (US dry) per second + */ + case REC20_BUSHEL_US_DRY_PER_SECOND = 'J71'; + + /** + * centinewton metre + */ + case REC20_CENTINEWTON_METRE = 'J72'; + + /** + * centipoise per kelvin + */ + case REC20_CENTIPOISE_PER_KELVIN = 'J73'; + + /** + * centipoise per bar + */ + case REC20_CENTIPOISE_PER_BAR = 'J74'; + + /** + * calorie (mean) + */ + case REC20_CALORIE_MEAN = 'J75'; + + /** + * calorie (international table) per gram degree Celsius + */ + case REC20_CALORIE_INTERNATIONAL_TABLE_PER_GRAM_DEGREE_CELSIUS = 'J76'; + + /** + * calorie (thermochemical) per centimetre second degree Celsius + */ + case REC20_CALORIE_THERMOCHEMICAL_PER_CENTIMETRE_SECOND_DEGREE_CELSIUS = 'J78'; + + /** + * calorie (thermochemical) per gram degree Celsius + */ + case REC20_CALORIE_THERMOCHEMICAL_PER_GRAM_DEGREE_CELSIUS = 'J79'; + + /** + * calorie (thermochemical) per minute + */ + case REC20_CALORIE_THERMOCHEMICAL_PER_MINUTE = 'J81'; + + /** + * calorie (thermochemical) per second + */ + case REC20_CALORIE_THERMOCHEMICAL_PER_SECOND = 'J82'; + + /** + * clo + */ + case REC20_CLO = 'J83'; + + /** + * centimetre per second kelvin + */ + case REC20_CENTIMETRE_PER_SECOND_KELVIN = 'J84'; + + /** + * centimetre per second bar + */ + case REC20_CENTIMETRE_PER_SECOND_BAR = 'J85'; + + /** + * cubic centimetre per cubic metre + */ + case REC20_CUBIC_CENTIMETRE_PER_CUBIC_METRE = 'J87'; + + /** + * cubic decimetre per day + */ + case REC20_CUBIC_DECIMETRE_PER_DAY = 'J90'; + + /** + * cubic decimetre per cubic metre + */ + case REC20_CUBIC_DECIMETRE_PER_CUBIC_METRE = 'J91'; + + /** + * cubic decimetre per minute + */ + case REC20_CUBIC_DECIMETRE_PER_MINUTE = 'J92'; + + /** + * cubic decimetre per second + */ + case REC20_CUBIC_DECIMETRE_PER_SECOND = 'J93'; + + /** + * ounce (UK fluid) per day + */ + case REC20_OUNCE_UK_FLUID_PER_DAY = 'J95'; + + /** + * ounce (UK fluid) per hour + */ + case REC20_OUNCE_UK_FLUID_PER_HOUR = 'J96'; + + /** + * ounce (UK fluid) per minute + */ + case REC20_OUNCE_UK_FLUID_PER_MINUTE = 'J97'; + + /** + * ounce (UK fluid) per second + */ + case REC20_OUNCE_UK_FLUID_PER_SECOND = 'J98'; + + /** + * ounce (US fluid) per day + */ + case REC20_OUNCE_US_FLUID_PER_DAY = 'J99'; + + /** + * joule per kelvin + */ + case REC20_JOULE_PER_KELVIN = 'JE'; + + /** + * megajoule per kilogram + */ + case REC20_MEGAJOULE_PER_KILOGRAM = 'JK'; + + /** + * megajoule per cubic metre + */ + case REC20_MEGAJOULE_PER_CUBIC_METRE = 'JM'; + + /** + * pipeline joint + */ + case REC20_PIPELINE_JOINT = 'JNT'; + + /** + * joule + */ + case REC20_JOULE = 'JOU'; + + /** + * hundred metre + */ + case REC20_HUNDRED_METRE = 'JPS'; + + /** + * number of jewels + */ + case REC20_NUMBER_OF_JEWELS = 'JWL'; + + /** + * kilowatt demand + */ + case REC20_KILOWATT_DEMAND = 'K1'; + + /** + * ounce (US fluid) per hour + */ + case REC20_OUNCE_US_FLUID_PER_HOUR = 'K10'; + + /** + * ounce (US fluid) per minute + */ + case REC20_OUNCE_US_FLUID_PER_MINUTE = 'K11'; + + /** + * ounce (US fluid) per second + */ + case REC20_OUNCE_US_FLUID_PER_SECOND = 'K12'; + + /** + * foot per degree Fahrenheit + */ + case REC20_FOOT_PER_DEGREE_FAHRENHEIT = 'K13'; + + /** + * foot per hour + */ + case REC20_FOOT_PER_HOUR = 'K14'; + + /** + * foot pound-force per hour + */ + case REC20_FOOT_POUNDFORCE_PER_HOUR = 'K15'; + + /** + * foot pound-force per minute + */ + case REC20_FOOT_POUNDFORCE_PER_MINUTE = 'K16'; + + /** + * foot per psi + */ + case REC20_FOOT_PER_PSI = 'K17'; + + /** + * foot per second degree Fahrenheit + */ + case REC20_FOOT_PER_SECOND_DEGREE_FAHRENHEIT = 'K18'; + + /** + * foot per second psi + */ + case REC20_FOOT_PER_SECOND_PSI = 'K19'; + + /** + * kilovolt ampere reactive demand + */ + case REC20_KILOVOLT_AMPERE_REACTIVE_DEMAND = 'K2'; + + /** + * reciprocal cubic foot + */ + case REC20_RECIPROCAL_CUBIC_FOOT = 'K20'; + + /** + * cubic foot per degree Fahrenheit + */ + case REC20_CUBIC_FOOT_PER_DEGREE_FAHRENHEIT = 'K21'; + + /** + * cubic foot per day + */ + case REC20_CUBIC_FOOT_PER_DAY = 'K22'; + + /** + * cubic foot per psi + */ + case REC20_CUBIC_FOOT_PER_PSI = 'K23'; + + /** + * gallon (UK) per day + */ + case REC20_GALLON_UK_PER_DAY = 'K26'; + + /** + * gallon (UK) per hour + */ + case REC20_GALLON_UK_PER_HOUR = 'K27'; + + /** + * gallon (UK) per second + */ + case REC20_GALLON_UK_PER_SECOND = 'K28'; + + /** + * kilovolt ampere reactive hour + */ + case REC20_KILOVOLT_AMPERE_REACTIVE_HOUR = 'K3'; + + /** + * gallon (US liquid) per second + */ + case REC20_GALLON_US_LIQUID_PER_SECOND = 'K30'; + + /** + * gram-force per square centimetre + */ + case REC20_GRAMFORCE_PER_SQUARE_CENTIMETRE = 'K31'; + + /** + * gill (UK) per day + */ + case REC20_GILL_UK_PER_DAY = 'K32'; + + /** + * gill (UK) per hour + */ + case REC20_GILL_UK_PER_HOUR = 'K33'; + + /** + * gill (UK) per minute + */ + case REC20_GILL_UK_PER_MINUTE = 'K34'; + + /** + * gill (UK) per second + */ + case REC20_GILL_UK_PER_SECOND = 'K35'; + + /** + * gill (US) per day + */ + case REC20_GILL_US_PER_DAY = 'K36'; + + /** + * gill (US) per hour + */ + case REC20_GILL_US_PER_HOUR = 'K37'; + + /** + * gill (US) per minute + */ + case REC20_GILL_US_PER_MINUTE = 'K38'; + + /** + * gill (US) per second + */ + case REC20_GILL_US_PER_SECOND = 'K39'; + + /** + * standard acceleration of free fall + */ + case REC20_STANDARD_ACCELERATION_OF_FREE_FALL = 'K40'; + + /** + * grain per gallon (US) + */ + case REC20_GRAIN_PER_GALLON_US = 'K41'; + + /** + * horsepower (boiler) + */ + case REC20_HORSEPOWER_BOILER = 'K42'; + + /** + * horsepower (electric) + */ + case REC20_HORSEPOWER_ELECTRIC = 'K43'; + + /** + * inch per degree Fahrenheit + */ + case REC20_INCH_PER_DEGREE_FAHRENHEIT = 'K45'; + + /** + * inch per psi + */ + case REC20_INCH_PER_PSI = 'K46'; + + /** + * inch per second degree Fahrenheit + */ + case REC20_INCH_PER_SECOND_DEGREE_FAHRENHEIT = 'K47'; + + /** + * inch per second psi + */ + case REC20_INCH_PER_SECOND_PSI = 'K48'; + + /** + * reciprocal cubic inch + */ + case REC20_RECIPROCAL_CUBIC_INCH = 'K49'; + + /** + * kilobaud + */ + case REC20_KILOBAUD = 'K50'; + + /** + * kilocalorie (mean) + */ + case REC20_KILOCALORIE_MEAN = 'K51'; + + /** + * kilocalorie (international table) per hour metre degree Celsius + */ + case REC20_KILOCALORIE_INTERNATIONAL_TABLE_PER_HOUR_METRE_DEGREE_CELSIUS = 'K52'; + + /** + * kilocalorie (thermochemical) + */ + case REC20_KILOCALORIE_THERMOCHEMICAL = 'K53'; + + /** + * kilocalorie (thermochemical) per minute + */ + case REC20_KILOCALORIE_THERMOCHEMICAL_PER_MINUTE = 'K54'; + + /** + * kilocalorie (thermochemical) per second + */ + case REC20_KILOCALORIE_THERMOCHEMICAL_PER_SECOND = 'K55'; + + /** + * kilomole per hour + */ + case REC20_KILOMOLE_PER_HOUR = 'K58'; + + /** + * kilomole per cubic metre kelvin + */ + case REC20_KILOMOLE_PER_CUBIC_METRE_KELVIN = 'K59'; + + /** + * kilolitre + */ + case REC20_KILOLITRE = 'K6'; + + /** + * kilomole per cubic metre bar + */ + case REC20_KILOMOLE_PER_CUBIC_METRE_BAR = 'K60'; + + /** + * kilomole per minute + */ + case REC20_KILOMOLE_PER_MINUTE = 'K61'; + + /** + * litre per litre + */ + case REC20_LITRE_PER_LITRE = 'K62'; + + /** + * reciprocal litre + */ + case REC20_RECIPROCAL_LITRE = 'K63'; + + /** + * pound (avoirdupois) per degree Fahrenheit + */ + case REC20_POUND_AVOIRDUPOIS_PER_DEGREE_FAHRENHEIT = 'K64'; + + /** + * pound (avoirdupois) square foot + */ + case REC20_POUND_AVOIRDUPOIS_SQUARE_FOOT = 'K65'; + + /** + * pound (avoirdupois) per day + */ + case REC20_POUND_AVOIRDUPOIS_PER_DAY = 'K66'; + + /** + * pound per foot hour + */ + case REC20_POUND_PER_FOOT_HOUR = 'K67'; + + /** + * pound per foot second + */ + case REC20_POUND_PER_FOOT_SECOND = 'K68'; + + /** + * pound (avoirdupois) per cubic foot degree Fahrenheit + */ + case REC20_POUND_AVOIRDUPOIS_PER_CUBIC_FOOT_DEGREE_FAHRENHEIT = 'K69'; + + /** + * pound (avoirdupois) per cubic foot psi + */ + case REC20_POUND_AVOIRDUPOIS_PER_CUBIC_FOOT_PSI = 'K70'; + + /** + * pound (avoirdupois) per gallon (UK) + */ + case REC20_POUND_AVOIRDUPOIS_PER_GALLON_UK = 'K71'; + + /** + * pound (avoirdupois) per hour degree Fahrenheit + */ + case REC20_POUND_AVOIRDUPOIS_PER_HOUR_DEGREE_FAHRENHEIT = 'K73'; + + /** + * pound (avoirdupois) per hour psi + */ + case REC20_POUND_AVOIRDUPOIS_PER_HOUR_PSI = 'K74'; + + /** + * pound (avoirdupois) per cubic inch degree Fahrenheit + */ + case REC20_POUND_AVOIRDUPOIS_PER_CUBIC_INCH_DEGREE_FAHRENHEIT = 'K75'; + + /** + * pound (avoirdupois) per cubic inch psi + */ + case REC20_POUND_AVOIRDUPOIS_PER_CUBIC_INCH_PSI = 'K76'; + + /** + * pound (avoirdupois) per psi + */ + case REC20_POUND_AVOIRDUPOIS_PER_PSI = 'K77'; + + /** + * pound (avoirdupois) per minute + */ + case REC20_POUND_AVOIRDUPOIS_PER_MINUTE = 'K78'; + + /** + * pound (avoirdupois) per minute degree Fahrenheit + */ + case REC20_POUND_AVOIRDUPOIS_PER_MINUTE_DEGREE_FAHRENHEIT = 'K79'; + + /** + * pound (avoirdupois) per minute psi + */ + case REC20_POUND_AVOIRDUPOIS_PER_MINUTE_PSI = 'K80'; + + /** + * pound (avoirdupois) per second + */ + case REC20_POUND_AVOIRDUPOIS_PER_SECOND = 'K81'; + + /** + * pound (avoirdupois) per second degree Fahrenheit + */ + case REC20_POUND_AVOIRDUPOIS_PER_SECOND_DEGREE_FAHRENHEIT = 'K82'; + + /** + * pound (avoirdupois) per second psi + */ + case REC20_POUND_AVOIRDUPOIS_PER_SECOND_PSI = 'K83'; + + /** + * pound per cubic yard + */ + case REC20_POUND_PER_CUBIC_YARD = 'K84'; + + /** + * pound-force per square foot + */ + case REC20_POUNDFORCE_PER_SQUARE_FOOT = 'K85'; + + /** + * pound-force per square inch degree Fahrenheit + */ + case REC20_POUNDFORCE_PER_SQUARE_INCH_DEGREE_FAHRENHEIT = 'K86'; + + /** + * psi cubic inch per second + */ + case REC20_PSI_CUBIC_INCH_PER_SECOND = 'K87'; + + /** + * psi litre per second + */ + case REC20_PSI_LITRE_PER_SECOND = 'K88'; + + /** + * psi cubic metre per second + */ + case REC20_PSI_CUBIC_METRE_PER_SECOND = 'K89'; + + /** + * psi cubic yard per second + */ + case REC20_PSI_CUBIC_YARD_PER_SECOND = 'K90'; + + /** + * pound-force second per square foot + */ + case REC20_POUNDFORCE_SECOND_PER_SQUARE_FOOT = 'K91'; + + /** + * pound-force second per square inch + */ + case REC20_POUNDFORCE_SECOND_PER_SQUARE_INCH = 'K92'; + + /** + * reciprocal psi + */ + case REC20_RECIPROCAL_PSI = 'K93'; + + /** + * quart (UK liquid) per day + */ + case REC20_QUART_UK_LIQUID_PER_DAY = 'K94'; + + /** + * quart (UK liquid) per hour + */ + case REC20_QUART_UK_LIQUID_PER_HOUR = 'K95'; + + /** + * quart (UK liquid) per minute + */ + case REC20_QUART_UK_LIQUID_PER_MINUTE = 'K96'; + + /** + * quart (UK liquid) per second + */ + case REC20_QUART_UK_LIQUID_PER_SECOND = 'K97'; + + /** + * quart (US liquid) per day + */ + case REC20_QUART_US_LIQUID_PER_DAY = 'K98'; + + /** + * quart (US liquid) per hour + */ + case REC20_QUART_US_LIQUID_PER_HOUR = 'K99'; + + /** + * cake + */ + case REC20_CAKE = 'KA'; + + /** + * katal + */ + case REC20_KATAL = 'KAT'; + + /** + * kilocharacter + */ + case REC20_KILOCHARACTER = 'KB'; + + /** + * kilobar + */ + case REC20_KILOBAR = 'KBA'; + + /** + * kilogram of choline chloride + */ + case REC20_KILOGRAM_OF_CHOLINE_CHLORIDE = 'KCC'; + + /** + * kilogram drained net weight + */ + case REC20_KILOGRAM_DRAINED_NET_WEIGHT = 'KDW'; + + /** + * kelvin + */ + case REC20_KELVIN = 'KEL'; + + /** + * kilogram + */ + case REC20_KILOGRAM = 'KGM'; + + /** + * kilogram per second + */ + case REC20_KILOGRAM_PER_SECOND = 'KGS'; + + /** + * kilogram of hydrogen peroxide + */ + case REC20_KILOGRAM_OF_HYDROGEN_PEROXIDE = 'KHY'; + + /** + * kilohertz + */ + case REC20_KILOHERTZ = 'KHZ'; + + /** + * kilogram per millimetre width + */ + case REC20_KILOGRAM_PER_MILLIMETRE_WIDTH = 'KI'; + + /** + * kilogram, including container + */ + case REC20_KILOGRAM_INCLUDING_CONTAINER = 'KIC'; + + /** + * kilogram, including inner packaging + */ + case REC20_KILOGRAM_INCLUDING_INNER_PACKAGING = 'KIP'; + + /** + * kilosegment + */ + case REC20_KILOSEGMENT = 'KJ'; + + /** + * kilojoule + */ + case REC20_KILOJOULE = 'KJO'; + + /** + * kilogram per metre + */ + case REC20_KILOGRAM_PER_METRE = 'KL'; + + /** + * lactic dry material percentage + */ + case REC20_LACTIC_DRY_MATERIAL_PERCENTAGE = 'KLK'; + + /** + * kilolux + */ + case REC20_KILOLUX = 'KLX'; + + /** + * kilogram of methylamine + */ + case REC20_KILOGRAM_OF_METHYLAMINE = 'KMA'; + + /** + * kilometre per hour + */ + case REC20_KILOMETRE_PER_HOUR = 'KMH'; + + /** + * square kilometre + */ + case REC20_SQUARE_KILOMETRE = 'KMK'; + + /** + * kilogram per cubic metre + */ + case REC20_KILOGRAM_PER_CUBIC_METRE = 'KMQ'; + + /** + * kilometre + */ + case REC20_KILOMETRE = 'KMT'; + + /** + * kilogram of nitrogen + */ + case REC20_KILOGRAM_OF_NITROGEN = 'KNI'; + + /** + * kilonewton per square metre + */ + case REC20_KILONEWTON_PER_SQUARE_METRE = 'KNM'; + + /** + * kilogram named substance + */ + case REC20_KILOGRAM_NAMED_SUBSTANCE = 'KNS'; + + /** + * knot + */ + case REC20_KNOT = 'KNT'; + + /** + * milliequivalence caustic potash per gram of product + */ + case REC20_MILLIEQUIVALENCE_CAUSTIC_POTASH_PER_GRAM_OF_PRODUCT = 'KO'; + + /** + * kilopascal + */ + case REC20_KILOPASCAL = 'KPA'; + + /** + * kilogram of potassium hydroxide (caustic potash) + */ + case REC20_KILOGRAM_OF_POTASSIUM_HYDROXIDE_CAUSTIC_POTASH = 'KPH'; + + /** + * kilogram of potassium oxide + */ + case REC20_KILOGRAM_OF_POTASSIUM_OXIDE = 'KPO'; + + /** + * kilogram of phosphorus pentoxide (phosphoric anhydride) + */ + case REC20_KILOGRAM_OF_PHOSPHORUS_PENTOXIDE_PHOSPHORIC_ANHYDRIDE = 'KPP'; + + /** + * kiloroentgen + */ + case REC20_KILOROENTGEN = 'KR'; + + /** + * kilogram of substance 90 % dry + */ + case REC20_KILOGRAM_OF_SUBSTANCE_90__DRY = 'KSD'; + + /** + * kilogram of sodium hydroxide (caustic soda) + */ + case REC20_KILOGRAM_OF_SODIUM_HYDROXIDE_CAUSTIC_SODA = 'KSH'; + + /** + * kit + */ + case REC20_KIT = 'KT'; + + /** + * kilotonne + */ + case REC20_KILOTONNE = 'KTN'; + + /** + * kilogram of uranium + */ + case REC20_KILOGRAM_OF_URANIUM = 'KUR'; + + /** + * kilovolt - ampere + */ + case REC20_KILOVOLT__AMPERE = 'KVA'; + + /** + * kilovar + */ + case REC20_KILOVAR = 'KVR'; + + /** + * kilovolt + */ + case REC20_KILOVOLT = 'KVT'; + + /** + * kilogram per millimetre + */ + case REC20_KILOGRAM_PER_MILLIMETRE = 'KW'; + + /** + * kilowatt hour + */ + case REC20_KILOWATT_HOUR = 'KWH'; + + /** + * Kilowatt hour per normalized cubic metre + */ + case REC20_KILOWATT_HOUR_PER_NORMALIZED_CUBIC_METRE = 'KWN'; + + /** + * kilogram of tungsten trioxide + */ + case REC20_KILOGRAM_OF_TUNGSTEN_TRIOXIDE = 'KWO'; + + /** + * Kilowatt hour per standard cubic metre + */ + case REC20_KILOWATT_HOUR_PER_STANDARD_CUBIC_METRE = 'KWS'; + + /** + * kilowatt + */ + case REC20_KILOWATT = 'KWT'; + + /** + * millilitre per kilogram + */ + case REC20_MILLILITRE_PER_KILOGRAM = 'KX'; + + /** + * quart (US liquid) per minute + */ + case REC20_QUART_US_LIQUID_PER_MINUTE = 'L10'; + + /** + * quart (US liquid) per second + */ + case REC20_QUART_US_LIQUID_PER_SECOND = 'L11'; + + /** + * metre per second kelvin + */ + case REC20_METRE_PER_SECOND_KELVIN = 'L12'; + + /** + * metre per second bar + */ + case REC20_METRE_PER_SECOND_BAR = 'L13'; + + /** + * square metre hour degree Celsius per kilocalorie (international table) + */ + case REC20_SQUARE_METRE_HOUR_DEGREE_CELSIUS_PER_KILOCALORIE_INTERNATIONAL_TABLE = 'L14'; + + /** + * millipascal second per kelvin + */ + case REC20_MILLIPASCAL_SECOND_PER_KELVIN = 'L15'; + + /** + * millipascal second per bar + */ + case REC20_MILLIPASCAL_SECOND_PER_BAR = 'L16'; + + /** + * milligram per cubic metre kelvin + */ + case REC20_MILLIGRAM_PER_CUBIC_METRE_KELVIN = 'L17'; + + /** + * milligram per cubic metre bar + */ + case REC20_MILLIGRAM_PER_CUBIC_METRE_BAR = 'L18'; + + /** + * millilitre per litre + */ + case REC20_MILLILITRE_PER_LITRE = 'L19'; + + /** + * litre per minute + */ + case REC20_LITRE_PER_MINUTE = 'L2'; + + /** + * reciprocal cubic millimetre + */ + case REC20_RECIPROCAL_CUBIC_MILLIMETRE = 'L20'; + + /** + * cubic millimetre per cubic metre + */ + case REC20_CUBIC_MILLIMETRE_PER_CUBIC_METRE = 'L21'; + + /** + * mole per hour + */ + case REC20_MOLE_PER_HOUR = 'L23'; + + /** + * mole per kilogram kelvin + */ + case REC20_MOLE_PER_KILOGRAM_KELVIN = 'L24'; + + /** + * mole per kilogram bar + */ + case REC20_MOLE_PER_KILOGRAM_BAR = 'L25'; + + /** + * mole per litre kelvin + */ + case REC20_MOLE_PER_LITRE_KELVIN = 'L26'; + + /** + * mole per litre bar + */ + case REC20_MOLE_PER_LITRE_BAR = 'L27'; + + /** + * mole per cubic metre kelvin + */ + case REC20_MOLE_PER_CUBIC_METRE_KELVIN = 'L28'; + + /** + * mole per cubic metre bar + */ + case REC20_MOLE_PER_CUBIC_METRE_BAR = 'L29'; + + /** + * mole per minute + */ + case REC20_MOLE_PER_MINUTE = 'L30'; + + /** + * milliroentgen aequivalent men + */ + case REC20_MILLIROENTGEN_AEQUIVALENT_MEN = 'L31'; + + /** + * nanogram per kilogram + */ + case REC20_NANOGRAM_PER_KILOGRAM = 'L32'; + + /** + * ounce (avoirdupois) per day + */ + case REC20_OUNCE_AVOIRDUPOIS_PER_DAY = 'L33'; + + /** + * ounce (avoirdupois) per hour + */ + case REC20_OUNCE_AVOIRDUPOIS_PER_HOUR = 'L34'; + + /** + * ounce (avoirdupois) per minute + */ + case REC20_OUNCE_AVOIRDUPOIS_PER_MINUTE = 'L35'; + + /** + * ounce (avoirdupois) per second + */ + case REC20_OUNCE_AVOIRDUPOIS_PER_SECOND = 'L36'; + + /** + * ounce (avoirdupois) per gallon (UK) + */ + case REC20_OUNCE_AVOIRDUPOIS_PER_GALLON_UK = 'L37'; + + /** + * ounce (avoirdupois) per gallon (US) + */ + case REC20_OUNCE_AVOIRDUPOIS_PER_GALLON_US = 'L38'; + + /** + * ounce (avoirdupois) per cubic inch + */ + case REC20_OUNCE_AVOIRDUPOIS_PER_CUBIC_INCH = 'L39'; + + /** + * ounce (avoirdupois)-force + */ + case REC20_OUNCE_AVOIRDUPOISFORCE = 'L40'; + + /** + * ounce (avoirdupois)-force inch + */ + case REC20_OUNCE_AVOIRDUPOISFORCE_INCH = 'L41'; + + /** + * picosiemens per metre + */ + case REC20_PICOSIEMENS_PER_METRE = 'L42'; + + /** + * peck (UK) + */ + case REC20_PECK_UK = 'L43'; + + /** + * peck (UK) per day + */ + case REC20_PECK_UK_PER_DAY = 'L44'; + + /** + * peck (UK) per hour + */ + case REC20_PECK_UK_PER_HOUR = 'L45'; + + /** + * peck (UK) per minute + */ + case REC20_PECK_UK_PER_MINUTE = 'L46'; + + /** + * peck (UK) per second + */ + case REC20_PECK_UK_PER_SECOND = 'L47'; + + /** + * peck (US dry) per day + */ + case REC20_PECK_US_DRY_PER_DAY = 'L48'; + + /** + * peck (US dry) per hour + */ + case REC20_PECK_US_DRY_PER_HOUR = 'L49'; + + /** + * peck (US dry) per minute + */ + case REC20_PECK_US_DRY_PER_MINUTE = 'L50'; + + /** + * peck (US dry) per second + */ + case REC20_PECK_US_DRY_PER_SECOND = 'L51'; + + /** + * psi per psi + */ + case REC20_PSI_PER_PSI = 'L52'; + + /** + * pint (UK) per day + */ + case REC20_PINT_UK_PER_DAY = 'L53'; + + /** + * pint (UK) per hour + */ + case REC20_PINT_UK_PER_HOUR = 'L54'; + + /** + * pint (UK) per minute + */ + case REC20_PINT_UK_PER_MINUTE = 'L55'; + + /** + * pint (UK) per second + */ + case REC20_PINT_UK_PER_SECOND = 'L56'; + + /** + * pint (US liquid) per day + */ + case REC20_PINT_US_LIQUID_PER_DAY = 'L57'; + + /** + * pint (US liquid) per hour + */ + case REC20_PINT_US_LIQUID_PER_HOUR = 'L58'; + + /** + * pint (US liquid) per minute + */ + case REC20_PINT_US_LIQUID_PER_MINUTE = 'L59'; + + /** + * pint (US liquid) per second + */ + case REC20_PINT_US_LIQUID_PER_SECOND = 'L60'; + + /** + * slug per day + */ + case REC20_SLUG_PER_DAY = 'L63'; + + /** + * slug per foot second + */ + case REC20_SLUG_PER_FOOT_SECOND = 'L64'; + + /** + * slug per cubic foot + */ + case REC20_SLUG_PER_CUBIC_FOOT = 'L65'; + + /** + * slug per hour + */ + case REC20_SLUG_PER_HOUR = 'L66'; + + /** + * slug per minute + */ + case REC20_SLUG_PER_MINUTE = 'L67'; + + /** + * slug per second + */ + case REC20_SLUG_PER_SECOND = 'L68'; + + /** + * tonne per kelvin + */ + case REC20_TONNE_PER_KELVIN = 'L69'; + + /** + * tonne per bar + */ + case REC20_TONNE_PER_BAR = 'L70'; + + /** + * tonne per day + */ + case REC20_TONNE_PER_DAY = 'L71'; + + /** + * tonne per day kelvin + */ + case REC20_TONNE_PER_DAY_KELVIN = 'L72'; + + /** + * tonne per day bar + */ + case REC20_TONNE_PER_DAY_BAR = 'L73'; + + /** + * tonne per hour kelvin + */ + case REC20_TONNE_PER_HOUR_KELVIN = 'L74'; + + /** + * tonne per hour bar + */ + case REC20_TONNE_PER_HOUR_BAR = 'L75'; + + /** + * tonne per cubic metre kelvin + */ + case REC20_TONNE_PER_CUBIC_METRE_KELVIN = 'L76'; + + /** + * tonne per cubic metre bar + */ + case REC20_TONNE_PER_CUBIC_METRE_BAR = 'L77'; + + /** + * tonne per minute + */ + case REC20_TONNE_PER_MINUTE = 'L78'; + + /** + * tonne per minute kelvin + */ + case REC20_TONNE_PER_MINUTE_KELVIN = 'L79'; + + /** + * tonne per minute bar + */ + case REC20_TONNE_PER_MINUTE_BAR = 'L80'; + + /** + * tonne per second + */ + case REC20_TONNE_PER_SECOND = 'L81'; + + /** + * tonne per second kelvin + */ + case REC20_TONNE_PER_SECOND_KELVIN = 'L82'; + + /** + * tonne per second bar + */ + case REC20_TONNE_PER_SECOND_BAR = 'L83'; + + /** + * ton (UK shipping) + */ + case REC20_TON_UK_SHIPPING = 'L84'; + + /** + * ton long per day + */ + case REC20_TON_LONG_PER_DAY = 'L85'; + + /** + * ton (US shipping) + */ + case REC20_TON_US_SHIPPING = 'L86'; + + /** + * ton short per degree Fahrenheit + */ + case REC20_TON_SHORT_PER_DEGREE_FAHRENHEIT = 'L87'; + + /** + * ton short per day + */ + case REC20_TON_SHORT_PER_DAY = 'L88'; + + /** + * ton short per hour degree Fahrenheit + */ + case REC20_TON_SHORT_PER_HOUR_DEGREE_FAHRENHEIT = 'L89'; + + /** + * ton short per hour psi + */ + case REC20_TON_SHORT_PER_HOUR_PSI = 'L90'; + + /** + * ton short per psi + */ + case REC20_TON_SHORT_PER_PSI = 'L91'; + + /** + * ton (UK long) per cubic yard + */ + case REC20_TON_UK_LONG_PER_CUBIC_YARD = 'L92'; + + /** + * ton (US short) per cubic yard + */ + case REC20_TON_US_SHORT_PER_CUBIC_YARD = 'L93'; + + /** + * ton-force (US short) + */ + case REC20_TONFORCE_US_SHORT = 'L94'; + + /** + * common year + */ + case REC20_COMMON_YEAR = 'L95'; + + /** + * sidereal year + */ + case REC20_SIDEREAL_YEAR = 'L96'; + + /** + * yard per degree Fahrenheit + */ + case REC20_YARD_PER_DEGREE_FAHRENHEIT = 'L98'; + + /** + * yard per psi + */ + case REC20_YARD_PER_PSI = 'L99'; + + /** + * pound per cubic inch + */ + case REC20_POUND_PER_CUBIC_INCH = 'LA'; + + /** + * lactose excess percentage + */ + case REC20_LACTOSE_EXCESS_PERCENTAGE = 'LAC'; + + /** + * pound + */ + case REC20_POUND = 'LBR'; + + /** + * troy pound (US) + */ + case REC20_TROY_POUND_US = 'LBT'; + + /** + * litre per day + */ + case REC20_LITRE_PER_DAY = 'LD'; + + /** + * leaf + */ + case REC20_LEAF = 'LEF'; + + /** + * linear foot + */ + case REC20_LINEAR_FOOT = 'LF'; + + /** + * labour hour + */ + case REC20_LABOUR_HOUR = 'LH'; + + /** + * link + */ + case REC20_LINK = 'LK'; + + /** + * linear metre + */ + case REC20_LINEAR_METRE = 'LM'; + + /** + * length + */ + case REC20_LENGTH = 'LN'; + + /** + * lot [unit of procurement] + */ + case REC20_LOT__UNIT_OF_PROCUREMENT = 'LO'; + + /** + * liquid pound + */ + case REC20_LIQUID_POUND = 'LP'; + + /** + * litre of pure alcohol + */ + case REC20_LITRE_OF_PURE_ALCOHOL = 'LPA'; + + /** + * layer + */ + case REC20_LAYER = 'LR'; + + /** + * lump sum + */ + case REC20_LUMP_SUM = 'LS'; + + /** + * ton (UK) or long ton (US) + */ + case REC20_TON_UK_OR_LONG_TON_US = 'LTN'; + + /** + * litre + */ + case REC20_LITRE = 'LTR'; + + /** + * metric ton, lubricating oil + */ + case REC20_METRIC_TON_LUBRICATING_OIL = 'LUB'; + + /** + * lumen + */ + case REC20_LUMEN = 'LUM'; + + /** + * lux + */ + case REC20_LUX = 'LUX'; + + /** + * linear yard + */ + case REC20_LINEAR_YARD = 'LY'; + + /** + * milligram per litre + */ + case REC20_MILLIGRAM_PER_LITRE = 'M1'; + + /** + * reciprocal cubic yard + */ + case REC20_RECIPROCAL_CUBIC_YARD = 'M10'; + + /** + * cubic yard per degree Fahrenheit + */ + case REC20_CUBIC_YARD_PER_DEGREE_FAHRENHEIT = 'M11'; + + /** + * cubic yard per day + */ + case REC20_CUBIC_YARD_PER_DAY = 'M12'; + + /** + * cubic yard per hour + */ + case REC20_CUBIC_YARD_PER_HOUR = 'M13'; + + /** + * cubic yard per psi + */ + case REC20_CUBIC_YARD_PER_PSI = 'M14'; + + /** + * cubic yard per minute + */ + case REC20_CUBIC_YARD_PER_MINUTE = 'M15'; + + /** + * cubic yard per second + */ + case REC20_CUBIC_YARD_PER_SECOND = 'M16'; + + /** + * kilohertz metre + */ + case REC20_KILOHERTZ_METRE = 'M17'; + + /** + * gigahertz metre + */ + case REC20_GIGAHERTZ_METRE = 'M18'; + + /** + * Beaufort + */ + case REC20_BEAUFORT = 'M19'; + + /** + * reciprocal megakelvin or megakelvin to the power minus one + */ + case REC20_RECIPROCAL_MEGAKELVIN_OR_MEGAKELVIN_TO_THE_POWER_MINUS_ONE = 'M20'; + + /** + * reciprocal kilovolt - ampere reciprocal hour + */ + case REC20_RECIPROCAL_KILOVOLT__AMPERE_RECIPROCAL_HOUR = 'M21'; + + /** + * millilitre per square centimetre minute + */ + case REC20_MILLILITRE_PER_SQUARE_CENTIMETRE_MINUTE = 'M22'; + + /** + * newton per centimetre + */ + case REC20_NEWTON_PER_CENTIMETRE = 'M23'; + + /** + * ohm kilometre + */ + case REC20_OHM_KILOMETRE = 'M24'; + + /** + * percent per degree Celsius + */ + case REC20_PERCENT_PER_DEGREE_CELSIUS = 'M25'; + + /** + * gigaohm per metre + */ + case REC20_GIGAOHM_PER_METRE = 'M26'; + + /** + * megahertz metre + */ + case REC20_MEGAHERTZ_METRE = 'M27'; + + /** + * kilogram per kilogram + */ + case REC20_KILOGRAM_PER_KILOGRAM = 'M29'; + + /** + * reciprocal volt - ampere reciprocal second + */ + case REC20_RECIPROCAL_VOLT__AMPERE_RECIPROCAL_SECOND = 'M30'; + + /** + * kilogram per kilometre + */ + case REC20_KILOGRAM_PER_KILOMETRE = 'M31'; + + /** + * pascal second per litre + */ + case REC20_PASCAL_SECOND_PER_LITRE = 'M32'; + + /** + * millimole per litre + */ + case REC20_MILLIMOLE_PER_LITRE = 'M33'; + + /** + * newton metre per square metre + */ + case REC20_NEWTON_METRE_PER_SQUARE_METRE = 'M34'; + + /** + * millivolt - ampere + */ + case REC20_MILLIVOLT__AMPERE = 'M35'; + + /** + * 30-day month + */ + case REC20_30DAY_MONTH = 'M36'; + + /** + * actual/360 + */ + case REC20_ACTUAL_360 = 'M37'; + + /** + * kilometre per second squared + */ + case REC20_KILOMETRE_PER_SECOND_SQUARED = 'M38'; + + /** + * centimetre per second squared + */ + case REC20_CENTIMETRE_PER_SECOND_SQUARED = 'M39'; + + /** + * monetary value + */ + case REC20_MONETARY_VALUE = 'M4'; + + /** + * yard per second squared + */ + case REC20_YARD_PER_SECOND_SQUARED = 'M40'; + + /** + * millimetre per second squared + */ + case REC20_MILLIMETRE_PER_SECOND_SQUARED = 'M41'; + + /** + * mile (statute mile) per second squared + */ + case REC20_MILE_STATUTE_MILE_PER_SECOND_SQUARED = 'M42'; + + /** + * mil + */ + case REC20_MIL = 'M43'; + + /** + * revolution + */ + case REC20_REVOLUTION = 'M44'; + + /** + * degree [unit of angle] per second squared + */ + case REC20_DEGREE_UNIT_OF_ANGLE_PER_SECOND_SQUARED = 'M45'; + + /** + * revolution per minute + */ + case REC20_REVOLUTION_PER_MINUTE = 'M46'; + + /** + * circular mil + */ + case REC20_CIRCULAR_MIL = 'M47'; + + /** + * square mile (based on U.S. survey foot) + */ + case REC20_SQUARE_MILE_BASED_ON_US_SURVEY_FOOT = 'M48'; + + /** + * chain (based on U.S. survey foot) + */ + case REC20_CHAIN_BASED_ON_US_SURVEY_FOOT = 'M49'; + + /** + * microcurie + */ + case REC20_MICROCURIE = 'M5'; + + /** + * furlong + */ + case REC20_FURLONG = 'M50'; + + /** + * foot (U.S. survey) + */ + case REC20_FOOT_US_SURVEY = 'M51'; + + /** + * mile (based on U.S. survey foot) + */ + case REC20_MILE_BASED_ON_US_SURVEY_FOOT = 'M52'; + + /** + * metre per pascal + */ + case REC20_METRE_PER_PASCAL = 'M53'; + + /** + * metre per radiant + */ + case REC20_METRE_PER_RADIANT = 'M55'; + + /** + * shake + */ + case REC20_SHAKE = 'M56'; + + /** + * mile per minute + */ + case REC20_MILE_PER_MINUTE = 'M57'; + + /** + * mile per second + */ + case REC20_MILE_PER_SECOND = 'M58'; + + /** + * metre per second pascal + */ + case REC20_METRE_PER_SECOND_PASCAL = 'M59'; + + /** + * metre per hour + */ + case REC20_METRE_PER_HOUR = 'M60'; + + /** + * inch per year + */ + case REC20_INCH_PER_YEAR = 'M61'; + + /** + * kilometre per second + */ + case REC20_KILOMETRE_PER_SECOND = 'M62'; + + /** + * inch per minute + */ + case REC20_INCH_PER_MINUTE = 'M63'; + + /** + * yard per second + */ + case REC20_YARD_PER_SECOND = 'M64'; + + /** + * yard per minute + */ + case REC20_YARD_PER_MINUTE = 'M65'; + + /** + * yard per hour + */ + case REC20_YARD_PER_HOUR = 'M66'; + + /** + * acre-foot (based on U.S. survey foot) + */ + case REC20_ACREFOOT_BASED_ON_US_SURVEY_FOOT = 'M67'; + + /** + * cord (128 ft3) + */ + case REC20_CORD_128_FT3 = 'M68'; + + /** + * cubic mile (UK statute) + */ + case REC20_CUBIC_MILE_UK_STATUTE = 'M69'; + + /** + * micro-inch + */ + case REC20_MICROINCH = 'M7'; + + /** + * ton, register + */ + case REC20_TON_REGISTER = 'M70'; + + /** + * cubic metre per pascal + */ + case REC20_CUBIC_METRE_PER_PASCAL = 'M71'; + + /** + * bel + */ + case REC20_BEL = 'M72'; + + /** + * kilogram per cubic metre pascal + */ + case REC20_KILOGRAM_PER_CUBIC_METRE_PASCAL = 'M73'; + + /** + * kilogram per pascal + */ + case REC20_KILOGRAM_PER_PASCAL = 'M74'; + + /** + * kilopound-force + */ + case REC20_KILOPOUNDFORCE = 'M75'; + + /** + * poundal + */ + case REC20_POUNDAL = 'M76'; + + /** + * kilogram metre per second squared + */ + case REC20_KILOGRAM_METRE_PER_SECOND_SQUARED = 'M77'; + + /** + * pond + */ + case REC20_POND = 'M78'; + + /** + * square foot per hour + */ + case REC20_SQUARE_FOOT_PER_HOUR = 'M79'; + + /** + * stokes per pascal + */ + case REC20_STOKES_PER_PASCAL = 'M80'; + + /** + * square centimetre per second + */ + case REC20_SQUARE_CENTIMETRE_PER_SECOND = 'M81'; + + /** + * square metre per second pascal + */ + case REC20_SQUARE_METRE_PER_SECOND_PASCAL = 'M82'; + + /** + * denier + */ + case REC20_DENIER = 'M83'; + + /** + * pound per yard + */ + case REC20_POUND_PER_YARD = 'M84'; + + /** + * ton, assay + */ + case REC20_TON_ASSAY = 'M85'; + + /** + * pfund + */ + case REC20_PFUND = 'M86'; + + /** + * kilogram per second pascal + */ + case REC20_KILOGRAM_PER_SECOND_PASCAL = 'M87'; + + /** + * tonne per month + */ + case REC20_TONNE_PER_MONTH = 'M88'; + + /** + * tonne per year + */ + case REC20_TONNE_PER_YEAR = 'M89'; + + /** + * million Btu per 1000 cubic foot + */ + case REC20_MILLION_BTU_PER_1000_CUBIC_FOOT = 'M9'; + + /** + * kilopound per hour + */ + case REC20_KILOPOUND_PER_HOUR = 'M90'; + + /** + * pound per pound + */ + case REC20_POUND_PER_POUND = 'M91'; + + /** + * pound-force foot + */ + case REC20_POUNDFORCE_FOOT = 'M92'; + + /** + * newton metre per radian + */ + case REC20_NEWTON_METRE_PER_RADIAN = 'M93'; + + /** + * kilogram metre + */ + case REC20_KILOGRAM_METRE = 'M94'; + + /** + * poundal foot + */ + case REC20_POUNDAL_FOOT = 'M95'; + + /** + * poundal inch + */ + case REC20_POUNDAL_INCH = 'M96'; + + /** + * dyne metre + */ + case REC20_DYNE_METRE = 'M97'; + + /** + * kilogram centimetre per second + */ + case REC20_KILOGRAM_CENTIMETRE_PER_SECOND = 'M98'; + + /** + * gram centimetre per second + */ + case REC20_GRAM_CENTIMETRE_PER_SECOND = 'M99'; + + /** + * megavolt ampere reactive hour + */ + case REC20_MEGAVOLT_AMPERE_REACTIVE_HOUR = 'MAH'; + + /** + * megalitre + */ + case REC20_MEGALITRE = 'MAL'; + + /** + * megametre + */ + case REC20_MEGAMETRE = 'MAM'; + + /** + * megavar + */ + case REC20_MEGAVAR = 'MAR'; + + /** + * megawatt + */ + case REC20_MEGAWATT = 'MAW'; + + /** + * thousand standard brick equivalent + */ + case REC20_THOUSAND_STANDARD_BRICK_EQUIVALENT = 'MBE'; + + /** + * thousand board foot + */ + case REC20_THOUSAND_BOARD_FOOT = 'MBF'; + + /** + * millibar + */ + case REC20_MILLIBAR = 'MBR'; + + /** + * microgram + */ + case REC20_MICROGRAM = 'MC'; + + /** + * millicurie + */ + case REC20_MILLICURIE = 'MCU'; + + /** + * air dry metric ton + */ + case REC20_AIR_DRY_METRIC_TON = 'MD'; + + /** + * milligram + */ + case REC20_MILLIGRAM = 'MGM'; + + /** + * megahertz + */ + case REC20_MEGAHERTZ = 'MHZ'; + + /** + * square mile (statute mile) + */ + case REC20_SQUARE_MILE_STATUTE_MILE = 'MIK'; + + /** + * thousand + */ + case REC20_THOUSAND = 'MIL'; + + /** + * minute [unit of time] + */ + case REC20_MINUTE_UNIT_OF_TIME = 'MIN'; + + /** + * million + */ + case REC20_MILLION = 'MIO'; + + /** + * million international unit + */ + case REC20_MILLION_INTERNATIONAL_UNIT = 'MIU'; + + /** + * milliard + */ + case REC20_MILLIARD = 'MLD'; + + /** + * millilitre + */ + case REC20_MILLILITRE = 'MLT'; + + /** + * square millimetre + */ + case REC20_SQUARE_MILLIMETRE = 'MMK'; + + /** + * cubic millimetre + */ + case REC20_CUBIC_MILLIMETRE = 'MMQ'; + + /** + * millimetre + */ + case REC20_MILLIMETRE = 'MMT'; + + /** + * kilogram, dry weight + */ + case REC20_KILOGRAM_DRY_WEIGHT = 'MND'; + + /** + * month + */ + case REC20_MONTH = 'MON'; + + /** + * megapascal + */ + case REC20_MEGAPASCAL = 'MPA'; + + /** + * cubic metre per hour + */ + case REC20_CUBIC_METRE_PER_HOUR = 'MQH'; + + /** + * cubic metre per second + */ + case REC20_CUBIC_METRE_PER_SECOND = 'MQS'; + + /** + * metre per second squared + */ + case REC20_METRE_PER_SECOND_SQUARED = 'MSK'; + + /** + * square metre + */ + case REC20_SQUARE_METRE = 'MTK'; + + /** + * cubic metre + */ + case REC20_CUBIC_METRE = 'MTQ'; + + /** + * metre + */ + case REC20_METRE = 'MTR'; + + /** + * metre per second + */ + case REC20_METRE_PER_SECOND = 'MTS'; + + /** + * megavolt - ampere + */ + case REC20_MEGAVOLT__AMPERE = 'MVA'; + + /** + * megawatt hour (1000 kW.h) + */ + case REC20_MEGAWATT_HOUR_1000KWH = 'MWH'; + + /** + * pen calorie + */ + case REC20_PEN_CALORIE = 'N1'; + + /** + * pound foot per second + */ + case REC20_POUND_FOOT_PER_SECOND = 'N10'; + + /** + * pound inch per second + */ + case REC20_POUND_INCH_PER_SECOND = 'N11'; + + /** + * Pferdestaerke + */ + case REC20_PFERDESTAERKE = 'N12'; + + /** + * centimetre of mercury (0 ºC) + */ + case REC20_CENTIMETRE_OF_MERCURY_0_C = 'N13'; + + /** + * centimetre of water (4 ºC) + */ + case REC20_CENTIMETRE_OF_WATER_4_C = 'N14'; + + /** + * foot of water (39.2 ºF) + */ + case REC20_FOOT_OF_WATER_392_F = 'N15'; + + /** + * inch of mercury (32 ºF) + */ + case REC20_INCH_OF_MERCURY_32_F = 'N16'; + + /** + * inch of mercury (60 ºF) + */ + case REC20_INCH_OF_MERCURY_60_F = 'N17'; + + /** + * inch of water (39.2 ºF) + */ + case REC20_INCH_OF_WATER_392_F = 'N18'; + + /** + * inch of water (60 ºF) + */ + case REC20_INCH_OF_WATER_60_F = 'N19'; + + /** + * kip per square inch + */ + case REC20_KIP_PER_SQUARE_INCH = 'N20'; + + /** + * poundal per square foot + */ + case REC20_POUNDAL_PER_SQUARE_FOOT = 'N21'; + + /** + * ounce (avoirdupois) per square inch + */ + case REC20_OUNCE_AVOIRDUPOIS_PER_SQUARE_INCH = 'N22'; + + /** + * conventional metre of water + */ + case REC20_CONVENTIONAL_METRE_OF_WATER = 'N23'; + + /** + * gram per square millimetre + */ + case REC20_GRAM_PER_SQUARE_MILLIMETRE = 'N24'; + + /** + * pound per square yard + */ + case REC20_POUND_PER_SQUARE_YARD = 'N25'; + + /** + * poundal per square inch + */ + case REC20_POUNDAL_PER_SQUARE_INCH = 'N26'; + + /** + * foot to the fourth power + */ + case REC20_FOOT_TO_THE_FOURTH_POWER = 'N27'; + + /** + * cubic decimetre per kilogram + */ + case REC20_CUBIC_DECIMETRE_PER_KILOGRAM = 'N28'; + + /** + * cubic foot per pound + */ + case REC20_CUBIC_FOOT_PER_POUND = 'N29'; + + /** + * print point + */ + case REC20_PRINT_POINT = 'N3'; + + /** + * cubic inch per pound + */ + case REC20_CUBIC_INCH_PER_POUND = 'N30'; + + /** + * kilonewton per metre + */ + case REC20_KILONEWTON_PER_METRE = 'N31'; + + /** + * poundal per inch + */ + case REC20_POUNDAL_PER_INCH = 'N32'; + + /** + * pound-force per yard + */ + case REC20_POUNDFORCE_PER_YARD = 'N33'; + + /** + * poundal second per square foot + */ + case REC20_POUNDAL_SECOND_PER_SQUARE_FOOT = 'N34'; + + /** + * poise per pascal + */ + case REC20_POISE_PER_PASCAL = 'N35'; + + /** + * newton second per square metre + */ + case REC20_NEWTON_SECOND_PER_SQUARE_METRE = 'N36'; + + /** + * kilogram per metre second + */ + case REC20_KILOGRAM_PER_METRE_SECOND = 'N37'; + + /** + * kilogram per metre minute + */ + case REC20_KILOGRAM_PER_METRE_MINUTE = 'N38'; + + /** + * kilogram per metre day + */ + case REC20_KILOGRAM_PER_METRE_DAY = 'N39'; + + /** + * kilogram per metre hour + */ + case REC20_KILOGRAM_PER_METRE_HOUR = 'N40'; + + /** + * gram per centimetre second + */ + case REC20_GRAM_PER_CENTIMETRE_SECOND = 'N41'; + + /** + * poundal second per square inch + */ + case REC20_POUNDAL_SECOND_PER_SQUARE_INCH = 'N42'; + + /** + * pound per foot minute + */ + case REC20_POUND_PER_FOOT_MINUTE = 'N43'; + + /** + * pound per foot day + */ + case REC20_POUND_PER_FOOT_DAY = 'N44'; + + /** + * cubic metre per second pascal + */ + case REC20_CUBIC_METRE_PER_SECOND_PASCAL = 'N45'; + + /** + * foot poundal + */ + case REC20_FOOT_POUNDAL = 'N46'; + + /** + * inch poundal + */ + case REC20_INCH_POUNDAL = 'N47'; + + /** + * watt per square centimetre + */ + case REC20_WATT_PER_SQUARE_CENTIMETRE = 'N48'; + + /** + * watt per square inch + */ + case REC20_WATT_PER_SQUARE_INCH = 'N49'; + + /** + * British thermal unit (international table) per square foot hour + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_FOOT_HOUR = 'N50'; + + /** + * British thermal unit (thermochemical) per square foot hour + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SQUARE_FOOT_HOUR = 'N51'; + + /** + * British thermal unit (thermochemical) per square foot minute + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SQUARE_FOOT_MINUTE = 'N52'; + + /** + * British thermal unit (international table) per square foot second + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_FOOT_SECOND = 'N53'; + + /** + * British thermal unit (thermochemical) per square foot second + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SQUARE_FOOT_SECOND = 'N54'; + + /** + * British thermal unit (international table) per square inch second + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_INCH_SECOND = 'N55'; + + /** + * calorie (thermochemical) per square centimetre minute + */ + case REC20_CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE_MINUTE = 'N56'; + + /** + * calorie (thermochemical) per square centimetre second + */ + case REC20_CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE_SECOND = 'N57'; + + /** + * British thermal unit (international table) per cubic foot + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_CUBIC_FOOT = 'N58'; + + /** + * British thermal unit (thermochemical) per cubic foot + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_CUBIC_FOOT = 'N59'; + + /** + * British thermal unit (international table) per degree Fahrenheit + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_DEGREE_FAHRENHEIT = 'N60'; + + /** + * British thermal unit (thermochemical) per degree Fahrenheit + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_DEGREE_FAHRENHEIT = 'N61'; + + /** + * British thermal unit (international table) per degree Rankine + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_DEGREE_RANKINE = 'N62'; + + /** + * British thermal unit (thermochemical) per degree Rankine + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_DEGREE_RANKINE = 'N63'; + + /** + * British thermal unit (thermochemical) per pound degree Rankine + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_POUND_DEGREE_RANKINE = 'N64'; + + /** + * kilocalorie (international table) per gram kelvin + */ + case REC20_KILOCALORIE_INTERNATIONAL_TABLE_PER_GRAM_KELVIN = 'N65'; + + /** + * British thermal unit (39 ºF) + */ + case REC20_BRITISH_THERMAL_UNIT_39_F = 'N66'; + + /** + * British thermal unit (59 ºF) + */ + case REC20_BRITISH_THERMAL_UNIT_59_F = 'N67'; + + /** + * British thermal unit (60 ºF) + */ + case REC20_BRITISH_THERMAL_UNIT_60_F = 'N68'; + + /** + * calorie (20 ºC) + */ + case REC20_CALORIE_20_C = 'N69'; + + /** + * quad (1015 BtuIT) + */ + case REC20_QUAD_1015_BTUIT = 'N70'; + + /** + * therm (EC) + */ + case REC20_THERM_EC = 'N71'; + + /** + * therm (U.S.) + */ + case REC20_THERM_US = 'N72'; + + /** + * British thermal unit (thermochemical) per pound + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_POUND = 'N73'; + + /** + * British thermal unit (international table) per hour square foot degree + * Fahrenheit + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT = 'N74'; + + /** + * British thermal unit (thermochemical) per hour square foot degree + * Fahrenheit + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT = 'N75'; + + /** + * British thermal unit (international table) per second square foot + * degree Fahrenheit + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SECOND_SQUARE_FOOT_DEGREE_FAHRENHEIT = 'N76'; + + /** + * British thermal unit (thermochemical) per second square foot degree + * Fahrenheit + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SECOND_SQUARE_FOOT_DEGREE_FAHRENHEIT = 'N77'; + + /** + * kilowatt per square metre kelvin + */ + case REC20_KILOWATT_PER_SQUARE_METRE_KELVIN = 'N78'; + + /** + * kelvin per pascal + */ + case REC20_KELVIN_PER_PASCAL = 'N79'; + + /** + * watt per metre degree Celsius + */ + case REC20_WATT_PER_METRE_DEGREE_CELSIUS = 'N80'; + + /** + * kilowatt per metre kelvin + */ + case REC20_KILOWATT_PER_METRE_KELVIN = 'N81'; + + /** + * kilowatt per metre degree Celsius + */ + case REC20_KILOWATT_PER_METRE_DEGREE_CELSIUS = 'N82'; + + /** + * metre per degree Celcius metre + */ + case REC20_METRE_PER_DEGREE_CELCIUS_METRE = 'N83'; + + /** + * degree Fahrenheit hour per British thermal unit (international table) + */ + case REC20_DEGREE_FAHRENHEIT_HOUR_PER_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE = 'N84'; + + /** + * degree Fahrenheit hour per British thermal unit (thermochemical) + */ + case REC20_DEGREE_FAHRENHEIT_HOUR_PER_BRITISH_THERMAL_UNIT_THERMOCHEMICAL = 'N85'; + + /** + * degree Fahrenheit second per British thermal unit (international + * table) + */ + case REC20_DEGREE_FAHRENHEIT_SECOND_PER_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE = 'N86'; + + /** + * degree Fahrenheit second per British thermal unit (thermochemical) + */ + case REC20_DEGREE_FAHRENHEIT_SECOND_PER_BRITISH_THERMAL_UNIT_THERMOCHEMICAL = 'N87'; + + /** + * degree Fahrenheit hour square foot per British thermal unit + * (international table) inch + */ + case 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 + */ + case REC20_DEGREE_FAHRENHEIT_HOUR_SQUARE_FOOT_PER_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_INCH = 'N89'; + + /** + * kilofarad + */ + case REC20_KILOFARAD = 'N90'; + + /** + * reciprocal joule + */ + case REC20_RECIPROCAL_JOULE = 'N91'; + + /** + * picosiemens + */ + case REC20_PICOSIEMENS = 'N92'; + + /** + * ampere per pascal + */ + case REC20_AMPERE_PER_PASCAL = 'N93'; + + /** + * franklin + */ + case REC20_FRANKLIN = 'N94'; + + /** + * ampere minute + */ + case REC20_AMPERE_MINUTE = 'N95'; + + /** + * biot + */ + case REC20_BIOT = 'N96'; + + /** + * gilbert + */ + case REC20_GILBERT = 'N97'; + + /** + * volt per pascal + */ + case REC20_VOLT_PER_PASCAL = 'N98'; + + /** + * picovolt + */ + case REC20_PICOVOLT = 'N99'; + + /** + * milligram per kilogram + */ + case REC20_MILLIGRAM_PER_KILOGRAM = 'NA'; + + /** + * number of articles + */ + case REC20_NUMBER_OF_ARTICLES = 'NAR'; + + /** + * number of cells + */ + case REC20_NUMBER_OF_CELLS = 'NCL'; + + /** + * newton + */ + case REC20_NEWTON = 'NEW'; + + /** + * message + */ + case REC20_MESSAGE = 'NF'; + + /** + * nil + */ + case REC20_NIL = 'NIL'; + + /** + * number of international units + */ + case REC20_NUMBER_OF_INTERNATIONAL_UNITS = 'NIU'; + + /** + * load + */ + case REC20_LOAD = 'NL'; + + /** + * Normalised cubic metre + */ + case REC20_NORMALISED_CUBIC_METRE = 'NM3'; + + /** + * nautical mile + */ + case REC20_NAUTICAL_MILE = 'NMI'; + + /** + * number of packs + */ + case REC20_NUMBER_OF_PACKS = 'NMP'; + + /** + * number of parts + */ + case REC20_NUMBER_OF_PARTS = 'NPT'; + + /** + * net ton + */ + case REC20_NET_TON = 'NT'; + + /** + * newton metre + */ + case REC20_NEWTON_METRE = 'NU'; + + /** + * part per thousand + */ + case REC20_PART_PER_THOUSAND = 'NX'; + + /** + * panel + */ + case REC20_PANEL = 'OA'; + + /** + * ozone depletion equivalent + */ + case REC20_OZONE_DEPLETION_EQUIVALENT = 'ODE'; + + /** + * ODS Grams + */ + case REC20_ODS_GRAMS = 'ODG'; + + /** + * ODS Kilograms + */ + case REC20_ODS_KILOGRAMS = 'ODK'; + + /** + * ODS Milligrams + */ + case REC20_ODS_MILLIGRAMS = 'ODM'; + + /** + * ohm + */ + case REC20_OHM = 'OHM'; + + /** + * ounce per square yard + */ + case REC20_OUNCE_PER_SQUARE_YARD = 'ON'; + + /** + * ounce (avoirdupois) + */ + case REC20_OUNCE_AVOIRDUPOIS = 'ONZ'; + + /** + * oscillations per minute + */ + case REC20_OSCILLATIONS_PER_MINUTE = 'OPM'; + + /** + * overtime hour + */ + case REC20_OVERTIME_HOUR = 'OT'; + + /** + * fluid ounce (US) + */ + case REC20_FLUID_OUNCE_US = 'OZA'; + + /** + * fluid ounce (UK) + */ + case REC20_FLUID_OUNCE_UK = 'OZI'; + + /** + * percent + */ + case REC20_PERCENT = 'P1'; + + /** + * coulomb per metre + */ + case REC20_COULOMB_PER_METRE = 'P10'; + + /** + * kiloweber + */ + case REC20_KILOWEBER = 'P11'; + + /** + * gamma + */ + case REC20_GAMMA = 'P12'; + + /** + * kilotesla + */ + case REC20_KILOTESLA = 'P13'; + + /** + * joule per second + */ + case REC20_JOULE_PER_SECOND = 'P14'; + + /** + * joule per minute + */ + case REC20_JOULE_PER_MINUTE = 'P15'; + + /** + * joule per hour + */ + case REC20_JOULE_PER_HOUR = 'P16'; + + /** + * joule per day + */ + case REC20_JOULE_PER_DAY = 'P17'; + + /** + * kilojoule per second + */ + case REC20_KILOJOULE_PER_SECOND = 'P18'; + + /** + * kilojoule per minute + */ + case REC20_KILOJOULE_PER_MINUTE = 'P19'; + + /** + * pound per foot + */ + case REC20_POUND_PER_FOOT = 'P2'; + + /** + * kilojoule per hour + */ + case REC20_KILOJOULE_PER_HOUR = 'P20'; + + /** + * kilojoule per day + */ + case REC20_KILOJOULE_PER_DAY = 'P21'; + + /** + * nanoohm + */ + case REC20_NANOOHM = 'P22'; + + /** + * ohm circular-mil per foot + */ + case REC20_OHM_CIRCULARMIL_PER_FOOT = 'P23'; + + /** + * kilohenry + */ + case REC20_KILOHENRY = 'P24'; + + /** + * lumen per square foot + */ + case REC20_LUMEN_PER_SQUARE_FOOT = 'P25'; + + /** + * phot + */ + case REC20_PHOT = 'P26'; + + /** + * footcandle + */ + case REC20_FOOTCANDLE = 'P27'; + + /** + * candela per square inch + */ + case REC20_CANDELA_PER_SQUARE_INCH = 'P28'; + + /** + * footlambert + */ + case REC20_FOOTLAMBERT = 'P29'; + + /** + * lambert + */ + case REC20_LAMBERT = 'P30'; + + /** + * stilb + */ + case REC20_STILB = 'P31'; + + /** + * candela per square foot + */ + case REC20_CANDELA_PER_SQUARE_FOOT = 'P32'; + + /** + * kilocandela + */ + case REC20_KILOCANDELA = 'P33'; + + /** + * millicandela + */ + case REC20_MILLICANDELA = 'P34'; + + /** + * Hefner-Kerze + */ + case REC20_HEFNERKERZE = 'P35'; + + /** + * international candle + */ + case REC20_INTERNATIONAL_CANDLE = 'P36'; + + /** + * British thermal unit (international table) per square foot + */ + case REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_FOOT = 'P37'; + + /** + * British thermal unit (thermochemical) per square foot + */ + case REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SQUARE_FOOT = 'P38'; + + /** + * calorie (thermochemical) per square centimetre + */ + case REC20_CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE = 'P39'; + + /** + * langley + */ + case REC20_LANGLEY = 'P40'; + + /** + * decade (logarithmic) + */ + case REC20_DECADE_LOGARITHMIC = 'P41'; + + /** + * pascal squared second + */ + case REC20_PASCAL_SQUARED_SECOND = 'P42'; + + /** + * bel per metre + */ + case REC20_BEL_PER_METRE = 'P43'; + + /** + * pound mole + */ + case REC20_POUND_MOLE = 'P44'; + + /** + * pound mole per second + */ + case REC20_POUND_MOLE_PER_SECOND = 'P45'; + + /** + * pound mole per minute + */ + case REC20_POUND_MOLE_PER_MINUTE = 'P46'; + + /** + * kilomole per kilogram + */ + case REC20_KILOMOLE_PER_KILOGRAM = 'P47'; + + /** + * pound mole per pound + */ + case REC20_POUND_MOLE_PER_POUND = 'P48'; + + /** + * newton square metre per ampere + */ + case REC20_NEWTON_SQUARE_METRE_PER_AMPERE = 'P49'; + + /** + * five pack + */ + case REC20_FIVE_PACK = 'P5'; + + /** + * weber metre + */ + case REC20_WEBER_METRE = 'P50'; + + /** + * mol per kilogram pascal + */ + case REC20_MOL_PER_KILOGRAM_PASCAL = 'P51'; + + /** + * mol per cubic metre pascal + */ + case REC20_MOL_PER_CUBIC_METRE_PASCAL = 'P52'; + + /** + * unit pole + */ + case REC20_UNIT_POLE = 'P53'; + + /** + * milligray per second + */ + case REC20_MILLIGRAY_PER_SECOND = 'P54'; + + /** + * microgray per second + */ + case REC20_MICROGRAY_PER_SECOND = 'P55'; + + /** + * nanogray per second + */ + case REC20_NANOGRAY_PER_SECOND = 'P56'; + + /** + * gray per minute + */ + case REC20_GRAY_PER_MINUTE = 'P57'; + + /** + * milligray per minute + */ + case REC20_MILLIGRAY_PER_MINUTE = 'P58'; + + /** + * microgray per minute + */ + case REC20_MICROGRAY_PER_MINUTE = 'P59'; + + /** + * nanogray per minute + */ + case REC20_NANOGRAY_PER_MINUTE = 'P60'; + + /** + * gray per hour + */ + case REC20_GRAY_PER_HOUR = 'P61'; + + /** + * milligray per hour + */ + case REC20_MILLIGRAY_PER_HOUR = 'P62'; + + /** + * microgray per hour + */ + case REC20_MICROGRAY_PER_HOUR = 'P63'; + + /** + * nanogray per hour + */ + case REC20_NANOGRAY_PER_HOUR = 'P64'; + + /** + * sievert per second + */ + case REC20_SIEVERT_PER_SECOND = 'P65'; + + /** + * millisievert per second + */ + case REC20_MILLISIEVERT_PER_SECOND = 'P66'; + + /** + * microsievert per second + */ + case REC20_MICROSIEVERT_PER_SECOND = 'P67'; + + /** + * nanosievert per second + */ + case REC20_NANOSIEVERT_PER_SECOND = 'P68'; + + /** + * rem per second + */ + case REC20_REM_PER_SECOND = 'P69'; + + /** + * sievert per hour + */ + case REC20_SIEVERT_PER_HOUR = 'P70'; + + /** + * millisievert per hour + */ + case REC20_MILLISIEVERT_PER_HOUR = 'P71'; + + /** + * microsievert per hour + */ + case REC20_MICROSIEVERT_PER_HOUR = 'P72'; + + /** + * nanosievert per hour + */ + case REC20_NANOSIEVERT_PER_HOUR = 'P73'; + + /** + * sievert per minute + */ + case REC20_SIEVERT_PER_MINUTE = 'P74'; + + /** + * millisievert per minute + */ + case REC20_MILLISIEVERT_PER_MINUTE = 'P75'; + + /** + * microsievert per minute + */ + case REC20_MICROSIEVERT_PER_MINUTE = 'P76'; + + /** + * nanosievert per minute + */ + case REC20_NANOSIEVERT_PER_MINUTE = 'P77'; + + /** + * reciprocal square inch + */ + case REC20_RECIPROCAL_SQUARE_INCH = 'P78'; + + /** + * pascal square metre per kilogram + */ + case REC20_PASCAL_SQUARE_METRE_PER_KILOGRAM = 'P79'; + + /** + * millipascal per metre + */ + case REC20_MILLIPASCAL_PER_METRE = 'P80'; + + /** + * kilopascal per metre + */ + case REC20_KILOPASCAL_PER_METRE = 'P81'; + + /** + * hectopascal per metre + */ + case REC20_HECTOPASCAL_PER_METRE = 'P82'; + + /** + * standard atmosphere per metre + */ + case REC20_STANDARD_ATMOSPHERE_PER_METRE = 'P83'; + + /** + * technical atmosphere per metre + */ + case REC20_TECHNICAL_ATMOSPHERE_PER_METRE = 'P84'; + + /** + * torr per metre + */ + case REC20_TORR_PER_METRE = 'P85'; + + /** + * psi per inch + */ + case REC20_PSI_PER_INCH = 'P86'; + + /** + * cubic metre per second square metre + */ + case REC20_CUBIC_METRE_PER_SECOND_SQUARE_METRE = 'P87'; + + /** + * rhe + */ + case REC20_RHE = 'P88'; + + /** + * pound-force foot per inch + */ + case REC20_POUNDFORCE_FOOT_PER_INCH = 'P89'; + + /** + * pound-force inch per inch + */ + case REC20_POUNDFORCE_INCH_PER_INCH = 'P90'; + + /** + * perm (0 ºC) + */ + case REC20_PERM_0_C = 'P91'; + + /** + * perm (23 ºC) + */ + case REC20_PERM_23_C = 'P92'; + + /** + * byte per second + */ + case REC20_BYTE_PER_SECOND = 'P93'; + + /** + * kilobyte per second + */ + case REC20_KILOBYTE_PER_SECOND = 'P94'; + + /** + * megabyte per second + */ + case REC20_MEGABYTE_PER_SECOND = 'P95'; + + /** + * reciprocal volt + */ + case REC20_RECIPROCAL_VOLT = 'P96'; + + /** + * reciprocal radian + */ + case REC20_RECIPROCAL_RADIAN = 'P97'; + + /** + * pascal to the power sum of stoichiometric numbers + */ + case REC20_PASCAL_TO_THE_POWER_SUM_OF_STOICHIOMETRIC_NUMBERS = 'P98'; + + /** + * mole per cubiv metre to the power sum of stoichiometric numbers + */ + case REC20_MOLE_PER_CUBIV_METRE_TO_THE_POWER_SUM_OF_STOICHIOMETRIC_NUMBERS = 'P99'; + + /** + * pascal + */ + case REC20_PASCAL = 'PAL'; + + /** + * pad + */ + case REC20_PAD = 'PD'; + + /** + * proof litre + */ + case REC20_PROOF_LITRE = 'PFL'; + + /** + * proof gallon + */ + case REC20_PROOF_GALLON = 'PGL'; + + /** + * pitch + */ + case REC20_PITCH = 'PI'; + + /** + * degree Plato + */ + case REC20_DEGREE_PLATO = 'PLA'; + + /** + * pound per inch of length + */ + case REC20_POUND_PER_INCH_OF_LENGTH = 'PO'; + + /** + * page per inch + */ + case REC20_PAGE_PER_INCH = 'PQ'; + + /** + * pair + */ + case REC20_PAIR = 'PR'; + + /** + * pound-force per square inch + */ + case REC20_POUNDFORCE_PER_SQUARE_INCH = 'PS'; + + /** + * dry pint (US) + */ + case REC20_DRY_PINT_US = 'PTD'; + + /** + * pint (UK) + */ + case REC20_PINT_UK = 'PTI'; + + /** + * liquid pint (US) + */ + case REC20_LIQUID_PINT_US = 'PTL'; + + /** + * portion + */ + case REC20_PORTION = 'PTN'; + + /** + * joule per tesla + */ + case REC20_JOULE_PER_TESLA = 'Q10'; + + /** + * erlang + */ + case REC20_ERLANG = 'Q11'; + + /** + * octet + */ + case REC20_OCTET = 'Q12'; + + /** + * octet per second + */ + case REC20_OCTET_PER_SECOND = 'Q13'; + + /** + * shannon + */ + case REC20_SHANNON = 'Q14'; + + /** + * hartley + */ + case REC20_HARTLEY = 'Q15'; + + /** + * natural unit of information + */ + case REC20_NATURAL_UNIT_OF_INFORMATION = 'Q16'; + + /** + * shannon per second + */ + case REC20_SHANNON_PER_SECOND = 'Q17'; + + /** + * hartley per second + */ + case REC20_HARTLEY_PER_SECOND = 'Q18'; + + /** + * natural unit of information per second + */ + case REC20_NATURAL_UNIT_OF_INFORMATION_PER_SECOND = 'Q19'; + + /** + * second per kilogramm + */ + case REC20_SECOND_PER_KILOGRAMM = 'Q20'; + + /** + * watt square metre + */ + case REC20_WATT_SQUARE_METRE = 'Q21'; + + /** + * second per radian cubic metre + */ + case REC20_SECOND_PER_RADIAN_CUBIC_METRE = 'Q22'; + + /** + * weber to the power minus one + */ + case REC20_WEBER_TO_THE_POWER_MINUS_ONE = 'Q23'; + + /** + * reciprocal inch + */ + case REC20_RECIPROCAL_INCH = 'Q24'; + + /** + * dioptre + */ + case REC20_DIOPTRE = 'Q25'; + + /** + * one per one + */ + case REC20_ONE_PER_ONE = 'Q26'; + + /** + * newton metre per metre + */ + case REC20_NEWTON_METRE_PER_METRE = 'Q27'; + + /** + * kilogram per square metre pascal second + */ + case REC20_KILOGRAM_PER_SQUARE_METRE_PASCAL_SECOND = 'Q28'; + + /** + * microgram per hectogram + */ + case REC20_MICROGRAM_PER_HECTOGRAM = 'Q29'; + + /** + * pH (potential of Hydrogen) + */ + case REC20_PH_POTENTIAL_OF_HYDROGEN = 'Q30'; + + /** + * kilojoule per gram + */ + case REC20_KILOJOULE_PER_GRAM = 'Q31'; + + /** + * femtolitre + */ + case REC20_FEMTOLITRE = 'Q32'; + + /** + * picolitre + */ + case REC20_PICOLITRE = 'Q33'; + + /** + * nanolitre + */ + case REC20_NANOLITRE = 'Q34'; + + /** + * megawatts per minute + */ + case REC20_MEGAWATTS_PER_MINUTE = 'Q35'; + + /** + * square metre per cubic metre + */ + case REC20_SQUARE_METRE_PER_CUBIC_METRE = 'Q36'; + + /** + * Standard cubic metre per day + */ + case REC20_STANDARD_CUBIC_METRE_PER_DAY = 'Q37'; + + /** + * Standard cubic metre per hour + */ + case REC20_STANDARD_CUBIC_METRE_PER_HOUR = 'Q38'; + + /** + * Normalized cubic metre per day + */ + case REC20_NORMALIZED_CUBIC_METRE_PER_DAY = 'Q39'; + + /** + * Normalized cubic metre per hour + */ + case REC20_NORMALIZED_CUBIC_METRE_PER_HOUR = 'Q40'; + + /** + * Joule per normalised cubic metre + */ + case REC20_JOULE_PER_NORMALISED_CUBIC_METRE = 'Q41'; + + /** + * Joule per standard cubic metre + */ + case REC20_JOULE_PER_STANDARD_CUBIC_METRE = 'Q42'; + + /** + * meal + */ + case REC20_MEAL = 'Q3'; + + /** + * page - facsimile + */ + case REC20_PAGE__FACSIMILE = 'QA'; + + /** + * quarter (of a year) + */ + case REC20_QUARTER_OF_A_YEAR = 'QAN'; + + /** + * page - hardcopy + */ + case REC20_PAGE__HARDCOPY = 'QB'; + + /** + * quire + */ + case REC20_QUIRE = 'QR'; + + /** + * dry quart (US) + */ + case REC20_DRY_QUART_US = 'QTD'; + + /** + * quart (UK) + */ + case REC20_QUART_UK = 'QTI'; + + /** + * liquid quart (US) + */ + case REC20_LIQUID_QUART_US = 'QTL'; + + /** + * quarter (UK) + */ + case REC20_QUARTER_UK = 'QTR'; + + /** + * pica + */ + case REC20_PICA = 'R1'; + + /** + * thousand cubic metre + */ + case REC20_THOUSAND_CUBIC_METRE = 'R9'; + + /** + * running or operating hour + */ + case REC20_RUNNING_OR_OPERATING_HOUR = 'RH'; + + /** + * ream + */ + case REC20_REAM = 'RM'; + + /** + * room + */ + case REC20_ROOM = 'ROM'; + + /** + * pound per ream + */ + case REC20_POUND_PER_REAM = 'RP'; + + /** + * revolutions per minute + */ + case REC20_REVOLUTIONS_PER_MINUTE = 'RPM'; + + /** + * revolutions per second + */ + case REC20_REVOLUTIONS_PER_SECOND = 'RPS'; + + /** + * revenue ton mile + */ + case REC20_REVENUE_TON_MILE = 'RT'; + + /** + * square foot per second + */ + case REC20_SQUARE_FOOT_PER_SECOND = 'S3'; + + /** + * square metre per second + */ + case REC20_SQUARE_METRE_PER_SECOND = 'S4'; + + /** + * half year (6 months) + */ + case REC20_HALF_YEAR_6_MONTHS = 'SAN'; + + /** + * score + */ + case REC20_SCORE = 'SCO'; + + /** + * scruple + */ + case REC20_SCRUPLE = 'SCR'; + + /** + * second [unit of time] + */ + case REC20_SECOND_UNIT_OF_TIME = 'SEC'; + + /** + * set + */ + case REC20_SET = 'SET'; + + /** + * segment + */ + case REC20_SEGMENT = 'SG'; + + /** + * siemens + */ + case REC20_SIEMENS = 'SIE'; + + /** + * Standard cubic metre + */ + case REC20_STANDARD_CUBIC_METRE = 'SM3'; + + /** + * mile (statute mile) + */ + case REC20_MILE_STATUTE_MILE = 'SMI'; + + /** + * square + */ + case REC20_SQUARE = 'SQ'; + + /** + * square, roofing + */ + case REC20_SQUARE_ROOFING = 'SQR'; + + /** + * strip + */ + case REC20_STRIP = 'SR'; + + /** + * stick + */ + case REC20_STICK = 'STC'; + + /** + * stone (UK) + */ + case REC20_STONE_UK = 'STI'; + + /** + * stick, cigarette + */ + case REC20_STICK_CIGARETTE = 'STK'; + + /** + * standard litre + */ + case REC20_STANDARD_LITRE = 'STL'; + + /** + * ton (US) or short ton (UK/US) + */ + case REC20_TON_US_OR_SHORT_TON_UK_US = 'STN'; + + /** + * straw + */ + case REC20_STRAW = 'STW'; + + /** + * skein + */ + case REC20_SKEIN = 'SW'; + + /** + * shipment + */ + case REC20_SHIPMENT = 'SX'; + + /** + * syringe + */ + case REC20_SYRINGE = 'SYR'; + + /** + * telecommunication line in service + */ + case REC20_TELECOMMUNICATION_LINE_IN_SERVICE = 'T0'; + + /** + * thousand piece + */ + case REC20_THOUSAND_PIECE = 'T3'; + + /** + * kiloampere hour (thousand ampere hour) + */ + case REC20_KILOAMPERE_HOUR_THOUSAND_AMPERE_HOUR = 'TAH'; + + /** + * total acid number + */ + case REC20_TOTAL_ACID_NUMBER = 'TAN'; + + /** + * thousand square inch + */ + case REC20_THOUSAND_SQUARE_INCH = 'TI'; + + /** + * metric ton, including container + */ + case REC20_METRIC_TON_INCLUDING_CONTAINER = 'TIC'; + + /** + * metric ton, including inner packaging + */ + case REC20_METRIC_TON_INCLUDING_INNER_PACKAGING = 'TIP'; + + /** + * tonne kilometre + */ + case REC20_TONNE_KILOMETRE = 'TKM'; + + /** + * kilogram of imported meat, less offal + */ + case REC20_KILOGRAM_OF_IMPORTED_MEAT_LESS_OFFAL = 'TMS'; + + /** + * tonne (metric ton) + */ + case REC20_TONNE_METRIC_TON = 'TNE'; + + /** + * ten pack + */ + case REC20_TEN_PACK = 'TP'; + + /** + * teeth per inch + */ + case REC20_TEETH_PER_INCH = 'TPI'; + + /** + * ten pair + */ + case REC20_TEN_PAIR = 'TPR'; + + /** + * thousand cubic metre per day + */ + case REC20_THOUSAND_CUBIC_METRE_PER_DAY = 'TQD'; + + /** + * trillion (EUR) + */ + case REC20_TRILLION_EUR = 'TRL'; + + /** + * ten set + */ + case REC20_TEN_SET = 'TST'; + + /** + * ten thousand sticks + */ + case REC20_TEN_THOUSAND_STICKS = 'TTS'; + + /** + * treatment + */ + case REC20_TREATMENT = 'U1'; + + /** + * tablet + */ + case REC20_TABLET = 'U2'; + + /** + * telecommunication line in service average + */ + case REC20_TELECOMMUNICATION_LINE_IN_SERVICE_AVERAGE = 'UB'; + + /** + * telecommunication port + */ + case REC20_TELECOMMUNICATION_PORT = 'UC'; + + /** + * volt - ampere per kilogram + */ + case REC20_VOLT__AMPERE_PER_KILOGRAM = 'VA'; + + /** + * volt + */ + case REC20_VOLT = 'VLT'; + + /** + * percent volume + */ + case REC20_PERCENT_VOLUME = 'VP'; + + /** + * wet kilo + */ + case REC20_WET_KILO = 'W2'; + + /** + * watt per kilogram + */ + case REC20_WATT_PER_KILOGRAM = 'WA'; + + /** + * wet pound + */ + case REC20_WET_POUND = 'WB'; + + /** + * cord + */ + case REC20_CORD = 'WCD'; + + /** + * wet ton + */ + case REC20_WET_TON = 'WE'; + + /** + * weber + */ + case REC20_WEBER = 'WEB'; + + /** + * week + */ + case REC20_WEEK = 'WEE'; + + /** + * wine gallon + */ + case REC20_WINE_GALLON = 'WG'; + + /** + * watt hour + */ + case REC20_WATT_HOUR = 'WHR'; + + /** + * working month + */ + case REC20_WORKING_MONTH = 'WM'; + + /** + * standard + */ + case REC20_STANDARD = 'WSD'; + + /** + * watt + */ + case REC20_WATT = 'WTT'; + + /** + * Gunter's chain + */ + case REC20_GUNTERS_CHAIN = 'X1'; + + /** + * square yard + */ + case REC20_SQUARE_YARD = 'YDK'; + + /** + * cubic yard + */ + case REC20_CUBIC_YARD = 'YDQ'; + + /** + * yard + */ + case REC20_YARD = 'YRD'; + + /** + * hanging container + */ + case REC20_HANGING_CONTAINER = 'Z11'; + + /** + * page + */ + case REC20_PAGE = 'ZP'; + + /** + * mutually defined + */ + case REC20_MUTUALLY_DEFINED = 'ZZ'; + + /** + * Drum, steel + */ + case REC21_DRUM_STEEL = 'X1A'; + + /** + * Drum, aluminium + */ + case REC21_DRUM_ALUMINIUM = 'X1B'; + + /** + * Drum, plywood + */ + case REC21_DRUM_PLYWOOD = 'X1D'; + + /** + * Container, flexible + */ + case REC21_CONTAINER_FLEXIBLE = 'X1F'; + + /** + * Drum, fibre + */ + case REC21_DRUM_FIBRE = 'X1G'; + + /** + * Drum, wooden + */ + case REC21_DRUM_WOODEN = 'X1W'; + + /** + * Barrel, wooden + */ + case REC21_BARREL_WOODEN = 'X2C'; + + /** + * Jerrican, steel + */ + case REC21_JERRICAN_STEEL = 'X3A'; + + /** + * Jerrican, plastic + */ + case REC21_JERRICAN_PLASTIC = 'X3H'; + + /** + * Bag, super bulk + */ + case REC21_BAG_SUPER_BULK = 'X43'; + + /** + * Bag, polybag + */ + case REC21_BAG_POLYBAG = 'X44'; + + /** + * Box, steel + */ + case REC21_BOX_STEEL = 'X4A'; + + /** + * Box, aluminium + */ + case REC21_BOX_ALUMINIUM = 'X4B'; + + /** + * Box, natural wood + */ + case REC21_BOX_NATURAL_WOOD = 'X4C'; + + /** + * Box, plywood + */ + case REC21_BOX_PLYWOOD = 'X4D'; + + /** + * Box, reconstituted wood + */ + case REC21_BOX_RECONSTITUTED_WOOD = 'X4F'; + + /** + * Box, fibreboard + */ + case REC21_BOX_FIBREBOARD = 'X4G'; + + /** + * Box, plastic + */ + case REC21_BOX_PLASTIC = 'X4H'; + + /** + * Bag, woven plastic + */ + case REC21_BAG_WOVEN_PLASTIC = 'X5H'; + + /** + * Bag, textile + */ + case REC21_BAG_TEXTILE = 'X5L'; + + /** + * Bag, paper + */ + case REC21_BAG_PAPER = 'X5M'; + + /** + * Composite packaging, plastic receptacle + */ + case REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE = 'X6H'; + + /** + * Composite packaging, glass receptacle + */ + case REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE = 'X6P'; + + /** + * Case, car + */ + case REC21_CASE_CAR = 'X7A'; + + /** + * Case, wooden + */ + case REC21_CASE_WOODEN = 'X7B'; + + /** + * Pallet, wooden + */ + case REC21_PALLET_WOODEN = 'X8A'; + + /** + * Crate, wooden + */ + case REC21_CRATE_WOODEN = 'X8B'; + + /** + * Bundle, wooden + */ + case REC21_BUNDLE_WOODEN = 'X8C'; + + /** + * Intermediate bulk container, rigid plastic + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC = 'XAA'; + + /** + * Receptacle, fibre + */ + case REC21_RECEPTACLE_FIBRE = 'XAB'; + + /** + * Receptacle, paper + */ + case REC21_RECEPTACLE_PAPER = 'XAC'; + + /** + * Receptacle, wooden + */ + case REC21_RECEPTACLE_WOODEN = 'XAD'; + + /** + * Aerosol + */ + case REC21_AEROSOL = 'XAE'; + + /** + * Pallet, modular, collars 80cms * 60cms + */ + case REC21_PALLET_MODULAR_COLLARS_80CMS__60CMS = 'XAF'; + + /** + * Pallet, shrinkwrapped + */ + case REC21_PALLET_SHRINKWRAPPED = 'XAG'; + + /** + * Pallet, 100cms * 110cms + */ + case REC21_PALLET_100CMS__110CMS = 'XAH'; + + /** + * Clamshell + */ + case REC21_CLAMSHELL = 'XAI'; + + /** + * Cone + */ + case REC21_CONE = 'XAJ'; + + /** + * Ball + */ + case REC21_BALL = 'XAL'; + + /** + * Ampoule, non-protected + */ + case REC21_AMPOULE_NONPROTECTED = 'XAM'; + + /** + * Ampoule, protected + */ + case REC21_AMPOULE_PROTECTED = 'XAP'; + + /** + * Atomizer + */ + case REC21_ATOMIZER = 'XAT'; + + /** + * Capsule + */ + case REC21_CAPSULE = 'XAV'; + + /** + * Belt + */ + case REC21_BELT = 'XB4'; + + /** + * Barrel + */ + case REC21_BARREL = 'XBA'; + + /** + * Bobbin + */ + case REC21_BOBBIN = 'XBB'; + + /** + * Bottlecrate / bottlerack + */ + case REC21_BOTTLECRATE___BOTTLERACK = 'XBC'; + + /** + * Board + */ + case REC21_BOARD = 'XBD'; + + /** + * Bundle + */ + case REC21_BUNDLE = 'XBE'; + + /** + * Balloon, non-protected + */ + case REC21_BALLOON_NONPROTECTED = 'XBF'; + + /** + * Bag + */ + case REC21_BAG = 'XBG'; + + /** + * Bunch + */ + case REC21_BUNCH = 'XBH'; + + /** + * Bin + */ + case REC21_BIN = 'XBI'; + + /** + * Bucket + */ + case REC21_BUCKET = 'XBJ'; + + /** + * Basket + */ + case REC21_BASKET = 'XBK'; + + /** + * Bale, compressed + */ + case REC21_BALE_COMPRESSED = 'XBL'; + + /** + * Basin + */ + case REC21_BASIN = 'XBM'; + + /** + * Bale, non-compressed + */ + case REC21_BALE_NONCOMPRESSED = 'XBN'; + + /** + * Bottle, non-protected, cylindrical + */ + case REC21_BOTTLE_NONPROTECTED_CYLINDRICAL = 'XBO'; + + /** + * Balloon, protected + */ + case REC21_BALLOON_PROTECTED = 'XBP'; + + /** + * Bottle, protected cylindrical + */ + case REC21_BOTTLE_PROTECTED_CYLINDRICAL = 'XBQ'; + + /** + * Bar + */ + case REC21_BAR = 'XBR'; + + /** + * Bottle, non-protected, bulbous + */ + case REC21_BOTTLE_NONPROTECTED_BULBOUS = 'XBS'; + + /** + * Bolt + */ + case REC21_BOLT = 'XBT'; + + /** + * Butt + */ + case REC21_BUTT = 'XBU'; + + /** + * Bottle, protected bulbous + */ + case REC21_BOTTLE_PROTECTED_BULBOUS = 'XBV'; + + /** + * Box, for liquids + */ + case REC21_BOX_FOR_LIQUIDS = 'XBW'; + + /** + * Box + */ + case REC21_BOX = 'XBX'; + + /** + * Board, in bundle/bunch/truss + */ + case REC21_BOARD_IN_BUNDLE_BUNCH_TRUSS = 'XBY'; + + /** + * Bars, in bundle/bunch/truss + */ + case REC21_BARS_IN_BUNDLE_BUNCH_TRUSS = 'XBZ'; + + /** + * Can, rectangular + */ + case REC21_CAN_RECTANGULAR = 'XCA'; + + /** + * Crate, beer + */ + case REC21_CRATE_BEER = 'XCB'; + + /** + * Churn + */ + case REC21_CHURN = 'XCC'; + + /** + * Can, with handle and spout + */ + case REC21_CAN_WITH_HANDLE_AND_SPOUT = 'XCD'; + + /** + * Creel + */ + case REC21_CREEL = 'XCE'; + + /** + * Coffer + */ + case REC21_COFFER = 'XCF'; + + /** + * Cage + */ + case REC21_CAGE = 'XCG'; + + /** + * Chest + */ + case REC21_CHEST = 'XCH'; + + /** + * Canister + */ + case REC21_CANISTER = 'XCI'; + + /** + * Coffin + */ + case REC21_COFFIN = 'XCJ'; + + /** + * Cask + */ + case REC21_CASK = 'XCK'; + + /** + * Coil + */ + case REC21_COIL = 'XCL'; + + /** + * Card + */ + case REC21_CARD = 'XCM'; + + /** + * Container, not otherwise specified as transport equipment + */ + case REC21_CONTAINER_NOT_OTHERWISE_SPECIFIED_AS_TRANSPORT_EQUIPMENT = 'XCN'; + + /** + * Carboy, non-protected + */ + case REC21_CARBOY_NONPROTECTED = 'XCO'; + + /** + * Carboy, protected + */ + case REC21_CARBOY_PROTECTED = 'XCP'; + + /** + * Cartridge + */ + case REC21_CARTRIDGE = 'XCQ'; + + /** + * Crate + */ + case REC21_CRATE = 'XCR'; + + /** + * Case + */ + case REC21_CASE = 'XCS'; + + /** + * Carton + */ + case REC21_CARTON = 'XCT'; + + /** + * Cup + */ + case REC21_CUP = 'XCU'; + + /** + * Cover + */ + case REC21_COVER = 'XCV'; + + /** + * Cage, roll + */ + case REC21_CAGE_ROLL = 'XCW'; + + /** + * Can, cylindrical + */ + case REC21_CAN_CYLINDRICAL = 'XCX'; + + /** + * Cylinder + */ + case REC21_CYLINDER = 'XCY'; + + /** + * Canvas + */ + case REC21_CANVAS = 'XCZ'; + + /** + * Crate, multiple layer, plastic + */ + case REC21_CRATE_MULTIPLE_LAYER_PLASTIC = 'XDA'; + + /** + * Crate, multiple layer, wooden + */ + case REC21_CRATE_MULTIPLE_LAYER_WOODEN = 'XDB'; + + /** + * Crate, multiple layer, cardboard + */ + case REC21_CRATE_MULTIPLE_LAYER_CARDBOARD = 'XDC'; + + /** + * Cage, Commonwealth Handling Equipment Pool (CHEP) + */ + case REC21_CAGE_COMMONWEALTH_HANDLING_EQUIPMENT_POOL__CHEP = 'XDG'; + + /** + * Box, Commonwealth Handling Equipment Pool (CHEP), Eurobox + */ + case REC21_BOX_COMMONWEALTH_HANDLING_EQUIPMENT_POOL_CHEP_EUROBOX = 'XDH'; + + /** + * Drum, iron + */ + case REC21_DRUM_IRON = 'XDI'; + + /** + * Demijohn, non-protected + */ + case REC21_DEMIJOHN_NONPROTECTED = 'XDJ'; + + /** + * Crate, bulk, cardboard + */ + case REC21_CRATE_BULK_CARDBOARD = 'XDK'; + + /** + * Crate, bulk, plastic + */ + case REC21_CRATE_BULK_PLASTIC = 'XDL'; + + /** + * Crate, bulk, wooden + */ + case REC21_CRATE_BULK_WOODEN = 'XDM'; + + /** + * Dispenser + */ + case REC21_DISPENSER = 'XDN'; + + /** + * Demijohn, protected + */ + case REC21_DEMIJOHN_PROTECTED = 'XDP'; + + /** + * Drum + */ + case REC21_DRUM = 'XDR'; + + /** + * Tray, one layer no cover, plastic + */ + case REC21_TRAY_ONE_LAYER_NO_COVER_PLASTIC = 'XDS'; + + /** + * Tray, one layer no cover, wooden + */ + case REC21_TRAY_ONE_LAYER_NO_COVER_WOODEN = 'XDT'; + + /** + * Tray, one layer no cover, polystyrene + */ + case REC21_TRAY_ONE_LAYER_NO_COVER_POLYSTYRENE = 'XDU'; + + /** + * Tray, one layer no cover, cardboard + */ + case REC21_TRAY_ONE_LAYER_NO_COVER_CARDBOARD = 'XDV'; + + /** + * Tray, two layers no cover, plastic tray + */ + case REC21_TRAY_TWO_LAYERS_NO_COVER_PLASTIC_TRAY = 'XDW'; + + /** + * Tray, two layers no cover, wooden + */ + case REC21_TRAY_TWO_LAYERS_NO_COVER_WOODEN = 'XDX'; + + /** + * Tray, two layers no cover, cardboard + */ + case REC21_TRAY_TWO_LAYERS_NO_COVER_CARDBOARD = 'XDY'; + + /** + * Bag, plastic + */ + case REC21_BAG_PLASTIC = 'XEC'; + + /** + * Case, with pallet base + */ + case REC21_CASE_WITH_PALLET_BASE = 'XED'; + + /** + * Case, with pallet base, wooden + */ + case REC21_CASE_WITH_PALLET_BASE_WOODEN = 'XEE'; + + /** + * Case, with pallet base, cardboard + */ + case REC21_CASE_WITH_PALLET_BASE_CARDBOARD = 'XEF'; + + /** + * Case, with pallet base, plastic + */ + case REC21_CASE_WITH_PALLET_BASE_PLASTIC = 'XEG'; + + /** + * Case, with pallet base, metal + */ + case REC21_CASE_WITH_PALLET_BASE_METAL = 'XEH'; + + /** + * Case, isothermic + */ + case REC21_CASE_ISOTHERMIC = 'XEI'; + + /** + * Envelope + */ + case REC21_ENVELOPE = 'XEN'; + + /** + * Flexibag + */ + case REC21_FLEXIBAG = 'XFB'; + + /** + * Crate, fruit + */ + case REC21_CRATE_FRUIT = 'XFC'; + + /** + * Crate, framed + */ + case REC21_CRATE_FRAMED = 'XFD'; + + /** + * Flexitank + */ + case REC21_FLEXITANK = 'XFE'; + + /** + * Firkin + */ + case REC21_FIRKIN = 'XFI'; + + /** + * Flask + */ + case REC21_FLASK = 'XFL'; + + /** + * Footlocker + */ + case REC21_FOOTLOCKER = 'XFO'; + + /** + * Filmpack + */ + case REC21_FILMPACK = 'XFP'; + + /** + * Frame + */ + case REC21_FRAME = 'XFR'; + + /** + * Foodtainer + */ + case REC21_FOODTAINER = 'XFT'; + + /** + * Cart, flatbed + */ + case REC21_CART_FLATBED = 'XFW'; + + /** + * Bag, flexible container + */ + case REC21_BAG_FLEXIBLE_CONTAINER = 'XFX'; + + /** + * Bottle, gas + */ + case REC21_BOTTLE_GAS = 'XGB'; + + /** + * Girder + */ + case REC21_GIRDER = 'XGI'; + + /** + * Container, gallon + */ + case REC21_CONTAINER_GALLON = 'XGL'; + + /** + * Receptacle, glass + */ + case REC21_RECEPTACLE_GLASS = 'XGR'; + + /** + * Tray, containing horizontally stacked flat items + */ + case REC21_TRAY_CONTAINING_HORIZONTALLY_STACKED_FLAT_ITEMS = 'XGU'; + + /** + * Bag, gunny + */ + case REC21_BAG_GUNNY = 'XGY'; + + /** + * Girders, in bundle/bunch/truss + */ + case REC21_GIRDERS_IN_BUNDLE_BUNCH_TRUSS = 'XGZ'; + + /** + * Basket, with handle, plastic + */ + case REC21_BASKET_WITH_HANDLE_PLASTIC = 'XHA'; + + /** + * Basket, with handle, wooden + */ + case REC21_BASKET_WITH_HANDLE_WOODEN = 'XHB'; + + /** + * Basket, with handle, cardboard + */ + case REC21_BASKET_WITH_HANDLE_CARDBOARD = 'XHC'; + + /** + * Hogshead + */ + case REC21_HOGSHEAD = 'XHG'; + + /** + * Hanger + */ + case REC21_HANGER = 'XHN'; + + /** + * Hamper + */ + case REC21_HAMPER = 'XHR'; + + /** + * Package, display, wooden + */ + case REC21_PACKAGE_DISPLAY_WOODEN = 'XIA'; + + /** + * Package, display, cardboard + */ + case REC21_PACKAGE_DISPLAY_CARDBOARD = 'XIB'; + + /** + * Package, display, plastic + */ + case REC21_PACKAGE_DISPLAY_PLASTIC = 'XIC'; + + /** + * Package, display, metal + */ + case REC21_PACKAGE_DISPLAY_METAL = 'XID'; + + /** + * Package, show + */ + case REC21_PACKAGE_SHOW = 'XIE'; + + /** + * Package, flow + */ + case REC21_PACKAGE_FLOW = 'XIF'; + + /** + * Package, paper wrapped + */ + case REC21_PACKAGE_PAPER_WRAPPED = 'XIG'; + + /** + * Drum, plastic + */ + case REC21_DRUM_PLASTIC = 'XIH'; + + /** + * Package, cardboard, with bottle grip-holes + */ + case REC21_PACKAGE_CARDBOARD_WITH_BOTTLE_GRIPHOLES = 'XIK'; + + /** + * Tray, rigid, lidded stackable (CEN TS 14482:2002) + */ + case REC21_TRAY_RIGID_LIDDED_STACKABLE_CEN_TS_144822002 = 'XIL'; + + /** + * Ingot + */ + case REC21_INGOT = 'XIN'; + + /** + * Ingots, in bundle/bunch/truss + */ + case REC21_INGOTS_IN_BUNDLE_BUNCH_TRUSS = 'XIZ'; + + /** + * Bag, jumbo + */ + case REC21_BAG_JUMBO = 'XJB'; + + /** + * Jerrican, rectangular + */ + case REC21_JERRICAN_RECTANGULAR = 'XJC'; + + /** + * Jug + */ + case REC21_JUG = 'XJG'; + + /** + * Jar + */ + case REC21_JAR = 'XJR'; + + /** + * Jutebag + */ + case REC21_JUTEBAG = 'XJT'; + + /** + * Jerrican, cylindrical + */ + case REC21_JERRICAN_CYLINDRICAL = 'XJY'; + + /** + * Keg + */ + case REC21_KEG = 'XKG'; + + /** + * Kit + */ + case REC21_KIT = 'XKI'; + + /** + * Luggage + */ + case REC21_LUGGAGE = 'XLE'; + + /** + * Log + */ + case REC21_LOG = 'XLG'; + + /** + * Lot + */ + case REC21_LOT = 'XLT'; + + /** + * Lug + */ + case REC21_LUG = 'XLU'; + + /** + * Liftvan + */ + case REC21_LIFTVAN = 'XLV'; + + /** + * Logs, in bundle/bunch/truss + */ + case REC21_LOGS_IN_BUNDLE_BUNCH_TRUSS = 'XLZ'; + + /** + * Crate, metal + */ + case REC21_CRATE_METAL = 'XMA'; + + /** + * Bag, multiply + */ + case REC21_BAG_MULTIPLY = 'XMB'; + + /** + * Crate, milk + */ + case REC21_CRATE_MILK = 'XMC'; + + /** + * Container, metal + */ + case REC21_CONTAINER_METAL = 'XME'; + + /** + * Receptacle, metal + */ + case REC21_RECEPTACLE_METAL = 'XMR'; + + /** + * Sack, multi-wall + */ + case REC21_SACK_MULTIWALL = 'XMS'; + + /** + * Mat + */ + case REC21_MAT = 'XMT'; + + /** + * Receptacle, plastic wrapped + */ + case REC21_RECEPTACLE_PLASTIC_WRAPPED = 'XMW'; + + /** + * Matchbox + */ + case REC21_MATCHBOX = 'XMX'; + + /** + * Not available + */ + case REC21_NOT_AVAILABLE = 'XNA'; + + /** + * Unpacked or unpackaged + */ + case REC21_UNPACKED_OR_UNPACKAGED = 'XNE'; + + /** + * Unpacked or unpackaged, single unit + */ + case REC21_UNPACKED_OR_UNPACKAGED_SINGLE_UNIT = 'XNF'; + + /** + * Unpacked or unpackaged, multiple units + */ + case REC21_UNPACKED_OR_UNPACKAGED_MULTIPLE_UNITS = 'XNG'; + + /** + * Nest + */ + case REC21_NEST = 'XNS'; + + /** + * Net + */ + case REC21_NET = 'XNT'; + + /** + * Net, tube, plastic + */ + case REC21_NET_TUBE_PLASTIC = 'XNU'; + + /** + * Net, tube, textile + */ + case REC21_NET_TUBE_TEXTILE = 'XNV'; + + /** + * Pallet, CHEP 40 cm x 60 cm + */ + case REC21_PALLET_CHEP_40_CM_X_60_CM = 'XOA'; + + /** + * Pallet, CHEP 80 cm x 120 cm + */ + case REC21_PALLET_CHEP_80_CM_X_120_CM = 'XOB'; + + /** + * Pallet, CHEP 100 cm x 120 cm + */ + case REC21_PALLET_CHEP_100_CM_X_120_CM = 'XOC'; + + /** + * Pallet, AS 4068-1993 + */ + case REC21_PALLET_AS_40681993 = 'XOD'; + + /** + * Pallet, ISO T11 + */ + case REC21_PALLET_ISO_T11 = 'XOE'; + + /** + * Platform, unspecified weight or dimension + */ + case REC21_PLATFORM_UNSPECIFIED_WEIGHT_OR_DIMENSION = 'XOF'; + + /** + * Block + */ + case REC21_BLOCK = 'XOK'; + + /** + * Octabin + */ + case REC21_OCTABIN = 'XOT'; + + /** + * Container, outer + */ + case REC21_CONTAINER_OUTER = 'XOU'; + + /** + * Pan + */ + case REC21_PAN = 'XP2'; + + /** + * Packet + */ + case REC21_PACKET = 'XPA'; + + /** + * Pallet, box Combined open-ended box and pallet + */ + case REC21_PALLET_BOX_COMBINED_OPENENDED_BOX_AND_PALLET = 'XPB'; + + /** + * Parcel + */ + case REC21_PARCEL = 'XPC'; + + /** + * Pallet, modular, collars 80cms * 100cms + */ + case REC21_PALLET_MODULAR_COLLARS_80CMS__100CMS = 'XPD'; + + /** + * Pallet, modular, collars 80cms * 120cms + */ + case REC21_PALLET_MODULAR_COLLARS_80CMS__120CMS = 'XPE'; + + /** + * Pen + */ + case REC21_PEN = 'XPF'; + + /** + * Plate + */ + case REC21_PLATE = 'XPG'; + + /** + * Pitcher + */ + case REC21_PITCHER = 'XPH'; + + /** + * Pipe + */ + case REC21_PIPE = 'XPI'; + + /** + * Punnet + */ + case REC21_PUNNET = 'XPJ'; + + /** + * Package + */ + case REC21_PACKAGE = 'XPK'; + + /** + * Pail + */ + case REC21_PAIL = 'XPL'; + + /** + * Plank + */ + case REC21_PLANK = 'XPN'; + + /** + * Pouch + */ + case REC21_POUCH = 'XPO'; + + /** + * Piece + */ + case REC21_PIECE = 'XPP'; + + /** + * Receptacle, plastic + */ + case REC21_RECEPTACLE_PLASTIC = 'XPR'; + + /** + * Pot + */ + case REC21_POT = 'XPT'; + + /** + * Tray + */ + case REC21_TRAY = 'XPU'; + + /** + * Pipes, in bundle/bunch/truss + */ + case REC21_PIPES_IN_BUNDLE_BUNCH_TRUSS = 'XPV'; + + /** + * Pallet + */ + case REC21_PALLET = 'XPX'; + + /** + * Plates, in bundle/bunch/truss + */ + case REC21_PLATES_IN_BUNDLE_BUNCH_TRUSS = 'XPY'; + + /** + * Planks, in bundle/bunch/truss + */ + case REC21_PLANKS_IN_BUNDLE_BUNCH_TRUSS = 'XPZ'; + + /** + * Drum, steel, non-removable head + */ + case REC21_DRUM_STEEL_NONREMOVABLE_HEAD = 'XQA'; + + /** + * Drum, steel, removable head + */ + case REC21_DRUM_STEEL_REMOVABLE_HEAD = 'XQB'; + + /** + * Drum, aluminium, non-removable head + */ + case REC21_DRUM_ALUMINIUM_NONREMOVABLE_HEAD = 'XQC'; + + /** + * Drum, aluminium, removable head + */ + case REC21_DRUM_ALUMINIUM_REMOVABLE_HEAD = 'XQD'; + + /** + * Drum, plastic, non-removable head + */ + case REC21_DRUM_PLASTIC_NONREMOVABLE_HEAD = 'XQF'; + + /** + * Drum, plastic, removable head + */ + case REC21_DRUM_PLASTIC_REMOVABLE_HEAD = 'XQG'; + + /** + * Barrel, wooden, bung type + */ + case REC21_BARREL_WOODEN_BUNG_TYPE = 'XQH'; + + /** + * Barrel, wooden, removable head + */ + case REC21_BARREL_WOODEN_REMOVABLE_HEAD = 'XQJ'; + + /** + * Jerrican, steel, non-removable head + */ + case REC21_JERRICAN_STEEL_NONREMOVABLE_HEAD = 'XQK'; + + /** + * Jerrican, steel, removable head + */ + case REC21_JERRICAN_STEEL_REMOVABLE_HEAD = 'XQL'; + + /** + * Jerrican, plastic, non-removable head + */ + case REC21_JERRICAN_PLASTIC_NONREMOVABLE_HEAD = 'XQM'; + + /** + * Jerrican, plastic, removable head + */ + case REC21_JERRICAN_PLASTIC_REMOVABLE_HEAD = 'XQN'; + + /** + * Box, wooden, natural wood, ordinary + */ + case REC21_BOX_WOODEN_NATURAL_WOOD_ORDINARY = 'XQP'; + + /** + * Box, wooden, natural wood, with sift proof walls + */ + case REC21_BOX_WOODEN_NATURAL_WOOD_WITH_SIFT_PROOF_WALLS = 'XQQ'; + + /** + * Box, plastic, expanded + */ + case REC21_BOX_PLASTIC_EXPANDED = 'XQR'; + + /** + * Box, plastic, solid + */ + case REC21_BOX_PLASTIC_SOLID = 'XQS'; + + /** + * Rod + */ + case REC21_ROD = 'XRD'; + + /** + * Ring + */ + case REC21_RING = 'XRG'; + + /** + * Rack, clothing hanger + */ + case REC21_RACK_CLOTHING_HANGER = 'XRJ'; + + /** + * Rack + */ + case REC21_RACK = 'XRK'; + + /** + * Reel + */ + case REC21_REEL = 'XRL'; + + /** + * Roll + */ + case REC21_ROLL = 'XRO'; + + /** + * Rednet + */ + case REC21_REDNET = 'XRT'; + + /** + * Rods, in bundle/bunch/truss + */ + case REC21_RODS_IN_BUNDLE_BUNCH_TRUSS = 'XRZ'; + + /** + * Sack + */ + case REC21_SACK = 'XSA'; + + /** + * Slab + */ + case REC21_SLAB = 'XSB'; + + /** + * Crate, shallow + */ + case REC21_CRATE_SHALLOW = 'XSC'; + + /** + * Spindle + */ + case REC21_SPINDLE = 'XSD'; + + /** + * Sea-chest + */ + case REC21_SEACHEST = 'XSE'; + + /** + * Sachet + */ + case REC21_SACHET = 'XSH'; + + /** + * Skid + */ + case REC21_SKID = 'XSI'; + + /** + * Case, skeleton + */ + case REC21_CASE_SKELETON = 'XSK'; + + /** + * Slipsheet + */ + case REC21_SLIPSHEET = 'XSL'; + + /** + * Sheetmetal + */ + case REC21_SHEETMETAL = 'XSM'; + + /** + * Spool + */ + case REC21_SPOOL = 'XSO'; + + /** + * Sheet, plastic wrapping + */ + case REC21_SHEET_PLASTIC_WRAPPING = 'XSP'; + + /** + * Case, steel + */ + case REC21_CASE_STEEL = 'XSS'; + + /** + * Sheet + */ + case REC21_SHEET = 'XST'; + + /** + * Suitcase + */ + case REC21_SUITCASE = 'XSU'; + + /** + * Envelope, steel + */ + case REC21_ENVELOPE_STEEL = 'XSV'; + + /** + * Shrinkwrapped + */ + case REC21_SHRINKWRAPPED = 'XSW'; + + /** + * Sleeve + */ + case REC21_SLEEVE = 'XSY'; + + /** + * Sheets, in bundle/bunch/truss + */ + case REC21_SHEETS_IN_BUNDLE_BUNCH_TRUSS = 'XSZ'; + + /** + * Tablet + */ + case REC21_TABLET = 'XT1'; + + /** + * Tub + */ + case REC21_TUB = 'XTB'; + + /** + * Tea-chest + */ + case REC21_TEACHEST = 'XTC'; + + /** + * Tube, collapsible + */ + case REC21_TUBE_COLLAPSIBLE = 'XTD'; + + /** + * Tyre + */ + case REC21_TYRE = 'XTE'; + + /** + * Tank container, generic + */ + case REC21_TANK_CONTAINER_GENERIC = 'XTG'; + + /** + * Tierce + */ + case REC21_TIERCE = 'XTI'; + + /** + * Tank, rectangular + */ + case REC21_TANK_RECTANGULAR = 'XTK'; + + /** + * Tub, with lid + */ + case REC21_TUB_WITH_LID = 'XTL'; + + /** + * Tin + */ + case REC21_TIN = 'XTN'; + + /** + * Tun + */ + case REC21_TUN = 'XTO'; + + /** + * Trunk + */ + case REC21_TRUNK = 'XTR'; + + /** + * Truss + */ + case REC21_TRUSS = 'XTS'; + + /** + * Bag, tote + */ + case REC21_BAG_TOTE = 'XTT'; + + /** + * Tube + */ + case REC21_TUBE = 'XTU'; + + /** + * Tube, with nozzle + */ + case REC21_TUBE_WITH_NOZZLE = 'XTV'; + + /** + * Pallet, triwall + */ + case REC21_PALLET_TRIWALL = 'XTW'; + + /** + * Tank, cylindrical + */ + case REC21_TANK_CYLINDRICAL = 'XTY'; + + /** + * Tubes, in bundle/bunch/truss + */ + case REC21_TUBES_IN_BUNDLE_BUNCH_TRUSS = 'XTZ'; + + /** + * Uncaged + */ + case REC21_UNCAGED = 'XUC'; + + /** + * Unit + */ + case REC21_UNIT = 'XUN'; + + /** + * Vat + */ + case REC21_VAT = 'XVA'; + + /** + * Bulk, gas (at 1031 mbar and 15°C) + */ + case REC21_BULK_GAS_AT_1031_MBAR_AND_15C = 'XVG'; + + /** + * Vial + */ + case REC21_VIAL = 'XVI'; + + /** + * Vanpack + */ + case REC21_VANPACK = 'XVK'; + + /** + * Bulk, liquid + */ + case REC21_BULK_LIQUID = 'XVL'; + + /** + * Bulk, solid, large particles (“nodulesâ€) + */ + case REC21_BULK_SOLID_LARGE_PARTICLES_NODULES = 'XVO'; + + /** + * Vacuum-packed + */ + case REC21_VACUUMPACKED = 'XVP'; + + /** + * Bulk, liquefied gas (at abnormal temperature/pressure) + */ + case REC21_BULK_LIQUEFIED_GAS_AT_ABNORMAL_TEMPERATURE_PRESSURE = 'XVQ'; + + /** + * Vehicle + */ + case REC21_VEHICLE = 'XVN'; + + /** + * Bulk, solid, granular particles (“grainsâ€) + */ + case REC21_BULK_SOLID_GRANULAR_PARTICLES_GRAINS = 'XVR'; + + /** + * Bulk, scrap metal + */ + case REC21_BULK_SCRAP_METAL = 'XVS'; + + /** + * Bulk, solid, fine particles (“powdersâ€) + */ + case REC21_BULK_SOLID_FINE_PARTICLES_POWDERS = 'XVY'; + + /** + * Intermediate bulk container + */ + case REC21_INTERMEDIATE_BULK_CONTAINER = 'XWA'; + + /** + * Wickerbottle + */ + case REC21_WICKERBOTTLE = 'XWB'; + + /** + * Intermediate bulk container, steel + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_STEEL = 'XWC'; + + /** + * Intermediate bulk container, aluminium + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_ALUMINIUM = 'XWD'; + + /** + * Intermediate bulk container, metal + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_METAL = 'XWF'; + + /** + * Intermediate bulk container, steel, pressurised > 10 kpa + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_STEEL_PRESSURISED__10_KPA = 'XWG'; + + /** + * Intermediate bulk container, aluminium, pressurised > 10 kpa + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_ALUMINIUM_PRESSURISED__10_KPA = 'XWH'; + + /** + * Intermediate bulk container, metal, pressure 10 kpa + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_METAL_PRESSURE_10_KPA = 'XWJ'; + + /** + * Intermediate bulk container, steel, liquid + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_STEEL_LIQUID = 'XWK'; + + /** + * Intermediate bulk container, aluminium, liquid + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_ALUMINIUM_LIQUID = 'XWL'; + + /** + * Intermediate bulk container, metal, liquid + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_METAL_LIQUID = 'XWM'; + + /** + * Intermediate bulk container, woven plastic, without coat/liner + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_WOVEN_PLASTIC_WITHOUT_COAT_LINER = 'XWN'; + + /** + * Intermediate bulk container, woven plastic, coated + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_WOVEN_PLASTIC_COATED = 'XWP'; + + /** + * Intermediate bulk container, woven plastic, with liner + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_WOVEN_PLASTIC_WITH_LINER = 'XWQ'; + + /** + * Intermediate bulk container, woven plastic, coated and liner + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_WOVEN_PLASTIC_COATED_AND_LINER = 'XWR'; + + /** + * Intermediate bulk container, plastic film + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_PLASTIC_FILM = 'XWS'; + + /** + * Intermediate bulk container, textile with out coat/liner + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_TEXTILE_WITH_OUT_COAT_LINER = 'XWT'; + + /** + * Intermediate bulk container, natural wood, with inner liner + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_NATURAL_WOOD_WITH_INNER_LINER = 'XWU'; + + /** + * Intermediate bulk container, textile, coated + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_TEXTILE_COATED = 'XWV'; + + /** + * Intermediate bulk container, textile, with liner + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_TEXTILE_WITH_LINER = 'XWW'; + + /** + * Intermediate bulk container, textile, coated and liner + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_TEXTILE_COATED_AND_LINER = 'XWX'; + + /** + * Intermediate bulk container, plywood, with inner liner + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_PLYWOOD_WITH_INNER_LINER = 'XWY'; + + /** + * Intermediate bulk container, reconstituted wood, with inner liner + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_RECONSTITUTED_WOOD_WITH_INNER_LINER = 'XWZ'; + + /** + * Bag, woven plastic, without inner coat/liner + */ + case REC21_BAG_WOVEN_PLASTIC_WITHOUT_INNER_COAT_LINER = 'XXA'; + + /** + * Bag, woven plastic, sift proof + */ + case REC21_BAG_WOVEN_PLASTIC_SIFT_PROOF = 'XXB'; + + /** + * Bag, woven plastic, water resistant + */ + case REC21_BAG_WOVEN_PLASTIC_WATER_RESISTANT = 'XXC'; + + /** + * Bag, plastics film + */ + case REC21_BAG_PLASTICS_FILM = 'XXD'; + + /** + * Bag, textile, without inner coat/liner + */ + case REC21_BAG_TEXTILE_WITHOUT_INNER_COAT_LINER = 'XXF'; + + /** + * Bag, textile, sift proof + */ + case REC21_BAG_TEXTILE_SIFT_PROOF = 'XXG'; + + /** + * Bag, textile, water resistant + */ + case REC21_BAG_TEXTILE_WATER_RESISTANT = 'XXH'; + + /** + * Bag, paper, multi-wall + */ + case REC21_BAG_PAPER_MULTIWALL = 'XXJ'; + + /** + * Bag, paper, multi-wall, water resistant + */ + case REC21_BAG_PAPER_MULTIWALL_WATER_RESISTANT = 'XXK'; + + /** + * Composite packaging, plastic receptacle in steel drum + */ + case REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_STEEL_DRUM = 'XYA'; + + /** + * Composite packaging, plastic receptacle in steel crate box + */ + case REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_STEEL_CRATE_BOX = 'XYB'; + + /** + * Composite packaging, plastic receptacle in aluminium drum + */ + case REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_ALUMINIUM_DRUM = 'XYC'; + + /** + * Composite packaging, plastic receptacle in aluminium crate + */ + case REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_ALUMINIUM_CRATE = 'XYD'; + + /** + * Composite packaging, plastic receptacle in wooden box + */ + case REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_WOODEN_BOX = 'XYF'; + + /** + * Composite packaging, plastic receptacle in plywood drum + */ + case REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_PLYWOOD_DRUM = 'XYG'; + + /** + * Composite packaging, plastic receptacle in plywood box + */ + case REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_PLYWOOD_BOX = 'XYH'; + + /** + * Composite packaging, plastic receptacle in fibre drum + */ + case REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_FIBRE_DRUM = 'XYJ'; + + /** + * Composite packaging, plastic receptacle in fibreboard box + */ + case REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_FIBREBOARD_BOX = 'XYK'; + + /** + * Composite packaging, plastic receptacle in plastic drum + */ + case REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_PLASTIC_DRUM = 'XYL'; + + /** + * Composite packaging, plastic receptacle in solid plastic box + */ + case REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_SOLID_PLASTIC_BOX = 'XYM'; + + /** + * Composite packaging, glass receptacle in steel drum + */ + case REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_STEEL_DRUM = 'XYN'; + + /** + * Composite packaging, glass receptacle in steel crate box + */ + case REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_STEEL_CRATE_BOX = 'XYP'; + + /** + * Composite packaging, glass receptacle in aluminium drum + */ + case REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_ALUMINIUM_DRUM = 'XYQ'; + + /** + * Composite packaging, glass receptacle in aluminium crate + */ + case REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_ALUMINIUM_CRATE = 'XYR'; + + /** + * Composite packaging, glass receptacle in wooden box + */ + case REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_WOODEN_BOX = 'XYS'; + + /** + * Composite packaging, glass receptacle in plywood drum + */ + case REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_PLYWOOD_DRUM = 'XYT'; + + /** + * Composite packaging, glass receptacle in wickerwork hamper + */ + case REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_WICKERWORK_HAMPER = 'XYV'; + + /** + * Composite packaging, glass receptacle in fibre drum + */ + case REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_FIBRE_DRUM = 'XYW'; + + /** + * Composite packaging, glass receptacle in fibreboard box + */ + case REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_FIBREBOARD_BOX = 'XYX'; + + /** + * Composite packaging, glass receptacle in expandable plastic pack + */ + case REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_EXPANDABLE_PLASTIC_PACK = 'XYY'; + + /** + * Composite packaging, glass receptacle in solid plastic pack + */ + case REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_SOLID_PLASTIC_PACK = 'XYZ'; + + /** + * Intermediate bulk container, paper, multi-wall + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_PAPER_MULTIWALL = 'XZA'; + + /** + * Bag, large + */ + case REC21_BAG_LARGE = 'XZB'; + + /** + * Intermediate bulk container, paper, multi-wall, water resistant + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_PAPER_MULTIWALL_WATER_RESISTANT = 'XZC'; + + /** + * Intermediate bulk container, rigid plastic, with structural equipment, + * solids + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_WITH_STRUCTURAL_EQUIPMENT_SOLIDS = 'XZD'; + + /** + * Intermediate bulk container, rigid plastic, freestanding, solids + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_FREESTANDING_SOLIDS = 'XZF'; + + /** + * Intermediate bulk container, rigid plastic, with structural equipment, + * pressurised + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_WITH_STRUCTURAL_EQUIPMENT_PRESSURISED = 'XZG'; + + /** + * Intermediate bulk container, rigid plastic, freestanding, pressurised + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_FREESTANDING_PRESSURISED = 'XZH'; + + /** + * Intermediate bulk container, rigid plastic, with structural equipment, + * liquids + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_WITH_STRUCTURAL_EQUIPMENT_LIQUIDS = 'XZJ'; + + /** + * Intermediate bulk container, rigid plastic, freestanding, liquids + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_FREESTANDING_LIQUIDS = 'XZK'; + + /** + * Intermediate bulk container, composite, rigid plastic, solids + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_RIGID_PLASTIC_SOLIDS = 'XZL'; + + /** + * Intermediate bulk container, composite, flexible plastic, solids + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_FLEXIBLE_PLASTIC_SOLIDS = 'XZM'; + + /** + * Intermediate bulk container, composite, rigid plastic, pressurised + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_RIGID_PLASTIC_PRESSURISED = 'XZN'; + + /** + * Intermediate bulk container, composite, flexible plastic, pressurised + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_FLEXIBLE_PLASTIC_PRESSURISED = 'XZP'; + + /** + * Intermediate bulk container, composite, rigid plastic, liquids + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_RIGID_PLASTIC_LIQUIDS = 'XZQ'; + + /** + * Intermediate bulk container, composite, flexible plastic, liquids + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_FLEXIBLE_PLASTIC_LIQUIDS = 'XZR'; + + /** + * Intermediate bulk container, composite + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE = 'XZS'; + + /** + * Intermediate bulk container, fibreboard + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_FIBREBOARD = 'XZT'; + + /** + * Intermediate bulk container, flexible + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_FLEXIBLE = 'XZU'; + + /** + * Intermediate bulk container, metal, other than steel + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_METAL_OTHER_THAN_STEEL = 'XZV'; + + /** + * Intermediate bulk container, natural wood + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_NATURAL_WOOD = 'XZW'; + + /** + * Intermediate bulk container, plywood + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_PLYWOOD = 'XZX'; + + /** + * Intermediate bulk container, reconstituted wood + */ + case REC21_INTERMEDIATE_BULK_CONTAINER_RECONSTITUTED_WOOD = 'XZY'; + + /** + * Mutually defined + */ + case REC21_MUTUALLY_DEFINED = 'XZZ'; +} diff --git a/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdVATExemptionReasonCode.php b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdVATExemptionReasonCode.php new file mode 100644 index 000000000..8bab58155 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/codelistsenum/ZugferdVATExemptionReasonCode.php @@ -0,0 +1,438 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/qdt/CountryIDType.php b/vendor/horstoeko/zugferd/src/entities/basic/qdt/CountryIDType.php new file mode 100644 index 000000000..5924b168e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/qdt/CountryIDType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/qdt/CurrencyCodeType.php b/vendor/horstoeko/zugferd/src/entities/basic/qdt/CurrencyCodeType.php new file mode 100644 index 000000000..701f36eef --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/qdt/CurrencyCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/qdt/DocumentCodeType.php b/vendor/horstoeko/zugferd/src/entities/basic/qdt/DocumentCodeType.php new file mode 100644 index 000000000..5e6a96f47 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/qdt/DocumentCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/qdt/FormattedDateTimeType.php b/vendor/horstoeko/zugferd/src/entities/basic/qdt/FormattedDateTimeType.php new file mode 100644 index 000000000..f9693eb90 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/qdt/FormattedDateTimeType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/qdt/FormattedDateTimeType/DateTimeStringAType.php b/vendor/horstoeko/zugferd/src/entities/basic/qdt/FormattedDateTimeType/DateTimeStringAType.php new file mode 100644 index 000000000..3da2abd74 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/qdt/FormattedDateTimeType/DateTimeStringAType.php @@ -0,0 +1,76 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/qdt/PaymentMeansCodeType.php b/vendor/horstoeko/zugferd/src/entities/basic/qdt/PaymentMeansCodeType.php new file mode 100644 index 000000000..8de4328f0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/qdt/PaymentMeansCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/qdt/TaxCategoryCodeType.php b/vendor/horstoeko/zugferd/src/entities/basic/qdt/TaxCategoryCodeType.php new file mode 100644 index 000000000..49cce8cfb --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/qdt/TaxCategoryCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/qdt/TaxTypeCodeType.php b/vendor/horstoeko/zugferd/src/entities/basic/qdt/TaxTypeCodeType.php new file mode 100644 index 000000000..e4303291a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/qdt/TaxTypeCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/qdt/TimeReferenceCodeType.php b/vendor/horstoeko/zugferd/src/entities/basic/qdt/TimeReferenceCodeType.php new file mode 100644 index 000000000..a3c9f5e2e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/qdt/TimeReferenceCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/CreditorFinancialAccountType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/CreditorFinancialAccountType.php new file mode 100644 index 000000000..e47c2140b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/CreditorFinancialAccountType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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 = null) + { + $this->proprietaryID = $proprietaryID; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/DebtorFinancialAccountType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/DebtorFinancialAccountType.php new file mode 100644 index 000000000..17a50c0e4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/DebtorFinancialAccountType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/DocumentContextParameterType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/DocumentContextParameterType.php new file mode 100644 index 000000000..2010b4f0a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/DocumentContextParameterType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/DocumentLineDocumentType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/DocumentLineDocumentType.php new file mode 100644 index 000000000..4cd0bca2d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/DocumentLineDocumentType.php @@ -0,0 +1,66 @@ +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 = null) + { + $this->includedNote = $includedNote; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/ExchangedDocumentContextType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/ExchangedDocumentContextType.php new file mode 100644 index 000000000..8c255de10 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/ExchangedDocumentContextType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/ExchangedDocumentType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/ExchangedDocumentType.php new file mode 100644 index 000000000..e0d834791 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/ExchangedDocumentType.php @@ -0,0 +1,156 @@ +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 = null) + { + $this->includedNote = $includedNote; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeAgreementType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeAgreementType.php new file mode 100644 index 000000000..c1c5b2335 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeAgreementType.php @@ -0,0 +1,174 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $this->contractReferencedDocument = $contractReferencedDocument; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeDeliveryType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeDeliveryType.php new file mode 100644 index 000000000..c23026283 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeDeliveryType.php @@ -0,0 +1,93 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $this->despatchAdviceReferencedDocument = $despatchAdviceReferencedDocument; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeSettlementType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeSettlementType.php new file mode 100644 index 000000000..29c7bbe53 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeSettlementType.php @@ -0,0 +1,507 @@ +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 = null) + { + $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 = null) + { + $this->payeeTradeParty = $payeeTradeParty; + return $this; + } + + /** + * Adds as specifiedTradeSettlementPaymentMeans + * + * @return self + * @param \horstoeko\zugferd\entities\basic\ram\TradeSettlementPaymentMeansType $specifiedTradeSettlementPaymentMeans + */ + public function addToSpecifiedTradeSettlementPaymentMeans(\horstoeko\zugferd\entities\basic\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\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(?array $specifiedTradeSettlementPaymentMeans = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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; + } + + /** + * Adds as invoiceReferencedDocument + * + * @return self + * @param \horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType $invoiceReferencedDocument + */ + public function addToInvoiceReferencedDocument(\horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType $invoiceReferencedDocument) + { + $this->invoiceReferencedDocument[] = $invoiceReferencedDocument; + return $this; + } + + /** + * isset invoiceReferencedDocument + * + * @param int|string $index + * @return bool + */ + public function issetInvoiceReferencedDocument($index) + { + return isset($this->invoiceReferencedDocument[$index]); + } + + /** + * unset invoiceReferencedDocument + * + * @param int|string $index + * @return void + */ + public function unsetInvoiceReferencedDocument($index) + { + unset($this->invoiceReferencedDocument[$index]); + } + + /** + * 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(?array $invoiceReferencedDocument = null) + { + $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 = null) + { + $this->receivableSpecifiedTradeAccountingAccount = $receivableSpecifiedTradeAccountingAccount; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/LegalOrganizationType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/LegalOrganizationType.php new file mode 100644 index 000000000..a5092ee0c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/LegalOrganizationType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeAgreementType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeAgreementType.php new file mode 100644 index 000000000..e2a4b409b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeAgreementType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeDeliveryType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeDeliveryType.php new file mode 100644 index 000000000..36e40a3ba --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeDeliveryType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeSettlementType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeSettlementType.php new file mode 100644 index 000000000..1c4512662 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeSettlementType.php @@ -0,0 +1,156 @@ +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 = null) + { + $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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/NoteType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/NoteType.php new file mode 100644 index 000000000..f5aacac31 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/NoteType.php @@ -0,0 +1,66 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/ReferencedDocumentType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/ReferencedDocumentType.php new file mode 100644 index 000000000..109c2e44c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/ReferencedDocumentType.php @@ -0,0 +1,66 @@ +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 = null) + { + $this->formattedIssueDateTime = $formattedIssueDateTime; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/SpecifiedPeriodType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/SpecifiedPeriodType.php new file mode 100644 index 000000000..e6186455e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/SpecifiedPeriodType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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 = null) + { + $this->endDateTime = $endDateTime; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainEventType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainEventType.php new file mode 100644 index 000000000..7c367abd1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainEventType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainTradeLineItemType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainTradeLineItemType.php new file mode 100644 index 000000000..ff00d6b05 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainTradeLineItemType.php @@ -0,0 +1,147 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainTradeTransactionType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainTradeTransactionType.php new file mode 100644 index 000000000..4cd77bbaa --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainTradeTransactionType.php @@ -0,0 +1,156 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/TaxRegistrationType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/TaxRegistrationType.php new file mode 100644 index 000000000..4b614db69 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/TaxRegistrationType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAccountingAccountType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAccountingAccountType.php new file mode 100644 index 000000000..968168677 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAccountingAccountType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAddressType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAddressType.php new file mode 100644 index 000000000..d16709823 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAddressType.php @@ -0,0 +1,201 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAllowanceChargeType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAllowanceChargeType.php new file mode 100644 index 000000000..5d7c3067b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAllowanceChargeType.php @@ -0,0 +1,201 @@ +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 = null) + { + $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 = null) + { + $this->categoryTradeTax = $categoryTradeTax; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePartyType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePartyType.php new file mode 100644 index 000000000..0143c3bc5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePartyType.php @@ -0,0 +1,309 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->specifiedTaxRegistration = $specifiedTaxRegistration; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePaymentTermsType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePaymentTermsType.php new file mode 100644 index 000000000..ab9247d64 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePaymentTermsType.php @@ -0,0 +1,93 @@ +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 = null) + { + $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 = null) + { + $this->directDebitMandateID = $directDebitMandateID; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePriceType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePriceType.php new file mode 100644 index 000000000..eb3d94ace --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePriceType.php @@ -0,0 +1,93 @@ +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 = null) + { + $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 = null) + { + $this->appliedTradeAllowanceCharge = $appliedTradeAllowanceCharge; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeProductType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeProductType.php new file mode 100644 index 000000000..927b0805c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeProductType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementHeaderMonetarySummationType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementHeaderMonetarySummationType.php new file mode 100644 index 000000000..1feeb3f51 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementHeaderMonetarySummationType.php @@ -0,0 +1,264 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementLineMonetarySummationType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementLineMonetarySummationType.php new file mode 100644 index 000000000..56337c328 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementLineMonetarySummationType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementPaymentMeansType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementPaymentMeansType.php new file mode 100644 index 000000000..815f18a64 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementPaymentMeansType.php @@ -0,0 +1,93 @@ +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 = null) + { + $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 = null) + { + $this->payeePartyCreditorFinancialAccount = $payeePartyCreditorFinancialAccount; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeTaxType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeTaxType.php new file mode 100644 index 000000000..c8b259e39 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeTaxType.php @@ -0,0 +1,228 @@ +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 = null) + { + $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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/ram/UniversalCommunicationType.php b/vendor/horstoeko/zugferd/src/entities/basic/ram/UniversalCommunicationType.php new file mode 100644 index 000000000..f2cd16ef3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/ram/UniversalCommunicationType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/rsm/CrossIndustryInvoice.php b/vendor/horstoeko/zugferd/src/entities/basic/rsm/CrossIndustryInvoice.php new file mode 100644 index 000000000..cd0c3affa --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/rsm/CrossIndustryInvoice.php @@ -0,0 +1,12 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/udt/AmountType.php b/vendor/horstoeko/zugferd/src/entities/basic/udt/AmountType.php new file mode 100644 index 000000000..e9fbf889a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/udt/AmountType.php @@ -0,0 +1,78 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/udt/CodeType.php b/vendor/horstoeko/zugferd/src/entities/basic/udt/CodeType.php new file mode 100644 index 000000000..8909359af --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/udt/CodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/udt/DateTimeType.php b/vendor/horstoeko/zugferd/src/entities/basic/udt/DateTimeType.php new file mode 100644 index 000000000..105e70ebd --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/udt/DateTimeType.php @@ -0,0 +1,39 @@ +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 = null) + { + $this->dateTimeString = $dateTimeString; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/udt/DateTimeType/DateTimeStringAType.php b/vendor/horstoeko/zugferd/src/entities/basic/udt/DateTimeType/DateTimeStringAType.php new file mode 100644 index 000000000..0bd01dc0f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/udt/DateTimeType/DateTimeStringAType.php @@ -0,0 +1,76 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/udt/IDType.php b/vendor/horstoeko/zugferd/src/entities/basic/udt/IDType.php new file mode 100644 index 000000000..78ab2a7cf --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/udt/IDType.php @@ -0,0 +1,78 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/udt/IndicatorType.php b/vendor/horstoeko/zugferd/src/entities/basic/udt/IndicatorType.php new file mode 100644 index 000000000..907251457 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/udt/IndicatorType.php @@ -0,0 +1,39 @@ +indicator; + } + + /** + * Sets a new indicator + * + * @param bool $indicator + * @return self + */ + public function setIndicator($indicator) + { + $this->indicator = $indicator; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/udt/PercentType.php b/vendor/horstoeko/zugferd/src/entities/basic/udt/PercentType.php new file mode 100644 index 000000000..9fe78f11b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/udt/PercentType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/udt/QuantityType.php b/vendor/horstoeko/zugferd/src/entities/basic/udt/QuantityType.php new file mode 100644 index 000000000..cbab5741e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/udt/QuantityType.php @@ -0,0 +1,78 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basic/udt/TextType.php b/vendor/horstoeko/zugferd/src/entities/basic/udt/TextType.php new file mode 100644 index 000000000..d22f8767f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basic/udt/TextType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/AllowanceChargeReasonCodeType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/AllowanceChargeReasonCodeType.php new file mode 100644 index 000000000..e06dcd451 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/AllowanceChargeReasonCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/CountryIDType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/CountryIDType.php new file mode 100644 index 000000000..dc4b3f118 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/CountryIDType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/CurrencyCodeType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/CurrencyCodeType.php new file mode 100644 index 000000000..2d58bfdb3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/CurrencyCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/DocumentCodeType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/DocumentCodeType.php new file mode 100644 index 000000000..3d1328827 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/DocumentCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/FormattedDateTimeType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/FormattedDateTimeType.php new file mode 100644 index 000000000..f9337f4a4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/FormattedDateTimeType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/FormattedDateTimeType/DateTimeStringAType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/FormattedDateTimeType/DateTimeStringAType.php new file mode 100644 index 000000000..28c91f453 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/FormattedDateTimeType/DateTimeStringAType.php @@ -0,0 +1,76 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/PaymentMeansCodeType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/PaymentMeansCodeType.php new file mode 100644 index 000000000..a30e66c07 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/PaymentMeansCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TaxCategoryCodeType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TaxCategoryCodeType.php new file mode 100644 index 000000000..858ab584e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TaxCategoryCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TaxTypeCodeType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TaxTypeCodeType.php new file mode 100644 index 000000000..09a9d257f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TaxTypeCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TimeReferenceCodeType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TimeReferenceCodeType.php new file mode 100644 index 000000000..62d869750 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TimeReferenceCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/CreditorFinancialAccountType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/CreditorFinancialAccountType.php new file mode 100644 index 000000000..daa6b98b9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/CreditorFinancialAccountType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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 = null) + { + $this->proprietaryID = $proprietaryID; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/DebtorFinancialAccountType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/DebtorFinancialAccountType.php new file mode 100644 index 000000000..e6466ce6d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/DebtorFinancialAccountType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/DocumentContextParameterType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/DocumentContextParameterType.php new file mode 100644 index 000000000..5b60634de --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/DocumentContextParameterType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ExchangedDocumentContextType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ExchangedDocumentContextType.php new file mode 100644 index 000000000..71f676306 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ExchangedDocumentContextType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ExchangedDocumentType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ExchangedDocumentType.php new file mode 100644 index 000000000..35cdf0a43 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ExchangedDocumentType.php @@ -0,0 +1,156 @@ +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 = null) + { + $this->includedNote = $includedNote; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeAgreementType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeAgreementType.php new file mode 100644 index 000000000..d434e460a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeAgreementType.php @@ -0,0 +1,174 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $this->contractReferencedDocument = $contractReferencedDocument; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeDeliveryType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeDeliveryType.php new file mode 100644 index 000000000..08c659976 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeDeliveryType.php @@ -0,0 +1,93 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $this->despatchAdviceReferencedDocument = $despatchAdviceReferencedDocument; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeSettlementType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeSettlementType.php new file mode 100644 index 000000000..3159e226a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeSettlementType.php @@ -0,0 +1,507 @@ +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 = null) + { + $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 = null) + { + $this->payeeTradeParty = $payeeTradeParty; + return $this; + } + + /** + * Adds as specifiedTradeSettlementPaymentMeans + * + * @return self + * @param \horstoeko\zugferd\entities\basicwl\ram\TradeSettlementPaymentMeansType $specifiedTradeSettlementPaymentMeans + */ + public function addToSpecifiedTradeSettlementPaymentMeans(\horstoeko\zugferd\entities\basicwl\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\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(?array $specifiedTradeSettlementPaymentMeans = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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; + } + + /** + * Adds as invoiceReferencedDocument + * + * @return self + * @param \horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType $invoiceReferencedDocument + */ + public function addToInvoiceReferencedDocument(\horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType $invoiceReferencedDocument) + { + $this->invoiceReferencedDocument[] = $invoiceReferencedDocument; + return $this; + } + + /** + * isset invoiceReferencedDocument + * + * @param int|string $index + * @return bool + */ + public function issetInvoiceReferencedDocument($index) + { + return isset($this->invoiceReferencedDocument[$index]); + } + + /** + * unset invoiceReferencedDocument + * + * @param int|string $index + * @return void + */ + public function unsetInvoiceReferencedDocument($index) + { + unset($this->invoiceReferencedDocument[$index]); + } + + /** + * 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(?array $invoiceReferencedDocument = null) + { + $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 = null) + { + $this->receivableSpecifiedTradeAccountingAccount = $receivableSpecifiedTradeAccountingAccount; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/LegalOrganizationType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/LegalOrganizationType.php new file mode 100644 index 000000000..9e1ec8499 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/LegalOrganizationType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/NoteType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/NoteType.php new file mode 100644 index 000000000..363b48b74 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/NoteType.php @@ -0,0 +1,66 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ReferencedDocumentType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ReferencedDocumentType.php new file mode 100644 index 000000000..bb7e9d050 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ReferencedDocumentType.php @@ -0,0 +1,66 @@ +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 = null) + { + $this->formattedIssueDateTime = $formattedIssueDateTime; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SpecifiedPeriodType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SpecifiedPeriodType.php new file mode 100644 index 000000000..eaf715511 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SpecifiedPeriodType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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 = null) + { + $this->endDateTime = $endDateTime; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SupplyChainEventType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SupplyChainEventType.php new file mode 100644 index 000000000..b7c106f90 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SupplyChainEventType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SupplyChainTradeTransactionType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SupplyChainTradeTransactionType.php new file mode 100644 index 000000000..9f3a4305e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SupplyChainTradeTransactionType.php @@ -0,0 +1,93 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TaxRegistrationType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TaxRegistrationType.php new file mode 100644 index 000000000..3d61f6bc4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TaxRegistrationType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAccountingAccountType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAccountingAccountType.php new file mode 100644 index 000000000..8f3197793 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAccountingAccountType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAddressType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAddressType.php new file mode 100644 index 000000000..840ec0146 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAddressType.php @@ -0,0 +1,201 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAllowanceChargeType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAllowanceChargeType.php new file mode 100644 index 000000000..37d004b04 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAllowanceChargeType.php @@ -0,0 +1,201 @@ +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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradePartyType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradePartyType.php new file mode 100644 index 000000000..24e472475 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradePartyType.php @@ -0,0 +1,309 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->specifiedTaxRegistration = $specifiedTaxRegistration; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradePaymentTermsType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradePaymentTermsType.php new file mode 100644 index 000000000..af818b289 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradePaymentTermsType.php @@ -0,0 +1,93 @@ +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 = null) + { + $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 = null) + { + $this->directDebitMandateID = $directDebitMandateID; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeSettlementHeaderMonetarySummationType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeSettlementHeaderMonetarySummationType.php new file mode 100644 index 000000000..65f62c518 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeSettlementHeaderMonetarySummationType.php @@ -0,0 +1,264 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeSettlementPaymentMeansType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeSettlementPaymentMeansType.php new file mode 100644 index 000000000..901dc1151 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeSettlementPaymentMeansType.php @@ -0,0 +1,93 @@ +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 = null) + { + $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 = null) + { + $this->payeePartyCreditorFinancialAccount = $payeePartyCreditorFinancialAccount; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeTaxType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeTaxType.php new file mode 100644 index 000000000..31c6917c6 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeTaxType.php @@ -0,0 +1,228 @@ +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 = null) + { + $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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/ram/UniversalCommunicationType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/UniversalCommunicationType.php new file mode 100644 index 000000000..45a037e11 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/ram/UniversalCommunicationType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/rsm/CrossIndustryInvoice.php b/vendor/horstoeko/zugferd/src/entities/basicwl/rsm/CrossIndustryInvoice.php new file mode 100644 index 000000000..8e595a482 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/rsm/CrossIndustryInvoice.php @@ -0,0 +1,12 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/udt/AmountType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/AmountType.php new file mode 100644 index 000000000..edef9ea9c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/AmountType.php @@ -0,0 +1,78 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/udt/CodeType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/CodeType.php new file mode 100644 index 000000000..f55479c69 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/CodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/udt/DateTimeType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/DateTimeType.php new file mode 100644 index 000000000..008ec8ce0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/DateTimeType.php @@ -0,0 +1,39 @@ +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 = null) + { + $this->dateTimeString = $dateTimeString; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/udt/DateTimeType/DateTimeStringAType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/DateTimeType/DateTimeStringAType.php new file mode 100644 index 000000000..b86014c0a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/DateTimeType/DateTimeStringAType.php @@ -0,0 +1,76 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/udt/IDType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/IDType.php new file mode 100644 index 000000000..a26818967 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/IDType.php @@ -0,0 +1,78 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/udt/IndicatorType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/IndicatorType.php new file mode 100644 index 000000000..14019f45d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/IndicatorType.php @@ -0,0 +1,39 @@ +indicator; + } + + /** + * Sets a new indicator + * + * @param bool $indicator + * @return self + */ + public function setIndicator($indicator) + { + $this->indicator = $indicator; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/udt/PercentType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/PercentType.php new file mode 100644 index 000000000..35e76b0bd --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/PercentType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/basicwl/udt/TextType.php b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/TextType.php new file mode 100644 index 000000000..750cd312b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/basicwl/udt/TextType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/qdt/AllowanceChargeReasonCodeType.php b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/AllowanceChargeReasonCodeType.php new file mode 100644 index 000000000..55eaceac7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/AllowanceChargeReasonCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/qdt/CountryIDType.php b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/CountryIDType.php new file mode 100644 index 000000000..3d3c7c6bd --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/CountryIDType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/qdt/CurrencyCodeType.php b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/CurrencyCodeType.php new file mode 100644 index 000000000..d6f60e319 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/CurrencyCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/qdt/DocumentCodeType.php b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/DocumentCodeType.php new file mode 100644 index 000000000..1bbf0653c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/DocumentCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/qdt/FormattedDateTimeType.php b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/FormattedDateTimeType.php new file mode 100644 index 000000000..aab329609 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/FormattedDateTimeType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/qdt/FormattedDateTimeType/DateTimeStringAType.php b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/FormattedDateTimeType/DateTimeStringAType.php new file mode 100644 index 000000000..5c47185b8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/FormattedDateTimeType/DateTimeStringAType.php @@ -0,0 +1,76 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/qdt/PaymentMeansCodeType.php b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/PaymentMeansCodeType.php new file mode 100644 index 000000000..8b79f6d06 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/PaymentMeansCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/qdt/ReferenceCodeType.php b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/ReferenceCodeType.php new file mode 100644 index 000000000..c724d7e1d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/ReferenceCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TaxCategoryCodeType.php b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TaxCategoryCodeType.php new file mode 100644 index 000000000..d7ab3fd79 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TaxCategoryCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TaxTypeCodeType.php b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TaxTypeCodeType.php new file mode 100644 index 000000000..26370b16b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TaxTypeCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TimeReferenceCodeType.php b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TimeReferenceCodeType.php new file mode 100644 index 000000000..ab91517f3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TimeReferenceCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/CreditorFinancialAccountType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/CreditorFinancialAccountType.php new file mode 100644 index 000000000..eed8f70b7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/CreditorFinancialAccountType.php @@ -0,0 +1,93 @@ +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 = null) + { + $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 = null) + { + $this->proprietaryID = $proprietaryID; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/CreditorFinancialInstitutionType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/CreditorFinancialInstitutionType.php new file mode 100644 index 000000000..929a81971 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/CreditorFinancialInstitutionType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/DebtorFinancialAccountType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/DebtorFinancialAccountType.php new file mode 100644 index 000000000..57737419f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/DebtorFinancialAccountType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/DocumentContextParameterType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/DocumentContextParameterType.php new file mode 100644 index 000000000..030e78161 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/DocumentContextParameterType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/DocumentLineDocumentType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/DocumentLineDocumentType.php new file mode 100644 index 000000000..509de9ebe --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/DocumentLineDocumentType.php @@ -0,0 +1,66 @@ +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 = null) + { + $this->includedNote = $includedNote; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/ExchangedDocumentContextType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/ExchangedDocumentContextType.php new file mode 100644 index 000000000..a34e80901 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/ExchangedDocumentContextType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/ExchangedDocumentType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/ExchangedDocumentType.php new file mode 100644 index 000000000..1eccb97bd --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/ExchangedDocumentType.php @@ -0,0 +1,156 @@ +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 = null) + { + $this->includedNote = $includedNote; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeAgreementType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeAgreementType.php new file mode 100644 index 000000000..a4281d109 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeAgreementType.php @@ -0,0 +1,291 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->specifiedProcuringProject = $specifiedProcuringProject; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeDeliveryType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeDeliveryType.php new file mode 100644 index 000000000..0304668d3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeDeliveryType.php @@ -0,0 +1,120 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->receivingAdviceReferencedDocument = $receivingAdviceReferencedDocument; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeSettlementType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeSettlementType.php new file mode 100644 index 000000000..52a23be50 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeSettlementType.php @@ -0,0 +1,507 @@ +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 = null) + { + $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 = null) + { + $this->payeeTradeParty = $payeeTradeParty; + return $this; + } + + /** + * Adds as specifiedTradeSettlementPaymentMeans + * + * @return self + * @param \horstoeko\zugferd\entities\en16931\ram\TradeSettlementPaymentMeansType $specifiedTradeSettlementPaymentMeans + */ + public function addToSpecifiedTradeSettlementPaymentMeans(\horstoeko\zugferd\entities\en16931\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\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(?array $specifiedTradeSettlementPaymentMeans = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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; + } + + /** + * Adds as invoiceReferencedDocument + * + * @return self + * @param \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $invoiceReferencedDocument + */ + public function addToInvoiceReferencedDocument(\horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $invoiceReferencedDocument) + { + $this->invoiceReferencedDocument[] = $invoiceReferencedDocument; + return $this; + } + + /** + * isset invoiceReferencedDocument + * + * @param int|string $index + * @return bool + */ + public function issetInvoiceReferencedDocument($index) + { + return isset($this->invoiceReferencedDocument[$index]); + } + + /** + * unset invoiceReferencedDocument + * + * @param int|string $index + * @return void + */ + public function unsetInvoiceReferencedDocument($index) + { + unset($this->invoiceReferencedDocument[$index]); + } + + /** + * 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(?array $invoiceReferencedDocument = null) + { + $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 = null) + { + $this->receivableSpecifiedTradeAccountingAccount = $receivableSpecifiedTradeAccountingAccount; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/LegalOrganizationType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/LegalOrganizationType.php new file mode 100644 index 000000000..1e4af1572 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/LegalOrganizationType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeAgreementType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeAgreementType.php new file mode 100644 index 000000000..4e8d5243d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeAgreementType.php @@ -0,0 +1,93 @@ +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 = null) + { + $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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeDeliveryType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeDeliveryType.php new file mode 100644 index 000000000..2d755671c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeDeliveryType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeSettlementType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeSettlementType.php new file mode 100644 index 000000000..b1d98e4bd --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeSettlementType.php @@ -0,0 +1,210 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->receivableSpecifiedTradeAccountingAccount = $receivableSpecifiedTradeAccountingAccount; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/NoteType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/NoteType.php new file mode 100644 index 000000000..28252f0ce --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/NoteType.php @@ -0,0 +1,66 @@ +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 = null) + { + $this->subjectCode = $subjectCode; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProcuringProjectType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProcuringProjectType.php new file mode 100644 index 000000000..cf4e39cef --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProcuringProjectType.php @@ -0,0 +1,66 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProductCharacteristicType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProductCharacteristicType.php new file mode 100644 index 000000000..3b5e99381 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProductCharacteristicType.php @@ -0,0 +1,66 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProductClassificationType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProductClassificationType.php new file mode 100644 index 000000000..ae0b6beee --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProductClassificationType.php @@ -0,0 +1,39 @@ +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 = null) + { + $this->classCode = $classCode; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/ReferencedDocumentType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/ReferencedDocumentType.php new file mode 100644 index 000000000..0fb1000ae --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/ReferencedDocumentType.php @@ -0,0 +1,228 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->formattedIssueDateTime = $formattedIssueDateTime; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/SpecifiedPeriodType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/SpecifiedPeriodType.php new file mode 100644 index 000000000..036e8e6b4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/SpecifiedPeriodType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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 = null) + { + $this->endDateTime = $endDateTime; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainEventType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainEventType.php new file mode 100644 index 000000000..f1425123f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainEventType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainTradeLineItemType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainTradeLineItemType.php new file mode 100644 index 000000000..23ae5541c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainTradeLineItemType.php @@ -0,0 +1,147 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainTradeTransactionType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainTradeTransactionType.php new file mode 100644 index 000000000..f89310dcf --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainTradeTransactionType.php @@ -0,0 +1,156 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/TaxRegistrationType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TaxRegistrationType.php new file mode 100644 index 000000000..e2f9937b4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TaxRegistrationType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAccountingAccountType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAccountingAccountType.php new file mode 100644 index 000000000..f99b7195c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAccountingAccountType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAddressType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAddressType.php new file mode 100644 index 000000000..4947ab4e5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAddressType.php @@ -0,0 +1,201 @@ +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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAllowanceChargeType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAllowanceChargeType.php new file mode 100644 index 000000000..8cc71da7d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAllowanceChargeType.php @@ -0,0 +1,201 @@ +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 = null) + { + $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 = null) + { + $this->categoryTradeTax = $categoryTradeTax; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeContactType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeContactType.php new file mode 100644 index 000000000..d74db3596 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeContactType.php @@ -0,0 +1,120 @@ +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 = null) + { + $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 = null) + { + $this->emailURIUniversalCommunication = $emailURIUniversalCommunication; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeCountryType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeCountryType.php new file mode 100644 index 000000000..e3228c22e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeCountryType.php @@ -0,0 +1,39 @@ +iD; + } + + /** + * Sets a new iD + * + * @param string $iD + * @return self + */ + public function setID($iD) + { + $this->iD = $iD; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePartyType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePartyType.php new file mode 100644 index 000000000..4ec80d5f2 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePartyType.php @@ -0,0 +1,363 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->specifiedTaxRegistration = $specifiedTaxRegistration; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePaymentTermsType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePaymentTermsType.php new file mode 100644 index 000000000..e57bf198a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePaymentTermsType.php @@ -0,0 +1,93 @@ +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 = null) + { + $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 = null) + { + $this->directDebitMandateID = $directDebitMandateID; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePriceType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePriceType.php new file mode 100644 index 000000000..f8768354f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePriceType.php @@ -0,0 +1,93 @@ +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 = null) + { + $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 = null) + { + $this->appliedTradeAllowanceCharge = $appliedTradeAllowanceCharge; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeProductType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeProductType.php new file mode 100644 index 000000000..66d7ecbdc --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeProductType.php @@ -0,0 +1,300 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->originTradeCountry = $originTradeCountry; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementFinancialCardType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementFinancialCardType.php new file mode 100644 index 000000000..e3e7b5cc3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementFinancialCardType.php @@ -0,0 +1,66 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementHeaderMonetarySummationType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementHeaderMonetarySummationType.php new file mode 100644 index 000000000..a46c9d5cf --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementHeaderMonetarySummationType.php @@ -0,0 +1,291 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementLineMonetarySummationType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementLineMonetarySummationType.php new file mode 100644 index 000000000..67881fa50 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementLineMonetarySummationType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementPaymentMeansType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementPaymentMeansType.php new file mode 100644 index 000000000..ea8592833 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementPaymentMeansType.php @@ -0,0 +1,174 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->payeeSpecifiedCreditorFinancialInstitution = $payeeSpecifiedCreditorFinancialInstitution; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeTaxType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeTaxType.php new file mode 100644 index 000000000..95ef3ab75 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeTaxType.php @@ -0,0 +1,255 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/ram/UniversalCommunicationType.php b/vendor/horstoeko/zugferd/src/entities/en16931/ram/UniversalCommunicationType.php new file mode 100644 index 000000000..c58e49cb7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/ram/UniversalCommunicationType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/rsm/CrossIndustryInvoice.php b/vendor/horstoeko/zugferd/src/entities/en16931/rsm/CrossIndustryInvoice.php new file mode 100644 index 000000000..6b7d1710f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/rsm/CrossIndustryInvoice.php @@ -0,0 +1,12 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/udt/AmountType.php b/vendor/horstoeko/zugferd/src/entities/en16931/udt/AmountType.php new file mode 100644 index 000000000..fdd285619 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/udt/AmountType.php @@ -0,0 +1,78 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/udt/BinaryObjectType.php b/vendor/horstoeko/zugferd/src/entities/en16931/udt/BinaryObjectType.php new file mode 100644 index 000000000..b41247f65 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/udt/BinaryObjectType.php @@ -0,0 +1,105 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/udt/CodeType.php b/vendor/horstoeko/zugferd/src/entities/en16931/udt/CodeType.php new file mode 100644 index 000000000..def52fcbf --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/udt/CodeType.php @@ -0,0 +1,105 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateTimeType.php b/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateTimeType.php new file mode 100644 index 000000000..808b156ab --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateTimeType.php @@ -0,0 +1,39 @@ +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 = null) + { + $this->dateTimeString = $dateTimeString; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateTimeType/DateTimeStringAType.php b/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateTimeType/DateTimeStringAType.php new file mode 100644 index 000000000..c3076b94d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateTimeType/DateTimeStringAType.php @@ -0,0 +1,76 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateType.php b/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateType.php new file mode 100644 index 000000000..06366972a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateType.php @@ -0,0 +1,39 @@ +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 = null) + { + $this->dateString = $dateString; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateType/DateStringAType.php b/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateType/DateStringAType.php new file mode 100644 index 000000000..d65f34285 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateType/DateStringAType.php @@ -0,0 +1,76 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/udt/IDType.php b/vendor/horstoeko/zugferd/src/entities/en16931/udt/IDType.php new file mode 100644 index 000000000..9f4ef3709 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/udt/IDType.php @@ -0,0 +1,78 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/udt/IndicatorType.php b/vendor/horstoeko/zugferd/src/entities/en16931/udt/IndicatorType.php new file mode 100644 index 000000000..aed79735b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/udt/IndicatorType.php @@ -0,0 +1,39 @@ +indicator; + } + + /** + * Sets a new indicator + * + * @param bool $indicator + * @return self + */ + public function setIndicator($indicator) + { + $this->indicator = $indicator; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/udt/PercentType.php b/vendor/horstoeko/zugferd/src/entities/en16931/udt/PercentType.php new file mode 100644 index 000000000..5e3a1d42a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/udt/PercentType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/udt/QuantityType.php b/vendor/horstoeko/zugferd/src/entities/en16931/udt/QuantityType.php new file mode 100644 index 000000000..2a118b27b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/udt/QuantityType.php @@ -0,0 +1,78 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/en16931/udt/TextType.php b/vendor/horstoeko/zugferd/src/entities/en16931/udt/TextType.php new file mode 100644 index 000000000..a3e68a861 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/en16931/udt/TextType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/AccountingAccountTypeCodeType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/AccountingAccountTypeCodeType.php new file mode 100644 index 000000000..ef16aa3e8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/AccountingAccountTypeCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/AllowanceChargeReasonCodeType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/AllowanceChargeReasonCodeType.php new file mode 100644 index 000000000..0a5842d30 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/AllowanceChargeReasonCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/ContactTypeCodeType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/ContactTypeCodeType.php new file mode 100644 index 000000000..c4f687986 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/ContactTypeCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/CountryIDType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/CountryIDType.php new file mode 100644 index 000000000..45eef1bbc --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/CountryIDType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/CurrencyCodeType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/CurrencyCodeType.php new file mode 100644 index 000000000..63a49def9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/CurrencyCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/DeliveryTermsCodeType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/DeliveryTermsCodeType.php new file mode 100644 index 000000000..f622d336b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/DeliveryTermsCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/DocumentCodeType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/DocumentCodeType.php new file mode 100644 index 000000000..d4ba6a65c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/DocumentCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/FormattedDateTimeType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/FormattedDateTimeType.php new file mode 100644 index 000000000..fbaa280d5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/FormattedDateTimeType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/FormattedDateTimeType/DateTimeStringAType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/FormattedDateTimeType/DateTimeStringAType.php new file mode 100644 index 000000000..6de6e2620 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/FormattedDateTimeType/DateTimeStringAType.php @@ -0,0 +1,76 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/LineStatusCodeType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/LineStatusCodeType.php new file mode 100644 index 000000000..1115c8ce3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/LineStatusCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/PartyRoleCodeType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/PartyRoleCodeType.php new file mode 100644 index 000000000..153614771 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/PartyRoleCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/PaymentMeansCodeType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/PaymentMeansCodeType.php new file mode 100644 index 000000000..85534ccfe --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/PaymentMeansCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/ReferenceCodeType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/ReferenceCodeType.php new file mode 100644 index 000000000..0f7fdc57c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/ReferenceCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/TaxCategoryCodeType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/TaxCategoryCodeType.php new file mode 100644 index 000000000..c1dbc471f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/TaxCategoryCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/TaxTypeCodeType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/TaxTypeCodeType.php new file mode 100644 index 000000000..0690c6016 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/TaxTypeCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/TimeReferenceCodeType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/TimeReferenceCodeType.php new file mode 100644 index 000000000..d1ac5566c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/TimeReferenceCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/qdt/TransportModeCodeType.php b/vendor/horstoeko/zugferd/src/entities/extended/qdt/TransportModeCodeType.php new file mode 100644 index 000000000..32083e4ba --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/qdt/TransportModeCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/AdvancePaymentType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/AdvancePaymentType.php new file mode 100644 index 000000000..334bcf17a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/AdvancePaymentType.php @@ -0,0 +1,156 @@ +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 = null) + { + $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; + } + + /** + * Gets as invoiceSpecifiedReferencedDocument + * + * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType + */ + public function getInvoiceSpecifiedReferencedDocument() + { + return $this->invoiceSpecifiedReferencedDocument; + } + + /** + * Sets a new invoiceSpecifiedReferencedDocument + * + * @param \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $invoiceSpecifiedReferencedDocument + * @return self + */ + public function setInvoiceSpecifiedReferencedDocument(?\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $invoiceSpecifiedReferencedDocument = null) + { + $this->invoiceSpecifiedReferencedDocument = $invoiceSpecifiedReferencedDocument; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/CreditorFinancialAccountType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/CreditorFinancialAccountType.php new file mode 100644 index 000000000..0d8352436 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/CreditorFinancialAccountType.php @@ -0,0 +1,93 @@ +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 = null) + { + $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 = null) + { + $this->proprietaryID = $proprietaryID; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/CreditorFinancialInstitutionType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/CreditorFinancialInstitutionType.php new file mode 100644 index 000000000..4e69bf1ec --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/CreditorFinancialInstitutionType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/DebtorFinancialAccountType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/DebtorFinancialAccountType.php new file mode 100644 index 000000000..1fcaa0909 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/DebtorFinancialAccountType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/DocumentContextParameterType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/DocumentContextParameterType.php new file mode 100644 index 000000000..ef5e508ee --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/DocumentContextParameterType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/DocumentLineDocumentType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/DocumentLineDocumentType.php new file mode 100644 index 000000000..7995afeb1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/DocumentLineDocumentType.php @@ -0,0 +1,183 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $this->includedNote = $includedNote; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/ExchangedDocumentContextType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/ExchangedDocumentContextType.php new file mode 100644 index 000000000..f0406a6cf --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/ExchangedDocumentContextType.php @@ -0,0 +1,93 @@ +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 = null) + { + $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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/ExchangedDocumentType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/ExchangedDocumentType.php new file mode 100644 index 000000000..3e1453766 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/ExchangedDocumentType.php @@ -0,0 +1,264 @@ +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 = null) + { + $this->copyIndicator = $copyIndicator; + return $this; + } + + /** + * 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(?\horstoeko\zugferd\entities\extended\udt\IDType $languageID = null) + { + $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 = null) + { + $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 = null) + { + $this->effectiveSpecifiedPeriod = $effectiveSpecifiedPeriod; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeAgreementType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeAgreementType.php new file mode 100644 index 000000000..1a7ad45c7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeAgreementType.php @@ -0,0 +1,516 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->ultimateCustomerOrderReferencedDocument = $ultimateCustomerOrderReferencedDocument; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeDeliveryType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeDeliveryType.php new file mode 100644 index 000000000..47b19d0da --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeDeliveryType.php @@ -0,0 +1,262 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->deliveryNoteReferencedDocument = $deliveryNoteReferencedDocument; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeSettlementType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeSettlementType.php new file mode 100644 index 000000000..326d0fd7b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeSettlementType.php @@ -0,0 +1,840 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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; + } + + /** + * Adds as invoiceReferencedDocument + * + * @return self + * @param \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $invoiceReferencedDocument + */ + public function addToInvoiceReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $invoiceReferencedDocument) + { + $this->invoiceReferencedDocument[] = $invoiceReferencedDocument; + return $this; + } + + /** + * isset invoiceReferencedDocument + * + * @param int|string $index + * @return bool + */ + public function issetInvoiceReferencedDocument($index) + { + return isset($this->invoiceReferencedDocument[$index]); + } + + /** + * unset invoiceReferencedDocument + * + * @param int|string $index + * @return void + */ + public function unsetInvoiceReferencedDocument($index) + { + unset($this->invoiceReferencedDocument[$index]); + } + + /** + * 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(?array $invoiceReferencedDocument = null) + { + $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 = null) + { + $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 = null) + { + $this->specifiedAdvancePayment = $specifiedAdvancePayment; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/LegalOrganizationType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/LegalOrganizationType.php new file mode 100644 index 000000000..cbcbec917 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/LegalOrganizationType.php @@ -0,0 +1,93 @@ +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 = null) + { + $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 = null) + { + $this->postalTradeAddress = $postalTradeAddress; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeAgreementType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeAgreementType.php new file mode 100644 index 000000000..c56f72ca6 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeAgreementType.php @@ -0,0 +1,300 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->ultimateCustomerOrderReferencedDocument = $ultimateCustomerOrderReferencedDocument; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeDeliveryType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeDeliveryType.php new file mode 100644 index 000000000..efe28eb82 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeDeliveryType.php @@ -0,0 +1,255 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->deliveryNoteReferencedDocument = $deliveryNoteReferencedDocument; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeSettlementType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeSettlementType.php new file mode 100644 index 000000000..ccbf01391 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeSettlementType.php @@ -0,0 +1,309 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->receivableSpecifiedTradeAccountingAccount = $receivableSpecifiedTradeAccountingAccount; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/LogisticsServiceChargeType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/LogisticsServiceChargeType.php new file mode 100644 index 000000000..30094b6f8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/LogisticsServiceChargeType.php @@ -0,0 +1,129 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/LogisticsTransportMovementType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/LogisticsTransportMovementType.php new file mode 100644 index 000000000..99b1367e0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/LogisticsTransportMovementType.php @@ -0,0 +1,39 @@ +modeCode; + } + + /** + * Sets a new modeCode + * + * @param string $modeCode + * @return self + */ + public function setModeCode($modeCode) + { + $this->modeCode = $modeCode; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/NoteType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/NoteType.php new file mode 100644 index 000000000..5ecbd6fb4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/NoteType.php @@ -0,0 +1,93 @@ +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 = null) + { + $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 = null) + { + $this->subjectCode = $subjectCode; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/ProcuringProjectType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/ProcuringProjectType.php new file mode 100644 index 000000000..ad128f9d7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/ProcuringProjectType.php @@ -0,0 +1,66 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/ProductCharacteristicType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/ProductCharacteristicType.php new file mode 100644 index 000000000..a1895ffe4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/ProductCharacteristicType.php @@ -0,0 +1,120 @@ +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 = null) + { + $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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/ProductClassificationType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/ProductClassificationType.php new file mode 100644 index 000000000..bf0874164 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/ProductClassificationType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/ReferencedDocumentType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/ReferencedDocumentType.php new file mode 100644 index 000000000..3c424c62b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/ReferencedDocumentType.php @@ -0,0 +1,228 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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\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 = null) + { + $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 = null) + { + $this->formattedIssueDateTime = $formattedIssueDateTime; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/ReferencedProductType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/ReferencedProductType.php new file mode 100644 index 000000000..99cd4d358 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/ReferencedProductType.php @@ -0,0 +1,264 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->unitQuantity = $unitQuantity; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/SpecifiedPeriodType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/SpecifiedPeriodType.php new file mode 100644 index 000000000..68d0c99c9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/SpecifiedPeriodType.php @@ -0,0 +1,120 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $this->completeDateTime = $completeDateTime; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainConsignmentType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainConsignmentType.php new file mode 100644 index 000000000..d12003078 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainConsignmentType.php @@ -0,0 +1,75 @@ +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 = null) + { + $this->specifiedLogisticsTransportMovement = $specifiedLogisticsTransportMovement; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainEventType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainEventType.php new file mode 100644 index 000000000..7ec44e86c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainEventType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainTradeLineItemType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainTradeLineItemType.php new file mode 100644 index 000000000..41b3188ef --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainTradeLineItemType.php @@ -0,0 +1,147 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainTradeTransactionType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainTradeTransactionType.php new file mode 100644 index 000000000..254d9d8fc --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainTradeTransactionType.php @@ -0,0 +1,156 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TaxRegistrationType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TaxRegistrationType.php new file mode 100644 index 000000000..ee6cc8037 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TaxRegistrationType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAccountingAccountType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAccountingAccountType.php new file mode 100644 index 000000000..5584e4dc6 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAccountingAccountType.php @@ -0,0 +1,66 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAddressType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAddressType.php new file mode 100644 index 000000000..cc68776a1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAddressType.php @@ -0,0 +1,201 @@ +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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAllowanceChargeType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAllowanceChargeType.php new file mode 100644 index 000000000..2bc30dfda --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAllowanceChargeType.php @@ -0,0 +1,255 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $this->categoryTradeTax = $categoryTradeTax; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeContactType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeContactType.php new file mode 100644 index 000000000..c2e8aea68 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeContactType.php @@ -0,0 +1,174 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $this->emailURIUniversalCommunication = $emailURIUniversalCommunication; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeCountryType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeCountryType.php new file mode 100644 index 000000000..4eef28d8f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeCountryType.php @@ -0,0 +1,39 @@ +iD; + } + + /** + * Sets a new iD + * + * @param string $iD + * @return self + */ + public function setID($iD) + { + $this->iD = $iD; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeCurrencyExchangeType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeCurrencyExchangeType.php new file mode 100644 index 000000000..696d6039a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeCurrencyExchangeType.php @@ -0,0 +1,120 @@ +sourceCurrencyCode; + } + + /** + * Sets a new sourceCurrencyCode + * + * @param string $sourceCurrencyCode + * @return self + */ + public function setSourceCurrencyCode($sourceCurrencyCode) + { + $this->sourceCurrencyCode = $sourceCurrencyCode; + return $this; + } + + /** + * Gets as targetCurrencyCode + * + * @return string + */ + public function getTargetCurrencyCode() + { + return $this->targetCurrencyCode; + } + + /** + * Sets a new targetCurrencyCode + * + * @param string $targetCurrencyCode + * @return self + */ + public function setTargetCurrencyCode($targetCurrencyCode) + { + $this->targetCurrencyCode = $targetCurrencyCode; + return $this; + } + + /** + * Gets as conversionRate + * + * @return float + */ + public function getConversionRate() + { + return $this->conversionRate; + } + + /** + * Sets a new conversionRate + * + * @param float $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 = null) + { + $this->conversionRateDateTime = $conversionRateDateTime; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeDeliveryTermsType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeDeliveryTermsType.php new file mode 100644 index 000000000..f80adf4ed --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeDeliveryTermsType.php @@ -0,0 +1,39 @@ +deliveryTypeCode; + } + + /** + * Sets a new deliveryTypeCode + * + * @param string $deliveryTypeCode + * @return self + */ + public function setDeliveryTypeCode($deliveryTypeCode) + { + $this->deliveryTypeCode = $deliveryTypeCode; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePartyType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePartyType.php new file mode 100644 index 000000000..1c463f03a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePartyType.php @@ -0,0 +1,426 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->specifiedTaxRegistration = $specifiedTaxRegistration; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentDiscountTermsType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentDiscountTermsType.php new file mode 100644 index 000000000..efce8a281 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentDiscountTermsType.php @@ -0,0 +1,147 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->actualDiscountAmount = $actualDiscountAmount; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentPenaltyTermsType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentPenaltyTermsType.php new file mode 100644 index 000000000..fcd87e578 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentPenaltyTermsType.php @@ -0,0 +1,147 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->actualPenaltyAmount = $actualPenaltyAmount; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentTermsType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentTermsType.php new file mode 100644 index 000000000..7c18d035d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentTermsType.php @@ -0,0 +1,201 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->payeeTradeParty = $payeeTradeParty; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePriceType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePriceType.php new file mode 100644 index 000000000..bac7da487 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePriceType.php @@ -0,0 +1,156 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $this->includedTradeTax = $includedTradeTax; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeProductInstanceType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeProductInstanceType.php new file mode 100644 index 000000000..c21e0a194 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeProductInstanceType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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 = null) + { + $this->supplierAssignedSerialID = $supplierAssignedSerialID; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeProductType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeProductType.php new file mode 100644 index 000000000..37e9b4776 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeProductType.php @@ -0,0 +1,624 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->industryAssignedID = $industryAssignedID; + return $this; + } + + /** + * Gets as modelID + * + * @return \horstoeko\zugferd\entities\extended\udt\IDType + */ + public function getModelID() + { + return $this->modelID; + } + + /** + * Sets a new modelID + * + * @param \horstoeko\zugferd\entities\extended\udt\IDType $modelID + * @return self + */ + public function setModelID(?\horstoeko\zugferd\entities\extended\udt\IDType $modelID = null) + { + $this->modelID = $modelID; + 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 batchID + * + * @return self + * @param \horstoeko\zugferd\entities\extended\udt\IDType $batchID + */ + public function addToBatchID(\horstoeko\zugferd\entities\extended\udt\IDType $batchID) + { + $this->batchID[] = $batchID; + return $this; + } + + /** + * isset batchID + * + * @param int|string $index + * @return bool + */ + public function issetBatchID($index) + { + return isset($this->batchID[$index]); + } + + /** + * unset batchID + * + * @param int|string $index + * @return void + */ + public function unsetBatchID($index) + { + unset($this->batchID[$index]); + } + + /** + * 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(?array $batchID = null) + { + $this->batchID = $batchID; + return $this; + } + + /** + * Gets as brandName + * + * @return string + */ + public function getBrandName() + { + return $this->brandName; + } + + /** + * Sets a new brandName + * + * @param string $brandName + * @return self + */ + public function setBrandName($brandName) + { + $this->brandName = $brandName; + return $this; + } + + /** + * Gets as modelName + * + * @return string + */ + public function getModelName() + { + return $this->modelName; + } + + /** + * Sets a new modelName + * + * @param string $modelName + * @return self + */ + public function setModelName($modelName) + { + $this->modelName = $modelName; + 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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->includedReferencedProduct = $includedReferencedProduct; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementFinancialCardType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementFinancialCardType.php new file mode 100644 index 000000000..b7e361712 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementFinancialCardType.php @@ -0,0 +1,66 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementHeaderMonetarySummationType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementHeaderMonetarySummationType.php new file mode 100644 index 000000000..9558bc1d4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementHeaderMonetarySummationType.php @@ -0,0 +1,291 @@ +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 = null) + { + $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 = null) + { + $this->allowanceTotalAmount = $allowanceTotalAmount; + return $this; + } + + /** + * 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(\horstoeko\zugferd\entities\extended\udt\AmountType $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 = null) + { + $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 = null) + { + $this->roundingAmount = $roundingAmount; + 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 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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementLineMonetarySummationType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementLineMonetarySummationType.php new file mode 100644 index 000000000..d8fc0a0dd --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementLineMonetarySummationType.php @@ -0,0 +1,174 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->totalAllowanceChargeAmount = $totalAllowanceChargeAmount; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementPaymentMeansType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementPaymentMeansType.php new file mode 100644 index 000000000..a0d693872 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementPaymentMeansType.php @@ -0,0 +1,174 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $this->payeeSpecifiedCreditorFinancialInstitution = $payeeSpecifiedCreditorFinancialInstitution; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeTaxType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeTaxType.php new file mode 100644 index 000000000..b8fda5535 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeTaxType.php @@ -0,0 +1,309 @@ +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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/ram/UniversalCommunicationType.php b/vendor/horstoeko/zugferd/src/entities/extended/ram/UniversalCommunicationType.php new file mode 100644 index 000000000..4ed05ccc2 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/ram/UniversalCommunicationType.php @@ -0,0 +1,66 @@ +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 = null) + { + $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/rsm/CrossIndustryInvoice.php b/vendor/horstoeko/zugferd/src/entities/extended/rsm/CrossIndustryInvoice.php new file mode 100644 index 000000000..95f5235bb --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/rsm/CrossIndustryInvoice.php @@ -0,0 +1,12 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/udt/AmountType.php b/vendor/horstoeko/zugferd/src/entities/extended/udt/AmountType.php new file mode 100644 index 000000000..c5242ec5a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/udt/AmountType.php @@ -0,0 +1,78 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/udt/BinaryObjectType.php b/vendor/horstoeko/zugferd/src/entities/extended/udt/BinaryObjectType.php new file mode 100644 index 000000000..b0d3e75dc --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/udt/BinaryObjectType.php @@ -0,0 +1,105 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/udt/CodeType.php b/vendor/horstoeko/zugferd/src/entities/extended/udt/CodeType.php new file mode 100644 index 000000000..821f07df4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/udt/CodeType.php @@ -0,0 +1,105 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/udt/DateTimeType.php b/vendor/horstoeko/zugferd/src/entities/extended/udt/DateTimeType.php new file mode 100644 index 000000000..4645f0b70 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/udt/DateTimeType.php @@ -0,0 +1,39 @@ +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 = null) + { + $this->dateTimeString = $dateTimeString; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/udt/DateTimeType/DateTimeStringAType.php b/vendor/horstoeko/zugferd/src/entities/extended/udt/DateTimeType/DateTimeStringAType.php new file mode 100644 index 000000000..91bac507d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/udt/DateTimeType/DateTimeStringAType.php @@ -0,0 +1,76 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/udt/DateType.php b/vendor/horstoeko/zugferd/src/entities/extended/udt/DateType.php new file mode 100644 index 000000000..7d60c99f3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/udt/DateType.php @@ -0,0 +1,39 @@ +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 = null) + { + $this->dateString = $dateString; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/udt/DateType/DateStringAType.php b/vendor/horstoeko/zugferd/src/entities/extended/udt/DateType/DateStringAType.php new file mode 100644 index 000000000..ee62af72b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/udt/DateType/DateStringAType.php @@ -0,0 +1,76 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/udt/IDType.php b/vendor/horstoeko/zugferd/src/entities/extended/udt/IDType.php new file mode 100644 index 000000000..3f21b1d56 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/udt/IDType.php @@ -0,0 +1,78 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/udt/IndicatorType.php b/vendor/horstoeko/zugferd/src/entities/extended/udt/IndicatorType.php new file mode 100644 index 000000000..36142436c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/udt/IndicatorType.php @@ -0,0 +1,39 @@ +indicator; + } + + /** + * Sets a new indicator + * + * @param bool $indicator + * @return self + */ + public function setIndicator($indicator) + { + $this->indicator = $indicator; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/udt/MeasureType.php b/vendor/horstoeko/zugferd/src/entities/extended/udt/MeasureType.php new file mode 100644 index 000000000..eccb54a68 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/udt/MeasureType.php @@ -0,0 +1,78 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/udt/NumericType.php b/vendor/horstoeko/zugferd/src/entities/extended/udt/NumericType.php new file mode 100644 index 000000000..552a797e3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/udt/NumericType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/udt/PercentType.php b/vendor/horstoeko/zugferd/src/entities/extended/udt/PercentType.php new file mode 100644 index 000000000..1db2a8ef1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/udt/PercentType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/udt/QuantityType.php b/vendor/horstoeko/zugferd/src/entities/extended/udt/QuantityType.php new file mode 100644 index 000000000..0de38f59a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/udt/QuantityType.php @@ -0,0 +1,78 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/udt/RateType.php b/vendor/horstoeko/zugferd/src/entities/extended/udt/RateType.php new file mode 100644 index 000000000..82a611df8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/udt/RateType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/extended/udt/TextType.php b/vendor/horstoeko/zugferd/src/entities/extended/udt/TextType.php new file mode 100644 index 000000000..63add144f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/extended/udt/TextType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/qdt/CountryIDType.php b/vendor/horstoeko/zugferd/src/entities/minimum/qdt/CountryIDType.php new file mode 100644 index 000000000..d565110c6 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/qdt/CountryIDType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/qdt/CurrencyCodeType.php b/vendor/horstoeko/zugferd/src/entities/minimum/qdt/CurrencyCodeType.php new file mode 100644 index 000000000..7db84ecf0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/qdt/CurrencyCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/qdt/DocumentCodeType.php b/vendor/horstoeko/zugferd/src/entities/minimum/qdt/DocumentCodeType.php new file mode 100644 index 000000000..a836dbaef --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/qdt/DocumentCodeType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/ram/DocumentContextParameterType.php b/vendor/horstoeko/zugferd/src/entities/minimum/ram/DocumentContextParameterType.php new file mode 100644 index 000000000..18a60c9cc --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/ram/DocumentContextParameterType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/ram/ExchangedDocumentContextType.php b/vendor/horstoeko/zugferd/src/entities/minimum/ram/ExchangedDocumentContextType.php new file mode 100644 index 000000000..3f774278c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/ram/ExchangedDocumentContextType.php @@ -0,0 +1,66 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/ram/ExchangedDocumentType.php b/vendor/horstoeko/zugferd/src/entities/minimum/ram/ExchangedDocumentType.php new file mode 100644 index 000000000..ec5cb57c8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/ram/ExchangedDocumentType.php @@ -0,0 +1,93 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeAgreementType.php b/vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeAgreementType.php new file mode 100644 index 000000000..7f77a9504 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeAgreementType.php @@ -0,0 +1,120 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeDeliveryType.php b/vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeDeliveryType.php new file mode 100644 index 000000000..f1d4033b3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeDeliveryType.php @@ -0,0 +1,14 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/ram/LegalOrganizationType.php b/vendor/horstoeko/zugferd/src/entities/minimum/ram/LegalOrganizationType.php new file mode 100644 index 000000000..32fc1ec53 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/ram/LegalOrganizationType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/ram/ReferencedDocumentType.php b/vendor/horstoeko/zugferd/src/entities/minimum/ram/ReferencedDocumentType.php new file mode 100644 index 000000000..20ca7aa6b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/ram/ReferencedDocumentType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/ram/SupplyChainTradeTransactionType.php b/vendor/horstoeko/zugferd/src/entities/minimum/ram/SupplyChainTradeTransactionType.php new file mode 100644 index 000000000..3b9d80db0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/ram/SupplyChainTradeTransactionType.php @@ -0,0 +1,93 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/ram/TaxRegistrationType.php b/vendor/horstoeko/zugferd/src/entities/minimum/ram/TaxRegistrationType.php new file mode 100644 index 000000000..7530d3b17 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/ram/TaxRegistrationType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradeAddressType.php b/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradeAddressType.php new file mode 100644 index 000000000..065f7a203 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradeAddressType.php @@ -0,0 +1,39 @@ +countryID; + } + + /** + * Sets a new countryID + * + * @param string $countryID + * @return self + */ + public function setCountryID($countryID) + { + $this->countryID = $countryID; + return $this; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradePartyType.php b/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradePartyType.php new file mode 100644 index 000000000..926bb39a4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradePartyType.php @@ -0,0 +1,156 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradeSettlementHeaderMonetarySummationType.php b/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradeSettlementHeaderMonetarySummationType.php new file mode 100644 index 000000000..0ab440f4b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradeSettlementHeaderMonetarySummationType.php @@ -0,0 +1,156 @@ +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; + } + + /** + * Adds as taxTotalAmount + * + * @return self + * @param \horstoeko\zugferd\entities\minimum\udt\AmountType $taxTotalAmount + */ + public function addToTaxTotalAmount(\horstoeko\zugferd\entities\minimum\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\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(?array $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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/rsm/CrossIndustryInvoice.php b/vendor/horstoeko/zugferd/src/entities/minimum/rsm/CrossIndustryInvoice.php new file mode 100644 index 000000000..f8ca98d2b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/rsm/CrossIndustryInvoice.php @@ -0,0 +1,12 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/udt/AmountType.php b/vendor/horstoeko/zugferd/src/entities/minimum/udt/AmountType.php new file mode 100644 index 000000000..5b26479a4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/udt/AmountType.php @@ -0,0 +1,78 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/udt/DateTimeType.php b/vendor/horstoeko/zugferd/src/entities/minimum/udt/DateTimeType.php new file mode 100644 index 000000000..b0df80d55 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/udt/DateTimeType.php @@ -0,0 +1,39 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/udt/DateTimeType/DateTimeStringAType.php b/vendor/horstoeko/zugferd/src/entities/minimum/udt/DateTimeType/DateTimeStringAType.php new file mode 100644 index 000000000..572de16d9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/udt/DateTimeType/DateTimeStringAType.php @@ -0,0 +1,76 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/udt/IDType.php b/vendor/horstoeko/zugferd/src/entities/minimum/udt/IDType.php new file mode 100644 index 000000000..492309648 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/udt/IDType.php @@ -0,0 +1,78 @@ +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; + } +} diff --git a/vendor/horstoeko/zugferd/src/entities/minimum/udt/TextType.php b/vendor/horstoeko/zugferd/src/entities/minimum/udt/TextType.php new file mode 100644 index 000000000..de6d3467a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/entities/minimum/udt/TextType.php @@ -0,0 +1,51 @@ +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); + } +} diff --git a/vendor/horstoeko/zugferd/src/exception/ZugferdBaseException.php b/vendor/horstoeko/zugferd/src/exception/ZugferdBaseException.php new file mode 100644 index 000000000..96e654884 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/exception/ZugferdBaseException.php @@ -0,0 +1,23 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdBaseException extends \Exception +{ +} diff --git a/vendor/horstoeko/zugferd/src/exception/ZugferdExceptionCodes.php b/vendor/horstoeko/zugferd/src/exception/ZugferdExceptionCodes.php new file mode 100644 index 000000000..8bc46bdba --- /dev/null +++ b/vendor/horstoeko/zugferd/src/exception/ZugferdExceptionCodes.php @@ -0,0 +1,48 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdExceptionCodes +{ + public const CANNOTFINDPROFILESTRING = -1101; + + public const UNKNOWNPROFILE = -1102; + + public const MIMETYPENOTSUPPORTED = -1103; + + public const UNKNOWNDATEFORMAT = -1104; + + public const NOVALIDATTACHMENTFOUNDINPDF = -1105; + + public const UNKNOWNPROFILEPARAMETER = -1106; + + public const UNKNOWNSYNTAX = -1107; + + public const UNKNOWNMIMETYPE = -1108; + + public const UNSUPPORTEDMIMETYPE = -1109; + + public const NOPDFATTACHMENTFOUND = -1110; + + public const FILENOTFOUND = -2000; + + public const FILENOTREADABLE = -2001; + + public const INVALIDARGUMENT = -3000; +} diff --git a/vendor/horstoeko/zugferd/src/exception/ZugferdFileNotFoundException.php b/vendor/horstoeko/zugferd/src/exception/ZugferdFileNotFoundException.php new file mode 100644 index 000000000..f514d1771 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/exception/ZugferdFileNotFoundException.php @@ -0,0 +1,35 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdFileNotFoundException extends ZugferdBaseException +{ + /** + * Constructor + * + * @param string $filename + * @param Throwable|null $previous + */ + public function __construct(string $filename, ?Throwable $previous = null) + { + parent::__construct(sprintf("The file %s was not found", $filename), ZugferdExceptionCodes::FILENOTFOUND, $previous); + } +} diff --git a/vendor/horstoeko/zugferd/src/exception/ZugferdFileNotReadableException.php b/vendor/horstoeko/zugferd/src/exception/ZugferdFileNotReadableException.php new file mode 100644 index 000000000..79885772f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/exception/ZugferdFileNotReadableException.php @@ -0,0 +1,35 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdFileNotReadableException extends ZugferdBaseException +{ + /** + * Constructor + * + * @param string $filename + * @param Throwable|null $previous + */ + public function __construct(string $filename, ?Throwable $previous = null) + { + parent::__construct(sprintf("The file %s is not readable", $filename), ZugferdExceptionCodes::FILENOTFOUND, $previous); + } +} diff --git a/vendor/horstoeko/zugferd/src/exception/ZugferdInvalidArgumentException.php b/vendor/horstoeko/zugferd/src/exception/ZugferdInvalidArgumentException.php new file mode 100644 index 000000000..463c35d75 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/exception/ZugferdInvalidArgumentException.php @@ -0,0 +1,35 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdInvalidArgumentException extends ZugferdBaseException +{ + /** + * Constructor + * + * @param string $message + * @param Throwable|null $previous + */ + public function __construct(string $message, ?Throwable $previous = null) + { + parent::__construct($message, ZugferdExceptionCodes::INVALIDARGUMENT, $previous); + } +} diff --git a/vendor/horstoeko/zugferd/src/exception/ZugferdNoPdfAttachmentFoundException.php b/vendor/horstoeko/zugferd/src/exception/ZugferdNoPdfAttachmentFoundException.php new file mode 100644 index 000000000..13ae18b35 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/exception/ZugferdNoPdfAttachmentFoundException.php @@ -0,0 +1,35 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdNoPdfAttachmentFoundException extends ZugferdBaseException +{ + /** + * Constructor + * + * @param Throwable|null $previous + */ + public function __construct(?Throwable $previous = null) + { + parent::__construct("No PDF attachment found", ZugferdExceptionCodes::NOPDFATTACHMENTFOUND, $previous); + } +} diff --git a/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownDateFormatException.php b/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownDateFormatException.php new file mode 100644 index 000000000..8c9150416 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownDateFormatException.php @@ -0,0 +1,29 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdUnknownDateFormatException extends ZugferdBaseException +{ + public function __construct(string $dateFormatCode, ?Throwable $previous = null) + { + parent::__construct(sprintf("Invalid date format %s", $dateFormatCode), ZugferdExceptionCodes::UNKNOWNDATEFORMAT, $previous); + } +} diff --git a/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownMimetype.php b/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownMimetype.php new file mode 100644 index 000000000..2a2314b87 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownMimetype.php @@ -0,0 +1,34 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdUnknownMimetype extends ZugferdBaseException +{ + /** + * Constructor + * + * @param Throwable|null $previous + */ + public function __construct(?Throwable $previous = null) + { + parent::__construct("No mimetype found", ZugferdExceptionCodes::UNKNOWNMIMETYPE, $previous); + } +} diff --git a/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileException.php b/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileException.php new file mode 100644 index 000000000..bc8739d01 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileException.php @@ -0,0 +1,35 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdUnknownProfileException extends ZugferdBaseException +{ + /** + * Constructor + * + * @param string $profileString + * @param Throwable|null $previous + */ + public function __construct(string $profileString, ?Throwable $previous = null) + { + parent::__construct(sprintf("Cannot determain the profile by %s", $profileString), ZugferdExceptionCodes::UNKNOWNPROFILE, $previous); + } +} diff --git a/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileIdException.php b/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileIdException.php new file mode 100644 index 000000000..90ae4c1cf --- /dev/null +++ b/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileIdException.php @@ -0,0 +1,35 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdUnknownProfileIdException extends ZugferdBaseException +{ + /** + * Constructor + * + * @param int $profileId + * @param Throwable|null $previous + */ + public function __construct(int $profileId, ?Throwable $previous = null) + { + parent::__construct(sprintf("The profile id %s is uknown", $profileId), ZugferdExceptionCodes::UNKNOWNPROFILE, $previous); + } +} diff --git a/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileParameterException.php b/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileParameterException.php new file mode 100644 index 000000000..5b9ece591 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileParameterException.php @@ -0,0 +1,35 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdUnknownProfileParameterException extends ZugferdBaseException +{ + /** + * Constructor + * + * @param string $profileParameter + * @param Throwable|null $previous + */ + public function __construct(string $profileParameter, ?Throwable $previous = null) + { + parent::__construct(sprintf("The profile parameter %s is uknown", $profileParameter), ZugferdExceptionCodes::UNKNOWNPROFILEPARAMETER, $previous); + } +} diff --git a/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownXmlContentException.php b/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownXmlContentException.php new file mode 100644 index 000000000..65be861a4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownXmlContentException.php @@ -0,0 +1,34 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdUnknownXmlContentException extends ZugferdBaseException +{ + /** + * Constructor + * + * @param Throwable|null $previous + */ + public function __construct(?Throwable $previous = null) + { + parent::__construct("The XML does not match the requirements for an XML in CII-Syntax", ZugferdExceptionCodes::UNKNOWNSYNTAX, $previous); + } +} diff --git a/vendor/horstoeko/zugferd/src/exception/ZugferdUnsupportedMimetype.php b/vendor/horstoeko/zugferd/src/exception/ZugferdUnsupportedMimetype.php new file mode 100644 index 000000000..d121e037a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/exception/ZugferdUnsupportedMimetype.php @@ -0,0 +1,34 @@ + + * @license https://opensource.org/licenses/MIT MIT + * @link https://github.com/horstoeko/zugferd + */ +class ZugferdUnsupportedMimetype extends ZugferdBaseException +{ + /** + * Constructor + * + * @param Throwable|null $previous + */ + public function __construct(?Throwable $previous = null) + { + parent::__construct("Mimetype not supported", ZugferdExceptionCodes::UNSUPPORTEDMIMETYPE, $previous); + } +} diff --git a/vendor/horstoeko/zugferd/src/jms/ZugferdTypesHandler.php b/vendor/horstoeko/zugferd/src/jms/ZugferdTypesHandler.php new file mode 100644 index 000000000..788b45ef8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/jms/ZugferdTypesHandler.php @@ -0,0 +1,286 @@ + + * @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' + ], + [ + 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, + 'format' => 'xml', + 'type' => 'horstoeko\zugferd\entities\basic\udt\MeasureType', + 'method' => 'serializeMeasureType' + ], + [ + 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, + 'format' => 'xml', + 'type' => 'horstoeko\zugferd\entities\basicwl\udt\MeasureType', + 'method' => 'serializeMeasureType' + ], + [ + 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, + 'format' => 'xml', + 'type' => 'horstoeko\zugferd\entities\en16931\udt\MeasureType', + 'method' => 'serializeMeasureType' + ], + [ + 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, + 'format' => 'xml', + 'type' => 'horstoeko\zugferd\entities\extended\udt\MeasureType', + 'method' => 'serializeMeasureType' + ], + ]; + } + + /** + * Serialize Anount type + * The amounts will be serialized (by default) with a precission of 2 digits + * + * @param XmlSerializationVisitor $visitor + * @param mixed $data + */ + public function serializeAmountType(XmlSerializationVisitor $visitor, $data) + { + $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 + */ + public function serializeQuantityType(XmlSerializationVisitor $visitor, $data) + { + $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 + */ + public function serializePercentType(XmlSerializationVisitor $visitor, $data) + { + return $visitor->getDocument()->createTextNode( + number_format( + $data->value(), + ZugferdSettings::getSpecialDecimalPlacesMap($visitor->getCurrentNode()->getNodePath(), ZugferdSettings::getPercentDecimals()), + ZugferdSettings::getDecimalSeparator(), + ZugferdSettings::getThousandsSeparator() + ) + ); + } + + /** + * Serialize a meassure value + * The valze will be serialized (by default) with a precission of 2 digits + * + * @param XmlSerializationVisitor $visitor + * @param mixed $data + */ + public function serializeMeasureType(XmlSerializationVisitor $visitor, $data) + { + $node = $visitor->getDocument()->createTextNode( + number_format( + $data->value(), + ZugferdSettings::getSpecialDecimalPlacesMap($visitor->getCurrentNode()->getNodePath(), ZugferdSettings::getMeasureDecimals()), + 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 inditcator + * False and true values will be serialized correctly (false won't be serialized + * in the default implementation) + * + * @param XmlSerializationVisitor $visitor + * @param mixed $data + */ + public function serializeIndicatorType(XmlSerializationVisitor $visitor, $data) + { + return $visitor->getDocument()->createElement('udt:Indicator', $data->getIndicator() == false ? 'false' : 'true'); + } +} diff --git a/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptor.php b/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptor.php new file mode 100644 index 000000000..d98404a0b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptor.php @@ -0,0 +1,836 @@ + + * @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; + + /** + * Internal flag to see if the totals are alread calculated + * + * @var boolean + */ + protected $totalsAreCalculated = false; + + /** + * Returns the profile of the descriptor + * + * @return integer + */ + protected static function getProfile(): int + { + return ZugferdProfiles::PROFILE_EN16931; + } + + /** + * Creates a new ZugferdDocumentBuilder with profile EN16931 + * + * @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 __BT-1, From MINIMUM__ The document no issued by the seller + * @param \DateTime $invoiceDate __BT-2, From MINIMUM__ Date of invoice. The date when the document was issued by the seller + * @param string $currency __BT-5, From MINIMUM__ Code for the invoice currency + * @param string|null $invoiceNoReference __BT-83, From BASIC WL__ Intended use for payment + * @return ZugferdQuickDescriptor + */ + public function doCreateInvoice(string $invoiceNo, \DateTime $invoiceDate, string $currency, ?string $invoiceNoReference = null): ZugferdQuickDescriptor + { + $this->setDocumentInformation($invoiceNo, ZugferdInvoiceType::INVOICE, $invoiceDate, $currency); + $this->setDocumentGeneralPaymentInformation(null, $invoiceNoReference ?? $invoiceNo); + return $this; + } + + /** + * Create a new credit memo + * + * @param string $creditMemoNo __BT-1, From MINIMUM__ The document no issued by the seller + * @param \DateTime $invoiceDate __BT-2, From MINIMUM__ Date of invoice. The date when the document was issued by the seller + * @param string $currency __BT-5, From MINIMUM__ Code for the invoice currency + * @param string $creditMemoNoReference __BT-83, From BASIC WL__ 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|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. + * @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 __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: + * @param string $buyerIban __BT-91, From BASIC WL__ The account to be debited by the direct debit + * @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 "credit 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 __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: + * @param string $payeeIban __BT-84, From BASIC WL__ A unique identifier for the financial account held with a payment service provider to which the payment should be made + * @param string|null $payeeAccountName __BT-85, From BASIC WL__ The name of the payment account held with a payment service provider to which the payment should be made + * @param string|null $payeePropId __BT-BT-84-0, From BASIC WL__ National account number (not for SEPA) + * @param string|null $payeeBic __BT-86, From EN 16931__ An identifier for the payment service provider with which the payment account is held + * @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 __BT-, From __ The type of the card + * @param string $cardId __BT-87, From EN 16931__ 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 __BT-88, From EN 16931__ 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 __BT-, From __ The type of the card + * @param string $cardId __BT-87, From EN 16931__ 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 __BT-88, From EN 16931__ 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 __BT-, From __ The type of the card + * @param string $cardId __BT-87, From EN 16931__ 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 __BT-88, From EN 16931__ 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 __BT-22, From BASIC WL__ A free text containing unstructured information that is relevant to the invoice as a whole + * @param string|null $subjectCode __BT-21, From BASIC WL__ The qualification of the free text for the invoice from BT-22 + * @param string|null $contentCode __BT-X-5, From EXTENDED__ A code to classify the content of the free text of the invoice + * @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 __BT-13, From MINIMUM__ An identifier issued by the buyer for a referenced order (order number) + * @param DateTime $orderDate __BT-X-147, From EXTENDED__ 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 + * + * @param string $issuerAssignedID __BT-122, From EN 16931__ 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 __BT-X-149, From EXTENDED__ Document date + * @param string|null $typeCode __BT-122-0, From EN 16931__ 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 __BT-123, From EN 16931__ A description of the document, e.g. Hourly billing, usage or consumption report, etc. + * @param string|null $referenceTypeCode __BT-, From __ 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 __BT-125, From EN 16931__ 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 + * + * @param string $deliveryNoteNo __BT-X-202, From EXTENDED__ Delivery slip number + * @param DateTime $deliveryNoteDate __BT-X-203, From EXTENDED__ Delivery slip 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 __BT-25, From BASIC WL__ The identification of an invoice previously sent by the seller + * @param DateTime|null $issueDateTime __BT-26, From BASIC WL__ Date of the previous invoice + * @return ZugferdQuickDescriptor + */ + public function doSetInvoiceReferencedDocument(string $id, ?DateTime $issueDateTime = null): ZugferdQuickDescriptor + { + $this->setDocumentInvoiceReferencedDocument($id, null, $issueDateTime); + return $this; + } + + /** + * Set Details of a project reference + * + * @param string $id __BT-11, From EN 16931__ The identifier of the project to which the invoice relates + * @param string $name __BT-11-0, From EN 16931__ The name of the project to which the invoice relates + * @return ZugferdQuickDescriptor + */ + public function doSetSpecifiedProcuringProject(string $id, string $name): ZugferdQuickDescriptor + { + $this->setDocumentProcuringProject($id, $name); + return $this; + } + + /** + * Set detailed information on the actual delivery + * + * @param DateTime|null $date __BT-72, From BASIC WL__ Actual delivery time + * @return ZugferdQuickDescriptor + */ + public function doSetSupplyChainEvent(?DateTime $date): ZugferdQuickDescriptor + { + $this->setDocumentSupplyChainEvent($date); + return $this; + } + + /** + * Detailed information about the buyer (service recipient) + * + * @param string $name __BT-44, From MINIMUM__ The full name of the buyer + * @param string $postcode __BT-53, From BASIC WL__ Identifier for a group of properties, such as a zip code + * @param string $city __BT-52, From BASIC WL__ Usual name of the city or municipality in which the buyers address is located + * @param string $street __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 $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 $buyerReference __BT-10, From MINIMUM__ An identifier assigned by the buyer and used for internal routing + * @param string $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 $globalID __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 $globalIDscheme __BT-46-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 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 __BT-56, From EN 16931__ Contact point for a legal entity, such as a personal name of the contact person + * @param string|null $orgunit __BT-56-0, From EN 16931__ Contact point for a legal entity, such as a name of the department or office + * @param string|null $emailAddress __BT-58, From EN 16931__ An e-mail address of the contact point + * @param string|null $phoneno __BT-57, From EN 16931__ A telephone number for the contact point + * @param string|null $faxno __BT-X-115, From EXTENDED__ A fax number of the contact point + * @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 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 $no __BT-48-0, From BASIC WL__ Type of tax number (FC = Tax number, VA = Sales tax identification number) + * @param string $schemeID __BT-48, From BASIC WL__ Tax number or sales tax identification number + * @return ZugferdQuickDescriptor + */ + public function doAddBuyerTaxRegistration(string $no, string $schemeID): ZugferdQuickDescriptor + { + $this->addDocumentBuyerTaxRegistration($schemeID, $no); + return $this; + } + + /** + * Set Buyers electronic communication information + * + * @param string $uri __BT-49, From BASIC WL__ Specifies the buyer's electronic address to which the invoice is sent + * @param string $uriScheme __BT-49-1, From BASIC WL__ The identifier for the identification scheme of the buyer's electronic address (Default: EM) + * @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 __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 $postcode __BT-38, From BASIC WL__ Identifier for a group of properties, such as a zip code + * @param string $city __BT-37, From BASIC WL__ Usual name of the city or municipality in which the seller's address is located + * @param string $street __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 $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 $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 $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 $globalIDscheme __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 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 __BT-41, From EN 16931__ Such as personal name, name of contact person or department or office + * @param string|null $orgunit __BT-41-0, From EN 16931__ If a contact person is specified, either the name or the department must be transmitted. + * @param string|null $emailAddress __BT-43, From EN 16931__ An e-mail address of the contact point + * @param string|null $phoneno __BT-42, From EN 16931__ A telephone number for the contact point + * @param string|null $faxno __BT-X-107, From EXTENDED__ A fax number of the contact point + * @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 __BT-31/32, From MINIMUM/EN 16931__ Tax number of the seller or sales tax identification number of the seller + * @param string $schemeID __BT-31-0/BT-32-0, From MINIMUM/EN 16931__ Type of tax number of the seller (FC = Tax number, VA = Sales tax identification 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 __BT-34, From BASIC WL__ Specifies the electronic address of the seller to which the response to the invoice can be sent at application level + * @param string $uriScheme __BT-34-1, From BASIC WL__ The identifier for the identification scheme of the seller's electronic address (Default: EM) + * @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 __BT-126, From BASIC__ Identification of the invoice item + * @param string $comment __BT-127, From BASIC__ A free text that contains unstructured information that is relevant to the invoice item + * @return ZugferdQuickDescriptor + * @deprecated 1.0.75 + */ + 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 __BT-126, From BASIC__ Identification of the invoice item + * @param string $productName __BT-153, From BASIC__ A name of the item (item name) + * @param float $unitPrice __BT-146, From BASIC__ Net price of the item + * @param float $quantity __BT-129, From BASIC__ The quantity of individual items (goods or services) billed in the relevant line + * @param string $unitCode __BT-130, From BASIC__ The unit of measure applicable to the amount billed + * @param float $allowanceChargeAmount __BT-136/BT-141, From BASIC__ The surcharge/discount amount excluding sales tax + * @param string $allowanceChargeReason __BT-139/BT-144, From BASIC__ The reason given in text form for the invoice item discount/surcharge + * @param string $taxCategoryCode __BT-151, From BASIC__ Coded description of a sales tax category + * @param string $taxTypeCode __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 $taxPercent __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) + * @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 ? 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 __BT-127, From BASIC__ 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 __BT-126, From BASIC__ Identification of the invoice item + * @param string $productName __BT-153, From BASIC__ A name of the item (item name) + * @param float $unitPrice __BT-146, From BASIC__ Net price of the item + * @param float $quantity __BT-129, From BASIC__ The quantity of individual items (goods or services) billed in the relevant line + * @param string $unitCode __BT-130, From BASIC__ The unit of measure applicable to the amount billed + * @param float $chargeAmount __BT-136/BT-141, From BASIC__ The surcharge amount excluding sales tax + * @param string $chargeReason __BT-139/BT-144, From BASIC__ The reason given in text form for the invoice item surcharge + * @param string $taxCategoryCode __BT-151, From BASIC__ Coded description of a sales tax category + * @param string $taxTypeCode __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 $taxPercent __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) + * @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 discount amount + * + * @param string $lineId __BT-126, From BASIC__ Identification of the invoice item + * @param string $productName __BT-153, From BASIC__ A name of the item (item name) + * @param float $unitPrice __BT-146, From BASIC__ Net price of the item + * @param float $quantity __BT-129, From BASIC__ The quantity of individual items (goods or services) billed in the relevant line + * @param string $unitCode __BT-130, From BASIC__ The unit of measure applicable to the amount billed + * @param float $discountAmount __BT-136/BT-141, From BASIC__ The discount amount excluding sales tax + * @param string $discountReason __BT-139/BT-144, From BASIC__ The reason given in text form for the invoice item discount + * @param string $taxCategoryCode __BT-151, From BASIC__ Coded description of a sales tax category + * @param string $taxTypeCode __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 $taxPercent __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) + * @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) + * + * @param float $amount __BT-X-272, From EXTENDED__ Amount of the service fee + * @param string $description __BT-X-271, From EXTENDED__ Identification of the service fee + * @param string $taxTypeCode __BT-X-273-0, From EXTENDED__ Code of the Tax type. Note: Fixed value = "VAT" + * @param string $taxCategoryCode __BT-X-273, From EXTENDED__ Code of the VAT category + * @param float $taxPercent __BT-X-274, From EXTENDED__ 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 __BT-92/BT-99, From BASIC WL__ Amount of the surcharge or discount at document level + * @param string $reason __BT-97/BT-104, From BASIC WL__ The reason given in text form for the surcharge or discount at document level + * @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 + * @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 $taxPercent __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) + * @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 ? 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 __BT-116, From BASIC WL__ Tax base amount, Each sales tax breakdown must show a category-specific tax base amount. + * @param float $percent __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 $categoryCode __BT-118, From BASIC WL__ Coded description of a sales tax category + * @param string|null $typeCode __BT-118-0, From BASIC WL__ Coded description of a sales tax category. Note: Fixed value = "VAT" + * @param float|null $allowanceChargeBasisAmount __BT-X-263, From EXTENDED__ Total amount Additions and deductions to the tax rate at document level + * @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 string|null $exemptionReason __BT-120, From BASIC WL__ 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, null, $allowanceChargeBasisAmount); + return $this; + } + + /** + * Add a VAT breakdown (at document level) + * + * @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 string $categoryCode __BT-118, From BASIC WL__ Coded description of a sales tax category + * @param string|null $typeCode __BT-118-0, From BASIC WL__ Coded description of a sales tax category. Note: Fixed value = "VAT" + * @param float|null $allowanceChargeBasisAmount __BT-X-263, From EXTENDED__ Total amount Additions and deductions to the tax rate at document level + * @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 string|null $exemptionReason __BT-120, From BASIC WL__ 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, null, $allowanceChargeBasisAmount); + return $this; + } + + /** + * Sets the prepaid amount + * + * @param float $totalPrepaidAmount __BT-113, From BASIC WL__ Prepayment amount + * @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 + { + if ($this->totalsAreCalculated !== false) { + return $this; + } + + $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 + ); + + $this->totalsAreCalculated = true; + + 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; + } +} diff --git a/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorEn16931.php b/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorEn16931.php new file mode 100644 index 000000000..6eb0b604e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorEn16931.php @@ -0,0 +1,33 @@ + + * @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; + } +} diff --git a/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorExtended.php b/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorExtended.php new file mode 100644 index 000000000..854532198 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorExtended.php @@ -0,0 +1,33 @@ + + * @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; + } +} diff --git a/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung.php b/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung.php new file mode 100644 index 000000000..d68714155 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung.php @@ -0,0 +1,33 @@ + + * @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; + } +} diff --git a/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung2.php b/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung2.php new file mode 100644 index 000000000..73f05f297 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung2.php @@ -0,0 +1,33 @@ + + * @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; + } +} diff --git a/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung3.php b/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung3.php new file mode 100644 index 000000000..b76b0b3c1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung3.php @@ -0,0 +1,33 @@ + + * @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; + } +} diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL.xsd new file mode 100644 index 000000000..58a1cc630 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd new file mode 100644 index 000000000..bdf284187 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd new file mode 100644 index 000000000..45946f97f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd new file mode 100644 index 000000000..414b7ea26 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC.xsd new file mode 100644 index 000000000..cfe05e144 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd new file mode 100644 index 000000000..bdf284187 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd new file mode 100644 index 000000000..5c143385a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd @@ -0,0 +1,249 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd new file mode 100644 index 000000000..e2f2bc85f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931.xsd new file mode 100644 index 000000000..f6d347595 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd new file mode 100644 index 000000000..947574710 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd new file mode 100644 index 000000000..7cf89ef85 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd @@ -0,0 +1,318 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd new file mode 100644 index 000000000..15f14d7af --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED.xsd new file mode 100644 index 000000000..87001649e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd new file mode 100644 index 000000000..6531a67f4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd new file mode 100644 index 000000000..0f8f31ed4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd @@ -0,0 +1,465 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd new file mode 100644 index 000000000..fc6f3b2fa --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM.xsd new file mode 100644 index 000000000..f52e628d3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd new file mode 100644 index 000000000..b842378b3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd new file mode 100644 index 000000000..ecd98451b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd new file mode 100644 index 000000000..bb7ccb2fb --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC-WL.sch b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC-WL.sch new file mode 100644 index 000000000..a6c8857c7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC-WL.sch @@ -0,0 +1,1485 @@ + + + Schema for Factur-X; 1.0.07; Accounting, BASIC without Lines + + + + + + + + [BR-45]-Each VAT breakdown (BG-23) shall have a VAT category taxable amount (BT-116). + + [BR-46]-Each VAT breakdown (BG-23) shall have a VAT category tax amount (BT-117). + + [BR-47]-Each VAT breakdown (BG-23) shall be defined through a VAT category code (BT-118). + + [BR-48]-Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT. + + [BR-CO-03]-Value added tax point date (BT-7) and Value added tax point date code (BT-8) are mutually exclusive. + + [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. + + [BR-DEC-19]-The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2. + + [BR-DEC-20]-The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2. + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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. + + + + + + [BR-31]-Each Document level allowance (BG-20) shall have a Document level allowance amount (BT-92). + + [BR-32]-Each Document level allowance (BG-20) shall have a Document level allowance VAT category code (BT-95). + + [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). + + [BR-CO-05]-Document level allowance reason code (BT-98) and Document level allowance reason (BT-97) shall indicate the same type of allowance. + + [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. + + [BR-DEC-01]-The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2. + + [BR-DEC-02]-The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2. + + + + + + [BR-36]-Each Document level charge (BG-21) shall have a Document level charge amount (BT-99). + + [BR-37]-Each Document level charge (BG-21) shall have a Document level charge VAT category code (BT-102). + + [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). + + [BR-CO-06]-Document level charge reason code (BT-105) and Document level charge reason (BT-104) shall indicate the same type of charge. + + [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. + + [BR-DEC-05]-The allowed maximum number of decimals for the Document level charge amount (BT-99) is 2. + + [BR-DEC-06]-The allowed maximum number of decimals for the Document level charge base amount (BT-100) is 2. + + + + + + [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). + + + + + + [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). + + [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). + + [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). + + [BR-56]-Each Seller tax representative party (BG-11) shall have a Seller tax representative VAT identifier (BT-63). + + + + + + [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. + + + + + + [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’. + + + + + + [BR-66]-Each Specified Trade Allowance Charge (BG-20)(BG-21) shall contain a Charge Indicator. + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [BR-AF-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). + + [BR-AF-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. + + + + + + [BR-AG-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). + + [BR-AG-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. + + + + + + [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). + + [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). + + + + + + [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). + + [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. + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [BR-AF-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). + + [BR-AF-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. + + + + + + [BR-AG-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). + + [BR-AG-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. + + + + + + [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). + + [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). + + + + + + [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). + + [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. + + + + + + [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). + + [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). + + + + + + [BR-12]-An Invoice shall have the Sum of Invoice line net amount (BT-106). + + [BR-13]-An Invoice shall have the Invoice total amount without VAT (BT-109). + + [BR-14]-An Invoice shall have the Invoice total amount with VAT (BT-112). + + [BR-15]-An Invoice shall have the Amount due for payment (BT-115). + + [BR-CO-11]-Sum of allowances on document level (BT-107) = Σ Document level allowance amount (BT-92). + + [BR-CO-12]-Sum of charges on document level (BT-108) = Σ Document level charge amount (BT-99). + + [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). + + [BR-CO-15]-Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110). + + [BR-CO-16]-Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114). + + [BR-DEC-09]-The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2. + + [BR-DEC-10]-The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2. + + [BR-DEC-11]-The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2. + + [BR-DEC-12]-The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2. + + [BR-DEC-13]-The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2. + + [BR-DEC-14]-The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2. + + [BR-DEC-15]-The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2. + + [BR-DEC-16]-The allowed maximum number of decimals for the Paid amount (BT-113) is 2. + + [BR-DEC-17]-The allowed maximum number of decimals for the Rounding amount (BT-114) is 2. + + [BR-DEC-18]-The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2. + + [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. + + + + + + [BR-CO-14]-Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117). + + + + + + [BR-49]-A Payment instruction (BG-16) shall specify the Payment means type code (BT-81). + + [BR-CO-27]-Either the IBAN or a Proprietary ID (BT-84) shall be used. + + + + + + [BR-50]-A Payment account identifier (BT-84) shall be present if Credit transfer (BG-16) information is provided in the Invoice. + + [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. + + + + + + [BR-CO-18]-An Invoice shall at least have one VAT breakdown group (BG-23). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + [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. + + [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. + + + + + + [BR-AF-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). + + [BR-AF-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). + + + + + + [BR-AG-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). + + [BR-AG-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). + + + + + + [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). + + [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). + + [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). + + [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". + + [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". + + + + + + [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. + + [BR-01]-An Invoice shall have a Specification identifier (BT-24). + + [BR-02]-An Invoice shall have an Invoice number (BT-1). + + [BR-03]-An Invoice shall have an Invoice issue date (BT-2). + + [BR-04]-An Invoice shall have an Invoice type code (BT-3). + + [BR-05]-An Invoice shall have an Invoice currency code (BT-5). + + [BR-06]-An Invoice shall contain the Seller name (BT-27). + + [BR-07]-An Invoice shall contain the Buyer name (BT-44). + + [BR-08]-An Invoice shall contain the Seller postal address (BG-5). + + [BR-09]-The Seller postal address (BG-5) shall contain a Seller country code (BT-40). + + [BR-10]-An Invoice shall contain the Buyer postal address (BG-8). + + [BR-11]-The Buyer postal address shall contain a Buyer country code (BT-55). + + [BR-62]-The Seller electronic address (BT-34) shall have a Scheme identifier. + + [BR-63]-The Buyer electronic address (BT-49) shall have a Scheme identifier. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Content' must occur exactly 1 times. + + Element 'ram:SubjectCode' may occur at maximum 1 times. + + + + + + + Value of 'ram:SubjectCode' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:BusinessProcessSpecifiedDocumentContextParameter' may occur at maximum 1 times. + + Element 'ram:GuidelineSpecifiedDocumentContextParameter' must occur exactly 1 times. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + Value of 'ram:ID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:SellerTradeParty' must occur exactly 1 times. + + Element 'ram:BuyerTradeParty' must occur exactly 1 times. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:GlobalID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:TradingBusinessName' is marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + Element 'ram:SpecifiedTaxRegistration' must occur exactly 1 times. + + + + + + Element 'ram:GlobalID' is marked as not used in the given context. + + + + + + Element 'ram:ID' is marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="VA"]' may occur at maximum 1 times. + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="FC"]' may occur at maximum 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element variant 'ram:SpecifiedTaxRegistration[ not(ram:ID/@schemeID="VA") and not(ram:ID/@schemeID="FC")]' is marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + [BR-57]-Each Deliver to address (BG-15) shall contain a Deliver to country code (BT-80). + + + + + + Element 'ram:OccurrenceDateTime' must occur exactly 1 times. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:GlobalID' may occur at maximum 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context. + + + + + + Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context. + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + Element 'ram:PaymentReference' may occur at maximum 1 times. + + Element 'ram:InvoiceCurrencyCode' must occur exactly 1 times. + + Element 'ram:ApplicableTradeTax' must occur at least 1 times. + + Element 'ram:SpecifiedTradePaymentTerms' may occur at maximum 1 times. + + Element 'ram:SpecifiedTradeSettlementHeaderMonetarySummation' must occur exactly 1 times. + + Element 'ram:ReceivableSpecifiedTradeAccountingAccount' may occur at maximum 1 times. + + + + + + Element 'ram:CalculatedAmount' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:BasisAmount' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + Value of 'ram:DueDateTypeCode' is not allowed. + + + + + + + Value of 'ram:ExemptionReasonCode' is not allowed. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + Value of 'ram:InvoiceCurrencyCode' is not allowed. + + + + + + [BR-55]-Each Preceding Invoice reference (BG-3) shall contain a Preceding Invoice reference (BT-25). + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:GlobalID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:PostalTradeAddress' is marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:TradingBusinessName' is marked as not used in the given context. + + + + + + Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context. + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element variant 'ram:SpecifiedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:Description' may occur at maximum 1 times. + + Element 'ram:DirectDebitMandateID' may occur at maximum 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Element 'ram:LineTotalAmount' must occur exactly 1 times. + + Element 'ram:ChargeTotalAmount' may occur at maximum 1 times. + + Element 'ram:AllowanceTotalAmount' may occur at maximum 1 times. + + Element 'ram:TaxBasisTotalAmount' must occur exactly 1 times. + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:InvoiceCurrencyCode]' may occur at maximum 1 times. + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:TaxCurrencyCode]' may occur at maximum 1 times. + + Element 'ram:GrandTotalAmount' must occur exactly 1 times. + + Element 'ram:TotalPrepaidAmount' may occur at maximum 1 times. + + Element 'ram:DuePayableAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element variant 'ram:TaxTotalAmount[ not(@currencyID=../../ram:InvoiceCurrencyCode) and not(@currencyID=../../ram:TaxCurrencyCode)]' is marked as not used in the given context. + + + + + + + Value of '@currencyID' is not allowed. + + + + + + Attribute '@currencyID' is required in this context. + + + + + + + Value of '@currencyID' is not allowed. + + + + + + Attribute '@currencyID' is required in this context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:PayeePartyCreditorFinancialAccount' may occur at maximum 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:IBANID' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + Value of 'ram:TaxCurrencyCode' is not allowed. + + + diff --git a/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC-WL_codedb.xml b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC-WL_codedb.xml new file mode 100644 index 000000000..cc567d658 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC-WL_codedb.xml @@ -0,0 +1,2190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC.sch b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC.sch new file mode 100644 index 000000000..dd6029ce7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC.sch @@ -0,0 +1,2047 @@ + + + Schema for Factur-X; 1.0.07; EN16931-COMPLIANT-BASIC + + + + + + + + [BR-45]-Each VAT breakdown (BG-23) shall have a VAT category taxable amount (BT-116). + + [BR-46]-Each VAT breakdown (BG-23) shall have a VAT category tax amount (BT-117). + + [BR-47]-Each VAT breakdown (BG-23) shall be defined through a VAT category code (BT-118). + + [BR-48]-Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT. + + [BR-CO-03]-Value added tax point date (BT-7) and Value added tax point date code (BT-8) are mutually exclusive. + + [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. + + [BR-DEC-19]-The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2. + + [BR-DEC-20]-The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2. + + + + + + [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". + + [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). + + [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). + + + + + + [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). + + [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). + + [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). + + + + + + [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). + + [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. + + + + + + [BR-31]-Each Document level allowance (BG-20) shall have a Document level allowance amount (BT-92). + + [BR-32]-Each Document level allowance (BG-20) shall have a Document level allowance VAT category code (BT-95). + + [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). + + [BR-CO-05]-Document level allowance reason code (BT-98) and Document level allowance reason (BT-97) shall indicate the same type of allowance. + + [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. + + [BR-DEC-01]-The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2. + + [BR-DEC-02]-The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2. + + + + + + [BR-36]-Each Document level charge (BG-21) shall have a Document level charge amount (BT-99). + + [BR-37]-Each Document level charge (BG-21) shall have a Document level charge VAT category code (BT-102). + + [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). + + [BR-CO-06]-Document level charge reason code (BT-105) and Document level charge reason (BT-104) shall indicate the same type of charge. + + [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. + + [BR-DEC-05]-The allowed maximum number of decimals for the Document level charge amount (BT-99) is 2. + + [BR-DEC-06]-The allowed maximum number of decimals for the Document level charge base amount (BT-100) is 2. + + + + + + [BR-54]-Each Item attribute (BG-32) shall contain an Item attribute name (BT-160) and an Item attribute value (BT-161). + + + + + + [BR-21]-Each Invoice line (BG-25) shall have an Invoice line identifier (BT-126). + + [BR-22]-Each Invoice line (BG-25) shall have an Invoiced quantity (BT-129). + + [BR-23]-An Invoice line (BG-25) shall have an Invoiced quantity unit of measure code (BT-130). + + [BR-24]-Each Invoice line (BG-25) shall have an Invoice line net amount (BT-131). + + [BR-25]-Each Invoice line (BG-25) shall contain the Item name (BT-153). + + [BR-26]-Each Invoice line (BG-25) shall contain the Item net price (BT-146). + + [BR-27]-The Item net price (BT-146) shall NOT be negative. + + [BR-28]-The Item gross price (BT-148) shall NOT be negative. + + [BR-64]-The Item standard identifier (BT-157) shall have a Scheme identifier. + + [BR-65]-The Item classification identifier (BT-158) shall have a Scheme identifier. + + [BR-CO-04]-Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151). + + [BR-DEC-23]-The allowed maximum number of decimals for the Invoice line net amount (BT-131) is 2. + + + + + + [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). + + + + + + [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). + + [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). + + [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). + + [BR-56]-Each Seller tax representative party (BG-11) shall have a Seller tax representative VAT identifier (BT-63). + + + + + + [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. + + + + + + [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). + + [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. + + + + + + [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). + + + + + + [BR-41]-Each Invoice line allowance (BG-27) shall have an Invoice line allowance amount (BT-136). + + [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. + + [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. + + [BR-DEC-24]-The allowed maximum number of decimals for the Invoice line allowance amount (BT-136) is 2. + + [BR-DEC-25]-The allowed maximum number of decimals for the Invoice line allowance base amount (BT-137) is 2. + + + + + + [BR-43]-Each Invoice line charge (BG-28) shall have an Invoice line charge amount (BT-141). + + [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). + + [BR-CO-08]-Invoice line charge reason code (BT-145) and Invoice line charge reason (BT-144) shall indicate the same type of charge reason. + + [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. + + [BR-DEC-27]-The allowed maximum number of decimals for the Invoice line charge amount (BT-141) is 2. + + [BR-DEC-28]-The allowed maximum number of decimals for the Invoice line charge base amount (BT-142) is 2. + + + + + + [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’. + + + + + + [BR-66]-Each Specified Trade Allowance Charge (BG-20)(BG-21) shall contain a Charge Indicator. + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [BR-AF-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). + + [BR-AF-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. + + + + + + [BR-AG-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). + + [BR-AG-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. + + + + + + [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). + + [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). + + + + + + [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). + + [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. + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [BR-AF-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). + + [BR-AF-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. + + + + + + [BR-AG-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). + + [BR-AG-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. + + + + + + [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). + + [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). + + + + + + [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). + + [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. + + + + + + [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). + + [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). + + + + + + [BR-CO-10]-Sum of Invoice line net amount (BT-106) = Σ Invoice line net amount (BT-131). + + [BR-12]-An Invoice shall have the Sum of Invoice line net amount (BT-106). + + [BR-13]-An Invoice shall have the Invoice total amount without VAT (BT-109). + + [BR-14]-An Invoice shall have the Invoice total amount with VAT (BT-112). + + [BR-15]-An Invoice shall have the Amount due for payment (BT-115). + + [BR-CO-11]-Sum of allowances on document level (BT-107) = Σ Document level allowance amount (BT-92). + + [BR-CO-12]-Sum of charges on document level (BT-108) = Σ Document level charge amount (BT-99). + + [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). + + [BR-CO-15]-Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110). + + [BR-CO-16]-Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114). + + [BR-DEC-09]-The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2. + + [BR-DEC-10]-The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2. + + [BR-DEC-11]-The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2. + + [BR-DEC-12]-The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2. + + [BR-DEC-13]-The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2. + + [BR-DEC-14]-The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2. + + [BR-DEC-15]-The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2. + + [BR-DEC-16]-The allowed maximum number of decimals for the Paid amount (BT-113) is 2. + + [BR-DEC-17]-The allowed maximum number of decimals for the Rounding amount (BT-114) is 2. + + [BR-DEC-18]-The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2. + + [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. + + + + + + [BR-CO-14]-Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117). + + + + + + [BR-49]-A Payment instruction (BG-16) shall specify the Payment means type code (BT-81). + + [BR-CO-27]-Either the IBAN or a Proprietary ID (BT-84) shall be used. + + + + + + [BR-50]-A Payment account identifier (BT-84) shall be present if Credit transfer (BG-16) information is provided in the Invoice. + + [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. + + + + + + [BR-CO-18]-An Invoice shall at least have one VAT breakdown group (BG-23). + + + + + + [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". + + [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). + + [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). + + + + + + [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". + + [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). + + [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). + + + + + + [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". + + [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). + + [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). + + + + + + [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". + + [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). + + [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). + + [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. + + [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. + + + + + + [BR-AF-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). + + [BR-AF-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). + + [BR-AF-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). + + + + + + [BR-AG-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). + + [BR-AG-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). + + [BR-AG-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). + + + + + + [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". + + [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). + + [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). + + [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). + + [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". + + [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". + + [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". + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [BR-AF-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). + + [BR-AF-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). + + + + + + [BR-AG-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). + + [BR-AG-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. + + + + + + [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-46). + + [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). + + + + + + [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). + + [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. + + + + + + [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). + + [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). + + + + + + [BR-16]-An Invoice shall have at least one Invoice line (BG-25). + + [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. + + [BR-01]-An Invoice shall have a Specification identifier (BT-24). + + [BR-02]-An Invoice shall have an Invoice number (BT-1). + + [BR-03]-An Invoice shall have an Invoice issue date (BT-2). + + [BR-04]-An Invoice shall have an Invoice type code (BT-3). + + [BR-05]-An Invoice shall have an Invoice currency code (BT-5). + + [BR-06]-An Invoice shall contain the Seller name (BT-27). + + [BR-07]-An Invoice shall contain the Buyer name (BT-44). + + [BR-08]-An Invoice shall contain the Seller postal address (BG-5). + + [BR-09]-The Seller postal address (BG-5) shall contain a Seller country code (BT-40). + + [BR-10]-An Invoice shall contain the Buyer postal address (BG-8). + + [BR-11]-The Buyer postal address shall contain a Buyer country code (BT-55). + + [BR-62]-The Seller electronic address (BT-34) shall have a Scheme identifier. + + [BR-63]-The Buyer electronic address (BT-49) shall have a Scheme identifier. + + [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". + + [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". + + [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". + + [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". + + [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". + + [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". + + [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". + + [BR-AF-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". + + [BR-AG-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". + + [BR-B-01]-An Invoice where the VAT category code (BT-151, BT-95 or BT-102) is “Split payment†shall be a domestic Italian invoice. + + [BR-B-02]-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 “Split payment" shall not contain 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â€. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Content' must occur exactly 1 times. + + Element 'ram:SubjectCode' may occur at maximum 1 times. + + + + + + + Value of 'ram:SubjectCode' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:BusinessProcessSpecifiedDocumentContextParameter' may occur at maximum 1 times. + + Element 'ram:GuidelineSpecifiedDocumentContextParameter' must occur exactly 1 times. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + Value of 'ram:ID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:IncludedSupplyChainTradeLineItem' must occur at least 1 times. + + + + + + Element 'ram:SellerTradeParty' must occur exactly 1 times. + + Element 'ram:BuyerTradeParty' must occur exactly 1 times. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:GlobalID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:TradingBusinessName' is marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + Element 'ram:SpecifiedTaxRegistration' must occur exactly 1 times. + + + + + + Element 'ram:GlobalID' is marked as not used in the given context. + + + + + + Element 'ram:ID' is marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="VA"]' may occur at maximum 1 times. + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="FC"]' may occur at maximum 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element variant 'ram:SpecifiedTaxRegistration[ not(ram:ID/@schemeID="VA") and not(ram:ID/@schemeID="FC")]' is marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + [BR-57]-Each Deliver to address (BG-15) shall contain a Deliver to country code (BT-80). + + + + + + Element 'ram:OccurrenceDateTime' must occur exactly 1 times. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:GlobalID' may occur at maximum 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context. + + + + + + Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context. + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + Element 'ram:PaymentReference' may occur at maximum 1 times. + + Element 'ram:InvoiceCurrencyCode' must occur exactly 1 times. + + Element 'ram:ApplicableTradeTax' must occur at least 1 times. + + Element 'ram:SpecifiedTradePaymentTerms' may occur at maximum 1 times. + + Element 'ram:SpecifiedTradeSettlementHeaderMonetarySummation' must occur exactly 1 times. + + Element 'ram:ReceivableSpecifiedTradeAccountingAccount' may occur at maximum 1 times. + + + + + + Element 'ram:CalculatedAmount' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:BasisAmount' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + Value of 'ram:DueDateTypeCode' is not allowed. + + + + + + + Value of 'ram:ExemptionReasonCode' is not allowed. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + Value of 'ram:InvoiceCurrencyCode' is not allowed. + + + + + + [BR-55]-Each Preceding Invoice reference (BG-3) shall contain a Preceding Invoice reference (BT-25). + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:GlobalID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:PostalTradeAddress' is marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:TradingBusinessName' is marked as not used in the given context. + + + + + + Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context. + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element variant 'ram:SpecifiedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:Description' may occur at maximum 1 times. + + Element 'ram:DirectDebitMandateID' may occur at maximum 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Element 'ram:LineTotalAmount' must occur exactly 1 times. + + Element 'ram:ChargeTotalAmount' may occur at maximum 1 times. + + Element 'ram:AllowanceTotalAmount' may occur at maximum 1 times. + + Element 'ram:TaxBasisTotalAmount' must occur exactly 1 times. + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:InvoiceCurrencyCode]' may occur at maximum 1 times. + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:TaxCurrencyCode]' may occur at maximum 1 times. + + Element 'ram:GrandTotalAmount' must occur exactly 1 times. + + Element 'ram:TotalPrepaidAmount' may occur at maximum 1 times. + + Element 'ram:DuePayableAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element variant 'ram:TaxTotalAmount[ not(@currencyID=../../ram:InvoiceCurrencyCode) and not(@currencyID=../../ram:TaxCurrencyCode)]' is marked as not used in the given context. + + + + + + + Value of '@currencyID' is not allowed. + + + + + + Attribute '@currencyID' is required in this context. + + + + + + + Value of '@currencyID' is not allowed. + + + + + + Attribute '@currencyID' is required in this context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:PayeePartyCreditorFinancialAccount' may occur at maximum 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:IBANID' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + Value of 'ram:TaxCurrencyCode' is not allowed. + + + + + + Element 'ram:AssociatedDocumentLineDocument' must occur exactly 1 times. + + Element 'ram:SpecifiedTradeProduct' must occur exactly 1 times. + + Element 'ram:SpecifiedLineTradeAgreement' must occur exactly 1 times. + + Element 'ram:SpecifiedLineTradeDelivery' must occur exactly 1 times. + + + + + + Element 'ram:LineID' must occur exactly 1 times. + + Element 'ram:IncludedNote' may occur at maximum 1 times. + + + + + + Element 'ram:Content' must occur exactly 1 times. + + + + + + Element 'ram:SubjectCode' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:NetPriceProductTradePrice' must occur exactly 1 times. + + + + + + Element 'ram:ChargeAmount' must occur exactly 1 times. + + Element variant 'ram:AppliedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator="false"]' may occur at maximum 1 times. + + + + + + Element variant 'ram:AppliedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:CalculationPercent' is marked as not used in the given context. + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + Element 'ram:Reason' is marked as not used in the given context. + + + + + + Element 'ram:ReasonCode' is marked as not used in the given context. + + + + + + + Value of '@unitCode' is not allowed. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:ChargeAmount' must occur exactly 1 times. + + + + + + Element 'ram:AppliedTradeAllowanceCharge' is marked as not used in the given context. + + + + + + + Value of '@unitCode' is not allowed. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:BilledQuantity' must occur exactly 1 times. + + + + + + Attribute '@unitCode' is required in this context. + + + + + + + Value of '@unitCode' is not allowed. + + + + + + Element 'ram:ApplicableTradeTax' must occur exactly 1 times. + + Element 'ram:SpecifiedTradeSettlementLineMonetarySummation' must occur exactly 1 times. + + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Element variant 'ram:SpecifiedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:CalculationPercent' is marked as not used in the given context. + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:CalculationPercent' is marked as not used in the given context. + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:LineTotalAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + diff --git a/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC_codedb.xml b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC_codedb.xml new file mode 100644 index 000000000..cc567d658 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC_codedb.xml @@ -0,0 +1,2190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EN16931.sch b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EN16931.sch new file mode 100644 index 000000000..4d86dd790 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EN16931.sch @@ -0,0 +1,2905 @@ + + + Schema for Factur-X; 1.0.07; EN16931-COMPLIANT (FULLY) + + + + + + + + [BR-52]-Each Additional supporting document (BG-24) shall contain a Supporting document reference (BT-122). + + + + + + [BR-45]-Each VAT breakdown (BG-23) shall have a VAT category taxable amount (BT-116). + + [BR-46]-Each VAT breakdown (BG-23) shall have a VAT category tax amount (BT-117). + + [BR-47]-Each VAT breakdown (BG-23) shall be defined through a VAT category code (BT-118). + + [BR-48]-Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT. + + [BR-CO-03]-Value added tax point date (BT-7) and Value added tax point date code (BT-8) are mutually exclusive. + + [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. + + [BR-DEC-19]-The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2. + + [BR-DEC-20]-The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2. + + + + + + [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". + + [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). + + [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). + + + + + + [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). + + [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). + + [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). + + + + + + [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). + + [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. + + + + + + [BR-31]-Each Document level allowance (BG-20) shall have a Document level allowance amount (BT-92). + + [BR-32]-Each Document level allowance (BG-20) shall have a Document level allowance VAT category code (BT-95). + + [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). + + [BR-CO-05]-Document level allowance reason code (BT-98) and Document level allowance reason (BT-97) shall indicate the same type of allowance. + + [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. + + [BR-DEC-01]-The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2. + + [BR-DEC-02]-The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2. + + + + + + [BR-36]-Each Document level charge (BG-21) shall have a Document level charge amount (BT-99). + + [BR-37]-Each Document level charge (BG-21) shall have a Document level charge VAT category code (BT-102). + + [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). + + [BR-CO-06]-Document level charge reason code (BT-105) and Document level charge reason (BT-104) shall indicate the same type of charge. + + [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. + + [BR-DEC-05]-The allowed maximum number of decimals for the Document level charge amount (BT-99) is 2. + + [BR-DEC-06]-The allowed maximum number of decimals for the Document level charge base amount (BT-100) is 2. + + + + + + [BR-54]-Each Item attribute (BG-32) shall contain an Item attribute name (BT-160) and an Item attribute value (BT-161). + + + + + + [BR-51]-In accordance with card payments security standards an invoice should never include a full card primary account number (BT-87). At the moment PCI Security Standards Council has defined that the first 6 digits and last 4 digits are the maximum number of digits to be shown. + + + + + + [BR-21]-Each Invoice line (BG-25) shall have an Invoice line identifier (BT-126). + + [BR-22]-Each Invoice line (BG-25) shall have an Invoiced quantity (BT-129). + + [BR-23]-An Invoice line (BG-25) shall have an Invoiced quantity unit of measure code (BT-130). + + [BR-24]-Each Invoice line (BG-25) shall have an Invoice line net amount (BT-131). + + [BR-25]-Each Invoice line (BG-25) shall contain the Item name (BT-153). + + [BR-26]-Each Invoice line (BG-25) shall contain the Item net price (BT-146). + + [BR-27]-The Item net price (BT-146) shall NOT be negative. + + [BR-28]-The Item gross price (BT-148) shall NOT be negative. + + [BR-64]-The Item standard identifier (BT-157) shall have a Scheme identifier. + + [BR-65]-The Item classification identifier (BT-158) shall have a Scheme identifier. + + [BR-CO-04]-Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151). + + [BR-DEC-23]-The allowed maximum number of decimals for the Invoice line net amount (BT-131) is 2. + + + + + + [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). + + + + + + [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). + + [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). + + [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). + + [BR-56]-Each Seller tax representative party (BG-11) shall have a Seller tax representative VAT identifier (BT-63). + + + + + + [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. + + + + + + [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). + + [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. + + + + + + [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). + + + + + + [BR-41]-Each Invoice line allowance (BG-27) shall have an Invoice line allowance amount (BT-136). + + [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. + + [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. + + [BR-DEC-24]-The allowed maximum number of decimals for the Invoice line allowance amount (BT-136) is 2. + + [BR-DEC-25]-The allowed maximum number of decimals for the Invoice line allowance base amount (BT-137) is 2. + + + + + + [BR-43]-Each Invoice line charge (BG-28) shall have an Invoice line charge amount (BT-141). + + [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). + + [BR-CO-08]-Invoice line charge reason code (BT-145) and Invoice line charge reason (BT-144) shall indicate the same type of charge reason. + + [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. + + [BR-DEC-27]-The allowed maximum number of decimals for the Invoice line charge amount (BT-141) is 2. + + [BR-DEC-28]-The allowed maximum number of decimals for the Invoice line charge base amount (BT-142) is 2. + + + + + + [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’. + + + + + + [BR-66]-Each Specified Trade Allowance Charge (BG-20)(BG-21) shall contain a Charge Indicator. + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [BR-AF-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). + + [BR-AF-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. + + + + + + [BR-AG-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). + + [BR-AG-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. + + + + + + [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). + + [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). + + + + + + [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). + + [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. + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [BR-AF-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). + + [BR-AF-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. + + + + + + [BR-AG-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). + + [BR-AG-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. + + + + + + [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). + + [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). + + + + + + [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). + + [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. + + + + + + [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). + + [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). + + + + + + [BR-CO-10]-Sum of Invoice line net amount (BT-106) = Σ Invoice line net amount (BT-131). + + [BR-12]-An Invoice shall have the Sum of Invoice line net amount (BT-106). + + [BR-13]-An Invoice shall have the Invoice total amount without VAT (BT-109). + + [BR-14]-An Invoice shall have the Invoice total amount with VAT (BT-112). + + [BR-15]-An Invoice shall have the Amount due for payment (BT-115). + + [BR-CO-11]-Sum of allowances on document level (BT-107) = Σ Document level allowance amount (BT-92). + + [BR-CO-12]-Sum of charges on document level (BT-108) = Σ Document level charge amount (BT-99). + + [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). + + [BR-CO-15]-Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110). + + [BR-CO-16]-Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114). + + [BR-DEC-09]-The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2. + + [BR-DEC-10]-The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2. + + [BR-DEC-11]-The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2. + + [BR-DEC-12]-The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2. + + [BR-DEC-13]-The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2. + + [BR-DEC-14]-The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2. + + [BR-DEC-15]-The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2. + + [BR-DEC-16]-The allowed maximum number of decimals for the Paid amount (BT-113) is 2. + + [BR-DEC-17]-The allowed maximum number of decimals for the Rounding amount (BT-114) is 2. + + [BR-DEC-18]-The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2. + + [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. + + + + + + [BR-CO-14]-Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117). + + + + + + [BR-49]-A Payment instruction (BG-16) shall specify the Payment means type code (BT-81). + + [BR-CO-27]-Either the IBAN or a Proprietary ID (BT-84) shall be used. + + + + + + [BR-50]-A Payment account identifier (BT-84) shall be present if Credit transfer (BG-16) information is provided in the Invoice. + + [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. + + + + + + [BR-CO-18]-An Invoice shall at least have one VAT breakdown group (BG-23). + + + + + + [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". + + [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). + + [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). + + + + + + [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". + + [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). + + [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). + + + + + + [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". + + [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). + + [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). + + + + + + [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". + + [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). + + [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). + + [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. + + [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. + + + + + + [BR-AF-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). + + [BR-AF-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). + + [BR-AF-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). + + + + + + [BR-AG-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). + + [BR-AG-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). + + [BR-AG-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). + + + + + + [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". + + [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). + + [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). + + [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). + + [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". + + [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". + + [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". + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [BR-AF-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). + + [BR-AF-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). + + + + + + [BR-AG-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). + + [BR-AG-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. + + + + + + [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-46). + + [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). + + + + + + [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). + + [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. + + + + + + [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). + + [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). + + + + + + [BR-16]-An Invoice shall have at least one Invoice line (BG-25). + + [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. + + [BR-01]-An Invoice shall have a Specification identifier (BT-24). + + [BR-02]-An Invoice shall have an Invoice number (BT-1). + + [BR-03]-An Invoice shall have an Invoice issue date (BT-2). + + [BR-04]-An Invoice shall have an Invoice type code (BT-3). + + [BR-05]-An Invoice shall have an Invoice currency code (BT-5). + + [BR-06]-An Invoice shall contain the Seller name (BT-27). + + [BR-07]-An Invoice shall contain the Buyer name (BT-44). + + [BR-08]-An Invoice shall contain the Seller postal address (BG-5). + + [BR-09]-The Seller postal address (BG-5) shall contain a Seller country code (BT-40). + + [BR-10]-An Invoice shall contain the Buyer postal address (BG-8). + + [BR-11]-The Buyer postal address shall contain a Buyer country code (BT-55). + + [BR-62]-The Seller electronic address (BT-34) shall have a Scheme identifier. + + [BR-63]-The Buyer electronic address (BT-49) shall have a Scheme identifier. + + [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". + + [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". + + [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". + + [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". + + [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". + + [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". + + [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". + + [BR-AF-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". + + [BR-AG-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". + + [BR-B-01]-An Invoice where the VAT category code (BT-151, BT-95 or BT-102) is “Split payment†shall be a domestic Italian invoice. + + [BR-B-02]-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 “Split payment" shall not contain 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â€. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Content' must occur exactly 1 times. + + Element 'ram:SubjectCode' may occur at maximum 1 times. + + + + + + + Value of 'ram:SubjectCode' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:BusinessProcessSpecifiedDocumentContextParameter' may occur at maximum 1 times. + + Element 'ram:GuidelineSpecifiedDocumentContextParameter' must occur exactly 1 times. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + Value of 'ram:ID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:IncludedSupplyChainTradeLineItem' must occur at least 1 times. + + + + + + Element 'ram:SellerTradeParty' must occur exactly 1 times. + + Element 'ram:BuyerTradeParty' must occur exactly 1 times. + + + + + + Element variant 'ram:AdditionalReferencedDocument[ not(ram:TypeCode="916") and not(ram:TypeCode="50") and not(ram:TypeCode="130")]' is marked as not used in the given context. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + Value of 'ram:ReferenceTypeCode' is not allowed. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:Name' may occur at maximum 1 times. + + Element 'ram:AttachmentBinaryObject' may occur at maximum 1 times. + + + + + + Attribute '@mimeCode' is required in this context. + + Attribute '@filename' is required in this context. + + + + + + + Value of '@mimeCode' is not allowed. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:GlobalID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:DefinedTradeContact' may occur at maximum 1 times. + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + Element 'ram:SpecifiedTaxRegistration' must occur exactly 1 times. + + + + + + Element 'ram:DefinedTradeContact' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Element 'ram:GlobalID' is marked as not used in the given context. + + + + + + Element 'ram:ID' is marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:Description' may occur at maximum 1 times. + + Element 'ram:DefinedTradeContact' may occur at maximum 1 times. + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="VA"]' may occur at maximum 1 times. + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="FC"]' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element variant 'ram:SpecifiedTaxRegistration[ not(ram:ID/@schemeID="VA") and not(ram:ID/@schemeID="FC")]' is marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + [BR-57]-Each Deliver to address (BG-15) shall contain a Deliver to country code (BT-80). + + + + + + Element 'ram:OccurrenceDateTime' must occur exactly 1 times. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:GlobalID' may occur at maximum 1 times. + + + + + + Element 'ram:DefinedTradeContact' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context. + + + + + + Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context. + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + Element 'ram:PaymentReference' may occur at maximum 1 times. + + Element 'ram:InvoiceCurrencyCode' must occur exactly 1 times. + + Element 'ram:ApplicableTradeTax' must occur at least 1 times. + + Element 'ram:SpecifiedTradePaymentTerms' may occur at maximum 1 times. + + Element 'ram:SpecifiedTradeSettlementHeaderMonetarySummation' must occur exactly 1 times. + + Element 'ram:ReceivableSpecifiedTradeAccountingAccount' may occur at maximum 1 times. + + + + + + Element 'ram:CalculatedAmount' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:BasisAmount' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + Value of 'ram:DueDateTypeCode' is not allowed. + + + + + + + Value of 'ram:ExemptionReasonCode' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + Value of 'ram:InvoiceCurrencyCode' is not allowed. + + + + + + [BR-55]-Each Preceding Invoice reference (BG-3) shall contain a Preceding Invoice reference (BT-25). + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:GlobalID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + + + + + Element 'ram:DefinedTradeContact' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:PostalTradeAddress' is marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:TradingBusinessName' is marked as not used in the given context. + + + + + + Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context. + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element variant 'ram:SpecifiedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:Description' may occur at maximum 1 times. + + Element 'ram:DirectDebitMandateID' may occur at maximum 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Element 'ram:LineTotalAmount' must occur exactly 1 times. + + Element 'ram:ChargeTotalAmount' may occur at maximum 1 times. + + Element 'ram:AllowanceTotalAmount' may occur at maximum 1 times. + + Element 'ram:TaxBasisTotalAmount' must occur exactly 1 times. + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:InvoiceCurrencyCode]' may occur at maximum 1 times. + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:TaxCurrencyCode]' may occur at maximum 1 times. + + Element 'ram:RoundingAmount' may occur at maximum 1 times. + + Element 'ram:GrandTotalAmount' must occur exactly 1 times. + + Element 'ram:TotalPrepaidAmount' may occur at maximum 1 times. + + Element 'ram:DuePayableAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element variant 'ram:TaxTotalAmount[ not(@currencyID=../../ram:InvoiceCurrencyCode) and not(@currencyID=../../ram:TaxCurrencyCode)]' is marked as not used in the given context. + + + + + + + Value of '@currencyID' is not allowed. + + + + + + Attribute '@currencyID' is required in this context. + + + + + + + Value of '@currencyID' is not allowed. + + + + + + Attribute '@currencyID' is required in this context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:Information' may occur at maximum 1 times. + + Element 'ram:PayeePartyCreditorFinancialAccount' may occur at maximum 1 times. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:BICID' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:IBANID' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + Value of 'ram:TaxCurrencyCode' is not allowed. + + + + + + Element 'ram:AssociatedDocumentLineDocument' must occur exactly 1 times. + + Element 'ram:SpecifiedTradeProduct' must occur exactly 1 times. + + Element 'ram:SpecifiedLineTradeAgreement' must occur exactly 1 times. + + Element 'ram:SpecifiedLineTradeDelivery' must occur exactly 1 times. + + + + + + Element 'ram:LineID' must occur exactly 1 times. + + Element 'ram:IncludedNote' may occur at maximum 1 times. + + + + + + Element 'ram:Content' must occur exactly 1 times. + + + + + + Element 'ram:SubjectCode' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:NetPriceProductTradePrice' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Element 'ram:IssuerAssignedID' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:ChargeAmount' must occur exactly 1 times. + + Element variant 'ram:AppliedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator="false"]' may occur at maximum 1 times. + + + + + + Element variant 'ram:AppliedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:CalculationPercent' is marked as not used in the given context. + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + Element 'ram:Reason' is marked as not used in the given context. + + + + + + Element 'ram:ReasonCode' is marked as not used in the given context. + + + + + + + Value of '@unitCode' is not allowed. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:ChargeAmount' must occur exactly 1 times. + + + + + + Element 'ram:AppliedTradeAllowanceCharge' is marked as not used in the given context. + + + + + + + Value of '@unitCode' is not allowed. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:BilledQuantity' must occur exactly 1 times. + + + + + + Attribute '@unitCode' is required in this context. + + + + + + + Value of '@unitCode' is not allowed. + + + + + + Element 'ram:ApplicableTradeTax' must occur exactly 1 times. + + Element 'ram:SpecifiedTradeSettlementLineMonetarySummation' must occur exactly 1 times. + + Element 'ram:AdditionalReferencedDocument' may occur at maximum 1 times. + + Element 'ram:ReceivableSpecifiedTradeAccountingAccount' may occur at maximum 1 times. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + Value of 'ram:ReferenceTypeCode' is not allowed. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element variant 'ram:SpecifiedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:LineTotalAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:Description' may occur at maximum 1 times. + + + + + + Element 'ram:Description' must occur exactly 1 times. + + Element 'ram:Value' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute '@listID' is required in this context. + + + + + + + Value of '@listID' is not allowed. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + Value of 'ram:ID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + diff --git a/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EN16931_codedb.xml b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EN16931_codedb.xml new file mode 100644 index 000000000..d0ad2b334 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EN16931_codedb.xml @@ -0,0 +1,5812 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EXTENDED.sch b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EXTENDED.sch new file mode 100644 index 000000000..6cc69bb41 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EXTENDED.sch @@ -0,0 +1,7069 @@ + + + Schema for Factur-X; 1.0.07; EN16931-CONFORMANT-EXTENDED + + + + + + + + [BR-52]-Each Additional supporting document (BG-24) shall contain a Supporting document reference (BT-122). + + + + + + [BR-45]-Each VAT breakdown (BG-23) shall have a VAT category taxable amount (BT-116). + + [BR-46]-Each VAT breakdown (BG-23) shall have a VAT category tax amount (BT-117). + + [BR-47]-Each VAT breakdown (BG-23) shall be defined through a VAT category code (BT-118). + + [BR-48]-Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT. + + [BR-CO-03]-Value added tax point date (BT-7) and Value added tax point date code (BT-8) are mutually exclusive. + + [BR-DEC-19]-The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2. + + [BR-DEC-20]-The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2. + + + + + + [BR-FXEXT-Z-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “Z†("Zero Rated"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charge amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is "Zero Rated" (Z). + + [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). + + [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). + + + + + + [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). + + [BR-FXEXT-S-08]-For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is equal to “S†("Standard rated"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charges amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is "Standard rated" (S) and the VAT rate (BT-152, BT-96, BT-103, BT-X-274) equals the VAT category rate (BT-119). + + + + + + [BR-FXEXT-S-09]-For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is equal to “S†("Standard rated"), Absolute Value of (VAT category tax amount (BT-117) - VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119)/100) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is " Standard rated " (S), and the VAT rate (BT-152, BT-96, BT-103, BT-X-274) equals the VAT category rate (BT-119). + + + + + + [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). + + [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. + + + + + + [BR-31]-Each Document level allowance (BG-20) shall have a Document level allowance amount (BT-92). + + [BR-32]-Each Document level allowance (BG-20) shall have a Document level allowance VAT category code (BT-95). + + [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). + + [BR-CO-05]-Document level allowance reason code (BT-98) and Document level allowance reason (BT-97) shall indicate the same type of allowance. + + [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. + + [BR-DEC-01]-The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2. + + [BR-DEC-02]-The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2. + + + + + + [BR-36]-Each Document level charge (BG-21) shall have a Document level charge amount (BT-99). + + [BR-37]-Each Document level charge (BG-21) shall have a Document level charge VAT category code (BT-102). + + [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). + + [BR-CO-06]-Document level charge reason code (BT-105) and Document level charge reason (BT-104) shall indicate the same type of charge. + + [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. + + [BR-DEC-05]-The allowed maximum number of decimals for the Document level charge amount (BT-99) is 2. + + [BR-DEC-06]-The allowed maximum number of decimals for the Document level charge base amount (BT-100) is 2. + + + + + + [BR-54]-Each Item attribute (BG-32) shall contain an Item attribute name (BT-160) and an Item attribute value (BT-161). + + + + + + [BR-51]-In accordance with card payments security standards an invoice should never include a full card primary account number (BT-87). At the moment PCI Security Standards Council has defined that the first 6 digits and last 4 digits are the maximum number of digits to be shown. + + + + + + [BR-FXEXT-02]-If the invoice line item free text subject code (BT-X-10) is specified, either the coded invoice line item free text (BT-X-9) or the invoice line item free text (BT-127) must be specified, or both. If both BT-X-9 and BT-127 are specified, both must have the same meaning. + + + + + + [BR-21]-Each Invoice line (BG-25) shall have an Invoice line identifier (BT-126). + + [BR-22]-Each Invoice line (BG-25) shall have an Invoiced quantity (BT-129). + + [BR-23]-An Invoice line (BG-25) shall have an Invoiced quantity unit of measure code (BT-130). + + [BR-24]-Each Invoice line (BG-25) shall have an Invoice line net amount (BT-131). + + [BR-25]-Each Invoice line (BG-25) shall contain the Item name (BT-153). + + [BR-26]-Each Invoice line (BG-25) shall contain the Item net price (BT-146). + + [BR-27]-The Item net price (BT-146) shall NOT be negative. + + [BR-28]-The Item gross price (BT-148) shall NOT be negative. + + [BR-64]-The Item standard identifier (BT-157) shall have a Scheme identifier. + + [BR-65]-The Item classification identifier (BT-158) shall have a Scheme identifier. + + [BR-CO-04]-Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151). + + [BR-DEC-23]-The allowed maximum number of decimals for the Invoice line net amount (BT-131) is 2. + + + + + + [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). + + + + + + [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). + + [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). + + [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). + + [BR-56]-Each Seller tax representative party (BG-11) shall have a Seller tax representative VAT identifier (BT-63). + + + + + + [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. + + + + + + [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). + + [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. + + + + + + [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). + + + + + + [BR-41]-Each Invoice line allowance (BG-27) shall have an Invoice line allowance amount (BT-136). + + [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. + + [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. + + [BR-DEC-24]-The allowed maximum number of decimals for the Invoice line allowance amount (BT-136) is 2. + + [BR-DEC-25]-The allowed maximum number of decimals for the Invoice line allowance base amount (BT-137) is 2. + + + + + + [BR-43]-Each Invoice line charge (BG-28) shall have an Invoice line charge amount (BT-141). + + [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). + + [BR-CO-08]-Invoice line charge reason code (BT-145) and Invoice line charge reason (BT-144) shall indicate the same type of charge reason. + + [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. + + [BR-DEC-27]-The allowed maximum number of decimals for the Invoice line charge amount (BT-141) is 2. + + [BR-DEC-28]-The allowed maximum number of decimals for the Invoice line charge base amount (BT-142) is 2. + + + + + + [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’. + + + + + + [BR-FXEXT-03]-Only a VAT registration ID may be provided for the following business partners: the line level Ship-To (BT-X-66), the line level Ultimate-Ship-To (BT-X-84), the Sales-Agent (BT-X-340), the Buyer-Tax-Representative (BT-X-367), the Product-Enduser (BT-X-144), the Buyer-Agent (BT-X-411), the document level Ship-To (BT-X-161), the document level Ultimate-Ship-To (BT-X-180), the Ship-From (BT-X-199), the Invoicer (BT-X-223), the Invoicee (BT-X-242), the document level Payee (BT-X-257), the Payer (BT-X-481), or the payment-term-specific Payee (BT-X-509). + + + + + + [BR-66]-Each Specified Trade Allowance Charge (BG-20)(BG-21) shall contain a Charge Indicator. + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [BR-AF-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). + + [BR-AF-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. + + + + + + [BR-AG-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). + + [BR-AG-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. + + + + + + [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). + + + + + + [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). + + [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. + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [BR-AF-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). + + [BR-AF-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. + + + + + + [BR-AG-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). + + [BR-AG-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. + + + + + + [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). + + + + + + [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). + + [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. + + + + + + [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). + + [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). + + + + + + [BR-FXEXT-CO-10]-Absolute Value of (Sum of Invoice line net amount (BT-106) - Σ Invoice line net amounts (BT-131))<= 0,01 * Number of line net amounts (BT-131). + + [BR-12]-An Invoice shall have the Sum of Invoice line net amount (BT-106). + + [BR-13]-An Invoice shall have the Invoice total amount without VAT (BT-109). + + [BR-14]-An Invoice shall have the Invoice total amount with VAT (BT-112). + + [BR-15]-An Invoice shall have the Amount due for payment (BT-115). + + [BR-FXEXT-CO-11]-Absolute Value of (Sum of allowances on document level (BT-107) - Σ Document level allowance amounts (BT-92))<= 0,01 * Number of Document level allowance amounts (BT-92). + + [BR-FXEXT-CO-12]-Absolute Value of (Sum of charges on document level (BT-108) - Σ Document level charge amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272))<= 0,01 * (Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)). + + [BR-FXEXT-CO-13]-Absolute Value of (Invoice total amount without VAT (BT-109) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charge amounts (BT-99)) <= 0,01 * (Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99)). + + [BR-FXEXT-CO-15]-If Invoice Total VAT amount (BT-110) ,where currency (BT-110-0) is equal to BT-5, is present, then the Absolute Value of (Invoice total amount with VAT (BT-112) - Invoice total amount without VAT (BT-109) - Invoice total VAT amount (BT-110)) <= 0,01 * (Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charges amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272). Else, Invoice total amount with VAT (BT-112) is equal to Invoice total amount without VAT (BT-109). + + [BR-CO-16]-Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114). + + [BR-DEC-09]-The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2. + + [BR-DEC-10]-The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2. + + [BR-DEC-11]-The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2. + + [BR-DEC-12]-The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2. + + [BR-DEC-13]-The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2. + + [BR-DEC-14]-The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2. + + [BR-DEC-15]-The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2. + + [BR-DEC-16]-The allowed maximum number of decimals for the Paid amount (BT-113) is 2. + + [BR-DEC-17]-The allowed maximum number of decimals for the Rounding amount (BT-114) is 2. + + [BR-DEC-18]-The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2. + + [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. + + + + + + [BR-CO-14]-Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117). + + + + + + [BR-49]-A Payment instruction (BG-16) shall specify the Payment means type code (BT-81). + + [BR-CO-27]-Either the IBAN or a Proprietary ID (BT-84) shall be used. + + + + + + [BR-50]-A Payment account identifier (BT-84) shall be present if Credit transfer (BG-16) information is provided in the Invoice. + + [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. + + + + + + [BR-CO-18]-An Invoice shall at least have one VAT breakdown group (BG-23). + + + + + + [BR-FXEXT-AE-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “AE†("Reverse Charge"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charge amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is "Reversed Charge" (AE). + + [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). + + [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). + + + + + + [BR-FXEXT-E-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “E†("Exempt from VAT"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charges amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is " Exempt from VAT" (E). + + [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). + + [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). + + + + + + [BR-FXEXT-G-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “G†("Export outside the EU"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charges amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is " Export outside the EU " (G). + + [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). + + [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). + + + + + + [BR-FXEXT-IC-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “K†("Intra-community supply"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charges amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is " Intra-community supply " (K) + + [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). + + [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). + + [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. + + [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. + + + + + + [BR-FXEXT-AF-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “L†("Canary Islands tax"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charges amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is " Canary Islands tax " (L). + + [BR-AF-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). + + [BR-AF-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). + + + + + + [BR-FXEXT-AG-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “M†("Ceuta and Mellita tax"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charges amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is " Ceuta and Mellita tax " (M). + + [BR-AG-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). + + [BR-AG-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). + + + + + + [BR-FXEXT-O-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “O†("Not subject to VAT"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charges amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is " Not subject to VAT " (O). + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [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). + + [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). + + + + + + [BR-AF-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). + + [BR-AF-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). + + + + + + [BR-AG-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). + + [BR-AG-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. + + + + + + [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). + + + + + + [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). + + [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. + + + + + + [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). + + [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). + + + + + + [BR-16]-An Invoice shall have at least one Invoice line (BG-25). + + [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. + + [BR-01]-An Invoice shall have a Specification identifier (BT-24). + + [BR-02]-An Invoice shall have an Invoice number (BT-1). + + [BR-03]-An Invoice shall have an Invoice issue date (BT-2). + + [BR-04]-An Invoice shall have an Invoice type code (BT-3). + + [BR-05]-An Invoice shall have an Invoice currency code (BT-5). + + [BR-06]-An Invoice shall contain the Seller name (BT-27). + + [BR-07]-An Invoice shall contain the Buyer name (BT-44). + + [BR-08]-An Invoice shall contain the Seller postal address (BG-5). + + [BR-09]-The Seller postal address (BG-5) shall contain a Seller country code (BT-40). + + [BR-10]-An Invoice shall contain the Buyer postal address (BG-8). + + [BR-11]-The Buyer postal address shall contain a Buyer country code (BT-55). + + [BR-62]-The Seller electronic address (BT-34) shall have a Scheme identifier. + + [BR-63]-The Buyer electronic address (BT-49) shall have a Scheme identifier. + + [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". + + [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". + + [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". + + [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". + + [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". + + [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". + + [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". + + [BR-AF-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". + + [BR-AG-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". + + [BR-B-01]-An Invoice where the VAT category code (BT-151, BT-95 or BT-102) is “Split payment†shall be a domestic Italian invoice. + + [BR-B-02]-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 “Split payment" shall not contain 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â€. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + Element 'ram:Name' may occur at maximum 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:LanguageID' may occur at maximum 1 times. + + + + + + Element 'ram:CompleteDateTime' must occur exactly 1 times. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Element 'ram:EndDateTime' is marked as not used in the given context. + + + + + + Element 'ram:StartDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Content' may occur at maximum 1 times. + + Element 'ram:SubjectCode' may occur at maximum 1 times. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of 'ram:SubjectCode' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + [BR-FXEXT-01]-If the Invoice Free Text subject Code (BT-21) is specified, either the coded message free text (BT-X-5) or the message free text (BT-22) must be specified, or both. If both BT-X-5 and BT-22 are specified, both must have the same meaning. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:BusinessProcessSpecifiedDocumentContextParameter' may occur at maximum 1 times. + + Element 'ram:GuidelineSpecifiedDocumentContextParameter' must occur exactly 1 times. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + Value of 'ram:ID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:IncludedSupplyChainTradeLineItem' must occur at least 1 times. + + + + + + Element 'ram:SellerTradeParty' must occur exactly 1 times. + + Element 'ram:BuyerTradeParty' must occur exactly 1 times. + + + + + + Element variant 'ram:AdditionalReferencedDocument[ not(ram:TypeCode="916") and not(ram:TypeCode="50") and not(ram:TypeCode="130")]' is marked as not used in the given context. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + Value of 'ram:ReferenceTypeCode' is not allowed. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:Name' may occur at maximum 1 times. + + Element 'ram:AttachmentBinaryObject' may occur at maximum 1 times. + + + + + + Attribute '@mimeCode' is required in this context. + + Attribute '@filename' is required in this context. + + + + + + + Value of '@mimeCode' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:DeliveryTypeCode' must occur exactly 1 times. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' must occur exactly 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:Description' may occur at maximum 1 times. + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + Value of 'ram:ReferenceTypeCode' is not allowed. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' must occur exactly 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:Description' may occur at maximum 1 times. + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="VA"]' may occur at maximum 1 times. + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="FC"]' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element variant 'ram:SpecifiedTaxRegistration[ not(ram:ID/@schemeID="VA") and not(ram:ID/@schemeID="FC")]' is marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + [BR-57]-Each Deliver to address (BG-15) shall contain a Deliver to country code (BT-80). + + + + + + Element 'ram:OccurrenceDateTime' must occur exactly 1 times. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:ModeCode' must occur exactly 1 times. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:PaymentReference' may occur at maximum 1 times. + + Element 'ram:InvoiceCurrencyCode' must occur exactly 1 times. + + Element 'ram:ApplicableTradeTax' must occur at least 1 times. + + Element 'ram:SpecifiedTradeSettlementHeaderMonetarySummation' must occur exactly 1 times. + + + + + + Element 'ram:CalculatedAmount' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:BasisAmount' must occur exactly 1 times. + + Element 'ram:LineTotalBasisAmount' may occur at maximum 1 times. + + Element 'ram:AllowanceChargeBasisAmount' may occur at maximum 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + Value of 'ram:DueDateTypeCode' is not allowed. + + + + + + + Value of 'ram:ExemptionReasonCode' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:Description' may occur at maximum 1 times. + + + + + + Element 'ram:CompleteDateTime' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + Value of 'ram:InvoiceCurrencyCode' is not allowed. + + + + + + [BR-55]-Each Preceding Invoice reference (BG-3) shall contain a Preceding Invoice reference (BT-25). + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:IncludedTradeTax' must occur at least 1 times. + + Element 'ram:InvoiceSpecifiedReferencedDocument' may occur at maximum 1 times. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Element 'ram:CalculatedAmount' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + Value of 'ram:ExemptionReasonCode' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:LineTotalBasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:Description' must occur exactly 1 times. + + Element 'ram:AppliedAmount' must occur exactly 1 times. + + Element 'ram:AppliedTradeTax' must occur at least 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + Element 'ram:RateApplicablePercent' must occur exactly 1 times. + + + + + + Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + Element 'ram:LineTotalBasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element variant 'ram:SpecifiedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + Value of '@unitCode' is not allowed. + + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + Element 'ram:LineTotalBasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + Value of '@unitCode' is not allowed. + + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + Element 'ram:LineTotalBasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:Description' may occur at maximum 1 times. + + Element 'ram:DirectDebitMandateID' may occur at maximum 1 times. + + Element 'ram:PartialPaymentAmount' may occur at maximum 1 times. + + Element 'ram:PayeeTradeParty' may occur at maximum 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute '@unitCode' is required in this context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:LineTotalAmount' must occur exactly 1 times. + + Element 'ram:ChargeTotalAmount' may occur at maximum 1 times. + + Element 'ram:AllowanceTotalAmount' may occur at maximum 1 times. + + Element 'ram:TaxBasisTotalAmount' must occur exactly 1 times. + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:InvoiceCurrencyCode]' may occur at maximum 1 times. + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:TaxCurrencyCode]' may occur at maximum 1 times. + + Element 'ram:RoundingAmount' may occur at maximum 1 times. + + Element 'ram:GrandTotalAmount' must occur exactly 1 times. + + Element 'ram:TotalPrepaidAmount' may occur at maximum 1 times. + + Element 'ram:DuePayableAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element variant 'ram:TaxTotalAmount[ not(@currencyID=../../ram:InvoiceCurrencyCode) and not(@currencyID=../../ram:TaxCurrencyCode)]' is marked as not used in the given context. + + + + + + + Value of '@currencyID' is not allowed. + + + + + + Attribute '@currencyID' is required in this context. + + + + + + + Value of '@currencyID' is not allowed. + + + + + + Attribute '@currencyID' is required in this context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:Information' may occur at maximum 1 times. + + Element 'ram:PayeePartyCreditorFinancialAccount' may occur at maximum 1 times. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:BICID' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:IBANID' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + + Value of 'ram:SourceCurrencyCode' is not allowed. + + + + + + + Value of 'ram:TargetCurrencyCode' is not allowed. + + + + + + + Value of 'ram:TaxCurrencyCode' is not allowed. + + + + + + Element 'ram:AssociatedDocumentLineDocument' must occur exactly 1 times. + + Element 'ram:SpecifiedTradeProduct' must occur exactly 1 times. + + Element 'ram:SpecifiedLineTradeAgreement' must occur exactly 1 times. + + Element 'ram:SpecifiedLineTradeDelivery' must occur exactly 1 times. + + + + + + Element 'ram:LineID' must occur exactly 1 times. + + + + + + Element 'ram:Content' may occur at maximum 1 times. + + Element 'ram:SubjectCode' may occur at maximum 1 times. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of 'ram:SubjectCode' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:NetPriceProductTradePrice' must occur exactly 1 times. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:Name' may occur at maximum 1 times. + + Element 'ram:AttachmentBinaryObject' may occur at maximum 1 times. + + + + + + Attribute '@mimeCode' is required in this context. + + Attribute '@filename' is required in this context. + + + + + + + Value of '@mimeCode' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + Value of 'ram:ReferenceTypeCode' is not allowed. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:ChargeAmount' must occur exactly 1 times. + + + + + + Element variant 'ram:AppliedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:BasisQuantity' is marked as not used in the given context. + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:SequenceNumeric' is marked as not used in the given context. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:BasisQuantity' is marked as not used in the given context. + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:SequenceNumeric' is marked as not used in the given context. + + + + + + + Value of '@unitCode' is not allowed. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:IncludedTradeTax' is marked as not used in the given context. + + + + + + Element 'ram:ChargeAmount' must occur exactly 1 times. + + Element 'ram:IncludedTradeTax' may occur at maximum 1 times. + + + + + + Element 'ram:AppliedTradeAllowanceCharge' is marked as not used in the given context. + + + + + + + Value of '@unitCode' is not allowed. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:CalculatedAmount' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + Element 'ram:RateApplicablePercent' must occur exactly 1 times. + + + + + + Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + Value of 'ram:ExemptionReasonCode' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:LineTotalBasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:BilledQuantity' must occur exactly 1 times. + + + + + + Element 'ram:OccurrenceDateTime' must occur exactly 1 times. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute '@unitCode' is required in this context. + + + + + + + Value of '@unitCode' is not allowed. + + + + + + Attribute '@unitCode' is required in this context. + + + + + + + Value of '@unitCode' is not allowed. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Attribute '@unitCode' is required in this context. + + + + + + + Value of '@unitCode' is not allowed. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:PostalTradeAddress' is marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:RoleCode' may occur at maximum 1 times. + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:PostalTradeAddress' is marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:ApplicableTradeTax' must occur at least 1 times. + + Element 'ram:SpecifiedTradeSettlementLineMonetarySummation' must occur exactly 1 times. + + Element 'ram:InvoiceReferencedDocument' may occur at maximum 1 times. + + Element 'ram:ReceivableSpecifiedTradeAccountingAccount' may occur at maximum 1 times. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + Value of 'ram:ReferenceTypeCode' is not allowed. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Element 'ram:CalculatedAmount' may occur at maximum 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + Value of 'ram:ExemptionReasonCode' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Element 'ram:LineTotalBasisAmount' is marked as not used in the given context. + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:CompleteDateTime' is marked as not used in the given context. + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element variant 'ram:SpecifiedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:BasisQuantity' is marked as not used in the given context. + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:SequenceNumeric' is marked as not used in the given context. + + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:BasisQuantity' is marked as not used in the given context. + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + Element 'ram:SequenceNumeric' is marked as not used in the given context. + + + + + + Element 'ram:LineTotalAmount' must occur exactly 1 times. + + Element 'ram:ChargeTotalAmount' may occur at maximum 1 times. + + Element 'ram:AllowanceTotalAmount' may occur at maximum 1 times. + + Element 'ram:TaxTotalAmount' may occur at maximum 1 times. + + Element 'ram:GrandTotalAmount' may occur at maximum 1 times. + + Element 'ram:TotalAllowanceChargeAmount' may occur at maximum 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:Description' may occur at maximum 1 times. + + + + + + Element 'ram:Description' must occur exactly 1 times. + + Element 'ram:Value' must occur exactly 1 times. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:ClassName' may occur at maximum 1 times. + + + + + + Attribute '@listID' is required in this context. + + + + + + + Value of '@listID' is not allowed. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:ID' may occur at maximum 1 times. + + Element 'ram:IndustryAssignedID' may occur at maximum 1 times. + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:Description' may occur at maximum 1 times. + + Element 'ram:UnitQuantity' may occur at maximum 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute '@unitCode' is required in this context. + + + + + + + Value of '@unitCode' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + Value of 'ram:ID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + diff --git a/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EXTENDED_codedb.xml b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EXTENDED_codedb.xml new file mode 100644 index 000000000..6f20669d7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EXTENDED_codedb.xml @@ -0,0 +1,6292 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_MINIMUM.sch b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_MINIMUM.sch new file mode 100644 index 000000000..4e8152da7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_MINIMUM.sch @@ -0,0 +1,312 @@ + + + Schema for Factur-X; 1.0.07; Accounting, MINIMUM + + + + + + + + [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. + + + + + + [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’. + + + + + + [BR-13]-An Invoice shall have the Invoice total amount without VAT (BT-109). + + [BR-14]-An Invoice shall have the Invoice total amount with VAT (BT-112). + + [BR-15]-An Invoice shall have the Amount due for payment (BT-115). + + [BR-DEC-12]-The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2. + + [BR-DEC-13]-The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2. + + [BR-DEC-14]-The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2. + + [BR-DEC-18]-The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2. + + + + + + [BR-01]-An Invoice shall have a Specification identifier (BT-24). + + [BR-02]-An Invoice shall have an Invoice number (BT-1). + + [BR-03]-An Invoice shall have an Invoice issue date (BT-2). + + [BR-04]-An Invoice shall have an Invoice type code (BT-3). + + [BR-05]-An Invoice shall have an Invoice currency code (BT-5). + + [BR-06]-An Invoice shall contain the Seller name (BT-27). + + [BR-07]-An Invoice shall contain the Buyer name (BT-44). + + [BR-08]-An Invoice shall contain the Seller postal address (BG-5). + + [BR-09]-The Seller postal address (BG-5) shall contain a Seller country code (BT-40). + + + + + + Element 'ram:ID' must occur exactly 1 times. + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Attribute '@format' is required in this context. + + + + + + + Value of '@format' is not allowed. + + + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + Element 'ram:BusinessProcessSpecifiedDocumentContextParameter' may occur at maximum 1 times. + + Element 'ram:GuidelineSpecifiedDocumentContextParameter' must occur exactly 1 times. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + Value of 'ram:ID' is not allowed. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:SellerTradeParty' must occur exactly 1 times. + + Element 'ram:BuyerTradeParty' must occur exactly 1 times. + + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + Element 'ram:PostalTradeAddress' is marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context. + + + + + + Element 'ram:Name' must occur exactly 1 times. + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="VA"]' may occur at maximum 1 times. + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="FC"]' may occur at maximum 1 times. + + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + Value of '@schemeID' is not allowed. + + + + + + Element variant 'ram:SpecifiedTaxRegistration[ not(ram:ID/@schemeID="VA") and not(ram:ID/@schemeID="FC")]' is marked as not used in the given context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + Attribute '@schemeID' is required in this context. + + + + + + Element 'ram:InvoiceCurrencyCode' must occur exactly 1 times. + + Element 'ram:SpecifiedTradeSettlementHeaderMonetarySummation' must occur exactly 1 times. + + + + + + + Value of 'ram:InvoiceCurrencyCode' is not allowed. + + + + + + Element 'ram:TaxBasisTotalAmount' must occur exactly 1 times. + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:InvoiceCurrencyCode]' may occur at maximum 1 times. + + Element 'ram:GrandTotalAmount' must occur exactly 1 times. + + Element 'ram:DuePayableAmount' must occur exactly 1 times. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + Element variant 'ram:TaxTotalAmount[ not(@currencyID=../../ram:InvoiceCurrencyCode) and not(@currencyID=../../ram:TaxCurrencyCode)]' is marked as not used in the given context. + + + + + + + Value of '@currencyID' is not allowed. + + + + + + Attribute '@currencyID' is required in this context. + + + diff --git a/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_MINIMUM_codedb.xml b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_MINIMUM_codedb.xml new file mode 100644 index 000000000..74a7b49c5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_MINIMUM_codedb.xml @@ -0,0 +1,908 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC-WL.xslt b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC-WL.xslt new file mode 100644 index 000000000..36484a846 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC-WL.xslt @@ -0,0 +1,8829 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + *: + + [namespace-uri()=' + + '] + + + + [ + + ] + + + + / + + @ + + + @*[local-name()=' + + ' and namespace-uri()=' + + '] + + + + + + + + + / + + + [ + + ] + + + + /@ + + + + + + + + / + + + [ + + ] + + + + /@ + + + + + + + + + + + + + + + + + + + + + + + + . + + + + +U + + U + + + + U. + + n + + + + U. + + _ + + _ + + + + + + + + +   +   +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Schema for Factur-X; 1.07.2; Accounting, BASIC without Lines + + + + + + + + + + + + + + FX-SCH-A-000047 + + + + + [BR-45]-Each VAT breakdown (BG-23) shall have a VAT category taxable amount (BT-116). + + + + + + + + + + FX-SCH-A-000048 + + + + + [BR-46]-Each VAT breakdown (BG-23) shall have a VAT category tax amount (BT-117). + + + + + + + + + + FX-SCH-A-000049 + + + + + [BR-47]-Each VAT breakdown (BG-23) shall be defined through a VAT category code (BT-118). + + + + + + + + + + FX-SCH-A-000050 + + + + + [BR-48]-Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT. + + + + + + + + + + FX-SCH-A-000051 + + + + + [BR-CO-03]-Value added tax point date (BT-7) and Value added tax point date code (BT-8) are mutually exclusive. + + + + + + + + + + FX-SCH-A-000052 + + + + + [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. + + + + + + + + + + FX-SCH-A-000053 + + + + + [BR-DEC-19]-The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2. + + + + + + + + + + FX-SCH-A-000054 + + + + + [BR-DEC-20]-The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000055 + + + + + [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). + + + + + + + + + + FX-SCH-A-000056 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000057 + + + + + [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). + + + + + + + + + + FX-SCH-A-000058 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000059 + + + + + [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). + + + + + + + + + + FX-SCH-A-000060 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000061 + + + + + [BR-31]-Each Document level allowance (BG-20) shall have a Document level allowance amount (BT-92). + + + + + + + + + + FX-SCH-A-000062 + + + + + [BR-32]-Each Document level allowance (BG-20) shall have a Document level allowance VAT category code (BT-95). + + + + + + + + + + FX-SCH-A-000063 + + + + + [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). + + + + + + + + + + FX-SCH-A-000064 + + + + + [BR-CO-05]-Document level allowance reason code (BT-98) and Document level allowance reason (BT-97) shall indicate the same type of allowance. + + + + + + + + + + FX-SCH-A-000065 + + + + + [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. + + + + + + + + + + FX-SCH-A-000066 + + + + + [BR-DEC-01]-The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2. + + + + + + + + + + FX-SCH-A-000067 + + + + + [BR-DEC-02]-The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000068 + + + + + [BR-36]-Each Document level charge (BG-21) shall have a Document level charge amount (BT-99). + + + + + + + + + + FX-SCH-A-000069 + + + + + [BR-37]-Each Document level charge (BG-21) shall have a Document level charge VAT category code (BT-102). + + + + + + + + + + FX-SCH-A-000070 + + + + + [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). + + + + + + + + + + FX-SCH-A-000071 + + + + + [BR-CO-06]-Document level charge reason code (BT-105) and Document level charge reason (BT-104) shall indicate the same type of charge. + + + + + + + + + + FX-SCH-A-000072 + + + + + [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. + + + + + + + + + + FX-SCH-A-000073 + + + + + [BR-DEC-05]-The allowed maximum number of decimals for the Document level charge amount (BT-99) is 2. + + + + + + + + + + FX-SCH-A-000074 + + + + + [BR-DEC-06]-The allowed maximum number of decimals for the Document level charge base amount (BT-100) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000075 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000076 + + + + + [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). + + + + + + + + + + FX-SCH-A-000077 + + + + + [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). + + + + + + + + + + FX-SCH-A-000078 + + + + + [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). + + + + + + + + + + FX-SCH-A-000079 + + + + + [BR-56]-Each Seller tax representative party (BG-11) shall have a Seller tax representative VAT identifier (BT-63). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000001 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000002 + + + + + [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’. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000080 + + + + + [BR-66]-Each Specified Trade Allowance Charge (BG-20)(BG-21) shall contain a Charge Indicator. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000081 + + + + + [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). + + + + + + + + + + FX-SCH-A-000082 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000083 + + + + + [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). + + + + + + + + + + FX-SCH-A-000084 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000085 + + + + + [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). + + + + + + + + + + FX-SCH-A-000086 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000087 + + + + + [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). + + + + + + + + + + FX-SCH-A-000088 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000089 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000090 + + + + + [BR-AF-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000091 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000092 + + + + + [BR-AG-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000093 + + + + + [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). + + + + + + + + + + FX-SCH-A-000094 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000095 + + + + + [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). + + + + + + + + + + FX-SCH-A-000096 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000097 + + + + + [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). + + + + + + + + + + FX-SCH-A-000098 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000099 + + + + + [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). + + + + + + + + + + FX-SCH-A-000100 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000101 + + + + + [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). + + + + + + + + + + FX-SCH-A-000102 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000103 + + + + + [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). + + + + + + + + + + FX-SCH-A-000104 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000105 + + + + + [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). + + + + + + + + + + FX-SCH-A-000106 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000107 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000108 + + + + + [BR-AF-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000109 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000110 + + + + + [BR-AG-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000111 + + + + + [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). + + + + + + + + + + FX-SCH-A-000112 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000113 + + + + + [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). + + + + + + + + + + FX-SCH-A-000114 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000115 + + + + + [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). + + + + + + + + + + FX-SCH-A-000116 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000117 + + + + + [BR-12]-An Invoice shall have the Sum of Invoice line net amount (BT-106). + + + + + + + + + + FX-SCH-A-000003 + + + + + [BR-13]-An Invoice shall have the Invoice total amount without VAT (BT-109). + + + + + + + + + + FX-SCH-A-000004 + + + + + [BR-14]-An Invoice shall have the Invoice total amount with VAT (BT-112). + + + + + + + + + + FX-SCH-A-000005 + + + + + [BR-15]-An Invoice shall have the Amount due for payment (BT-115). + + + + + + + + + + FX-SCH-A-000118 + + + + + [BR-CO-11]-Sum of allowances on document level (BT-107) = Σ Document level allowance amount (BT-92). + + + + + + + + + + FX-SCH-A-000119 + + + + + [BR-CO-12]-Sum of charges on document level (BT-108) = Σ Document level charge amount (BT-99). + + + + + + + + + + FX-SCH-A-000120 + + + + + [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). + + + + + + + + + + FX-SCH-A-000121 + + + + + [BR-CO-15]-Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110). + + + + + + + + + + FX-SCH-A-000122 + + + + + [BR-CO-16]-Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114). + + + + + + + + + + FX-SCH-A-000123 + + + + + [BR-DEC-09]-The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2. + + + + + + + + + + FX-SCH-A-000124 + + + + + [BR-DEC-10]-The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2. + + + + + + + + + + FX-SCH-A-000125 + + + + + [BR-DEC-11]-The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2. + + + + + + + + + + FX-SCH-A-000006 + + + + + [BR-DEC-12]-The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2. + + + + + + + + + + FX-SCH-A-000007 + + + + + [BR-DEC-13]-The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2. + + + + + + + + + + FX-SCH-A-000008 + + + + + [BR-DEC-14]-The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2. + + + + + + + + + + FX-SCH-A-000126 + + + + + [BR-DEC-15]-The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2. + + + + + + + + + + FX-SCH-A-000127 + + + + + [BR-DEC-16]-The allowed maximum number of decimals for the Paid amount (BT-113) is 2. + + + + + + + + + + FX-SCH-A-000128 + + + + + [BR-DEC-17]-The allowed maximum number of decimals for the Rounding amount (BT-114) is 2. + + + + + + + + + + FX-SCH-A-000009 + + + + + [BR-DEC-18]-The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2. + + + + + + + + + + FX-SCH-A-000129 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000130 + + + + + [BR-CO-14]-Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000131 + + + + + [BR-49]-A Payment instruction (BG-16) shall specify the Payment means type code (BT-81). + + + + + + + + + + FX-SCH-A-000132 + + + + + [BR-CO-27]-Either the IBAN or a Proprietary ID (BT-84) shall be used. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000134 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000133 + + + + + [BR-50]-A Payment account identifier (BT-84) shall be present if Credit transfer (BG-16) information is provided in the Invoice. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000135 + + + + + [BR-CO-18]-An Invoice shall at least have one VAT breakdown group (BG-23). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000136 + + + + + [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). + + + + + + + + + + FX-SCH-A-000137 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000138 + + + + + [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). + + + + + + + + + + FX-SCH-A-000139 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000140 + + + + + [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). + + + + + + + + + + FX-SCH-A-000141 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000142 + + + + + [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). + + + + + + + + + + FX-SCH-A-000143 + + + + + [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). + + + + + + + + + + FX-SCH-A-000144 + + + + + [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. + + + + + + + + + + FX-SCH-A-000145 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000146 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000147 + + + + + [BR-AF-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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000148 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000149 + + + + + [BR-AG-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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000150 + + + + + [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). + + + + + + + + + + FX-SCH-A-000151 + + + + + [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). + + + + + + + + + + FX-SCH-A-000152 + + + + + [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). + + + + + + + + + + FX-SCH-A-000153 + + + + + [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". + + + + + + + + + + FX-SCH-A-000154 + + + + + [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". + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000155 + + + + + [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. + + + + + + + + + + FX-SCH-A-000010 + + + + + [BR-01]-An Invoice shall have a Specification identifier (BT-24). + + + + + + + + + + FX-SCH-A-000011 + + + + + [BR-02]-An Invoice shall have an Invoice number (BT-1). + + + + + + + + + + FX-SCH-A-000012 + + + + + [BR-03]-An Invoice shall have an Invoice issue date (BT-2). + + + + + + + + + + FX-SCH-A-000013 + + + + + [BR-04]-An Invoice shall have an Invoice type code (BT-3). + + + + + + + + + + FX-SCH-A-000014 + + + + + [BR-05]-An Invoice shall have an Invoice currency code (BT-5). + + + + + + + + + + FX-SCH-A-000015 + + + + + [BR-06]-An Invoice shall contain the Seller name (BT-27). + + + + + + + + + + FX-SCH-A-000016 + + + + + [BR-07]-An Invoice shall contain the Buyer name (BT-44). + + + + + + + + + + FX-SCH-A-000017 + + + + + [BR-08]-An Invoice shall contain the Seller postal address (BG-5). + + + + + + + + + + FX-SCH-A-000018 + + + + + [BR-09]-The Seller postal address (BG-5) shall contain a Seller country code (BT-40). + + + + + + + + + + FX-SCH-A-000156 + + + + + [BR-10]-An Invoice shall contain the Buyer postal address (BG-8). + + + + + + + + + + FX-SCH-A-000157 + + + + + [BR-11]-The Buyer postal address shall contain a Buyer country code (BT-55). + + + + + + + + + + FX-SCH-A-000158 + + + + + [BR-62]-The Seller electronic address (BT-34) shall have a Scheme identifier. + + + + + + + + + + FX-SCH-A-000159 + + + + + [BR-63]-The Buyer electronic address (BT-49) shall have a Scheme identifier. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000160 + + + + + Element 'ram:Content' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000161 + + + + + Element 'ram:SubjectCode' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000162 + + + + + Value of 'ram:SubjectCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000024 + + + + + Element 'ram:BusinessProcessSpecifiedDocumentContextParameter' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000025 + + + + + Element 'ram:GuidelineSpecifiedDocumentContextParameter' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000026 + + + + + Value of 'ram:ID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000027 + + + + + Element 'ram:SellerTradeParty' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000028 + + + + + Element 'ram:BuyerTradeParty' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000164 + + + + + Element 'ram:GlobalID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000032 + + + + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TradingBusinessName' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000032 + + + + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000169 + + + + + Element 'ram:SpecifiedTaxRegistration' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:GlobalID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000032 + + + + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000033 + + + + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="VA"]' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000034 + + + + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="FC"]' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:SpecifiedTaxRegistration[ not(ram:ID/@schemeID="VA") and not(ram:ID/@schemeID="FC")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000170 + + + + + [BR-57]-Each Deliver to address (BG-15) shall contain a Deliver to country code (BT-80). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000171 + + + + + Element 'ram:OccurrenceDateTime' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000164 + + + + + Element 'ram:GlobalID' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000172 + + + + + Element 'ram:PaymentReference' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000038 + + + + + Element 'ram:InvoiceCurrencyCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000173 + + + + + Element 'ram:ApplicableTradeTax' must occur at least 1 times. + + + + + + + + + + FX-SCH-A-000174 + + + + + Element 'ram:SpecifiedTradePaymentTerms' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000039 + + + + + Element 'ram:SpecifiedTradeSettlementHeaderMonetarySummation' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000175 + + + + + Element 'ram:ReceivableSpecifiedTradeAccountingAccount' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000176 + + + + + Element 'ram:CalculatedAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000177 + + + + + Element 'ram:BasisAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000180 + + + + + Value of 'ram:DueDateTypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000181 + + + + + Value of 'ram:ExemptionReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000040 + + + + + Value of 'ram:InvoiceCurrencyCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000182 + + + + + [BR-55]-Each Preceding Invoice reference (BG-3) shall contain a Preceding Invoice reference (BT-25). + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000164 + + + + + Element 'ram:GlobalID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:PostalTradeAddress' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TradingBusinessName' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:SpecifiedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000185 + + + + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000185 + + + + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000187 + + + + + Element 'ram:Description' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000188 + + + + + Element 'ram:DirectDebitMandateID' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000189 + + + + + Element 'ram:LineTotalAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000190 + + + + + Element 'ram:ChargeTotalAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000191 + + + + + Element 'ram:AllowanceTotalAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000041 + + + + + Element 'ram:TaxBasisTotalAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000042 + + + + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:InvoiceCurrencyCode]' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000192 + + + + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:TaxCurrencyCode]' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000043 + + + + + Element 'ram:GrandTotalAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000193 + + + + + Element 'ram:TotalPrepaidAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000044 + + + + + Element 'ram:DuePayableAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:TaxTotalAmount[ not(@currencyID=../../ram:InvoiceCurrencyCode) and not(@currencyID=../../ram:TaxCurrencyCode)]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000045 + + + + + Value of '@currencyID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000046 + + + + + Attribute '@currencyID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000045 + + + + + Value of '@currencyID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000046 + + + + + Attribute '@currencyID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000194 + + + + + Element 'ram:PayeePartyCreditorFinancialAccount' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000195 + + + + + Element 'ram:IBANID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000196 + + + + + Value of 'ram:TaxCurrencyCode' is not allowed. + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC-WL_codedb.xml b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC-WL_codedb.xml new file mode 100644 index 000000000..b5fef2d7d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC-WL_codedb.xml @@ -0,0 +1,2215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC.xslt b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC.xslt new file mode 100644 index 000000000..e7f52bfa4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC.xslt @@ -0,0 +1,12161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + *: + + [namespace-uri()=' + + '] + + + + [ + + ] + + + + / + + @ + + + @*[local-name()=' + + ' and namespace-uri()=' + + '] + + + + + + + + + / + + + [ + + ] + + + + /@ + + + + + + + + / + + + [ + + ] + + + + /@ + + + + + + + + + + + + + + + + + + + + + + + + . + + + + +U + + U + + + + U. + + n + + + + U. + + _ + + _ + + + + + + + + +   +   +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Schema for Factur-X; 1.07.2; EN16931-COMPLIANT-BASIC + + + + + + + + + + + + + + FX-SCH-A-000047 + + + + + [BR-45]-Each VAT breakdown (BG-23) shall have a VAT category taxable amount (BT-116). + + + + + + + + + + FX-SCH-A-000048 + + + + + [BR-46]-Each VAT breakdown (BG-23) shall have a VAT category tax amount (BT-117). + + + + + + + + + + FX-SCH-A-000049 + + + + + [BR-47]-Each VAT breakdown (BG-23) shall be defined through a VAT category code (BT-118). + + + + + + + + + + FX-SCH-A-000050 + + + + + [BR-48]-Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT. + + + + + + + + + + FX-SCH-A-000051 + + + + + [BR-CO-03]-Value added tax point date (BT-7) and Value added tax point date code (BT-8) are mutually exclusive. + + + + + + + + + + FX-SCH-A-000052 + + + + + [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. + + + + + + + + + + FX-SCH-A-000053 + + + + + [BR-DEC-19]-The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2. + + + + + + + + + + FX-SCH-A-000054 + + + + + [BR-DEC-20]-The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000197 + + + + + [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". + + + + + + + + + + FX-SCH-A-000055 + + + + + [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). + + + + + + + + + + FX-SCH-A-000056 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000057 + + + + + [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). + + + + + + + + + + FX-SCH-A-000058 + + + + + [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). + + + + + + + + + + FX-SCH-A-000198 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000059 + + + + + [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). + + + + + + + + + + FX-SCH-A-000060 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000061 + + + + + [BR-31]-Each Document level allowance (BG-20) shall have a Document level allowance amount (BT-92). + + + + + + + + + + FX-SCH-A-000062 + + + + + [BR-32]-Each Document level allowance (BG-20) shall have a Document level allowance VAT category code (BT-95). + + + + + + + + + + FX-SCH-A-000063 + + + + + [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). + + + + + + + + + + FX-SCH-A-000064 + + + + + [BR-CO-05]-Document level allowance reason code (BT-98) and Document level allowance reason (BT-97) shall indicate the same type of allowance. + + + + + + + + + + FX-SCH-A-000065 + + + + + [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. + + + + + + + + + + FX-SCH-A-000066 + + + + + [BR-DEC-01]-The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2. + + + + + + + + + + FX-SCH-A-000067 + + + + + [BR-DEC-02]-The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000068 + + + + + [BR-36]-Each Document level charge (BG-21) shall have a Document level charge amount (BT-99). + + + + + + + + + + FX-SCH-A-000069 + + + + + [BR-37]-Each Document level charge (BG-21) shall have a Document level charge VAT category code (BT-102). + + + + + + + + + + FX-SCH-A-000070 + + + + + [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). + + + + + + + + + + FX-SCH-A-000071 + + + + + [BR-CO-06]-Document level charge reason code (BT-105) and Document level charge reason (BT-104) shall indicate the same type of charge. + + + + + + + + + + FX-SCH-A-000072 + + + + + [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. + + + + + + + + + + FX-SCH-A-000073 + + + + + [BR-DEC-05]-The allowed maximum number of decimals for the Document level charge amount (BT-99) is 2. + + + + + + + + + + FX-SCH-A-000074 + + + + + [BR-DEC-06]-The allowed maximum number of decimals for the Document level charge base amount (BT-100) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000199 + + + + + [BR-54]-Each Item attribute (BG-32) shall contain an Item attribute name (BT-160) and an Item attribute value (BT-161). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000200 + + + + + [BR-21]-Each Invoice line (BG-25) shall have an Invoice line identifier (BT-126). + + + + + + + + + + FX-SCH-A-000201 + + + + + [BR-22]-Each Invoice line (BG-25) shall have an Invoiced quantity (BT-129). + + + + + + + + + + FX-SCH-A-000202 + + + + + [BR-23]-An Invoice line (BG-25) shall have an Invoiced quantity unit of measure code (BT-130). + + + + + + + + + + FX-SCH-A-000203 + + + + + [BR-24]-Each Invoice line (BG-25) shall have an Invoice line net amount (BT-131). + + + + + + + + + + FX-SCH-A-000204 + + + + + [BR-25]-Each Invoice line (BG-25) shall contain the Item name (BT-153). + + + + + + + + + + FX-SCH-A-000205 + + + + + [BR-26]-Each Invoice line (BG-25) shall contain the Item net price (BT-146). + + + + + + + + + + FX-SCH-A-000206 + + + + + [BR-27]-The Item net price (BT-146) shall NOT be negative. + + + + + + + + + + FX-SCH-A-000207 + + + + + [BR-28]-The Item gross price (BT-148) shall NOT be negative. + + + + + + + + + + FX-SCH-A-000208 + + + + + [BR-64]-The Item standard identifier (BT-157) shall have a Scheme identifier. + + + + + + + + + + FX-SCH-A-000209 + + + + + [BR-65]-The Item classification identifier (BT-158) shall have a Scheme identifier. + + + + + + + + + + FX-SCH-A-000210 + + + + + [BR-CO-04]-Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151). + + + + + + + + + + FX-SCH-A-000211 + + + + + [BR-DEC-23]-The allowed maximum number of decimals for the Invoice line net amount (BT-131) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000075 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000076 + + + + + [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). + + + + + + + + + + FX-SCH-A-000077 + + + + + [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). + + + + + + + + + + FX-SCH-A-000078 + + + + + [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). + + + + + + + + + + FX-SCH-A-000079 + + + + + [BR-56]-Each Seller tax representative party (BG-11) shall have a Seller tax representative VAT identifier (BT-63). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000001 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000212 + + + + + [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). + + + + + + + + + + FX-SCH-A-000213 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000214 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000215 + + + + + [BR-41]-Each Invoice line allowance (BG-27) shall have an Invoice line allowance amount (BT-136). + + + + + + + + + + FX-SCH-A-000216 + + + + + [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. + + + + + + + + + + FX-SCH-A-000217 + + + + + [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. + + + + + + + + + + FX-SCH-A-000218 + + + + + [BR-DEC-24]-The allowed maximum number of decimals for the Invoice line allowance amount (BT-136) is 2. + + + + + + + + + + FX-SCH-A-000219 + + + + + [BR-DEC-25]-The allowed maximum number of decimals for the Invoice line allowance base amount (BT-137) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000220 + + + + + [BR-43]-Each Invoice line charge (BG-28) shall have an Invoice line charge amount (BT-141). + + + + + + + + + + FX-SCH-A-000221 + + + + + [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). + + + + + + + + + + FX-SCH-A-000222 + + + + + [BR-CO-08]-Invoice line charge reason code (BT-145) and Invoice line charge reason (BT-144) shall indicate the same type of charge reason. + + + + + + + + + + FX-SCH-A-000223 + + + + + [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. + + + + + + + + + + FX-SCH-A-000224 + + + + + [BR-DEC-27]-The allowed maximum number of decimals for the Invoice line charge amount (BT-141) is 2. + + + + + + + + + + FX-SCH-A-000225 + + + + + [BR-DEC-28]-The allowed maximum number of decimals for the Invoice line charge base amount (BT-142) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000002 + + + + + [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’. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000080 + + + + + [BR-66]-Each Specified Trade Allowance Charge (BG-20)(BG-21) shall contain a Charge Indicator. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000081 + + + + + [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). + + + + + + + + + + FX-SCH-A-000082 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000083 + + + + + [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). + + + + + + + + + + FX-SCH-A-000084 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000085 + + + + + [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). + + + + + + + + + + FX-SCH-A-000086 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000087 + + + + + [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). + + + + + + + + + + FX-SCH-A-000088 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000089 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000090 + + + + + [BR-AF-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000091 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000092 + + + + + [BR-AG-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000093 + + + + + [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). + + + + + + + + + + FX-SCH-A-000094 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000095 + + + + + [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). + + + + + + + + + + FX-SCH-A-000096 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000097 + + + + + [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). + + + + + + + + + + FX-SCH-A-000098 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000099 + + + + + [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). + + + + + + + + + + FX-SCH-A-000100 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000101 + + + + + [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). + + + + + + + + + + FX-SCH-A-000102 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000103 + + + + + [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). + + + + + + + + + + FX-SCH-A-000104 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000105 + + + + + [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). + + + + + + + + + + FX-SCH-A-000106 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000107 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000108 + + + + + [BR-AF-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000109 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000110 + + + + + [BR-AG-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000111 + + + + + [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). + + + + + + + + + + FX-SCH-A-000112 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000113 + + + + + [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). + + + + + + + + + + FX-SCH-A-000114 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000115 + + + + + [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). + + + + + + + + + + FX-SCH-A-000116 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000226 + + + + + [BR-CO-10]-Sum of Invoice line net amount (BT-106) = Σ Invoice line net amount (BT-131). + + + + + + + + + + FX-SCH-A-000117 + + + + + [BR-12]-An Invoice shall have the Sum of Invoice line net amount (BT-106). + + + + + + + + + + FX-SCH-A-000003 + + + + + [BR-13]-An Invoice shall have the Invoice total amount without VAT (BT-109). + + + + + + + + + + FX-SCH-A-000004 + + + + + [BR-14]-An Invoice shall have the Invoice total amount with VAT (BT-112). + + + + + + + + + + FX-SCH-A-000005 + + + + + [BR-15]-An Invoice shall have the Amount due for payment (BT-115). + + + + + + + + + + FX-SCH-A-000118 + + + + + [BR-CO-11]-Sum of allowances on document level (BT-107) = Σ Document level allowance amount (BT-92). + + + + + + + + + + FX-SCH-A-000119 + + + + + [BR-CO-12]-Sum of charges on document level (BT-108) = Σ Document level charge amount (BT-99). + + + + + + + + + + FX-SCH-A-000120 + + + + + [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). + + + + + + + + + + FX-SCH-A-000121 + + + + + [BR-CO-15]-Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110). + + + + + + + + + + FX-SCH-A-000122 + + + + + [BR-CO-16]-Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114). + + + + + + + + + + FX-SCH-A-000123 + + + + + [BR-DEC-09]-The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2. + + + + + + + + + + FX-SCH-A-000124 + + + + + [BR-DEC-10]-The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2. + + + + + + + + + + FX-SCH-A-000125 + + + + + [BR-DEC-11]-The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2. + + + + + + + + + + FX-SCH-A-000006 + + + + + [BR-DEC-12]-The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2. + + + + + + + + + + FX-SCH-A-000007 + + + + + [BR-DEC-13]-The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2. + + + + + + + + + + FX-SCH-A-000008 + + + + + [BR-DEC-14]-The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2. + + + + + + + + + + FX-SCH-A-000126 + + + + + [BR-DEC-15]-The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2. + + + + + + + + + + FX-SCH-A-000127 + + + + + [BR-DEC-16]-The allowed maximum number of decimals for the Paid amount (BT-113) is 2. + + + + + + + + + + FX-SCH-A-000128 + + + + + [BR-DEC-17]-The allowed maximum number of decimals for the Rounding amount (BT-114) is 2. + + + + + + + + + + FX-SCH-A-000009 + + + + + [BR-DEC-18]-The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2. + + + + + + + + + + FX-SCH-A-000129 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000130 + + + + + [BR-CO-14]-Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000131 + + + + + [BR-49]-A Payment instruction (BG-16) shall specify the Payment means type code (BT-81). + + + + + + + + + + FX-SCH-A-000132 + + + + + [BR-CO-27]-Either the IBAN or a Proprietary ID (BT-84) shall be used. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000134 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000133 + + + + + [BR-50]-A Payment account identifier (BT-84) shall be present if Credit transfer (BG-16) information is provided in the Invoice. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000135 + + + + + [BR-CO-18]-An Invoice shall at least have one VAT breakdown group (BG-23). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000227 + + + + + [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". + + + + + + + + + + FX-SCH-A-000136 + + + + + [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). + + + + + + + + + + FX-SCH-A-000137 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000228 + + + + + [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". + + + + + + + + + + FX-SCH-A-000138 + + + + + [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). + + + + + + + + + + FX-SCH-A-000139 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000229 + + + + + [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". + + + + + + + + + + FX-SCH-A-000140 + + + + + [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). + + + + + + + + + + FX-SCH-A-000141 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000230 + + + + + [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". + + + + + + + + + + FX-SCH-A-000142 + + + + + [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). + + + + + + + + + + FX-SCH-A-000143 + + + + + [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). + + + + + + + + + + FX-SCH-A-000144 + + + + + [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. + + + + + + + + + + FX-SCH-A-000145 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000231 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000146 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000147 + + + + + [BR-AF-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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000232 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000148 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000149 + + + + + [BR-AG-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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000233 + + + + + [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". + + + + + + + + + + FX-SCH-A-000150 + + + + + [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). + + + + + + + + + + FX-SCH-A-000151 + + + + + [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). + + + + + + + + + + FX-SCH-A-000152 + + + + + [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). + + + + + + + + + + FX-SCH-A-000234 + + + + + [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". + + + + + + + + + + FX-SCH-A-000153 + + + + + [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". + + + + + + + + + + FX-SCH-A-000154 + + + + + [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". + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000235 + + + + + [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). + + + + + + + + + + FX-SCH-A-000236 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000237 + + + + + [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). + + + + + + + + + + FX-SCH-A-000238 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000239 + + + + + [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). + + + + + + + + + + FX-SCH-A-000240 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000241 + + + + + [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). + + + + + + + + + + FX-SCH-A-000242 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000243 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000244 + + + + + [BR-AF-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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000245 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000246 + + + + + [BR-AG-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000247 + + + + + [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-46). + + + + + + + + + + FX-SCH-A-000248 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000249 + + + + + [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). + + + + + + + + + + FX-SCH-A-000250 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000251 + + + + + [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). + + + + + + + + + + FX-SCH-A-000252 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000253 + + + + + [BR-16]-An Invoice shall have at least one Invoice line (BG-25). + + + + + + + + + + FX-SCH-A-000155 + + + + + [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. + + + + + + + + + + FX-SCH-A-000010 + + + + + [BR-01]-An Invoice shall have a Specification identifier (BT-24). + + + + + + + + + + FX-SCH-A-000011 + + + + + [BR-02]-An Invoice shall have an Invoice number (BT-1). + + + + + + + + + + FX-SCH-A-000012 + + + + + [BR-03]-An Invoice shall have an Invoice issue date (BT-2). + + + + + + + + + + FX-SCH-A-000013 + + + + + [BR-04]-An Invoice shall have an Invoice type code (BT-3). + + + + + + + + + + FX-SCH-A-000014 + + + + + [BR-05]-An Invoice shall have an Invoice currency code (BT-5). + + + + + + + + + + FX-SCH-A-000015 + + + + + [BR-06]-An Invoice shall contain the Seller name (BT-27). + + + + + + + + + + FX-SCH-A-000016 + + + + + [BR-07]-An Invoice shall contain the Buyer name (BT-44). + + + + + + + + + + FX-SCH-A-000017 + + + + + [BR-08]-An Invoice shall contain the Seller postal address (BG-5). + + + + + + + + + + FX-SCH-A-000018 + + + + + [BR-09]-The Seller postal address (BG-5) shall contain a Seller country code (BT-40). + + + + + + + + + + FX-SCH-A-000156 + + + + + [BR-10]-An Invoice shall contain the Buyer postal address (BG-8). + + + + + + + + + + FX-SCH-A-000157 + + + + + [BR-11]-The Buyer postal address shall contain a Buyer country code (BT-55). + + + + + + + + + + FX-SCH-A-000158 + + + + + [BR-62]-The Seller electronic address (BT-34) shall have a Scheme identifier. + + + + + + + + + + FX-SCH-A-000159 + + + + + [BR-63]-The Buyer electronic address (BT-49) shall have a Scheme identifier. + + + + + + + + + + FX-SCH-A-000254 + + + + + [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". + + + + + + + + + + FX-SCH-A-000255 + + + + + [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". + + + + + + + + + + FX-SCH-A-000256 + + + + + [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". + + + + + + + + + + FX-SCH-A-000257 + + + + + [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". + + + + + + + + + + FX-SCH-A-000258 + + + + + [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". + + + + + + + + + + FX-SCH-A-000259 + + + + + [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". + + + + + + + + + + FX-SCH-A-000260 + + + + + [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". + + + + + + + + + + FX-SCH-A-000261 + + + + + [BR-AF-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". + + + + + + + + + + FX-SCH-A-000262 + + + + + [BR-AG-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". + + + + + + + + + + FX-SCH-A-000263 + + + + + [BR-B-01]-An Invoice where the VAT category code (BT-151, BT-95 or BT-102) is “Split payment†shall be a domestic Italian invoice. + + + + + + + + + + FX-SCH-A-000264 + + + + + [BR-B-02]-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 “Split payment" shall not contain 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â€. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000160 + + + + + Element 'ram:Content' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000161 + + + + + Element 'ram:SubjectCode' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000162 + + + + + Value of 'ram:SubjectCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000024 + + + + + Element 'ram:BusinessProcessSpecifiedDocumentContextParameter' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000025 + + + + + Element 'ram:GuidelineSpecifiedDocumentContextParameter' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000026 + + + + + Value of 'ram:ID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000265 + + + + + Element 'ram:IncludedSupplyChainTradeLineItem' must occur at least 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000027 + + + + + Element 'ram:SellerTradeParty' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000028 + + + + + Element 'ram:BuyerTradeParty' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000164 + + + + + Element 'ram:GlobalID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000032 + + + + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TradingBusinessName' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000032 + + + + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000169 + + + + + Element 'ram:SpecifiedTaxRegistration' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:GlobalID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000032 + + + + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000033 + + + + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="VA"]' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000034 + + + + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="FC"]' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:SpecifiedTaxRegistration[ not(ram:ID/@schemeID="VA") and not(ram:ID/@schemeID="FC")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000170 + + + + + [BR-57]-Each Deliver to address (BG-15) shall contain a Deliver to country code (BT-80). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000171 + + + + + Element 'ram:OccurrenceDateTime' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000164 + + + + + Element 'ram:GlobalID' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000172 + + + + + Element 'ram:PaymentReference' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000038 + + + + + Element 'ram:InvoiceCurrencyCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000173 + + + + + Element 'ram:ApplicableTradeTax' must occur at least 1 times. + + + + + + + + + + FX-SCH-A-000174 + + + + + Element 'ram:SpecifiedTradePaymentTerms' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000039 + + + + + Element 'ram:SpecifiedTradeSettlementHeaderMonetarySummation' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000175 + + + + + Element 'ram:ReceivableSpecifiedTradeAccountingAccount' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000176 + + + + + Element 'ram:CalculatedAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000177 + + + + + Element 'ram:BasisAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000180 + + + + + Value of 'ram:DueDateTypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000181 + + + + + Value of 'ram:ExemptionReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000040 + + + + + Value of 'ram:InvoiceCurrencyCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000182 + + + + + [BR-55]-Each Preceding Invoice reference (BG-3) shall contain a Preceding Invoice reference (BT-25). + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000164 + + + + + Element 'ram:GlobalID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:PostalTradeAddress' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TradingBusinessName' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:SpecifiedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000185 + + + + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000185 + + + + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000187 + + + + + Element 'ram:Description' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000188 + + + + + Element 'ram:DirectDebitMandateID' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000189 + + + + + Element 'ram:LineTotalAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000190 + + + + + Element 'ram:ChargeTotalAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000191 + + + + + Element 'ram:AllowanceTotalAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000041 + + + + + Element 'ram:TaxBasisTotalAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000042 + + + + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:InvoiceCurrencyCode]' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000192 + + + + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:TaxCurrencyCode]' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000043 + + + + + Element 'ram:GrandTotalAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000193 + + + + + Element 'ram:TotalPrepaidAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000044 + + + + + Element 'ram:DuePayableAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:TaxTotalAmount[ not(@currencyID=../../ram:InvoiceCurrencyCode) and not(@currencyID=../../ram:TaxCurrencyCode)]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000045 + + + + + Value of '@currencyID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000046 + + + + + Attribute '@currencyID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000045 + + + + + Value of '@currencyID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000046 + + + + + Attribute '@currencyID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000194 + + + + + Element 'ram:PayeePartyCreditorFinancialAccount' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000195 + + + + + Element 'ram:IBANID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000196 + + + + + Value of 'ram:TaxCurrencyCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000266 + + + + + Element 'ram:AssociatedDocumentLineDocument' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000267 + + + + + Element 'ram:SpecifiedTradeProduct' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000268 + + + + + Element 'ram:SpecifiedLineTradeAgreement' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000269 + + + + + Element 'ram:SpecifiedLineTradeDelivery' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000270 + + + + + Element 'ram:LineID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000271 + + + + + Element 'ram:IncludedNote' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000160 + + + + + Element 'ram:Content' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SubjectCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000272 + + + + + Element 'ram:NetPriceProductTradePrice' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000273 + + + + + Element 'ram:ChargeAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000274 + + + + + Element variant 'ram:AppliedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator="false"]' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:AppliedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CalculationPercent' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Reason' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReasonCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000275 + + + + + Value of '@unitCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000273 + + + + + Element 'ram:ChargeAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AppliedTradeAllowanceCharge' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000275 + + + + + Value of '@unitCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000276 + + + + + Element 'ram:BilledQuantity' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000277 + + + + + Attribute '@unitCode' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000275 + + + + + Value of '@unitCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000278 + + + + + Element 'ram:ApplicableTradeTax' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000279 + + + + + Element 'ram:SpecifiedTradeSettlementLineMonetarySummation' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:SpecifiedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CalculationPercent' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CalculationPercent' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000189 + + + + + Element 'ram:LineTotalAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC_codedb.xml b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC_codedb.xml new file mode 100644 index 000000000..d8154cdcb --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_BASIC_codedb.xml @@ -0,0 +1,4815 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EN16931.xslt b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EN16931.xslt new file mode 100644 index 000000000..5709d20ee --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EN16931.xslt @@ -0,0 +1,16743 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + *: + + [namespace-uri()=' + + '] + + + + [ + + ] + + + + / + + @ + + + @*[local-name()=' + + ' and namespace-uri()=' + + '] + + + + + + + + + / + + + [ + + ] + + + + /@ + + + + + + + + / + + + [ + + ] + + + + /@ + + + + + + + + + + + + + + + + + + + + + + + + . + + + + +U + + U + + + + U. + + n + + + + U. + + _ + + _ + + + + + + + + +   +   +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Schema for Factur-X; 1.07.2; EN16931-COMPLIANT (FULLY) + + + + + + + + + + + + + + FX-SCH-A-000280 + + + + + [BR-52]-Each Additional supporting document (BG-24) shall contain a Supporting document reference (BT-122). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000047 + + + + + [BR-45]-Each VAT breakdown (BG-23) shall have a VAT category taxable amount (BT-116). + + + + + + + + + + FX-SCH-A-000048 + + + + + [BR-46]-Each VAT breakdown (BG-23) shall have a VAT category tax amount (BT-117). + + + + + + + + + + FX-SCH-A-000049 + + + + + [BR-47]-Each VAT breakdown (BG-23) shall be defined through a VAT category code (BT-118). + + + + + + + + + + FX-SCH-A-000050 + + + + + [BR-48]-Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT. + + + + + + + + + + FX-SCH-A-000051 + + + + + [BR-CO-03]-Value added tax point date (BT-7) and Value added tax point date code (BT-8) are mutually exclusive. + + + + + + + + + + FX-SCH-A-000052 + + + + + [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. + + + + + + + + + + FX-SCH-A-000053 + + + + + [BR-DEC-19]-The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2. + + + + + + + + + + FX-SCH-A-000054 + + + + + [BR-DEC-20]-The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000197 + + + + + [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". + + + + + + + + + + FX-SCH-A-000055 + + + + + [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). + + + + + + + + + + FX-SCH-A-000056 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000057 + + + + + [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). + + + + + + + + + + FX-SCH-A-000058 + + + + + [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). + + + + + + + + + + FX-SCH-A-000198 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000059 + + + + + [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). + + + + + + + + + + FX-SCH-A-000060 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000061 + + + + + [BR-31]-Each Document level allowance (BG-20) shall have a Document level allowance amount (BT-92). + + + + + + + + + + FX-SCH-A-000062 + + + + + [BR-32]-Each Document level allowance (BG-20) shall have a Document level allowance VAT category code (BT-95). + + + + + + + + + + FX-SCH-A-000063 + + + + + [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). + + + + + + + + + + FX-SCH-A-000064 + + + + + [BR-CO-05]-Document level allowance reason code (BT-98) and Document level allowance reason (BT-97) shall indicate the same type of allowance. + + + + + + + + + + FX-SCH-A-000065 + + + + + [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. + + + + + + + + + + FX-SCH-A-000066 + + + + + [BR-DEC-01]-The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2. + + + + + + + + + + FX-SCH-A-000067 + + + + + [BR-DEC-02]-The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000068 + + + + + [BR-36]-Each Document level charge (BG-21) shall have a Document level charge amount (BT-99). + + + + + + + + + + FX-SCH-A-000069 + + + + + [BR-37]-Each Document level charge (BG-21) shall have a Document level charge VAT category code (BT-102). + + + + + + + + + + FX-SCH-A-000070 + + + + + [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). + + + + + + + + + + FX-SCH-A-000071 + + + + + [BR-CO-06]-Document level charge reason code (BT-105) and Document level charge reason (BT-104) shall indicate the same type of charge. + + + + + + + + + + FX-SCH-A-000072 + + + + + [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. + + + + + + + + + + FX-SCH-A-000073 + + + + + [BR-DEC-05]-The allowed maximum number of decimals for the Document level charge amount (BT-99) is 2. + + + + + + + + + + FX-SCH-A-000074 + + + + + [BR-DEC-06]-The allowed maximum number of decimals for the Document level charge base amount (BT-100) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000199 + + + + + [BR-54]-Each Item attribute (BG-32) shall contain an Item attribute name (BT-160) and an Item attribute value (BT-161). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000281 + + + + + [BR-51]-In accordance with card payments security standards an invoice should never include a full card primary account number (BT-87). At the moment PCI Security Standards Council has defined that the first 6 digits and last 4 digits are the maximum number of digits to be shown. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000200 + + + + + [BR-21]-Each Invoice line (BG-25) shall have an Invoice line identifier (BT-126). + + + + + + + + + + FX-SCH-A-000201 + + + + + [BR-22]-Each Invoice line (BG-25) shall have an Invoiced quantity (BT-129). + + + + + + + + + + FX-SCH-A-000202 + + + + + [BR-23]-An Invoice line (BG-25) shall have an Invoiced quantity unit of measure code (BT-130). + + + + + + + + + + FX-SCH-A-000203 + + + + + [BR-24]-Each Invoice line (BG-25) shall have an Invoice line net amount (BT-131). + + + + + + + + + + FX-SCH-A-000204 + + + + + [BR-25]-Each Invoice line (BG-25) shall contain the Item name (BT-153). + + + + + + + + + + FX-SCH-A-000205 + + + + + [BR-26]-Each Invoice line (BG-25) shall contain the Item net price (BT-146). + + + + + + + + + + FX-SCH-A-000206 + + + + + [BR-27]-The Item net price (BT-146) shall NOT be negative. + + + + + + + + + + FX-SCH-A-000207 + + + + + [BR-28]-The Item gross price (BT-148) shall NOT be negative. + + + + + + + + + + FX-SCH-A-000208 + + + + + [BR-64]-The Item standard identifier (BT-157) shall have a Scheme identifier. + + + + + + + + + + FX-SCH-A-000209 + + + + + [BR-65]-The Item classification identifier (BT-158) shall have a Scheme identifier. + + + + + + + + + + FX-SCH-A-000210 + + + + + [BR-CO-04]-Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151). + + + + + + + + + + FX-SCH-A-000211 + + + + + [BR-DEC-23]-The allowed maximum number of decimals for the Invoice line net amount (BT-131) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000075 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000076 + + + + + [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). + + + + + + + + + + FX-SCH-A-000077 + + + + + [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). + + + + + + + + + + FX-SCH-A-000078 + + + + + [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). + + + + + + + + + + FX-SCH-A-000079 + + + + + [BR-56]-Each Seller tax representative party (BG-11) shall have a Seller tax representative VAT identifier (BT-63). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000001 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000212 + + + + + [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). + + + + + + + + + + FX-SCH-A-000213 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000214 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000215 + + + + + [BR-41]-Each Invoice line allowance (BG-27) shall have an Invoice line allowance amount (BT-136). + + + + + + + + + + FX-SCH-A-000216 + + + + + [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. + + + + + + + + + + FX-SCH-A-000217 + + + + + [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. + + + + + + + + + + FX-SCH-A-000218 + + + + + [BR-DEC-24]-The allowed maximum number of decimals for the Invoice line allowance amount (BT-136) is 2. + + + + + + + + + + FX-SCH-A-000219 + + + + + [BR-DEC-25]-The allowed maximum number of decimals for the Invoice line allowance base amount (BT-137) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000220 + + + + + [BR-43]-Each Invoice line charge (BG-28) shall have an Invoice line charge amount (BT-141). + + + + + + + + + + FX-SCH-A-000221 + + + + + [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). + + + + + + + + + + FX-SCH-A-000222 + + + + + [BR-CO-08]-Invoice line charge reason code (BT-145) and Invoice line charge reason (BT-144) shall indicate the same type of charge reason. + + + + + + + + + + FX-SCH-A-000223 + + + + + [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. + + + + + + + + + + FX-SCH-A-000224 + + + + + [BR-DEC-27]-The allowed maximum number of decimals for the Invoice line charge amount (BT-141) is 2. + + + + + + + + + + FX-SCH-A-000225 + + + + + [BR-DEC-28]-The allowed maximum number of decimals for the Invoice line charge base amount (BT-142) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000002 + + + + + [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’. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000080 + + + + + [BR-66]-Each Specified Trade Allowance Charge (BG-20)(BG-21) shall contain a Charge Indicator. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000081 + + + + + [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). + + + + + + + + + + FX-SCH-A-000082 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000083 + + + + + [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). + + + + + + + + + + FX-SCH-A-000084 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000085 + + + + + [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). + + + + + + + + + + FX-SCH-A-000086 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000087 + + + + + [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). + + + + + + + + + + FX-SCH-A-000088 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000089 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000090 + + + + + [BR-AF-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000091 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000092 + + + + + [BR-AG-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000093 + + + + + [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). + + + + + + + + + + FX-SCH-A-000094 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000095 + + + + + [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). + + + + + + + + + + FX-SCH-A-000096 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000097 + + + + + [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). + + + + + + + + + + FX-SCH-A-000098 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000099 + + + + + [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). + + + + + + + + + + FX-SCH-A-000100 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000101 + + + + + [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). + + + + + + + + + + FX-SCH-A-000102 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000103 + + + + + [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). + + + + + + + + + + FX-SCH-A-000104 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000105 + + + + + [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). + + + + + + + + + + FX-SCH-A-000106 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000107 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000108 + + + + + [BR-AF-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000109 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000110 + + + + + [BR-AG-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000111 + + + + + [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). + + + + + + + + + + FX-SCH-A-000112 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000113 + + + + + [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). + + + + + + + + + + FX-SCH-A-000114 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000115 + + + + + [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). + + + + + + + + + + FX-SCH-A-000116 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000226 + + + + + [BR-CO-10]-Sum of Invoice line net amount (BT-106) = Σ Invoice line net amount (BT-131). + + + + + + + + + + FX-SCH-A-000117 + + + + + [BR-12]-An Invoice shall have the Sum of Invoice line net amount (BT-106). + + + + + + + + + + FX-SCH-A-000003 + + + + + [BR-13]-An Invoice shall have the Invoice total amount without VAT (BT-109). + + + + + + + + + + FX-SCH-A-000004 + + + + + [BR-14]-An Invoice shall have the Invoice total amount with VAT (BT-112). + + + + + + + + + + FX-SCH-A-000005 + + + + + [BR-15]-An Invoice shall have the Amount due for payment (BT-115). + + + + + + + + + + FX-SCH-A-000118 + + + + + [BR-CO-11]-Sum of allowances on document level (BT-107) = Σ Document level allowance amount (BT-92). + + + + + + + + + + FX-SCH-A-000119 + + + + + [BR-CO-12]-Sum of charges on document level (BT-108) = Σ Document level charge amount (BT-99). + + + + + + + + + + FX-SCH-A-000120 + + + + + [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). + + + + + + + + + + FX-SCH-A-000121 + + + + + [BR-CO-15]-Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110). + + + + + + + + + + FX-SCH-A-000122 + + + + + [BR-CO-16]-Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114). + + + + + + + + + + FX-SCH-A-000123 + + + + + [BR-DEC-09]-The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2. + + + + + + + + + + FX-SCH-A-000124 + + + + + [BR-DEC-10]-The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2. + + + + + + + + + + FX-SCH-A-000125 + + + + + [BR-DEC-11]-The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2. + + + + + + + + + + FX-SCH-A-000006 + + + + + [BR-DEC-12]-The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2. + + + + + + + + + + FX-SCH-A-000007 + + + + + [BR-DEC-13]-The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2. + + + + + + + + + + FX-SCH-A-000008 + + + + + [BR-DEC-14]-The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2. + + + + + + + + + + FX-SCH-A-000126 + + + + + [BR-DEC-15]-The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2. + + + + + + + + + + FX-SCH-A-000127 + + + + + [BR-DEC-16]-The allowed maximum number of decimals for the Paid amount (BT-113) is 2. + + + + + + + + + + FX-SCH-A-000128 + + + + + [BR-DEC-17]-The allowed maximum number of decimals for the Rounding amount (BT-114) is 2. + + + + + + + + + + FX-SCH-A-000009 + + + + + [BR-DEC-18]-The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2. + + + + + + + + + + FX-SCH-A-000129 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000130 + + + + + [BR-CO-14]-Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000131 + + + + + [BR-49]-A Payment instruction (BG-16) shall specify the Payment means type code (BT-81). + + + + + + + + + + FX-SCH-A-000132 + + + + + [BR-CO-27]-Either the IBAN or a Proprietary ID (BT-84) shall be used. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000134 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000133 + + + + + [BR-50]-A Payment account identifier (BT-84) shall be present if Credit transfer (BG-16) information is provided in the Invoice. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000135 + + + + + [BR-CO-18]-An Invoice shall at least have one VAT breakdown group (BG-23). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000227 + + + + + [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". + + + + + + + + + + FX-SCH-A-000136 + + + + + [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). + + + + + + + + + + FX-SCH-A-000137 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000228 + + + + + [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". + + + + + + + + + + FX-SCH-A-000138 + + + + + [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). + + + + + + + + + + FX-SCH-A-000139 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000229 + + + + + [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". + + + + + + + + + + FX-SCH-A-000140 + + + + + [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). + + + + + + + + + + FX-SCH-A-000141 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000230 + + + + + [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". + + + + + + + + + + FX-SCH-A-000142 + + + + + [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). + + + + + + + + + + FX-SCH-A-000143 + + + + + [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). + + + + + + + + + + FX-SCH-A-000144 + + + + + [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. + + + + + + + + + + FX-SCH-A-000145 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000231 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000146 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000147 + + + + + [BR-AF-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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000232 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000148 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000149 + + + + + [BR-AG-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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000233 + + + + + [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". + + + + + + + + + + FX-SCH-A-000150 + + + + + [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). + + + + + + + + + + FX-SCH-A-000151 + + + + + [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). + + + + + + + + + + FX-SCH-A-000152 + + + + + [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). + + + + + + + + + + FX-SCH-A-000234 + + + + + [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". + + + + + + + + + + FX-SCH-A-000153 + + + + + [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". + + + + + + + + + + FX-SCH-A-000154 + + + + + [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". + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000235 + + + + + [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). + + + + + + + + + + FX-SCH-A-000236 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000237 + + + + + [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). + + + + + + + + + + FX-SCH-A-000238 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000239 + + + + + [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). + + + + + + + + + + FX-SCH-A-000240 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000241 + + + + + [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). + + + + + + + + + + FX-SCH-A-000242 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000243 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000244 + + + + + [BR-AF-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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000245 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000246 + + + + + [BR-AG-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000247 + + + + + [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-46). + + + + + + + + + + FX-SCH-A-000248 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000249 + + + + + [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). + + + + + + + + + + FX-SCH-A-000250 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000251 + + + + + [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). + + + + + + + + + + FX-SCH-A-000252 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000253 + + + + + [BR-16]-An Invoice shall have at least one Invoice line (BG-25). + + + + + + + + + + FX-SCH-A-000155 + + + + + [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. + + + + + + + + + + FX-SCH-A-000010 + + + + + [BR-01]-An Invoice shall have a Specification identifier (BT-24). + + + + + + + + + + FX-SCH-A-000011 + + + + + [BR-02]-An Invoice shall have an Invoice number (BT-1). + + + + + + + + + + FX-SCH-A-000012 + + + + + [BR-03]-An Invoice shall have an Invoice issue date (BT-2). + + + + + + + + + + FX-SCH-A-000013 + + + + + [BR-04]-An Invoice shall have an Invoice type code (BT-3). + + + + + + + + + + FX-SCH-A-000014 + + + + + [BR-05]-An Invoice shall have an Invoice currency code (BT-5). + + + + + + + + + + FX-SCH-A-000015 + + + + + [BR-06]-An Invoice shall contain the Seller name (BT-27). + + + + + + + + + + FX-SCH-A-000016 + + + + + [BR-07]-An Invoice shall contain the Buyer name (BT-44). + + + + + + + + + + FX-SCH-A-000017 + + + + + [BR-08]-An Invoice shall contain the Seller postal address (BG-5). + + + + + + + + + + FX-SCH-A-000018 + + + + + [BR-09]-The Seller postal address (BG-5) shall contain a Seller country code (BT-40). + + + + + + + + + + FX-SCH-A-000156 + + + + + [BR-10]-An Invoice shall contain the Buyer postal address (BG-8). + + + + + + + + + + FX-SCH-A-000157 + + + + + [BR-11]-The Buyer postal address shall contain a Buyer country code (BT-55). + + + + + + + + + + FX-SCH-A-000158 + + + + + [BR-62]-The Seller electronic address (BT-34) shall have a Scheme identifier. + + + + + + + + + + FX-SCH-A-000159 + + + + + [BR-63]-The Buyer electronic address (BT-49) shall have a Scheme identifier. + + + + + + + + + + FX-SCH-A-000254 + + + + + [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". + + + + + + + + + + FX-SCH-A-000255 + + + + + [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". + + + + + + + + + + FX-SCH-A-000256 + + + + + [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". + + + + + + + + + + FX-SCH-A-000257 + + + + + [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". + + + + + + + + + + FX-SCH-A-000258 + + + + + [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". + + + + + + + + + + FX-SCH-A-000259 + + + + + [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". + + + + + + + + + + FX-SCH-A-000260 + + + + + [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". + + + + + + + + + + FX-SCH-A-000261 + + + + + [BR-AF-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". + + + + + + + + + + FX-SCH-A-000262 + + + + + [BR-AG-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". + + + + + + + + + + FX-SCH-A-000263 + + + + + [BR-B-01]-An Invoice where the VAT category code (BT-151, BT-95 or BT-102) is “Split payment†shall be a domestic Italian invoice. + + + + + + + + + + FX-SCH-A-000264 + + + + + [BR-B-02]-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 “Split payment" shall not contain 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â€. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000160 + + + + + Element 'ram:Content' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000161 + + + + + Element 'ram:SubjectCode' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000162 + + + + + Value of 'ram:SubjectCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000024 + + + + + Element 'ram:BusinessProcessSpecifiedDocumentContextParameter' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000025 + + + + + Element 'ram:GuidelineSpecifiedDocumentContextParameter' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000026 + + + + + Value of 'ram:ID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000265 + + + + + Element 'ram:IncludedSupplyChainTradeLineItem' must occur at least 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000027 + + + + + Element 'ram:SellerTradeParty' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000028 + + + + + Element 'ram:BuyerTradeParty' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:AdditionalReferencedDocument[ not(ram:TypeCode="916") and not(ram:TypeCode="50") and not(ram:TypeCode="130")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000282 + + + + + Value of 'ram:ReferenceTypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000283 + + + + + Element 'ram:Name' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000284 + + + + + Element 'ram:AttachmentBinaryObject' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000285 + + + + + Attribute '@mimeCode' is required in this context. + + + + + + + + + + FX-SCH-A-000286 + + + + + Attribute '@filename' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000287 + + + + + Value of '@mimeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000164 + + + + + Element 'ram:GlobalID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000288 + + + + + Element 'ram:DefinedTradeContact' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000032 + + + + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000032 + + + + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000169 + + + + + Element 'ram:SpecifiedTaxRegistration' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DefinedTradeContact' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:GlobalID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000187 + + + + + Element 'ram:Description' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000288 + + + + + Element 'ram:DefinedTradeContact' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000032 + + + + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000033 + + + + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="VA"]' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000034 + + + + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="FC"]' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:SpecifiedTaxRegistration[ not(ram:ID/@schemeID="VA") and not(ram:ID/@schemeID="FC")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000170 + + + + + [BR-57]-Each Deliver to address (BG-15) shall contain a Deliver to country code (BT-80). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000171 + + + + + Element 'ram:OccurrenceDateTime' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000164 + + + + + Element 'ram:GlobalID' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DefinedTradeContact' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000172 + + + + + Element 'ram:PaymentReference' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000038 + + + + + Element 'ram:InvoiceCurrencyCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000173 + + + + + Element 'ram:ApplicableTradeTax' must occur at least 1 times. + + + + + + + + + + FX-SCH-A-000174 + + + + + Element 'ram:SpecifiedTradePaymentTerms' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000039 + + + + + Element 'ram:SpecifiedTradeSettlementHeaderMonetarySummation' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000175 + + + + + Element 'ram:ReceivableSpecifiedTradeAccountingAccount' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000176 + + + + + Element 'ram:CalculatedAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000177 + + + + + Element 'ram:BasisAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000180 + + + + + Value of 'ram:DueDateTypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000181 + + + + + Value of 'ram:ExemptionReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000040 + + + + + Value of 'ram:InvoiceCurrencyCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000182 + + + + + [BR-55]-Each Preceding Invoice reference (BG-3) shall contain a Preceding Invoice reference (BT-25). + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000164 + + + + + Element 'ram:GlobalID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DefinedTradeContact' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:PostalTradeAddress' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TradingBusinessName' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIUniversalCommunication' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:SpecifiedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000185 + + + + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000185 + + + + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000187 + + + + + Element 'ram:Description' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000188 + + + + + Element 'ram:DirectDebitMandateID' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000189 + + + + + Element 'ram:LineTotalAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000190 + + + + + Element 'ram:ChargeTotalAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000191 + + + + + Element 'ram:AllowanceTotalAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000041 + + + + + Element 'ram:TaxBasisTotalAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000042 + + + + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:InvoiceCurrencyCode]' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000192 + + + + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:TaxCurrencyCode]' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000290 + + + + + Element 'ram:RoundingAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000043 + + + + + Element 'ram:GrandTotalAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000193 + + + + + Element 'ram:TotalPrepaidAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000044 + + + + + Element 'ram:DuePayableAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:TaxTotalAmount[ not(@currencyID=../../ram:InvoiceCurrencyCode) and not(@currencyID=../../ram:TaxCurrencyCode)]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000045 + + + + + Value of '@currencyID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000046 + + + + + Attribute '@currencyID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000045 + + + + + Value of '@currencyID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000046 + + + + + Attribute '@currencyID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000291 + + + + + Element 'ram:Information' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000194 + + + + + Element 'ram:PayeePartyCreditorFinancialAccount' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000292 + + + + + Element 'ram:BICID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000195 + + + + + Element 'ram:IBANID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000196 + + + + + Value of 'ram:TaxCurrencyCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000266 + + + + + Element 'ram:AssociatedDocumentLineDocument' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000267 + + + + + Element 'ram:SpecifiedTradeProduct' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000268 + + + + + Element 'ram:SpecifiedLineTradeAgreement' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000269 + + + + + Element 'ram:SpecifiedLineTradeDelivery' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000270 + + + + + Element 'ram:LineID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000271 + + + + + Element 'ram:IncludedNote' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000160 + + + + + Element 'ram:Content' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SubjectCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000272 + + + + + Element 'ram:NetPriceProductTradePrice' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:IssuerAssignedID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000273 + + + + + Element 'ram:ChargeAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000274 + + + + + Element variant 'ram:AppliedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator="false"]' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:AppliedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CalculationPercent' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Reason' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReasonCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000275 + + + + + Value of '@unitCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000273 + + + + + Element 'ram:ChargeAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AppliedTradeAllowanceCharge' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000275 + + + + + Value of '@unitCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000276 + + + + + Element 'ram:BilledQuantity' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000277 + + + + + Attribute '@unitCode' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000275 + + + + + Value of '@unitCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000278 + + + + + Element 'ram:ApplicableTradeTax' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000279 + + + + + Element 'ram:SpecifiedTradeSettlementLineMonetarySummation' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000293 + + + + + Element 'ram:AdditionalReferencedDocument' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000175 + + + + + Element 'ram:ReceivableSpecifiedTradeAccountingAccount' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000282 + + + + + Value of 'ram:ReferenceTypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:SpecifiedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000189 + + + + + Element 'ram:LineTotalAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000187 + + + + + Element 'ram:Description' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000294 + + + + + Element 'ram:Description' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000295 + + + + + Element 'ram:Value' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000296 + + + + + Attribute '@listID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000297 + + + + + Value of '@listID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000026 + + + + + Value of 'ram:ID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EN16931_codedb.xml b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EN16931_codedb.xml new file mode 100644 index 000000000..ae1b08a2f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EN16931_codedb.xml @@ -0,0 +1,5844 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EXTENDED.xslt b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EXTENDED.xslt new file mode 100644 index 000000000..c3b9ce37f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EXTENDED.xslt @@ -0,0 +1,39738 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + *: + + [namespace-uri()=' + + '] + + + + [ + + ] + + + + / + + @ + + + @*[local-name()=' + + ' and namespace-uri()=' + + '] + + + + + + + + + / + + + [ + + ] + + + + /@ + + + + + + + + / + + + [ + + ] + + + + /@ + + + + + + + + + + + + + + + + + + + + + + + + . + + + + +U + + U + + + + U. + + n + + + + U. + + _ + + _ + + + + + + + + +   +   +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Schema for Factur-X; 1.07.2; EN16931-CONFORMANT-EXTENDED + + + + + + + + + + + + + + FX-SCH-A-000280 + + + + + [BR-52]-Each Additional supporting document (BG-24) shall contain a Supporting document reference (BT-122). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000047 + + + + + [BR-45]-Each VAT breakdown (BG-23) shall have a VAT category taxable amount (BT-116). + + + + + + + + + + FX-SCH-A-000048 + + + + + [BR-46]-Each VAT breakdown (BG-23) shall have a VAT category tax amount (BT-117). + + + + + + + + + + FX-SCH-A-000049 + + + + + [BR-47]-Each VAT breakdown (BG-23) shall be defined through a VAT category code (BT-118). + + + + + + + + + + FX-SCH-A-000050 + + + + + [BR-48]-Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT. + + + + + + + + + + FX-SCH-A-000051 + + + + + [BR-CO-03]-Value added tax point date (BT-7) and Value added tax point date code (BT-8) are mutually exclusive. + + + + + + + + + + FX-SCH-A-000053 + + + + + [BR-DEC-19]-The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2. + + + + + + + + + + FX-SCH-A-000054 + + + + + [BR-DEC-20]-The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000298 + + + + + [BR-FXEXT-Z-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “Z†("Zero Rated"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charge amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is "Zero Rated" (Z). + + + + + + + + + + FX-SCH-A-000055 + + + + + [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). + + + + + + + + + + FX-SCH-A-000056 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000058 + + + + + [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). + + + + + + + + + + FX-SCH-A-000299 + + + + + [BR-FXEXT-S-08]-For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is equal to “S†("Standard rated"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charges amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is "Standard rated" (S) and the VAT rate (BT-152, BT-96, BT-103, BT-X-274) equals the VAT category rate (BT-119). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000300 + + + + + [BR-FXEXT-S-09]-For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is equal to “S†("Standard rated"), Absolute Value of (VAT category tax amount (BT-117) - VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119)/100) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is " Standard rated " (S), and the VAT rate (BT-152, BT-96, BT-103, BT-X-274) equals the VAT category rate (BT-119). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000059 + + + + + [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). + + + + + + + + + + FX-SCH-A-000060 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000061 + + + + + [BR-31]-Each Document level allowance (BG-20) shall have a Document level allowance amount (BT-92). + + + + + + + + + + FX-SCH-A-000062 + + + + + [BR-32]-Each Document level allowance (BG-20) shall have a Document level allowance VAT category code (BT-95). + + + + + + + + + + FX-SCH-A-000063 + + + + + [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). + + + + + + + + + + FX-SCH-A-000064 + + + + + [BR-CO-05]-Document level allowance reason code (BT-98) and Document level allowance reason (BT-97) shall indicate the same type of allowance. + + + + + + + + + + FX-SCH-A-000065 + + + + + [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. + + + + + + + + + + FX-SCH-A-000066 + + + + + [BR-DEC-01]-The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2. + + + + + + + + + + FX-SCH-A-000067 + + + + + [BR-DEC-02]-The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000068 + + + + + [BR-36]-Each Document level charge (BG-21) shall have a Document level charge amount (BT-99). + + + + + + + + + + FX-SCH-A-000069 + + + + + [BR-37]-Each Document level charge (BG-21) shall have a Document level charge VAT category code (BT-102). + + + + + + + + + + FX-SCH-A-000070 + + + + + [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). + + + + + + + + + + FX-SCH-A-000071 + + + + + [BR-CO-06]-Document level charge reason code (BT-105) and Document level charge reason (BT-104) shall indicate the same type of charge. + + + + + + + + + + FX-SCH-A-000072 + + + + + [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. + + + + + + + + + + FX-SCH-A-000073 + + + + + [BR-DEC-05]-The allowed maximum number of decimals for the Document level charge amount (BT-99) is 2. + + + + + + + + + + FX-SCH-A-000074 + + + + + [BR-DEC-06]-The allowed maximum number of decimals for the Document level charge base amount (BT-100) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000199 + + + + + [BR-54]-Each Item attribute (BG-32) shall contain an Item attribute name (BT-160) and an Item attribute value (BT-161). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000345 + warning + + + + + [BR-FXEXT-04]-To ensure automated processing of the article attributes without bilateral reconciliation, only values from the code list UNTDED 6313+Factur-X-Extension should be used. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000281 + + + + + [BR-51]-In accordance with card payments security standards an invoice should never include a full card primary account number (BT-87). At the moment PCI Security Standards Council has defined that the first 6 digits and last 4 digits are the maximum number of digits to be shown. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000301 + + + + + [BR-FXEXT-02]-If the invoice line item free text subject code (BT-X-10) is specified, either the coded invoice line item free text (BT-X-9) or the invoice line item free text (BT-127) must be specified, or both. If both BT-X-9 and BT-127 are specified, both must have the same meaning. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000200 + + + + + [BR-21]-Each Invoice line (BG-25) shall have an Invoice line identifier (BT-126). + + + + + + + + + + FX-SCH-A-000201 + + + + + [BR-22]-Each Invoice line (BG-25) shall have an Invoiced quantity (BT-129). + + + + + + + + + + FX-SCH-A-000202 + + + + + [BR-23]-An Invoice line (BG-25) shall have an Invoiced quantity unit of measure code (BT-130). + + + + + + + + + + FX-SCH-A-000203 + + + + + [BR-24]-Each Invoice line (BG-25) shall have an Invoice line net amount (BT-131). + + + + + + + + + + FX-SCH-A-000204 + + + + + [BR-25]-Each Invoice line (BG-25) shall contain the Item name (BT-153). + + + + + + + + + + FX-SCH-A-000205 + + + + + [BR-26]-Each Invoice line (BG-25) shall contain the Item net price (BT-146). + + + + + + + + + + FX-SCH-A-000206 + + + + + [BR-27]-The Item net price (BT-146) shall NOT be negative. + + + + + + + + + + FX-SCH-A-000207 + + + + + [BR-28]-The Item gross price (BT-148) shall NOT be negative. + + + + + + + + + + FX-SCH-A-000208 + + + + + [BR-64]-The Item standard identifier (BT-157) shall have a Scheme identifier. + + + + + + + + + + FX-SCH-A-000209 + + + + + [BR-65]-The Item classification identifier (BT-158) shall have a Scheme identifier. + + + + + + + + + + FX-SCH-A-000210 + + + + + [BR-CO-04]-Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151). + + + + + + + + + + FX-SCH-A-000211 + + + + + [BR-DEC-23]-The allowed maximum number of decimals for the Invoice line net amount (BT-131) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000075 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000076 + + + + + [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). + + + + + + + + + + FX-SCH-A-000077 + + + + + [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). + + + + + + + + + + FX-SCH-A-000078 + + + + + [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). + + + + + + + + + + FX-SCH-A-000079 + + + + + [BR-56]-Each Seller tax representative party (BG-11) shall have a Seller tax representative VAT identifier (BT-63). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000001 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000212 + + + + + [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). + + + + + + + + + + FX-SCH-A-000213 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000214 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000215 + + + + + [BR-41]-Each Invoice line allowance (BG-27) shall have an Invoice line allowance amount (BT-136). + + + + + + + + + + FX-SCH-A-000216 + + + + + [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. + + + + + + + + + + FX-SCH-A-000217 + + + + + [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. + + + + + + + + + + FX-SCH-A-000218 + + + + + [BR-DEC-24]-The allowed maximum number of decimals for the Invoice line allowance amount (BT-136) is 2. + + + + + + + + + + FX-SCH-A-000219 + + + + + [BR-DEC-25]-The allowed maximum number of decimals for the Invoice line allowance base amount (BT-137) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000220 + + + + + [BR-43]-Each Invoice line charge (BG-28) shall have an Invoice line charge amount (BT-141). + + + + + + + + + + FX-SCH-A-000221 + + + + + [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). + + + + + + + + + + FX-SCH-A-000222 + + + + + [BR-CO-08]-Invoice line charge reason code (BT-145) and Invoice line charge reason (BT-144) shall indicate the same type of charge reason. + + + + + + + + + + FX-SCH-A-000223 + + + + + [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. + + + + + + + + + + FX-SCH-A-000224 + + + + + [BR-DEC-27]-The allowed maximum number of decimals for the Invoice line charge amount (BT-141) is 2. + + + + + + + + + + FX-SCH-A-000225 + + + + + [BR-DEC-28]-The allowed maximum number of decimals for the Invoice line charge base amount (BT-142) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000002 + + + + + [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’. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000302 + + + + + [BR-FXEXT-03]-Only a VAT registration ID may be provided for the following business partners: the line level Ship-To (BT-X-66), the line level Ultimate-Ship-To (BT-X-84), the Sales-Agent (BT-X-340), the Buyer-Tax-Representative (BT-X-367), the Product-Enduser (BT-X-144), the Buyer-Agent (BT-X-411), the document level Ship-To (BT-X-161), the document level Ultimate-Ship-To (BT-X-180), the Ship-From (BT-X-199), the Invoicer (BT-X-223), the Invoicee (BT-X-242), the document level Payee (BT-X-257), the Payer (BT-X-481), or the payment-term-specific Payee (BT-X-509). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000080 + + + + + [BR-66]-Each Specified Trade Allowance Charge (BG-20)(BG-21) shall contain a Charge Indicator. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000081 + + + + + [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). + + + + + + + + + + FX-SCH-A-000082 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000083 + + + + + [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). + + + + + + + + + + FX-SCH-A-000084 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000085 + + + + + [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). + + + + + + + + + + FX-SCH-A-000086 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000087 + + + + + [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). + + + + + + + + + + FX-SCH-A-000088 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000089 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000090 + + + + + [BR-AF-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000091 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000092 + + + + + [BR-AG-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000094 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000095 + + + + + [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). + + + + + + + + + + FX-SCH-A-000096 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000097 + + + + + [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). + + + + + + + + + + FX-SCH-A-000098 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000099 + + + + + [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). + + + + + + + + + + FX-SCH-A-000100 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000101 + + + + + [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). + + + + + + + + + + FX-SCH-A-000102 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000103 + + + + + [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). + + + + + + + + + + FX-SCH-A-000104 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000105 + + + + + [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). + + + + + + + + + + FX-SCH-A-000106 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000107 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000108 + + + + + [BR-AF-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000109 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000110 + + + + + [BR-AG-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000112 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000113 + + + + + [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). + + + + + + + + + + FX-SCH-A-000114 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000115 + + + + + [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). + + + + + + + + + + FX-SCH-A-000116 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000303 + + + + + [BR-FXEXT-CO-10]-Absolute Value of (Sum of Invoice line net amount (BT-106) - Σ Invoice line net amounts (BT-131))<= 0,01 * Number of line net amounts (BT-131). + + + + + + + + + + FX-SCH-A-000117 + + + + + [BR-12]-An Invoice shall have the Sum of Invoice line net amount (BT-106). + + + + + + + + + + FX-SCH-A-000003 + + + + + [BR-13]-An Invoice shall have the Invoice total amount without VAT (BT-109). + + + + + + + + + + FX-SCH-A-000004 + + + + + [BR-14]-An Invoice shall have the Invoice total amount with VAT (BT-112). + + + + + + + + + + FX-SCH-A-000005 + + + + + [BR-15]-An Invoice shall have the Amount due for payment (BT-115). + + + + + + + + + + FX-SCH-A-000304 + + + + + [BR-FXEXT-CO-11]-Absolute Value of (Sum of allowances on document level (BT-107) - Σ Document level allowance amounts (BT-92))<= 0,01 * Number of Document level allowance amounts (BT-92). + + + + + + + + + + FX-SCH-A-000305 + + + + + [BR-FXEXT-CO-12]-Absolute Value of (Sum of charges on document level (BT-108) - Σ Document level charge amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272))<= 0,01 * (Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)). + + + + + + + + + + FX-SCH-A-000306 + + + + + [BR-FXEXT-CO-13]-Absolute Value of (Invoice total amount without VAT (BT-109) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charge amounts (BT-99)) <= 0,01 * (Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99)). + + + + + + + + + + FX-SCH-A-000307 + + + + + [BR-FXEXT-CO-15]-If Invoice Total VAT amount (BT-110) ,where currency (BT-110-0) is equal to BT-5, is present, then the Absolute Value of (Invoice total amount with VAT (BT-112) - Invoice total amount without VAT (BT-109) - Invoice total VAT amount (BT-110)) <= 0,01 * (Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charges amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272). Else, Invoice total amount with VAT (BT-112) is equal to Invoice total amount without VAT (BT-109). + + + + + + + + + + FX-SCH-A-000122 + + + + + [BR-CO-16]-Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114). + + + + + + + + + + FX-SCH-A-000123 + + + + + [BR-DEC-09]-The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2. + + + + + + + + + + FX-SCH-A-000124 + + + + + [BR-DEC-10]-The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2. + + + + + + + + + + FX-SCH-A-000125 + + + + + [BR-DEC-11]-The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2. + + + + + + + + + + FX-SCH-A-000006 + + + + + [BR-DEC-12]-The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2. + + + + + + + + + + FX-SCH-A-000007 + + + + + [BR-DEC-13]-The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2. + + + + + + + + + + FX-SCH-A-000008 + + + + + [BR-DEC-14]-The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2. + + + + + + + + + + FX-SCH-A-000126 + + + + + [BR-DEC-15]-The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2. + + + + + + + + + + FX-SCH-A-000127 + + + + + [BR-DEC-16]-The allowed maximum number of decimals for the Paid amount (BT-113) is 2. + + + + + + + + + + FX-SCH-A-000128 + + + + + [BR-DEC-17]-The allowed maximum number of decimals for the Rounding amount (BT-114) is 2. + + + + + + + + + + FX-SCH-A-000009 + + + + + [BR-DEC-18]-The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2. + + + + + + + + + + FX-SCH-A-000129 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000130 + + + + + [BR-CO-14]-Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000131 + + + + + [BR-49]-A Payment instruction (BG-16) shall specify the Payment means type code (BT-81). + + + + + + + + + + FX-SCH-A-000132 + + + + + [BR-CO-27]-Either the IBAN or a Proprietary ID (BT-84) shall be used. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000134 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000133 + + + + + [BR-50]-A Payment account identifier (BT-84) shall be present if Credit transfer (BG-16) information is provided in the Invoice. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000135 + + + + + [BR-CO-18]-An Invoice shall at least have one VAT breakdown group (BG-23). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000308 + + + + + [BR-FXEXT-AE-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “AE†("Reverse Charge"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charge amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is "Reversed Charge" (AE). + + + + + + + + + + FX-SCH-A-000136 + + + + + [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). + + + + + + + + + + FX-SCH-A-000137 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000309 + + + + + [BR-FXEXT-E-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “E†("Exempt from VAT"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charges amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is " Exempt from VAT" (E). + + + + + + + + + + FX-SCH-A-000138 + + + + + [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). + + + + + + + + + + FX-SCH-A-000139 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000310 + + + + + [BR-FXEXT-G-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “G†("Export outside the EU"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charges amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is " Export outside the EU " (G). + + + + + + + + + + FX-SCH-A-000140 + + + + + [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). + + + + + + + + + + FX-SCH-A-000141 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000311 + + + + + [BR-FXEXT-IC-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “K†("Intra-community supply"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charges amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is " Intra-community supply " (K) + + + + + + + + + + FX-SCH-A-000142 + + + + + [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). + + + + + + + + + + FX-SCH-A-000143 + + + + + [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). + + + + + + + + + + FX-SCH-A-000144 + + + + + [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. + + + + + + + + + + FX-SCH-A-000145 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000312 + + + + + [BR-FXEXT-AF-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “L†("Canary Islands tax"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charges amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is " Canary Islands tax " (L). + + + + + + + + + + FX-SCH-A-000146 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000147 + + + + + [BR-AF-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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000313 + + + + + [BR-FXEXT-AG-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “M†("Ceuta and Mellita tax"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charges amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is " Ceuta and Mellita tax " (M). + + + + + + + + + + FX-SCH-A-000148 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000149 + + + + + [BR-AG-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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000314 + + + + + [BR-FXEXT-O-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “O†("Not subject to VAT"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charges amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is " Not subject to VAT " (O). + + + + + + + + + + FX-SCH-A-000150 + + + + + [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). + + + + + + + + + + FX-SCH-A-000151 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000235 + + + + + [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). + + + + + + + + + + FX-SCH-A-000236 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000237 + + + + + [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). + + + + + + + + + + FX-SCH-A-000238 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000239 + + + + + [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). + + + + + + + + + + FX-SCH-A-000240 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000241 + + + + + [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). + + + + + + + + + + FX-SCH-A-000242 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000243 + + + + + [BR-AF-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). + + + + + + + + + + FX-SCH-A-000244 + + + + + [BR-AF-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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000245 + + + + + [BR-AG-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). + + + + + + + + + + FX-SCH-A-000246 + + + + + [BR-AG-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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000248 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000249 + + + + + [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). + + + + + + + + + + FX-SCH-A-000250 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000251 + + + + + [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). + + + + + + + + + + FX-SCH-A-000252 + + + + + [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). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000253 + + + + + [BR-16]-An Invoice shall have at least one Invoice line (BG-25). + + + + + + + + + + FX-SCH-A-000155 + + + + + [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. + + + + + + + + + + FX-SCH-A-000010 + + + + + [BR-01]-An Invoice shall have a Specification identifier (BT-24). + + + + + + + + + + FX-SCH-A-000011 + + + + + [BR-02]-An Invoice shall have an Invoice number (BT-1). + + + + + + + + + + FX-SCH-A-000012 + + + + + [BR-03]-An Invoice shall have an Invoice issue date (BT-2). + + + + + + + + + + FX-SCH-A-000013 + + + + + [BR-04]-An Invoice shall have an Invoice type code (BT-3). + + + + + + + + + + FX-SCH-A-000014 + + + + + [BR-05]-An Invoice shall have an Invoice currency code (BT-5). + + + + + + + + + + FX-SCH-A-000015 + + + + + [BR-06]-An Invoice shall contain the Seller name (BT-27). + + + + + + + + + + FX-SCH-A-000016 + + + + + [BR-07]-An Invoice shall contain the Buyer name (BT-44). + + + + + + + + + + FX-SCH-A-000017 + + + + + [BR-08]-An Invoice shall contain the Seller postal address (BG-5). + + + + + + + + + + FX-SCH-A-000018 + + + + + [BR-09]-The Seller postal address (BG-5) shall contain a Seller country code (BT-40). + + + + + + + + + + FX-SCH-A-000156 + + + + + [BR-10]-An Invoice shall contain the Buyer postal address (BG-8). + + + + + + + + + + FX-SCH-A-000157 + + + + + [BR-11]-The Buyer postal address shall contain a Buyer country code (BT-55). + + + + + + + + + + FX-SCH-A-000158 + + + + + [BR-62]-The Seller electronic address (BT-34) shall have a Scheme identifier. + + + + + + + + + + FX-SCH-A-000159 + + + + + [BR-63]-The Buyer electronic address (BT-49) shall have a Scheme identifier. + + + + + + + + + + FX-SCH-A-000254 + + + + + [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". + + + + + + + + + + FX-SCH-A-000255 + + + + + [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". + + + + + + + + + + FX-SCH-A-000256 + + + + + [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". + + + + + + + + + + FX-SCH-A-000257 + + + + + [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". + + + + + + + + + + FX-SCH-A-000258 + + + + + [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". + + + + + + + + + + FX-SCH-A-000259 + + + + + [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". + + + + + + + + + + FX-SCH-A-000260 + + + + + [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". + + + + + + + + + + FX-SCH-A-000261 + + + + + [BR-AF-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". + + + + + + + + + + FX-SCH-A-000262 + + + + + [BR-AG-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". + + + + + + + + + + FX-SCH-A-000263 + + + + + [BR-B-01]-An Invoice where the VAT category code (BT-151, BT-95 or BT-102) is “Split payment†shall be a domestic Italian invoice. + + + + + + + + + + FX-SCH-A-000264 + + + + + [BR-B-02]-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 “Split payment" shall not contain 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â€. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000283 + + + + + Element 'ram:Name' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000315 + + + + + Element 'ram:LanguageID' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000316 + + + + + Element 'ram:CompleteDateTime' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:EndDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:StartDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000317 + + + + + Element 'ram:Content' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000161 + + + + + Element 'ram:SubjectCode' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000162 + + + + + Value of 'ram:SubjectCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000318 + + + + + [BR-FXEXT-01]-If the Invoice Free Text subject Code (BT-21) is specified, either the coded message free text (BT-X-5) or the message free text (BT-22) must be specified, or both. If both BT-X-5 and BT-22 are specified, both must have the same meaning. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000024 + + + + + Element 'ram:BusinessProcessSpecifiedDocumentContextParameter' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000025 + + + + + Element 'ram:GuidelineSpecifiedDocumentContextParameter' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000026 + + + + + Value of 'ram:ID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000265 + + + + + Element 'ram:IncludedSupplyChainTradeLineItem' must occur at least 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000027 + + + + + Element 'ram:SellerTradeParty' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000028 + + + + + Element 'ram:BuyerTradeParty' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:AdditionalReferencedDocument[ not(ram:TypeCode="916") and not(ram:TypeCode="50") and not(ram:TypeCode="130")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000282 + + + + + Value of 'ram:ReferenceTypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000283 + + + + + Element 'ram:Name' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000284 + + + + + Element 'ram:AttachmentBinaryObject' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000285 + + + + + Attribute '@mimeCode' is required in this context. + + + + + + + + + + FX-SCH-A-000286 + + + + + Attribute '@filename' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000287 + + + + + Value of '@mimeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000319 + + + + + Element 'ram:DeliveryTypeCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000320 + + + + + Value of 'ram:DeliveryTypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000169 + + + + + Element 'ram:SpecifiedTaxRegistration' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000187 + + + + + Element 'ram:Description' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000032 + + + + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000282 + + + + + Value of 'ram:ReferenceTypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000032 + + + + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000169 + + + + + Element 'ram:SpecifiedTaxRegistration' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000187 + + + + + Element 'ram:Description' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000032 + + + + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000033 + + + + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="VA"]' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000034 + + + + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="FC"]' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:SpecifiedTaxRegistration[ not(ram:ID/@schemeID="VA") and not(ram:ID/@schemeID="FC")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000170 + + + + + [BR-57]-Each Deliver to address (BG-15) shall contain a Deliver to country code (BT-80). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000171 + + + + + Element 'ram:OccurrenceDateTime' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000322 + + + + + Element 'ram:ModeCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000346 + + + + + Value of 'ram:ModeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000172 + + + + + Element 'ram:PaymentReference' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000038 + + + + + Element 'ram:InvoiceCurrencyCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000173 + + + + + Element 'ram:ApplicableTradeTax' must occur at least 1 times. + + + + + + + + + + FX-SCH-A-000039 + + + + + Element 'ram:SpecifiedTradeSettlementHeaderMonetarySummation' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000176 + + + + + Element 'ram:CalculatedAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000177 + + + + + Element 'ram:BasisAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000323 + + + + + Element 'ram:LineTotalBasisAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000324 + + + + + Element 'ram:AllowanceChargeBasisAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000180 + + + + + Value of 'ram:DueDateTypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000181 + + + + + Value of 'ram:ExemptionReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000187 + + + + + Element 'ram:Description' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000040 + + + + + Value of 'ram:InvoiceCurrencyCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000182 + + + + + [BR-55]-Each Preceding Invoice reference (BG-3) shall contain a Preceding Invoice reference (BT-25). + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000325 + + + + + Element 'ram:IncludedTradeTax' must occur at least 1 times. + + + + + + + + + + FX-SCH-A-000326 + + + + + Element 'ram:InvoiceSpecifiedReferencedDocument' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000176 + + + + + Element 'ram:CalculatedAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000181 + + + + + Value of 'ram:ExemptionReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineTotalBasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000294 + + + + + Element 'ram:Description' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000327 + + + + + Element 'ram:AppliedAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000328 + + + + + Element 'ram:AppliedTradeTax' must occur at least 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000329 + + + + + Element 'ram:RateApplicablePercent' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineTotalBasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:SpecifiedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000185 + + + + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000275 + + + + + Value of '@unitCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineTotalBasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000185 + + + + + Element 'ram:CategoryTradeTax' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000275 + + + + + Value of '@unitCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CalculatedAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReason' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ExemptionReasonCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineTotalBasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000187 + + + + + Element 'ram:Description' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000188 + + + + + Element 'ram:DirectDebitMandateID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000330 + + + + + Element 'ram:PartialPaymentAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000331 + + + + + Element 'ram:PayeeTradeParty' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000277 + + + + + Attribute '@unitCode' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000189 + + + + + Element 'ram:LineTotalAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000190 + + + + + Element 'ram:ChargeTotalAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000191 + + + + + Element 'ram:AllowanceTotalAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000041 + + + + + Element 'ram:TaxBasisTotalAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000042 + + + + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:InvoiceCurrencyCode]' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000192 + + + + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:TaxCurrencyCode]' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000290 + + + + + Element 'ram:RoundingAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000043 + + + + + Element 'ram:GrandTotalAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000193 + + + + + Element 'ram:TotalPrepaidAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000044 + + + + + Element 'ram:DuePayableAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:TaxTotalAmount[ not(@currencyID=../../ram:InvoiceCurrencyCode) and not(@currencyID=../../ram:TaxCurrencyCode)]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000045 + + + + + Value of '@currencyID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000046 + + + + + Attribute '@currencyID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000045 + + + + + Value of '@currencyID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000046 + + + + + Attribute '@currencyID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000291 + + + + + Element 'ram:Information' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000194 + + + + + Element 'ram:PayeePartyCreditorFinancialAccount' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000292 + + + + + Element 'ram:BICID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000195 + + + + + Element 'ram:IBANID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000332 + + + + + Value of 'ram:SourceCurrencyCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000333 + + + + + Value of 'ram:TargetCurrencyCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000196 + + + + + Value of 'ram:TaxCurrencyCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000266 + + + + + Element 'ram:AssociatedDocumentLineDocument' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000267 + + + + + Element 'ram:SpecifiedTradeProduct' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000268 + + + + + Element 'ram:SpecifiedLineTradeAgreement' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000269 + + + + + Element 'ram:SpecifiedLineTradeDelivery' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000270 + + + + + Element 'ram:LineID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000317 + + + + + Element 'ram:Content' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000161 + + + + + Element 'ram:SubjectCode' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000162 + + + + + Value of 'ram:SubjectCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000334 + + + + + Value of 'ram:LineStatusCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000335 + + + + + Value of 'ram:LineStatusReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000272 + + + + + Element 'ram:NetPriceProductTradePrice' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000283 + + + + + Element 'ram:Name' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000284 + + + + + Element 'ram:AttachmentBinaryObject' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000285 + + + + + Attribute '@mimeCode' is required in this context. + + + + + + + + + + FX-SCH-A-000286 + + + + + Attribute '@filename' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000287 + + + + + Value of '@mimeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000282 + + + + + Value of 'ram:ReferenceTypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000273 + + + + + Element 'ram:ChargeAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:AppliedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisQuantity' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SequenceNumeric' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisQuantity' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SequenceNumeric' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000275 + + + + + Value of '@unitCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:IncludedTradeTax' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000273 + + + + + Element 'ram:ChargeAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000336 + + + + + Element 'ram:IncludedTradeTax' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AppliedTradeAllowanceCharge' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000275 + + + + + Value of '@unitCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000176 + + + + + Element 'ram:CalculatedAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000329 + + + + + Element 'ram:RateApplicablePercent' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000181 + + + + + Value of 'ram:ExemptionReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineTotalBasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000276 + + + + + Element 'ram:BilledQuantity' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000171 + + + + + Element 'ram:OccurrenceDateTime' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000277 + + + + + Attribute '@unitCode' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000275 + + + + + Value of '@unitCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000277 + + + + + Attribute '@unitCode' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000275 + + + + + Value of '@unitCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000277 + + + + + Attribute '@unitCode' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000275 + + + + + Value of '@unitCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:PostalTradeAddress' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000321 + + + + + Element 'ram:RoleCode' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000165 + + + + + Element 'ram:URIUniversalCommunication' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000166 + + + + + Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000289 + + + + + Element 'ram:CompleteNumber' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000167 + + + + + Element 'ram:CountrySubDivisionName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:PostalTradeAddress' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000168 + + + + + Element 'ram:URIID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteNumber' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000173 + + + + + Element 'ram:ApplicableTradeTax' must occur at least 1 times. + + + + + + + + + + FX-SCH-A-000279 + + + + + Element 'ram:SpecifiedTradeSettlementLineMonetarySummation' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000337 + + + + + Element 'ram:InvoiceReferencedDocument' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000175 + + + + + Element 'ram:ReceivableSpecifiedTradeAccountingAccount' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:FormattedIssueDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000282 + + + + + Value of 'ram:ReferenceTypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000338 + + + + + Element 'ram:CalculatedAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000178 + + + + + Element 'ram:CategoryCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000179 + + + + + Value of 'ram:CategoryCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:DueDateTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000181 + + + + + Value of 'ram:ExemptionReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:LineTotalBasisAmount' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:TaxPointDate' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CompleteDateTime' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Description' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:AttachmentBinaryObject' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:Name' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:ReferenceTypeCode' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:URIID' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:SpecifiedTradeAllowanceCharge[ not(ram:ChargeIndicator/udt:Indicator="false") and not(ram:ChargeIndicator/udt:Indicator="true")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisQuantity' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SequenceNumeric' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000183 + + + + + Element 'ram:ChargeIndicator' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000184 + + + + + Element 'ram:ActualAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:BasisQuantity' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:CategoryTradeTax' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000186 + + + + + Value of 'ram:ReasonCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SequenceNumeric' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000189 + + + + + Element 'ram:LineTotalAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000190 + + + + + Element 'ram:ChargeTotalAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000191 + + + + + Element 'ram:AllowanceTotalAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000339 + + + + + Element 'ram:TaxTotalAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000340 + + + + + Element 'ram:GrandTotalAmount' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000341 + + + + + Element 'ram:TotalAllowanceChargeAmount' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000187 + + + + + Element 'ram:Description' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000294 + + + + + Element 'ram:Description' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000295 + + + + + Element 'ram:Value' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @listVersionID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000342 + + + + + Element 'ram:ClassName' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000296 + + + + + Attribute '@listID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000297 + + + + + Value of '@listID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000163 + + + + + Element 'ram:ID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000343 + + + + + Element 'ram:IndustryAssignedID' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000187 + + + + + Element 'ram:Description' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000344 + + + + + Element 'ram:UnitQuantity' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000277 + + + + + Attribute '@unitCode' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000275 + + + + + Value of '@unitCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000026 + + + + + Value of 'ram:ID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EXTENDED_codedb.xml b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EXTENDED_codedb.xml new file mode 100644 index 000000000..62d10ca41 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_EXTENDED_codedb.xml @@ -0,0 +1,6677 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_MINIMUM.xslt b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_MINIMUM.xslt new file mode 100644 index 000000000..fed7601c8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_MINIMUM.xslt @@ -0,0 +1,1931 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + *: + + [namespace-uri()=' + + '] + + + + [ + + ] + + + + / + + @ + + + @*[local-name()=' + + ' and namespace-uri()=' + + '] + + + + + + + + + / + + + [ + + ] + + + + /@ + + + + + + + + / + + + [ + + ] + + + + /@ + + + + + + + + + + + + + + + + + + + + + + + + . + + + + +U + + U + + + + U. + + n + + + + U. + + _ + + _ + + + + + + + + +   +   +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Schema for Factur-X; 1.07.2; Accounting, MINIMUM + + + + + + + + + + + + + + FX-SCH-A-000001 + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000002 + + + + + [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’. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000003 + + + + + [BR-13]-An Invoice shall have the Invoice total amount without VAT (BT-109). + + + + + + + + + + FX-SCH-A-000004 + + + + + [BR-14]-An Invoice shall have the Invoice total amount with VAT (BT-112). + + + + + + + + + + FX-SCH-A-000005 + + + + + [BR-15]-An Invoice shall have the Amount due for payment (BT-115). + + + + + + + + + + FX-SCH-A-000006 + + + + + [BR-DEC-12]-The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2. + + + + + + + + + + FX-SCH-A-000007 + + + + + [BR-DEC-13]-The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2. + + + + + + + + + + FX-SCH-A-000008 + + + + + [BR-DEC-14]-The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2. + + + + + + + + + + FX-SCH-A-000009 + + + + + [BR-DEC-18]-The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000010 + + + + + [BR-01]-An Invoice shall have a Specification identifier (BT-24). + + + + + + + + + + FX-SCH-A-000011 + + + + + [BR-02]-An Invoice shall have an Invoice number (BT-1). + + + + + + + + + + FX-SCH-A-000012 + + + + + [BR-03]-An Invoice shall have an Invoice issue date (BT-2). + + + + + + + + + + FX-SCH-A-000013 + + + + + [BR-04]-An Invoice shall have an Invoice type code (BT-3). + + + + + + + + + + FX-SCH-A-000014 + + + + + [BR-05]-An Invoice shall have an Invoice currency code (BT-5). + + + + + + + + + + FX-SCH-A-000015 + + + + + [BR-06]-An Invoice shall contain the Seller name (BT-27). + + + + + + + + + + FX-SCH-A-000016 + + + + + [BR-07]-An Invoice shall contain the Buyer name (BT-44). + + + + + + + + + + FX-SCH-A-000017 + + + + + [BR-08]-An Invoice shall contain the Seller postal address (BG-5). + + + + + + + + + + FX-SCH-A-000018 + + + + + [BR-09]-The Seller postal address (BG-5) shall contain a Seller country code (BT-40). + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000020 + + + + + Element 'ram:TypeCode' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000021 + + + + + Attribute '@format' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000022 + + + + + Value of '@format' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000023 + + + + + Value of 'ram:TypeCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000024 + + + + + Element 'ram:BusinessProcessSpecifiedDocumentContextParameter' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000025 + + + + + Element 'ram:GuidelineSpecifiedDocumentContextParameter' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000026 + + + + + Value of 'ram:ID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000027 + + + + + Element 'ram:SellerTradeParty' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000028 + + + + + Element 'ram:BuyerTradeParty' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000029 + + + + + Element 'ram:IssuerAssignedID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @schemeID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:PostalTradeAddress' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000030 + + + + + Element 'ram:Name' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000032 + + + + + Element 'ram:PostalTradeAddress' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000033 + + + + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="VA"]' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000034 + + + + + Element variant 'ram:SpecifiedTaxRegistration[ram:ID/@schemeID="FC"]' may occur at maximum 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000035 + + + + + Element 'ram:CountryID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000036 + + + + + Value of 'ram:CountryID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000031 + + + + + Value of '@schemeID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:SpecifiedTaxRegistration[ not(ram:ID/@schemeID="VA") and not(ram:ID/@schemeID="FC")]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000019 + + + + + Element 'ram:ID' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000037 + + + + + Attribute '@schemeID' is required in this context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000038 + + + + + Element 'ram:InvoiceCurrencyCode' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000039 + + + + + Element 'ram:SpecifiedTradeSettlementHeaderMonetarySummation' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000040 + + + + + Value of 'ram:InvoiceCurrencyCode' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000041 + + + + + Element 'ram:TaxBasisTotalAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000042 + + + + + Element variant 'ram:TaxTotalAmount[@currencyID=../../ram:InvoiceCurrencyCode]' may occur at maximum 1 times. + + + + + + + + + + FX-SCH-A-000043 + + + + + Element 'ram:GrandTotalAmount' must occur exactly 1 times. + + + + + + + + + + FX-SCH-A-000044 + + + + + Element 'ram:DuePayableAmount' must occur exactly 1 times. + + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Attribute @currencyID' marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + + Element variant 'ram:TaxTotalAmount[ not(@currencyID=../../ram:InvoiceCurrencyCode) and not(@currencyID=../../ram:TaxCurrencyCode)]' is marked as not used in the given context. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000045 + + + + + Value of '@currencyID' is not allowed. + + + + + + + + + + + + + + + + + + + + + + + FX-SCH-A-000046 + + + + + Attribute '@currencyID' is required in this context. + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_MINIMUM_codedb.xml b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_MINIMUM_codedb.xml new file mode 100644 index 000000000..c07e49f4f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/schema/xslt/FACTUR-X_MINIMUM_codedb.xml @@ -0,0 +1,919 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/horstoeko/zugferd/src/validation/basic/qdt/AllowanceChargeReasonCodeType.yml b/vendor/horstoeko/zugferd/src/validation/basic/qdt/AllowanceChargeReasonCodeType.yml new file mode 100644 index 000000000..37a273a2c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/qdt/AllowanceChargeReasonCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basic/qdt/CountryIDType.yml b/vendor/horstoeko/zugferd/src/validation/basic/qdt/CountryIDType.yml new file mode 100644 index 000000000..02de15eb7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/qdt/CountryIDType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basic/qdt/CurrencyCodeType.yml b/vendor/horstoeko/zugferd/src/validation/basic/qdt/CurrencyCodeType.yml new file mode 100644 index 000000000..612f55658 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/qdt/CurrencyCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basic/qdt/DocumentCodeType.yml b/vendor/horstoeko/zugferd/src/validation/basic/qdt/DocumentCodeType.yml new file mode 100644 index 000000000..579b25644 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/qdt/DocumentCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basic/qdt/FormattedDateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/validation/basic/qdt/FormattedDateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..acc7947ac --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/qdt/FormattedDateTimeType.DateTimeStringAType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType\DateTimeStringAType: + properties: + format: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/qdt/FormattedDateTimeType.yml b/vendor/horstoeko/zugferd/src/validation/basic/qdt/FormattedDateTimeType.yml new file mode 100644 index 000000000..0b84bf295 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/qdt/FormattedDateTimeType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType: + properties: + dateTimeString: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/qdt/PaymentMeansCodeType.yml b/vendor/horstoeko/zugferd/src/validation/basic/qdt/PaymentMeansCodeType.yml new file mode 100644 index 000000000..5da0323ef --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/qdt/PaymentMeansCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basic/qdt/TaxCategoryCodeType.yml b/vendor/horstoeko/zugferd/src/validation/basic/qdt/TaxCategoryCodeType.yml new file mode 100644 index 000000000..0432592d9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/qdt/TaxCategoryCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basic/qdt/TaxTypeCodeType.yml b/vendor/horstoeko/zugferd/src/validation/basic/qdt/TaxTypeCodeType.yml new file mode 100644 index 000000000..9c01e8402 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/qdt/TaxTypeCodeType.yml @@ -0,0 +1,9 @@ +horstoeko\zugferd\entities\basic\qdt\TaxTypeCodeType: + properties: + __value: + - + Choice: + choices: + - VAT + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/qdt/TimeReferenceCodeType.yml b/vendor/horstoeko/zugferd/src/validation/basic/qdt/TimeReferenceCodeType.yml new file mode 100644 index 000000000..85b676e66 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/qdt/TimeReferenceCodeType.yml @@ -0,0 +1,11 @@ +horstoeko\zugferd\entities\basic\qdt\TimeReferenceCodeType: + properties: + __value: + - + Choice: + choices: + - '5' + - '29' + - '72' + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/DebtorFinancialAccountType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/DebtorFinancialAccountType.yml new file mode 100644 index 000000000..d9265339e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/DebtorFinancialAccountType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basic\ram\DebtorFinancialAccountType: + properties: + iBANID: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/DocumentContextParameterType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/DocumentContextParameterType.yml new file mode 100644 index 000000000..05e15f7d3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/DocumentContextParameterType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basic\ram\DocumentContextParameterType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/DocumentLineDocumentType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/DocumentLineDocumentType.yml new file mode 100644 index 000000000..cdf97743c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/DocumentLineDocumentType.yml @@ -0,0 +1,10 @@ +horstoeko\zugferd\entities\basic\ram\DocumentLineDocumentType: + properties: + lineID: + - + NotNull: + groups: + - xsd_rules + includedNote: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/ExchangedDocumentContextType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/ExchangedDocumentContextType.yml new file mode 100644 index 000000000..f1193bc1d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/ExchangedDocumentContextType.yml @@ -0,0 +1,12 @@ +horstoeko\zugferd\entities\basic\ram\ExchangedDocumentContextType: + properties: + businessProcessSpecifiedDocumentContextParameter: + - + Valid: null + guidelineSpecifiedDocumentContextParameter: + - + NotNull: + groups: + - xsd_rules + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/ExchangedDocumentType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/ExchangedDocumentType.yml new file mode 100644 index 000000000..90bc4b36a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/ExchangedDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeAgreementType.yml new file mode 100644 index 000000000..f983a784d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeAgreementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeDeliveryType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeDeliveryType.yml new file mode 100644 index 000000000..7f59ae383 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeDeliveryType.yml @@ -0,0 +1,11 @@ +horstoeko\zugferd\entities\basic\ram\HeaderTradeDeliveryType: + properties: + shipToTradeParty: + - + Valid: null + actualDeliverySupplyChainEvent: + - + Valid: null + despatchAdviceReferencedDocument: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeSettlementType.yml new file mode 100644 index 000000000..afdf2dc1a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeSettlementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeAgreementType.yml new file mode 100644 index 000000000..f5bc0b8cb --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeAgreementType.yml @@ -0,0 +1,12 @@ +horstoeko\zugferd\entities\basic\ram\LineTradeAgreementType: + properties: + grossPriceProductTradePrice: + - + Valid: null + netPriceProductTradePrice: + - + NotNull: + groups: + - xsd_rules + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeDeliveryType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeDeliveryType.yml new file mode 100644 index 000000000..3cdf2bc90 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeDeliveryType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basic\ram\LineTradeDeliveryType: + properties: + billedQuantity: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeSettlementType.yml new file mode 100644 index 000000000..817da4375 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeSettlementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/NoteType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/NoteType.yml new file mode 100644 index 000000000..9398dff56 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/NoteType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basic\ram\NoteType: + properties: + content: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/ReferencedDocumentType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/ReferencedDocumentType.yml new file mode 100644 index 000000000..00cb1acf0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/ReferencedDocumentType.yml @@ -0,0 +1,10 @@ +horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType: + properties: + issuerAssignedID: + - + NotNull: + groups: + - xsd_rules + formattedIssueDateTime: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/SpecifiedPeriodType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/SpecifiedPeriodType.yml new file mode 100644 index 000000000..7bd45e64d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/SpecifiedPeriodType.yml @@ -0,0 +1,8 @@ +horstoeko\zugferd\entities\basic\ram\SpecifiedPeriodType: + properties: + startDateTime: + - + Valid: null + endDateTime: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainEventType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainEventType.yml new file mode 100644 index 000000000..2d93e54fd --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainEventType.yml @@ -0,0 +1,9 @@ +horstoeko\zugferd\entities\basic\ram\SupplyChainEventType: + properties: + occurrenceDateTime: + - + NotNull: + groups: + - xsd_rules + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainTradeLineItemType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainTradeLineItemType.yml new file mode 100644 index 000000000..e07976b33 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainTradeLineItemType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainTradeTransactionType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainTradeTransactionType.yml new file mode 100644 index 000000000..c23226df0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainTradeTransactionType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/TaxRegistrationType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/TaxRegistrationType.yml new file mode 100644 index 000000000..22c6663da --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/TaxRegistrationType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basic\ram\TaxRegistrationType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAccountingAccountType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAccountingAccountType.yml new file mode 100644 index 000000000..b14631696 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAccountingAccountType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basic\ram\TradeAccountingAccountType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAddressType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAddressType.yml new file mode 100644 index 000000000..eeb6e08bb --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAddressType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basic\ram\TradeAddressType: + properties: + countryID: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAllowanceChargeType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAllowanceChargeType.yml new file mode 100644 index 000000000..7c8cc1fca --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAllowanceChargeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePartyType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePartyType.yml new file mode 100644 index 000000000..824947a3e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePartyType.yml @@ -0,0 +1,14 @@ +horstoeko\zugferd\entities\basic\ram\TradePartyType: + properties: + specifiedLegalOrganization: + - + Valid: null + postalTradeAddress: + - + Valid: null + uRIUniversalCommunication: + - + Valid: null + specifiedTaxRegistration: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePaymentTermsType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePaymentTermsType.yml new file mode 100644 index 000000000..23cb87fe3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePaymentTermsType.yml @@ -0,0 +1,5 @@ +horstoeko\zugferd\entities\basic\ram\TradePaymentTermsType: + properties: + dueDateDateTime: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePriceType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePriceType.yml new file mode 100644 index 000000000..a27cd073b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePriceType.yml @@ -0,0 +1,10 @@ +horstoeko\zugferd\entities\basic\ram\TradePriceType: + properties: + chargeAmount: + - + NotNull: + groups: + - xsd_rules + appliedTradeAllowanceCharge: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeProductType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeProductType.yml new file mode 100644 index 000000000..d55f6f224 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeProductType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basic\ram\TradeProductType: + properties: + name: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementHeaderMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementHeaderMonetarySummationType.yml new file mode 100644 index 000000000..c654a9c61 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementHeaderMonetarySummationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementLineMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementLineMonetarySummationType.yml new file mode 100644 index 000000000..32258b51b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementLineMonetarySummationType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basic\ram\TradeSettlementLineMonetarySummationType: + properties: + lineTotalAmount: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementPaymentMeansType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementPaymentMeansType.yml new file mode 100644 index 000000000..4f494f95f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementPaymentMeansType.yml @@ -0,0 +1,13 @@ +horstoeko\zugferd\entities\basic\ram\TradeSettlementPaymentMeansType: + properties: + typeCode: + - + NotNull: + groups: + - xsd_rules + payerPartyDebtorFinancialAccount: + - + Valid: null + payeePartyCreditorFinancialAccount: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeTaxType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeTaxType.yml new file mode 100644 index 000000000..0e5b9d2eb --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeTaxType.yml @@ -0,0 +1,12 @@ +horstoeko\zugferd\entities\basic\ram\TradeTaxType: + properties: + typeCode: + - + NotNull: + groups: + - xsd_rules + categoryCode: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/ram/UniversalCommunicationType.yml b/vendor/horstoeko/zugferd/src/validation/basic/ram/UniversalCommunicationType.yml new file mode 100644 index 000000000..da0dfb517 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/ram/UniversalCommunicationType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basic\ram\UniversalCommunicationType: + properties: + uRIID: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/rsm/CrossIndustryInvoiceType.yml b/vendor/horstoeko/zugferd/src/validation/basic/rsm/CrossIndustryInvoiceType.yml new file mode 100644 index 000000000..9f549609d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/rsm/CrossIndustryInvoiceType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basic/udt/DateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/validation/basic/udt/DateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..f4c77949f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/udt/DateTimeType.DateTimeStringAType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basic\udt\DateTimeType\DateTimeStringAType: + properties: + format: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basic/udt/QuantityType.yml b/vendor/horstoeko/zugferd/src/validation/basic/udt/QuantityType.yml new file mode 100644 index 000000000..b78445b6e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basic/udt/QuantityType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basic\udt\QuantityType: + properties: + unitCode: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/AllowanceChargeReasonCodeType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/AllowanceChargeReasonCodeType.yml new file mode 100644 index 000000000..cec529b73 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/AllowanceChargeReasonCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/CountryIDType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/CountryIDType.yml new file mode 100644 index 000000000..909a5cea5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/CountryIDType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/CurrencyCodeType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/CurrencyCodeType.yml new file mode 100644 index 000000000..18d88e35b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/CurrencyCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/DocumentCodeType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/DocumentCodeType.yml new file mode 100644 index 000000000..1017166e7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/DocumentCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/FormattedDateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/FormattedDateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..a38ecac45 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/FormattedDateTimeType.DateTimeStringAType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType\DateTimeStringAType: + properties: + format: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/FormattedDateTimeType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/FormattedDateTimeType.yml new file mode 100644 index 000000000..a1bc46830 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/FormattedDateTimeType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType: + properties: + dateTimeString: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/PaymentMeansCodeType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/PaymentMeansCodeType.yml new file mode 100644 index 000000000..2537d1b65 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/PaymentMeansCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TaxCategoryCodeType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TaxCategoryCodeType.yml new file mode 100644 index 000000000..003aa5c50 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TaxCategoryCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TaxTypeCodeType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TaxTypeCodeType.yml new file mode 100644 index 000000000..aed5549bc --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TaxTypeCodeType.yml @@ -0,0 +1,9 @@ +horstoeko\zugferd\entities\basicwl\qdt\TaxTypeCodeType: + properties: + __value: + - + Choice: + choices: + - VAT + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TimeReferenceCodeType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TimeReferenceCodeType.yml new file mode 100644 index 000000000..3d1325ad9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TimeReferenceCodeType.yml @@ -0,0 +1,11 @@ +horstoeko\zugferd\entities\basicwl\qdt\TimeReferenceCodeType: + properties: + __value: + - + Choice: + choices: + - '5' + - '29' + - '72' + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/DebtorFinancialAccountType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/DebtorFinancialAccountType.yml new file mode 100644 index 000000000..3e9fbad23 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/DebtorFinancialAccountType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basicwl\ram\DebtorFinancialAccountType: + properties: + iBANID: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/DocumentContextParameterType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/DocumentContextParameterType.yml new file mode 100644 index 000000000..d9b6ad4d1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/DocumentContextParameterType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basicwl\ram\DocumentContextParameterType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ExchangedDocumentContextType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ExchangedDocumentContextType.yml new file mode 100644 index 000000000..08cc99e53 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ExchangedDocumentContextType.yml @@ -0,0 +1,12 @@ +horstoeko\zugferd\entities\basicwl\ram\ExchangedDocumentContextType: + properties: + businessProcessSpecifiedDocumentContextParameter: + - + Valid: null + guidelineSpecifiedDocumentContextParameter: + - + NotNull: + groups: + - xsd_rules + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ExchangedDocumentType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ExchangedDocumentType.yml new file mode 100644 index 000000000..d58ec230a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ExchangedDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeAgreementType.yml new file mode 100644 index 000000000..4019ebadb --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeAgreementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeDeliveryType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeDeliveryType.yml new file mode 100644 index 000000000..a8422bfc6 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeDeliveryType.yml @@ -0,0 +1,11 @@ +horstoeko\zugferd\entities\basicwl\ram\HeaderTradeDeliveryType: + properties: + shipToTradeParty: + - + Valid: null + actualDeliverySupplyChainEvent: + - + Valid: null + despatchAdviceReferencedDocument: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeSettlementType.yml new file mode 100644 index 000000000..8e03782ce --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeSettlementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/NoteType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/NoteType.yml new file mode 100644 index 000000000..4b7962894 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/NoteType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basicwl\ram\NoteType: + properties: + content: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ReferencedDocumentType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ReferencedDocumentType.yml new file mode 100644 index 000000000..ca03864d8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ReferencedDocumentType.yml @@ -0,0 +1,10 @@ +horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType: + properties: + issuerAssignedID: + - + NotNull: + groups: + - xsd_rules + formattedIssueDateTime: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SpecifiedPeriodType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SpecifiedPeriodType.yml new file mode 100644 index 000000000..81c9f3f07 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SpecifiedPeriodType.yml @@ -0,0 +1,8 @@ +horstoeko\zugferd\entities\basicwl\ram\SpecifiedPeriodType: + properties: + startDateTime: + - + Valid: null + endDateTime: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SupplyChainEventType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SupplyChainEventType.yml new file mode 100644 index 000000000..ccbb6ad6a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SupplyChainEventType.yml @@ -0,0 +1,9 @@ +horstoeko\zugferd\entities\basicwl\ram\SupplyChainEventType: + properties: + occurrenceDateTime: + - + NotNull: + groups: + - xsd_rules + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SupplyChainTradeTransactionType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SupplyChainTradeTransactionType.yml new file mode 100644 index 000000000..e4f5d3880 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SupplyChainTradeTransactionType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TaxRegistrationType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TaxRegistrationType.yml new file mode 100644 index 000000000..07351f660 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TaxRegistrationType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basicwl\ram\TaxRegistrationType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAccountingAccountType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAccountingAccountType.yml new file mode 100644 index 000000000..2049e6c82 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAccountingAccountType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basicwl\ram\TradeAccountingAccountType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAddressType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAddressType.yml new file mode 100644 index 000000000..effedd1ed --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAddressType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basicwl\ram\TradeAddressType: + properties: + countryID: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAllowanceChargeType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAllowanceChargeType.yml new file mode 100644 index 000000000..c2dc3d5c9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAllowanceChargeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradePartyType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradePartyType.yml new file mode 100644 index 000000000..01687c214 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradePartyType.yml @@ -0,0 +1,14 @@ +horstoeko\zugferd\entities\basicwl\ram\TradePartyType: + properties: + specifiedLegalOrganization: + - + Valid: null + postalTradeAddress: + - + Valid: null + uRIUniversalCommunication: + - + Valid: null + specifiedTaxRegistration: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradePaymentTermsType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradePaymentTermsType.yml new file mode 100644 index 000000000..132af8146 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradePaymentTermsType.yml @@ -0,0 +1,5 @@ +horstoeko\zugferd\entities\basicwl\ram\TradePaymentTermsType: + properties: + dueDateDateTime: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeSettlementHeaderMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeSettlementHeaderMonetarySummationType.yml new file mode 100644 index 000000000..85ec6bead --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeSettlementHeaderMonetarySummationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeSettlementPaymentMeansType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeSettlementPaymentMeansType.yml new file mode 100644 index 000000000..a526d54c5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeSettlementPaymentMeansType.yml @@ -0,0 +1,13 @@ +horstoeko\zugferd\entities\basicwl\ram\TradeSettlementPaymentMeansType: + properties: + typeCode: + - + NotNull: + groups: + - xsd_rules + payerPartyDebtorFinancialAccount: + - + Valid: null + payeePartyCreditorFinancialAccount: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeTaxType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeTaxType.yml new file mode 100644 index 000000000..80fd0ccd9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeTaxType.yml @@ -0,0 +1,12 @@ +horstoeko\zugferd\entities\basicwl\ram\TradeTaxType: + properties: + typeCode: + - + NotNull: + groups: + - xsd_rules + categoryCode: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/ram/UniversalCommunicationType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/UniversalCommunicationType.yml new file mode 100644 index 000000000..c9dd34262 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/ram/UniversalCommunicationType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basicwl\ram\UniversalCommunicationType: + properties: + uRIID: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/rsm/CrossIndustryInvoiceType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/rsm/CrossIndustryInvoiceType.yml new file mode 100644 index 000000000..5b352ca70 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/rsm/CrossIndustryInvoiceType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/basicwl/udt/DateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/validation/basicwl/udt/DateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..fc0049b2f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/basicwl/udt/DateTimeType.DateTimeStringAType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\basicwl\udt\DateTimeType\DateTimeStringAType: + properties: + format: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/qdt/AllowanceChargeReasonCodeType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/AllowanceChargeReasonCodeType.yml new file mode 100644 index 000000000..4afbbada1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/AllowanceChargeReasonCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/qdt/CountryIDType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/CountryIDType.yml new file mode 100644 index 000000000..f2245276e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/CountryIDType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/qdt/CurrencyCodeType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/CurrencyCodeType.yml new file mode 100644 index 000000000..ff1dc2909 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/CurrencyCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/qdt/DocumentCodeType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/DocumentCodeType.yml new file mode 100644 index 000000000..f491f9c0f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/DocumentCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/qdt/FormattedDateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/FormattedDateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..b082a689f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/FormattedDateTimeType.DateTimeStringAType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType\DateTimeStringAType: + properties: + format: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/qdt/FormattedDateTimeType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/FormattedDateTimeType.yml new file mode 100644 index 000000000..3dcd07a69 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/FormattedDateTimeType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType: + properties: + dateTimeString: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/qdt/PaymentMeansCodeType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/PaymentMeansCodeType.yml new file mode 100644 index 000000000..2cc1114fd --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/PaymentMeansCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/qdt/ReferenceCodeType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/ReferenceCodeType.yml new file mode 100644 index 000000000..ef2141ec1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/ReferenceCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TaxCategoryCodeType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TaxCategoryCodeType.yml new file mode 100644 index 000000000..b4b0de0e1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TaxCategoryCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TaxTypeCodeType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TaxTypeCodeType.yml new file mode 100644 index 000000000..91b294cb2 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TaxTypeCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TimeReferenceCodeType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TimeReferenceCodeType.yml new file mode 100644 index 000000000..67628ce22 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TimeReferenceCodeType.yml @@ -0,0 +1,11 @@ +horstoeko\zugferd\entities\en16931\qdt\TimeReferenceCodeType: + properties: + __value: + - + Choice: + choices: + - '5' + - '29' + - '72' + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/CreditorFinancialInstitutionType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/CreditorFinancialInstitutionType.yml new file mode 100644 index 000000000..3121c573c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/CreditorFinancialInstitutionType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\ram\CreditorFinancialInstitutionType: + properties: + bICID: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/DebtorFinancialAccountType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/DebtorFinancialAccountType.yml new file mode 100644 index 000000000..1d913991e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/DebtorFinancialAccountType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\ram\DebtorFinancialAccountType: + properties: + iBANID: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/DocumentContextParameterType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/DocumentContextParameterType.yml new file mode 100644 index 000000000..2b0aec69e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/DocumentContextParameterType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\ram\DocumentContextParameterType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/DocumentLineDocumentType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/DocumentLineDocumentType.yml new file mode 100644 index 000000000..50493d3c6 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/DocumentLineDocumentType.yml @@ -0,0 +1,10 @@ +horstoeko\zugferd\entities\en16931\ram\DocumentLineDocumentType: + properties: + lineID: + - + NotNull: + groups: + - xsd_rules + includedNote: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/ExchangedDocumentContextType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/ExchangedDocumentContextType.yml new file mode 100644 index 000000000..95f5be6ab --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/ExchangedDocumentContextType.yml @@ -0,0 +1,12 @@ +horstoeko\zugferd\entities\en16931\ram\ExchangedDocumentContextType: + properties: + businessProcessSpecifiedDocumentContextParameter: + - + Valid: null + guidelineSpecifiedDocumentContextParameter: + - + NotNull: + groups: + - xsd_rules + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/ExchangedDocumentType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/ExchangedDocumentType.yml new file mode 100644 index 000000000..4d2c8241a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/ExchangedDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeAgreementType.yml new file mode 100644 index 000000000..006abe42e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeAgreementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeDeliveryType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeDeliveryType.yml new file mode 100644 index 000000000..6a6a044d0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeDeliveryType.yml @@ -0,0 +1,14 @@ +horstoeko\zugferd\entities\en16931\ram\HeaderTradeDeliveryType: + properties: + shipToTradeParty: + - + Valid: null + actualDeliverySupplyChainEvent: + - + Valid: null + despatchAdviceReferencedDocument: + - + Valid: null + receivingAdviceReferencedDocument: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeSettlementType.yml new file mode 100644 index 000000000..5c0731f52 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeSettlementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeAgreementType.yml new file mode 100644 index 000000000..3ae1caca1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeAgreementType.yml @@ -0,0 +1,15 @@ +horstoeko\zugferd\entities\en16931\ram\LineTradeAgreementType: + properties: + buyerOrderReferencedDocument: + - + Valid: null + grossPriceProductTradePrice: + - + Valid: null + netPriceProductTradePrice: + - + NotNull: + groups: + - xsd_rules + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeDeliveryType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeDeliveryType.yml new file mode 100644 index 000000000..7b8ade15a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeDeliveryType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\ram\LineTradeDeliveryType: + properties: + billedQuantity: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeSettlementType.yml new file mode 100644 index 000000000..41e1f9448 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeSettlementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/NoteType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/NoteType.yml new file mode 100644 index 000000000..9447f259d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/NoteType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\ram\NoteType: + properties: + content: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProcuringProjectType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProcuringProjectType.yml new file mode 100644 index 000000000..a8564f3d7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProcuringProjectType.yml @@ -0,0 +1,12 @@ +horstoeko\zugferd\entities\en16931\ram\ProcuringProjectType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules + name: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProductCharacteristicType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProductCharacteristicType.yml new file mode 100644 index 000000000..2aaf72c3a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProductCharacteristicType.yml @@ -0,0 +1,12 @@ +horstoeko\zugferd\entities\en16931\ram\ProductCharacteristicType: + properties: + description: + - + NotNull: + groups: + - xsd_rules + value: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProductClassificationType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProductClassificationType.yml new file mode 100644 index 000000000..937f5a4fd --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProductClassificationType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\ram\ProductClassificationType: + properties: + classCode: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/ReferencedDocumentType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/ReferencedDocumentType.yml new file mode 100644 index 000000000..60185093e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/ReferencedDocumentType.yml @@ -0,0 +1,5 @@ +horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType: + properties: + formattedIssueDateTime: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/SpecifiedPeriodType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/SpecifiedPeriodType.yml new file mode 100644 index 000000000..73b58d2e8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/SpecifiedPeriodType.yml @@ -0,0 +1,8 @@ +horstoeko\zugferd\entities\en16931\ram\SpecifiedPeriodType: + properties: + startDateTime: + - + Valid: null + endDateTime: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainEventType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainEventType.yml new file mode 100644 index 000000000..fde797d32 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainEventType.yml @@ -0,0 +1,9 @@ +horstoeko\zugferd\entities\en16931\ram\SupplyChainEventType: + properties: + occurrenceDateTime: + - + NotNull: + groups: + - xsd_rules + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainTradeLineItemType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainTradeLineItemType.yml new file mode 100644 index 000000000..dd5ea5b25 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainTradeLineItemType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainTradeTransactionType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainTradeTransactionType.yml new file mode 100644 index 000000000..beea2adf4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainTradeTransactionType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/TaxRegistrationType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TaxRegistrationType.yml new file mode 100644 index 000000000..d6759f630 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TaxRegistrationType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\ram\TaxRegistrationType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAccountingAccountType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAccountingAccountType.yml new file mode 100644 index 000000000..31f03ac23 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAccountingAccountType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\ram\TradeAccountingAccountType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAddressType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAddressType.yml new file mode 100644 index 000000000..4f5570163 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAddressType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\ram\TradeAddressType: + properties: + countryID: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAllowanceChargeType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAllowanceChargeType.yml new file mode 100644 index 000000000..9b8ab5394 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAllowanceChargeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeContactType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeContactType.yml new file mode 100644 index 000000000..4ab783309 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeContactType.yml @@ -0,0 +1,8 @@ +horstoeko\zugferd\entities\en16931\ram\TradeContactType: + properties: + telephoneUniversalCommunication: + - + Valid: null + emailURIUniversalCommunication: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeCountryType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeCountryType.yml new file mode 100644 index 000000000..239511df3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeCountryType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\ram\TradeCountryType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePartyType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePartyType.yml new file mode 100644 index 000000000..68e8e292e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePartyType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePaymentTermsType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePaymentTermsType.yml new file mode 100644 index 000000000..ffd06b536 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePaymentTermsType.yml @@ -0,0 +1,5 @@ +horstoeko\zugferd\entities\en16931\ram\TradePaymentTermsType: + properties: + dueDateDateTime: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePriceType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePriceType.yml new file mode 100644 index 000000000..4c3202416 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePriceType.yml @@ -0,0 +1,10 @@ +horstoeko\zugferd\entities\en16931\ram\TradePriceType: + properties: + chargeAmount: + - + NotNull: + groups: + - xsd_rules + appliedTradeAllowanceCharge: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeProductType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeProductType.yml new file mode 100644 index 000000000..63508036c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeProductType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementFinancialCardType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementFinancialCardType.yml new file mode 100644 index 000000000..21ca9d8a1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementFinancialCardType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\ram\TradeSettlementFinancialCardType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementHeaderMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementHeaderMonetarySummationType.yml new file mode 100644 index 000000000..717540d74 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementHeaderMonetarySummationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementLineMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementLineMonetarySummationType.yml new file mode 100644 index 000000000..7a78c89f6 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementLineMonetarySummationType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\ram\TradeSettlementLineMonetarySummationType: + properties: + lineTotalAmount: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementPaymentMeansType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementPaymentMeansType.yml new file mode 100644 index 000000000..6eb4e70a6 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementPaymentMeansType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeTaxType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeTaxType.yml new file mode 100644 index 000000000..ed4403261 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeTaxType.yml @@ -0,0 +1,15 @@ +horstoeko\zugferd\entities\en16931\ram\TradeTaxType: + properties: + typeCode: + - + NotNull: + groups: + - xsd_rules + categoryCode: + - + NotNull: + groups: + - xsd_rules + taxPointDate: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/rsm/CrossIndustryInvoiceType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/rsm/CrossIndustryInvoiceType.yml new file mode 100644 index 000000000..753664b23 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/rsm/CrossIndustryInvoiceType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/udt/BinaryObjectType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/udt/BinaryObjectType.yml new file mode 100644 index 000000000..5b47ee726 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/udt/BinaryObjectType.yml @@ -0,0 +1,12 @@ +horstoeko\zugferd\entities\en16931\udt\BinaryObjectType: + properties: + mimeCode: + - + NotNull: + groups: + - xsd_rules + filename: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/udt/DateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/udt/DateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..f7a6e634b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/udt/DateTimeType.DateTimeStringAType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\udt\DateTimeType\DateTimeStringAType: + properties: + format: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/udt/DateType.DateStringAType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/udt/DateType.DateStringAType.yml new file mode 100644 index 000000000..8263e7242 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/udt/DateType.DateStringAType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\udt\DateType\DateStringAType: + properties: + format: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/en16931/udt/QuantityType.yml b/vendor/horstoeko/zugferd/src/validation/en16931/udt/QuantityType.yml new file mode 100644 index 000000000..aa0223946 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/en16931/udt/QuantityType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\en16931\udt\QuantityType: + properties: + unitCode: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/qdt/AccountingAccountTypeCodeType.yml b/vendor/horstoeko/zugferd/src/validation/extended/qdt/AccountingAccountTypeCodeType.yml new file mode 100644 index 000000000..699e14933 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/qdt/AccountingAccountTypeCodeType.yml @@ -0,0 +1,15 @@ +horstoeko\zugferd\entities\extended\qdt\AccountingAccountTypeCodeType: + properties: + __value: + - + Choice: + choices: + - '1' + - '2' + - '3' + - '4' + - '5' + - '6' + - '7' + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/qdt/AllowanceChargeReasonCodeType.yml b/vendor/horstoeko/zugferd/src/validation/extended/qdt/AllowanceChargeReasonCodeType.yml new file mode 100644 index 000000000..9259e7e0f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/qdt/AllowanceChargeReasonCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/qdt/CountryIDType.yml b/vendor/horstoeko/zugferd/src/validation/extended/qdt/CountryIDType.yml new file mode 100644 index 000000000..be0a41c60 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/qdt/CountryIDType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/qdt/CurrencyCodeType.yml b/vendor/horstoeko/zugferd/src/validation/extended/qdt/CurrencyCodeType.yml new file mode 100644 index 000000000..033914b04 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/qdt/CurrencyCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/qdt/DeliveryTermsCodeType.yml b/vendor/horstoeko/zugferd/src/validation/extended/qdt/DeliveryTermsCodeType.yml new file mode 100644 index 000000000..901682bec --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/qdt/DeliveryTermsCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/qdt/DocumentCodeType.yml b/vendor/horstoeko/zugferd/src/validation/extended/qdt/DocumentCodeType.yml new file mode 100644 index 000000000..672ebeac6 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/qdt/DocumentCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/qdt/FormattedDateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/validation/extended/qdt/FormattedDateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..abbdeff91 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/qdt/FormattedDateTimeType.DateTimeStringAType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType\DateTimeStringAType: + properties: + format: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/qdt/FormattedDateTimeType.yml b/vendor/horstoeko/zugferd/src/validation/extended/qdt/FormattedDateTimeType.yml new file mode 100644 index 000000000..92fab0a4d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/qdt/FormattedDateTimeType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType: + properties: + dateTimeString: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/qdt/PaymentMeansCodeType.yml b/vendor/horstoeko/zugferd/src/validation/extended/qdt/PaymentMeansCodeType.yml new file mode 100644 index 000000000..8f5522414 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/qdt/PaymentMeansCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/qdt/ReferenceCodeType.yml b/vendor/horstoeko/zugferd/src/validation/extended/qdt/ReferenceCodeType.yml new file mode 100644 index 000000000..258a2e7bc --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/qdt/ReferenceCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/qdt/TaxCategoryCodeType.yml b/vendor/horstoeko/zugferd/src/validation/extended/qdt/TaxCategoryCodeType.yml new file mode 100644 index 000000000..58c16d69c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/qdt/TaxCategoryCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/qdt/TaxTypeCodeType.yml b/vendor/horstoeko/zugferd/src/validation/extended/qdt/TaxTypeCodeType.yml new file mode 100644 index 000000000..1134976db --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/qdt/TaxTypeCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/qdt/TimeReferenceCodeType.yml b/vendor/horstoeko/zugferd/src/validation/extended/qdt/TimeReferenceCodeType.yml new file mode 100644 index 000000000..7d1e487d8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/qdt/TimeReferenceCodeType.yml @@ -0,0 +1,11 @@ +horstoeko\zugferd\entities\extended\qdt\TimeReferenceCodeType: + properties: + __value: + - + Choice: + choices: + - '5' + - '29' + - '72' + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/AdvancePaymentType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/AdvancePaymentType.yml new file mode 100644 index 000000000..9f3504fae --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/AdvancePaymentType.yml @@ -0,0 +1,20 @@ +horstoeko\zugferd\entities\extended\ram\AdvancePaymentType: + properties: + paidAmount: + - + NotNull: + groups: + - xsd_rules + formattedReceivedDateTime: + - + Valid: null + includedTradeTax: + - + NotNull: + groups: + - xsd_rules + - + Valid: null + invoiceSpecifiedReferencedDocument: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/CreditorFinancialInstitutionType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/CreditorFinancialInstitutionType.yml new file mode 100644 index 000000000..1304d96c5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/CreditorFinancialInstitutionType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\ram\CreditorFinancialInstitutionType: + properties: + bICID: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/DebtorFinancialAccountType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/DebtorFinancialAccountType.yml new file mode 100644 index 000000000..d7cef159b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/DebtorFinancialAccountType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\ram\DebtorFinancialAccountType: + properties: + iBANID: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/DocumentContextParameterType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/DocumentContextParameterType.yml new file mode 100644 index 000000000..388939b74 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/DocumentContextParameterType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\ram\DocumentContextParameterType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/DocumentLineDocumentType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/DocumentLineDocumentType.yml new file mode 100644 index 000000000..8f4891732 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/DocumentLineDocumentType.yml @@ -0,0 +1,10 @@ +horstoeko\zugferd\entities\extended\ram\DocumentLineDocumentType: + properties: + lineID: + - + NotNull: + groups: + - xsd_rules + includedNote: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/ExchangedDocumentContextType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/ExchangedDocumentContextType.yml new file mode 100644 index 000000000..d425cd582 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/ExchangedDocumentContextType.yml @@ -0,0 +1,15 @@ +horstoeko\zugferd\entities\extended\ram\ExchangedDocumentContextType: + properties: + testIndicator: + - + Valid: null + businessProcessSpecifiedDocumentContextParameter: + - + Valid: null + guidelineSpecifiedDocumentContextParameter: + - + NotNull: + groups: + - xsd_rules + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/ExchangedDocumentType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/ExchangedDocumentType.yml new file mode 100644 index 000000000..acd05d21b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/ExchangedDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeAgreementType.yml new file mode 100644 index 000000000..387b36f67 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeAgreementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeDeliveryType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeDeliveryType.yml new file mode 100644 index 000000000..418b23ba7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeDeliveryType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeSettlementType.yml new file mode 100644 index 000000000..488e9b559 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeSettlementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/LegalOrganizationType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/LegalOrganizationType.yml new file mode 100644 index 000000000..ad352a145 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/LegalOrganizationType.yml @@ -0,0 +1,5 @@ +horstoeko\zugferd\entities\extended\ram\LegalOrganizationType: + properties: + postalTradeAddress: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeAgreementType.yml new file mode 100644 index 000000000..6a0abc65d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeAgreementType.yml @@ -0,0 +1,30 @@ +horstoeko\zugferd\entities\extended\ram\LineTradeAgreementType: + properties: + sellerOrderReferencedDocument: + - + Valid: null + 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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeDeliveryType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeDeliveryType.yml new file mode 100644 index 000000000..969ab2bfb --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeDeliveryType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeSettlementType.yml new file mode 100644 index 000000000..68c021b61 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeSettlementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/LogisticsServiceChargeType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/LogisticsServiceChargeType.yml new file mode 100644 index 000000000..5d1f74e23 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/LogisticsServiceChargeType.yml @@ -0,0 +1,19 @@ +horstoeko\zugferd\entities\extended\ram\LogisticsServiceChargeType: + properties: + description: + - + NotNull: + groups: + - xsd_rules + appliedAmount: + - + NotNull: + groups: + - xsd_rules + appliedTradeTax: + - + NotNull: + groups: + - xsd_rules + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/LogisticsTransportMovementType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/LogisticsTransportMovementType.yml new file mode 100644 index 000000000..4e97d9139 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/LogisticsTransportMovementType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\ram\LogisticsTransportMovementType: + properties: + modeCode: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/NoteType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/NoteType.yml new file mode 100644 index 000000000..0d89f4378 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/NoteType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\ram\NoteType: + properties: + content: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/ProcuringProjectType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/ProcuringProjectType.yml new file mode 100644 index 000000000..fb4e36fc0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/ProcuringProjectType.yml @@ -0,0 +1,12 @@ +horstoeko\zugferd\entities\extended\ram\ProcuringProjectType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules + name: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/ProductCharacteristicType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/ProductCharacteristicType.yml new file mode 100644 index 000000000..1109c4da2 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/ProductCharacteristicType.yml @@ -0,0 +1,12 @@ +horstoeko\zugferd\entities\extended\ram\ProductCharacteristicType: + properties: + description: + - + NotNull: + groups: + - xsd_rules + value: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/ProductClassificationType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/ProductClassificationType.yml new file mode 100644 index 000000000..92489465b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/ProductClassificationType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\ram\ProductClassificationType: + properties: + classCode: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/ReferencedDocumentType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/ReferencedDocumentType.yml new file mode 100644 index 000000000..ed5b88d46 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/ReferencedDocumentType.yml @@ -0,0 +1,5 @@ +horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType: + properties: + formattedIssueDateTime: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/ReferencedProductType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/ReferencedProductType.yml new file mode 100644 index 000000000..93ff223ba --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/ReferencedProductType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\ram\ReferencedProductType: + properties: + name: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/SpecifiedPeriodType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/SpecifiedPeriodType.yml new file mode 100644 index 000000000..9367853f3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/SpecifiedPeriodType.yml @@ -0,0 +1,11 @@ +horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType: + properties: + startDateTime: + - + Valid: null + endDateTime: + - + Valid: null + completeDateTime: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainConsignmentType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainConsignmentType.yml new file mode 100644 index 000000000..e0d60a586 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainConsignmentType.yml @@ -0,0 +1,5 @@ +horstoeko\zugferd\entities\extended\ram\SupplyChainConsignmentType: + properties: + specifiedLogisticsTransportMovement: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainEventType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainEventType.yml new file mode 100644 index 000000000..f4ca9acae --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainEventType.yml @@ -0,0 +1,9 @@ +horstoeko\zugferd\entities\extended\ram\SupplyChainEventType: + properties: + occurrenceDateTime: + - + NotNull: + groups: + - xsd_rules + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainTradeLineItemType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainTradeLineItemType.yml new file mode 100644 index 000000000..4e7ac539a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainTradeLineItemType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainTradeTransactionType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainTradeTransactionType.yml new file mode 100644 index 000000000..b19be3134 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainTradeTransactionType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TaxRegistrationType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TaxRegistrationType.yml new file mode 100644 index 000000000..46c096ac3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TaxRegistrationType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\ram\TaxRegistrationType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAccountingAccountType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAccountingAccountType.yml new file mode 100644 index 000000000..a86966da8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAccountingAccountType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAddressType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAddressType.yml new file mode 100644 index 000000000..cd4ad8dd8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAddressType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\ram\TradeAddressType: + properties: + countryID: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAllowanceChargeType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAllowanceChargeType.yml new file mode 100644 index 000000000..9b01ae15a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAllowanceChargeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeContactType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeContactType.yml new file mode 100644 index 000000000..534889c5c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeContactType.yml @@ -0,0 +1,11 @@ +horstoeko\zugferd\entities\extended\ram\TradeContactType: + properties: + telephoneUniversalCommunication: + - + Valid: null + faxUniversalCommunication: + - + Valid: null + emailURIUniversalCommunication: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeCountryType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeCountryType.yml new file mode 100644 index 000000000..376f3544e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeCountryType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\ram\TradeCountryType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeCurrencyExchangeType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeCurrencyExchangeType.yml new file mode 100644 index 000000000..2663651ef --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeCurrencyExchangeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeDeliveryTermsType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeDeliveryTermsType.yml new file mode 100644 index 000000000..f298c977c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeDeliveryTermsType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\ram\TradeDeliveryTermsType: + properties: + deliveryTypeCode: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePartyType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePartyType.yml new file mode 100644 index 000000000..097d8c27a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePartyType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentDiscountTermsType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentDiscountTermsType.yml new file mode 100644 index 000000000..f2b0a0361 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentDiscountTermsType.yml @@ -0,0 +1,5 @@ +horstoeko\zugferd\entities\extended\ram\TradePaymentDiscountTermsType: + properties: + basisDateTime: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentPenaltyTermsType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentPenaltyTermsType.yml new file mode 100644 index 000000000..4d019ed92 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentPenaltyTermsType.yml @@ -0,0 +1,5 @@ +horstoeko\zugferd\entities\extended\ram\TradePaymentPenaltyTermsType: + properties: + basisDateTime: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentTermsType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentTermsType.yml new file mode 100644 index 000000000..a70318950 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentTermsType.yml @@ -0,0 +1,14 @@ +horstoeko\zugferd\entities\extended\ram\TradePaymentTermsType: + properties: + dueDateDateTime: + - + Valid: null + applicableTradePaymentPenaltyTerms: + - + Valid: null + applicableTradePaymentDiscountTerms: + - + Valid: null + payeeTradeParty: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePriceType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePriceType.yml new file mode 100644 index 000000000..b8858b275 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePriceType.yml @@ -0,0 +1,13 @@ +horstoeko\zugferd\entities\extended\ram\TradePriceType: + properties: + chargeAmount: + - + NotNull: + groups: + - xsd_rules + appliedTradeAllowanceCharge: + - + Valid: null + includedTradeTax: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeProductType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeProductType.yml new file mode 100644 index 000000000..3984200d0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeProductType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementFinancialCardType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementFinancialCardType.yml new file mode 100644 index 000000000..c7511fc36 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementFinancialCardType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\ram\TradeSettlementFinancialCardType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementHeaderMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementHeaderMonetarySummationType.yml new file mode 100644 index 000000000..ef71b0b0e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementHeaderMonetarySummationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementLineMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementLineMonetarySummationType.yml new file mode 100644 index 000000000..afd1c3fb5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementLineMonetarySummationType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\ram\TradeSettlementLineMonetarySummationType: + properties: + lineTotalAmount: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementPaymentMeansType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementPaymentMeansType.yml new file mode 100644 index 000000000..957132f42 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementPaymentMeansType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeTaxType.yml b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeTaxType.yml new file mode 100644 index 000000000..1895e4086 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeTaxType.yml @@ -0,0 +1,15 @@ +horstoeko\zugferd\entities\extended\ram\TradeTaxType: + properties: + typeCode: + - + NotNull: + groups: + - xsd_rules + categoryCode: + - + NotNull: + groups: + - xsd_rules + taxPointDate: + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/extended/rsm/CrossIndustryInvoiceType.yml b/vendor/horstoeko/zugferd/src/validation/extended/rsm/CrossIndustryInvoiceType.yml new file mode 100644 index 000000000..2fb68c290 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/rsm/CrossIndustryInvoiceType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/extended/udt/BinaryObjectType.yml b/vendor/horstoeko/zugferd/src/validation/extended/udt/BinaryObjectType.yml new file mode 100644 index 000000000..46758ea1b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/udt/BinaryObjectType.yml @@ -0,0 +1,12 @@ +horstoeko\zugferd\entities\extended\udt\BinaryObjectType: + properties: + mimeCode: + - + NotNull: + groups: + - xsd_rules + filename: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/udt/DateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/validation/extended/udt/DateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..caa1fd02b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/udt/DateTimeType.DateTimeStringAType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\udt\DateTimeType\DateTimeStringAType: + properties: + format: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/udt/DateType.DateStringAType.yml b/vendor/horstoeko/zugferd/src/validation/extended/udt/DateType.DateStringAType.yml new file mode 100644 index 000000000..f755b224e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/udt/DateType.DateStringAType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\udt\DateType\DateStringAType: + properties: + format: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/udt/MeasureType.yml b/vendor/horstoeko/zugferd/src/validation/extended/udt/MeasureType.yml new file mode 100644 index 000000000..a39960f79 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/udt/MeasureType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\udt\MeasureType: + properties: + unitCode: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/extended/udt/QuantityType.yml b/vendor/horstoeko/zugferd/src/validation/extended/udt/QuantityType.yml new file mode 100644 index 000000000..5aa650dc9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/extended/udt/QuantityType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\extended\udt\QuantityType: + properties: + unitCode: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/qdt/CountryIDType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/qdt/CountryIDType.yml new file mode 100644 index 000000000..f48537f58 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/qdt/CountryIDType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/qdt/CurrencyCodeType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/qdt/CurrencyCodeType.yml new file mode 100644 index 000000000..e1c935681 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/qdt/CurrencyCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/qdt/DocumentCodeType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/qdt/DocumentCodeType.yml new file mode 100644 index 000000000..15dc2143f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/qdt/DocumentCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/ram/DocumentContextParameterType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/ram/DocumentContextParameterType.yml new file mode 100644 index 000000000..d4afc0441 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/ram/DocumentContextParameterType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\minimum\ram\DocumentContextParameterType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/ram/ExchangedDocumentContextType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/ram/ExchangedDocumentContextType.yml new file mode 100644 index 000000000..662c5e1fc --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/ram/ExchangedDocumentContextType.yml @@ -0,0 +1,12 @@ +horstoeko\zugferd\entities\minimum\ram\ExchangedDocumentContextType: + properties: + businessProcessSpecifiedDocumentContextParameter: + - + Valid: null + guidelineSpecifiedDocumentContextParameter: + - + NotNull: + groups: + - xsd_rules + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/ram/ExchangedDocumentType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/ram/ExchangedDocumentType.yml new file mode 100644 index 000000000..2500d1706 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/ram/ExchangedDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/ram/HeaderTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/ram/HeaderTradeAgreementType.yml new file mode 100644 index 000000000..04318dc40 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/ram/HeaderTradeAgreementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/ram/HeaderTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/ram/HeaderTradeSettlementType.yml new file mode 100644 index 000000000..9549614b0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/ram/HeaderTradeSettlementType.yml @@ -0,0 +1,14 @@ +horstoeko\zugferd\entities\minimum\ram\HeaderTradeSettlementType: + properties: + invoiceCurrencyCode: + - + NotNull: + groups: + - xsd_rules + specifiedTradeSettlementHeaderMonetarySummation: + - + NotNull: + groups: + - xsd_rules + - + Valid: null diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/ram/ReferencedDocumentType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/ram/ReferencedDocumentType.yml new file mode 100644 index 000000000..dc34e79ae --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/ram/ReferencedDocumentType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\minimum\ram\ReferencedDocumentType: + properties: + issuerAssignedID: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/ram/SupplyChainTradeTransactionType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/ram/SupplyChainTradeTransactionType.yml new file mode 100644 index 000000000..63c5b9ac3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/ram/SupplyChainTradeTransactionType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/ram/TaxRegistrationType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/ram/TaxRegistrationType.yml new file mode 100644 index 000000000..920e34b4b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/ram/TaxRegistrationType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\minimum\ram\TaxRegistrationType: + properties: + iD: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradeAddressType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradeAddressType.yml new file mode 100644 index 000000000..d8c6e0ee8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradeAddressType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\minimum\ram\TradeAddressType: + properties: + countryID: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradePartyType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradePartyType.yml new file mode 100644 index 000000000..b85b5d46d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradePartyType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradeSettlementHeaderMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradeSettlementHeaderMonetarySummationType.yml new file mode 100644 index 000000000..3d7d33601 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradeSettlementHeaderMonetarySummationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/rsm/CrossIndustryInvoiceType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/rsm/CrossIndustryInvoiceType.yml new file mode 100644 index 000000000..f798b8fc0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/rsm/CrossIndustryInvoiceType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/validation/minimum/udt/DateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/validation/minimum/udt/DateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..75d5546c9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/validation/minimum/udt/DateTimeType.DateTimeStringAType.yml @@ -0,0 +1,7 @@ +horstoeko\zugferd\entities\minimum\udt\DateTimeType\DateTimeStringAType: + properties: + format: + - + NotNull: + groups: + - xsd_rules diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/qdt/AllowanceChargeReasonCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/AllowanceChargeReasonCodeType.yml new file mode 100644 index 000000000..b7f840295 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/AllowanceChargeReasonCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/qdt/CountryIDType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/CountryIDType.yml new file mode 100644 index 000000000..9bc238752 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/CountryIDType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/qdt/CurrencyCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/CurrencyCodeType.yml new file mode 100644 index 000000000..771d0bba8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/CurrencyCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/qdt/DocumentCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/DocumentCodeType.yml new file mode 100644 index 000000000..bd289d030 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/DocumentCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/qdt/FormattedDateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/FormattedDateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..cb65cc62d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/FormattedDateTimeType.DateTimeStringAType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/qdt/FormattedDateTimeType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/FormattedDateTimeType.yml new file mode 100644 index 000000000..f9387484b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/FormattedDateTimeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/qdt/PaymentMeansCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/PaymentMeansCodeType.yml new file mode 100644 index 000000000..baf502032 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/PaymentMeansCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TaxCategoryCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TaxCategoryCodeType.yml new file mode 100644 index 000000000..c7bf04b96 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TaxCategoryCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TaxTypeCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TaxTypeCodeType.yml new file mode 100644 index 000000000..bc6e7c12c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TaxTypeCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TimeReferenceCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TimeReferenceCodeType.yml new file mode 100644 index 000000000..a0caa1a71 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TimeReferenceCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/CreditorFinancialAccountType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/CreditorFinancialAccountType.yml new file mode 100644 index 000000000..ece0823f5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/CreditorFinancialAccountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/DebtorFinancialAccountType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/DebtorFinancialAccountType.yml new file mode 100644 index 000000000..27b9c3c73 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/DebtorFinancialAccountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/DocumentContextParameterType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/DocumentContextParameterType.yml new file mode 100644 index 000000000..d689a0f2a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/DocumentContextParameterType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/DocumentLineDocumentType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/DocumentLineDocumentType.yml new file mode 100644 index 000000000..0dd54807b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/DocumentLineDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/ExchangedDocumentContextType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/ExchangedDocumentContextType.yml new file mode 100644 index 000000000..22d268f91 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/ExchangedDocumentContextType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/ExchangedDocumentType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/ExchangedDocumentType.yml new file mode 100644 index 000000000..42e09a807 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/ExchangedDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeAgreementType.yml new file mode 100644 index 000000000..fb1f50841 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeAgreementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeDeliveryType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeDeliveryType.yml new file mode 100644 index 000000000..6b10777e7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeDeliveryType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeSettlementType.yml new file mode 100644 index 000000000..866279fe3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeSettlementType.yml @@ -0,0 +1,161 @@ +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 + xml_list: + inline: true + entry_name: SpecifiedTradeSettlementPaymentMeans + namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100' + type: array + 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 + 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 + 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 + xml_list: + inline: true + entry_name: InvoiceReferencedDocument + namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100' + type: array + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/LegalOrganizationType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/LegalOrganizationType.yml new file mode 100644 index 000000000..82d118286 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/LegalOrganizationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeAgreementType.yml new file mode 100644 index 000000000..cce84c9bc --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeAgreementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeDeliveryType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeDeliveryType.yml new file mode 100644 index 000000000..24ef29d81 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeDeliveryType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeSettlementType.yml new file mode 100644 index 000000000..3425f783f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeSettlementType.yml @@ -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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/NoteType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/NoteType.yml new file mode 100644 index 000000000..31e3cc189 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/NoteType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/ReferencedDocumentType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/ReferencedDocumentType.yml new file mode 100644 index 000000000..509acf69a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/ReferencedDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/SpecifiedPeriodType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/SpecifiedPeriodType.yml new file mode 100644 index 000000000..0797a0f58 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/SpecifiedPeriodType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainEventType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainEventType.yml new file mode 100644 index 000000000..bee10bc60 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainEventType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainTradeLineItemType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainTradeLineItemType.yml new file mode 100644 index 000000000..b2559db38 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainTradeLineItemType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainTradeTransactionType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainTradeTransactionType.yml new file mode 100644 index 000000000..6320338cf --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainTradeTransactionType.yml @@ -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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/TaxRegistrationType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TaxRegistrationType.yml new file mode 100644 index 000000000..165418fa8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TaxRegistrationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAccountingAccountType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAccountingAccountType.yml new file mode 100644 index 000000000..4eaa9e711 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAccountingAccountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAddressType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAddressType.yml new file mode 100644 index 000000000..96a0f65e8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAddressType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAllowanceChargeType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAllowanceChargeType.yml new file mode 100644 index 000000000..11191f213 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAllowanceChargeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePartyType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePartyType.yml new file mode 100644 index 000000000..3c64029c0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePartyType.yml @@ -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 + 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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePaymentTermsType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePaymentTermsType.yml new file mode 100644 index 000000000..a6e8a81c2 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePaymentTermsType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePriceType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePriceType.yml new file mode 100644 index 000000000..2c54692d8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePriceType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeProductType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeProductType.yml new file mode 100644 index 000000000..759f66290 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeProductType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementHeaderMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementHeaderMonetarySummationType.yml new file mode 100644 index 000000000..df0e64384 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementHeaderMonetarySummationType.yml @@ -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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementLineMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementLineMonetarySummationType.yml new file mode 100644 index 000000000..7e2cc4f5d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementLineMonetarySummationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementPaymentMeansType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementPaymentMeansType.yml new file mode 100644 index 000000000..0ad1d7288 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementPaymentMeansType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeTaxType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeTaxType.yml new file mode 100644 index 000000000..9b802625e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeTaxType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/ram/UniversalCommunicationType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/ram/UniversalCommunicationType.yml new file mode 100644 index 000000000..64cb497c7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/ram/UniversalCommunicationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/rsm/CrossIndustryInvoice.yml b/vendor/horstoeko/zugferd/src/yaml/basic/rsm/CrossIndustryInvoice.yml new file mode 100644 index 000000000..eb75afc30 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/rsm/CrossIndustryInvoice.yml @@ -0,0 +1,10 @@ +horstoeko\zugferd\entities\basic\rsm\CrossIndustryInvoice: + xml_root_name: rsm:CrossIndustryInvoice + xml_root_namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100' + xml_namespaces: + rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100 + qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:100 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/rsm/CrossIndustryInvoiceType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/rsm/CrossIndustryInvoiceType.yml new file mode 100644 index 000000000..455608973 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/rsm/CrossIndustryInvoiceType.yml @@ -0,0 +1,42 @@ +horstoeko\zugferd\entities\basic\rsm\CrossIndustryInvoiceType: + xml_namespaces: + rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100 + qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:100 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/udt/AmountType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/udt/AmountType.yml new file mode 100644 index 000000000..2e543f7da --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/udt/AmountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/udt/CodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/udt/CodeType.yml new file mode 100644 index 000000000..b263724cd --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/udt/CodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/udt/DateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/udt/DateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..a84d31354 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/udt/DateTimeType.DateTimeStringAType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/udt/DateTimeType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/udt/DateTimeType.yml new file mode 100644 index 000000000..c434eff1e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/udt/DateTimeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/udt/IDType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/udt/IDType.yml new file mode 100644 index 000000000..a217e4959 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/udt/IDType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/udt/IndicatorType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/udt/IndicatorType.yml new file mode 100644 index 000000000..d1e3cfa16 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/udt/IndicatorType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/udt/PercentType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/udt/PercentType.yml new file mode 100644 index 000000000..b48418247 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/udt/PercentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/udt/QuantityType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/udt/QuantityType.yml new file mode 100644 index 000000000..b83d595cd --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/udt/QuantityType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basic/udt/TextType.yml b/vendor/horstoeko/zugferd/src/yaml/basic/udt/TextType.yml new file mode 100644 index 000000000..693013527 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basic/udt/TextType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/AllowanceChargeReasonCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/AllowanceChargeReasonCodeType.yml new file mode 100644 index 000000000..241cb7a62 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/AllowanceChargeReasonCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/CountryIDType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/CountryIDType.yml new file mode 100644 index 000000000..b5cc0178a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/CountryIDType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/CurrencyCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/CurrencyCodeType.yml new file mode 100644 index 000000000..ba396c614 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/CurrencyCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/DocumentCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/DocumentCodeType.yml new file mode 100644 index 000000000..ccb054866 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/DocumentCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/FormattedDateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/FormattedDateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..61df6c36a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/FormattedDateTimeType.DateTimeStringAType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/FormattedDateTimeType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/FormattedDateTimeType.yml new file mode 100644 index 000000000..3731b81a3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/FormattedDateTimeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/PaymentMeansCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/PaymentMeansCodeType.yml new file mode 100644 index 000000000..1060eacca --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/PaymentMeansCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TaxCategoryCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TaxCategoryCodeType.yml new file mode 100644 index 000000000..68aa2950e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TaxCategoryCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TaxTypeCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TaxTypeCodeType.yml new file mode 100644 index 000000000..3c6035e3b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TaxTypeCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TimeReferenceCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TimeReferenceCodeType.yml new file mode 100644 index 000000000..6ebea3a3e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TimeReferenceCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/CreditorFinancialAccountType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/CreditorFinancialAccountType.yml new file mode 100644 index 000000000..464080b5c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/CreditorFinancialAccountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/DebtorFinancialAccountType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/DebtorFinancialAccountType.yml new file mode 100644 index 000000000..76b4a9899 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/DebtorFinancialAccountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/DocumentContextParameterType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/DocumentContextParameterType.yml new file mode 100644 index 000000000..9ec38b441 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/DocumentContextParameterType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ExchangedDocumentContextType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ExchangedDocumentContextType.yml new file mode 100644 index 000000000..df159078d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ExchangedDocumentContextType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ExchangedDocumentType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ExchangedDocumentType.yml new file mode 100644 index 000000000..5f25a9b14 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ExchangedDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeAgreementType.yml new file mode 100644 index 000000000..6d92cb55e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeAgreementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeDeliveryType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeDeliveryType.yml new file mode 100644 index 000000000..b44342db5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeDeliveryType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeSettlementType.yml new file mode 100644 index 000000000..858b5dcb3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeSettlementType.yml @@ -0,0 +1,161 @@ +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 + xml_list: + inline: true + entry_name: SpecifiedTradeSettlementPaymentMeans + namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100' + type: array + 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 + 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 + 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 + xml_list: + inline: true + entry_name: InvoiceReferencedDocument + namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100' + type: array + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/LegalOrganizationType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/LegalOrganizationType.yml new file mode 100644 index 000000000..d4e712074 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/LegalOrganizationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/NoteType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/NoteType.yml new file mode 100644 index 000000000..9676abbe3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/NoteType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ReferencedDocumentType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ReferencedDocumentType.yml new file mode 100644 index 000000000..700ea813d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ReferencedDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SpecifiedPeriodType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SpecifiedPeriodType.yml new file mode 100644 index 000000000..c9940e9f7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SpecifiedPeriodType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SupplyChainEventType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SupplyChainEventType.yml new file mode 100644 index 000000000..716cbc46c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SupplyChainEventType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SupplyChainTradeTransactionType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SupplyChainTradeTransactionType.yml new file mode 100644 index 000000000..c97e25446 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SupplyChainTradeTransactionType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TaxRegistrationType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TaxRegistrationType.yml new file mode 100644 index 000000000..1491a0fea --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TaxRegistrationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAccountingAccountType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAccountingAccountType.yml new file mode 100644 index 000000000..c4f0baf82 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAccountingAccountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAddressType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAddressType.yml new file mode 100644 index 000000000..013f78370 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAddressType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAllowanceChargeType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAllowanceChargeType.yml new file mode 100644 index 000000000..86eb14365 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAllowanceChargeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradePartyType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradePartyType.yml new file mode 100644 index 000000000..a30f7b83e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradePartyType.yml @@ -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 + 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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradePaymentTermsType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradePaymentTermsType.yml new file mode 100644 index 000000000..4bb3a87ad --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradePaymentTermsType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeSettlementHeaderMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeSettlementHeaderMonetarySummationType.yml new file mode 100644 index 000000000..ef3ec8ca0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeSettlementHeaderMonetarySummationType.yml @@ -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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeSettlementPaymentMeansType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeSettlementPaymentMeansType.yml new file mode 100644 index 000000000..16c76474b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeSettlementPaymentMeansType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeTaxType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeTaxType.yml new file mode 100644 index 000000000..843c908ca --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeTaxType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/UniversalCommunicationType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/UniversalCommunicationType.yml new file mode 100644 index 000000000..f007e9e71 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/UniversalCommunicationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/rsm/CrossIndustryInvoice.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/rsm/CrossIndustryInvoice.yml new file mode 100644 index 000000000..139edd3b3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/rsm/CrossIndustryInvoice.yml @@ -0,0 +1,10 @@ +horstoeko\zugferd\entities\basicwl\rsm\CrossIndustryInvoice: + xml_root_name: rsm:CrossIndustryInvoice + xml_root_namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100' + xml_namespaces: + rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100 + qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:100 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/rsm/CrossIndustryInvoiceType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/rsm/CrossIndustryInvoiceType.yml new file mode 100644 index 000000000..327ee9254 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/rsm/CrossIndustryInvoiceType.yml @@ -0,0 +1,42 @@ +horstoeko\zugferd\entities\basicwl\rsm\CrossIndustryInvoiceType: + xml_namespaces: + rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100 + qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:100 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/AmountType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/AmountType.yml new file mode 100644 index 000000000..0ba27c244 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/AmountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/CodeType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/CodeType.yml new file mode 100644 index 000000000..e3cac5fc5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/CodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/DateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/DateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..cfbbb545c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/DateTimeType.DateTimeStringAType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/DateTimeType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/DateTimeType.yml new file mode 100644 index 000000000..087d056f7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/DateTimeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/IDType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/IDType.yml new file mode 100644 index 000000000..b28c379ff --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/IDType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/IndicatorType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/IndicatorType.yml new file mode 100644 index 000000000..ddd359176 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/IndicatorType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/PercentType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/PercentType.yml new file mode 100644 index 000000000..5496707ea --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/PercentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/TextType.yml b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/TextType.yml new file mode 100644 index 000000000..f7daaecc2 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/TextType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/AllowanceChargeReasonCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/AllowanceChargeReasonCodeType.yml new file mode 100644 index 000000000..e0d766c1f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/AllowanceChargeReasonCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/CountryIDType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/CountryIDType.yml new file mode 100644 index 000000000..d7742a946 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/CountryIDType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/CurrencyCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/CurrencyCodeType.yml new file mode 100644 index 000000000..6f5a571e7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/CurrencyCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/DocumentCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/DocumentCodeType.yml new file mode 100644 index 000000000..3ea503f01 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/DocumentCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/FormattedDateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/FormattedDateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..ca28c48a5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/FormattedDateTimeType.DateTimeStringAType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/FormattedDateTimeType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/FormattedDateTimeType.yml new file mode 100644 index 000000000..0a7e8cd29 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/FormattedDateTimeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/PaymentMeansCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/PaymentMeansCodeType.yml new file mode 100644 index 000000000..695d40f95 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/PaymentMeansCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/ReferenceCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/ReferenceCodeType.yml new file mode 100644 index 000000000..2aa864217 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/ReferenceCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TaxCategoryCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TaxCategoryCodeType.yml new file mode 100644 index 000000000..441bc45c8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TaxCategoryCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TaxTypeCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TaxTypeCodeType.yml new file mode 100644 index 000000000..99a024551 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TaxTypeCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TimeReferenceCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TimeReferenceCodeType.yml new file mode 100644 index 000000000..3fc3d9224 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TimeReferenceCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/CreditorFinancialAccountType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/CreditorFinancialAccountType.yml new file mode 100644 index 000000000..4da97e1c8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/CreditorFinancialAccountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/CreditorFinancialInstitutionType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/CreditorFinancialInstitutionType.yml new file mode 100644 index 000000000..e391563f7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/CreditorFinancialInstitutionType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DebtorFinancialAccountType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DebtorFinancialAccountType.yml new file mode 100644 index 000000000..c079572ed --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DebtorFinancialAccountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DocumentContextParameterType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DocumentContextParameterType.yml new file mode 100644 index 000000000..f8a224cac --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DocumentContextParameterType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DocumentLineDocumentType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DocumentLineDocumentType.yml new file mode 100644 index 000000000..a6e80fce8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DocumentLineDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ExchangedDocumentContextType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ExchangedDocumentContextType.yml new file mode 100644 index 000000000..f7a83bf35 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ExchangedDocumentContextType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ExchangedDocumentType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ExchangedDocumentType.yml new file mode 100644 index 000000000..482a1716d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ExchangedDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeAgreementType.yml new file mode 100644 index 000000000..278cc9c70 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeAgreementType.yml @@ -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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeDeliveryType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeDeliveryType.yml new file mode 100644 index 000000000..3c0a64559 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeDeliveryType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeSettlementType.yml new file mode 100644 index 000000000..6d0b2bdac --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeSettlementType.yml @@ -0,0 +1,161 @@ +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 + xml_list: + inline: true + entry_name: SpecifiedTradeSettlementPaymentMeans + namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100' + type: array + 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 + 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 + 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 + xml_list: + inline: true + entry_name: InvoiceReferencedDocument + namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100' + type: array + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LegalOrganizationType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LegalOrganizationType.yml new file mode 100644 index 000000000..885ba860f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LegalOrganizationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeAgreementType.yml new file mode 100644 index 000000000..b811936e4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeAgreementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeDeliveryType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeDeliveryType.yml new file mode 100644 index 000000000..6d908a8ca --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeDeliveryType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeSettlementType.yml new file mode 100644 index 000000000..9a03bec92 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeSettlementType.yml @@ -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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/NoteType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/NoteType.yml new file mode 100644 index 000000000..00be73f09 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/NoteType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProcuringProjectType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProcuringProjectType.yml new file mode 100644 index 000000000..7524f4224 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProcuringProjectType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProductCharacteristicType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProductCharacteristicType.yml new file mode 100644 index 000000000..52fc402a6 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProductCharacteristicType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProductClassificationType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProductClassificationType.yml new file mode 100644 index 000000000..e7b338f27 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProductClassificationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ReferencedDocumentType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ReferencedDocumentType.yml new file mode 100644 index 000000000..2e2911b7e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ReferencedDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SpecifiedPeriodType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SpecifiedPeriodType.yml new file mode 100644 index 000000000..16ea9db71 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SpecifiedPeriodType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainEventType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainEventType.yml new file mode 100644 index 000000000..e73fac70b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainEventType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainTradeLineItemType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainTradeLineItemType.yml new file mode 100644 index 000000000..e80e5424c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainTradeLineItemType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainTradeTransactionType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainTradeTransactionType.yml new file mode 100644 index 000000000..1b92a3240 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainTradeTransactionType.yml @@ -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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TaxRegistrationType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TaxRegistrationType.yml new file mode 100644 index 000000000..67f641097 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TaxRegistrationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAccountingAccountType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAccountingAccountType.yml new file mode 100644 index 000000000..260408d7f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAccountingAccountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAddressType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAddressType.yml new file mode 100644 index 000000000..42ae8db7e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAddressType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAllowanceChargeType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAllowanceChargeType.yml new file mode 100644 index 000000000..3b59a9692 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAllowanceChargeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeContactType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeContactType.yml new file mode 100644 index 000000000..be1fbcab0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeContactType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeCountryType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeCountryType.yml new file mode 100644 index 000000000..28d9e27cb --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeCountryType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePartyType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePartyType.yml new file mode 100644 index 000000000..ce80d2ec1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePartyType.yml @@ -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 + 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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePaymentTermsType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePaymentTermsType.yml new file mode 100644 index 000000000..151593726 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePaymentTermsType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePriceType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePriceType.yml new file mode 100644 index 000000000..cca93e0de --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePriceType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeProductType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeProductType.yml new file mode 100644 index 000000000..95f6cd33b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeProductType.yml @@ -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 + 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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementFinancialCardType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementFinancialCardType.yml new file mode 100644 index 000000000..817853a1b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementFinancialCardType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementHeaderMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementHeaderMonetarySummationType.yml new file mode 100644 index 000000000..51b9cc93e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementHeaderMonetarySummationType.yml @@ -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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementLineMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementLineMonetarySummationType.yml new file mode 100644 index 000000000..bfc259c30 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementLineMonetarySummationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementPaymentMeansType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementPaymentMeansType.yml new file mode 100644 index 000000000..df960c60c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementPaymentMeansType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeTaxType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeTaxType.yml new file mode 100644 index 000000000..8a359960f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeTaxType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/ram/UniversalCommunicationType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/UniversalCommunicationType.yml new file mode 100644 index 000000000..a395276a9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/ram/UniversalCommunicationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/rsm/CrossIndustryInvoice.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/rsm/CrossIndustryInvoice.yml new file mode 100644 index 000000000..25358a28e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/rsm/CrossIndustryInvoice.yml @@ -0,0 +1,10 @@ +horstoeko\zugferd\entities\en16931\rsm\CrossIndustryInvoice: + xml_root_name: rsm:CrossIndustryInvoice + xml_root_namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100' + xml_namespaces: + rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100 + qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:100 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/rsm/CrossIndustryInvoiceType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/rsm/CrossIndustryInvoiceType.yml new file mode 100644 index 000000000..88fe324a0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/rsm/CrossIndustryInvoiceType.yml @@ -0,0 +1,42 @@ +horstoeko\zugferd\entities\en16931\rsm\CrossIndustryInvoiceType: + xml_namespaces: + rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100 + qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:100 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/udt/AmountType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/AmountType.yml new file mode 100644 index 000000000..7271ee669 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/AmountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/udt/BinaryObjectType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/BinaryObjectType.yml new file mode 100644 index 000000000..71fedff88 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/BinaryObjectType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/udt/CodeType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/CodeType.yml new file mode 100644 index 000000000..a21dd8a92 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/CodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..a9a0d7b8d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateTimeType.DateTimeStringAType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateTimeType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateTimeType.yml new file mode 100644 index 000000000..4a65cdcbf --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateTimeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateType.DateStringAType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateType.DateStringAType.yml new file mode 100644 index 000000000..19fb74be2 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateType.DateStringAType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateType.yml new file mode 100644 index 000000000..bf72f637f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/udt/IDType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/IDType.yml new file mode 100644 index 000000000..4edc5feba --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/IDType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/udt/IndicatorType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/IndicatorType.yml new file mode 100644 index 000000000..7b7e8ec91 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/IndicatorType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/udt/PercentType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/PercentType.yml new file mode 100644 index 000000000..b805bf5b0 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/PercentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/udt/QuantityType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/QuantityType.yml new file mode 100644 index 000000000..a63f504c5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/QuantityType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/en16931/udt/TextType.yml b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/TextType.yml new file mode 100644 index 000000000..e5a693487 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/en16931/udt/TextType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/AccountingAccountTypeCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/AccountingAccountTypeCodeType.yml new file mode 100644 index 000000000..979065a8c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/AccountingAccountTypeCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/AllowanceChargeReasonCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/AllowanceChargeReasonCodeType.yml new file mode 100644 index 000000000..cd8713e88 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/AllowanceChargeReasonCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/ContactTypeCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/ContactTypeCodeType.yml new file mode 100644 index 000000000..91f0fc5f4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/ContactTypeCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/CountryIDType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/CountryIDType.yml new file mode 100644 index 000000000..212c8cd52 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/CountryIDType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/CurrencyCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/CurrencyCodeType.yml new file mode 100644 index 000000000..b223e59fb --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/CurrencyCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/DeliveryTermsCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/DeliveryTermsCodeType.yml new file mode 100644 index 000000000..bd17c7e04 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/DeliveryTermsCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/DocumentCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/DocumentCodeType.yml new file mode 100644 index 000000000..94c697c22 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/DocumentCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/FormattedDateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/FormattedDateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..0cb26cc21 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/FormattedDateTimeType.DateTimeStringAType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/FormattedDateTimeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/FormattedDateTimeType.yml new file mode 100644 index 000000000..6f5b3662b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/FormattedDateTimeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/LineStatusCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/LineStatusCodeType.yml new file mode 100644 index 000000000..1f61d0ff9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/LineStatusCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/PartyRoleCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/PartyRoleCodeType.yml new file mode 100644 index 000000000..ca6579263 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/PartyRoleCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/PaymentMeansCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/PaymentMeansCodeType.yml new file mode 100644 index 000000000..4e50385e1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/PaymentMeansCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/ReferenceCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/ReferenceCodeType.yml new file mode 100644 index 000000000..2ce2500a3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/ReferenceCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TaxCategoryCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TaxCategoryCodeType.yml new file mode 100644 index 000000000..e00a4b325 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TaxCategoryCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TaxTypeCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TaxTypeCodeType.yml new file mode 100644 index 000000000..c8ad93fe4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TaxTypeCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TimeReferenceCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TimeReferenceCodeType.yml new file mode 100644 index 000000000..9b67b9330 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TimeReferenceCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TransportModeCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TransportModeCodeType.yml new file mode 100644 index 000000000..0896a4b5c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TransportModeCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/AdvancePaymentType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/AdvancePaymentType.yml new file mode 100644 index 000000000..6bc42d96b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/AdvancePaymentType.yml @@ -0,0 +1,50 @@ +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 + invoiceSpecifiedReferencedDocument: + expose: true + access_type: public_method + serialized_name: InvoiceSpecifiedReferencedDocument + xml_element: + cdata: false + namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100' + accessor: + getter: getInvoiceSpecifiedReferencedDocument + setter: setInvoiceSpecifiedReferencedDocument + type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/CreditorFinancialAccountType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/CreditorFinancialAccountType.yml new file mode 100644 index 000000000..eb80bdc8e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/CreditorFinancialAccountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/CreditorFinancialInstitutionType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/CreditorFinancialInstitutionType.yml new file mode 100644 index 000000000..af419f411 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/CreditorFinancialInstitutionType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/DebtorFinancialAccountType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/DebtorFinancialAccountType.yml new file mode 100644 index 000000000..942aa224f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/DebtorFinancialAccountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/DocumentContextParameterType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/DocumentContextParameterType.yml new file mode 100644 index 000000000..9bfc9a504 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/DocumentContextParameterType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/DocumentLineDocumentType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/DocumentLineDocumentType.yml new file mode 100644 index 000000000..b2f088e35 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/DocumentLineDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/ExchangedDocumentContextType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/ExchangedDocumentContextType.yml new file mode 100644 index 000000000..b2fbb5f12 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/ExchangedDocumentContextType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/ExchangedDocumentType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/ExchangedDocumentType.yml new file mode 100644 index 000000000..ee2e788bb --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/ExchangedDocumentType.yml @@ -0,0 +1,94 @@ +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 + type: 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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeAgreementType.yml new file mode 100644 index 000000000..e3d30e1ed --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeAgreementType.yml @@ -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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeDeliveryType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeDeliveryType.yml new file mode 100644 index 000000000..6d24ae10e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeDeliveryType.yml @@ -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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeSettlementType.yml new file mode 100644 index 000000000..cdefe3f23 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeSettlementType.yml @@ -0,0 +1,254 @@ +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 + 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 + 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 + 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 + 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 + 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 + xml_list: + inline: true + entry_name: InvoiceReferencedDocument + namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100' + type: array + 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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/LegalOrganizationType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/LegalOrganizationType.yml new file mode 100644 index 000000000..12ba804e4 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/LegalOrganizationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeAgreementType.yml new file mode 100644 index 000000000..63ae50b24 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeAgreementType.yml @@ -0,0 +1,98 @@ +horstoeko\zugferd\entities\extended\ram\LineTradeAgreementType: + properties: + 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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeDeliveryType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeDeliveryType.yml new file mode 100644 index 000000000..5b4859952 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeDeliveryType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeSettlementType.yml new file mode 100644 index 000000000..d81ef79a5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeSettlementType.yml @@ -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 + 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 + 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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/LogisticsServiceChargeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/LogisticsServiceChargeType.yml new file mode 100644 index 000000000..99b0cd0dc --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/LogisticsServiceChargeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/LogisticsTransportMovementType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/LogisticsTransportMovementType.yml new file mode 100644 index 000000000..b32aa595e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/LogisticsTransportMovementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/NoteType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/NoteType.yml new file mode 100644 index 000000000..5804b70d1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/NoteType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProcuringProjectType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProcuringProjectType.yml new file mode 100644 index 000000000..cb8885c58 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProcuringProjectType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProductCharacteristicType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProductCharacteristicType.yml new file mode 100644 index 000000000..c094f81ea --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProductCharacteristicType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProductClassificationType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProductClassificationType.yml new file mode 100644 index 000000000..1a8b7efd5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProductClassificationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/ReferencedDocumentType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/ReferencedDocumentType.yml new file mode 100644 index 000000000..377ace433 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/ReferencedDocumentType.yml @@ -0,0 +1,90 @@ +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 + type: 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/ReferencedProductType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/ReferencedProductType.yml new file mode 100644 index 000000000..de4fbc90f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/ReferencedProductType.yml @@ -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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/SpecifiedPeriodType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/SpecifiedPeriodType.yml new file mode 100644 index 000000000..9f6e7a89e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/SpecifiedPeriodType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainConsignmentType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainConsignmentType.yml new file mode 100644 index 000000000..96a39527c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainConsignmentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainEventType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainEventType.yml new file mode 100644 index 000000000..38a705298 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainEventType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainTradeLineItemType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainTradeLineItemType.yml new file mode 100644 index 000000000..961d3c83d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainTradeLineItemType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainTradeTransactionType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainTradeTransactionType.yml new file mode 100644 index 000000000..e2e87843f --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainTradeTransactionType.yml @@ -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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TaxRegistrationType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TaxRegistrationType.yml new file mode 100644 index 000000000..29bd457e3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TaxRegistrationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAccountingAccountType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAccountingAccountType.yml new file mode 100644 index 000000000..e2abf5702 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAccountingAccountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAddressType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAddressType.yml new file mode 100644 index 000000000..42e3a02b3 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAddressType.yml @@ -0,0 +1,79 @@ +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 + type: horstoeko\zugferd\entities\extended\udt\TextType diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAllowanceChargeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAllowanceChargeType.yml new file mode 100644 index 000000000..901dea52d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAllowanceChargeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeContactType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeContactType.yml new file mode 100644 index 000000000..fe18dd5f6 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeContactType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeCountryType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeCountryType.yml new file mode 100644 index 000000000..9324a7a89 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeCountryType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeCurrencyExchangeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeCurrencyExchangeType.yml new file mode 100644 index 000000000..92b7c9ade --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeCurrencyExchangeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeDeliveryTermsType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeDeliveryTermsType.yml new file mode 100644 index 000000000..f9fe136a9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeDeliveryTermsType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePartyType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePartyType.yml new file mode 100644 index 000000000..fda73fdc5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePartyType.yml @@ -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 + 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 + 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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentDiscountTermsType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentDiscountTermsType.yml new file mode 100644 index 000000000..c7fbc5814 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentDiscountTermsType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentPenaltyTermsType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentPenaltyTermsType.yml new file mode 100644 index 000000000..6d9a6cd67 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentPenaltyTermsType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentTermsType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentTermsType.yml new file mode 100644 index 000000000..95705c8a9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentTermsType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePriceType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePriceType.yml new file mode 100644 index 000000000..b60d79b62 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePriceType.yml @@ -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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeProductInstanceType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeProductInstanceType.yml new file mode 100644 index 000000000..1d0f81da8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeProductInstanceType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeProductType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeProductType.yml new file mode 100644 index 000000000..1d8067fc1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeProductType.yml @@ -0,0 +1,198 @@ +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 + 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 + modelID: + expose: true + access_type: public_method + serialized_name: ModelID + xml_element: + cdata: false + namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100' + accessor: + getter: getModelID + setter: setModelID + 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 + 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 + xml_list: + inline: true + entry_name: BatchID + namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100' + type: array + brandName: + expose: true + access_type: public_method + serialized_name: BrandName + xml_element: + cdata: false + namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100' + accessor: + getter: getBrandName + setter: setBrandName + type: horstoeko\zugferd\entities\extended\udt\TextType + modelName: + expose: true + access_type: public_method + serialized_name: ModelName + xml_element: + cdata: false + namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100' + accessor: + getter: getModelName + setter: setModelName + 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 + 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 + 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 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementFinancialCardType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementFinancialCardType.yml new file mode 100644 index 000000000..d35569be9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementFinancialCardType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementHeaderMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementHeaderMonetarySummationType.yml new file mode 100644 index 000000000..4cfa06dcd --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementHeaderMonetarySummationType.yml @@ -0,0 +1,105 @@ +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 + 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 + xml_list: + inline: true + entry_name: TaxTotalAmount + namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100' + type: array + 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 + type: 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementLineMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementLineMonetarySummationType.yml new file mode 100644 index 000000000..658f61265 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementLineMonetarySummationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementPaymentMeansType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementPaymentMeansType.yml new file mode 100644 index 000000000..18862fc10 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementPaymentMeansType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeTaxType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeTaxType.yml new file mode 100644 index 000000000..2008decb5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeTaxType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/ram/UniversalCommunicationType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/ram/UniversalCommunicationType.yml new file mode 100644 index 000000000..2af58e189 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/ram/UniversalCommunicationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/rsm/CrossIndustryInvoice.yml b/vendor/horstoeko/zugferd/src/yaml/extended/rsm/CrossIndustryInvoice.yml new file mode 100644 index 000000000..e7434923a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/rsm/CrossIndustryInvoice.yml @@ -0,0 +1,10 @@ +horstoeko\zugferd\entities\extended\rsm\CrossIndustryInvoice: + xml_root_name: rsm:CrossIndustryInvoice + xml_root_namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100' + xml_namespaces: + rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100 + qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:100 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/rsm/CrossIndustryInvoiceType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/rsm/CrossIndustryInvoiceType.yml new file mode 100644 index 000000000..bb13c1a29 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/rsm/CrossIndustryInvoiceType.yml @@ -0,0 +1,42 @@ +horstoeko\zugferd\entities\extended\rsm\CrossIndustryInvoiceType: + xml_namespaces: + rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100 + qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:100 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/udt/AmountType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/udt/AmountType.yml new file mode 100644 index 000000000..98f0fcf55 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/udt/AmountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/udt/BinaryObjectType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/udt/BinaryObjectType.yml new file mode 100644 index 000000000..8694e23dd --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/udt/BinaryObjectType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/udt/CodeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/udt/CodeType.yml new file mode 100644 index 000000000..e501a1dde --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/udt/CodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..418906fb7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateTimeType.DateTimeStringAType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateTimeType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateTimeType.yml new file mode 100644 index 000000000..834518fd9 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateTimeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateType.DateStringAType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateType.DateStringAType.yml new file mode 100644 index 000000000..54c76fdc1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateType.DateStringAType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateType.yml new file mode 100644 index 000000000..5a2eb39d1 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/udt/IDType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/udt/IDType.yml new file mode 100644 index 000000000..75d06e1c8 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/udt/IDType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/udt/IndicatorType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/udt/IndicatorType.yml new file mode 100644 index 000000000..22405072d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/udt/IndicatorType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/udt/MeasureType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/udt/MeasureType.yml new file mode 100644 index 000000000..29b64b9f2 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/udt/MeasureType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/udt/NumericType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/udt/NumericType.yml new file mode 100644 index 000000000..5b393fe93 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/udt/NumericType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/udt/PercentType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/udt/PercentType.yml new file mode 100644 index 000000000..acc8c912d --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/udt/PercentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/udt/QuantityType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/udt/QuantityType.yml new file mode 100644 index 000000000..e0ca098ba --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/udt/QuantityType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/udt/RateType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/udt/RateType.yml new file mode 100644 index 000000000..427328a37 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/udt/RateType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/extended/udt/TextType.yml b/vendor/horstoeko/zugferd/src/yaml/extended/udt/TextType.yml new file mode 100644 index 000000000..8e4f144d2 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/extended/udt/TextType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/CountryIDType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/CountryIDType.yml new file mode 100644 index 000000000..c34de3c59 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/CountryIDType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/CurrencyCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/CurrencyCodeType.yml new file mode 100644 index 000000000..2385acc04 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/CurrencyCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/DocumentCodeType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/DocumentCodeType.yml new file mode 100644 index 000000000..2dfe6a1a7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/DocumentCodeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/ram/DocumentContextParameterType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/DocumentContextParameterType.yml new file mode 100644 index 000000000..49fc9bf53 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/DocumentContextParameterType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ExchangedDocumentContextType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ExchangedDocumentContextType.yml new file mode 100644 index 000000000..d6689b11a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ExchangedDocumentContextType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ExchangedDocumentType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ExchangedDocumentType.yml new file mode 100644 index 000000000..9f97d7a9e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ExchangedDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeAgreementType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeAgreementType.yml new file mode 100644 index 000000000..b0ec60e83 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeAgreementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeDeliveryType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeDeliveryType.yml new file mode 100644 index 000000000..95c79baee --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeDeliveryType.yml @@ -0,0 +1,2 @@ +horstoeko\zugferd\entities\minimum\ram\HeaderTradeDeliveryType: + properties: { } diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeSettlementType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeSettlementType.yml new file mode 100644 index 000000000..1edb1dfec --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeSettlementType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/ram/LegalOrganizationType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/LegalOrganizationType.yml new file mode 100644 index 000000000..87f2ea754 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/LegalOrganizationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ReferencedDocumentType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ReferencedDocumentType.yml new file mode 100644 index 000000000..f7ff14a3b --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ReferencedDocumentType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/ram/SupplyChainTradeTransactionType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/SupplyChainTradeTransactionType.yml new file mode 100644 index 000000000..e355ea84c --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/SupplyChainTradeTransactionType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TaxRegistrationType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TaxRegistrationType.yml new file mode 100644 index 000000000..8f4aa3807 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TaxRegistrationType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradeAddressType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradeAddressType.yml new file mode 100644 index 000000000..5a08beeb7 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradeAddressType.yml @@ -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 + diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradePartyType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradePartyType.yml new file mode 100644 index 000000000..645eb7a9a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradePartyType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradeSettlementHeaderMonetarySummationType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradeSettlementHeaderMonetarySummationType.yml new file mode 100644 index 000000000..218a36908 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradeSettlementHeaderMonetarySummationType.yml @@ -0,0 +1,50 @@ +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 + xml_list: + inline: true + entry_name: TaxTotalAmount + namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100' + type: array + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/rsm/CrossIndustryInvoice.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/rsm/CrossIndustryInvoice.yml new file mode 100644 index 000000000..a26f65031 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/rsm/CrossIndustryInvoice.yml @@ -0,0 +1,10 @@ +horstoeko\zugferd\entities\minimum\rsm\CrossIndustryInvoice: + xml_root_name: rsm:CrossIndustryInvoice + xml_root_namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100' + xml_namespaces: + rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100 + qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:100 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/rsm/CrossIndustryInvoiceType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/rsm/CrossIndustryInvoiceType.yml new file mode 100644 index 000000000..495098de5 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/rsm/CrossIndustryInvoiceType.yml @@ -0,0 +1,42 @@ +horstoeko\zugferd\entities\minimum\rsm\CrossIndustryInvoiceType: + xml_namespaces: + rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100 + qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:100 + 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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/udt/AmountType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/udt/AmountType.yml new file mode 100644 index 000000000..13828eab6 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/udt/AmountType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/udt/DateTimeType.DateTimeStringAType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/udt/DateTimeType.DateTimeStringAType.yml new file mode 100644 index 000000000..208cd182a --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/udt/DateTimeType.DateTimeStringAType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/udt/DateTimeType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/udt/DateTimeType.yml new file mode 100644 index 000000000..0a082e057 --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/udt/DateTimeType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/udt/IDType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/udt/IDType.yml new file mode 100644 index 000000000..630fbaa7e --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/udt/IDType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/src/yaml/minimum/udt/TextType.yml b/vendor/horstoeko/zugferd/src/yaml/minimum/udt/TextType.yml new file mode 100644 index 000000000..69137b6ca --- /dev/null +++ b/vendor/horstoeko/zugferd/src/yaml/minimum/udt/TextType.yml @@ -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 diff --git a/vendor/horstoeko/zugferd/tests/TestCase.php b/vendor/horstoeko/zugferd/tests/TestCase.php new file mode 100644 index 000000000..261fa95c6 --- /dev/null +++ b/vendor/horstoeko/zugferd/tests/TestCase.php @@ -0,0 +1,165 @@ + + */ + + private $registeredFiles = []; + + /** + * @inheritDoc + */ + protected function setUp(): void + { + parent::setUp(); + + $this->registeredFiles = []; + } + + /** + * @inheritDoc + */ + protected function tearDown(): void + { + foreach ($this->registeredFiles as $registeredFile) { + if (file_exists($registeredFile)) { + @unlink($registeredFile); + } + } + + parent::tearDown(); + } + + /** + * 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): void { + 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; + } + + /** + * Access to private method and invoke it + * + * @param object $object + * @param string $methodName + * @param array $args + * @return mixed + */ + public function invokePrivateMethodFromObject($object, string $methodName, ...$args) + { + $method = $this->getPrivateMethodFromObject($object, $methodName); + return $method->invoke($object, ...$args); + } + + /** + * Register a file for teardown + * + * @param string $filename + * @return void + */ + protected function registerFileForTeardown(string $filename): void + { + $this->registeredFiles[] = $filename; + } +} diff --git a/vendor/horstoeko/zugferd/tests/assets/dummy_attachment_1.dummy b/vendor/horstoeko/zugferd/tests/assets/dummy_attachment_1.dummy new file mode 100644 index 000000000..938179bff --- /dev/null +++ b/vendor/horstoeko/zugferd/tests/assets/dummy_attachment_1.dummy @@ -0,0 +1 @@ +Dummy \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/tests/assets/issues/xml_issue_206.xml b/vendor/horstoeko/zugferd/tests/assets/issues/xml_issue_206.xml new file mode 100644 index 000000000..a1b3ec6e2 --- /dev/null +++ b/vendor/horstoeko/zugferd/tests/assets/issues/xml_issue_206.xml @@ -0,0 +1,123 @@ + + + + + urn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:basic + + + + 471102 + 380 + + + 20200305 + + + + Rechnung gemäß Bestellung vom 01.03.2020. + + + Lieferant GmbH + Lieferantenstraße 20 + 80333 München + Deutschland + Geschäftsführer: Hans Muster + Handelsregisternummer: H A 123 + + + + 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. + + + + + + + 1 + + + 4012345001235 + GTIN: 4012345001235, Unsere Art.-Nr.: TB100A4, Trennblätter A4 + + + + 9.90 + + + + 20.0000 + + + + VAT + S + 19 + + + 198.00 + + + + + + Lieferant GmbH + + 80333 + Lieferantenstraße 20 + München + DE + + + 201/113/40209 + + + DE123456789 + + + + Kunden AG Mitte + + 69876 + Hans Muster + Kundenstraße 15 + Frankfurt + DE + + + + + + + 20200305 + + + + + EUR + + 37.62 + VAT + 198.00 + S + 19.00 + + + + 20200404 + + + + 198.00 + 0.00 + 0.00 + 198.00 + 37.62 + 235.62 + 235.62 + + + + \ No newline at end of file diff --git a/vendor/horstoeko/zugferd/tests/assets/issues/xml_issue_268.xml b/vendor/horstoeko/zugferd/tests/assets/issues/xml_issue_268.xml new file mode 100644 index 000000000..9d6a2fe83 --- /dev/null +++ b/vendor/horstoeko/zugferd/tests/assets/issues/xml_issue_268.xml @@ -0,0 +1,1338 @@ + + + + + urn:cen.eu:en16931:2017 + + + + XXX + 380 + + 20250228 + + + SEPA-Lastschrift + AAB + + + PAYMENTAMOUNT:1028.31 + PMD + + + PAYMENTCURRENCY:EUR + PMD + + + + + + 1 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593124 + + + Uhrzeit + 14:38 + + + Ort + DÜSSELDORF + + + Marke + SHELL + + + Servicestelle + SS0004702 + + + Lieferscheinnummer + 003969 + + + Kilometerstand + 0102380 + + + DE + + + + + 168.11 + 100. + + + WAT PL 120 + 130 + ABZ + + + + 41.64 + + + + VAT + S + 19.00 + + + + 20250217 + + + 20250217 + + + + + true + + 1.66 + Fee + + + 71.66 + + + WAT PL 120 + 130 + ABZ + + + WAT PL 120 (2) + 130 (2) + ABZ (2) + + + 567 + 1 + + + + + + 2 + + + 0078 + Reinigungsservice (PKW) + + LeoID + 704310.0109593124 + + + Uhrzeit + 17:31 + + + Ort + GELSENKIRC + + + Marke + SOFT CAR WASH + + + Servicestelle + SS3497210 + + + Lieferscheinnummer + 0000002913 + + + Kilometerstand + 0102442 + + + DE + + + + + 1176.00 + 100. + + + + 1. + + + + VAT + S + 19.00 + + + + 20250217 + + + 20250217 + + + + + true + + 0.63 + Fee + + + 12.39 + + + WAT PL 120 + 130 + ABZ + + + 567 + 2 + + + + + + 3 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593127 + + + Uhrzeit + 13:10 + + + Ort + MEDENBACH + + + Marke + ARAL + + + Servicestelle + SS3475777 + + + Lieferscheinnummer + 01011618 + + + Kilometerstand + 0104125 + + + DE + + + + + 212.40 + 100. + + + + 48.95 + + + + VAT + S + 19.00 + + + + 20250217 + + + 20250217 + + + + + true + + 2.46 + Fee + + + 106.43 + + + WAT PL 64E + 130 + ABZ + + + 740 + 3 + + + + + + 4 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593127 + + + Uhrzeit + 17:29 + + + Ort + BOCHUM + + + Marke + DIVERSE / OTHERS + + + Servicestelle + SS0018321 + + + Lieferscheinnummer + 0000002487 + + + Kilometerstand + 0104567 + + + DE + + + + + 145.29 + 100. + + + + 43.63 + + + + VAT + S + 19.00 + + + + 20250221 + + + 20250221 + + + + + true + + 1.50 + Fee + + + 64.89 + + + WAT PL 64E + 130 + ABZ + + + 740 + + + + + + 5 + + + 0009 + DIESEL + + LeoID + 704310.0109593125 + + + Uhrzeit + 07:26 + + + Ort + GESCHER + + + Marke + AVIA + + + Servicestelle + SS0005031 + + + Lieferscheinnummer + 0000020000 + + + Kilometerstand + 0144200 + + + DE + + + + + 137.73 + 100. + + + + 48.56 + + + + VAT + S + 19.00 + + + + 20250219 + + + 20250219 + + + + + true + + 0.76 + Fee + + + 67.64 + + + WAT-PL 620 + 130 + ABZ + + + 668 + + + + + + 6 + + + 0028 + TRUCK DIESEL + + LeoID + 704310.0109593125 + + + Uhrzeit + 07:21 + + + Ort + GESCHER + + + Marke + AVIA + + + Servicestelle + SS0005031 + + + Lieferscheinnummer + 0000009719 + + + Kilometerstand + 0145000 + + + DE + + + + + 136.47 + 100. + + + + 51.57 + + + + VAT + S + 19.00 + + + + 20250224 + + + 20250224 + + + + + true + + 0.80 + Fee + + + 71.18 + + + WAT-PL 620 + 130 + ABZ + + + 668 + + + + + + 7 + + + 0078 + Reinigungsservice (PKW) + + LeoID + 704310.0109593128 + + + Uhrzeit + 13:22 + + + Ort + BOCHUM + + + Marke + MR.WASH + + + Servicestelle + SS9984161 + + + Lieferscheinnummer + 6023203470 + + + Kilometerstand + 0040230 + + + DE + + + + + 1261.00 + 100. + + + + 1. + + + + VAT + S + 19.00 + + + + 20250221 + + + 20250221 + + + + + true + + 0.68 + Fee + + + 13.29 + + + WAT-PL 622 + 130 + ABZ + + + 783 + + + + + + 8 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593128 + + + Uhrzeit + 12:40 + + + Ort + BOCHUM + + + Marke + DIVERSE / OTHERS + + + Servicestelle + SS0018321 + + + Lieferscheinnummer + 0000003012 + + + Kilometerstand + 0040346 + + + DE + + + + + 152.87 + 100. + + + + 43.26 + + + + VAT + S + 19.00 + + + + 20250225 + + + 20250225 + + + + + true + + 1.57 + Fee + + + 67.70 + + + WAT-PL 622 + 130 + ABZ + + + 783 + + + + + + 9 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593129 + + + Uhrzeit + 07:27 + + + Ort + AHAUS + + + Marke + ARAL + + + Servicestelle + SS0070048 + + + Lieferscheinnummer + 01012724 + + + Kilometerstand + 0038315 + + + DE + + + + + 161.99 + 100. + + + + 29.15 + + + + VAT + S + 19.00 + + + + 20250217 + + + 20250217 + + + + + true + + 1.12 + Fee + + + 48.34 + + + WAT-PL 625 + 130 + ABZ + + + 838 + + + + + + 10 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593129 + + + Uhrzeit + 16:28 + + + Ort + BOCHUM + + + Marke + DIVERSE / OTHERS + + + Servicestelle + SS0018321 + + + Lieferscheinnummer + 0000002172 + + + Kilometerstand + 0038800 + + + DE + + + + + 146.96 + 100. + + + + 41.74 + + + + VAT + S + 19.00 + + + + 20250220 + + + 20250220 + + + + + true + + 1.45 + Fee + + + 62.79 + + + WAT-PL 625 + 130 + ABZ + + + 838 + + + + + + 11 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593129 + + + Uhrzeit + 07:02 + + + Ort + AHAUS + + + Marke + ARAL + + + Servicestelle + SS0070048 + + + Lieferscheinnummer + 01014777 + + + Kilometerstand + 0039250 + + + DE + + + + + 162.00 + 100. + + + + 39.63 + + + + VAT + S + 19.00 + + + + 20250225 + + + 20250225 + + + + + true + + 1.52 + Fee + + + 65.72 + + + WAT-PL 625 + 130 + ABZ + + + 838 + + + + + + 12 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593129 + + + Uhrzeit + 17:46 + + + Ort + BOCHUM + + + Marke + DIVERSE / OTHERS + + + Servicestelle + SS0018321 + + + Lieferscheinnummer + 0000003523 + + + Kilometerstand + 0038700 + + + DE + + + + + 146.97 + 100. + + + + 39.41 + + + + VAT + S + 19.00 + + + + 20250227 + + + 20250227 + + + + + true + + 1.37 + Fee + + + 59.29 + + + WAT-PL 625 + 130 + ABZ + + + 838 + + + + + + 13 + + + 0964 + Autostrom nach Energiemenge (kWh) DC + + LeoID + 704310.0110026693 + + + Uhrzeit + 17:32 + + + Ort + BOCHUM + + + Marke + CHARGEPOINT AUSTRI + + + Servicestelle + CP00674680 + + + Lieferscheinnummer + 459A8468BCBE2577 + + + Kilometerstand + 0000000 + + + DE + + + + + 67.00 + 100. + + + + 64.704 + + + + VAT + S + 19.00 + + + + 20250216 + + + 20250216 + + + + 43.35 + + + WAT-PL 68E + 130 + ABZ + + + 905 + + + + + + 14 + + + 0966 + Autostrom nach Ladezeit DC + + LeoID + 704310.0110026693 + + + Uhrzeit + 17:32 + + + Ort + BOCHUM + + + Marke + CHARGEPOINT AUSTRI + + + Servicestelle + CP00674680 + + + Lieferscheinnummer + 459A8468BCBE2577 + + + Kilometerstand + 0000000 + + + DE + + + + + 9.05 + 100. + + + + 2.1 + + + + VAT + S + 19.00 + + + + 20250216 + + + 20250216 + + + + 0.19 + + + WAT-PL 68E + 130 + ABZ + + + 905 + + + + + + 15 + + + 0009 + DIESEL + + LeoID + 704310.0109593130 + + + Uhrzeit + 18:19 + + + Ort + BOCHUM + + + Marke + ARAL + + + Servicestelle + SS0070435 + + + Lieferscheinnummer + 02021148 + + + Kilometerstand + 0068430 + + + DE + + + + + 160.38 + 100. + + + + 67.37 + + + + VAT + S + 19.00 + + + + 20250220 + + + 20250220 + + + + + true + + 1.22 + Fee + + + 109.27 + + + WAT-PL621 + 130 + ABZ + + + 773 + + + + + + DE119375450 + DKV Euro Service GmbH + Co. KG + + DKV Kundenberatung + + 0049 (2102) 5518-444 + + + Kundenberatung@dkv-mobility.com + + + + 40882 + Balcke-Dürr-Allee 3 + Ratingen + DE + + + DE119375450 + + + + XXX + XXX + + XXX + XXX + Bochum + DE + + + DEXXXXXXXXX + + + + 25/642102534/001 + 130 + + + + + EUR + + 70 + + XXX + + + + 164.18 + VAT + 864.13 + S + 19.00 + + + <b>Bitte geben Sie bei jeder Zahlung immer die <u>Kundennummer</u> und die <u>Abrechnungsnummer</u> an.</b> »Ihr Zahlungsziel beträgt: 010 Tage nach Rechnungsdatum. Die Abbuchung erfolgt am: <b>Montag, 10.03.2025</b> + + 20250310 + + + + 864.13 + 864.13 + 164.18 + 1028.31 + 0.00 + 1028.31 + + + 567 + 1 + + + 740 + 2 + + + + diff --git a/vendor/horstoeko/zugferd/tests/assets/issues/xml_issue_268_extended.xml b/vendor/horstoeko/zugferd/tests/assets/issues/xml_issue_268_extended.xml new file mode 100644 index 000000000..5ee3f2ed8 --- /dev/null +++ b/vendor/horstoeko/zugferd/tests/assets/issues/xml_issue_268_extended.xml @@ -0,0 +1,1346 @@ + + + + + urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended + + + + XXX + 380 + + 20250228 + + + SEPA-Lastschrift + AAB + + + PAYMENTAMOUNT:1028.31 + PMD + + + PAYMENTCURRENCY:EUR + PMD + + + + + + 1 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593124 + + + Uhrzeit + 14:38 + + + Ort + DÜSSELDORF + + + Marke + SHELL + + + Servicestelle + SS0004702 + + + Lieferscheinnummer + 003969 + + + Kilometerstand + 0102380 + + + DE + + + + + 168.11 + 100. + + + WAT PL 120 + 130 + ABZ + + + + 41.64 + + + + VAT + S + 19.00 + + + + 20250217 + + + 20250217 + + + + + true + + 1.66 + Fee + + + 71.66 + + + INV-1 + 1 + 71 + + 20250312 + + + + WAT PL 120 + 130 + ABZ + + + WAT PL 120 (2) + 130 (2) + ABZ (2) + + + 567 + 1 + + + + + + 2 + + + 0078 + Reinigungsservice (PKW) + + LeoID + 704310.0109593124 + + + Uhrzeit + 17:31 + + + Ort + GELSENKIRC + + + Marke + SOFT CAR WASH + + + Servicestelle + SS3497210 + + + Lieferscheinnummer + 0000002913 + + + Kilometerstand + 0102442 + + + DE + + + + + 1176.00 + 100. + + + + 1. + + + + VAT + S + 19.00 + + + + 20250217 + + + 20250217 + + + + + true + + 0.63 + Fee + + + 12.39 + + + WAT PL 120 + 130 + ABZ + + + 567 + 2 + + + + + + 3 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593127 + + + Uhrzeit + 13:10 + + + Ort + MEDENBACH + + + Marke + ARAL + + + Servicestelle + SS3475777 + + + Lieferscheinnummer + 01011618 + + + Kilometerstand + 0104125 + + + DE + + + + + 212.40 + 100. + + + + 48.95 + + + + VAT + S + 19.00 + + + + 20250217 + + + 20250217 + + + + + true + + 2.46 + Fee + + + 106.43 + + + WAT PL 64E + 130 + ABZ + + + 740 + 3 + + + + + + 4 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593127 + + + Uhrzeit + 17:29 + + + Ort + BOCHUM + + + Marke + DIVERSE / OTHERS + + + Servicestelle + SS0018321 + + + Lieferscheinnummer + 0000002487 + + + Kilometerstand + 0104567 + + + DE + + + + + 145.29 + 100. + + + + 43.63 + + + + VAT + S + 19.00 + + + + 20250221 + + + 20250221 + + + + + true + + 1.50 + Fee + + + 64.89 + + + WAT PL 64E + 130 + ABZ + + + 740 + + + + + + 5 + + + 0009 + DIESEL + + LeoID + 704310.0109593125 + + + Uhrzeit + 07:26 + + + Ort + GESCHER + + + Marke + AVIA + + + Servicestelle + SS0005031 + + + Lieferscheinnummer + 0000020000 + + + Kilometerstand + 0144200 + + + DE + + + + + 137.73 + 100. + + + + 48.56 + + + + VAT + S + 19.00 + + + + 20250219 + + + 20250219 + + + + + true + + 0.76 + Fee + + + 67.64 + + + WAT-PL 620 + 130 + ABZ + + + 668 + + + + + + 6 + + + 0028 + TRUCK DIESEL + + LeoID + 704310.0109593125 + + + Uhrzeit + 07:21 + + + Ort + GESCHER + + + Marke + AVIA + + + Servicestelle + SS0005031 + + + Lieferscheinnummer + 0000009719 + + + Kilometerstand + 0145000 + + + DE + + + + + 136.47 + 100. + + + + 51.57 + + + + VAT + S + 19.00 + + + + 20250224 + + + 20250224 + + + + + true + + 0.80 + Fee + + + 71.18 + + + WAT-PL 620 + 130 + ABZ + + + 668 + + + + + + 7 + + + 0078 + Reinigungsservice (PKW) + + LeoID + 704310.0109593128 + + + Uhrzeit + 13:22 + + + Ort + BOCHUM + + + Marke + MR.WASH + + + Servicestelle + SS9984161 + + + Lieferscheinnummer + 6023203470 + + + Kilometerstand + 0040230 + + + DE + + + + + 1261.00 + 100. + + + + 1. + + + + VAT + S + 19.00 + + + + 20250221 + + + 20250221 + + + + + true + + 0.68 + Fee + + + 13.29 + + + WAT-PL 622 + 130 + ABZ + + + 783 + + + + + + 8 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593128 + + + Uhrzeit + 12:40 + + + Ort + BOCHUM + + + Marke + DIVERSE / OTHERS + + + Servicestelle + SS0018321 + + + Lieferscheinnummer + 0000003012 + + + Kilometerstand + 0040346 + + + DE + + + + + 152.87 + 100. + + + + 43.26 + + + + VAT + S + 19.00 + + + + 20250225 + + + 20250225 + + + + + true + + 1.57 + Fee + + + 67.70 + + + WAT-PL 622 + 130 + ABZ + + + 783 + + + + + + 9 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593129 + + + Uhrzeit + 07:27 + + + Ort + AHAUS + + + Marke + ARAL + + + Servicestelle + SS0070048 + + + Lieferscheinnummer + 01012724 + + + Kilometerstand + 0038315 + + + DE + + + + + 161.99 + 100. + + + + 29.15 + + + + VAT + S + 19.00 + + + + 20250217 + + + 20250217 + + + + + true + + 1.12 + Fee + + + 48.34 + + + WAT-PL 625 + 130 + ABZ + + + 838 + + + + + + 10 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593129 + + + Uhrzeit + 16:28 + + + Ort + BOCHUM + + + Marke + DIVERSE / OTHERS + + + Servicestelle + SS0018321 + + + Lieferscheinnummer + 0000002172 + + + Kilometerstand + 0038800 + + + DE + + + + + 146.96 + 100. + + + + 41.74 + + + + VAT + S + 19.00 + + + + 20250220 + + + 20250220 + + + + + true + + 1.45 + Fee + + + 62.79 + + + WAT-PL 625 + 130 + ABZ + + + 838 + + + + + + 11 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593129 + + + Uhrzeit + 07:02 + + + Ort + AHAUS + + + Marke + ARAL + + + Servicestelle + SS0070048 + + + Lieferscheinnummer + 01014777 + + + Kilometerstand + 0039250 + + + DE + + + + + 162.00 + 100. + + + + 39.63 + + + + VAT + S + 19.00 + + + + 20250225 + + + 20250225 + + + + + true + + 1.52 + Fee + + + 65.72 + + + WAT-PL 625 + 130 + ABZ + + + 838 + + + + + + 12 + + + 0036 + EURO 95 (SUPER) + + LeoID + 704310.0109593129 + + + Uhrzeit + 17:46 + + + Ort + BOCHUM + + + Marke + DIVERSE / OTHERS + + + Servicestelle + SS0018321 + + + Lieferscheinnummer + 0000003523 + + + Kilometerstand + 0038700 + + + DE + + + + + 146.97 + 100. + + + + 39.41 + + + + VAT + S + 19.00 + + + + 20250227 + + + 20250227 + + + + + true + + 1.37 + Fee + + + 59.29 + + + WAT-PL 625 + 130 + ABZ + + + 838 + + + + + + 13 + + + 0964 + Autostrom nach Energiemenge (kWh) DC + + LeoID + 704310.0110026693 + + + Uhrzeit + 17:32 + + + Ort + BOCHUM + + + Marke + CHARGEPOINT AUSTRI + + + Servicestelle + CP00674680 + + + Lieferscheinnummer + 459A8468BCBE2577 + + + Kilometerstand + 0000000 + + + DE + + + + + 67.00 + 100. + + + + 64.704 + + + + VAT + S + 19.00 + + + + 20250216 + + + 20250216 + + + + 43.35 + + + WAT-PL 68E + 130 + ABZ + + + 905 + + + + + + 14 + + + 0966 + Autostrom nach Ladezeit DC + + LeoID + 704310.0110026693 + + + Uhrzeit + 17:32 + + + Ort + BOCHUM + + + Marke + CHARGEPOINT AUSTRI + + + Servicestelle + CP00674680 + + + Lieferscheinnummer + 459A8468BCBE2577 + + + Kilometerstand + 0000000 + + + DE + + + + + 9.05 + 100. + + + + 2.1 + + + + VAT + S + 19.00 + + + + 20250216 + + + 20250216 + + + + 0.19 + + + WAT-PL 68E + 130 + ABZ + + + 905 + + + + + + 15 + + + 0009 + DIESEL + + LeoID + 704310.0109593130 + + + Uhrzeit + 18:19 + + + Ort + BOCHUM + + + Marke + ARAL + + + Servicestelle + SS0070435 + + + Lieferscheinnummer + 02021148 + + + Kilometerstand + 0068430 + + + DE + + + + + 160.38 + 100. + + + + 67.37 + + + + VAT + S + 19.00 + + + + 20250220 + + + 20250220 + + + + + true + + 1.22 + Fee + + + 109.27 + + + WAT-PL621 + 130 + ABZ + + + 773 + + + + + + DE119375450 + DKV Euro Service GmbH + Co. KG + + DKV Kundenberatung + + 0049 (2102) 5518-444 + + + Kundenberatung@dkv-mobility.com + + + + 40882 + Balcke-Dürr-Allee 3 + Ratingen + DE + + + DE119375450 + + + + XXX + XXX + + XXX + XXX + Bochum + DE + + + DEXXXXXXXXX + + + + 25/642102534/001 + 130 + + + + + EUR + + 70 + + XXX + + + + 164.18 + VAT + 864.13 + S + 19.00 + + + <b>Bitte geben Sie bei jeder Zahlung immer die <u>Kundennummer</u> und die <u>Abrechnungsnummer</u> an.</b> »Ihr Zahlungsziel beträgt: 010 Tage nach Rechnungsdatum. Die Abbuchung erfolgt am: <b>Montag, 10.03.2025</b> + + 20250310 + + + + 864.13 + 864.13 + 164.18 + 1028.31 + 0.00 + 1028.31 + + + 567 + 1 + + + 740 + 2 + + + + diff --git a/vendor/horstoeko/zugferd/tests/assets/pdf_fx_extended_1.pdf b/vendor/horstoeko/zugferd/tests/assets/pdf_fx_extended_1.pdf new file mode 100644 index 000000000..eea6cbe3b --- /dev/null +++ b/vendor/horstoeko/zugferd/tests/assets/pdf_fx_extended_1.pdf @@ -0,0 +1,1877 @@ +%PDF-1.6 +%âãÏÓ +1 0 obj +<< +/Type /Pages +/Count 1 +/Kids [ 3 0 R ] +>> +endobj +2 0 obj +<< +/Producer (PyPDF4) +/Author (LE\040FOURNISSEUR) +/CreationDate (D\07220200316144058\05300\04700\047) +/Creator (factur\055x\040Python\040lib\040v1\0568\040by\040Alexis\040de\040Lattre) +/Keywords (Invoice\054\040Factur\055X) +/ModDate (D\07220200316144058\05300\04700\047) +/Subject (Factur\055X\040Invoice\040F20200027\040dated\0402020\05501\05515\040issued\040by\040LE\040FOURNISSEUR) +/Title (LE\040FOURNISSEUR\072\040Invoice\040F20200027) +>> +endobj +3 0 obj +<< +/Type /Page +/Parent 1 0 R +/Resources << +/Font << +/F1 11 0 R +/F2 16 0 R +/F3 21 0 R +/F4 26 0 R +/F5 31 0 R +/F6 38 0 R +>> +/XObject << +/Image24 45 0 R +>> +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> +/MediaBox [ 0 0 594.96 842.04 ] +/Contents 46 0 R +/StructParents 0 +>> +endobj +4 0 obj +<< +/Type /EmbeddedFile +/Params << +/CheckSum (0cacf48116ace7010a6f22fac5061b96) +/ModDate (D\07220200316144058\05300\04700\047) +/Size 15698 +>> +/Subtype /text#2Fxml +/Length 15698 +>> +stream + + + + + A1 + + + urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended + + + + F20200027 + 380 + + 20200115 + + + FOURNISSEUR F SARL au capital de 50 000 EUR + REG + + + RCS MAVILLE 123 456 789 + ABL + + + + + + 1 + + + 598785412598745 + PRESTATION SUPPORT + Description + + + + 1 + + + 60.0000 + 1.0000 + + + + 1.0000 + + + + VAT + S + 10.00 + + + + 20191201 + + + 20191231 + + + + 60.00 + + + + + + 2 + + + FOURNITURES DIVERSES + Description + + + + 3 + + + 10.0000 + + + + 3.0000 + + + + VAT + S + 10.00 + + + + 20191201 + + + + 30.00 + + + + + + 3 + + + APPEL + Description + + + + 5.0000 + + + + 1.0000 + + + + VAT + S + 10.00 + + + + 20191231 + + + + 5.00 + + + + + SERVEXEC + + 587451236587 + LE FOURNISSEUR + + 12345678900014 + SELLER TRADE NAME + + + 75018 + 35 rue d'ici + Seller line 2 + PARIS + FR + + + moi@seller.com + + + FR32123456789 + + + + 3654789851 + LE CLIENT + + 98765432100029 + + + 06000 + 58 rue de la mer + Buyer line 2 + NICE + FR + + + me@buyer.com + + + FR 05 987 654 321 + + + + SALES REF 2547 + + + PO201925478 + + + CT2018120802 + + + SUPPort doc + url:gffter + 916 + support descript + + + TENDER-002 + 50 + + + REFCLI0215 + 130 + + + PROJET2547 + Project reference + + + + + 3654789851 + DEL Name + + 06000 + DEL 58 rue de la mer + DEL line 2 + NICE + FR + + + + + 20200115 + + + + DESPADV002 + + + RECEIV-ADV002 + + + + F20180023BUYER + EUR + + 30 + + FR76 1254 2547 2569 8542 5874 698 + + + + 10.00 + VAT + 100.00 + S + 72 + 10.00 + + + + 20191201 + + + 20191231 + + + + + false + + 5.00 + REMISE COMMERCIALE + + VAT + S + 10.00 + + + + + true + + 10.00 + FRAIS DEPLACEMENT + + VAT + S + 10.00 + + + + + 20200215 + + + + 95.00 + 10.00 + 5.00 + 100.00 + 10.00 + 110.00 + 10.00 + 100.00 + + + F20200003 + + 20191130 + + + + BUYER ACCOUNT REF + + + + +endstream +endobj +5 0 obj +<< +/AFRelationship /Data +/Desc (Factur\055X\040Invoice) +/Type /Filespec +/F (factur\055x\056xml) +/EF << +/F 4 0 R +/UF 4 0 R +>> +/UF (factur\055x\056xml) +>> +endobj +6 0 obj +<< +/N 3 +/Filter /FlateDecode +/Length 2593 +>> +stream +xœ–wTTׇϽwz¡Í0tz¯Ré¤WQfÊÃ Ø "*QD¤)‚  EbE Q{@‚€ƒQl¨dFÖJ|yyïåå÷Ç=ßÚgïs÷Ù{ßµ.$/?./– 'à{ºÐ#£¢éØ~<Às˜¬¬ ÿP ’·»+=KäþE¯‡$^o{Òéàÿ“4+ƒ/ +ñ6'‹%â<§æ2ÄöYSãSÄ £ÄÌ%(by1'.²ÑgŸEv3;DZ8ç v[Ì="Þ‘-äˆñq~6—“#âÛ"ÖJ¦qEüV›Æaf€"‰í+IÄf"&ñCƒ]E¼)ñ Žÿ‚œÕñ¥\Ó3Öð¹‰IºKŸnnkË {qrR9q “•Âä³é®éiLÞïüY2âÚÒEE¶6·µ¶6¶01ÿ¢PÿuóoJÜÛEzô¹g­ïÛ_ù¥×À˜Õf÷¶ø +:¶ ï›Ö!$E}køâ>4ñ¼$ v¦¦999&\ËD\Ðßõ?þ†¾xŸ‰ø¸ßËCwã$0…©º¸n¬ôÔt!Ÿž•ÁdqèÆâø×ys8|O.š2./QÔn›+à¦óè\Þjâ? û“çZ$Jý'@5RT€üÜP"@bŠv ßû懢5Bmrqî? ú÷Sábñ#‹›ø9Î58”Îò³÷ÄŸ%@T T&ÐÆÀØ{àÜ¡ +¬,Òä€õ` È…`7Ø*A ¨ œà4¸.ƒëà÷Á(˜ÏÀ,x æ!ÂBdˆ)@j6dY@ häùAÁP%B²)@Ê:¤éBz‘[È(2ƒ¼CaPeŒ²Gy¡ÂP,T&j#ªU‰:ŠjGõ n¡ÆP³¨Oh2Zmˆ¶C{£#щèt>º Ý€nC_B¡'Я1 £‹±Áxa¢0ɘu˜"ÌL+æÏƯÁãëñ]øü~ž MÐ%8B É„-„rB ááá%‘HÔ Úƒˆ\âfb9ñ8ñ +qŒøŽ$C2 ¹’bHBÒ.ÒÒyÒ]ÒK2™¬Cv"G“ä]äFòEò#ò[ Š„‰„·[b“D•D»ÄM‰ç’xImIgÉU’k%Ë$OJHÎHá¥t¤\¥˜R¥ª¤NIHÍIS¤Í¥¤Ó¤‹¤›¤¯JOÉ`etdÜeØ2y2‡e.ÊŒSŠ&ŕ¢l¥ÔS.Q&¨ª.Õ›šL-¤~Cí§ÎÊÊÈZʆˮ–­’=#;JCh:4oZ*­˜v‚6L{/§"ç,Ç‘Û)×"wSî¼’¼“«®¬î¥.T¯UïWŸ×ÐÕÓÈÕhÕx¨IÐdh&h–jvkÎj©iùk­×jÖº§×fh'iï×îÕ~££«¡³]§CgJW^×[w­n³î=²ž£^¦^Þm}Œ>C?Eÿ€þ ØÀÊ É Ê`À6´6ä04BÙñŒêŒFŒIÆÎÆÙÆÍÆc&4?“\““ç¦Z¦Ñ¦{L{M?™Y™¥šÕ›Ý7—1÷1Ï5ï2ÿÕÂÀ‚eQeq{ y‰Ç’MK:—¼°4´äX´¼cE±ò·ÚnÕmõÑÚÆšoÝb=m£egSm3 2EŒ+¶h[ÛM¶§mßÙYÛ ìNØýbolŸbßd?µTw)giýÒq ¦C­Ãè2ú²¸e‡–:ª;2ë;i:±œ&õ“9?w1sá»´¹¼qµsÝàzÞ qót+pëw—qs¯tä¡á‘èÑì1ëiå¹Îó¼ÚË×k׈·Š7Ë»Ñ{ÖÇÆgƒO/É7Ä·Ò÷±Ÿ߯Ëö÷ñßëÿ`¹örÞòŽà°7àa n`fà÷A˜ À ª 'ÁæÁëƒ{C(!±!M!¯C]B‹Cï‡é… úÃ%ÃcÂÃßD¸E”DŒFšFnˆ¼¥ÅêŒÆF‡G7DÏ­p_±oÅDŒUL~ÌðJÝ•«W^]¥¸*uÕ™XÉXfìÉ8t\D\SÜf³Ž9ï_?Ëreíg=c;±KÙÓN g2Á!¡$a*Ñ!qoât’cRYÒ ×•[É}‘ì•\“ü&% åHÊBjDjk.-.íO†—ÂëIWM_>˜a˜‘Ÿ1ši—¹/s–ïËoÈ‚²Vfu +¨¢Ÿ©>¡žp›p,{YvUöۜ𜓫¥WóV÷­1X³sÍäZµ_¯C­c­ë^¯¾~Ëú± Îj7Bã7voÒÜ”·ib³çæ£[[R¶ük–[’ûjkÄÖ®<•¼ÍyãÛ<·5çKäóóG¶Ûo¯ÙÚÁÝÑ¿sÉΊŸ +Ø× +Í +Ë +?±Š®}eþUùW »võ[ÜÙÍÛ=¼ÇqÏÑé’µ%ã{ý÷¶—ÒK J_í‹ÝwµÌ²¬f?a¿pÿh¹_yg…VÅI•CU.U­ÕÊÕ;«ß`¸yÐé`KJMaÍûCÜCwj=kÛëtêÊcg~R^ßû5ãëÆņ†GxGFíi´illRn*n†›…ÍÓÇbŽÝøÆí›Îã–ÚVZkáqp\xüé·qߟð=Ñ}’q²å;íïªÛ(míPûšöÙŽ¤ŽÑΨÎÁS>§º»ì»Ú¾7ùþÈiõÓUgdÏŸ%œÍ;»pní¹¹óçg.$^ïŽí¾1òâíž žþK¾—®\ö¸|±×¹÷܇+§¯Ú]=uq­ãºõõö>«¾¶¬~hë·îo°è¼a{£kpéàÙ›Ž7/Ür»uù¶÷íëCˇ‡Ã†ïŒÄŒŒÞaß™º›z÷Žì{ó÷7?@?(x(õ°ì‘ò£ºõlµ=3æ6Ö÷8äñýqÖø³Ÿ²~ú0‘÷„ü¤lRm²qÊbêô´Çô§+žN<Ëx6?“ÿ³ôÏÕÏõž÷‹Ó/}³‘³/ø/~-z©ðòÈ+ËWÝss^§½žSðVáíÑwŒw½ï#ÞOÎç|À~(ÿ¨ÿ±ë“ï§ i ¿÷„óû +endstream +endobj +7 0 obj +<< +/Type /OutputIntent +/S /GTS_PDFA1 +/OutputConditionIdentifier (sRGB) +/RegistryName (http\072\057\057www\056color\056org) +/Info (Creator\072\040HP\040\040\040\040\040Manufacturer\072IEC\040\040\040\040Model\072sRGB) +/DestOutputProfile 6 0 R +>> +endobj +8 0 obj +<< +/Subtype /XML +/Type /Metadata +/Length 4116 +>> +stream + + + + + + 3 + B + + + + + LE FOURNISSEUR: Invoice F20200027 + + + + + LE FOURNISSEUR + + + + + Factur-X Invoice F20200027 dated 2020-01-15 issued by LE FOURNISSEUR + + + + + PyPDF4 + + + factur-x python lib v1.8 by Alexis de Lattre + 2020-03-16T14:40:58+00:00 + 2020-03-16T14:40:58+00:00 + + + + + + Factur-X PDFA Extension Schema + urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0# + fx + + + + DocumentFileName + Text + external + name of the embedded XML invoice file + + + DocumentType + Text + external + INVOICE + + + Version + Text + external + The actual version of the Factur-X XML schema + + + ConformanceLevel + Text + external + The conformance level of the embedded Factur-X data + + + + + + + + + INVOICE + factur-x.xml + 1.0 + EXTENDED + + + + + +endstream +endobj +9 0 obj +[ 5 0 R ] +endobj +10 0 obj +<< +/Type /Catalog +/Pages 1 0 R +/AF 9 0 R +/Metadata 8 0 R +/Names << +/EmbeddedFiles << +/Names [ (factur\055x\056xml) 5 0 R ] +>> +>> +/PageMode /UseAttachments +/OutputIntents [ 7 0 R ] +>> +endobj +11 0 obj +<< +/Type /Font +/Subtype /TrueType +/Name /F1 +/BaseFont /BCDEEE+Calibri-Bold +/Encoding /WinAnsiEncoding +/FontDescriptor 12 0 R +/FirstChar 32 +/LastChar 233 +/Widths 15 0 R +>> +endobj +12 0 obj +<< +/Type /FontDescriptor +/FontName /BCDEEE+Calibri-Bold +/Flags 32 +/ItalicAngle 0 +/Ascent 750 +/Descent -250 +/CapHeight 750 +/AvgWidth 536 +/MaxWidth 1781 +/FontWeight 700 +/XHeight 250 +/StemV 53 +/FontBBox [ -519 -250 1263 750 ] +/FontFile2 13 0 R +>> +endobj +13 0 obj +<< +/Metadata 14 0 R +/Filter /FlateDecode +/Length1 140568 +/Length 56052 +>> +stream +xœì \TÕöø×>çÌÀ¼`x?†fx‰€F^bøBLQÓÒ _eÚÃ2ʬ´‡öÐÞ-‡Q³‡•Õ½•Õ-oÝÞVÞžRVÚ- æ¿öY3Šå­{ýÿÿß,Yç»÷Ú{¯½÷Úûìsø0ÐãE‚†²âÒšù—¾Qì›U‘g—)¹üÚAÀ>³øWŒ¯¶eo<\ +À°šæ5¶Ì¾{Å6€ó×(>lZ¸ÀTôxí!€æ(WÍj9wÞ]_o¸p€*äܹKf-X?­à–#ŸWÌžÙ8ã§s–\†þ´è/o6t»cÞÄ|)ægÏ[°89¼¦ó_ÌÙ2·¹©±þÕ¸`ˇaõIó·¤<iÆòÙXß4oæ‚Æ —mZ‚ò毸 qÞÌŠß̶ǗyMKóün\‰ó1ñú-­3[~¶¿4`)Î'ücà±P~l‹ÐfO v¢üËî¯/~…óíÑ‹&·{°:ÚÖU$ØN =Àöª7÷Ø•êhÙS‰ÚÂ-†Ap+èa1ÆZ@Ú @ûö+`©(%< +ðW¬Wä K#Q|À„@?A”$Q‚Õ½/B·*î{lµÉ8ŸãÁïNÁbææeâEŸ)„J'FÃ^Ãå~"àßébX- ƒñ•)4°ºo^ü¼þt"nÕŠ(}Š?í‰öB™ùê7Öj#N¸­²û-¸L1&ü[}“Å2˜ ]zRþEµm¿> àÚ3îo7„Ÿ¶,wÖoµê3í«·M>\)¾ õ–Ý€÷T×PÞËÓ‰X WJ·Cí)þn?ÑNÐÿº,<¥½‚Ú¿ ÜVYý¾8p™ô.8~­¿“Eì&?Ò‡à’NŠC3” Øæ"0ôës \q¦ýIƒû·íµK`÷æ7ÇûŒ:Ó¾úµ«ƒŠì~ËÈ® J•PÙo\~pV_žN„UÕÛæUˆR> Q*DIÍ'ì¿&ÊÇάÞ@rrÜ—"ü„Ío*DáÞ?%î'ÏÕc»Ä›fÿ‚ó«o¬sÉï­£¼ .éÛß)c;ðš¶~_Â?úû³N=£¹(ö÷· /ô®(ô!mýíg ¯£°C„_;jÊo×çup¼K~«žWÄ¿|fŠ€I|éôçé@"< y2K!_8 +…‹PÈ^‡ávˆŽC=[zâÉB½4ê…ŸQBª|†â«C½PÃØ1l‡m„ûh¿ I¸ÿôóðMG8ãÓâÿnÁ} ì“?{>ñ‰O|B"ÜŸ¶l¼Ö/¯§sZ ›3,ûoMîk> åzÆõ/óQO±×Á<Ԧߪ÷[Â>„%âe°Dq>ëø<ƒ1=ùïöòë"þ1œÒˆ–„q‡ø¾ö=ŒC ~4Š_ÂxüŒ6K| +l’Æbz~.@]‡Z‹ê@Fm@­A­BŽZ,-€Záˆ7A•¸ÆŠoB¢ØÓÄW¡VœIâ~(߇rq# A]‚:µ5u:jê(Ô|®§Œ¯ôŒÇ—8ÐøD +l‡‚ßGºÀ,¸ D8•Â`Åü0Lç oŸØ3ìE‹:ê´v€ Û& -),Àvm ΃,a) Ñç5`.ÙÖûÏîˆÞ}‘ûßðëŸüÿ(Ò30ëúC RTÃb1jÄóa±°õFÌ_ ñ\XÌœ°˜×Ž óÒ,ãåwƒÛ8E–­ÂÏUN<Ãܧ׿°‚þè}âŸøÄ'>ñ‰O|âŸøÄ'ÿoˆ÷ó ÿœ)Óó9SNÿÆçL¹Î]ô3~ùó&ÿ¬éùœùçÌÆ'>ñ‰O|âŸøÄ'>ñ‰O|ò?)ÂÕö|⟜NØú?{>ñ‰O|âŸøÄ'>ñ‰O|âŸøÄ'>ñIZ µÕŽZŠšŒZ‰š‡:ÌSž÷‡ú˜ù¨u¨£PÏBµ¡V¡G-E-àé[»ü#}ûÄ'>ñ‰O|âŸøÄ'>ñ‰O|âŸøÄ'>ñ‰O|âŸøÄ'>ñ‰O|rzq?þgÀ'>ù“Eôh ý%)AÀ¦ÄŸ@büÿ'vPÈAHfH+Âh˜uÐs ÂØ€¶Ã.ø’eŦÇZc³bÇÆ‹×mR™ô¦ÓRS»éº¤WŽKnùïE¡7X 2a$TÊÞš`.´Âb7Wo™±9±CÐÛˆ^o LËL«Ñ 7æ>ÚoFñp%Ø8w“ð¼ðÎf Á__Õ÷ߡʮäO§zå§W|ºò#þ{+ô·´*`Ô@=\àù»$×Ãípo¯÷{á×¥]¾nâQÏowŠ·Š7‹—ˆË¥á¢ClkÅCb—øø­xXüNü^üA<"Ï ‚ "q, é`ƒa0J¡ £s6Ƨ¦Â ˜ ó™žE3#KaX=›ÂšY[È–±«Ùµìz¶í`{ÄŸÄŸÙ÷’(I쀤”’Ÿä/©$µ¤‘´’N +Y³²Q,ŸU‚’ý(øÇ“ÿ’æÏßà×…Zzæ+'=sðÎmÏ»¯œ8]äúKO޳tdko„0Ý#L¿À^üyðl:“Zâ=´üþLûØå™Uã«yæNÙ,ß½ý¿âÞ{ù´©SΙ\_W먩žX5aü¸±c*Ï]1ª¼¬´¤x¤½hÄðaC ò‡ä ¶Y3ÒS,I‰æ„¸ÈÐ } N£Vùû)’(0H/3—7˜œ–§d1WTdð¼¹ } NšÊû×qšäj¦þ5íXsÖI5íTÓÞ[“éMÃ`XFº©Ìlrî+5›:Y}U-¦W—šëLÎ.9=VNK9£ÃL|<¶0•EÎ.59Yƒ©ÌY¾pv{YC)úëШKÌ%3ÕéСÖ`Rƒ)gй¥ƒ¥Œ`rBH)+ìÀ_Ç»uŠIe3œªjËJ ññu² Jd_Ne‰ÓOöešÃÇ ×˜:Ò÷´_Û©‡é iÚæçÔ:ÅFlÔ.–µ·_å Js¦šK©KFâ”g:ÓÍ¥eÎ43:«œØÛs*’ôfSûQÀÁ›»õ·4z,Ê$ýQàI>ÅÞ0a¹7 86!Î/>žåšN;LÇŒsEU-åM0Ýà»-­Î)4ð’=Þ’0/Yá-émÞ`ŽçKUÖàùZ8;Ò¹bº)#£/%á–›œ¢¥azÓlÎÆ™íæÒRŠ[M­Ó^Š {£g®e™6¬ßØ€“˜ÃÃPUë´™[œ¡æbª€_ƒ9ÕµrO3gh‰š<­œ¶²R>.SY{C) û2WÕî‚÷Ž\“a[äB‡3¼ÅRÖ^;c–3®Á0÷ç,S­!Þi¯ÃðÕ™kgÖñU2ë©°»x¹G¹Îí¤ÚÞÊ|æ~Iþ¦ZÁ ÖñÕBƒ©/æâaX Çå’³|E‹‡™j™¼Õ°O žêç3bRI/yÓ’ +C|]<ɯ Éà“"ÉéßÇ— ½c¢~N;4ªÍ”j*›YÚg€ýœ*<ôxxœ…§cláÏ—³Â[$&á‹6ÝÈ&¾Š‘&'L0Õšgšë̸‡ìjùÜx¬åõ­¬6WVÕ×Ê«íÙ%5ýrTžO9'Äc±7#”à,O3x—UÎ’ó½ÙŠ“ŠG{‹MíþæÊêvîÜìq&¼ƒpÒJËèÆkòƒsñÖ,ÇÓÍ\ÞhÆ'Yy{c§{Åôö»½½¥¬av!÷a=£Ý\];Ì ubí2ÃRÞU0T²ÊšâŒt<{Š;ÌlUU‡­ª®¯Ý¥0­ª©u L(i(®ëHIJÚ]&<Ûe«À­ÜÈ3&žáž&bÆ_®oØeX!—J²AÎ7u2mþ^ƒ¦Nlz¯M@›D6»lã‚‹9CŒÇm™i_ž‹ëf·7Ôñ› Âq)ñ‹9™y8óˆ&(µNµyf±Sc.æö"n/"»’Ûýpc°p†ÁágR{ƒÏ)ÜPµ``´EîÒÔév×ÔÆï3tÕÅãV;µ¾Ö©Jó_‘tÖŵÍ£œ+šù8ÀQËÛú%nªÃmëuˆUF;UèAåñ€5Êå6|;b£&\\@¹ý +Ì8WÔ9ëÒx§µsêäí¬wB…¹—|*,¼#[]{°9[¾7ñVP']š±Au-Y ˜ÅÎê(H~Zy“‹šLm šªq«ÓYª6e&‰’e¦¬jƒ§ø´Ä$NíTYÑ!~ñ´ÆÊoIE’_] ^Î]å©€}ë‘¥O(= 0:X4š¿®Â¡òªÏp7U0ѼO>hÙ“;uI£ñð§ö´˜ó½ýù¡ñøØKV?>s-Æ]Lªét?`^ßG2ÒÍüáÀ7&váÆ†ºö“ ÎÉiéþ'[u²¹½Ý_7pŠ—¿®—h—Jüzd¬X‚[~¨8¯×ˆ™pª’hƒ¨ P÷£Jb†8ò!NL÷0MäÊK|³÷¢nGÝ{ÐhN.ß%'bLå#›Äa/‡Xˆ,@æ#‡ 󃑹Ȥ™€ŒGšÀi"¿ÏçWq8•an(ÚÅ,¨AäT®'wU‚P1JQ¢Š8êd¬C–¨W ®CÝzÕ‡ž€s±G†mMXÛ„µMèÑ„-LØÂJág—16®SøÉeLCüËeLGüH8J8Be?Pî{Âw„Äo ßPÍ.Â!2~MøŠð%á Âç„Ïÿ$tUˆO)÷ ácWl0â€+6 +ñ‘+Ö†øðá}Â{Tå]ʽCøámÂ[„¿öÞ$¼AøáuÂk„Wiû¯^&¼DÝþ•jþ…ð"áÂ󄽄çÏž!ì!Ÿ"a!0˜KÈ!d²™2D抴bÎFF+!ƒNH# "¤RÉ !É1‘H0»"ø†NpE"âÉh"ÄŒ„XB Á@ˆ&D" „pBõJ=„1˜DÐ AKÐÔùô'ø‘QIP$‚HŒ2˜›ÐCè&üB8N8Fø™ðá_r·ìGyFì(~ |OøŽp˜ð-áBáákÂW„/ _>§þ>s…›ÿ$t…ãcŸ>q…ç#>&p…— >r…—">$|@xß^†xÏ^Žx—ðáäúmÂ[äìïäl?áMÂäìoÔîuÂk„W û¯^¦v/‘ë¿þBƒ‘ðõ÷¼+¼±—‚ºu3êè¡>ˆúêý¨÷¡Þ‹zêݨw¡nB݈z§zvÜÔõ¨·¢Þ‚z3êM¨ëP×¢ÞˆzêõªÙqkP¯C]z-êH•ð‹p &Aœp9âØrW¿/qó­µ€0ßÄ·V+áBB ¡™paa.á|Ây„a„¡.=G!¡€OBÈ# &ärÙ®@¾O³™„`BAO$t.\”N¦%hj‚ŠàOðséøR+í“‘ß v¡Býõ+Ô/q9?BýõÔ÷QßC}õ\– ¾úꓨO îF}õ\ŠÛQ;Ù +ŠôRWßòK(8‹ ‹ m„B1Åa$ÁN("Œ §)‡B !»DQ\ö¸{Ÿüp'À^TQËE„jZõ‰4²*ÂÂxÂ8ÂXÂB%á,ÂhBa¡œPF(%$âið&BÁHˆ%Ä „hB!’¦A·ß†ìFýõ8ê1ÔŸqBýê¨GQ þ€«ú=êw¨Ÿ£~†úOÔƒ¨Ÿ¢~‚ú1®î>ÔWP_F} õ¯¨A}õÔçQ÷¢>‡Ú‰ºWü1Ô¨ÛQ·¡ÞÆW_è¦/#\L˜ã +ÂW!6›p.…ea&a¡‰0ÐHh L#L%L!œC˜L¨'Ôj g&„‚`¥PgÒ i„A„TB +!™`!$ÑÚ$ÌA"ˆÀèŽûÝH7jêØ·PÿŽºõMÔ7Pÿ†ú:êk¨¯b w¡®“â®­q—3kÜe+—n^áX^±ÌqÉæeͲ¡Ë*—‰šeÄEË6/{o™òâŠ¥Ž‹6/uHKC— +ê%‹‹7/rh1íŠ6GMÛÁ¶#mbh[MÛŒ¶mëÚö£ÁïÞ¶ím{ÛÄN÷{p[þÐòm×· ¡X.@ äæø6M@ù‚ŠVÇüÍ­©5·Uz¤•heBf+›ÐÚÐ*`­m­‰)å¼öàÖðèr}kf«½U¼°¢ÙѲ¹Ù1¾¹¹yyóÆæ§›Ë›×4 [1%Ø›Uºò *æ9>šÇà Á zÔ=‚Û%ª›w =Àà[¡ÇîfçcÎÃ@̱žë˜½ù\Ç,ë ÇÌÍ3MÖéŽFkƒcšuŠcêæ)Žs¬õŽÉ›ëuÖZÇÙX’µÆáØ\㨶V9&n®rŒ·ŽsŒCûXk¥cÌæJÇYÖ +ÇèÍŽ l”µÜQ&æÅáŒøÕb\apZà·î@ik ÛðtÀkâø€iÍb`Ï‹z{€5«…¯à{8Ž÷­ c1,õ7~âßžËó@'î%D¸¹¿ìyÈý%},k1!YNXÜÁm=k{:{^Uj@/·Õ /£õ0ërŠxÞÇóÂU<-·8ìwgÏÖžý†Ó­Ð‹a ,…‹`\Ëár¸®‚Up5Æb9¦¯ka5\kàz¸n„µ°n‚›á¸Öø ãxÜ =e<'þ»Y.å%wÃýðlAÞ÷Â}ð<ˆù‡1ú[àQ´‘…ò eÜ…ÖûÑÊkqÛVüç„pÁ6ØŽkFyo®öÀc°¹ Ws7<OÂS¸Ž{peŸ•mÜâÍŸ¾&]Ÿƒ½ð<¼/Â_௸3^†W`¼ +¯ý®’ç{-<÷:ü ÞÀ½¶þoÁÛð¼ÂGp>Á]wè”ò`w±ÎžZc­—X³ kR=ªó¾\ú…ìa?¶=™?e7¦øêÝ,¯ÐzyùêñÕ¹WŽ3_­˜ç+ô@ïÚðßMzדçxzƒg5źAoüŽÚ«žÕ¡x?ux,xÉ>O,^ô¬÷óToÛ—å2—ÜîÙ^¯'"J3ü{Ÿè¼ß'†ÿ„ÏäÈPô¨ôDôxƒX‡G™ûèÛO°-EŸ·åö¾mxÙ»˜ÿO‡CiÎ¯å•ø>ïMî)ï‚oà[8*_ÃwxžüG0ÿ#ZcîTëÉ–῟àg8†+ø t÷ÉuŸTÒ =¸Æø‚Á&BÏ‰Ô «¬S0%žiþLÅÔLËt,€âëŠßI%šÞ’ SJ´”©dK0 a¡x^F°HÍ xnÆ2#‹cñ,¡OYTo‰ KÌ,‘%yÊÂå–Q½mã°FDŸº©,“-Â+ÿ}.¦³X.̆°´d`>ó…X–)³&Àt˜ Ç_¯ ÿP##ž•-ºïÂa‘Ö’´!SÊRz¶Df޾rmAiFx‰±°¾âö§†T‰cW”µL‘’œ.ÍNON©º¸ÆV]š«Wg?}”<"5¼Çi°uÿœ1*3ºçúˆŒþÛ´ãÝ_KZ…ïé«)z®H{Jx ’5BÕî´ý]Eü‚ñÚÌðÄïl‘J +  ?78/·Ž2Ìsó»?,Ô(ðñ-%iE¥:¼hr[éÊ·nžP{ç+óf8J j¥(©TÖÑ3ËÇ.q¤Ûξhlù¬Ñ6Zë/í2GG$ƇO¼çÈÝ÷1x´>8ÖbޱÄEkÍi梶ûg·>0wp|ŠÉ?2ÿÖ<ße{p—C4S”ž†á6J¶®*Yv2ÿŽ™]ÙoǧñÙâ-S`³éùÙ`xì?à‘¶†pÊMdŽ:)‰“SªºòÈWªÔ +nˆžlv•*§U=KØ<}.ú +’:*ÙˆG¿¦g¯&–uÏZMd2¿KV»‰M¯dØé‰—_H§°Î®‹c¬_J ë©Õ±1~z &ggCˆûðc˜ ‰RvºlÃJy²lŒ²“MÞnO¨Š’Rœ¡g~iž£8ѳgG`o9Ðè}âd +ëðyªÖâ„¶¥§‡©:…WìvKž¯Ö&êO„­€‡>šß ø~Íf× T«w”K2 ¨ž··°P¥cááÒM\^êÈ‚(¿ž%§Dö"¿PSvrJnœ68ªçvy¸*Y¤QªÑë¬î ½GÅsš§¦ûÁ¢ RKhU%&÷غw¦Àó|ªÁÙGÃho¬Ãð¸Õ€*pb˜¼yÂøÏ|N<"˜mŸ<ÅÓ•÷tôn~ìÕàã@ݽ5>Ã3 » Š Œ©->nñ.Êño5Q©´2Ê ñY0 Þ¦±Ù5ºÌÌ›MmŒŒîflOÌÒjÕ˜Ø ‰yUQZMän–Ýê>¼]oÆdáAd7ñT„ž_utÀS˪ŒK©Šsôî~þšÍï|¿ÎΦ{)(GÏ/AÃm99A98éÿÑNúíZ3ã/ñø:ÏÌýžòû<Ëá{CޤòBMlfRbfŒVè¹Z +ŽËLHÈŒ {n4FÚc5y[¬Å™&-‹”X‚..5?©ÃÕgóÇ?ˆ[ATð süÓ^û¥9yæ‚A¿t‹lPab`¶ò<‘¥NE0 ‡m´ +%ª­¡ü·±ŒÖlÄv0æOLåq´cRS¬ Z=Oi5ÊÀN¶l'>ñùÓÒÊ@éÝ*òM¯ûixÜœ8¿lAl×wé0o;sxxØ©á 1Š9–>ÛUêÔ’BZÌ9i)Q=OÅF’¤1XÍÖhõ”Õ–ÜÔÄ_ÂÓR,ÁLµ1ÖÄk”úœ×)“èB+x\ÌÈ%®›ÍÄî®Xã¿þÜ!’ vlêòë©òm íâ7b{{nìÔ9JOÿíÙ/üí¹ƒ_þË3k>wïÍÁ¦f«L—ÆþËô×öw~eÝM߀–ò5ÁRJÀRšÈS¹­Aïp›“1GÈL».C¨ƒt&Éöñ½#ŸšˆÉv­Üà1ÛfÆê²è| ¶0ÿûÛê èk¬ÚŒ ѾvÖ¨©+0¨¹¶ÒV‹X)4~þÒh¤ËýQ­ç¬Õì—æê®ßsmø9XuÁ"²|ŽâÛt +6æÄÓ¶ ‰ùÛŪ!iSÐf™hØf‚kÿäå·‰gAFÆùk?‡8±G€/êAÇÂPì¨r´*«l¨£­³’rôÒSŸƒjõ¢wêRò³½'þÓ½_8žç:eP<²ù-í›Wø¸¬$¨‰·ÿܽ+Úû0^õ‰KDiO¿í»iNWK~°"=ˆ1_+ò"ƒ‚‡˜@AYšóš“ê tNfrŒIµÐb¨A•oй:_ù:ø–ufÁÀ ÀUq,68A­R»¥ôz‘W‘JoG* ˜TR¢|CšÚšb VšD[Q´‘`lMñXZ#fbP{E £’‡ 8KPZÅfü·*é³p J°#XC)VüØ€=1#cœPƒ Y¸ *ÇøF-"õ¨¨ºŠ¸ùRöõ‹Ê× 1gü’Q³¢Ú"4z½!ÝÔ”ÑT–‚}–¯áLù?hhCG&–q*Äè‚:LÐ83ªœJÏ£’“âmHçÅNØ\Nì¹8‘…•Wȹâgy¥[·@éÆÿèé\=}[oyÆ ÚÑ‘éG§št¬7>Üê.GÍf=op«RºðŠÖÏÏÆ[‚z´§mc!å’{Yü1ÖkïÞZð¯Ì†‰¿s5zÈs*?ÐyâåÍδWS~GíN»\wùßñO­H#Ò>cDüg±Ÿ# ¢Gçœ6Ôææ¦w·bó¨út<ٙĒ‘yô¦“âHç¥W'.r_]Û·@×YJšÆ?!µ¥ ë÷}÷x¡ôà÷÷†ÇòÍV†”È$Œ·e4 Šw oº£¡ÔìgÄ”ÿj0a³+N¼üÀ‰Wî“ìÖdÊÆ)‹Ó’\wwqÝ}c~“Í$Ñ¡E‰À"T¤ýP‹þ +§Eßµh41#Ÿñ,y’äYâݲJrËÈÿòHù Ž–‡/<Ü_þ‹«°wÓM7­½­Äbî'~vo+vîè ö¸!uéÆÈš#WhOQp%¤Óï9#ujœDjžGå§•,Ê©¼¨jF6¼CuRTµœ=àÂ.Tâ%„]ÝBa7 +!¼ô¼P¬<%ð¥|])‘K B*—”Ï¢÷—È->Å_³TÏZ-^õ&xb1ûôÒrYjðÁû’pWOþc(æ‹Ñ?#F`;ò"VåAÒ'IPÕ}ጕ¦-ˆÕB™U© Ä<Ú8ëœ2@ç4^¹ ö/ºòÊTa8¥T•¿Œ®—L’ð’Ï1ö ²eU)ñ4ÆÊ”ÁgK(ßKñFáçXo^ÝÚË¿'ìDèöûfív¨­šAŠç±/óîDÕ‰xPéihßL +NŸ·lÕΣm';ð«•,ØUP/]LÑlôÔ6ìPEb^ ¨jšRJ‹TéÁ[ßJ¬>wt[Ίú€%1zÐîÒé=«nØ=þ/O ¯zê—ÇŠw®Ë€$rÔá7@ÃN¬;2²úÞµ™ìW”Îk6{uÒ€«(q=È=U±ƒâ ŽB?[Þ^yŽ¿UÝk8ެ<®}\»Ñ@Ýð s”rš»J–¡‹è„Š‚ûh™ ~´£öøÛR´™X°¼ïãä3À‚¿ ,W„±ÆŠýþ+ø´f$÷mă½2ê›ÓÏc‡@¥GcG=Ba¿ÊÉ}`ÚM«¬Óª*bœlÈ)†q_íÒ–A|GQ;Žÿ«ÌÑ68UâòËWa« 6ÐàR¥¬ü{4#aÄ8·.\¢”¡ï•ÅÐÖ¹5þw)oõÒra‚Þ"Qê,êòÓe«Â¨–#|ôÁÞë4Âóâh bÙ40õìI‚‹3¼,èƒþx•ð‡½«Q_*Ûƒüå9t%ø\b:Aãù +œ§ŒQòEš‘Â\Dõ§»!'uËâT4ên%Àöœ +q7NEõ4nc§lÛ•¤P]ãPm‡;bF¨ßÁ&¯^fê€Åd6MZÃÉlzù"mIøØ„•ÂÊ?'š;Q«/ÿ¯²lÜBÅØç¢¹˜ƒù%ñk™#ÜâÖ©MòƒŸ¨ x“àMüsõÕ™`DéÎ.Dz¡"¬øY@µ‰t©áAA+‘߀ÁX›¦é>|[½ÁT3ÇAÔ<¢&Ô³üPÉú:§d=•,"[=ÐnÈWåÌet(âXþ¡ŸÞwô‡ÇWöï‡_ø]7ÅÔ¥œW«õÖÕÒìõÉú?ÓºçnßÉyeÚÆÄX4(z»·üå?%cšiç¾t[@ƒ½1ùw“‰òóõ¨ŠÄtÃÐÎÕ™AI–O™c‡gñ;€§É"™Y©SÅÂÓâˆXÊ3s*§” ÃÌ£ßÚ¿ Àõ<Ÿ{êd"R+þ"z0(Q,üwb%c¹ÿ–UÎÐîÜѫ⮴x;;”ÊòUÚ9lÛíA[¸{ ¨6µÝHøgHÂ…‡ûŽÜ¼ÖjP‰ÒØÀð‘ €C€ €{‘·#ie»¿ Âå7æ’ʰªŒg[U0ùXÃ*P϶¶²€šSÐ)x—¿Xᄆ×꣨Y¦Z *+{‹q¶Dà N9^’Û|q_…»mrd'4üDf±Îc“³~ÿ¤öyl‘€L¼™D¨-GïÎ7ü¯–Î?§¦ +ãgÁb‹HíÍQëJˆwåp{µtïçR \—^½Ø™†_øª'©7^å¶š€Ÿó®]_©së×^`Y!‹Ã£»D½e8qñ»÷¯¿«äf¬I¯/ieÔl3›¼±©ò£ÔJ7ôÅôV%µ*¥;µ2)`ÙßèXJœ”è›ûVsÈçvÞ¿Ré–[ŒM·Ï̬ë©ðµ¹Î¶íŸØréuŠ/ô)ôRW£­·çÒs•Wˆ1ÔÊ:b­~…Þci‰›fž»ÏN›Ã.³Ç Ð»Œ[Ǿ{ K’¦\¤ëöÕI’bÔ*ž!ò5rr7rxÙ¿cŸÇ6Ì2Crê&stº==ûµìºyloŽÚ_|otÍ;ý‡ » ;SÈ$Ú;{[) ê#Ǭ¼½`…ÇÄ£¥žyÔzRÒËué‹©*M\yÌ%nÔCù¨òÏ« UU`1N˜ÉÕ†¾Ž¢Rx°W†„ëfýÀdhØþä¶©Ç&c/@µšc­Z§Q-Q‚V9cY{ñ–‚{J£…ènÑø²>O³_gðJIL«Tº+’ ü¡Þ{r;ñÓ¦®Hמ±D|Ýý«)CÀ–‰—÷Lô‰¥b±Îk$TrFÌØŠžŠglÕ]ÑëýYO¸Ã«0@Oª²È{’«Þç‹Í"XÅ€Üò2¹ aAÍú¸‡hKö,O×űÛr”ÆÕKgýBªleÞ—“û«ãÜ}s9y‰, +¯šëè+ñé@úߢ~Ò¦>ŽªÖixÕù8Â2øË”1hwLôÊÏlØú©éÍMlƒã7¾„•y¿iKS2Ö©ƒ+ÌÉt““ߘ¥ô–þÑ¡ã³[ö?¼ÐÞŠþ[eäRÊBrtº±yçXJáÎ jýµÓ #‡‘¦4WÞQ)Ü +`€› h"˜%ò"³ŸA†–BI`Åab}‰ø„5>Ï`Âï9'ø›ø›l¿ñ/ˆ\)ÇT¸\jdÐ’Ôþ@úלUˆÎáWAÆ»($¿‰='Â7NÀ^êua°3'ýúÑÜN ÈãZÒeÀÏþ&Ž%1~:è½ô[KëDW÷T_BâŽY˺½Ýûg´vÜñ;oýâÖÄ»øúÉD>nÂÐ÷c‘ìD—[cЈÕ.“Þ¡WÈUÛÁïܵÿ{Çz»÷}i£sçÞö±øåË<+äaŒEíœVýÚÈiÕ¦ËïcŸù£ Ù#p¥W"˜<!5Úf›òfv¾6†ï8KœEe¡2<‚™á|úÒùôynN‡º¾ÿY8[“jP5ñš1öYBBìbr,~3ó)b¾ÂXS^oÒFߪÑà¥ÝÞÒþoVïØ<±X"VùZã|¨¸«wì>> ¬p}L¦™ü<"įɃÈÈú¹|Þ=æ…·3‹1z­©Unµ[dÓ1 €fn]~¬0Ÿtözôq°Î3ÙB°h-2N»»˜JÁ,ÊÁs†ä4§t Šy5œ.¶r×’ ðSµvÕ^&~-Slœº–4@4<ê¯VReùcK^‘¯´o8ÒkbHà¿ÔF—¶%…°¥}#ἉVHâÝD@$ÆÆ¯†íj»×XS€÷2ùmIðâ¾±üÐúë£àý寫¨XÚ.dj.ÎLk sëìö¼+šßN—ò=ÓèŽKsÛû'{ýÐÇòî9ªTh/F ¦"…<¾¼œ(t!Íë%cÎÓ}K—$"ч³:ƒ S«„jGÔÇÁš°Ój,H2” FLù‚aC´Í#ÿ4Ÿþž¿óÕãXsl£¥£9l”ã¨Ô” zÁÿu?зápÉí^¦ 9.˜âj_[pI+.­{p}”K¥ŒT + ŒÏe _áž.yØõÈ#s'NlùôÀûÔ­cc¥5ÐÝ·<±tM›rÒ¦c x܆|8î½õÓ…G éZs+äAq°°³8Q, ælÑÏá”æÌýªÞ<ø«“dž«¹â±æAÇe ?…ʵD¼3,ô2eå58üþƒýÏ GI&b”¨Ä’ ø6¦ë>®ò´%øÊÓ—e›.QÚ ÑRO$¢D+ž äÐÕþ¾ÎÕ„£Å]P@÷|IdôB¾–¯HE žá*¶5ø‘=æi7½xÑ ãÈðÉ•ÈYì;…8€/Ž8¡m4%"#…ôÀ¶¼4A޹¦„UÌ£‡N“M¶hâÜðÕ‹Ê‹ŽAž5è?]-}ã×ÁÌ ”n¸Ì™ ›]2™«9Ì8ešz”¯t,_qï>°Ób£•"…ΪkL ï³,ñ_Ú!“9Ò>oÊ)—;SkX/.j4CËõsÂOˆH]^1чØaäÞ¹ááèˆÓ\d"r32;MEÀ#ËÝóð†(ÌÒžöì‚€Ú,Iöì…ž´%¿¡°>éë:³0môÒÅ + Õ´[­‰ +¬•m×â|G]¿éº,ÆËÀM,’F®æ@4 seBÁŒK.we‚¡Œ p xAyî6¿’LÞäÒfavéâþE6mSýë¿nŠ–0o¹üª¼³ƒ\ ÄÿrÐ0Ò3çpxz)˜z†MhîÙt| Wͽ3ï©&sS¬°RµñW…°åûØÿcAœ–ÐÞHXwÍÔÑÞªOî™!„Ì jv½¹%'m•ÃAó˜lŠÇÛvÑР÷O&à ½¹¶Û8æ¶æ' ëá“boÂÓÆåçÞBS±±ª!×`ãó3O¥þP~X+®,j®†lJJ _wÈö]±ƒ•Ô]—'Ü/,Ë®¶Û+ÇÎ@=z™F&OæúaTa¦=¤azšé]›F`îÖ+™Áy4Ÿ£&K¹BºÐÒ¢Bf¬ù~„º¾ *"øN®&å(9QW&O–E¹¾Vw]¯”€~ãªÚ¼xLjÀ#—à°”©L.<ÊŽò5•©èÑ6A7“´Æo²BÝ{w‰êõÅþ@“J’à +ÁD_M!P+h;t`ý1°˜öÿò‰¹Žó lNù7lÝ,‡ñ݈»N¶Kfÿ=H2쿳psáöÛ“[!ÒãùÁB<9•é½Ï"÷ÃŽ'YpµÅ-'Å%®&êäNÈ‘½“¯‰ê¤š…EQuVìúÃùb}8æÄ,Ä:cX—Ÿ[Ú?`‡,xa‡Uß¡¾â£l¯Ò+¦½F—Þ +1JÛø÷ª§×¤âd¡ƒõ|,ï59È5ï5u\çKëÜ•ÉA£a³z4 Š”¾¶ÐøÒ&€àˆ¥ü8þ4þs¤D&QD85¤HˆñfOºÿÅ~ÜÑöÿöÇ +Ú}æÇc¨} 5Ž¡cº C :Ñ)u˜B§ÛÔŒÿµ­rFºÏucH7Ú}¡¹_±Uâë_Î9‡¸‘àÉ'&@EÌ ñP“?N¼Æ}S8h¼þƒé~ôÚŸ]ûè¶î—»1¢U,÷ñkpÅçóÀÉð(šÏ/…€Þ LüWªŒ Ô›2%QoÚÀV÷àd&ë÷Ëqá'üi½r‡^Ópルƒ:F“Žý²¸$ܲ÷¹}·}y[\åJ8Âñ¦°'”Ù|b4Tr¡•®üÝá>_³O=œg›}šÖBç¬Ù¡MoÈ&´ø¦DÌØî¼s,¬“˼z›“ྞmÝûV§¼¹]m™”Á0o½ÑïÙÜ7xhzµ€×uç7onÝ1Ö¨‚âˆ3‘ÂtO˪&‹¯«k¥¿¢éò½… m +8A#u•ª¾õó›"´Z+S:;«« j}j$»Úr(}ëÆ}çîÏ+½-¡ÉŠû•ßX‘OŽL54ïI)ÜMÜ©ö»A-õ +y+’BnªÌjÓ šJ…@c¿iÖ2ÕŸA)夹h¿·—kÞ¹cƒÜ±~ÊŒ»®?¿òLì–°º_-tø+•ø¥ñ^ѽU¾ =Þ2m7é©(µNCnºü>ú)rÑ!.¤§r¶M}±":ll¢ÐC§r&eñ¯™/ÖN±]õ«EÏùj`M} jê^·¦cÕxkûøª¶ê•ã)¼N°†D±¥¹¯ØšåBâ/U¦7ÍQÜç.=5xÕ'Õ>àpåYå}ó:¤Cˆš +™¥i”¦P‚Ò(J6Á£Í½ü*ù£ÍÜVä„e¶òê✗¾„‚õ‰¤Àg‡‘Ξ€²”Bv{Š/ê;üg)DYgU3ýõ÷])åä¹®þŽÞhs_´X35¸ëU=|˜åfÓá-Xyç½®a»K³NØ<¯Ô³RÆ +‡øl´ÊÓè‹nhâ +“ÊÝäm¨š8e:œ!ÕÿøpfíÊ”*PðßppÀY…SEûÕ¯ÔXß6åP–[@Þúº¶€N~3K˜E„ìŸþˆoQ„úy÷©@#Vé¹ú„@@²ÜèïjosVíÀt؃&Ê?08ßüК@ù}U°'eyÓÞ¸©!¹2¢C/îÿÞñ‚Âs”7TOC¿Q1Šö ¶t|fvÇhäÊ@ùW=}©‘­¼Ç`g¹Y•[aPre³‚rPq +—áÜy¢á5б• ÷³ +³OWä3q&? w´Î ¾B]óÏl´,æ:"ì,!‘Q­É®Ö…¢ÀE¸†§£¹Ù*³;4I`ø€7f¦`ýím‹\zõjçØêb¸XJ1:þ¾.oc÷!oÕNhƪ'4WäÜCÄÐØ›D¨·T™Œgùs•Š6´ žœ·pg+ß„ç*ûAÛ+C‹ˆUúw*ï÷Á®œà†''ÂJ(QN\qp3çü¿ûaá<'öNvûÃc©õ…„ž!$Œ”çÆ›Ü~­¯½4Rj÷¥6>°*4”‹h$Ž‹‰”Í$Ü)§’íê`Q{qï _a0ꢛG'6ÙÍrsÀl;­îHn]gî¦bˆQë +Ã`qkÅ:£Nnöh!§ÕÉÝÀsD~žÜƒ<†üý÷f,†L#°Hr+Ö3ç jãº`…I±«kºK£Phº¦‰ÒQ¤tހܚ³îëmÞ°³×ÿVlà­Ñx¬I¿Éîì_óNoé˜Îט +Â~XÊõÜ –®Mz³˜Všbx ŽÈñ3 oÀè äKÑÒ# +ØBDuË2P7j²D3L~Iî”òžjI+¤Û5þ¬ÏÓÔ›¬R\BCŠõ4,ObãøÍ­[a26îxjë–Ç6Åk‡­nL^mˆ+# +¢zÛäŒ6›‚‹ð×¾<û=; +>’Ðö°¹[Fcõsµ–X€áò°‡‰“H ò(ï¥gT*Ykñ@5{ÆpÅ™|Ǭ§`“U^A~ …$Oɉyï‘ù—ÔÒ—RçSªÊ•¢á=ø,õ|ÊrôaÓj eÜÄÏ›ì\¨BÀá;-"Fâš /£pX‘Nò2…l<5ÚÕ•šJsÞ1heSHÊ ²µƒS…Eiv.lm!vºPŠ­=Ü+å]*CPHô  ÂN1Ôù¯Tr„–p ™tùqž +\xÆWºc”Íûá>¯D*{‚zkÀ$«Û6æ”çò®:€–Fÿ~mÓedÒ%öÛëE¸eà†§ë¾Ä +rcÑgàÄæÃÎ ‚ `£]HçL¼K º°ÝVÀíJ¼1ÜUP†¡aµ6´ïY_IÊiŸ.Â{àðƒ ð–,ØTýS®¼ÿrU•±ÝuQjï’yÝ<³8 QÝÒ0ðV&!~ BñX-Ô#gƒk¡¥éeÝ2+x áUÈ`¡«P(´®•õÏ4ÔЇ|¥ 5ù‘3² )Nx<5ßꈇÅj£þªY•Åp¸†”HJh'–±@Ù¶|´&œ+ݱÅBï©y(§Ñ×ËÀ#1­œ°ªƒÐêÒ+dò¥@|¯rTû½%"žøIàÅ#ÌlÞÛñÝxÔª{_·Ò 6°÷²#ݬ^Ï6vÈö·ºåÐv8“£Näözüæøí…<~m Ð?ÕVâf^xçÕßNáü$ôt>ÉÕ‰¿‚U^k*fqC½nóu]ý”? ÕZ(ãê-|æj+ßUÇ¥ñ.Æ*¥ö]“Sôqv|¿BŠ_k2§ÞE"úª‹\§çÔH¯íð1Eô<Sæø˜B&+1Eô àe;‘m3ŽŽ!n“egj§|çÄÄN9n„fÑ„{-3>ËÜj‘O• +ÅŽB²ÐÜB,|_€î¦ªÞÙ¸­~—ã›#:Îíµ|xº®#^¡_­ØU-iN°\È]‹f 6]xž±w—Ø;Yõ¥Ã]ýÖ @þN8c‰¿„¤BODûùK A¡ù߬} |Å™oW÷tÏtÏÑÓsôLÏ}ß÷hF£[²dÝ2¶,Ù–oãK¶ 6–Ã@BÈbÂuذxÓ/¼ÀòB8ò’¼„d½û’l–‚Ç[Õ3£ÃvH²û*QY«B‘*# ?ú L¹d$cS‘Ç$¦¨?’1ù{U°QH‚V2 ¡ø +£¤ RÅsàøšFPQ¥dŠoLÑ•JÐwŠü,Å{‰yØ6lS™sд +3Aï·eÞcbLÆ>gó*“½[`´ÝL¤ë©L#^ÄÔ‚èÏQÅ—ý]Xs'QÒíj-bfôU-Yƒƒ|^'ÅoÚE¬ $Œ¸ô ROÏ*¹x8eQID¼Li#ÕáœYV|Uà¥j#” "ªÜ^½ŒP†óOá“&N&㽆cYü ¾…´aQè74ÎJõµðì<†bÔðL^Ë:fýíñ8cþr`_õ½ÌbZdb‚ „¸°ÿž­„G@iâû/,LYô×–®KÁ·øÂQ·sMC¬¯Ö迺?ÃCŽ@CÔÎhxuëÎ|×¶fû‹WÒ® ¸Iÿ@¥T°>WÀ}ªdGToÖÛõŒFÏ%BÁÆ ™¡šÛeœ ±Ú,(·üŸpiÁXfÖˆy àd^Åèü!bþø:»x4R¸ð2ŠþDOHˆÑŸeœ"ŸÉBÑ—¸ýT©ü¢`pAÊ\«swܘjÕ†ü^^^Z²(S:’ÖšÆúzwÖ§ i 2“ë-_¹sàê•>hPX9gШ,F–2iV ôœJƒÅ)j¡\ äPã2Xj–2§ÁqhX£`>¯æì»š<ÍïK=£X"‘%¹éåÕ¿-»ŠáWÜh×I£“õm9“3¿¡)ÖëE¤VOÓ–µ›F9mð[Ì5nüç*µD&—f£‰äà®ú®é¡°Ó ôˆË„€ƒOq…Çg +eͶêÙ®Ôå6¨c^,†5ÏÄàH{|ÞÌqf_<7`f•Š–ÜqÜ÷²÷ùŒÁ/:öÑ÷,’…ˆjVþeŽ…œl^¿LD‹ÙømfsñqÖ] 6§°›3f_¶#úбÐÀôŠ;Ûgˆt•9`RáÄGv›5bcicp{¬*(·»ïïºj èœÌj4ö ê’ÿx2aY,>¯Ñ`*èÎä¹Ï%{8±Çõ(ÿhh¯eZµW„ŒçJIÐu^LöZpýøËeesÀk8)%)§†3°ÔZ«RNм×jõè¼lª«…”‰¡pòe $™ÆjˆÛBAgq›T޼B¹Üï †l±ìpU*c83b2‚ßãW‘&¬ëÅÖb‡šåØ ø,€iÀQ,Œµƒ»°$ÖŽæi8)•&Äw%Ú>3 [àðJ¾œÛ¼Wßu7“Ù㊗¸BáÈßÝwÅQÇÕ ƒhéÜ{çrMe–‘xR‹ó@âÿ­Î^¬†ÿ¥—«)ª|…_¥’×Ëiw~¼ÆRÉ«éÖLÆ軪¯wg»#ê7[½6Áæm¯¶¦ù3rÕ‡‘€Þ¦c"~½]ÇØ}î&®*å +™É÷Üv…™u¥™LÆÉY'qc°ÞìÈXõ¾ŒÓÛjR$-®ƒ®!ï®2S”ý+î€RoeÝ>…Þ\ÜÌó@¢·¨£1 ±c ÿþ¥€6(>РnlÁäPuXÌ ª™ð>×nÃ49]ÊT¢—®î/aß§‡Kñ‡`_µZ †¦ŒÚv«ÅÇ3 ï³X½¼,4¯JóøÏ´#^“õ¸ŠOT® 5Uê½TñW.—§q4‡úm?Ôø0´A(Vê8Çü…EÇÀñSŒý_õ”Xä÷.!LX(\õÒ@¨Ö—T˜6 £žVÆšóÑxSst±T¸NÆÀñ\ÊÈ^Èéª` Ü~ÀÛ¯ …¦ƒQï_ â—}-°\\ýÅ7,Ö³üd íR–ŸÉº‘ªÇê¹’€:Àsy£šiÞç˜Éí«ÏSSÁé)•f;QÍãçJÆOÕÅר9J1-¾”p´ÞgAâó„”½ÒTÞ )µ Kw<áJLfºV…d<%Ô&õYž_ãzüW“ˆ¥BF—AîiÊ•5ó¬‹Îx¸EÍTaÕqÿ>Á1U©²FìÍå0ß§Tv±rH+!þ%‹¯¤•6hÄ,¥šÄ݉MÙúá”aY ªa‰¿¤ÄbYq,Ç3°¬Z8ЏÎ`:pÅçàxN3Â1vŸûòÀ§ÑwH—Ö è‰Œ\Ó7|°Ï:<ÜuŸÿ;rKÌmÛX¹9æ®k&þØ1= ôNuwìŒz÷öºë"‚!\ïóÕ… ½¨wŒ?â§a‰|X5V=kO0¨õ˜<Ÿ×az&·KÈȳ®}æ)õUéã¥â5‰y%‹!³…°—~¹/´¡´Õ—‚^øigÓú!äƒX®¬2­ÝpÇ77ä×Ö˜¾{—ÅœuÙ2°¥râÝÓƒš3qÿMN£t/üWRØ `ËÆñÁ]¶lXpïóx…PU¹¯½'¢Aߜ˄±°Oä&æ¿û÷¹X½mJ?••ÄÏ¿ªÉ-Ÿð¸TJ„và=œd¤RFÉ)•F“[ªÑ¼ßëÒ¨¬:)$/™œðHJd;_ü§åŠPÿ€–He,e=Ô–² kË{N8"ŽˆB(€'ç1EèΤ¸S)/t%³G…éÝÇåø£¤ïD† +„ò.ÃM±$Ö…¸U²|ê¶²|R‚“ö 9WcÒ®€¥•Q´-TívGüõíuO~MÖ^±Â&¦d$e¤­>g¨¡«!HŽw&¹ŠUXmZ£Šd9•Ñb0é Áæl¤%jÉ•r‹]kPJj…Eg4éù@³ˆ:΀×ÈcÐÇŽÌan»ID­eåö½þGù£Ú½á'¥%Í?+æê¾zþÕw—×ÌEàb )!Xt¼&S]>í¶ y•R¥jBÙŸ}*x¹ßäì$)…fÓju)i)9¹é„-@E’Hàׄ<>ðz$+ˆ:tˆÔA¬¡Ý%ØjEV…sÓDpÊ0å˜]­MeR˜s—¬K{~™_?äJYlkuýPÊ@D+OCBµ ê¿Y+5—Hx‡s i=¿Š?ª®ñ¸À•k1‡ ¿–Ø%g5З³óZ§ úòàYˆ…œN¥iJ9M•ì òå–8ò–HGIË.*â?ZîµãAXFB=„ö;Š„36%ñ””ü6›ßÀ»$’mÃ{I.¥ÕF¾Aü$£–ƒ7y£öW‚RÐÅ{°“VPòÓ¡Õþ¼¸ÃÃ0ôÐÁ¯‘‡Žìࢇ>œ‡¾9tÌÁo -w˃Sn9iâl¹è‘~k±KüqPñºýÒŠ×í÷•kd(o¼%•⟥p>ês‡ >º–@ü¬þS÷ßA}ÄçbhUÌî ëy3þ[9ùh ­çž£h¨K2¥¨>fX©§héƒÇ(š„7UòG3zàø°†N¬ø¿Ÿ“ÉDÛóNžæup*¯`xË”žf§èýÄÕXÓ¥ô"b·.{ÑÕK¦ Ù8ÀT¾ÞäqrÅ ¡ {]~£‚Ú‡oÂi>àru€Â9N)¢xÇ V5…Ó®ø*­ KKHÖÌ£Q#^Æqò:høyLwŠÉëÉÔ|Öôžé,ˆ›1Lå… <ŸR€Iu¶˜3–1àô7ejÁguÕ½‘«i‰ŒÕÉÍ(eJ©S>'¾CâÃäâ;„¼¾äz ÷lß3ñ—_ÛË™pǪô”âu™Î°ÁI˜iòqD¸Ïp¼âmè¡©ž,ÕEÌ“c +L‡²Î^š§h-ˆ|ïll-AtàŽJ*[qZòƒræZñ©RyÁaòñÅçüOñ9›ÿÂs× ÔÖ 䊷ÑΚl;ü_œ‡Ïù?~‡cäv´ïf‡ø/`LßyRNzÍ+ÕPðïþÊ€_逋ixËø`„°Ý`RØ3ÄFG*Yqm’¸V)ëT‚Ç+Y!Äí°ù)©R«üs°ÆÅ²®š`(çfY·ˆxáCðcɱlã‹e{ø¤\‚¥ÛÁ¢©_½‹6í¢Ò½È‚gÈ@›hK&N[i…-í÷•VÖøüi›l¥•hRIãoª´°h +­ê“*oiÍ×W…Žh 7 +NÌŒégÔX¿sN#7X0õ›¨í_+åJ:÷B“i,úÏI9£Ëdõ¨y­ÚUåu§œl!Ð\[m}™QÉHÑ.ét…x©”ÁVxèÂÀ Äsbî”yÓðÂ)ÆæzIjÍÙ¦³âüù¥pì’ê¿ B‚È:ŠÒQuñ5Á‡j<,ë© …k=jµ§ö|W(‡näB¡:t¬C–ü,Ïc 5ž¥‰^X„5Ý‚²=Ö<2’oÎÈ7­^—oBUîÂkð ŒÅ¸YL*6žC,ke^'géÏEêÀÞXÜ ð¼Rp +|T‹çjbˆ+ð¬·Ã'Ã¥Ä~8ê…ÏÞY<†[È£˜s½„™ÀÇð¶ü £0?0§·ËoÁšâL½uî-ÑbA€ª1ðn´!fn—¬.nYuÅÅG–€™%²“9ÛŸÁÆ Ã3äêWŠ“?y§¸é5µA-Cóö7Þ~gßÔ;o¿¹ƒ”I ©Š‡å™„åÑÀò81ê™Ó³=y‹ÅìàÏszS*Ú›ñ­²æ–íIUuV“©ÂF^ƒkL™þ,Áš–`”§†¯X5JBÔk˜äÄö]¸iß;o¿±Á,Ò«àØ;?Ç^Qò*Xù£â0,Ïî ðo’ïÃöq¾„©q¶Œ ‡~3lŸ³°}°x©yÞ\Ò<åjYë€imëh†£OÌg ˜X<ÚÑéÃÍØ<›7j”HîûÇâ³'NSópÔ‘ÒÔêgÏÏf5Dq„T©Cº° –ç7byÜh7A~VÏb§ñ˜#qý,kbÄý Íc#Àotá–(¡4ÁÅxª¥­­•"Q¯Ío”ã‘8.þ¾ýÙÕpü“HY^ý DJ˜¶¶*›0&i}¿c°õø}˜sãé<gtñ¸Ž!wð 8 +Ûº§«l‡„1ißæpϱG÷ }ûVæ +`d¦­ùmq¾ûÕ%ÓYœ!—æÄ F-RÅ’F–ƒz"­_#‘YDÞ¥{éTJœü*W%~v Ó„+³åDeÍ@Œ€¿†œ-“yOÆÍ¥®üúôޝlL‡¯6·vv¹”z–– q¯;f–«Ì£;í1ÊäZ¥\ÀÂLJ²ñÍ»´4_·{,ï7¨Ÿ±®?¡Cd<¡:ŸfÊQ¿¦ÖV—Kóѵ«úíî¸MU|ì¨Ù´zÀ\Ñêì8<– tïl­ß:>¶···YuUµõV;Ò ”ŽÄƉQ¯Ù£—©;÷@Þ% «¯…¶ÛkT r®Íº@ãÈÎæ¦m«ºl_jìüÌúšhÿ®ófÔ½ív÷Ê¡‘ˆ6«Â÷š¢.ÁŸ¶ø6æ ±T £XF¬Ã§É­"r  ±_…Fš÷Ÿ´±'rÞ¡aåâ±å²Óy¸ŸölklÜÜå ­ØÖи¥Óÿ´Ú0èýfuéha‹9ɶš ]A_뺚š !xl4†mjÎ4À#ÇÙƒ¯"do¹ð1ñ>ô>×ÀÑõË'mkǺ%(EöG§‚¡ªLƒ$ØXoœêâ¤Ô*ɨ[¬ã+$–xžŽæ‚]–Q¹|ÔÒÌQXl`hUC÷cj¬JºöM[ˆ³Á§uÈ3j-{ã(³¥–¤Ê”åUN0ŠWÔwéW…÷—(…¿ÐYÎ/9«¤£h+S@Ú…à_ºœN EO á%ñ>Ű²ý®œôÚà·9ü:)ð}/x¿ÃîÓKqÏzô *ú€k §ç¹Cˆ{ívŸŽô~àŒ!à@çÀ½ÓŸÙõ¾›¸ÚèÔÑÅŸûcF<~:0 t`@®øm™ªrî‹£Ÿ«/žðOÙɑߙªrøs`…Ò1]øXb•D°~lJÇ48Ð,É› ¸ñ”׋WK¼5è<¯$%½’UN…¡á‰±ÞÏG{ÒÞ¼±‡¦{ŒyošÂB[z«›ÿy .ˆ‘ƒçL>¥i~u[ÛµÛÿ Ò¡Üniež­âjU/9+Kdñ¤<Û+]r%/%V=w£y/jí[\nÚA# L !dw7íáôzÍM–ixàn@ªÉ0È€ð¡Oä¡vË€q—Fwþ~ËoÌø/_cÉÈÛY¼ývEoGð‡þx2òmN‡šý;ßVëÅcäÖ_ü¶}ß…%c’†EíqÌq‘G»e–w@ë ¹þïâÑk½ù[7ÞöÍÃ5­·¼*‹¿³6¬Ë×79m¥£7:{ßÈÐ=ß;ˆŽƒ_üîM£7Å£W\? A­éO6háÇXSWÍö Íu'\.²gÜXWÏ“% +éø9qÀ^Ê"]Ê¿ÓäZäR*éÒ¶Š%›W¹s¹fÒÛâk‡O阾¢ZE£9|¹TžèÙÒœ®µz;··ídµh–SwðáÖXfmgJNÉe$NÒú†ñC]ëŽnLYë®È5í싼{O³ÞjU©­Q§àÐP‡Åœj‡;Sfï³Û¬v®™ý°µN¨'˜ ’ ¬ÌÕ!®Ç=+RtTèøbJ™õ©ìÚÀ¡¹7pJZxÍS +[‡ÆÏÿ³ZPKI…NŽQ–D[<×dŸR‹ ¼x˜ÞžÎ|·â„}WjŒx©XÄŒÿmÛI)4ÊOÞJâOœÿ¼¸³Û´kF¸æÿŒ»á˼(âÝm°qäãTh\Y +iP¸ý¯ß%Üå‹xæ ‰öM4òM©Ýïëà ÔÓ—[Û‘PB…¢”¦®Í׿7Þ½!aê88qü‘áÔEX&±²9g­m·¸,h9¬/dò8øÀÊ©Îô¦û›Ë8f☓°†«±ÏcIüý¼²oØ×—÷õõùò„ +Ž]ÿqL;Ä·suu|Á—îá‚/Ù=.œå£ØŒ‰‚Éþ'ÌÉ7v·XSÇA£V3ÉÞ­ÍÕ#uVwûŽÎ)¥FA’rN±¯v¬—¶XÕxwZ!9µiuÓÄ‘ëîÞ”¶Õ^‘kÛÕøâä}Û²:³ÓXƒ–„×l·˜“mhwz¼˜Sg-/vJç³ Nžå|ó"xa2ý[DßLIœ+c—š‹°‹bƹÖo†ãáÕó^à¸þÏCâœ^3­°&½hñÃù ,Ô[BÝÉG$¦Hk¬ª+¬fÅxñ+àÊåÐEˆq¿[ƒÿšFÁOxï“–  Ôƒ P½»  ±‹ªaˆWËØ…9 ®†fÆø7`—KÁª‹ú‹Ðåx÷-§÷×ïZ•åhGà… ¶nh­]ßâ±å·v×®‰ÐeKºT¹Û};Ù[{fÇ£ûë9ƒQ¥|& ìÓ‚Õhª€à¥Ê¬°úñô"t!ðäú;Ú¶òuˆ]ª°.ìWÖv¯¸ðò)_‰­á¦þÔ¼ÂbQd^ÀoÄ0´ú l'LXBQ[YþY‹PN"AúÊÄK„›ò´vM›¸¬£­ò³yh{Kö9@«Lׯ›xs"¼€„&Âæðý,ñÿéÐÂÃ7¬¹`Q Àz½þÀ“{Ç>·±Ñ«bÃ}‡Ÿ;ä[Ùc¡'@ ñÌ—íN Nu8Ÿkí‹l¼}M¨XÔZâ–lUBoŒwÆcí1#8¾ñ×´/…X´J£Tk-:{ÐÀ(ÕŠúmŸïAÖæ;§Ò+3f²vÞ5âv5£¶„ýê´¸G”ˆ²~Q–¢¬æ0=©A(Ëøi(+†#µÁ„O’BŒµ +a,¦ÑŠËÀ÷Π×ó:hŒªËA¬êúú XÖ ê ÂWÕЛ³T4¦ûÂË'‘^tƒÄéË®šà‚ÊÔ”‡%°–þÙy&Ó@.]•¬ÍÓšvQŽÐÒê—ɱ ÉТý‹`Ô•|7Ý +è@7Y0@uªPí€jT5 ²€Êª +Pi@ÇtÐa@‡å„ÈaÑYâï+NI§0‘gé? ~¯ùkh±’Ov)\|½áàñé=MÕ8›'!\¬µUïþú®÷oŒÛk \ÜÐâ.¾§ 7…G†ô‘ŽDw¿MÈ db1ÖÍ'ÁÚÕ·­OFF –cóÊñlßõ©ØÈUñ5V06¸kü:1Sxãù“Þ†lÊ$¤ªdAv¡ZÁ—DÌØ†µŠ˜ñéf,à7Î{µZcö4ÈC;Á#¥¡¥¸韺¼6äS±ã²¿$—@®—ÔÑþ#s׆G;R4íŒ<šŒèrá±ÏŽl;:¬ÝÿäÔØ­“Í^¶øgc¢+o‹òÚ`KÜžMEÁOúž,ÁG½!lµù†å؆­·v[ÃÕ[ïŸ|ä`K¨oÏLî¼k•ÇY?”Dñtš3¢Ú¯¾ð¡Ä²A>""ÈGD™-í—ý{÷‹³Ô_ûÂuŸŸJ5\ûü‘NìMÿo_ßFuõ;÷J£ef4›¤Ñ¾ï’­]²¼ËKlÇvÛÙg „$$l IHBP +”°”R Ð–¶P ‰0 %¬…¶¤Ð_y|Ý^Û÷^ß×>ZZ +ô£Dy÷ŽFŽB€ÒïÅ¿x¤ë‘fî¹çÞó¿çüçœÊ{ž†¡tq¨ät—fe à Nh¿ú'ûz¿øòÕ×üäæÞëß´öº_Ýü«œ÷…aÝ‚=˜xòèT§&ý\÷Œûd?×ÎqgµÐösýÏós5Ôü\NÆàÒŒKvž„ZýkÎæBà(iÕyõ.ÅÈQ*~%¥6Æ‚¶€MÐ\«Çµhi¼"!<8WÝB´`+)Á·Où¹ÞAx0Ö+~®å$Mr ;¹ÖU Àf•aŸÃÉ%¡Kã’Të-nQ«áíæ§saNð™YÍ1Z‡&½©mþºÆÅ×.¬·u\¼`ø–ɼSbµæ˜ß—ŽOfGº›ì¶„G°¹m+úM.3oô¹Mñµ­ùëwŽlo@=qò UêéâRŒ ¿ù\ø3Œ ‘h&ô Tf„/5ßÛ ›…fÃD±Ì#œø&ï½CÅ1i¤'‹¥á"Ê5_×èY]àsCÅžî­ßXÖ´²?ƒÐ„Šg©Hë¼ÆToÖnoœß6†y\#âÂú¾¬óÃéÙå:=& C’f_XÚµ Þží«ÇŽXÐ0gÇìk¶ ¢=êLxÌv³)÷ø +A£Æt;¢Æ*xP6·Y—Ù- ¼Ûeòw­éÎŒt¤•&QžƒæXðä?ÎJuhi9˜öqðüC’$RàKGzeJ]ïCèÖ·†ªÖ©B«>F‰Sñ"ød¼è†2`ÜoâvÓ®t?óYéåL¬)9¦Ñ®dg*?-.ìÖôšÊjXù5‚¶Lú)ªZªzJc­;¢~¿*¢Ó’h†œ¸So AC¥„çò“o"- £öðD#”&QãeÁ¶ý‰÷î÷‹¼÷¡ƒ +iAi4¬[v Y?V¢†G7}ŠÊyá:¿ðR’%©zz®¸iaÉô4«ERKk˜Pã¬BÃŒ¼uÃFG},$ÚMvtOÖ¬ÝÎH7zëX,šÿ…¥J03¬%è´ûŒÎÈ[ãÍÞ^µFm÷_Üh×èrEìôq  :óyÍ|CµÍ“,²ÓÄ¡ØPó‚­?H0h*°'“FÒã)'Ð8Vž†Ú"ªdþ¬Þ0å‘ I¬¶¯eã‹Fv,i ò|¬oãÝk½-u¼“Mé@¦émuc¦¥+8×Üø‡ýRª>Æ[âmáHSÄ–/øâò\ cñ¦«ûÛ¯¿zË¢ÚJ þ '"ét”.1°ª6qz´í>Ccà©¡ Ú­¶dÿÐÉT©Sí— +B{ #4´§ß0n]M¯ýÔ-…™Ë•û4¢?η¹TpM%+M<|„3³ÕSÎxÀ%|ø!ËëT¤Á̩ܹƦ¬ÆG­ Ãh0BÀ°4<_dk§²£p2ip[Y J­…tTC&Þ°õ¾¡ ˆü”Â?ã«Z¼©˜F›;[6}ã¼Õ÷¬o´—æ7§û³öâù_]=v벤53˜kš×䬼Ù?i +‹|¸#5Øi1&¦3È´›ã]õùž˜œÓ7ÏŒùÐþ6:8­Ýa)”’ëfÄC=+ÛcÓÛKGS÷ ðzº•wG­R4à7{+nW]4Œ@<&9꼂T}±Éh'’QžèAèÆS@*zˆày¢¿ˆ™Íö¦£À€ö°€= j“cö ÀÉ5áωn4ïSŸ +XW“«î䢽ï^—ßÇ{ ìö¤c­³2íKÛ¼ÀXhéôÎß=/Þ¼îÎÑ¡í‹ÛÇR¢5‚”Ô4Ð/¥ëc°½åº½[—40¢ÈŒvg œ!Þ¿ºÄÈ*zŬ‘/¬,úÚmºÆ3ゲÓ^ßÔ2îêÿZÔÌêŠàì—÷ eðÂ]C8@ö 0šÙ³ãõÇzÈÖ¦VmÌ˶……Ôê{6^|×h¤ò¡nŒ`ò¬1ÔŽ7úX(]õã›+®¸uΞipÆÍ?ºîÂF|‰{¬«1£ ¡‹²:‰Ÿ À^²»°ÒF´×¹r<°{ÉøšÀpçyÙœËEÖpš‹¬LRí‰Ûñj_=÷¸Ù0Z$~¯3¹îpUûmAO.sñójA‡#,QðâU’!É+qšH´¬ª™üðaJ +cæçºç9H¦Õ«'ñûÙHƃòûŸÈõ¨êÑ +±Mñ´T}#(¾ð+lï’HæÈÞ%þö®êÙfâ—œ™`0í¤+c¬dÐàÌc E;êºò¹iqq9+UöÀÊ;€‰Lú¡ZÁƇ´–ºˆ§>è mvp8•9sâæ$¨TÒhlVNµtÍÐr8žË5b¿)[º·xÿ~?¼È:¨ü~² [ºäjê(`dK'|vKw¶8lêoIOëæo¬mYÞ›`ð¦\Ki)oÃìæÌ`ÁiA›'g:íf‡Fj…W+—X Á¹7¯Ìƒ…s®]ž3ˆFš·6¿¨Ì¢1ÒC8ȤV«m>ð dì¬ØØÙèA™y)ËiÊüÁ¶®õ@¢Cì$A¶n²uȺ³ãÉ$FǪcj“élÜé‰ÓŸ›œg¥µ·ŽìXØì7ÂÓÖßµ.Ü×e´jÔuF¯ó绢‹›0xŬ9[gÿ"J¡ì<Ÿ9Š—°Ææqu1رdÓžém×íݲ¸¨3ð4#ÚEoĬ¥hª~puQ +Ö;|y¸1d²›³Û“­hä{‘Ï9ëù™ëy]‰õl·²›ꙃÊ•¯’¢/)´ºT:°·’Æ9Q€9³A[3sïÒèuÕÌ1Ž˜«)ƒ ²t%4 +chD†èÀ–.ç"„sÊ”ÓàqŠèG—=ŠÌA´À Ê‚.ÛÒ +Æ5ªÈ–±ö7Uç¶tš³:͹#=c?yyÙíçm…‘ÆdoÚ–]¹oùÊÅ–,+ •wº{»zø`s¼­ÕŒ©Á¡b@‘{îót]0Ÿ9­Å!Ú’ÝFÃ=«Zf嘆7v‚e[š3–XÐoôL¯ÉXÄ,†£igc{3ÒG,‰ÅŠ>6p!5¼à K´…s @F ÇwR2ëp©fV±dµøÎkŸ.º£>ãJÕb6:mã½Fg¶×‹ö½êƒ¥þT÷ÒSÅWÆn[:{û¢æ€á¿¤Xs8Öâq­¹ü|Xn½nïKŠ/ò¾°Ù/†c’ƒ« +´‰×ÇG¶Ìœ{ý*¬§í±#˜åHµú‚¥¨ÉFÔx(dÃl¿Ì3Ç<ðN´?·ƒ9¹ÙaÎ=@Î;×þÜ|"ÊÞ¯¾î魥ν/îý±­¥Ê_¼í‹›;—¶º|Õ£^{×=<ºàÁ¿ß{ÏŽ.zðý¯®=´>Ù¸éÁÍèX_Úü…´¢ºó Âo)ë-ÍÐÎó½pTçxî­ÏCC Ð…s¶0ª76cJȰpºC*R ð@Ôx(HBmÄÞŸÿç©ýùŸäýùy ¥Æêý|y‹>oÑÐÌ™ºELJÏEE‘C7¾åuŽ$8K]{¬¸ ³žÑ³zj)cÛèåÓÖܱ:cØ»þð7¾YçŠÙi¥.àK…æ·{.^6ô5×ÙÜAíH$¯UÃ!{nñ޾ö+¿ôà…wáŽ\¿üª»Q¯`.J¾ø‘½úï«{õùò^}écBm—>·ÌQËÁœÙh‡>OÑžOä¢|þíùÝ-Ûž¼²{ó¼Žäp<î›$¢\`0⇑fÝ$eQo†ÕÊÛsÔ6zi÷²[WMQÀeÃ7¯o79Ýœè¬óÕ^‡==-‘èÉ:µRÄã +™tŽlOÜDé yt¦°Ëê³ð2eÎÖæ±¡«"ÓC +åuˆ4Éx¥µŠW.«ÅrD¯Ì=¤F`%1ÖŒûF(¬ÝJ· +°¨Cfñ!Æ• †qy"ý$eæ¢$›0E4c.ÊwÁ<°³”~âprŽz¯JF©¯wÀ»Rk#s‚LÁ-'—çÒŠ›I!ü´0d&ËóHÚ&@GtÐò¸ú`ríÈWÊ8¥ªgè|z”‚C:Ê~\f£´¯Éð: +‡tô‘Îeçà£^¯Ïˆ)à[ëØÔÂK’³E=ް…¶8,öüH)= “R˜âÈŽ»¥Xy B²ËnÄTá¥@êi9OZ +Ùo,Å~ÿ@±ß/aû-â1´Ósÿ…\ õ½®DÈgü0d@;p oTÅ\Ö.| +WÝß³!óþ úš½˜§¯ú˜cDQÑÃÈ€ÕÍF¶+q@;ï´]ØÿwZ|nÖƒ÷%Ĭoâ[Ï»¶ŸuZ–îE÷ÿv9ö+Úæ¤ ³rÖQã% þ‰ñB-rR¯DNêé¼ N¾6%Hâ=*?¾â¨¦‰vÔBhÑžSf¹Ù!+j Éñ‰^ÃÊHeåø„÷šŒ–T#$"º„Þ ô€&ñ×;&þ¹ï­Ö@ßz¶ìåê)&U­z=»é𞽌År›_µ÷ѱhå}Êì©+ù›gÔ‹Rª?i©wµð†»>Ø¿tñCïßýÕÈÇï,¹qm_BlÜüà¦ë¯Kزƒ«¯¬±'H Z‘Æ•Ú} è£@@i¹;’^9 TDlÞ2î¶ÒÂÄÉ_FÞ>î(ë#1Ž4É#m:XFOÉ]ÝJ&Ž?Ÿ;qÅ×áÑ(Q ý÷8Tý“V‡ 2øÇO1Cáo`<€6ÎUɱê: N}Ð7º<¡èaHðO5¸pÃ…“oTU’F:CÇ1`¨a‡êÏùeƒ‚&jéÞN +%QʼnÄ$²Õs] ‰/•£g޲ñ´›C7Å©þ…>¸g˧5gðQ~Û5’̱¶xóâiIÚ]’* eëZyYƒëàõ›ï•s‚š‡q¦üE°†VÔ\qãC›îRx)rí_„i@»’ÕY× ¨@/ª Ù"™€?8ëD‹ÉáX\YB  yg ª<‹5yNADe¡ +‰ð’ É¢Åèhê’ @$,ÝI„öµÄéH©:¼Ž²A¹tßœê¿ý^NõÂÏÕj¤›&ñ3‘nä`ÔÒm}SI7`ÛŠ/ŒN7oB{Z̺qØS]±ú¾Ü¨Ö›ð5'TójMa·Í'ñÆpÐV7{ë`ªé +CkäHʪß)Hí/Êì6i“@›'Ðò@ËÐòòHc5H#Éˈî¼*¢;õ„tò¯eú£äHFdÙFl'ñÝ¡² ðäTœâHõ«cyz¼}á§v‡ýÓ…¦sE`1]Hk À-¤5Ñ™Êõ%LóLzÌ—ä +oÔ2~¾¡µ¥"ÞTØo„/`÷Ióô‡ïfàÕ'®ò…þˆl‹vZÿ¡ÌO²ÈÂiKjÃBÕˆÐø¼Ì„Ç¡:›:UåW¬ÖO€•­²l¬SýD£ÒD–bÞLbšÖæ˜1^ñ Ü‰¼~~Ž«œ¾^~<üýdBSƒ û „&ð󿹩…³X8…Ñ„éØÖÂB¾y;f4½oªa¦ŠzFB•?$ªÜ™TGeÔ{wm|D@ +€öÕÆÇÐLø‘±9 +ñ‡Ìµñ1#¹áø"1AÖK%WsÒf«+] ,פÏ*W@ßÌ©Îõñ3§3‚AH¼çâëà‚QUÆÎi@[Ëa ÝÐâN8´‘DÎ’ÈËD•ÛñGÕ1g¿^Ã¡Ý +ç«`²Ç¾qLö˜8±Ó<·>*ËŠRžÑq¯W;U™âe}|ö¤!,¤7…-#“¼Þz‹k*Å«}sWë Ðš~ê»Ëzüåüvà\W¨^b +Ïë³ÑMŠSØ&‰R¡‰ÎÔµe> Û¤é<øì¬ïüÛ-ëÑžÀdŽ}QIËŠlËØ5ý®Dqì…k²ñº¯e×Ý\嚆 öÖÖVx¾Cþ_¨U“¡ÝŽZ\ðpùÔ¢QZÚààù­ÒRBŸÚ$·è”–|þü9jÑ+-]èœäk¨…RZPË#ò§h¥%‰>u‘|£´´ sÊç”–"j¹Sna•–fï&ûP §´Ì€e°K³µˆJK/jÙ*·q ÒºÖ“!ø’95rþ¶ßËùÛ~ó·=Âm )ç(ùT„j î0p»`e5蹫I›>ôäc½†Bє옙è^ÓícS ú@œ·Çƒ$ï¶[}N+U ”I˜ÂIÑ,êL>‡Ëg²Iœ§q(˜6{Mw®¬QBã¼ õf&1ínÁ_ʆžéÁžR°§'XR±¶ ØTvlë…²ÉÖWH·£?þu·›ìتß/Hc%8EžžÌÓvNîtñLWœÂŽ˜„pŒàà¦Ââm=É’O¯UCšÑºê[Bí]b´5ÑJ3¸ì)£/÷õ¤ó¾Æ:Î@AÉÔµ §:Wwxû¢Ý)»«<Úê¦yNo0zm'+°Éz)dc4‚K2Û9M.ŒóïŽVŽb¬fΕï¯ë])B•;ÕŠWßÀÉ4ü!ìžò|8T‹ÞP椈5ù°ÜBmû¸ àÇ‘¤§¡UþcVP–°œo¯ò}]HHê´ï«D.-ù¸4_y +¼ø’5Þ]SÕݤèwYN»Ü€ËRËšr,«¼Tõ²†àFØŽÏì'ˆpcëþ³LlÓ7oößç‡~d]Ç“¹>|, &K†Çê/×?j´~·6ÊØn&›þi¾´¹˜•ãlL/Ø6ìjˆ4jˆSòi­±æx 2 +ÁR$Ôâ4qF¸'¢áØÊÿ1Ö™;Ïë çËk¦…tža»Ñä4 g`1§-d¥µ¢¬pH:£GJD®‚ŽÆr­QÔóGn'‰2Q8i˜¢¬V*…óJs• 'ýß¶¶|[YÍÎŒ÷MYÖ>Âi1Ÿ5ÞI mê^º¥ÛF;ó³/¶åœ?‡Öém¤3Õ79æä;—µ¸^¢,!‡¿d58¢NgÄFçÛV÷†×\7+±jåÂî˜ZÇ›‹'ѺãÎO v_yI·+æ0ˆ\qzB\Q4ºI¤Ÿ¡Ñõ‘'ü­Êdïá +q*ñ˜ýrzÛ'óXè/R‘”¦òš³Ç<±ŒE¥ŽÊ1Ö€ƒ´àF 4àOf—Ýž8Ž3Sâ”°+œ<&)xqŒ¯Iü ’¸‡¨#ZˆéOap€à /8P¦ì´ËΣ]ýQ€«Ë4€‰2£KdU{Í[›îSm?Ç£\¡Zx¯xFtO’TS¢{§÷àÁoßÙ»y810Óö‹‘}ýë{}]í½#¿È¤3iÆsÍ8OÊgÛ˜†¦æêâÍ–ì̆òŠN•üÙ¡·#7=Õ2ê ­¹` ìå]6+›ªìi΄4‰hVëŒ5…ÒÝ 3dѤµ{y› )bïèåÝÖÖq8"6†F¸ÜSúeÝê »£Z†£)ÖÄ&½4CyrÓÂ:žÑúÚ7âl Mk®‹úFÁµ8£NV”ón\ïãht=œê pcYobœVÓ×u¤rÇOÏ)ùÔõNsFJËj–Qô Þm¤Ÿ Õ%CÏÐ"gx6”¬ =kà¿ñ<ÃrûŒ'öïŽùñug MÞ.øójN.Ü„sN}8çÇ9¹®&ÚŸŸ’“KÎO}ö¤SÛ …bŽBЋóH«9?Ïû³~H½gШ†6¿»÷šw/A¢!qRïö]»ötuíÙ½³CE¢¹îB/º›­òÝq‰Ù›äŒSàÎ8nçìTõvpÊ©2:•r +Ûº©)§¶òþ\Ò&ä ê<ú§V‹§ÕkÔôþ¹®=»vµcö +IsÌ%»vï»›ñN’¤ªcçî=H÷R'ÿ ¯_9…ÔÉHíP5ÓîÎÀ}äUŸ>Ó.ZÀ® ô_<4ws·Ó?ýâá…wÚ¿ÏX£š$,š)®°…Ógí\”Í.Ü>0°cI®¸äŠþ†iÉœ(¶Íª,é*ÃÜoÅ™¨1R;Rf,Â.àÀêNr·XýØÈê$X»_g‰zÜ1ÖD‰Q ­Û¯¦E¯Í4’&­^+§°?.!”ì° V‘&WA$5jti49»lŠ˜™d‚áÇ0V«Ç`­¹¬×[Šî4äÿME¤p}¼Ó#§Ÿ¡u˜JÚØ‘*½À^‰»uAw:âÔ“zZËÅ›gÔµ#ÂÇû††ãzÂ^µàsˆv³Ù°Á ø®0+rZÑcqØx³‘qdzâž–Ž¾X#´ß>Ô‡aâ2ŒÐÞ.úfûš‚}}Á&ƒZ´œ%˜B!F¤ù44¥ïè"b@ŠÝâá8áá=°ñmØïÙµó˜é4}EV‰QŒU6m^:*[»¥£ø¿L”;;‚SŸÃW<]@§ÜpÃõ%g_Òë-EEM鱦¸§Îa`ý ±vÊ •Ë+v—ÛâYW>áÖ!‘©€JCÇÛ†’­£íÁŸóÇÛc¦§³3 N=+ˆA×dà ŒÑΉ.E²6£ÑjPÇŽ'p$k5rfVG™EFJ”£ÎlÔ­SÛ"94Oø“ÀõðFɵŸä¾X6IDZä+I˜¼CsWR»OÁ¹ÑÏisp=Ë”õVϽIñzœ‘@ûªJôeCñ¢ßP¦øÊoá×ïŸðûWÔR¯ 9Ýì¶š `ºÉC­EFù:7pV6d6tÁk‰Æë„æ‚uÁ:Æ1Þ,ÓójäoÛïnÎeúð±l´ØûdOÝÛqLzE‚Ò—•á¯á¹ÑO~x?|ž“8W-§Ñºd ®7çatP£Õèm‘RÜUçš;bmg²€« ¬­¼+&ù–ÝÁWqZ%Í2nš5†¥)³WŠDµœÔI¢;õž”À–5Žú»i?Æ3„r`ü%I´CåAý& ÒûöGŸŽ¾UE£ä~ïÓ^èÝÇí3|âH3g°%ðrB0 Q@*Zù^mMûŽ9_qþÆ©r:É_¤Áxú¹4LßVá[&usR9§2”Ï\rO÷‡}$Aþ ÿÐÞUŽbÒgÀ;؃iO¼9Ä{o¢m^ÑFò8¿Ûû}u“ÇDëÐâi΂åÃ×®*j(ƒÁdŠ:u”Þ+y8££0ÎÍoDg^Ú˜)#áØ‚{ÐB±'O)x¼†ô@­Ú„„p-j ÁÝà~ÒŽZÌJK^ »äs$¥%€>Õ'·X”î†ëqmµUiÉ sºH¤Çj›ÒG-KäOÙ•úT‹|ŽCiq£sÖËç8•j™!·¸p šOyb™ê%µ—H¡ƒ">u‡­¢;tO€ðAF#žÂ®ø Hß7¥ú[Mî¾S9ÎeWïK†×W~@Y£nwÔJW~¨ç-ƒFºÚF&Gk`»á¦ÊÇùAf£M¾ÓAXj„dÎUy„²DÐfiŒX¤^¬žIh ްà}ºï¢è%fó‰eÄyÄFârb'ñzyÃÐÚ ç\XÚ²½e{ô¢Kê.ñ._\­ëd‰r·º›OçMù ·_²z°;Ÿï\}Éö µÎK¬Îþ͗ͼ¬óŠ+{®Ì^°¡¸Á¾h©{©82Oš›Ú4mT<É&/»rÃÒymÉdÛ¼¥®¼L[é©ã©ãB-•Vµpê¹ü ñ³| ?à/äsÙˆr4*G‹r¬ý]{Æû3gþ]+þ>tÆ÷×®§z-ϧoÿÞÏer™ ~UiÈ¢ç2™Á¿OØqÜ3yî‰GÒùl62ù|¼ˆÿXY‚¿Ï¾ ¿R}9‹¡C&Wù÷\.óôÜ^ÌÃß¶ ýß˦ +'úЫÛÓé<ô*'U´èÅðÇ~žOç“èÒq+|þƒüÔèÆ ì—Þ_…Ï’¿CïËQ”9ð9øùW¢‘hO$ ® p;<òɃQýX½Ç +ðäAë1rV”Gz&ÃÁo=«&•R>¸ÐœI±¶•ŸˆóžÉÙì”,isr+nXÐ?êæL´ƒYÚà‰d=¹þ”´bi0vhQˉjÚÄqþú¦È¢WåÕ#‹ïÜØêôœäµ¥½:diEC¨sQáÒÝѤÓè¼i›×Âéõ"§ÏÝ^í§J’ûùød¿7Éï'ä~o¯Àaòw„ƒH Ù ðhÙ`Òë “á!’ÔX Î +ð¤Â|{ 'ì8U¤*0¥ÖÓT°‡ìßß¡~'ÒØóZÁ.N$oOønóGÃÑÊ+,g`á v‡ßÑ\øœŠ%ÿŠîèˆr‡/Ã?Ë#u´ö”ä÷ONþýuùýS“=ê–ß«ý]í—{øtí½ÊNþ½†¨^ïYÕ |½ç&¿ïùüäèÑ\Ø«º iBHÖÊÁ‡'ÀჄ5={ŒwP†Ä13RÃþcdá˜aËæ­×Nùaž«úät-3°F3Y»Kª²«-þg>^r“Z§W›Úzüι#OdVì[6þL4+†-£E°¿òžïÎå¦%D!6-—ï‰ ðz #1\Šاºü+ëŸ>>|o+‡ .Úîjx|¹aq9éZi\Òˆv/TúûK¹¿ß—5  iþLÔß.¢ó±Ä·rÌ7Eca“¥/‡±0ËûrbN´”hµ“aÔóƒ–Éj·-š‰ÄéÏOÉ^„)îëIp\›“WÙ‰óZ½í IïьޟïI6µd¦Ï›ž©\Ur´ä#ZµF ´¬Î“lò»Ã}¦~Fu¤m´Õƒ, +¥çÍ^GØi²šê}þD(Ü8·£qn£SÇŠ”†l¦°›7ò¬dcü‰@°8[¶‚/Ã[d)¼(kÁ¤”¬E/ÉRQÖ „åJ[=A8ÀSໄž€ÇÐlq#9ñ’ƒ¯r}†*DkMázHÕJ æÓ‹g(b±€[VéM!o&¬!ÿ¬¦-18igÔo“d¤àZt*Õ· WoЩhi1œ˜Å°Zµœîg,³¾öœ²Ã¯¢û å'=L’f³Ö~Ü‚šð`Y¯Õ˜qðËÃ੬’§r®ºG›¼ßœU†Ä^Ð…Sµ$,’dÉ‹Uׂ\Qâñe+þQ‰q¿3„¶³h›a†JoôÙõ UïVþj·ŒKvÚ›Ñúï9»ý¾.ç÷ô Raƒ]B3¬&Û NÎT¶„ ,+…šVí‘PøICÄÃ0ÏQt»F$\tùÉ@7›³Ï"Å“ár’¢P‘ˆ¯ê6ÂNOe_iQå"ð/“2MW*õHêaOMêÑ’:M¾öÀˆÊ8)×›®Ÿ”;< Ë]Ç*3N`­b7Îð1bpÜ,ºÂGÁ/ а‚_‹"囿)óevÙº9C!­ó‹§MøˆV™6ÕªÊÞê-¹–º¼¢jÑjQ[GÕ©"ùÿÇÞ™€·U]‰ÿ-Z-É’¼È²lÙÏ›¼I¶¼ïñ¾(ñy‹C6Y~¶•È’"Éq I–Ò¡_)åO)ÌÐÌЙÂ×B($…JÚ¦”ipK ah ´R([Kœ9÷Þ÷dÙq2ïßùf¾J'–î{ï¾{ÏýsϹÏOñC‘¶:Q,0OVYg{~nÌÎ6þðÖ/VÛšoU7WÖU´õÕõÕµ±O4o2›M¦ æ_ͦ OÕPŠ~Ë_­–*OWV/ys”ýì7rñÓ)MG5HÛ´£2QÛè߃Eiî×Ô9z¿ 5Þ¯O?†TúñöÛ**«OªÇÛíåcµi’©Ù;'lDHÇ7»«Ç¹Å\SÃ&œpF¢²©ÆCI™GèÓ-Ir£Ö¨¥äIGdÜ’ÁddHªN™G%ËÂj‰ä`ñ¡‰+¯·#>=˜Ù™°È#é¯éu‹g_OH*5Ê×éä„6ÖE4Ì,µq·eÚR2ô²CYhŽ Šj Ö=”–Vj¿—CQ9º#ôK- ¥™Q)º˜.•Eu³ª…J¤j⯊UÏ_ûœñ¬_°…‚)/>"$zP]#þæW|–²|Ù³-3X6ž,,eM¹Õ£k²æ¦¹¢økµ‰‰ZZž’‰þôü¸{ò®µ þ»'úwâ•…tY'èÔ9-WÕ^½W¡¸•³ge¤-×'ë5rSõôm[¶Ýé­ÏÀ« +²&ÀVÒõ‡R”0ÚµF2L<¥5þÊ/ß/g ¥'¢ª&!¥Ç”ÍøVPyÄÈÑK4ª +¡À¼]P[—ÿA~m]AA]-êj ˜7µz½–.\|}2/Åëõñ‹ïÒôIôB+JC¥@ê§OS2*.Ó¢»"tA×¢. +jņIƒâa AY©šC&5š6¡0!-//ŽJP™LZ΀Æ&¥´KcƒÙúTyyiú‹ÛQÏûÈgWŒOü…Šú‰ó<ºxÎ-H‰“üiƒ†ù”LeÈÉÈÌ7(ã“ÿý¬FÎüA4¥PËé–Å'uz½ŽyQ¯Å×ètôH?Þ”é‹Z¼;)A˜1°â¡Ð=}-˜‡’ãé¡]§LŒ³Ë§Fs æÀ­Æì¢êJ+x?›]šNq9GÈ ÕU ‘Y™MqñЬ,ƒ E8ôX²äZV•oÂ>ΪpˆPä?™¡MòŸ?ëײ Íø ÇH1Ivnm•å¸<¿¢¼Hú}È>yùÜΌ⠃òλ•Éi¹©á‚lÁ‚êóï$¨µZF{þ]¼ýPvŽÊk\tÒ÷§æ¤¨r²ë¢UEÙÊQ¦–>Fß åDúÞ‡Sµ…†r3²­„2Dl¹&¬j±YKØ|CRòE:ÃòÍRe©™²¦bs_J¶Ù¤=.SÈe&¯²:«À¼%57Í ùªZ¯VÐt^Ue6«áð w¨tjµÂPœ²¸=>!!žy43S‘ÄgÈL3é’t™*Ú‹¬OÖ¢x­Šž]‚¢´Ž>f0ÒgR$.(½ ]-JGVœË)Êö–»¾¼åè÷á}ëá<=¼ÙÞiMvnEï÷Ä];êžúù¶¯í¨{ò?æ÷ç¶ŽW_{MnÛU8Wà2ä¼lÊ~(SþL= R£%ŽÒd•Éâ2ŽêÑê".úB!úŸâ­•™'³ŠÖïî¯Ê¯¯ÍÏ5©™.ªn>i²”$–”µ7HþØ<ã(x ›@é æigÌ›—[(A/XÉB®„Èœ«ËŠ;B¿ò E¡_~0«L‡æµÞ[öè1í³Ú3ZV«M´5‘™H¬ÿ.ÊÄgËŸ;[QŠâtÔÜηX–]ÚÕqVF‹#vi /Ê’‹r3r“”lWJ¹- &Ûø\F±Î\Û½¦¨M%}ËgO-k¨i'³ýñÁûëËßÀc;n61L¼wsoÊs}-5™‘¤g'Ê,BÞ,¬T)Å¢¤0¦‡u*‰z!Wàå›Î?%x¯¨ïR*anMÔFç‘x16]¢ô6[îùûp×c¹6;‡f¾°¦ÌTzêi<áO?¨€øˆæú+8ZEÄÑħؑè‚3Xd^Ä}çž¾½#%ÅU•ÖÞŽNÄ›"‰êŸïµ Âq½y|]ïý’É“¹^’ÞKé!ª%Ö·(Ô¤ Ëž2†—v5‰Âï™iz›4Ñ\`*/RôË×´ç—%ÒÅÉf•FÁ$™h}JŠ\¿Ø‡ü¤Œ¶2Í’qXëäPÆ'¨T¶Ò²mT|JÙ'Çv¶™nºe4Жöè· t3“.qR”ñ:åйŠJƒîYÜ}ysŲÇ0¡ÿ9±Â¯ pàN‹_Ü«ÑhU×ݘ˜§ùª*;·(9¨Òл¹ÔT.ÇÈ(œê‹Ù7¥©âÎï2!ßi¡[™Rɪ„Ê|PÃ螀.9è\IC‰:'OùKz¯!·\#_/ªo,FîÞ•šuÉ:Óõí•Uµf»%M®T«t*KÅšÜúÑz³¾¸·!Lר´ôu­¦b[é–^¾°¤.Vʹée²^•Qµ¶ØÒ=¸µi7^otÐ9ŒìÓFYµ¤aÛÊÉ‘>*ֲɨLU‘/DOÐÈå”pCM¼q^¾Êð¼M†Œlµõ{šrר9ˆØqJyZaefwïàæZ•^WßÙWÞ˜Y‘oVÄÅ)µêܲæÂ™Àúµ›ÝŒ©iÓN­O”)ŒY©™Úmkm}³‘3§´×Z!™eed¨”‰zÕ׺™$I* =Óõ¤K¶ý‘Œl\˜…¡É‘"×6Ø‘ïÿMxœö}ßɑҖe)0/¾*S+¥Õ³2­©ˆCFý;æ•W}ãêøxõ­Ùh«3Ð7jâ$I‰‹…iôñňö::—É“t@ÌÌý>rBô7‹ìÜU`_†µx{뢻[yùkw´çטä +¥R©HÍ-Ít8ÌvcR|>=¬Ñiã?H)M©ÙØ’ÍØÝÝ…J#•f䤤©4ª–!•°¥çäd<̰æºQô}˜Ãõà#…TÒÛzççK3‘Þzл*j./×›Ü}âö²¿<`Xq³ª>·}kã _—¤4Z»ù®ŠZdjµT—^h.ë°&ÓY[+¶oýlMC^[º.³43Ó–Ï´4Oõä×MÞ4hã]ãí‰ÂaI‘+ÅÝ›Ê –=×¶µ¤$µWÁU\z®+]ÂTJz “&þbP;•„f#ö‚È=)¼Z"ÿ± +Ãe*Y™Rú–2ß–Îi¥´rñ)³™þ^R¢Dšd6¦hÎ?š¢QhôqŒ««ÝW¨e4ǬR©pu]AY§(‹‹óòXóãBØ+Ãq'bâŠÈº';òDòêÕ¿,„.@Å'’W3kn¼áêûƺ×]{móÆº´ÎµÎõ_«ª«®Q›K²Ëíšæîúêææ†&FÜÇ{›§l[Ú\³ieÅ [ l[éV[e•59›ËЧ7/ÞiëÌá:쵕ø»At>¶u1ØÚrÈTƒ"‚Ù,/E#ÈœTÎ6®ˆèi°ÑNzñ ËÒZ¨š©Wšl=3]¶¾xUœZ%Mɲ¥WtÙ’in¼´n°<%§mkãz¾.ù Lsc–ͬ©h¶t1¿µñî… *…Ù”cPª•EÝW•ÃR¾~´®‰ïʯã?_²g{JAeúšÎ ôW ¨‡ëYÊ;%`€fÈ;%à«-W–wlæ5®öî-uFs“«£{k]ÊÍñéEæ&;zo±1zçg6–Ú7î>G×n«5Ìíu wð·qê)Fͺ!§›Ô¨ ?€ÞM” +ú—àþ!ñüLüêF$ó¬LeSï„·¿k| } b *-N«“ʓғÒ5ZMMiyuRZjb=¯B—¨Ó™&¥6kýúæq½D9‚¾ÓDý€©a· +™&#Æö›mR©P¦i†éÒò‰3M¡93Ï—`Y©JuRŸšŸÙPЧ~‘~þzwy8N¥Š KÔÆd‹=‰^§Ö*Y½nÑo¤÷/~ü Ř$vLÌ4%B¦)LCXcÒŸ<Ó䈙&ÉÒÅ·Xªór…B©P³mæ®¾Ž‘´’”„ø<ºC­ÕÄl°%U6qô­ÃYò8•DšjNJ¹[ÓX^§H0Ðéù©fsê] “ZÖƒ¢OÌÚð‘Bª†dš!Ó”@¦i†L³4{?U¦©f +²[6Öõm«NT¤u¸ÚìU +­Z¥’êÒòÓJ[ “èÌ«ìüÆý•µ9Í&m†ÕÜPC½j¬)Ë>îÈê­ËVIä &. *·±¿8‘›Þ^[¨¯ëµ%táõu˜Éc7ŠY¦²L3d™–Õ²Lb$Ëä¡'2¾ªÈ³¦ej$‹‹¿HO§&$²Yzcr¢zQŸ –©´JF^_g@¿­£¾…c[ +ĶRÈ2Êäüü¬,6íq!È6È2¢yõ—È2†åIư2ÇØì›ûÌZg[Ïî]»=m]}ý·VTWTV´Ømš¦öšŠ†ÆÚz×¶cWUåg­¯qnsT¬Ï²8i½Åfµä–›5‹Ïä×g¦Õ٭ĺ‡"Ö…ÜRóåÒ;OpKy”y/›[,«§–¥±¸s¢½Ø3DšÌ§ÙÛ‹’éÌaÛìUYÍë{]ÕI7Ðu™Ö4µ½1·±ZF‡ûr´qò”sørnc_Q¢ÙíªiÊ* çO'eYUõxUO]h“š€»†Š bj+¥as)dÚä*2CЯÁ%IˆWªr7y‚¿’¬5gÉ“‹s’)ú½ÒoKt² +JM)©¥~,:KÌ쟴ºÌ¿>¯Õé´² +³¥£8Õ„þöÈ…Gå÷3]Š2°½â +8pÍÂf%gu17Ÿ+Ên€ËÅ»‰Ðë.)o2û¢ä5"ìþ‹E’,yAég°¹”Èj@>»$òùGK¢Øq yMñšò@œ]?.‰Ê!ȃ«‰:i™ì»H~{)ÑlÓœ\’xµ ;@æWÈ m[Db9µB^E·ä@”¼¯wEÉwV—%Èî„÷ˆ$lj$ů*[¢äÅdÛJ1/#÷/Iʾ”}Æ«@Þ'’zägËÅ4Š$I{2ý'f÷Å’ÑqYù9‘Ì»¹$Yk³"òQr¦±;ö¥ c¶n8³áõñÆÿñø/Æ_ÿíøÙñ÷Ç/lTlÔc1mÌÙèÛøÝ«R®úæ&ŦÏnú`óšÍn±mñ`ùî–·¶oýÜÖ׷ݼím״땉܉ï¹KݵîV÷Z÷{“›wûÜóîî›>œ‰ÉÿF™|ç¿•¿ð ïãwñûø'ø“üÏù@~ÿƿÍÀ_˜’OÍOíŸúË437½Ë‘˜Ä$&1‰ILþeƲä äóžç<y>Ú¾aûç¶¿¾£äÓÞïõÞ'c“˜Ä$&1ù;”s1‰ILb“˜Ä$&1‰IL.–Ù²ÙÙÙc>›oÞ÷ •ÚÿtÀúßÈlàÞÀ{;'v~;(Îï ¾Ú€eËWb“˜Ä$&1‰ILb“˜Ä$&1‰É'oÄ$&¿B¡—ÉF.@EF‡÷°øoôÅã-ÿÕF…äy¡ÌR%’ï +e e”œÊR(¿,”eP~_(Ë©]Òx¡¬ Š¤· +e%ÅÉoÊqÌÁH_*jTþˆPVSE +µPÖÄËÕB9žZ uh¬+E+ B™¦ä)B™¡$Æo +e–J1Þ&”%”Úøu¡,…ò·„² ʇ…²œj0þP(+¨dC»PVR:ã¢PŽ£#}©¨âÔx¡¬¦’S넲FΦö åx*ê°ž°Å$HoÊ„3)ΤL8“2áLÊ„3)ΤL8“2áLÊ„3)ΤL8“2áLÊšx#·^(Î÷QUNÙ©2ªJ}”‡rSAÊO…àgŠ +þv(©~wÁ”|T i¥¼ å„}ÓÔ  á->y¨½ Þ'¡¦†êÒìá©y¨1­ñÐÆ0µ—8ªZÞíÎá½PšÆšpðã‡:{à\±.¢³ª@/²UCYqÿ.h!u9è×ý 6ÜÔ¡îZØš½èè芌gö{ð¼—Ôg +sà¨6Øž€#h¯ SX>FÒŽ_)‡{™ƒ£n<^‘î<œÄ{æ Ö$¦ÆÁþ¼¯r€NˆŽŸçÃ\ðù<®ÁS³Ð'¢<‰ß9A#±.‡÷‡°M= ‹h½¥q ãaÐÂg†€B;ć ~fá ¢! ÷Á ¶ö@‹¨UÔCmí­y(…±B0¾ ({±NAÌ×ïÓ)Òj‰ôéÃ#rcM}¸—¶“[e +ö œÃC¸]^°…‰°a¯A«.Á_‘ÅÂ~±—YhÇ‹ù-}°g÷JÚ aRK x,dnˆl‰î^ì5ÈfÏEZÍB]ôÆ[>lkѯ 3Ò ±£O—³À5—4Ž¢¶ŸGF½¶Kðܶf>nm·°s˜fi4oÑû|‚'£ñ»±7ˆ>Êc[#Ï DFCtœê„`k¯ÐzFA,´+b%ö4f—KŒ{0iB&±¶X[Œn!ž£™oÅ P½€àѱ;€¹ú„˜AZá…m—§yeG\—)ñ=×2¯"ñÀ/¼“Q‘òž/$>MâÜæb iÕôâèi%QÜ'Xf©uq†x¢V38ÞyÎ(ªkp¼ä…1ˆ«‘òr¯¶b˸py’×\+ãÜÊ™P°".ð8NÏãU†[YÕû¡i¨!+Úܺ"v +³w)Z,­Dm>IvºÂlÀ¥¯h£Wlƒ3G¼y;ì#v½†¬X¼BYòîËe8Ñ+/åå#3'µF!ö&^À }‘ˆíìnÅc +ÙG\WµÒ´`gщ_„uéÁ×â.JƒIüŽú\â²j¸£rGø2ñ˜DþI<1ãÕ/‹âd5¶ —W[uûp޳Lô5›˜'V‹)ËÏ +áXAl5!Œ{õœëº„Eƒ‘ч°—úpëd]|5üi=@Ìo=T'>:@uÁÖdK'Þã€}DQ'…­ØÛ{ò¡Æp<[j 硨7‚sià ïý°=Žc\Åám´µê÷C[èÜNjî£ZÂ5¸í>ØÛ ŸB=tF;ìmTîÆQô×g‘k‡‰¦Ã°Ÿ‹Œp¹VÜ£¨Yl9¡ýáh+´íÀí!ýQÿ]¸ÜѳKд3B-£6ÛA£^¼…öŽÀç ÔÂý·â1mûñºà8K'Öõ\"Œ•ÔC|F…#ÈFH¿^¥Qµb=X›%~íð9š£ö»áè0Îpfé¦×)0C£íÅ[K£"–jÇ£ATƒ(÷ÁOw„¿]œQ­-g7†/Õ"ãkÞÛ1¹¼E¬ÑŽ·†±­ÐQ«`K'ÇÊ^ǰ'vâZ­xÄCéÂÞK´½“ô1¥ éÙ6ZÑ«¹ËÌÒŠx|D°ôÅ\õVÌé5éùR-Ãܼ+·—Õr}wÐòO…¹v0àºÂ¿¯„kõz9§gz&âœ|ˆîâ'K4=üDŸç¼oxO€çz]{üsaÎëŸö¸9·?°'ˆÎàPËö +΂>j¬œÓå Ìp=.ŸÛïÞ{×úg|\ÏÜdõ3<ã qÞèv¦üA®Í3áõ¸]^Nèêø¡S.äŸ ºy©;ï +òÜœo’rážës s½7ï ñ \ˆç9~v‚Ÿœä'9/ÙËMò!wÐ@ÃÃ}Lòa—Ç*iwy=AêÃÅÍú¡AèÇå A+AÏ7åšõx÷póžð š›{y.è‡~=¾iP +ª†ùY8Ó7 ‚>>*áanŠw…ç‚|ˆ ò0 +Oúp‡¬\hÖ\Ý®”Ñ)³sÞ°'Múæfù Ô ñaÜ@ˆ ý` ¤-´îõúç¹€Ëyf.w˜óø¸0b šÁ)0FôåŸâ&<Ó¸aÒQ˜ß†“=;øNf~ˆ›uùöpî90)Ñáóä  Æô„QÞ5ËÍP7Ðâ4ì yöBõ°´ ÉÅfI_ÈyÜ3® (ÆK"U/öɵù½“£€¡¯.)¯öÛÐþeøÃA×$?ë +î@cÁfxç4P Ýn? ðyøPIÀ*KrÝA¿?<Bõ¥¥“~w¨dV<³N( ï ø§ƒ®ÀÌžR×øª +5½snWhÊïèPk©³Ð\ àõ€ó c%ܸ¨íáæÀÂÈaÑnà æ óVnÒ +€£‚8ê†*<|ºÀ”|pÖCs{ð¨D—\à;þ X˜B=X/;øÂäœ;lE.¹ ε¢sÄÀFó3÷L”fóЩÇçöÎÿ/iï÷·x +ÉÔˆª-\N[2“ÀßÁö¡pÐã&N)v€}Ql«(ð@/0/P8 ¢Ù3éŸ÷yý®Éåô\x ̇ +sáD‚I Õ™á½åD!6ÿ’êÈ 08îtt÷ s=½°³­4kmëí$]Á Ú{[}V®£µ¯µ»Ÿ5­8q5A»±žN¼ úk…íÃŽ~4Œöþa'lZa”ÎáÈ©cŽ¡N+×êt ! ]Îhá„3p#p^'i¡æ–Yª í‘¡Î%]::[{¡­!trtåMìÖ@ìÖÀ'`»5ð·»5‡b·þoÞ Ö‹Ý"ˆÝ"ˆÝ"ˆÝ"XÍc· –ß&éÄnÄnÄnü¯»Us“üŠº`¤>G­öb„oêStüØñ7þ/÷’HšÔjê0®´¾Fƒê³Ÿ¿ÒúZ-ª/9r¥õu:T_úú•Ö×ëQ}¹ñJë'&B}ø¤Ðÿ\àúøéÂïzÀœ@™(#²tª’²þ|0Œ•º +ð Õ¡t u˜ïK`”o@à:&zÜú§ÔFêWÔê÷Òߥf Ù­¡öÒ&š¡ói]¥&:ƒ^Ksô]@»éA:@o¤¯¥7Ó_ ýôôý¯ô.ú»°ç1ú&ú}3ýKúúeúNú úaú=úCÑ'}’1Ðï09ìZ¦ˆajØ1¦…ÝÀ¬cƒŒ“ÝÇl`÷3ÓìíÌ.ö«Ì>öæsì=ÌWØÃÌ]ì›Ì½ìYæaö-æIömæçì9æ4û'æ öæ}ö]–eÿÌêØ÷X3û[Ä~ÈV²±k$MlØÚ¹œ;ú?Èkð^“À+¼ö¯/¯»€×}ÀëQàõ#àõ,ðz x½¼Þ¥VÇ€Õ `u’É^%À« +xµ¯^à5¼¶¯Ià^7¯›×mÀëŸ×}ÀëàõCàõ,ðz xýx}À¾ÃJ€—xe¯bàU ¼Ú€W/ð6ì¶å¼dDñJ^yÀ«xµ¯àµxí^{€×Àëÿ¯{€×£Àëiàõ<ðú-ðº@mF“tð*^5À«xm^3À+ ¼®^_^w¯û×QàõSàõkàõðú˜¾–QÐ71IôÍL} SJßÉ4/ð^.à5 ¼®^ׯ[×]Àë›Àëàõ=àõ#àõ<ðú ðzx]`³ +öMÖÀžesÙ·Øröm¶…=Çö³b7¯íÀk7ðúðº xý ðú6ðzx^§–óŠ».ŠW*ð*^5À« x/ti^ׯ/¯ƒÀë;Àëiàõ +ðú 5N+©´xU¯à5¼&€×ÕÀë Àëvàõ/ÀëAàõ8ðzx½ ¼Î¯ó´ŸQÓsL:½ ø\ |nbº×(ðš^>àu ðú<ðº x^ß^‡×Iàõ,ð: ¼^^^çÙÛan}•Meï`³Ù{ØàÕ¼†€×ðÚ ¼¯/¯»×ýÀë(ðú)ðú5ðzx½Ç~$¡%M „+Ór^ñÿÅ+ x¯à5 +¼¦€×.àõeàõmàux^§×Ô::£mÀ« xm^^àu ðºx}x= ¼~¼~¼Þ^çiމ£ ˜4z±Ò™Fz3Ó¼6/ðºxݼþ xݼ^'×óÀëUàux§ßa5ìZ6™a-ì[Ên&A˜CûX»ŸÝ ¼v¯½ÀëzàuxÁ|d¿¼~ ¼~¼Þ^±’(Ùw$©ì»’BöÏ’:ö=‰ƒý@2Î~(á×Nàu-ðúÂr^‰–(^fàU¼Æ€Wx}xݼ^ϯW€×"ÕAk©NÚ +¼Àk +xͯ;€×ÃÀëðzxý™ÚËèi†É¦uŒ61kè fxm^àuðú:ð:¼ž^ϯ?¯è›X9}3k¤oa-ôl%ý0ÛAcô ÖCŸdç×mÀë×Àëðúð:¼~ ¼^^çÙ¯Jäì={ÄÎoJFÙ³’iö-ÉnömÉMì9ÉÀë[Àë(ðúðzx½Í~ ¥Ø¥jö#©QÒ$Í…Ü[†Ö +ù…ÜhlÌÚ75¥Áö‡§NÁ¿S*¤”Bxú¼ž(ä”Bñá©ðŽ|xìü;¶lã®v͓ǎ=sâÄ5xNXDg)JÁ^¸ŸS çÎ-,œRH(…T8pN¡¤qǼ +òÁÿ8ðÒƒ†~ÿûçŸæ™¤‹øu îY8'+QGØÈX`0âXÎí6Þ@GdÛÉKT’4‡õ:uªg÷n8‚ª:…Šv»LJÉd猻vË$”L@Úp³F´íGU Àa·RJ)e:¸pÃ[ +É…ľíÜ6ô‚Ve²kÇv/œÃçèÑù J†R!J@ÍK¦ dq￈^D|‚Ð!¼"Â^!c)™ä 9‘èz&`?#—\Kˆd4 KZCa0ŠhRÙkß¶Å$- ­àVAE {a¡©c2†’!­aÔc H³0Ïı”BÂmkAõ[¶qxó”àÕrìKÓ +öÀ,K+¤T ÓÕz½µ{Ÿ9q5‹êž9x  àã‚Á‰±Î Ä‚öÀw‘e>&Gî0íÛo„€Q4tmí† w|l4Š~zÎh4ð» ybÅвÐO r•vÃ9RdŸ–c---R€ãZœKÜ1)"Æqrö¨ZŒÿ¿Š»î¸¦’®}oz£(¢¬ÒTTÊMhQ)° ŠKè¢4%`„{/€® ¨XÖ‚XÖ‚%š‚âbCÅ5*ʪ ØVÔ˜|3“BtÝòý±¿÷Ž ÷Ì™rfæ<Ï™I¸È ázˆ‚‚° NI™ + ˜­Æ®(\Q°¬ÓPS#B(¯€•¾A®‡(Ø€FÑÎ`â öŸ…3˜ˆ‚QƒkÚ¢ô4dÝXþQ#á%Ô ÌŸ¯×ß!ŠIØt‡#‚µE4º°F!•Š@J#QUL +_ð=L¡‚pàÈ€¯A¥‘´¨ba4ögqT›PwêzšžÑt¹í@µ}‹-Da-¸`ùµýÿ\LÎTƒëOè¢|]lèwtAx!Y/„/Í@Ɉ@W ¸/¸6BíªAA‡/¤YÃá€é!‡³F]L‡/(€µiïÐÐ"¨”@k…úê4ðNÄø"c,²@@¥`,ŠÀ¹M{GÈ;ðÅdbL¦9ˆãn …ƒ”•ŠKÅLÎDxB/&Hah~Â< ÄTG/¾`Ih)˜â+ z<“å*•ÖÊdá^¨^…6„é­, {¨¨©©op¨`Rq¦rÒv&gÈÁõZþ«à>HW×@BËž¼½q¿º¶R†$(¼¢p5©bb¬o`¯>ª&ÓC>D \O¢½ˆMÇÙL¸"[ªQ§XWˆØ4œ  ‚²F¦‚5æ ÀÔvÓéÐ?¤`!BMÁ‰l@tZñ úÙ$œ­·þ÷Å*}øƒ™šÚè^„Œ±tùÊX2W}»üÛ¤¢ ÁŸ¦±NÈG  ¦À¨];_Á_/ø=Ø®²üÅÐT-þÿ‰HdœJ•Ë )  +Ü`j)@@BH ; `kY€X€ÃKÿŠTÒÅR +¬ y-¤›››Ê-Vx +0‹!RÏœè,D[›š m rR©Eé´,8@4÷ðˆ­Q*9$*•Àó•:­Wº­ŸF„ÅÔ]ׯH¤ÓBQ¹f¨h§“1Žš:ãP€›- {9¸ìÌ€¡¸"òe6c³´QÞ Eyuœ/³8›¥æàãJ”™àðz”á‚'›­ÄT˜L‡¥RE8àCT‚N©DŒîÑ›UõÆ2Är1XW¬V\ ª>œä!•¶5Hmå°h"‘¶ö†šk•°‹€žØ8ÛHΗóÛ„mèìx5çjNmN¥Y¥ꥃH.ëQ ›…³9жGz]=’"Û ²:ÈDjÀþ«¢RLŽ tX¡PTTÈdh ¡È…æQØ Œ­Ç(f_ ýkc³À?Øz¨&gDãÎ9l…ÙA0f꓌b ØC(bÕG!Ð¥´L!äÐqNÇQŸH”Jé%¥i9fƘ.ƒ +|Ff`ø Fº²F!”*Ò+45ÔDó Á@C-Z¦‘rH8GŸj¤ Î0l«Úš«²BÛ„Ö$*¶ZS¡%tàªo—«Û¢Â¡µÃ“Q{Üi)pŽúÜ¥!tè…gH}P‚Û @;l}šw8w8$G·ËüñPõˆ‡Šˆ‡ˆÇˆêvâ#ˆºæÑRGK=D=6ÎáÀ˜ÇB@>"é5i¥,¼ÜK@|Fƒôƒœ°¤È?ȵüçŠFb3µH£Ï¢i(H'‹Àq° ¡¥›[TT…JE£©}[Hé¡ì!¨£ˆFV*iZÒõyH«WÇ 5QTÍÖ +øiüä€NÅ ÔŸ€ó¬>q؇cˆb=P⊹â i†̧@*q›ÃVaZ6л÷&ÎaY +›h“ð‰kr”¨¼¾'šJ y0ä)-Q}“6 ް÷@›•`aÐêˬÄHÙѦ +¤Ž :¿>[I‘™!+±kXÖR¸»¶›21ì˜ÑQXbˆs:ÉÍåæmmõ±õ±p×W¹¦rŒ#ã@—1ƒÍ› ^Ð ¨T*2A©¼T.•#%˜ÍÔi2ã0€hKW©æ0CÎ_•[I±6Œ€f«i%%¦À*М~4_é—¥yÒ²Ç0ÀrèqšÙ7sôKbpÍÙêî`‚k®^}èÈT=b3CÇDèÂéÐÉÐ/j5Šø Ü€E×àŒ&¸#ˬ>÷¥7ÉT0X!=d·Žè”úô&àÀ£ s´H@€w8n&ÂPÐòßTOÔ»>ÍëØNj@ ¾Zq)“ƒ3¾å» +õ‰Q׎ÎP´‘ä@©A‰$Dzèè©%=)5 tB`ÛÝ„|½£h¥jÑ_EÕ§íX_[QÁù^!Hf B4 B4 ‘ :™J䇨~^©¦D=N¤à4Z[›1T×ãDD…(S‘ž +¦N)¨`YèãGn` åÅE‚WÐÍ¡ï´y€9tÈŒ`¦:"Âý‚3X<ø3 +-#r"õäêæ—Ã2¶ç¨}J¥Bj¢„L 2èÚ U¢†–]µTICê L^®)a™ɲ©£•Š Êš›ñ‰DÊHG¡g"¯hp(Jï0 ø*™¦„‰R;Ó°ƒ0Õ÷ZÂdj Óû~Þ¼H±ñÑš{Çùê{øÝ²ãФÐ0{ë¡IqñöÖÃS“bí­ý"æ¢÷$ðž îáÓ0öÖ£C“ãÿ¥‘ 8²¼,òÀÏ.j“,² ‰Åf³–ÖœNÊ—X,YbŽsÙ“F`H&u§bD(5€†Sp‰; §ä{½ó]–bsF˜Æ¡ßÛJ@¿I ÏÏ &¢§^c”.B嚤ÑgBö„Ö/«›9ýõ+vï’|‰Ù$BB‘òÁ|2ðQ’‰30ñ´™Çþ;äE‹%ÈàÓ„ÎZp–Àˆd&y…fBšÄ5!:Aaš:vL|trB<ט0„™tz`dD\B|×’0‡9,Óï>†ÊíIXA=ÙĬC?1&.Ò!(94.Ñzüð¡„e7®1p纻ò]\§‘¯'™ÇÿË 6Ô³M(cÆäö%z«EËøá1‰ðÑ4Ÿ _kß ±ƒÜ}x¾Îî|žÃ0b„;·7a£‘ùwG¤~Àà½ôg§bd n„|I‚ãØÎ]×ÇÝ(¹vt7eÌïŒÂ“i ¹ûêrOE¶Ê–LÝØïÇ÷ ÏZ°c·Ì7ºù¼àÔ‡bÛmvf¼<úôe¥;§®\âÑTKûÂ:‘qvTÍÔ‡¦ó†Ö‘ÁT¿Kéæw^î²ÊíŸâó¦Û‡Ý¿ì/˜|oj˦G¦uû΄m[”ŸnyϽèlQª?}ŒÙTçAçìè±½ëVÏÉ—÷ï~=tPÑÅ+y;wåRß XTmUXbûbZ'ùj4ÉiɪSfg;J?~öiò¼Pv;øz½Á´™qÒ‚‡Oö8}ÚDÿ3uÃ=<–Ðùœs¾Äù6áfàÝEä‹‹ZO¸œ˜-‘¨Þž\ÒÜããb°‘ÄðÝœ f„JX€)µ0¤t¥tÙx1m™ÜoûÆ«/: <û®e¯âŽ• ²°¡˜]Å]l\ÚïŽHdµ ù¼ðóñGe®Çˆ‰°€e 1ŠÈ÷Ë÷Í®y&0<)ö›IçÆÀ\'Í#™ótËW-"ðJGP„˜Bc`R©t§Œ&FþZ™ eyh:HIIù^‘IÓr2aííMá,m“dÆ7€$C/± /p̶-¸y¶Ï–‡uaØ–ýÉSÖÏñiˆÚ)}Â)wö½µDá±ný߯NjL” +†4iª3Ze×§æY¼™0l°ˆ¶ïÃVÞù]—nñDqwësËObGʃÞù¶9’7\pß-n/ÞhùÎÅ=ÝíàÁr›.L‘­¯*{ƒÁÔ²“y7×öÛ-pú²·ÏŽ¥·Oõ–_ð;C-]¹pjލÞáξƒ{,VŽºó‡c½(ÍÈb§Âº ÿØC"ï|_ĹQ/†}n¼ÿ®M”¹­_ô^¬fðb»¶ÚWÉ• ½¼ñãƒì‰<þ<¯¡–¥ëÚ°ÆÍ ÓkvÖóíbl38Ù ;ÇLBBÃ=×£±²ç+ÛÓ2Ç?W!+ÓŸ56 ±ôÿ„,ìˆ>jÐ[éë#"­ƒb¢Ñ™`aáÓø\ÄfîŸËå ¹¨Ù¬C$’ÿû4zò_èÿ‘V¬:m+£¯ß.N5Uô(’VØz·;{Ŷ§vWÏZé4ÈÙÑr£ð“耕?™VÝýùʈ—å¹>S,Þ,c©zż‰ö,ïköÔÎê=eËÐðæ'gM×´˜lwýŸ81apóa_&Pza=‘Ë©^xùÃü­]S~]]²¥’±ÌºÅr¿ëëy—äÉØ¨Uu _Þ*×~:,XáyþŒÕ‘°ì‹åK‹7¹]4àÆÄÏ®÷®ÎÛôÌRÕMŒž£Ã¿ü¸ÙtŒóÉ`Á¸;#ÏðשÏÚ3|îeamqÉÜõKb—'ýü¢ðsÞƒî·*".Çy1žŠ–>·ûì¢ÚmÁ{Ò¦Twö «ëÙªð(ã²?8yEº'Æ{ŸòÙ0.Ÿ½úBú”?*£—‡Þÿ)§¬jMu‚ß#©ã––â?ŽqÍsö?ß¶°ê<£L9øý‘ùî´cÁµ?Ü,y¿åÊró7â9ø¸_zdÎ?~#¤—÷ )fW¼Š. ØçÔÐ{µçÌëÍ.>-Îmä,”xµ–Õ;PHëü?¶> Õ’w @A UX¡]g» î7ÿv ; Ñ)‹¹©ÏÊÍoì#ðº’7r º}•ÉÔ9+pÃjÞ´íàÍÀ„@žÀuc¢bÂC“#­‡.Hž“œ +Ép'\g.ÏÕ™ÈÇE¢3ÅÿÝúŸø=¯ ¶øá}ÿMýEsxtþñ“òÜ 6ã_{`6ÖÖèÕ¯û~}8™°îô’~kâVÓ€-=†m:’3ès›ûû¢óÍ+éF )9m+k¬ªm—ï|ó.ÚÜ^±¨i…Å‹¦±» Jm‚®¬ýä[˼>³èúÑa”]÷Æn޾c×0"èhÖõ§v#ûÊ7)ÓH¶ÿRe—¬ÙZ~?fda¤c*A?ôøü»»KHßF +ð¿,˜ÆÔÄSæ`DfŽš›37™kÅ] IC‚ûf?ím¢èÿˆ´ujãž‚ð=¡ÿ¹{JŒSw-™_xxôü)ïè&Ž‘ÄxuP @Êž?4Ëûßï‹ujø—Y •£€0Q/ ø#½€Àÿÿì‰á8†«[ý—ûa0×ÆÙ«dÓÉ>nžŸ8œrÿZê„1x±cò¼8ŽÉÁk­?íx³ó®5qa§'“ªÇZ›ŒÏ}6äñä’¢)ÛÍYàY‡J„oV_oŒ¿z|a=‹ZµÖÿq[éƒq756­sK\úlËšÓ2òóým{%~þCÑ(Ìu4ø@œxÎlìÎusYI[O ü1Ú¡|‚á‹°éÞ]sV[{?¦wç}¬áŽ\ÈõÄ®z‘è©ZÆ2yx‰º®íÎén/Ç®Î(w0s÷ŗ糇-º”Ôóq¥D9=ïÆêbXw¯KÎ{3QSŽ;85}\–U3!ø÷‰[b }óÔ‹?›¥…õkݵ£Ÿ -¥{ØeOË8+I»Ò¾¤vøñ§›Ÿ|²g²ëé±åól:÷YÈö\3oÚˆá]Î?~tLtUÞ0•8µ§ø'S"ê÷agv¯ú©WÏëßx^òοÆþf=O<ºOÛYÓ^·îý-wç•A ç3û&Ó:½ZØóâIi߉¿Ïñ\Y°0ôD|ÉÞ‹?ûµuNø²Š{LùpBÕ›ËQçwZ,ïAòt(šºþtcϧ'^ ?!œH½9Ôqü¡-G …ço[Ðýî¦å& z9ñö3âóCÖô¾˜ßºôJÏÛ/-Ç]Þþ*@þLXÉ^\Sõ,þžìkÜ~*ÃòéõczÔrúÉÛqR×¹—Mv!$ô4BB Ó†à u(¿=d®øO¨˜Gj@öû7€ì8pAØàó×ê á†D.Åÿù‰EBúsì ÁØA±`î`Û§$csÇÃõñ?KŒÇ¸œ}óË”žyÃzôŸû|ÚøŸOÓøÝ)g3dËîs+:×³Ûø—riG«Þ»p‡ÝXi±<}‹À6¶è§€ŸÏžY÷pGÐ1–½¬èîGÒ˜Ew¶M½"èN}µðw^`ŸÎNMãkûœšQ_æH^ppöÛ긷ƒ¦t}7⬜q(>ÂU¸7?ÜÈáÆÍíO~£ÜšžZЯÉàB¾IÊ…-ž­ŸŸ ˜fl5&ØnWZ’¼ó S3ë[Z†o\rwѱEY=îz¯™ñûÊqK»¿)pšÚ¸a°Ãç)å§¼”¼ÇÉžÅÇŠ6ñÓëvŠíß ÞØÓµ·l`|DFÐÙÿ`³´úÝYrÖÚ³Ú®^\³eù9iÏäÞ³Ìì~©ékÇï3p¤[­¨xÓs›}¢šC­æ<² Ø9kÅãÞ3nôåXvr²·-¹í×´§[6OgM‘r¼{tîI2ë¾Ôôøù7'jX`ôÜ&àœÙi‘oc©,)MžÔdûðâˆÜòÖKæ“ï/YÛ<&€ØwpÝÃæ¼"Ń£QK³3µÜnÕÐoŸ‰ÝÞ}‹£ÅÏV… gsZzgòÓ/¦ØÙ½n‰“Ù­·_?Ä}\é£e>+˘£ËowJÞú!¾]h=ÅÞd†`ëv¯qÎKï]Ñí·ŸÆ¾Ûvô܈üØœ:ùíkt±³ÄÎçß Áó»ç’tº(K„HŽ ý:®þ)(ëŸx’‘¸†ŸéBûèžJî¯6+]ˆiêà?B—?&TVÀÿëC€[€ZVÝ¡dá<‹ÇCan¦^˜ $ÆcõÂܰæþ¦ýd"3oMÉÌ&2·™u“äH&2—ÞÚîHxWç:fÁ¿–Fš”ž8ßqvr1D׉p±äY[`£±H,=û; =û«~V<Hó5O±Gêžåw´¶øÞA,úMVaŽ|bjwÇõÉѽv°·uz¾)wضÅu©œ ¥‘³í½ÚeI¿Æ-Q^ðþueðE¿»ßÆÜ¿ØËµ0{FäÒ ‹W?©ž³IT×}”ù[a«¯ý2÷‰ݱߎgž= +ož´HÙ2ðñóˆË>žÂ4›·&‹÷nH^²ö]uÒˆþ—V—ì9@åìh™ýi¶ãÖüþÞýçN ·bÆÄOËÙÖ¸ätýÛ~S ¾~Þµ5¾÷‘§E}[®?xkX”k—3ÆÐ“ý†±ò¶•Œgö¸­ÜáZÈO'²*X—*yzìî}Ó|§ðyóúvÏ(~×·ý7ûAÖ19Ǧ®œŸ°ïT²l•¶ïoç%ñ6Å–óþÑú óÓžû>Ò?r·lF`X–Ì"Ü-;ëá½·íoºlïûèjaöõW3‡> ¡ÿ¸Ü‹–Bû•V¼ÀªË…ÐГm =(­4´{õ[¤SsöÓ·Õc· FœŸú6»9Êß8WluëW^¼£ÐÛ7ÅÒµ¢n×®¼´´^Ÿü·Züìg#~ÿSûʧFe?~¹@ؽù…{nªÙ(Õíã6³<+ú¤Xý’-~3¸HA´PF¯{øpA\øFÏ_wwQ<¹W°¯gZëPV±÷çý5{f”¬Ø1y^ðX_é°Ë;†°Äþs¿¤æ•ž‹›s9p¾‰AÚø«\ å(!¡"á8‘¹õ¸¾ÿq`Ç—#ù™e|4NÌ$s9úß¼+:$6×Ðך6)\@m95Q19s}?è“÷êˆçªQ>¤2"B¯ +‡LLÌï/¶ûøçÿù¡ Øö/‘=Q÷×­¿‰Í Žu-,ÎKÆ3RóŸT¦„å-.4VvYWYÒ¯êâžC•MÎ7£›Kxœþ²3‡¯0ÜÍm.y­ÛrFjz†ÿÁ]üÊù¾…NsWw{ᘇùϦ“¼¸koàÒÊœ7¬.²aXXêÂ%è5ùtVùÉõáË7½ ypo™Ï[öÄ­SìÏÜï]0a³äí… x ãZ“~¹Ü:«ïüû™š}sß´võ=Ôjp¾ëå›'-ªø}®oøD‰û‹ £µ9›‡4»ÌiŠˆý˜Þ/ycŸiIÞÉ»4Vò$gº-s¿©=4ãPñž MÑ)·ÎN*o_q$ñn «Ç +¢`øƒûõhÌm«|8ó¥@B²ÛÛŽ5¢q%$SÕ ¹æºÿÙAüûß´éùä ÂLß%Ùßâ s†Ê5B»q]y\xMû“GzN²^4v‹AN§>‹Z†LñiàS¿92A_1­‹¨8vªÄ%ç§ý)uÑWˆò)éׯ-.9'Ú_užàáqãâ^®ý9Å€·?ºîvÂ[îðê$¿þë\éYηZ[Ô9~ã¥Ï&ÿ8œØ´‡ê³vž=eÞùìš{YYá¦Ek:ï\’8QÖcÛcï§©‰JçÏ;vµR|®WïœÞ^Ây2¿ïóQC’Bš'ô\˜p>® žvËîÅÍÏ5^¢ùý[÷Ïœ·ã‰Ýö—KË$ñéÍÄÈõHOvbÿîN¬, +endstream +endobj +14 0 obj +<< +/Type /Metadata +/Subtype /XML +/Length 1463 +>> +stream + + + + + +True + + + + + + + + + + + +endstream +endobj +15 0 obj +[ 226 0 0 498 0 0 705 233 312 312 0 498 258 306 267 0 507 507 507 507 507 507 507 507 507 507 276 0 0 0 0 0 0 606 561 529 630 488 459 637 631 267 0 547 423 874 659 676 532 686 563 473 495 653 591 0 0 520 0 0 0 0 0 0 0 494 0 418 537 503 316 474 537 246 0 0 246 813 537 538 537 0 355 399 347 537 473 0 459 474 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 342 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 503 ] +endobj +16 0 obj +<< +/Type /Font +/Subtype /TrueType +/Name /F2 +/BaseFont /BCDFEE+Calibri-BoldItalic +/Encoding /WinAnsiEncoding +/FontDescriptor 17 0 R +/FirstChar 32 +/LastChar 201 +/Widths 20 0 R +>> +endobj +17 0 obj +<< +/Type /FontDescriptor +/FontName /BCDFEE+Calibri-BoldItalic +/Flags 32 +/ItalicAngle -11 +/Ascent 750 +/Descent -250 +/CapHeight 750 +/AvgWidth 537 +/MaxWidth 2021 +/FontWeight 700 +/XHeight 250 +/StemV 53 +/FontBBox [ -691 -250 1330 750 ] +/FontFile2 18 0 R +>> +endobj +18 0 obj +<< +/Metadata 19 0 R +/Filter /FlateDecode +/Length1 113660 +/Length 49723 +>> +stream +xœì |SUÖÀÏ}ï¥Ù—né’¦Iš&mí’–J¡´¡…*Ð%˜ @ËZ”¥ÒAp‹€»â‚8:¸ CZ@‹+*¸Ž "*(UTD¤ùÎ{'--à6ó}ßÌïûrÚ“ÿ½ç.ïÞsλ/©´¾P_^RV×Yš})°+óbn//9³4磛]ü €|ŘZ×€¥>;ÀVà¨ú)³š¼±g«JܲŽ)ó[¬ž7Æx“œÞ4cö]_•àØ‡”‘3f-œþó#ù€9»¶­oœÖ0õ§+݇óip¾AhÐ-ŽÙ‡õ2¬'7ÎnYPUïþëûÜãfÍÒð´óëo€¥68g7,h²ÖÄú°½û[gOkiøËuGÏvÎ æ4Ìžvý{£€õ@vGÓÜæ–€®Äý\-öoš7­éjù Ûª¸_ˆ¾òéÕ£Û.›¤/üâÐŒòØ×‹_ùîÈÖ£ ޝRÝ­ <(ÝÀv¨Ö]ðW±Ø­ÐG´ Ä>›ñÚâõe8Ò.¨Ç#^—ÇV^¨âÇ…l­,§L$ò»àQÀéå/*Nغ€’/¢ëœUkµ‚ ýñ*­A¾ŽsZ=%¶ñÛe:q§8»îÄjØëî÷ÛáOаò§¸êSE¦†¡}ëü—PØ—¿&üƒ0PN™Oy=e.éDù÷„ÛØÚoþɧ¿~X7äÉܧŸWæƒIôz¢%'æ.é?'¿-8ÝþÜØïš0ÿ_ï1ØrZ{cà!ü¿;~D`ó½Vï˜Áàâ7ÃÙ§m»rûÖù5äƒþšð^Ènï)óÝ ™=eÎp¢|:ÁöØÞòÌ@{¿¶_Ný°JÈ6CÆéÚ„— æ·®w²ðÇN¬O°õ_+?=Ð}Ú1Á…ý®¹¦þÑë põiíBàeþeXö»ã  è^«¯ðUýïï?:?ÿÍ÷QØOàüŸì6œx_þêxlûͳ÷·„{£ÿ¼|JïÓî?Fp§=þ¬ðÏBÔŸéÏ„;$æÃ­bŸÛ·õmg‹àšÞò|X%4Àî{XÍ} ëzí¿ m,–æù¾ÿ™Ím€U¿yýËQ×ÿ™ÿç +Ûûï^AHB’p·õ?ËûµÍ„KúÕ Ë$„qœþw®ƒ_¸€/ÜtÊša(ªïÎÃ] >îâÀ3§Ø}h÷ÞëÓoö{ûÏ®“} ûùKa_›<µLbôi×ôÄŸ½Êá>¨â>†Ñü÷èÃC7…úÀküÀ{ømÿ$$nHJÇñóp6jªJÐö¡¾‚úÖkQ‡¢š°þ“Ð5ÜC0Ž_Œ¿äü[8oDñ¯Á(~dò»!œÿRø;! µˆ¿3@jQe¨1¨Q«Q5¨ñ¸>®ï"\ãázËpÎ ®o­UE'Ö‘AÆ×w­œ¼ þÆÉ`;·q~XÀuÁR®.ãöA'w¾7é‚k±¼¶_Ì^€ÇQ'ò®À«à¶žáüí\Wà®#ð +öîŽÀçXŸÛøô¤±{!°ÛŠãd`ãšr-·¹ÖÀ[ÜyO¸En®!ð·Ësß`¿6ìw7×¹ðr­àá΃n,ã •[‰å9ÐĽ×ý¿{ÙÛP"qù?ÿ¾7$!ùÿ*ÂÓ0ÿáÄÏSþ'…„3yláð*>lá?w<Ä/†ü xˆùá!<7ÄŸë7ü­Ø&¶ß/q‡á!i-öYçÞæÀë8ç»Rÿ—ðð ¼ü¿±„$$! IHB’„$$! IHþ·EüL-QEÿ>¤çsµTþÏÕRül-ÙñóµôÙ:ø¹úß²™„$$! IHB’„$$! IHB’HÂÖþ~Ÿ„$$! IHB’„ä¿Qø &Ðß#`¥¿gü^Ø.4Œ7ÈÀ€%-$Ò`ŒBë8ðALƒ™0š¡Âzxü°¶ÁK,ÇœaÎ2瘙‡˜ ÍíJ«ÁZfm².´^e]íx5ø[õZ°âŒ)×8jÀ‹3NÁgÁ¼>3vô™1ÛœkŒ3õÎØb]b]%ÍÈ?}Ôwáëai_n6:0…{Žû¯à‹øõξ_]³?›üپϮüìJ€Ï®ødyCú/²£qesàRh“,«Q¯S~³ç7dN§ùQüÍüMüÅüRÞÃÏã½ü,þ ßÅÃËâ¿ã¿çàó?ògó·á±§äz½Ê ªàla*4B33°x–Èæ²V6Ÿ-aW³k^ØA&„ rA!(• 4‚VÐA;"­ãHpo'„üýàßû-avb'bA(ÀŠ´#Éü›»:1ɯìúìNìË aÑIËÀuÒÞƒué/PôøA*£/ð5ø×$Øé~;%ñwöúÂßýÏýµ)»YHýg&eÓCw1üߺ‹Á]1iâ„sÏïózêjkªÇŽ}Ö™U£FVލ(/+-î..V8tHÁàüA]Y™©NG²=ÉnÐkÕ*¥B&xŽAF¹½¢ÞêwÖû§½²2S¬ÛÐÐÐÇPï·¢©¢¿µ^êfíßÓ=§ŸÔÓM=ݽ=™ÁZ…™Ör»Õ¿³Ìníd㫽X^Uf÷Yý]Rù,©,8¥Š+6ް–Ç6–Yý¬ÞZî¯˜ßØV^_†óµ«U¥öÒiªÌ hW©±¨Æ’?ÕÞÔÎR‹˜TàRˇ´s ÐŠ—õóŽò†©þ±ÕÞò2“Íæ“lP*Íå+õË¥¹¬3Å5ÃJk{Æö¶«; 0¹>]3Õ>µá\¯ŸoÀAm|y[Ûrxº?Í^æO[´/·<ÍŸa/+÷§Ûq²ªšÞ 0¿Ìa°[Û~\¼½ë`KCÐæ0übQÜb¯›°½§ ¸6\!îÏfײ²Ó “±â_Ví¥º&›:ÀíJ÷ù¹z±e{OK´GlYÖÓÒ;¼ÞnCU^üžßë_6Ùš™Þ—¾øíV?ײַ<¥Qdô6{Yù­Îëw—aÁÝÜky{¶ û7Ôã&fŠn¨öú]ö&”½„: Á*Æ`f­Wæ*õCý”à(¿«¼L\—µ¼­¾Œ(Îe¯önƒÜÀžö<«is.äO\‡ßXŠAq–·y§N÷[êMS1?§[½&›ßíC÷ùìÞi>1Jvƒ?m^Î&]Q…{;©wOgqçr‡ÂêåL¼OŒ¬øb/)ĆKªŠ-)´z™ zºáU‚=ÄR¿y°Â;J+Å&^ZZi²ùl$¿±$SpM2‡_Ñg.z×D×ùÕ¥QoqAiÖòie}ØoRYpÁÙN¿NNôEðÂ8B!†³²§‰wà‹6§‘Lbc­~kõÚ§Ù}vÌ!÷X¯¸7Ñ×R|«jíUÕã½R´ƒYRׯF탩æ6÷T¸RÌÁŠtSOX¥ú©Þ[­<©ydO³µMa¯ªm'·'+ÞA¸é0çȆ•ƒ#òðÖ¬ÀÓÍ^Ñ`ÇgUE[Cg`Ùä¶v·»­©¼¾qˆ8‡}äÔ6{­·Ð$­µÆ»Ä´H¼TT±ªº’Ì <{JÚílEu»›­¨ï݆ÏaëŠ:oǸÒú_{2¶y·Yñl—¬œhbÅ*VÄ™j°¢ú›¶¹–I­‚dêS:H6EÁ”NŽl†‡6lnÉ& +)¶]ŒÇm¹uªžÅ¾Æ¶zŸxsC‰ßÌÏìEàçìEíŒ ÓøUöi%~µ½D´‹öb²‡‰v9&32tŽx&µÕÛñœÂ„ò‚‰Q*òâ”ÖÎ@ ÎkÛiêòÙ0ÕÎEïõ+Óñì—9Fa¿¢Ö£y„Ù”qàñŠc厑S|˜¶=b—‘~%Π ΀=*¤1b:â )  4~VüË|~_ºxQïLŸ”Î?TÚ‡`ØiN™S¼Ë×a Ý›x+¨ËE(qmPë%‹ «x19I®Á•O±cÓ”z+z[€)µ˜êt–ªLd™†G¢àœ&©Êlq[¼C­Uù•Y8!~‹eu–xKÊrŸ/Õ–;ൠ~5®ÈÙÇ•Áèl)®¿—ãRÅ®O‹ÓTwB}ž,⢥™äØì×:F6àáOãÕh±î¬ÏupŽd•‹;× ßyG]gà^ûB[Ḛ́‹11Á´ |m'üç¤gf(N¶j%s[›B{úä/…¶—h„v%ßÉÝÝaʳtr·uÄD¬&ÌëˆËG\@h"œÛ[€8‡0ž`H"ØV‚…H0q!–Óa¬°t²O {Ÿ>&|Døðw„÷ ïÞ%¼Cx‹ð6a7áM„]„×; ¯^!¼Lx‰ð"áÂó„„g Ïž&<Ú-âõŽhb¡“ðááŽè©ˆ­„-„Í„Âsø¼K&"—0€CÈ&¸¤ØòYTÓv$ºj ܱs6â(ágÂO„#„ ‡ ?¾'|Б‹xŸðá]ÂÛ„Ý„·Ûh-J·GoÞ á<î!ø^ÂÙ„q„6B-¡špa4aa,a á,™x=ÕFªF)‰¸hÂB !ŠIˆ „ =AGÐ45AE¨#()i·SÖ=EY—H¹d&$L„8B,A tã)ݾ¤´ù‚ð9aáÊç ÏvP#ì¥ṳ̈¬Ë ¤Î ¤R )ÁNH"Ø‚ŠRXIPä„0Jáï(#¾%|Cè"$|E8@ØOx2ò5Âׄ]„„W)_&¼Dx‘nX'Õ:(ý„M„¿n%¬%ÜBx…ð€^FÉwá2Â2Â%„¥„‹ Ó(7f)_¦¦Ú å„JB a8ÁM(&\N¸”p3¡PDJB( Œ$Œ Tò +Ja9a!Œ #žÌyF(#”€på`€ÐMÆT;Nø…pŒp”ðÂÏ„'é‰ðáqÂc„öލ•¿n `±–è~ÁPbùIWi9‚ú£v”e/ꧨ{4£-Ï¡î@}õÔ§Q·£>¥gyu êfÔÔvT?ê&Ô¿¡>„ú êFÔPïG½õ^Ô ¨E½õnÔ»T–õ¨w¢®C½õvÔÛPoE]‹z êͨ7¡Þ¨¼Ðr-ê5¨kPW£nãkù±nÕ8Ë*¬\­œf®äkø±Ð¾šÈþÒ97}a}G„è‚; ×®éw#ÖVV®&¬$´®"¬ ,'Œ&œÕÎídgª£# •„„ +B9¡¬C_Ž(%”Ì„‚‰Oˆ#Äv`,;Y ÁHˆ&D" éNî>yõÔïQ¿C=„ú-ê7ñOP?FýõCÔ¿£~€ú>Fï=Ô'PG}uê_0J7` :ÙZrö-„™ä˜F ÂtÂ4ÂTÂÂdB¡ž0GnÊ% ä² .B!“ü“AÂ2Ûø1ü莡–¼§øÑP†Z‡Ê¶£1-£b›Tˆ0Vt²‡:"£pЃ‘&ÄF‘vÄý„û÷ÒÆ7þJ¸‡p7áfÂM„ 7P>^O¸Ž0‰0‘ö?p.áÂx‚à%œMGð굄B5a,a !py1JH!8 B2ÁNH"ØÈÑV‚… xG`p_†Y@íF=Žú ê1Ô£˜–ÿ@ýõ êר_¡@Ýú%ꘞŸ£îCý õuÔ×Pw¢¾Šú +ê˨/¡¾ˆúêó¨¨` +?Œºµ“m¢ˆü°ŽpávŠÈm„[ W®èÏB\NÞ»Œp)áÂ2ÂRÂÅ„%„Å„‹‹ æZ -„fÂ<„&Â\ÂÂlÂ,Âp‚›‚VL(" #†† +ƒ ùÂAAOд AM'’Š $(Ü.dFä]ÔwPßFÝúꛨo îÂ(]‡ÍuÒs>9ÿ<÷ÜǼÃr9Ÿe¹ŒeY.­\æ¹dã2ÏÒÊ%ž‹7.ñ¨— ]Rµ„W/1!.Z²qÉß—„-®\ä¹hã"°(j§ZXy¡gÁÆ =ê ™f~e«§®u_ëáV>ªµ®ujkKë ­»Ñ ¿§uKëŽV¾3°ÝÑ:xhŲÖkZ¹(lç •éE³µU­«h©œçiÞ8Ï#ÌKžW7/84qîy¬~^Ó<;mž—œZ!v6Í3ÆWXç¹çÇ_P9×Ó´q®gNålÏ·³™a¸Š÷€u*z¾ÖðufqÊóp·3³fx7ÎðLÏšê™¶qªgJÖdOCV½gRÖÏÄ<çf÷œ³q¼Ç—åõœýÇeÕy<ë<µYÕžšÕž1Y£=£Ñ~VV•çÌUžQY•ž‘+=c+Ùˆ¬ +O9?È‚ORHÄï¦Äe‰‡u½¹ÉÌ5™÷˜™ù¦„C ÜRÓÇ/_Ïëñ…£—8KÜš¸;ã6ÅÉôR×4E,‹àšÂ—…sÙáîð]á{Â_Îé×èïÔoÒócô“ôßêza“žmÒ=¥{]ÇÑMÒÍÕñzXç n]VN…^뮲h]Z¾Ð¥-ÖŽÑòk´Ì­ÍPáÖ&§TkÆh&iø;5Ì­q¦U|« +¨8· +ÜJg&¾Ä˜*€gVÆÄÿoe¼c°…E[*ø'˜ø_]eÀØ5P—^Õ)ÔTùcÏñ³~G­øê®ï[áÏøs¼íŒ­öµ3®´Î%þ^ª_±j˜KªüæZo¿~½¹ÄWå_&–Ýn©Ë€]|é›[›ÓÓÓ›Ó›[ðµeb3ZZZñ[ÃWdk‹ØÒÒ bÇÓ‹ØL¥7·NÂÑ’­Yœ·5]¬‰*^ã?\þÓVÈþÝ ø-±“&€|@÷õ}þ-C\·ÃFØ +ÂÓð2¼?0ÔÃð|_Á÷p ob9‹f ,íOü‰ß‘îËd³AËo‡0ˆ è¾?pÏ +]ËõX‹œ',ˆ@×ɶîë»;»_ SƒAkà^Aë!Ö8Ê‹õÀ ±Î-ËÒˆCòuÝ›ºïì·œI¸ã90½qL†X› `\KàbX +Ëà2ôÈ•°®Â׫a¬†5p-\×à p#Ü7Ã-°n…ÛЛwÀ:´ß„õuR+H-ëá/°îƒàAxþwaýn¸þ +÷¢õ~´oÄú½RÁ>ëвm÷Gm?´Û¨Ü›a FoÓIõG ¶ÁÃA> +Áãð<‰QÝŽq~&øJ-}í¿>âUxvÀsð<¼/ÂK˜+¯ m'¼¯Ÿb?­§ï¯Ï² Þ€71wÃÛð¼ïÃðwø>½˜‹ûà ÔƒZ?„°eZ÷Âþ“F¾Û;–z}‚ý> Îñ|‰ý@|Óg õÿ{í‡#ð漂Å33Ó±Hø~ƺ–±å(SbÉÆRX&Ëb.–Dz¡l8+a5Xˆóà|¸óâŒ>åí˜b]…61[(âð®»¿7Ê›0nbÔnCŸ‹_OIžæ4žÚ‰;½GµK1>5VÏG¼ˆíâ_MíÛKŒä³ýf=þ€´1oÅÛƒ£_ê†øwÄw÷óæ^ø[D¿‰íïI-¯H^þDòò>lÿBŠ‚Ø‹üû.Æ÷Þvàz?űob\Þ”z‰Q{UìóözÛ?Fn?|ÑcöÖ¾ÄòãÒÉô9®XŒågÁ¶W±åžW‡1²ßÂwXúËâ×Óhùõ´~‹WøUìó5®ë®è Æø{ŒúOØò,_ðë0®è(Ã’Øò¶‘êÇ ÝÀS‘1ŽñhHos~‘¾öÂq\M7öìÆ7DÇφç§3GÅÔLƒù#Ž”,4 f‡½Ä6…d‘úÃϽýõø¾*œE°H…ç°gÕ¡-‚Å[”=-,mº>ý£$[‹ÿOdøî̯áIžG0¿0í, [9fÆ8¿Íì˜Ù©,e³\6G$3^MÌô"VÌìhq0'KA¦ãþ0ãY!¶ ge¬[,ƒ Âû¡ˆUœîÌçÖâ žßïÉtL†çÿ3ÜhX€õw1×ÃXðÂD8O¶Ÿ{ß6Bw3¿Ouä0<0ÆlÍ4f…ÃUÜ r欀ýØîŽ8G~_mÒ†7U³ê29WÅ}üÑ„?Ú‰ÜÉ\u½Óe8þNWDAË•ÃÂmá’Fé8¹<,Ìž”Ååç”›; ˆ˜—ÅÙ“t¨ÎyE\~Ÿ; ‘“ºROÉŠE+¿ç—1|Åñdn¾µ¬±2‘Ït-r'³Ç«]%©Z³Ëî’¦ a*¹"%¿$©|FYR÷+‚B§Ô¥[ì‘a‚R¯Ö¦Ùâ“"åÝN™îè÷2ݱ³…²cóღΠ[¨Us2¥â^›)1{hb”îÕku:y‚%A.Ыìê¯S&XÍ*­NiˆÖ¨Í–D•N£ÐÛ€ lΗEA8ááGù +~xÓÅ7Üïf‡&YÛÉ-skcœj•=6& ’“cTâ¼!ÆŸWÝf·=)–Ç™ññ›ª×X4œ–×h"Ì5™'5=¶¸¸8¢À“&NH)ˆˆ)ˆïb®Ýèç8WDADA.:<ÖÐ^PcÚŽjÂìŸÃ(Æ#‹Kámr‘qÊg˜¹Ù„é2f*äÌŽW1{wü•òˆ¤‚ô¬Üpm$×¢Šrç-wj¸=¬û6kròÑ2^aÐ1¡[©Âbΰ ‹Ã£Õ<¯6F>üñ_âæc¶Öb&B: ‚Uý½¶ 2¸ƒ›Uªhèäö?lÉq£eNütþˆÑî?ÅÇWçàýÍîð:qSñ]Å躤 «€¹ž»½â½™ÚÿÔXt†”Љ|t”N°Û’œù‘˜‹6ô„LL\;/æ0Ÿç –„Z[±/?cÔ@süàñK7Ìé^›æPîUä'³ü7MÏëþ.*u˜kMÙ ÃÇåÇeLjÜ4òÑ ʼnBØÐ™g—F)R‹<³gLö•¦¤¦ )ÖáSZÎH4tûÓ†>ÞíÕ}Mª»ÁúÀ×ÂB™ÃŒ“2ÌlC'¯x8Sˆ⣕âbòj£;ÙE›Ý©ãz¶.Þ—ÌÕµ£ïNÓÖßí*yîF¼U…è¨DNÜlî#zE¼I1=„…‘æmòñ¥£ÕWºbì%õ…#¦pEj•B˜B¥5ºÏm)™½iQ‰ó¬ùwí\R±d‚C¸6abÍiÚpñŠåC*Ϋ°'&'F†Ëìiv³Ñž=d~Ç…^Úþà%gš³SÄ1?³åfK,¤Àä“s¸.·2Îj1è z¥ôó¡Èjk'›µÙ­ìÞž¤ÀíoþÍ~”ay<³N ½ ÑÛ‡z®{þªîG æH¹l¯bƒ ¾õõ•åÝ“μpêUím3×Ì>+ÇÈ)¼råUKfÉPDZcÅðÎßt]ñ¬Ñ¿\“ëk½tƵwfÅeŠþûr”ÑF…ѨHM‰×Æk!Ã5ôáÔô”èh›B\|zµ±Ùm;)‡ñ|Ø!†Ð°s@®aÉò;¤“AùÓî1ïy›ë~¥¬|˜J­éàf+t±¥é^8ŠíÖh89V´ÇçâÃĽÊA6îòxaX¢#ÕfìÞ!7;œÖ¨î룣䉧-Jm1ŠÎ $oä„­åœ ~¨b‡™ø·ö 増R`ñI^ÒI^RmV­¬è£¹Ø’­Æèhî³y«;¹ÚD‡^¼´Ãÿ wrôõÎï;gÄ£²×'Fþ(/m½ÛWÁVë4‚\-VZë9ƒ-Ï™’“ â¿½11\)ì ³8ÓìÆî{Œr‹# cVTaa*ƒZ¸)#ň{žøJf•%Ctößó–3Ò3À„•­`µB¤xF¤ÇÊ屚ÇX3¸!…¸õ ¦Œ` ø|È„Ë|.O¾^P¨u…6Êä0'fÙb[9=îÑcVsÌ[³|Rž.6:R‘tF¦#F£×†;†¤ó—ªô*™ Ò«é©ÁGáN î¤hcãt ÕÆêxEdM\'kÝìVÔõÛÇNÉÁüjÑÍ'NûÞœÁã-Š—N´ã› &<Ù2Ì–))v±[têv¹%õ »Q:Íoéqû±oŒ@y —áù=ÜúÕ™ê(Þ‚G¬sŠ‹¥ðbÒö†×ÎÄ÷ÎÞÞ7y¥w£‘¹,X”‡™xy€#%;^νÉߪ)/^ÀnáÞâ´æ'¾WUð_È¢-©1÷d¥F Kdìñ¨ÔœÂ´Gã’£e‰$1Û.XŽííµ]—jÒ铇¤ýÒÍs)Žp)%.x>ÔÊ"ðIóIžON5¨33sÀ=ÔeIT“êÌ ½!Õ’3T—Tç « Þ¯¸Y)ÑwÇc0ÂsÃsżŠù½!Áü§·éNgŠϾO rÑ“;hPoà„BŒÅÕ”œe‹×=et„sªxÃåœ>Ñe·gÆÊùJwêU6—-Nýt¤%œS›tq:s–Ýž«àÎIŽUë’‹²¹’Ò¥cÖžuü|=¥TÂÕ.—˜²Ç· ž“_¹¶’›¬Ò+e2¥^%¾_›8 .s@ ž£žþ~z +Û¿Å7rÉøª3k鈬M“’PÞûFÒµm¿ÒÞçÑÒs£Éòú½Sdí#Z6ìY³pÛÒá¶‘ó7|¼já¶‹‡we*l¨8ûòÉ%©á¦a #Æ]Þ€%~‚÷Åç¶\U3¨éæ‰;ŸëX1&ÿ‚W ›Ræ(µr͊ܢɥÉ%ç·­^;Ãø õ˜ÉÜÙ²S߉~ãÖX#SÊüŠŠLídÃ‰Š‰T*º,ouÇTëN};ò|ð­‹5·úÆõ8Á~Ò»˜D^†G¢ÓÙó~µ>n°ï’š—×r†$ñŒÁ³ò€²0ƒ™òjR‡5”%w•gm·  zXºIÿ1xQëÌjW÷dºôja•Ë%WhTM›˜]¡“˺Gš2 +KJ!è¹è(‚{úûãá£B#K…N>Ì­Z`NŒ_i©²üæÖ¥ehRʘÿâìKä(«üë®êºº««»ªï«ªïû˜žéž«rÍd&3¹C.r‘û‚Ä ‡€€âÅi”C9V@HDµn@] ²+ ®Âþeý«èFWEÝŤg¿¯º{fz’(.M¦««»§Þõ½÷{¿ïuCûýZ·O™%Ú +©UÔLEU¨h­ÓB§¥ÚkÍöøßý›ÚÍX$`¡×jzsøL3vt{ÄEÚØå+ ³œ])Dz³©2Hz%Æ›êO-ÝlV ´ê®oíÚÛwô4~.§æäŽ\µ`‡áÇß5>¼oWÞAãgE Arv –ÆÊî†}ÒÈwdâ‘¡]—û +šÜ¸5=t}ïàσu4Š|¬Ó¶Ï ö+d©b¿3$Ï ¸!Q©:7HgèL‘‡›ãs—wßa#ØÙØIf'ÔlRƒ‰‡}ßoì„tXkTˆøô‚×UÉQÃx§,‚Í"¦ú—Vª +ªÞ7¾h¼Oû䋗ͺpEÝG@¸ÇJù¡szW÷õÞ ôêó¯9´»´f´â°0=t¸ýî@±?¨wç3…Ú‚Mƒëï¿t®3˜P4r£¡@e^2Ú“Oz\0kÍ{û­ªOv‚œ}Äèu F#Èú9›CÆa‘]™qÜoX ‹,Ûk h ÀšãÌÑfõüܯ›ê&‘×Ò%®ƒµôKÇ^Å›eÓ Êfã9+ÎÛ<~ /?£ASQþrr2ÉÊŠÌãɈӬ¢—€¬:ª~Ù=›¦‘pÈ©pll)b'N3;y¢„2 £·êN dYÿæË§Í fÀâQ÷®{N\ùÑg/ yî8¦ +]k½Ë{Å»1k¬‘8‹¾yå±κæ¯Æ‘¶š§‘ñ}#Z|Ážy8Õ>õ=jí\“WÛ4C_¢FTEa¬‹ó/EXEpNÓa˜—¡çJÍ+ó•SÈV3nÛ8£¤(=gqÄ˽Cº€Ýƒcžîb±ÛÏ`bèŸi{¸;[¨ÚE9×&¸ˆ[½a‰$8‡í”ÿ¥I€)iâÏo8|Õì-.Ÿ¹š5ìUÄpØ C@w¨ÜÔè1ì³àåv—!°Ûàíü©Iàµôœ|³É»UÚkš?ëk¡7AÞkò:qdúœhò­ª<©5îù‡{Z²àåˆ/4ŽXd­–íê³Ënô‘'à3=é¢'>Žæ9Ô•©Èv7v÷é—õ´J¾ÑHñ6 Ð>¥auLÔR +E°v±±}¤}zù1`•£À*)äÂ^f½£<Ç ¡cØà*ö¸a3„èRñâJÙ—R“+Pmš"“}86 ^C<×k¡)&ê4õ§Ã'Ó÷Ÿ_ƒ› .Ø5¯q¤«¯;UôqÄJ«jÁ|}‘ï1öPW¶Þ/;Uôמ6€D¿ý£–rR8+[ßéÙÚ]ÝQAû‰%h5•sâðÄ{øÿ'2&k p{q©Q^€,±.Ã.؉Å^?Œ¨±èQÔkœæ‡mßVûrGâi|.>*Ýìþìµã§¿ iaÛIwRÂæÿГ¼nül¼.ÆJ Þ¾j¦ä¢Ñ@cû´=Ò“Îm‚Œ‘YìêIX±·°wÐØ†HÒ žÈ>wÔTCIFð;m ¼ Öi°1YÝ<øñG"†$REö¬^(jEM):Sǰ÷ˆ ox‚N2qµŽêÿDÜíL±xâÕZ(Ø58÷éÞR„S öíÓ´lòSÈþf‹{Y—EìµÓ¯”Êù6ÉunÖ !ºIÚNñ· TGs1#çqw-Ýÿ™ó÷E#–'©R]qýš|ã÷½w?››“rÄ%½'öhõ‰ÒHQÅÇJ«†«6*PœÎ­Y6Ôå×cøm1Ý]]¶+™9*ö6.P£kã÷¾üŒí•¿Æ_!zA·0xؤjpÎ`srWÒo’+p*·k› Žê&wvªkR(R›—1µ#ÎÎÆRÓéüXn% €ðÃÕú†Ñn]ò–äºÖVaÉÙ5¾¾¼ás»kAcó]¨Í쉈ø?Ñh2¤¸îÜØæ];ÒÕE·âU¬V¶\+:=ª5¿éöÍcÝsóžAFr¹UˆüÊÁ¾V(RƒØ÷G«ú¢ Šã‡SÁÒ–œfÎðd­ é ØEg‹Të2OßæÛ¿}kã¸è¶Sä“tQC½×¾| ñ®§wÝÒÝ7ìZqáy½1 »oÁ=¯ß\§%¿ú£pÁmW–ö†NoŠÏY³e§Ù‚È<¤Í k Éâp2N&uFyïB¢–£¨ÛàbÉhÂæ@ާ˜“[œð.tÖ8œÆ³d0IÜ4µ¡Ã%µÍÎ$Nü N³‚m\“Cç©(N[DðàXýˆª€B§_´¹m$ñ$c=Kà´_׃òÏtK ¢ùìFØQÀn±ûd¨¬}b¢©ù},fþmnýò“7Í‚s)Ð:†,0¬M­CÎ`ˆç‘ ÐÙÿTHsÐwøˆ¶ÅÓ‘X:ùÒ¼ fhyvôRèaç÷—Ñ9.“ÍãÏŽáV“YôyªÂ|GàºECr#Aû#zÀÞ¸ŽaòYüXL·AùWMüЏ¬ÙpÈ—ôÅö–T*Iãp1ÃÞ@ºêx2UˆÅú +ƒ`9n.«ÑC}pY-ùá¹ññw=Éæ»ÖYñ§€7£>Ùò‚ݺ§Ò»¦7À ?¶9ÄRQé…¾ã víüÂö•_¹ó#ë»´¬¿éOâ£ü–“ ¥ÉG +®&‰DY5µ²†Ÿ4.¸? +*qΪѤ MòµãåR«¿šâÅ߃ˆ?ÛBÀ¯yí–5®XŠ[C•(ð2ƒ~ODa·‰Ž¡CÅPW<²`AØ Ž w4v´ñ_ZDHˆ–Æõèíã¦Æèi ±‰VÄɱœ“EÒ¶µSŸ&µU*O“ºM–`ƒdò0Ø·1k¨Y6”ô¼š`ëÈ5ñ6|¬£¯ƒõCa1ÄmOü[ dH 9CDÞŸøÚVü Ùc¦(ÇMYšÐ™8+ˆ>o«,»d±#Óƒ$Ûâ]¢€3òV7üxnjܴ–ÙœêÃŽàhWÄns\ô<ðe)j²“¢C÷å&ÂN3=×6ß©ã Gfâ=ª2NÙlt!lã‹B¡Xȹòª;êÑ£ºKåØêUðè,’/¸]<—+Fë¶`bKpÇQÚÂñæR¹y›:ê Ûø];“k1† +MîF…@1Ëyhô¬Q"¬þb,”ñèuØ1ðT<–s¸ÏTã$ê1…܆£ËÉÒ¬ì×ËTÈO}×"0Á Þuê{ípÅ%3b¤ž>ý6˜ìŽˆ™$Ò´qðL?2ÏÐþrVt3tLÐ=[Éf„`¬ÜϹ#[Ü;ˆí«´©þqÐÁoÏ›YÈäFsx\ñ ¢Ê\-àSþü)Û{:g¯fdIb0’j;ÆyÓ @uSÛïr–ý¬lOS¢`eÖ`œ'‰¤Ý¾"™‰fÐC£ã£áðÈ‚‘`ƒ˜®o,ÞX«-X° ¬-¢ßž\º!,ÙûV¢Ïd Ï›6 ò~߂Cò¶$ŒMzFŠn‘‹à#nõl¹åÙËö>tQÍÛ¿ù¦®8𥽕Æ9 ã=s¶U‚‚R\Øml«„­Øs‹¿rÿÍ»sëoÚ´è+ÿpËÞÁòæ›.ÉwùËËvíÝ/W<…ÅÛ÷î†RÚyDpÉ"ã×üq&§çšÆÍ¹Ž¨[ÄsÕÍÄÞû¡ë0ü¤#7¾ïÎÍ×°•ŽÆ >{–éJ£Jb~¤kµ¡5~«Gl)çÞY»–jëÌmÙ´jv¼ñÜdt¯P4›šµj¡^õ´ñDÒXÜÒë·@/ÈÔm0ìm:Než'‘S:ŠýÙp#dQ-J ÁÓZ2ù´Ìm‡Ô¹,O˜ç ˆOAãY«Áõ8U:Ú$›:d‹ÿ ’ ÿ­6oË`º&ÅpBÐêÙè¸Ð)2Ñù AânÙâªA»×\»¡Ú8 ²yöâîm‹ŠN<ß»kÕlÙºjñ¿:¼#ÐÐÜ/bµ¸Ü¸zÒ4ÏÆt_ߺíNÝ%6~® ÂìÞ˜ø>Dé²²jßæéÆþͰzÀ ‰IÝs‚óÿ‹æáÇÕælÓ¡^% ƒÓã´"ðßìÚ9è2b]FLÒespŠaEZÕá\¼?¥„+s‡çt…†®|d[}óXY¦pšá­1=¸¦?3/ëª.]¿´:ëÀý‹æ”þãD|’ÃíphY·7¡…c¹%]ç}ê‚nÉå“ã×´€Ýö*ñŠO/fós7 /ùèú +çp9$˜¯.qò2ˆ“Ò5ƒyJ¶ˆÁá4†Ù›“ÙŒ(Ÿ¶Ý‹¿Œ3@¸‡àFc4VåíK§DÐKò¢dÁÞB`l( ȧþiÒeý²Ìkºî“d ÛQ> rié5Ô$ (è[“ApPà³ÞY’MxÐ$ŽÏd´”NBKr,ÿØ“¸äÁ^õC-Èàc±+ÝK7VVÌÎòWbÖ$Ò¢@¯ÚzÛö®ú…÷_ŒmjÂÓw\µ7л|ÛÖ>$ÿ¨W›Ý~ïS¬¢ ªÊ¹Ža7‚ÇNìƒåü[•3A ”údsØ«<½ÞM²TN¹{Š¥:ÀÈ1аÏÓ8ì*‚ðÔòñœÛ²C?FÛÃÕL®d祴ÍÁâ8ç´ãwèI™$Xê×.ó´3 ù˜‰’ö™sä¥^3y©žÁK]oòR÷D¼= &5bšòÏ$§þ&5޼üuõÕ4°>qeã/ Ð#Ñ3à°ºÑ÷q„{ ;Sñ²ø“Œ(¥ªý»‹5já8@ë¬M@·6î2‰&5pô>=á05n<‡ÎçqRNêÀ3×}Ë@_©dœ8ž nåPq ºê±Pö­ÔL° «²Ôb™ÎÊ#McW c +C ~‰%Üñœ‡Ã¯@Q‘ÃÕTµ×îp£74îœDÆÛ±Y¦´ íåè`Á¤¸C&Þ!Üø@G׋Üþ4>™š³ø™ÀQ,}T“^~+žlð²¥7îK¤à‡,=£Õ£èò' qkí*ÁU‰1pož„K¹5ThpïÿÍGm{NßWÔÖ8'‚:7ÁèÆ·ÝýÁ¸‹Æ|ÖÙköÖï2¼®Ò½Ÿ^½ìš‚ <H¨ ÖømEOj¨šô +W"˜9q¿vÚáXçÍ¡áz¬gÇæ üÌÇw Λ½Èi‡»w»»sVmØ” TS—σ¹­äú58l/ê´Ý>"%*ÇP !MÊ†Ž¡:ˆ}ºø°79ñV–©¤9G÷ Ry_ohm;Mõ—J}›doÖpv¯ÍêK+Kûnx¬gq-)±F¼õ±Õ…G¾¢V–]vÏöĘQtÑøfµ^Ñ\wnd݆•¡%ËýšÏ.IåJÖöؾöåþÛnÿÄ.ƒwúT;ÒŠ½ä^$ƒ "·vêo°áì`NZ† Ðñ¾Ñú™Ž‡kÁ,z°™†MdszÈÿ¾÷Ÿ9“Rl˜Ú¡ÓLÖøÖväxÍÈ©­èO¸XWÄΪøpoAÚ€‰Áb4šYºqˆŸä¼î¤W,UgDOoÔ_š;¶$>ëàí7îü ýkã(г±§w÷Äg­Ü¸1=6Þµ„"èü;`ýå>äp§ ŸL•º)±Ån7,šÄpPƒóG±›8¢I_úUªû¥BÙ(ƒZLm¤£^ h/NQÔ(?aÆÛû.­qžæ œ­6›uðH5dôÿü»Úq¨QTG bCX]¦Æš¤éwf}üû·OË×ÍÞ¹¨Âó,ÅIo¬ÙWßxóÆ‚»gÕUì\{ÝòäŸûJ‹úÒÂòÅ{f°›`YFÍÊK–ʪ,Z¥L:Æò.‡XzõÊ9w¼qû@zxíœD—Þ¿,ïÔ‹À²1Ð{gÈ…ˆ ªûŽNËIä(Ž Á$¡»­GуO’†>ânEÓ[~Á–‡´°¹åóÔ_é´Í­Ö ú `€EiW¢žNuy ¦}„7þŒYƒ%=š÷2ØãàÆ8$þ9Z +B°ÕK!Q •þR;$øˆµÂ€²š»Z@OôøKMFNAqNsÒi„K´Õžd4̆o&£¡M phJ€Èäå®l5¯†¥É}àjÃ3V¼ \Û`ÖÉ‹‘cS#Xž­¬3Ÿœ6ƒ…N'PÒcyCiL µݤ<¤Ö^OMy(?X?ká´@‡<êÜl6WS•HxadíZpíž·lTýÖ*ÃgŒŒöäÂ*‹(Y.²váÜšX)ùÆZ¢5‹rs¦®Ù/(~\*—N´vÿÿ~Õô³jµ«µ(ð¿rªeºµÃÒ¼s:(š¼àÈbT/x,øn‚Ò²‰óõ Kš'¡åvQ¤žiŸl{÷0&xÓ À3˜ß9´zgO}E·ŸP‡WïèÚP÷0̤1Uͪùzeõ¥s{¦,ª™ZçIüªö ÎíÚH=ìMëóëÑø¼uUm8Úôþ à¡:rÙ ñEÇ턵:¡-Fu”½QµcBé‘Иelj^ ~RÁtEÛß@œïãMÍÑó¿ÃÌø/,ôE­u,¹‡$cÙäêEç¶äÚÝõ¡ ½ìÚPôô¦Ìå*ÉÙú_5Wrh¬¤} ’"ÀF­ù¦éV‚<ÇÓ&Ïñ´ÉsDɣɣ¨vØ ÛI¹c¾élÏ¿ù&ñÖ×^ýÀö­·_P˜:jœ’âý™ÒâÁ\@œ:Â>0ÿŽ[¯ÞÔ“_{ýyóï¸åÚðh{jVÖŸ½rãælj68š³rÓ-ïó@³2ré ïË IòÛ}ˆß§Pó<.à )Þ`ØŒì¨Ý'%üqJŒ¨“©hKŒ6]æÿú;fL˜œse)8O€>Xæ,vÅ#EƇºùÅÓ³¢Øö¶Ï58<µ½NŠÂ¿Jë…rÆGÓteÅþÆEg:ù¦ôü®AYH +~c?¨õ4°Årm§-žA¬Øå€W°ƒ†¬ô‚¢Y+†wÞ/Höc4tEžLåÿÇðv À³ŒÞðïï]ø Ä$­‹ƒK€F¢iQæ­4'«uërylÕX©~ѽ[ ++çx†Æi /2b¤º¨7ÙŸ‹£+G‹ÕŸYŸZ4˜g9üR>_ÐdÕn¦\ÁT4ÑwÞ¬±k×w‰ÇØE‹ò .¿[ŽdÜZ&–¨Ÿ7køCkËœ]áØæÞç;„ Ô¹>8íÐI^Î…ûJEMw»Î¥K}šÛBvF2GÑ•O¶qr!NÂãfV7í}½kZúžìFªÓš~j² ™<·¤‰Tîu ­ÝÕ3´©×k¡/l…ÌÓ LA%¹zñ m µµ#.Ü [µá^=>g}wd8Š%ÛgOÿR)(®¸OìZwõ(ú‘ÉQIq4â?V*ÀÏõttsšCNÃF$‚=tØå‚ÀòmC4ä܈Æ8ü#Žâ¢Î1µüÉɶ?ëËZɵMÃÖv­“!#CæØì\ñŸSTdѶ,×âMÖcé.&üÇí!+ÑdÞeÁÎÇJKçÖ\˜®¦~¿’Î?þê[—6$Ž¢m. MãkkWxgÖÓ7/¸ëÞ/.ƒÊÛ@ýö ÞE Ï„Ì{*¢!t—WKEl¸% +¡Ó]š×±àÁ}±¯¹öå/Æ|4Š/hѬí}Œ“ùr‹i ŸµõThÚl°IŸc/á©B.„ –dm(VJËÖPyxm½²,Èà™\.ŒÿL.µrÄF +.I-å¢ ö¶hµŠ ådD‰ÔfâkV-ÐãÉ´( +Ö¯yÂÙyKt«× 4ž½ {{ô!U¤vv—GÑŸö¤Tˆ¹I7é`¿TØïøjìâi*M›´›¶ëö®±‰Ø'—¾ª`Ò¼Ìq²G÷sš*R©L8q±4MXx†Õ µàK¬‘îE;ç¹ ©…%^·¦¢Ñ.ºã¥r^J¤l²ÍÊsšž“EËžíÑ•«–ÆhA²p-om£8$†t#+ žÎ#Þx·‰ùºóÐe^à2_ŒÀÃ{Áéÿ³ºæÏ†Uº˜îIÄé‘®%YR ÞÊÛ)8ıVž-swâüÕK¢žL_Úé‘CYïôÝoÁ^Dÿ|.#q¤ËPxý¼‡MÕŸH}Ÿ»Ã½S؉fÁïl¯:йB£¿#íþl(”tâ$)2ðˆxåԸߧ;)l7ÊGÖ¢8ù¨[SXVÑÜ.Má8E;í¥9š ÀÌ ~à¢ÖÛ§´¿£x mÊdÐ?€2ÄÊ ÷’R6EìPnóSKPäi_ÔIc÷¢Ù?# û)ÍÂË ± u²4¬o7c/7‚ÈX‰l4*F6ד­*JD ¯lö.ÒáEû‡çíGX5Ü“Ë*n¥1 +š¾}å¾"5በ›Ù¬u ¯!e Óõ”™ð:šd}¢ã՘ό‹b„ª8 +ù“Eyh¬E S\r!O6Í Sèn<WšUÌÖæè±ªî$¬ÙÚl=g$ì(I`o·]ö²^Þíñ•‡ÓoMÜ‚Ûå« MÃTQÄÅJ*ì°‡Ò.xïJõ„YsÆõ&ìEÜ ¬ÚwKÓŠV"=Àža`Î0eXU¸žt$ÅúâûÎ0¢iÃVÏñ~L× CzÊ@Ø+fî¢ÑAW\J¹i h  »1Îv5­QŸ§çf%í(ELÅÚ'ø·'Ð5”ø÷ö9ÌEsÞÒØ•ª‡LM1äYt ©„„‘â3@÷#vÄŠ„ÀÚ=´ó‹Öýþé3rH­c{´U¸•Vrhå\·EëË/þØ ñÕ·ìºá†o%‹é¾¨”,¤û@˜›Z»rQ]Û¿ÛøÄF÷]–Íæ/ÕÓùÂвVTcWšù®j¸t«Ícõ"ýfr?<$œ}Ι‹iðä k' Þì̈l£w«+qÊ çuªÙDž´0ˆ6,^P…Ym‰lAu„i’Äw$t°¡ò¬ð›Óç8zÜØhš²_‰=ƒ}È>wòôRA²èkFÈQ7$”ܵϑìçjûŸO¼ýQ,šºÛ=Ýħ_C֥Ϲ“×*ÅT'þnc§r©Ú‰¾±ãÑbñFó=)÷–#Ñ‘=Cz! ú V´0¾X9’)„ +=…Phö–yþîL”ë·épÄÍ ¼ßeWn½šÈ-ê°"¨QV&¬y­’öÙUEÕ+ñÔx-LqM™s´Ø³xt4WçêArawÄåκX€–# ?…Ý,YÞçÛ—8l»˜œQ–[S+fVÌ—šÛgÁÎ-?â“¥ª»»M•½‚±`i¸ü‰ZA‚˜«gg§1ËÖ@6§±A w¸•rA7sK ¤xàí©ì±LÉ„îT æt¸éÚÆqÞÍ»<OÁìÃsPÓO£À=@Ó,²àa±ïˆ¶K±cèOZ¡?2$EA$†Oï Û½ûìà/éÌr=E.ÃÐÁ&.6‡¼ .îîÀÅ“°ØCRÎÒà¢ÒçøÁ^-iÇ,ŸÚ†â¬+áé YÖ|ÙX@@9w*\ŒÿC«B÷%W\;÷›d%îQô/”“l,Ž3×øZbùª5YXVxøWáˆv?ù}ĉ(Hò„Ã>Ìö”ÁÚ®!•-Óv ÞòœhŽ}·¼dŠÛÞoBÑï06w̯Åm¤å³Œ#˜ ç* +ΞÞC<Ç + A áMÎÆ hŸð3M)ânêNP90Y°;À!‚1o0â5‰ ‰’Ž%‰öpvzð °HfJ0íú˜‹súÓÁ¹Aϳ‚G/éù’³žFÉO[†ôx¿+ÚY‚—]Bã-­³äÃæµÃÏ ,ößÀ…$zßa«£CcÈ™€kµ¢­’$*Ñj¬'‘(yšr£xÙC4þD¦#…€  +‘Öý˜HnâwØWÈÀ¨y¤×p8Žà¼š’ Ò“µ‘ ùxàH`Ü64‡=ýФÖZ°¦³¢´›Æ³qÉ1«/ %û<&EªñDÙÏào3ÀúroNÏ{YJtˆJ=Ï{-èÃmŠÿx}ô—›ì…bZeN :lùRVT$A M®x;¸ÐÔ¤N¨ŒfYÍy {á{ïUù‡#¶mÓ÷-O¿ÒÚN¶|ßj|ouÄ v9hõºbqøÙŽg(AbõhýYš³óŽZ"œñ²èK“Q±`?±@…x›åÔk*cvÞ铬™t‚—Áaî4_×ø º #*yœGà—ä‹´ü,úEÄ…$Ú°½ íäKpPšZ›r›°ßß_ÿª½Vòk"Á< ­Ó ^îÍÑÛŒÅ9¬¨ã3‘¨òD´çMüÃñGMDkN$BXÄFˆ†>tÈ=F¯ŵΟÓ&’Î +f[‚¼Ç¸ãõD²ìÁ,ਖLT<Ø'wÂ<‡2Œ œKVÜT¤zt›MïI¥zá}ïé‘TM³YµZ:U‡'êÍï;øº MË2À€µè—ÑÓwš+":ƒ'DwQ‚3Ø_Šý<-8Cõ +tØKÖB9”yWÔm+”sAYtG¡ö7þ…ÐÉïHŠ<ƒ8±;Aü Ø]‡Y9µÜÍï ]îø¢8èKhg$ÊTÜ(ƒ?D;ÂùPºËmiœŽ9H¢nabk}vBÁ Þn_ëóæµ>ݺV+FÍk½®¥6¯U™Üe8HÉ¡øõ. p0„WµçD A[U+¹“³Z +Á]^ôfl[®ä9„pögÑÂLETîßNžO§`Ã8ÃÛ±±ÑnÅhpdEï“­X‘èÑÃéf‚Z4hW‘‰ d5Ķb'Ášùœ[ÀW7îÅ~DÞ‚D‘ì7@<é‡XÒw +ƒT¦b:B†­×Os\SGÛ[0¤(Öd$ÔöÇ4bÀ‘žvPa¯îºíü$ ³îÌ%|1‡iéØùw’ü9MϪ(¹êáÆ£?¸&·kÏŽŒMy”Ê(vëU¨Í s¾'iQø&rÖ””Ѧ”SÊË”×[§¤ÌNI‰W=æ—6ÅÛŸRìNÛ¢ b•êÎÛÏOÜÅá„’Mú¢-)ïú -ù³z4£6~ø0º…&®ÉïÚ³=csÙhœaéÆmW5~Óx½ñÌ×,‚…`DøµZÈê ;öIâe eJ9Ú”r…)åõ‡-g„Ë[mSbÕiKàÛjÕÞ6æGÏ»|Fkऒc²X \pÍFÊêËF´ŒŠw¢ñëÆ¿»3¾rõrdgŠ -Ô†×.ÛþöŸPîf@Š—áºù!‘;‡Œ7œ[Fºj·W;-©8Õ.háó.‹´EŒûb*‡´àØÕ›H›7«iö¨e „«š MnxJØø”€‚ÝÓ8…ý'y£ðËë&&&^—›¯–×+ÿß‚yÉK+¢A6ûÉ;ïø¶®+Ï¿àáá=àxxè½÷‚‰ÂÞ;E‰%’‹$ªZ½Y¶d;qܔؖíØ)¶c;‰Ò–’-*òÄ)Jqú™?<Ö¹0¨©ñzŠ ·žv¸Mí­µÌ_÷dxô-ºPѨ ªÕÎh*­‹ß|æø–™%æèQ‚¯Rß`g¬of×l°ñà†xvëéûî¿c·#¶©·>ªWr,+—Bn ©fiOË–ÃjÉ=ú…‹Ÿ;·§®ùÖK¥7Iw®»«MŸˆùZ6&±¿ƒs\zSô'a™å;“ÞSäÖíÞ9´sv'2°sbh||bÀ=àNW°f¤ìçb‘KïÞ³nçì>=40ŽwNÅÈTŽt#f”zVSŒî›–¿PÜ»”“´ðƒòä¾~VãA ¬¸€ë›Ç00ÇeáìÒÚš¼F‘ï9‹®²"Ö®ìK B³ô¥¿qúÎáý_{øÀúˆªë¶œêºe,OKHxöEuì8^sü…{ÆktºôàÑO|÷³¾zß¶z«13|ä±ñ@ÒHaÊÒóíB°¹\ œ’¡g Ö™‹eœö}ìâ«ý Ú‰»j{7M%S“CÍ cÕ¦w=xïͱØpW!¨e9V¡$}¡I©URgýØÁ;;ÛÎÏ]xêžµîæÉcg{ú>ußÑ‘¸€âÏP2‰@¤°é±ïAˆRJé‰Ò—ñ,°hܵ]¢??,Ø£ÜN8‹øfìß…ÓÀÂ8'„”ï B‚~¯(1 +?gÑ|žqö-‰û~´À¿XËW»åéöï¡ÞÙ\a¢ÁîÝY›ß¿Œ©½fe2ªöZ” Ï Ž¶uø\Åõ±üvð½n¨ÖŸUZ†`Òþ;`ý:®ýFpHCtH¬Ì™ÿ‚è7öKÀq49ÇàUÄøxx×;+ßEký2ƒ ÷ÕƒGž˜ Èí©Î-'9úä–@é ¹¿=›ë¨r*þöLÍXGÚ¡À¾ÔõÔ'îÝ‘¯ÛýÑÞªƒ‡ÎŽ4¸ê÷œ÷vÔ¸"=S;gƒÞöZG¤grçè}»¯½…}YC,H²H" G1ššG)J$ˆê7 +7/ùÔ0o°PNÿ,/È DåæŽ®Jþþ_øB.=<ôªÛ Ñ Z$ä:ÅÖ1' ¡€bhì­ý +‰E%Ï D8 +¨L\¾cŸ#šCº/#YìÕKJ¥ ¸_©^/–”ú¯ bGLèäsI­82ªÌ :Ä›–pœ×*ÿäõ²¢ +n>ùëK +`*·Òž²òÌgAó ,QIl*#©ìF´*»>c¤Íqwt 1ͪ8Ø@yûÖ›ª§>2à ŽÞ»åûèÏä²'Åf§Û¢"d*©4•¯U½âëhiqƒ¥.猡´2¡ ›”;Í*_óh¬þÐþCuwékü·Ò5ü“àÉ7 »/#fÜP”"¤Ü¨§€K“ð&µniã<yÖk©EkÓpeµ DæQѳÑ6*¹‚΀}¡C'戉%ãÏ—Qz=#/g½ø¶’å.^Ê#cw¯>aÆ•£§òÜ«»yòÃÅ™q|³!3|ê©™-T³2 –¦R¤¯aS±~ªÅ©Io¨;¢– Ä”‚“nÏoo÷7u'Ǻ2RD.J Ó<±?;|Çp س«¾0\­!5;9TçòZ)'6Ážz«ÁïY«ýVU."´ç㙫˪à¨p<@ÉÜv»uªÐ|d¼A‘Æ~X{ýƒkR""a$Žl/ºâ*6ÂĤŸ$Y$f‰Z-z+Ë"úhÄ«¬2ׯ€%>N%,)Sm’/[Xe |üj/‰àóJÀÚWò÷¼]—— êxe|%)š¾¾è*1$6ÛD "ž¥Îû๳ËÕ“˜oáW2%`d¥E5–Xs$ÑâW`Ož—Q¥¯b%-ºû)Êæðbj^„MFèê–ökˆ×ðgoÿP}dá,O°~^ànÓÅ\8²Îãx‘BBa ‡ðãšG×±|¨¡ÈÁkqb#ôt +Q#†µÒÒbQ~ É__š^K§Pé[)„Y,&]Œ®Ç͹±[Ÿ™ tuŒç+J%®ÜP®{»S[W4'cAΤ"÷ŠÝv¬O&vö×hIËÌ&=yߦ JåOœêŒZ*Ö°B3l®¡Ö«#[RÖ”K… q“Kx'¶ùué5CQ_÷`Ág€Ï HiGZ/䃆º+Ø€ùNbß½ˆ :3F/D"„Þëà 7ÂË~VÚs¸»øâÙÊ©ürË®.WÇÜ»”S.Âëög1É*Àß2Vo8úØøÄÝ#Rj›¹÷òÁŽ“­Ih…„öT·GûNn.*wmX¬ËYzSf¯öYj³)-E·¶…ÚÒ^-I‹·ÝÑJM|xÐyìÜ3Ož»©A%'5*Â`w˜Yš¡k§ïh7ù‚Ý;¶˜"6…„ÕÉ’Þ-½¦X]S°ÀÆkRü/|]ð ')ä +…rÝ^”å"œ2ŽPã+<Ãëqü|3¯e7ôþK"oü/BƤ^xH¬qVyR9F5ú{X½H+TRì/FK®mq¿í€`:ÿ£V-¶øN +@ÌUµÐ«BdÏó`’΋W‹}ØJW¦N!¯Tí‡ShEš±o_ ] +0ƒ“EÒŸ4Ô6×ÕxÏ’a¸^¾´ÆÔ¶¥V¸.™ßXcDoqo\×àñwn/ÖÝ´uÈ•¼¥+°i}O=Ú±9ÒtÓ¦³µ¾¥ ëQy,J{²Þ¬õy½ÚØá…ojÃáˆÞ^¨«wê‚vÖšn–qØ…?o“l;|¡ÊÊd®`_η ûÎE¯aÚÁº/’Öª q8È<¼Ü*2*½‚†x˘#ײ p)¬Ü¢Õ®%½¬¾Z ¬ªJ-G ÿ© ·Ï>ðcý·TÀžKh¹„ñg»“§'ê¹Ä#'{œÚÔà±Ç§;öTÙ¤¥Wišu¦¡Öj¯Žfìi¯9—McW]Ç|æ‰û÷6èYRˉ 6—™e”LfòŽ.£7е³Xuâèžu Kº}ÝÈïRãžd³_aŒæꎤ].QjaŒ½öüM0V@%U€?±ï€ÕÅX#¼Ì0š„7„IV-¨¥ÇxKÊʽgÙˆ™°RŠžâo’Jk¤èk¸|óî®wJK´.hnÝÛ¸ãì°§ôŒ=ãvµ^‹†!GÆŸh3h=ðöûæÙûfü mÕ·¶[FfØ4Ç]\jṳ̈ ºÕ¤m_·i¨Cç-ø5vƒ¶uhãP;¤Áf@]» à'sE™_`­*V¥×#§šG¾ü" ß2w¸pµ‰zÁÌõ:ݥɶ€C‘{9òG+»ùö©ÔBŠ’ JÎÒ8òk•^&¬(GëFï¶xÂj!úÙ˨ÇÅf‡Ûª4€ªœÙO +EJ™4 H. „8¹ñíKü™²<Å7Á<呾ËÀ*ü +°£ñðìhž«’¯ Á2;ÉV‹‹c£ÊÚUø¸ð žu?>.þl9?âÇp‚fXzAËêå¡r˜ÐšüP•Ž2ÄÜÑ¡– +‘ÓìÝ2u¬¸õÃýN÷ðÇfˆþÒòiq‚U*”©dLºcîïnk´36ƒBm6P¦8¥"äs’´Ó¦…Y8pàHÃ]0[õK@—Àó 3—+nVq©ó!ˆ¯gªà%¼½Ló4 F(è±c] Ò£ËEtŒ¾›Ó¯Ðã;¡ãÚ^ÿý³ãamÕú›?·36ÒÛdPÊpI3$j/´Ì4Z5Uà 'T +@J 'ÝÛ°£ÍÓØ—œèÍÐ4-Q#Ý8q¬nä¶õ~_×îæâHZ÷BdfëH“—R䣺¼j?úн>kƧU¤„üè* †ÓV7Xèd ’Òn§ÎÓ:•+ÞÚ +ìM¼©òãKÀ~[âùqÛ{ñ£k£uä}ñcáâ#?Ž«èÿØ<2µß‹/¡ÇkzV –ÊU4–$Œ‘–(0hrìÉý´´ôoXÉnýŒÄêt/¥G•^â Æ£ö¿`#<›zû‡jìö…‚õ[à%`h2u1ãÏúÌåˆÏ ~“úü!·Î1†.™‘,žËÁF}ÛæB# ™^ŒE„k9 +à'ò¾’"ßAí +íäjˆ,“~ªùcÿüH`]w=DH‚”)$_a¤¦ó@Gª/nóWrRNƒ8D®’–’iGºíÜX%·\¹X¢ÐHÅKXÝ^»ZcÒÚ'³†„WC—ÑQÍ‘¯ßΕ^ñPïè¨Vãyž¯¾9Æÿï‘ã?pÑž£O휸cÐ%Ö†Z¦ï™?к? QàB ŤöDS¤ïÄÆœ2y[ÿÐáN{é-¹-å4dÓI­TÒÒèoL¹u4¦Š9~p4»cÀqìÜgŸ~h#$G£Ë¬’ÊéšI@ŽîP÷Ìcئ •:Ya«g´Ë¯ojä«î¤ç‚¿ñ^ä(pнjá,©u§½©¼ 㠯ʤ0¤TIqÌÌâ‘Åó¶¥ä¨Ñ”i_ ÈÑ«)yrÌ!}È.@ޏ¬Ïü"96¬ ÇÖäxÉë7´‚Øh‘»Þ‰•H&ð7sc_Éϳ‘îCOîœ|pK,´îx÷º.M¬k×½#³÷ôÛ‚=;r©ö¨úI™µÊSÝS“Ƹ/Õ[eœ’9kƒmãÕZ…§.–Û1¼;96Ü´¹Ël­[EŽºT®~ák±ã›×Pü§<;v"£ŠaSÃìó`åWñ+Ÿ6ÕÌ£‘"ÕPU ˆXŒ#ôWÐâD|`pÍp;£ËF°¬ÃYì±­a9ÒU‘úV¤_‚.Ú{ô3•ÝоãþŽy³qFR¤TIѾLgdÝ-›rlâ¶þu‡;¨öŽ1dà~ Û÷= ÷CbìCŽ£}÷7‚x]LjY¡ î™R–¼£Ãè;b«)lS^”¦\›ºÍ‰úæ¾3ˆ.ÁH4’äøSĈø°ÿ~Ióí±^¿«™Ãoâý1ÊâÙExÄ–ÂcÅ +¸W²£ gHö¤Ú¾ulúÜdœÒØ#5ÎîïìßòÐT²ôçÁn¯S°käbÖ›„ºí:¿M«c?íüì“Mµ¶‡Gn_ݹg÷ôFgWSpøŽÙÑ>³Ãжnd¨Ûä¯ ªm6]kÿÈúHZC×ÞÂÎ +"`§Ç.YJîðqXfs‡«›öð¹Ã—ãËÊÜ*‰·Š´ý6&³òkIìÑ¿·ë™Vñ–Boñ[Ü!µ’ lƒÃHpÑFjbâUaò %Äp‚‚™CÐß^A-ˆ û/#ÕØü%9—;”zÍÅ)ïôN°µ è=EIZ¡Ž Ä¡iy5lɶ¬iÎ"þýhÿ ‹^‚î•ô·ÑðÉCQ2%µ°×e&9§E‡¢JÚ´„ú£M Ǩ›ÇâÃ'ºìþÍçf?„žcdO|êPmb3¹Zîéõ­9“ʪ‘êÌ:¥–Š&#”Ü¢e¼#‰â¡cwô!ĵ×ðaA  ¾c0o(…ÔçAê`Þ°æ ±ÿ˜ë•‚]g¸ÏG€I3>Û±.ò†Ì—¾(W©¼:¹Ýã@qtLëàíÎ+µ@=ó¦}Ê¿-y Ud5¢ï7‡øŽÃAЯŽtî¹óú»b +¥¤ÄVÝ—Í eŒl¤§v;+ƒý‘Xj{v}Ö(1D]±ú0-¥DR•ŒËõ§‡´™m¹5‰¶˜ÝäY×ßž±Y ”V%6Z§åLÑZ›ÚkV0 +‘Þf7²º`ÁÍXõ`™é8Žö‡¼”̬eJÅéc§ûèÑÉѾ»ˆVRb–›ívƒ’QÉíÕÍNµÛ¤ˆFús‡Y­ Ln{ _Áö1°:Ú¯ýØžˆ¤/dƒ†Üì&±‹— JìvOzÕ]Êeƒx$"ôÀkÓÙézxQºp¥ÙçéX «–s!¶ô¬hm0$Ê.áFÅ~*}àâɱ3ý.Rã+ŽžøÔ¤6]T³ .$))±Ç‹î–©w_g×ÞVG©.—uc™R`=3øé›;bÃÇÚ\;Žßvó¾¡8.¦Db–ê¬N#+–áέIÍÓ4:‹èUŽ&'mgÜ…ÞJWÂGxŒI¡B$Wpr¡b½û’HN'©Uýe¾F¾¹ ¼CñB¡W–Dçªö¦rT‚9JYÌ(°¸ì+z^¢âùóÛoKd$N0j×)Ub›ÇoW«`÷R˜­o‚ÙòðyÄíÏ#qì1>ø°ŽtS¦A‰÷ +ö ÄŒ4c/H ˜Àö¢Â×Á<¢0ô¯ºéŽ]còÞ=ƒxý82Í·ÒÆÞ? ÌîðØ}ãÑ@çl1Xã”×ìÿâMÏ ù\ãµÑæ ú¼Ìw»b&Ê÷zcÆ~ÆžöÇ{ÓfÆ™ F»Rf´®ãÔÆ¸½8\]3Ñ•Ósñª¬µñÈp•±ðpG­Nª) ?cLZ™Òµ(¬›Bî +¤J +Öé°³*$mSÚõrÎkÞFñi0Šiÿ _ȇMupÍÓÀõ>W¡@]‘ çëðD‚àêx4ÌqÛ7ÒÌÓËÆn‘?(–­£ †AUéë‰Dll½oÓÈ­ƒ^°òë7zjÆÙP›P©d8´ $éL·‡[w÷$¤l2[gkÛÛîñK.9á‹KÈ’ê «±S‘é-#Þ膓]®ÇΜܷ.Ö˜˜€Ëßf7±4C:·¦)Ž!u›7Æ"•«ÞàÀW×F( Fèn0B¦ +ý]„× aO\bb³S ±Í£s:Hs’w£?Ájú#nПz1qx·„³Gòîܧf6žì²“jk$ï)|zräæ.G)Ue‰kÕ«NN&ª-Q½Ú ØÄþ‡{æÀ±Ûܹ\|ã­Ý®éÇÌx +5ñ·´õÔk´êþ©Ý“ýê®&ø×ÉÝSýpWçÁƒ,ÂÀæŠ*ë5«X•V‹P^‡˜S9¦|,4nË™êjá•—‹Rl˜,\;W¸:Sˆ- +€uŽ*ÇõÔ·Ž¿h5ŠdZÅ%œ9`q5Bì󟥩G„F»Ó¬R© £Íad±[eR3O…%w Ü ~û‹jäøâsµˆÿ¯%¨ ’ï6øI„ÿƒzz!°ZÛAÞÓo[ôôJEHá^Â" §/§'¡0ðôtÅÓ7>«dEôrWß¾{?G†ø˜D®–NØ1àê]Nàê1{i©ÃÐ}˜±Å[‰F¯ ;9NQ¥ßc¥‡P):¥NElç+M‡Îã¤R¦.ÔçYŒâ`Ö•’Ó gUè/KQ0»0€Ín@¶>[¬ yg¯FàO‚ñz]†`¤6à*€?D ôõ‘¾Þ¸¦¯ç:Ã79Ž\¯´ˆ¼w¿:ß³èæð„<ÐvÓ§f=MYŽ&ALGË%bc¢§¦usZ£´VU¯wé¢qÂjÆ,^»xy3írùkK/’õéBD~`çÔÓ-¼¹{¿~^°b§¿“«/\÷õ|½Ò×¼ý¾Mçz\„ÒkŠ4}ë´&™Œ*ÁÚ‰¥J a}õ“íaÚs £e[£ýÏ2SÈuŠÅÐá{j&¹ý’oëäX[0´îh—vý®'öGšz ÖT¬fD›ÃÀJ(I¨ckJmµG·j]:©Våk4yª¬2µ3BÑöÐ×ʽ‹”Pý>LAßq¥ã‡ín€ß/wl{g¯ÿ5£S,”Ιò¤ò&àõÝ¥¤^¾ 6§eñ:–+ßþ3%%p¡”cp³B#¶¯Ï) ×§ÁìÝÏ{ý ˜¿ƒÏ#QlðòYì“Ðë§ +×½þ×°»€nÄ> .…6Y¡7ê` T* { +h¡ ÷ßöÆîŸ•4<|p¨r¿ 4d~ñÀæ¯÷»[gŠÞ”Mšœ}bÏ詇£0R.¸ŸA3y_ÞÏ‘ú3\ð)¥–„;ÒÑJ-UÞPSD‹ÖwÞ<wä‡S™±Þz#—ÊÖš­º‹¡äpGN«ÉÔæÑŸ¹"œ;j”Y,V¥Êˆ”T¬Ýî`¹@$ma:9ç…Þ_FóÌâ^è»v(³W°;ÀÒcDÙÁoG:‹(‘àˆO›á~XåéÖ>7¬ø¼w=;ÄVVágHΫów¾xÚ”ËÄ”J†¿˜„"mÉ–pãö®íÝÕÒ·§Ñaû]ÇNu[K%’;ÁìÊÍJ’Ò‡l©ÍØã»íßáëìQRèó £ÕfTÒ 7¥±9ŠRámS›[ü± G_ö6è¼Uv†s„b1NíÖ3:0FÃ×~#8'tñþŸ?7üXWAìåæ é˜GwÎià,»æÈ¡¥bÑ熢%BPð†ò³¬;'3'Ú§Î|frðÔhÁ-×Õnyàû·õÜ\ð(Kf¼­éÔúÖꀅ3Þ–êÆÙþ¬KÈÞóàÃ÷ߘ´ÕôOÌV÷\ýþ×±fûÆw磃g¨sjßá=ŽHÞÑ~äÜÇïƒ;úøµ·°W„ÚŸO% ‚ õð–ð^Ÿëb±_bLY,&Á¾ûª×@@±Xù‹9¨òUh4þÏû•2“<ž J.áBŠ‹e|ï ˜óyŒpžøe±¹Kr¹q 0çã/ç|Žñ9ŸÛ‹dF¡ÆÅ¡yvÝ7'\òiW¤|Vœø]ºß1w!(§|¶áb‰œ•.ØÜ&ë4£‘;³,Øz¾ähWЦ¥Bš•É'å§>2褅©N^B_SÈž[. «32ÉBQJzNÏôTA§Æâ²¨µT4—I=.]²:X¿yúÐGú5ÀgG®ý<ûxÚgÆ=«ôb6¨»‚fÀè`­ñZ1†×Š H® Gùó™ÝsÄÒµ÷î§}ï;Éón‡}÷²‹B1%ŒB¡PÌ_¿¹°L(FËy¡XŠwe¤M€ \Ö<±¿føöá`°gw=bôè3©Ù­CŲR ÖoXX½EïÌ÷…liŸVÉA¥˜‰å•bõV°ft(”0P)Ö2]h>:Ö(¯(ÅâÚ[#;IÙY *ÃÁ€"à.‚P¸!}À¨W+Œ +#¢vÿBÜF!më‡BzÌﺨÑK7À+ñ×ãñH®+E"rý–i€!ý]]ƒüÖÎòŒ¤\/?Çe°Cw€_¼$г„ܤÆL„1Ö–¬nñJ±Ÿ—JK_ÁJuhzY‘Nºß”0ûÉ›œNZÝÐjÂ.“rà’iµ€i± _/çƒÿ\(CZ±ŠJŒ(R¡0ƒ )ævæÑêKáX)gxNÎÅúõæ©o%t]%¦XÄèÿ6ؽæÜæÓOÏ: :9 ‚¸²Nl}mE'fJEƒœ™ï{lX¿Lùxc6.êÄþ˜?y`ª# –«e¯óÚ5j=êœHÚ®ëÄâ^¨³{Mé5lMXûâißWû!ØË“Iþ´/{1X>î«™ãçÑÜò©$¾þßQеƒ=ãáïÈ‹¥•üÎ"çÝrÑØG-ó ‹œ÷žùð–ŒQ³ð0©vñ21œ—‰1RÞ,ÐØ_L*Áÿ”†sÍî·]R9‰‹äþoZ5a-ËÄÖÖ‰}™Ïïüý*ØWxØK‹§}—éÄds†€1ò5§ñÿ?–60–P'Ö¹¨û/¼N쥊N,û¬uQ#V;0Ào«&¢ü?$ ØH]¸ JÃnõ« °_”†¥n¨çâw—¥aGŸiß×¥a¿¦)ÖYå\”†9Ò^S>[…Ÿw;÷Ôì­×+I­Z¤‡¾B¦d2[?ÔeòºfëªNÝ;˜°T·Žü.5á¾! s& 4L·ØiU FÇbŠÛWÞYsíëE’Áº”Á‘¯b/"Ök¿¾~` Íc/^d¬! †(p!Š’ëñ-ò_¬&ØÔÓP$ù÷x×Fü¿Ãï$4[™-hiƒ/ÛÉéØä]¼àEMGÔÜ>¼­væž!Wé¯õþzƒ%é7sTC‡¿Aþjá$ø'·Ÿ{ìþÓ‘\{ÕÔÇFc·?^DÍ [=}vÓĈYoÝyæÞ3³æñ“Þ²ë4økE]&ÔÏz×Ê1Š‚1ÒÂ1Š‚ç«Ï=åw‰¡ôì\ýPz–»~u-¯:ãsIW_¾¡;+’¤ü.ïõOGêjÕ`CXð‡§¡VM(”ihŽë¼Uè,¥'Ì.§•U« “ÃmVá…ý¤P2²H"H^q'hò¯ÿÈU´jo€•Ó°ò6ÍËHSeÝ4§)Îc/Wtlúy<8W- _AoFœˆR­ž-àâÄ€²¨öƃ® ´ü =Ë¿ëû‹åƒu=+%\NÂU4|S  a­J/‰”.3«Î{ÔmNùRãÝiZJaBR∖­G Ûïî·3®ú©û&æÑו²' <…•óLYwbö9î'£1o“,Í€cÔgaΓäwÈMÌ›0G¥ä\J~ŸRá2¬’s€|ŒüÎᔜCäw¨fæÌQ+9×Àšiæe˜£QrŽÁœ ~ŠWr>Ÿ*à2‚’óXf.£Urnƒ9M8GTrŽ“rRµæ”œ0GÀ9F”È3¿=&Ÿ%—+ú…½ÿ°ñVE#84 ?È^6=´à9Ž]“_W‚EÐä³Ú`çŸÚ°r{Sðwnºöü‘ݶr­‘Ž´~™6ù“H^ré¾åäÀù-Ñ]—¸ ­yhcǼöDßðÊA[Ww²oÕÊEHËrgš‰¯’ƒP˶Ttf¯EíÔÉ/šóÇÏÃŽÌǦªkS‡&lÌ9öŒš 3ÁÛb^7œX_í5м$œPiÍ»;¨§ÆÑäPÁ\ ½h{ÙIš& M½1ó/gŠäȽVÐ}JÒVQ‹¢Ú ÑT§‘wV“Úú“øAmá!Õ¥ÑŸêÆ¾¾æÆ@Ñ*nmí¶ýXp.§ÍŽHè>ĪÎptËC‰ö€Î ”R~«AËi[ç/ÌßP¶ºz¶/[GxÕš¥êX§7 ‘d“áÆ`gKÚì +ÌÁ  ǃœÖnÒú +óüM#¶t,0 Êž„r1R¶mç ×Cݾ$Ú‚Û(R¬èø%ñ/{½Lþë}Í03O;ÎöÆY_¶!Ï2é glô<ˤƒt¤ÖÿãhùˆÀ£pBj[´5,ÇÍZ)Ù)ò*­QÛëLZT¿Ýß– ó:t¸–:]Yšè9¯d÷ä{#ÑÖ>W]”2šT’ž‹Ä¼ÐÖë\1‡ä6 :‘„\:WÂÉ[ ¼d‘œ/äã4V“àÎtù3ƒ¥šdÜñ,?Ïži&}ÐR¦ÀšJÌn1¤ú„*a#‘«O&ô–¨=õ€*‘ŒP~=k0þÂ4Y•:aõ©]/?3mî€C‡ÿì?$òä´õpÌAhmQ7ŠLK8«ÏD•`‰Új ÅZ}Zrí¨áC¢ZýN¿:÷]U“ð«ô&!Ý’7ŸTq,…~¯¯Vˆ–ê÷‘,|ÊÂb²ú•GŠÑ)æ:Fz*ÐQˆE© ïÿJ¹Ì´|;¹ßúõ³‰Þ¡ G²¶i‡<ÇO@3jí×ÈáLÞÔÆ›7—65ɨ4˦æÅaäÂÑ.·‰§¨lvâ³j ÚÊ[}ÛióhûFÛëK;×¶õŒA«²8]6QÐi-¡ŒCï2jXƒ•uZ$QL®&]ù~¼K7Lî‡RŸ= ë¡˜µýqâU€–…~\£Âªi¹'™d‚÷êvÝ{ZKY£t*@õŸÝ…cŠç‡‡.k5kü][Ž\\äÖkH ÅÏ—ô4/j ržU…Öeyû¿ª s°Ë¡REc‘¼WÜÙ¾oc{ªoU4°óÊk&{Ôci£Ýi–ñæ‡õWvþ¿Ô¤7DâIb„×ë8Ñ0jÌ8Ùë¬~EtØlZƒÏ2º}:'Š5~æ-È£=XJ+ çáfW^ ]±×†BÐ ~X‘òÚ®{¼^¶øµäAëWgÚoƒ²ý^9áº<ãgYòì+éH`[¢ßÉ=B¨{Ëcåµ.´F’Àºã­Ô@1¬ö®nî\Ñl}-K/Z°p´Ýþ¼Š‰G"9¯6œòvb{¯¸|¬SÒª ©¡°S­V{ò}½Íí û-êkñ†æ­½É‘±äÞT‹Å2@€®ÞKÞ@扩˜tùšù@!Gq_6Ä}££=ërŒÖtxC:’K W":‰RÃ.›KÏ‘vç–GïècÔ*èfè…{Žÿ`{÷ÞÈ3(.ÝÂÏñs7ÄkÕ^O7âõâÃ&—æxõØüpò†í}C¬7bU !&XƒNOH¢Øô*ˆœšB.›GbI»‹øøÖ§ÞÑ˨YŠ$ˆÚ'·Wö¶£Õ¤ÍûoG3î̯ œÜŠ};9ú‡Ø·{­¢lÖy—ñPø.öêŽ}NoÆ™_¾oyÏn+¿|÷Òù›:]'ü >U õ6 â!öm˜[šõµ ‚'Ɔšý«Jét¸½¿¯,eárŽdé?óGâYò&è:¥+Fèá¡°ì:xñÒŒãsÕ¬¸ì'Nêó9¬gÏù:С±Ç¼ž˜…#Ïû„ÇÈzáIZkñ;R*%ó_˜¿4ö@’x!I$oõó· V¿ŸÈzÇ yÁKgÈä '•—{fD:—“Wüˆ—y 'IÁâÐDwûDD'Ðj­†µÇJQί׸sÑŠ(0½¶wþ•Þk÷›|jN½Ñ Òë9¿ß.HZÁê7‹fI-hY˜‘‹AîhtzËÊð&Qm‰—ƒÞr* ¦ìÁÒ¸/ù#Y"? íN©Ä MÐÇ «ØËêC‰„+ét9õz6¹T‚÷Ц¤3üƒJh”ÚÆ—v¦N&ŸþÖöY}¼Z(môcRÍ“%H¸Ðm"GÜåšXÂTýto´-¡çúúcEŸ–XÔ­æÞ&_¸ãÇl0èUiTHÐU£Z#K5鈅†Æ·ú¡ù#ìÿ7aÿgÈàœ‡Nª|„Až8úPD‚~ž»â ¦RÚ€!`ˆYßôÞÿQhmeòwÅ/·~ž™¥>àœlÐ'‘¸+®_rºé%‘³»~˜nRŠ _½Î^jIëÊÊÚ#-A_KÄ”-6õ8MÝA[­ÄÇy޾oõ·Vˆdçš6çû…ý šXFØ`Ø%ˆ¼àˆ:]>V4)‹AÔÃAâœ$ k¼öor  Ž€fhQ×-Æetj‡d‰!ú¯7z3OäÄ˱šˆ¦&&tÄt¨ãsg¡l€ÄC 7ÞÎõŽb’޽žæNw Sá%GúÎkµJ¾\ÐVê[™ô9ô° u:¶>d ÙµÐ)Ô *ϰ'ŠÞ–ìHçEÁ”5$B®Déƒ_Ci_ åÁ rÇD®* 'í-£™ÑÙq9Õ,¿°Ü°Eµ}sš[¸Eé«>ÎèÝ O2g%8bMõ=µ™Vâßôy‘ÖªEVÃè'â5QR‡#.ù…HFÇaAѽ`ýqÐD¼ÝÁtµ ˜-×V¡{ø#Ä“ÐQ(ëƒÙ¦ÇÆo±ê>2ËØ5:ˆõuÆð¬5Â)Ñb¡°¼6zˆS=U”-›:+c½kÓ¼D:åÜ3Üí¢%V´eo F%Vç4gŠyÎà±¶v$R¶¨KzÊYÈDÝ’)Öu›“gW:Ø_X¢­^O!½ƒgr†½¼Á ×˜“Õ·x³Ù$X ÐÙÔH?ýäN7–ßù`ýÃÞ¬T삞àÑhT‚á+OQ2›cŽz‰Þ#Eo¬éÍhÊ·5rܪ9›Ex†¯¨¸-çtåH‰õ% e[-Ù­ófŽÎþá|h…KÔ SU5ö@Ê“¬¤\¬§’ìJêË÷-é__4?G2$éó¸ãvžì&sž8›8?àÛy­FåÞë³qÎ/yuFO¦ähß²(é+/¹\k·š¹DГlÖkL:µxæ ø¹ü-ã%YÚ®&Ü;É«ÈÆsÌJÎFò0y?.cQrÖÀ§Žâ+¸ç çcL0Ǧ”…ed Ch»’s%Ìy?åPrö§Ná2Ά§~ŠË¸”œ]0ç)œãF9€¨>{æ z„É#Šm$ÞÀQwß8ʉÌTgÕãmGåÀúõƒ¤‡y«7î™çtÐG`*áöGEVË +: ísÑ¿â%àÀ‚8Ósæ æEØJræZØ.ü¤,–ŽCáõAÇ™ÿÉl¡û€¤À<°l[çéAt$×q81[,:㶯è„rÖm«84ëÆ6üÓð–Ï L¦KñöϹ³Ÿ‹o–6ã ïS,ÈÑM•ì£Ñ(»ŸáQÄU,ó‘éG»«„1ňé-çmþ¤×•8áô¥Wvhûà¼óÚì¼;7tQÿÆ¢åiwÄu~Æ]F MYxW3,Ös^Ù!¸³r1ë‰ÆbntZb2«ƒV‰âQJ4òw¸– ¶‡Ü-‹ÒžECƒmAi0‰Û£¹æ&1w$rÙøé·œƒõBƒKµ°P8af³I1 esq Í`}½°pva…žrÎ[A7èKÁjp>Øv‚ýàxµ²cÙÖm«¶•\ÖqYlמ¦=¾ ÆCãÜÂÅÂbPé£û¤æ‚©°í²=ã‹û +…¾Åã{.ÛÆºÖ¬·¹/Ù·d_Ï¥W,¸"wáŽâǺž†#–²­KÕ¥I¤Åô¾+vléJ§»F6î¸bÙ¼)™“™“z¼Ì—ÁÞt2÷Ñ=aøkž@º­æsQåÓ¨|Z•ÏÚ÷ìŒû™Ÿ3¿g-ÓïÃ3꯵G½Ü\(4ߌ.¿ËgóÙJU[sðï¾|6›'W ëiÊ ¯©—=}s!— ÙB!K<‹¾¬®G×ß¡Ò7£u ¼4ûêkù|öMxC‰TÛÇà…x"—i9½¦>ÛÜ\ }J¡* ?C*4Ò0ç|¶3ïRwR¯Z­;šïäl“7»Vò†‡ÂzîúȳZ÷1‚x45Øö®0D-ÝSKïeN@µ‚=–úQÛÊ'‰ùÖâÔNÛ.ªö6!ƒ]¼7ŒòÓÍþ¨™!Å®Xß¿kQ€S/¿öÉý«y5ãëlîÞº¢Mgå9Zcò»ÚîX3qÝr«T}ë‚Kh¸Öî⦲×,ÑœÈ÷·õ†¶/\±{ PLt'L®€«˜±œVÁÊoüäŠû{ËÝÅzo1ùU`~Fª¸?tÿ0ùÕÎü;¼ÿ ¹åsäÓÔ¥Ìû  %´Ð©Õmõž*£†2ŸbŽQ«@í‡ è‡ËíJÙ'ÿê\ ‚-‡Ñ©Ú±zÅ—„‹?»fá·hF»Šm:µ'ÕË/ïˆj¸E‹CŸO'˜X¨a4¢Q+…3íÑ;¾LÓ+Öß¶£Ó­WëL[³Ïd5…{Öµ¤ƒKG½‘Sq¾f{ЦgÕÐß½ëSB¡évLÓiLãð¾„齃ÆûÈç);óïÀ Ôzj š´ÇFO?a{ R¨§†Q'Ë]œù„ôLN×ç"” Tn8¥çâï=ð<ÇÙøßtPñrkŒ¾Ž Ûˆ+u<óÙ¤ÿæ@,«>/êD=ù”ÀX€œþ.ó>©‚ö +ayì™ã¨gÔDíždð=‰ï·’'È |OÕ¨"?ƒï™ZyúˆJµª^ß;Ì;ðžÅ÷ß%ÿ…únO]ÿ~—çë÷ñ½€¹tˆ|š|JÂÈV¤ŠßÑï‡ÕVLù›q(™ƒò0 ê+!òë†'ñ‚§ìö¤É¢"ôøaù(§‚âÏ{HÕ ±A¸MäýªòÈööދ݂Ȓ ' jO¦7ÝÖǒѶùmQ‚),›(ÍŸ02EÒ¬Vä\‰Ö€'îI2Ö1¿#F=Ò³¾Íá2q¢É猸L6SʯQ¹"þ`~Q+«åÚ†K® ‘ÑHvSÄ#%Ñb4Œ+æY-äÄ+ë1'´˜3ÏCν†9-bμ¿ÿ6ó3è_û¾A¨ÃN`ð‡bc€ÌP¡ÒBÊŸ@R#[dHhÍÏR‘ˆ2}·oFtÄ}Ù EðlõZVkK"i›š¼„hQÏ[©&}èÞÄXµ§— :ޤ8–¼_°ª4‚JË1[Dž¤6CÌÐi<ú€M@&È[›-”,¨ÓŽòAÆý8’qÀ ¾Ë+æOæÐVe¿¸Å¤¼F5žhZ;¶ÉXs2(òuÖ¹C ¹ì[Œh ;½ #}¸#ÍM!§ßÀ‘C÷2ZkÈåKšÝO)­Ù.ÒᬾÍj âZ‡…ØD”--Eª4lõ4ÎŒ$i­ÝR}Rô=HÑJHQ¤Ñéê@¥"ÆÒ³fÊ+ ÁJáÁšW8^Æ1³ñ¾S +’€bU^í„Hk¾Øp¨inaÎeZ®a C,àBT¤Yž7úKÞìw3J¢~S}ßá Dâ(‘RñêG]ƒÿ÷798ËFøCK¢hU8™ŠƒÑеñ¨NŠG\ñ¸Mû8‰ÄF"£-;®ƒÙ”_KÙ$Z9ÿ· fÀQÃÊ{zrŸdpXûü{9%¬}'¤ ­Èñì-eí£¨³z¤z"¥²$ASÀˆÂX­0Z[Ì›MÐPΈƒ*ÑFRPΪoÝí¥ŒPŒxAE 1ºþSuA#DCäDmuè4 j¶8 ä§ÁÆ +uºà”“s¹¬c¤tT­Ih0*!¬¼óKÑ(íúa¥MÈzD¾DC¹«‰–Ãä?´0÷2Ö¶ø„ùZÐ~¤[q˜~«Lýe+Òjdkk!(…—Ú uAµ}óšË+óó¥ÞÉ«+Ï›ñAtÈÛ1·õ0ÁB©?S¤¿JPnÇ«»Æ-º‘Žee‹ÑL³ a{Šw&ý‘8Qº?[ò…a*Î)< ðM`‡Dñj0K@¢Ì?Ô"zLOPÓé‘•`ѱÇÈãsêkhTmè„È~{Ý5#‰ßù!B”ÈŸŸ»ö&Sz°…¹ÏíhÙ¿à—ocÔÈyÕБÏÄzšòitØŽÁÙÃ@Ånòx^`6‘ó²žã&“—åhã8—¿Ù›B'>èGx+–´ƒ‘ŠÆìó™üÀn"™Š1åó»b&½ù¸‹¢Ô.—^}*‡ПŠÍ" #ï:,ËÇ¢Ã|¡aÎMR•³U\«VyT`¢ cë^"ÐöPOC„Õk«{‹ yÛÆ-¾&É}¹N«æ:‚µÚ™ +¥1œÆÇoZç2Wº{S¨¯Ü¤õÁ¬ovr*]0Ò·±téÅw£¯)é÷8«OéÍz-ë(_tdãG¶¶ªuN-⓹jöÎE6U’VNmQÛX•]¥v¯ERëlÖc%‹ÝKJ­£wr‡8’ã(—)©¹5\fÔŠ@B—;™kX!Uþ56:*ˆùZ"J%KåÕþ»v*Q*‡©©¦r)Hµü®…J–K!Šü¥N¯×ñêkè“|]ÔëÅê¯ -úT¨AÞ Ð‚X…ײ@TZ¨5OÈ*¹Ž«¼Š›?™›ÂI9ïf—Œl¸ToOnÕ¯x;Xï nà éÆu‡xI8KÒZ ‘|ÌëåL>[õE‹×éLÉËWJðÚŇ^X¤ÐÉm ^ÒpTe;% Ž œ¢fè¿Ú/˜ +dO0ÖÈ:NÂ[›zQ'£o?ñO_`ÙÈO¿uÛª¨˜ÊÂæ%mq€>ÛcôÚ/]wƒ{^èÉ—>}ƒ»ÓåÊZúû#=ç;R æGzQü evLP_ VÔ.šq2N7cûž~‚g8AçrqÎã:4è=E[Ëò/¿')º©6‹šÞ,š%£©U‘´|ëΖ4•hƒáZ6᾿gçâÀ‹*C°É˜nÊöÐoºá,=»®®±vOØÌ¾1_ÁÎ^@ ä¡~U7뤌ćÃ4ú¾¤¡bñe¬’%¨{Ì"i *±:š›™Ìq’'#r‡äI!ÀZ~¯fÓ‘õl8R¨æA›œ!YÈÙ· w“š"ÌH2¦XÈ2°Dˆ¥B%™ÆOC“úryba@#lZ\²„ò°JògìÙ`{ë"òçèì1sû¾¶lõ]LöSn‡µ¸¦24áˆ\pƒÝLÒ®€‘}(4’2kC£¹"š–†gxŽNg÷Oο~2§kSÚ)»I­P;¤GÈ:ñÀ7 ¼Zc3)IËÜœ +¾#´:”jöùPûÊ, ¸A[ÅdV·N-q@²pjÕÍQ,ׯ™r]¸/çj³ì†CÑ(U£ê¦úNÜ9´w¡]¿†Ê´@E¹ÎPè›?.­Ej3BÑÄo¯¼|ñ6VmkŒ,%ž” +øŠ DÏ9áGäÚxFjÂÚð}} ˜ —Þ’AUn€ÛÙlÜ~và"^‘A} ~,ƒfÕYáøðýüÓ3AHÑàRÞ…ð›é ‹¯×@7‚áÓ3àV ?—AJ7À£úBÜpøá° F]lPà±³IׇMoÌóåš –Ûe°.ú¿ +ßž¿ ¶®)°ëì_l‡ø‘p³ Îü<óçÁÕ{8ê:êv¸oñ˜¸ÃÞ%Þ§}"†m¾_ø~á¿@ïO‡Xðw€ÍÁüÀO!اÀå^ 1!´‡vÕáŽÐ=g…?…—Öá‹á÷1ü1Bžr‘ëeˆ^;/6Öþ5ãëâ¯%®J’É›œM[Sbê®´9} ýûÌ›ýÍ_Ï–²ŸÈ5åžÊ§òûó¿.ÜÝjy¤X)^ךi}²”,][º©ô¹²£ü•¶Î¶Ãíéö';"wüªó–.s×ÝÝÍÝ—U•çõÍûAÏe½ç÷iû^ãüÓ ^êÿdÿ ý·ö±ÿ«ýGû÷§ÿý¯õÿDwûß_8ágVn¤~°¨mÑs‹(pã⟠‡ }°äK>Xºw韖-XöÊò±åÛ–ï]~ÅòÃËÿqùmË¿´üÞå/bùþ9XA@ø×9øVþhÕßò·~ÕøªgVý`Õ«Ãöaÿp|8;\†0ox`xùðÚáQ“Ã?þáߎôBøÚÈ™9˜ƒ9˜ƒ9˜ƒ9øûÁêK ¼³ú5¹5ׯ¹~­~íµ_Yûûµ¿_—]÷¥ó¬¶Bxrý¼õW­aæ`æ`æ`æ`æ`æ`æ`æ`æ`þ<Rd ¨˜ð”Ч â;”&…~UIS ƒ~@IÓ B?£¤`£©¤U ÄÐJšû˜˜’æ@‚ùš’V[«GCÞQo‹#ì JZ .¢¤µ¢Š[¦¤E0ËW@p–%MÖºQI“€·=¥¤)à±Ý¯¤i`´}SI3@°=§¤UÀ`û¡’fA»íçJšfË%­’=¬¤5IJz[Ëi™ÏrZ泜–ù,§e>Ëi™ÏrZ泜–ù,§e>Ëi­hóPÒ2Ÿï>Í J05&Á¸ì»áÿf°æõÂÔ%`¾ŽÂœI˜ÚÒð›y`Xó¶€­ð»Ýøn~NÀÒûàu–Ô‚…0µ æL€ý°ÄRXÛ¬c8ˆS>°Ö|Ö»·¸ ¦¶`L|ð',s>[kÃWǹäa*R¿kM¸ýQXÃ.XÖÛ…í :ÆÀEJÙAx·æ¢o÷Büv×éYó'1 ÛΉÏfÌè÷›à7(wsa:r=;J}¸•½ðÛ1Lo»ûá³—àœ½°Ô8æšæoÅyC`ℸ3‰ŸÛùÚŽŸŸÀ%&ÀvØ&âò8¾úŒje}87îÓIˆK­÷¦è@ßïXLÂ'wC.ôbj&1%“u:Fáÿvø„Œ¡LÏ(nçôõ$¬Õ: +Ë¡º»ý0µ÷ÃnHß&˜Þ†qºóÑ; ¯[NɵîÁ4ÉmîÀaLwàVvã~À½²æ yÜ‹9¸×;¡ôÅ$¦IæÅn,»a­£Š¼¢Û¥ä×ZÙëÙ†ù³KÁrÌÙŽ[•ëÜ95…jq¦E5ÞʸoÃRƒ$a«"¹«í°ì(l¾Ûûº&×2ÏäVä~ܡеóv.9…q#Eˆkðs2ÕÁû4»½ŵmÇ5Ä|Ø«ŒÒF~פo‡"Ɉ~¹_.ÁÒP“Ñ Ü×HrwÕ©‘qÜ¢”Ù ï.Ujß©{h_½—F±Œ °}]5Í31Åí)í§Ï¢¡ÚfщFçNx?®ôTMFª"ޝŸŸñtªþtã³ç{0†ãXn¶Õ{ljÏÖª[”Q°«^ɹ,;`ù ,ií¬™ÓÏÿmôóbˆÉˆá1W¾÷~,;1f{ íÖ2Æ1oÑ“ÛgIOZ‘¹ LÄ2´Kꛃ0wâ.ó¸V«\ç6ŒÂ`3ÆVÖŠr]g“ÑÝXÎwaÚe.ÔžC½º·!륃˜Ó2göÔ{»Vº¦EÆMtBæ*·K‘ŠF­¾ óu‡¢MäZ&”ûQEƒO`ý3‰)”±Û„ñ¨õòÌÛ£ýÿ¿ßç#†{î9÷<Ïó}žï÷œË8…õRÏÇàÞ¸Qn_ÕÁ83Z|žC¸wcu®#†tÐ=Öé"¼ÿ0â죬jáB(F¸ûBù9gwÐΡ<{ÛÔ¢mïàöæ?Yîs5`;̑䞃éí©æ9pË“»j¸½Œ‰_EÚªû¯V8wUþù*‡2—êaŽÝk¿Â囫=o‹Sl3Ÿ÷`³_}Üû +n•ËçÙ]Ç\]Yù=gÁ‚wéZ§»R´DÛ*ßQÏþ†\xÒâØnF^ësx®êø¹ûê½fñÞÝŽk“÷ñÏs çéí×yÈöP/Œr¼ž'¼ùpßómÏ@îÑ÷V·àêæÆ¾ãÝ&ü aì·Û¯¶=XkÚV"wƒ ÷³zfs·õ^bÅOk&\oy^+,çu6öEϯTž\zk —ÃP>ãvÌ“Ç7¯Û×Òý£ê½ÂsQz¯4íkº ‰"Œcþ™G÷jP€ŸE9dô^äàWd³ —90Bçµv8þB9åÏÁ¸W¼±íTœÛâó{íºÍxp¯2ÞOsîuâ^šÒþ.;Ö +.WÙ|Ü÷^sµ’Q›'z;®R3žcÑ¿>'ÿ·à^ß5îM!â¡•«e¾’×PÑ4è™­8¸WÈt¾0ÎT^‡`\&^ã¸9Òà5Ú3°ÆÅ n£ÖÃ0>æB÷ª‰é؆fKÇ#ÓðÜSàjüVóãбp%Úè|VAÎ^2ÜÅ=C$òk"çi\g<¶÷*[t{6Zi0ßs'âùÿÈ~<>OöøÏ{ƒ1B3£9cÁ£$ÜBW3áw*ŒKÇöcpÌœ·É8†xèçbQcå>VnÂg߃r„üK‚£-ªŒAö¦ ¿Xø +ž£ù'Ao^!RàÎ8i:FOÍc†¢M­¶¨¸LÅâhªƒ88Ÿ?“<Ø¥áWΗ4¯ÙÚc—…ûÛFqñÅ𯱹Üⲋ[8W¨7˜ÏeŽ££Õ,\‰j<*Gœî©x\½œ÷îêäl¤xyÂÙC¹õöÅ]ÕÌ_p„›ÅÝŸÉgú_qA¨Ç`L_éË63ps;Ά©˜)FÍb·L¬ÅfµØ´£ÅÂĘLLš17ÏagÒôv½­PŸ¢LÐgÛôELŠUoÎ(±ê™$m‰¥ÀÁ˜,¹F£³XKlèÍÌF0ƒÐ¯ÑÁLšÖdÍc´fE7®N¶ä™™„‚;²“‘g´3&ïy 3јm2ê´&†·c,`”±[ +l:=ƒÜ-ÒÚôL9GocyzfJb“dÔéÍvý8Æ®×3úül}NŽ>‡1qW™½]g3ZQxØFŽÞ¡5šì!±Z“1ÛfD6´L¾&;Z³f± ŒA›o4•0EFGc/Èv˜ôŒÍvæ\p +†:ôùp§9°™õ6{“è` z­£À¦·36=Dat€ =˜±çkWÖ +çè–ü“Ãh…)ÍùzŒ´ëx;cµY È[˜Ýd²1y.cÌ·juÆhfkð nÍ`Ëb`²¹xbÎC_쀛sõ! æ`;“¯5—0ºH)ç7‚Ï Û´‹ÍhGˆêµùL™sáŠÝø8 wX  B’–äs¶Pñèò´6pLo ñÔX·Mf¢Å”A!¦B(£BÂ#øîᨛëm— ‡M›£Ï×Úæ¢ÀpŽ=¥š )°¢Ë: àa6êí!Iº!ZûPH+3Éf±8ò«}lhhŽEgÉwß7„:J¬–\›ÖšWªÍ†ÂCCa¤©@§µ,fÈŒj3f/°ZMF¨$ÔÂ̰„%LÔ”U/ºŒÑA®ú`&Çh·BEs¶ÚŒÐ«ƒ!zø­…¼êmùF‡¦Ë.ÁQ¹ë°ƒB²ØÜ'd!ø_c‡ÂÈ)Ð9‚Q}½Áè·HXQžQ—çåY5šu¦ C›÷3”ÎãPŽ'^Ãa†¿ò–£?‚Ýa3ê¸ +uÀ…éžkF`ˆ¬I¶Ø•r,Ef“E›Ó=-”„éC'+ÈBŽ…‰ÆäéMÖöˆ‚PA1sÃQBŒ˜8yÆl£ –2\6X}Ë<ÔÁL¶Ö¾ZÌép'a_ zsH‘q®ÑªÏ1jC,¶ÜPÔ +…‘³y‘ +éÅeI¦¹·*ÞKÍNó#’ЈÏÌs,‚Èe¥Ãp·×Me;åT*SQrì˜N7@ ‡» °™œ`Æ`DfæBÌcÀ +2 +·3–lP?3E‹•Û]g÷rHk·[tF-ªàh˜Ù¡åÖhd† ÛEˤóÒýùPìQ–G.÷‡…]ö*·`¾Ü÷în“ꔳæ²qKXÀ$B#q7Ðo=ÄZÙó0aaêìD^;ºÈW D +ÛõH³-V#'±ê*Gx0É‘†G;Q”gÉÿ‹ +lfpF'ȱ€¨b_æèuwµÕ1Žo,Wâ c…z¯Ølq ÊpênäiÌU +ßeÏC D¶¾sµ^Úy»ŠÉ)ò,Eâ[‚šIO‰ÏÈŠIS3‰éLjZÊ´Ä8u38&Úƒƒ™¬ÄŒ„”Ì F¤Å$gÌ`R♘äÌÉÉqÁŒzzjš:=IIc§¤&%ªáZbrlRf\bò$f"Ü—œ }"0&ÍHaA~ªDu:šlŠ:-6š1“3f3ñ‰ÉhÎx˜4†IIËHŒÍLŠIcR3ÓRSÒÕ`>¦MNLŽO+ê)êä Xƒ“ᣞ &=!&) ›ŠÉïÓ°±)©3Ò'%d0 )Iqj¸8Q žÅLLRs¦ ¨Ø¤˜Ä)ÁL\Ì”˜Ij|W +Ì’†‡ñÞe%¨ñ%°ß±‰)É(ŒØ”äŒ4hC”iž[³ÓÕÁLLZb:$>-¦GpÂ)x¸/YÍÍ‚ fÚe† vfººÍ—8uLÌ•Žnö¢|ð>Áƒ÷ þl¼Oð÷½O Ã?Þ+ø¿ù^—½ï€G àñ¼ªxÀ# ð@;©RÀã9Àc ŒÞx<ÎW`Ä]âRLx\<šˆ‡ÉNDùà1ðH<²àQxT{àQxÔ?¿Š& (²DΧÂ(Àc2à1 ðÈ<æ §õ€ÇfÀãCÀã(àQx\<~<þ ·Ò=é«û5:œ¾NÇ©€ÇlÀà xÌ<–›7÷£€Çg€ÇÀã×öx(xáÑ ðxÄZÀcà±ðXxì<ŽçaôÀãwBMv<Â$ÀcàQx,<6oŸ?M¤%${RÉ>T(ù( x$6À£ðXx<x¼xì<ª3€ÇÀã2àq“¶Ñ]è2º]N‡ÒëéXzQfÀc>à±ðØ x¼x<><.×?èÛ%}GЛn ¥ï +F +Æb@>gµÇ£sw/<®y”œ°SCˆJMz,¨i=™ÖC¤Et½€žN¯¢M€€ b,£ç uðh¢7 (z«` }UB_:<38 .ãS• œ±Š„H`åî@öT …˜ÐXœ;̓˜À)`„Ë% [)dÎ%¢ ò®QAÑ.—\Ü*RDâÇ0&8¿´À%Ãefƒ›£5ÁI“”„v:4MI„•••2)‘û¬sÊ„ô /Ãñšs1xEÓ¤TÐPÙÀo2aL%Bh¨¦£D7q=I +H»ÆÝ°àü ƒ“*šp#R£ázÐ}c=š õ”âû!hÞ;ÛdYaL1À$¤H)íšN „T ñc&4ðg¿”diXZFžÿ@õRÄɽـ +#0r¤Ø› ÿ!ÿC6 Høž& {žËî²¹ +]œœçàHH‰T§³ÛOœŸQ£NWUU]]ÜF€ÿš ”Dro6p<1sl EⶪçÙ “R±Ht: ,ËÓoyø@väÌíæœò|@fй;Dˆ9VU…póÌÁÈéˆ4È„@sB"A{BHZ¥"PmžN’&‚9ºbÇ9ªŽ O )O ©ˆ§„‚£DÚ½)4·M² ÁS¢÷) ¤›qƼ)!öP ‹‚S(–£ +«4xJ@ÃC ÎŽ aÆÙ~˜ Bš”Ñ > ‚L a9J 3 ËQbÌä¤âîCWJ%„T*òéÕ+"¢¼ªJ*&¤’ÈQTu3J±„#°ŒŠÐÁ—¡º GPý®&…˜PˆE +Âs¡]·K*%¥² €LC¸ˆ“DÕDLßaÎ0§ŽÐåz­†CŠÀ• ºW*¦P`Æ4H…„Täîk’* ©R¥R›ówçï¶°¹lµæˆF*#¤2•KåBuÆ5D D^`ò ö p$(C)²Â· ¥&ÈöÖ5«*2€úÄ­(È0ŽEëÔ:«ˆ*>’jØs£ËÒÃNîú#Z1a%4àG«Tºœ½`ס€ŸQdvERU ¹CSŠÅ„X…êå+“XDˆºxU–I™„¦i¯.D {± e“#Jßt/;b9!V˜\Eu.t`¦BL||,‡Y‹Ñ¤B·öð¶5,$ƒ…â+“ ÎÅÕÕ •È]lLÈë "œ …B¶]bšcÂñŒ¸\Ji«\L:i‚Fÿ»3 ôACX-¡H!6*…0_žÏ…¿4Ja+XàU® (J&€5Ì)P2qjje¥\¹»`¥ÌÝ}œ=Ï^Ôw¹`ÚhØ’2¡fõj —GŽ´®X*‚V ‰›µ÷92º[ +ân‰|€ŽË[<µŒùˆgõª©)艔#$òÒm£$îCgu¥˜“”\Às’” ÁmM#œ”II™Üê|ž`×ÂÓªÜÙÅ9Àç\FȤ„Læ|½àˆ€£œ(w†‡4*Z§++×Uµ4ËĤLeÃ+Xs1¾-šˆvjùCh!š \SÑÑMY™ÆÕܬ”J 𪒔ø˜­åMö +]€. c‹-›Ëí:]µû1£ª…{è6•r[nÓZŠöãMVþÑD§Ëo+ –§#ȬÈc I+'$èùUˆ…+ I ]._( áâ»÷fHK|…¤¢ƒ–h|§ÜbâQJÁ« ¥Àj¢D•E7ú6EF˜,Wá¹¥î\ýŦ=¡"¤'¸`8=Á‚‚*TXêÞ84óýèÿ¨Ò´´xÚ )¢•\ÕHi±o^TpñˆWÜö¶jJ[°Hã"(/Fp»·}¬+Õüxä®…G­Âåî^l«Óv)ä„BA;i§È¥€#ŽhXL4X P™ÉÝä@ôà¨|D£…PÈH…Lì r©&X‰6±ùK€BN*Ñ lƒÆýåÒº8¹ÁÕ N.™eppImÃOJÂ7ä½oôgƒ:ÌŽñèÀ¶Å® ƒ«qÕ`þíDyÅ,ÚeáË]åX ãͪR¡79âV…Gž>Á§´hiQø‘ŠN*±Ê7²—©i”iúC¡ºfyÕò*6†¶-Þƒ« +o] +R¡ÄnZ­à–K«ákW¹3 +(kC=•¶Ø1-Hµ ¼)¤ðíK9YG[X8hbÞ¡œI[]­.ŽNîƒÅ‡BF)/8¼÷S¨SÎ )²bh§i¨ˆd(†R5nƒ¢„jE!¥2÷]èÖCc ÷†$k÷ˆ‰4‰œRJ*eE®MæÐ­H–Zš]®–2>u„'uJ©lË%þヒ”ú¶)[ë° XëØq…å˜í-ÅøÏæ2+?~,À»FØ4â‘:·à)ÐÓ+—ªôQ°ÔpÈ¢¤!_D¬·ü Aþ„ÜSMJyýkÀNòV —ï6l¿¡B…@¡¿³45ù‰`zþ©ÃýФñJQ@_¹ü# Ý•a£Ø1ìè°Ñ#U#G<M•W“]°÷oñLÉÊQ¿Ü_0%%5-l0;kö1Ç­è3QqéjFžnxì¨0õpõ¨aaÙþ\D÷Œ(ûd»ìç0)$è…¤/×eÔB’$¶ÄN9–øuß#áYOû[õ¯z¿7öü²C3ã%cj^ý*ñÏDkZ.þž°mЀ[Ì–ÞXv®r'ý¬ã±Ó†õÙóú‘³åuêTñùg_t+÷ö‰kyŠž¿žŽ»ôǵ«Õk«g¼ë` +”~'JZÎeù, +ïùÝ÷AÁç/>æÛ)|YÏúKÃCcÖ<íbïüÜ#éÑúYç&ÆÓ1ÏYipxu]Ï7ßÜu„Ü|æýìö—ÉávN”™?þñ†JŸ³ntÕ‹¿û|ô4µiÇù#ƒkÆ.É[,ö‹Vg~Ïüsûë®]çêŠâMÞpmoâÊŠ2/¿2÷Ô'Œ·8žëþÃC¯E9g‡­Ë¢hàÑÖ…¤²½ÒÞ>‚n‚.¾_ëÿ¨_Qµþµ!§/¾¸büó«Ã5Ô»¿ €íæìÒDÓ¹´x«ìÚ„ß ß;lwÕȽ¾l$˜Â>Ì&VNªT/å?Œ¦³™:|‚Ñ:׈®†òŸ´‡zÒˆ²ˆ“UCØé" S(“¤ ‰Ì&¸Û,µ4’7PTTt/zÛ_Ìì`ý‘¿ +Væž’–t $ªdãZß!o‹ÿù ýÅø_¬»K^×/H;3µ´âýñIŸì|!â£Ê'æ,þø7fÇMq6k®ž;¸´dÎǧ Ʀ»›ö毎Öy=Ê—þœ¿¶T>qi²ÏÊ–KCú_é³`sÔ>º¾‡êÒöó«·ÎÝ_/2]œ:4`ÅÈC Òm‰g{ýãêᨨڌÚ¬gç”íš¼±þ¬òò‹ÇsH y(Âï¡ð•‹_½&Qì:õ¥õÍu¿½}zðÈm7®t2`ÿžGR‡¿¿ânóG¶æ~¹oО%!¡£Çªßø¹õ§÷KK>ZÕy|„%æööw3&v·¸®ÿšyr…ù·_µO©Úùn/¿óã–Žv|ðýþ“»¡8D$ÈØO^2vä§§š_úS+–±#Þ¨ÉAÆÊþ±ÂâHäÝŸ£gÒ¹ø“€Xô™ð0¬f£YUXX8 ¯fmMÖñ·øÇ÷ÓÒÿoÕèɧ÷¨¯Úè,éÚçwAï[Kd­ýÌ[nåŽ?:8à»!A·kctW¿ù ëòkþGþSeͰŒ»ú–ZÊ&þpû¼âxá'wìëº}ö̵5’%̵>¯¼9ïãñðÓ§¿zöÊÙâ–¿½¥yrü¡÷ƒvfoøèèâ=«wžÝ5ìóŒßGþãÓyk¾ïÓzuÞÜãå’BGƒßÔ„37‰Ú„¤­â‘ßÍPþQúBí÷|³äöÙ¾A+_ûvq÷Ãg½Ô›¬ù#a›ÿšˆ }›>ð2ñö‡éÇ™‡Î\pCevþ|િüŠ[œ€H)'7‘ÜxVæ$ éa*í%WÇÏf/>©s¹5÷ãY§kìx¯Ê¿‚MCÝ E¯LbÕWšl8j +ý‡…G°lXø0Š‘=R¯>bLöˆá#Â#TÃU£Â‡ç¨F†´áá#Gtí$0Áœó]ªðó…ot=ºß¾ü×Pëþ\ï©P«« ” Ô1T10ªßÙèe8;z8«Â¨õ’ÀLv+^¨þ·Ü*ø&¬9îO’­ +vêíéL/¤HBÔ-è|ÖÇ©µýS^žZü嵦?>=ô…ëæÝ^Ó®¥×' ¿8rüê¥æçg®›ÝI5Ä%Tû7l,yò aÇùW¨Ìþïï_“¿³é&ñÈÚ矬“®;µ10ŽÝþj·š&ͼ=lÄ3/­š>º*9pW¿c~ŸÖ/ôÛ>²qg¿ÚU^[ðÌÅÁßz?ÒšEO9l^T~彡©Óí麼¶·î=»â›³ò}h½z[ø¢¨õQY‰EýŸjÙãWóôw’®S{$læ˜9ë_åɹë‡XnÙyùº{]vò‚}='­¬x5ße\Ý48¨ö³]¾çæ ùƵ—æl6.Ú2êË|¦eÉ­Uû7Œ’¶Œïr¸¢Ëv×Òº ïȰ/aIñÒSwOoŽîq®ËS?¬x)oÀ“yã¶×8“ý 雤ûã…çºN‰Ø7M“òåä÷U+[C.ì™ýJìÜOŠOî90wÕ"Ó2Û—_ýý¥ =ÏŽiÎù$?Jò]é¢=oÜúÁ'×O{åñéÇ;OÊ>Ý÷Fsä‘0ùШœWG[4©ÑïÅ­N©”?óaÙô_kr—iÏ¿Xq¤vùqˤ¯]!k¯íùu7›uNâë?­/¬=$9Ò2îöNûhÑÛÓNö8sàöÚcËo9ç)ïöZ`ßûùÌ~Ñc§\|òzî‘Äm¡_ |füc§®Žˆ{¶÷Ág… £n©¾E@­L¸{ãu’~1,7¸E@¦í–7k`Ç-ìl,§2éšAO=w+8‡ìцj ëÁvowQê)V(ÃaœnhÓÍ4‹ÄJ×h0ê´=Sàȳ،Ž$îìhv>2‚↛,jþÿÛCÿ;}i‹iÏÅó k*ÒãëC—¾9úüÔþ©o¸<À÷úgÛ>KzËÁ2®ˆ¿ÈX×5qm¯‰kvVÌbýƒ˜û㇮>%ö½ã#¨h|ª.èxÄ€e›oý’ÜüÄOö¾üCòÖ-‡û§[ñ›ú¤ôÔc»Níž(xùîk¦çr¿òU|ú¾2øÍ¥)™iŠoéàßç¬^Íš—ý<ƒÝü[ÙÙ {컡¬é´ÿÏ’÷ÒóÓÞQ¯~)˜<ÉÐiðPÃë¾ý\´`òËwoë4©‹táK‹¯e·{§J–~lüµ÷þÙ?þÀ‘á/íêSVT·éâ¸EÏmÑRûz+÷4ßÙô6y¢ßíw…U3r·¾ïD¶±¾Å²4üòÒó{î.‘|÷ö…‡zŠ\Êú‰¤üšÐ•DWvA§Í V³ V8»ø¼¹P3aÚà ß ôo~èkYúºß¾²E÷Šöo/Ï…~%ouÛ2¹òÕ·’ìÓû‡èÙTnQHdaªŒ­ŒY}ÿûbO7úO‚ )Ç B†×‚ÀƳq^ ‚ê?Ù£8b¹Yïs? Xûmxºj7êÂOï¼UtþDÉÔ)äžǼ™ù +ÿ'>|bÕþ3_^žŸ½?‹:žÌø§>áñ —²ìš¾1ðëÞäÒ7ßzæÔÕqäõK®’ kW$\jLïz!eÇšoX1ç çáï×Þ….¡zö¡ý¬¿ÿÚümñó!Ê;âKփɛWΕÙÖíß2æ…ÜáG§ú\ΞÝ­â&ú’¸gøÝº°É…aã‡Ùäµ—­ã[—Èü/~,Ó®lür÷+ÉÏ”9ì±­]98_>ñ‰3é¶¾×ÙcŠõ³f’Ýe]|Nÿ£KÅíÈ÷ Ó÷ýáî’¥uS§ý¸ÙºÖô昤3¿–|ôFÀãÙCo¼¼ièQQÏìOÆ÷ÉZØ(¯ >p2vïww¯Îß÷Í+¯;FîO>:¯çA…òÈ´åó‰írpïÞÝSrk_šØê,éë|±+køqbçÇzÖ¾Ø¯ï©ØŸ†ýtà—„ºà3õáΤA% ˜ýÈåi7^ûçó›µZ0Ø!êt½°ïG›œñîž9ãŸÚR¨}ǼÅÿµÞ˜ÔØÙòÇÓᦷ[.N­]Þÿáͽ—uΡÆß5cÕþoû~·o÷1Ý;ÅÂ31!©o®Ýýjñ޽•ë zž[³Ì¿ _høësåÌå?ª¼±øXß³Wú¤|²ñzbÃRoyJ>¿ÖXû½ùò¶ '†¶ú9«~J¯-õÿ³_úóìõBŲO +/þkÐÄ^eÐÄš« +ø&\WÌè݀ƚÅF ©IL†Dô Õ†…‘©%¤Ò0s @Üï±41aÖL ºƒ XwóÜ꿊dôÖÞÈ[Õ$àk²ëÓ¶ÅùNÒZÙ/£Ví`³bñÜU˜Gî®yö1¡Ü,ÍdÛpÂò*£ˆ¡ÓåNÞÊ”öº) *9ëçyÎy™wéþìàM\:‡×ß\©½®Šsýõi‘§¤X_¦•½0 +RÒ¾š#àüf—í±7Žè1—®Îø|:÷³UÌB±/n»X¤¬ÉK1­X¶ ™_÷²Ãäï±ó^©\ê©ùœwßáò}Slßÿ~¬% 鈴¨ªèÕvϸoß:Ol¾Y½©ºMú¦ÝÆžØþ-RŸêG>™`­»Î8âèv»F—73ÛnÜ´~’EÝ¥¹ :_ýÂ&*šª¶ÌK©Þ5‡­¤rËé/»˜Ûz¿Ç¸´¿gJûžŠ%ªñÛΨkX¨Î°ô2;_³qÒ:åå+ÓÞ$Êg=ÔðœßñH5ö²¢·]Б­áö*Ì.VEë_U~\ËèV¾ùÃÃ=k˜šâoݼWúJ¨÷sË…ü/•=÷Hìp©q}rðpQÕƒ¢ç*÷÷»Í<úþLøíæÞ7¾žËW÷Ý=ýŸ»ÒœÞXýöÚ[ï瞚˅5–-¯MoxÖ•T¿I¿åzøœ˜ýåßæÖè×éw0÷?ø°Õ¥ó§ÏÑ+KõK¦~ÏûQ¡¡#›0u–¿qË­ â÷æù}™¶aÛ‚œ—\ëè×ouçK,Õ¢òÄÚ/‘„kabá‘ãbï„tfpD­W1*eäO‘®“áç"¬~_-?nxQ¹ÓÄ +R¹†Pýø.ðnó$iИo¹˜Yá’xãx##p5‡TÍø!UsNÄUsxÌ/1hœr¼KãtƒÆ)á¤ÇlÐØl`³Ž‰Q̘P7 tLÐg™¹‰E•ÉÅz%¹p˜ LäŒd|RÒÁ›NãÁ›N!›”+¼bèöéTø&r=Yl±ôOmKg<©”Ò»|£$]i6÷4Á‡É“f:M«½TÉ3á`j¼žŽÝÃEs›ÿí³ÁuÊz¿ûÊÅŸ3o'ïW2]:=6µeBm·[@è žI5—¤¼e>Û8u]Øð7û±»žæìg¶ÒK¯l•-ŸbùèeÊIÛŠ*åϵË&”4÷~9­Æä¦u¨K`÷’•¬<³ßfüÊЛº@Ë^+;Â3Yž33/jÆ´'Í_ôvÓ¾÷ÇúÂ^Ó÷yªëž®W{áîg¾õ35¦Ïðå³åþÄÑyMþ°‘Ä£GuÏEÏÛâiÉuŒëбµëžnºy[´#Ð5¨P]ª~ãõ÷t¬2glŠìÌÈË_¾½ä°+Û2F- »&{aß4î›}¿>쯗É­u]^öÔA+uñáØ ¤¶Ã²ÉfÓÛîßúüã“ØÂYêÏ.~á]l²ããhö9ívlålÙ6–Ê‹ìKLÜúáÎ1i–}÷ói¼»—ªÿfú·…1Ón0\[è¶7òóô¥œÞ3ä/0hÝ8{©½k¹œé±K‹ͯªRúå1U~õow冯ó~ìÏÞî=ýÑëÒ +©7¯ÌgVJxÿ¿¶Y9£ôÙú_º_s7¼Ê´^ÿÇà-‹Oßýû¥¹Ém/Î óóßß®´°BÐH±ê½#×Fûß+Î,‰=¸°cvxa˜Ÿ‡ë§“³Ë¢¹<²ÿVÎ?¸777ëdP±0oUÀYÃ&– M,k˜ §tÅ…}819² ñ¨ð&bNfCä™ +dYQe„FC`ÑvgŠäFk¯¢ùoßî}bÔ»/k½A +’Ã0ƒZ X϶ Á¼`¡Zƒ +Μ?fO­nfibd¨K,PwUËo=o”Å'ÏíÒtí©ä uq+®æ{V›&VDŸkRúYªÌ¥ÙkÛ³I¦s|ú¾êœ)jdk9Qž}NnÓ £ð%²êò»2Õ«~qšÜLNîïÙ×!'›ãñYW ÓólØÏSi7zV›-™ÏðVŸïI½éT™…“OÞ{º2©ÿö£÷?-Ìþúö ÏâwV3_ò?ÎS“Ð1kn[€e½€¤®SkRÕ¶oç;%ßÎ_séú ®_«æü~;uoWNÈYemû¹ ë8Í^œø»£0nºçÊèÇ=ÉÞÒ+Õz.)ï_ÜŸ°}ÍÖp– ËŽÍœÞS{3ÍQtι`†Çktƒ¿FsüÁÂ&& `óDGl†ML¢@!ApÒì°Ž8ö™6¤4k œ$¹3†Œ@Ëá2¬†üàc3CS#C 0ŠÂH‘þ»8o7 r¿zðî‚IÌíó'"ѺL ´’’þJjr¹8ã·Ç+¶4<æ4Ikëæ\åÉš»n¾›Íñð^áÔEn9péÛ[óþå¿J> +stream + + + + + +True + + + + + + + + + + + +endstream +endobj +20 0 obj +[ 226 0 0 0 0 729 0 233 312 312 0 0 258 306 267 434 507 507 507 507 507 507 507 507 507 507 276 0 0 0 0 0 898 606 561 519 630 488 459 637 631 267 331 0 423 874 656 668 532 0 563 465 495 653 591 0 551 520 0 0 0 0 0 0 0 528 0 412 528 491 0 0 0 246 0 0 246 804 527 527 0 0 352 394 0 527 0 0 0 470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 342 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 488 ] +endobj +21 0 obj +<< +/Type /Font +/Subtype /TrueType +/Name /F3 +/BaseFont /BCDGEE+Calibri +/Encoding /WinAnsiEncoding +/FontDescriptor 22 0 R +/FirstChar 32 +/LastChar 233 +/Widths 25 0 R +>> +endobj +22 0 obj +<< +/Type /FontDescriptor +/FontName /BCDGEE+Calibri +/Flags 32 +/ItalicAngle 0 +/Ascent 750 +/Descent -250 +/CapHeight 750 +/AvgWidth 521 +/MaxWidth 1743 +/FontWeight 400 +/XHeight 250 +/StemV 52 +/FontBBox [ -503 -250 1240 750 ] +/FontFile2 23 0 R +>> +endobj +23 0 obj +<< +/Metadata 24 0 R +/Filter /FlateDecode +/Length1 141468 +/Length 55490 +>> +stream +xœì}\TÇÚþ;çìÂR–*²â.® »X"«E¢²fÁVìb‹’MHL¹éÝô¢1˪SMnz1½÷z“MÕÜ\ò=sÞ£ÆÜòÏ÷ýû³Ï3ï¼óž™9gæ Q "²áÃD•ùÃóÊ>1{‰Œ$ŠkŸ?ü´Ü_×Ãèlô8§“ÜDtîCèZº“D‹¬Ó·›£äH)Þu¤7â%Üî›ÉEÐL´é¸u»ÛÖé_?¶Mܽ¿§™N.×±·h“ù”cç5ŸFÕ$—©Ó‘<&ïQóp/8VýKŠnsÍNtÏI_¯‘:ý‘þéÒà6å½xúþ ™Lt³þ<Í9f]-ÝÜ&—·_Åt³élª;QŒØ}â¨9Qý±,$×½ôØyM÷д?’KòH}ÏQó0– +Ù¦œ:´¹æzºé¤¯wRC†Ò€“ŽŸIymÊoÐÄ“mÛ¦ÝTª8Q}ˆàzS_ªlÓîMjÍÇ3m¥)mÚØJ9¢Oxý%'w²fÚs$_hWJÓŸ ~¿‰9j¬G›x{ýïb®ù—: ©¡kЇã¶7eŸøžý&¾U.í¹¶yõT*9Vóæ¶~m3¥¶Éù%¥šêÛúŽymĘã(5´Ï÷;¿/cÐßË/®M_›{ÿÓ6ñšÒÆPžöÔši„xŒ:kWÑ)Ò/ª©ªu¼i<Õi_ÈG¼±ß‰ŸQîIÃÅgäÒ¾fŸþeþîµÇõÿ‰Qüù†gŸÄ®?»A ZЂƦ]'Â[WI{ŽéïLjfºê?Ù½ í#rüæZ‹ðô_[~–øO^ó_5½]кÚÂ|,ÓîÿïõÅt9MÑž'—¾›¦%&uÒß÷§ÕºŸú«‰øyx$°XLœ@-0¨J äÒtm=µ×Ï¢‰ú"*×7Qº>ƒªôí4W/¤,}éQ©~ëZ`*0˜T“ó›þu=éþõ꥕Ò­ºk£(^+@›ê©eS'ítäÜ'×ÔRôß{*‚´ ýž™ûcÿíãX¦í£Úßè"©õ"ºH» ¸ËÒÄG´qÍ9t‘^}³ž*´·¹N»ŽNר{ƒI‡þŒ’Û\£™ŠÿÝ~-hA ZЂ´ -hA ZÐþ÷›üÓà£~Îls¼Ÿ3øzþsQùó¦ñ³fàçÌÿ7½ZЂ´ -hA ZЂ´ ý™¦ÿg÷ hA ÚñLüËK>hA ZЂ´ -hA ZЂ´ -hAûï˜6Ÿb@tºí;/õ¿ui4˜ Œ  Pä#·ÔÇnÝr׿sí -hA ZЂ´ -hA ZЂ´ -hA ZЂ´ -hA ZÐŽo-üÙ=ZÐþdÓèÀ¿IJüŒ”¾›Lâ]8ÊÈMfЇ²R'Dé€ +©˜ÆSUÑtšIó©ž–Òº—|´•vÐ×¢WJfJ”^)ýR¥ Iæ8è sÚœqÎ<ç|çrçùi/ôã÷F!«“ºãyÈ:šJ¬ÕÈ:‡Îêo•µ'²DÖ¡m².vž‰¬dd-ûÔàZ¾4(Íøm9{ñj©ÖžÔ~Âåï¶é÷ͺÖ_»‹ötùlêgUŸ}þÙÚÏÖ}t*QH¿ÀïØ*Æ\ÌE¯ˆÓ +óXC‡çò¼“˜ïYÀJžy}”~•¾P÷êuún}þ­þþ½þƒþ£þ“¾Wß§Ÿ®_G&Š¡$Ü›tÌO>Ñ队ÉTC3h‘°‰dÑQtÅ¢^,«ÄùâBq‰¸VlÓÑÿ)~›Ì¦S¨Éb +3…›"L‘&«)Jdˆ"øÿæþóÑ¿= e-ð»Æ4:±‰#c8Võ‰ÆÕ*ŠGH1JË +T©ñÒ‘jÎlÓ ôóÈL@~÷š¨À¬@=ö;cj;@çÉDé·£åä:¿MÙJ.þmµ©kà*=þHR1-¸žÿ¿]Ïä®X{îâE ÌŸ7wNÝìY3gLŸV[3uÊäI'T”{=eãJKŠÇŽ}ZѨ‘# +òór‡sç =uÈàA³ôï—Õ£{f×ô´Î®Nޤø[´5"<Ìb6éš Ì|WA¥Ó—^é3¥»FŽì.Ë®*8ªZ9*}N¸ +ÚÆøœ•F˜³m¤‘ÓŽŠts¤ûp¤°9‡Ðî™Î|—Ó÷bžËÙ,*J¼Ðëó\åNßC6´)Ý(XQHME g~ÒŒ<§OT:ó}Kf4æWæ!_SDx®+·6¼{&5…G@F@ùººæ7‰®C…!´®ùƒš4²Xåe}zZ~U¯¸Ä›ŸgOM-7|”käò…äúB\Ι²Ït³)sgã…Í6šZ™Y㪩šèõéUhÔ¨ç76®óÅdøº¹ò|ÝV|ž„!×ú2]yù¾ ’•¾€ð™Ól.gã>Bç]{v·õTnêë´oéC}©\öט‹›’žßè­™æsTÚkð|Nszí©>w9¦¯Üå­-—wÉeóuû—K5®h´ÂØŽŠVÁrä¡i§W³ëåònÁá,À‡køTØp»Œ¢¼£Ã‡8½ÂN* W DHÕ& +zZîHY¥Ë¦¹#í©å©l'è’=Ð'sšÏÒ*— ŽÃ}âë·k-;ÔÍ™_›×ªƒm’š d;v?59 £…EÞΑªJOÃÊ…OCÃ%ïb’ÓGÅN¯«ÖUîÂ3ä.öʱɹ6îoÑ8WQI…׸ۧ¤¬M‰ë³¹ä£TT«‚–‹g° în«Qa”GU]¨ª]²_5M¤§ÉGÙÞ$ aν Ü76£Ü囚áJ•ýìžÙd¡ÈÔ²Ê\¬Õlw®‚*^kUÍ- S›ÜîÆùù•3a]4º +k]ã¼CìFçK½«ì+äµc©H• G*†7¹Äy%MnqÞ¸ +ï‘ó¼2¯_Znåðò¦Î¨óîpâ`x5é•NYpÊ‚ÌTŠ‚Åˆ·ïp5µ&Ãa”«›>‹ò ªnÖØgã ¥rãTXÝlâ·Š6Ága_Gw D[Pc“5^$dT²5‘œ`w¸Ùmq‡¹#5«†)•.?< 6LЖHaö&ä,5ÜÍ¢¡)Ìmßad* D6 RúûÐsÖ*®Ç÷§Â»%’ßøDÄpix +“fàÂû$ßY#Ÿ¿•å3+ËåîA‰xVñ-|Â5”|šk(zé wÕ÷E¸†KŽôç°?DúCñä‹D›-7ÝÆJ6b¬/Ù¯5]¦t6·´”yS_´ï)OÅZšTx}ax¹™ÓF!n„D%Ü#| ÕU²äñʶ¡i…ÕåX—*!B +}aÈÈ€ˆ£\ohTg­ÊeH¸±u4”ûÊ3äE½3ËõjóÑH× _H:ç4§Ë e•7ƺz›ÖzxÚ:Iaèó²ÇŽ".VΓ‰žW»PU]éägdÖ2¿,Âíì©ÅžoJ¯5nT’–ža ÷…õ@B|KÑCî9æ´Ðòrî¼QZÀµm¾ô(½ÕT`vPU(û‚ïuèª }L¦)i¦R×2l²ÓF¦PTû¬i…Ux»qûx\Ùª±En‚O°7TŽ<óŽ-¡¹åN×òÔV†½C¾ýäóGöX¨TÞx´Ã7!£{¦åh¯Õp76Z¬ÇnÀóe±fé¥UË·X>pÆóæÌ—¯Jר&mL†ÁÂàÆQ.¼A´4 tt,ŸTgM¹ŒB—‹½ì¸A¢U|MÉmƒUIJ|3}ÓÛg.Hà0˜ÖƒÏŠÜkñ¬Ì²ûêðdªyGœN›kK~GHTâ&^xüñÔÉEÓPíôNÅÃŽ„•òˆZ]˜¶À•|s3ڤĺxxHÇ×Pì¬,wVâh*J¼©©v¬F°sΩ®*ù*(æñWG•ªFùˆN*åv_(^LÓªj]©xƒøäij/ûh +,²76º}ƺ-@0Ò§cÙJÂ÷ü WU­­]6*åàEi…WíSº¬.ÄôºñTÙek§O+ónѾP6µ«ÆÍà1Þ!õuøm£ÞCí˜ÓãúñrЇӞў¢lrhOøÊÖÞ%öø-ðÛ~üøuðkàWÁ¯€?~üyȤ½G}2@?¬j€Û€×3ÍF&Ah/(^{œò€`1p9`Fì#¨» 9µ5[Ã’Ä(ÜÐs”8[‰³”hPâL%V+±J‰•Jœ¡Ä +%–+±L‰¥J,Q¢^‰ÅJ,Rb󕘧Ä\%æ(Q§Äl%f)1S‰JLWbšµJÔ(Q­ÄT%ª”¨TbŠ“•˜¤ÄD%&(Q¡D¹^%NWb¼%Ê”§D©%J+1V‰1JŒVâ4%Š”¥D¡#•¡DùJä)‘«Äp%†)áV"G‰¡JœªÄ%+1H‰Jd+1@‰þJôS¢¯}”è­D/%z*‘¥D%º+‘©D†§(ÑM‰®JtQ"]‰4%:+áR¢“©J8•p(ÑQ‰%:(aW"Y‰öJ$)ÑN‰D%”ˆW"N‰X%b”°)­D”V%"•ˆP"\‰0%,J„*¢„Y “ºšB +Ñ¢Ä!%*ñ«”دÄ?•øE‰(ñ³û”Ø«ÄOJü¨ÄJ|¯ÄwJ|«Ä%v+ñWâk%¾RâoJ|©ÄJ|®ÄgJ|ªÄ'J|¬ÄGJ|¨ÄJ¼¯Ä{J¼«Ä;J¼­Ä[J¼©ÄJ¼®ÄkJ¼ªÄ+J¼¬ÄKJìRâE%^Pây%žSâY%žQâi%žRâI%žPâ¯J<®ÄcJìTâQ%Qâa%RâA%Pb‡ÍJlWâ~%¶)±U‰-Jø•hR§Ä}JlVâ^%6)±Q‰{”¸[‰»”¸S‰;”¸]‰Û”¸U‰[”¸Y‰ JܤÄJÜ ÄõJ\§ÄµJ\£ÄÕJ\¥Ä•J\¡ÄåJ\¦Ä_”¸T‰K”¸X‰‹”X¯Ä…J\ D£ç+qžë”X«Ä¹J¨cPÇ¡Ž=B{„:öuìêØ#Ô±G¨cPÇ¡Ž=B{„:öuìêØ#Ô±G¨cPDZP uþêü#ÔùG¨óPç¡Î?B„:ÿuþêü#ÔùG¨óPç¡Î?B„:ÿuþêü#ÔùG¨óPç¡Î?B„:ÿuþêü#ÔùG¨óPç¡Î?B„:ÿuìêØ#Ô±G¨ÓŽP§¡N;Bv„:íuÚê´#ÔiG¨ÓŽÈÝ"E³¶Æßq¨gfÇÐÙ\:Ëßq¨Kg2­öwŒ­âÒJ¦3˜V0-÷§ -ó§ä‚–2-aªçºÅ\ZÄ´ ü)ÃAó™æ1Íå9LuL³ýòA³˜f2Í`šÎ4Íß!TË¥¦j¦©LUL•LS˜&s»I\šÈ4©‚©œÉËt:Óx&SÓ8¦R¦¦b¦±Lc˜F3ÆTÄ4Êo/2ôÛGF0øíE |¿ý4PS.Óp®ÆíÜL9Ün(Ó©LC8r0Ó n>)›iS¦~œ¬/SÎÒ›©SON–ÅÔƒÛugÊdÊ`:…©SW¦.œ:)svfr1uâÔ©LNnç`êÈ”ÂÔÉΔìOjÏ”äO jÇ”ÈΦxvÆ1Å2Åp)šQLV¦H®‹` +g +ã: S(Sˆ¿}1Èìo_21éìÔ¸$˜È ÑÂtȹô+Ó¦ý\÷O.ýÂô¦Ÿ™öù“Ê@{ýIã@?qéG¦˜¾çºï¸ô-Ó¦Ý\÷ ÓßÙù5ÓWLcú’C¾àÒç\úŒKŸ2}Âô1×}Äô!;?`zŸé=¦w9ä.½Íô–¿Ýé 7ýíÆƒÞ`z¯1½Êô +ÓËòÓ.v¾ÈôÓóLÏqȳLϰói¦§˜ždz‚é¯ù8—cÚÉô(×=Âô0;bzé¦L͹K÷3mcÚÊ´ÅŸ˜òû'€š˜|L÷1mfº—iÓF¦{ü‰Ø¯ÅÝœå.¦;¹î¦Û™ncº•馛™60ÝÄÉnä,70]Ïu×1]Ët ÓÕÜà*.]ÉtÓå\wgù Ó¥\w ÓÅL1­gº#/àR#ÓùLç1­cZëO¨ëO˜ +ZÃtŽ?aèl¦³ü Pƒ?›±8ӟдši7_ÉíÎ`ZáO¨-çæË˜–2-aªgZÌ´ˆS/äæ ˜æûªAó8Ù\ŽœÃTÇ4›iÓLn7ƒi:÷l7¯eªáÈj¦©LUL•LS˜&ó 'qÏ&2MàAWpêr¾—étîîx¾‡³”1c*e*ñÇ»AÅþxy…±þxùxñÇŸíï:CŠ˜Fùãq.…\É4‚þøÕ |ü:Pž?þLP®?¾4Ü[ÆäfÊaêÅû]œÊ¥!þ˜rÐ`¦Aþùh dÊöÇŒ ðÇxAýý1 ~\×—©?&Ô›#{ùcäÀzúcäÚÌbêÁÍ»ó2™28Ù)LÝ8YW¦.LéLiþ9K™\œ³çLådNÎâ`êÈíR˜:0Ù™’™Úûm“@I~ÛdP;¿m +(‘))ž)Ž)–Äp;£™¢˜¬L‘Á‘áì c²0…2…p¤™#MìÔ™4&ÁDî–詉CÑÕŽƒÑ5Ž_¡ûÂ÷ |ÿ~ö{áÿ øu? ü=ðð-°þÝÀ7¨û;Ê__¾Œšîø"j†ãsà3àSàø>||€òûà÷€ww€·­³oY{9Þ¿a­s¼nMw¼¼ +ýŠ5Ãñ2ð° õ/Â÷‚uŽãyèç Ÿ…~Æ:Ëñ´u¦ã)ë Ç“ÖéŽ'Ðö¯È÷8ðànÙ‰ÏGG€‡#8Š\èx0r‘ãÈÅŽ@3°þûm¨ÛŠº-ðù&Àܱܱ9b…ãÞˆ•ŽM«#V;îîîîînèî¸ |+p ÚÜ Þ1ÛqôÐ7×C_‡\×"×5Èu5|WWW——A»K‘ï’ð1Ž‹ÃÇ:. +ŸîX~»ãÂð;çêiŽ5z¶ã‘í8ÛÓà9kcƒçLÏ*Ïê«<«DÄ*ûª¢Ug¬Ú¸ê½UîØð•žž36®ð,÷,õ,Û¸Ôó€¶–¦i纇x–l¬÷˜êãë×ë{ëÅÆz‘W/zÖ êmõÎz=r±g¡gÑÆ…ZX¼°a¡o¡i°oáÇ 5Z(›[vnYhïXv¯\hµ,ðÌóÌß8Ï3wÚÏ,tpfötÏŒÓ=Ó²k<µk<ÕÙS=UÙ•ž)Ù“<“7NòLÌ®ðLØXá)ÏözNGüøì2gc™g\v‰§tc‰glöÏøGgyNÛXä•=ÒS¸q¤gDv'ƒ§¶ÎºMv`Lô„ìbxO»Ûþ±ý{»‰ì>ûN»ìHÖºE·¹cÛ‹yíÏlq{=:é¥$ÍÔ-³ ºÝKí>j÷];Sœ»]·”hKt&ê rl‰£Ë + ÎÉcîÕÏ«#Ñ•^ ¢ Zþw b-éÂ)„ük¡N¡[³U$8 +ô‡…ü‹fâ*Ë(j¶Pi‘ÏR<Á'Îó¥“Ÿî’ +_Èy>òTLð6 qQ¹ñw|ñò/•åsׯ§”áE¾”q^¿¾aCÊðò"_ƒÔn·¡[¤&„”gL^T¿(Ãë>•b>Žù>FOxÔö’M‹ŽÑÑ-Ñš;ŽrDiò£%JwGõPmuX5ùÑbÕÝVxäøºD—DG8"4ONÄØÍ‘“[àŽèÞ³à7ãÜ"ÇÉWÎX<“-Î0¾Q*õ²˜!½ò{Ñb”åW½Q¦Œ‡¦,‚-VÎÅ'nõ¿ÝÄŸÝÿûÆ“gX‹¶†j´s€³³€àL`5° +X œ¬–Ë€¥À X ,óyÀ\`PÌf3Àt`P ÔÕÀT  +¨¦“IÀD`P”^àt`<àÊ€q@)Pc1Àhà4 #@ä¹Àp`àr€¡À©À`00d€þ@? /Ðè ôzY@ ; d§Ý€®@ H:.  +8ÐH:v h$í€D ˆâ€X °Ñ@`" ,@(˜Ó°|ꀀ¨FÀ'_À~àŸÀ/À?€Ÿ}À^à'àGàà{à;à[`°øø;ð5ðð7àKà àsà3àSààcà#àCàà}à=à]ààmà-àMà àuà5àUààeà%`ð"ðð<ðð,ð ð4ðð$ððWàqà1`'ð(ðð0ðð ð°h¶÷Û€­ÀÀ4>à>`3p/° ØÜÜ ÜÜ ÜÜÜÜ +ÜÜ lnnn®®®®®®®®..þ\ +\\ \¬..óó€uÀZà\ªÖ °þÖ¿ÀúXÿë_`ý ¬õ/°þÖ¿ÀúXÿë_`ý ¬õ/°þÖ¿X`Øö=@`Øö=@`Øö=@`Øö=@`Øö=@`Øö=@`Øö=@`Øö=@`ý ¬õ/°öÖ¾ÀÚXûk_`í ¬}µ/°öÖþŸ½ÿ·ò?»ÿÇ-ju0“–4e2…ÞHtè²6ÿb¥˜fÑ"jÀ×ZZO—Ñ£ôM¥s ®¡ tÝM>zŒž¥·Nâ_¿œ´ZnžC‘úv +¡8¢–ý-{Ý4›£Zy.C)Îä<âi±µ|{”ïÛC—µØ5‡ÄR¸ÑÖª½ +ïOâ`Ë~¼rQné/ËÚ:èh£Å¡7ºïÐGÍA UКH“¨’ª0~ùopfbffSÍ¡¹Fi.ê¦ãsJSŒÇTcè#Qóh>°S=-Á×|èE’¬[`”å¿§ZJËh9­ 3h%­ +|.5<+Q³Â(/VÓ™¸3gÑÙ†RÌžsh ‹»¶ŽÎ£óOX:ÿ°j¤ èBÜç‹èâãêõmJ—àëRú ž‡Ëé +º’®Æsq]”÷*Ã-ÝH7ᙑuWÀs“¡díCôm£ÍtÝoÌe5fgDÍË4cçcVb„ç´ê1ÏßÒóµc—ck Œtüg·j±$02òDr¾2˪£fâŒõ‘qé +cüG¼­gåD^5×·š™ëŒ’TG{§¯¤°oƧœU©nfu“¡[ûo<»Á(ßJ·Ñí¸wJ1{“îÂÚ¾‡6Ò&|Ñ­ófº×¸s>j"?m¡­¸“÷Óvj6ü'ª;–KÀï?ìÙAЃxB¡ØiÇ—ò< ߣï†ËÓ_Q–Q\zŠžÆõ=O/ÐKô$J»ŒÏgPz™^¥×è-a…z…¾ÆçAzÙü9EÑ0üøÿæùzšL“ÿ“»ÛÑfN¦ÚÐòKËÒ–_ô‘4M”á¹ wi+]ˆŸØç‰ +7}Jñ´µåg}"¸ëÁwÍ3ÝÒò™±k.Ò_Å.§S( ¤Ñ4†®ò›á}ˆ¬8¥$Ò ±m[B^ž¥{è#8häÄÆBB亣Mšu{rrŽk{¿õzLa³è¾5't=Nç9?<¸+ëà‡{bfíY|òá'¶vÅ ÌêóÉëŸôêiwÇ'[·×¡i?×öº~zÈú:=&G¶w‡Õ帵ÐõuH’”“‘¼+cWVÆ® ¤ÉèÙ«\ĤƈÒBCãC\zhýº¤÷ïÓ§÷P­_ßtW§(Íðõí?`¨Þ§wGMWž¡š, ýÕ_+ô±C´Õ®œñ}Ì“£ã­!f­CRl÷!i¶qÒ†ôH ÕCCt³%´ë€áŠêò;½“’˜k±Ä¦$&¤Ä„|ϵÿGsÔ\SÝËõÁs:ëW‡[4SHHsǤö§ N-g3EÄÙb-¡±1‘]ó&\›ÐAæèÀ¹ŽÆtºZö›V›ã©¥ÓûrÞwPç–¯¶FÚÄi®æ€Honù~kD„áîd©ÒlòÓj|FŸî®"MVgFˆÑ]éi{##"“:¥¸Â­"ÑI‘¶Hí>×£®—\º+Ò›Rë1{('''vàÀ¬¬I“bÚ ŒŒécÛÓ;¦O¯ž"cRàퟑawwDÊÈ´½u­s¶Î“¤N“,¸yi‰‰!Æ뢧êQº«Szzÿ‚oS»P—žjª·[šÃ‘fšwðËYzxœ«CJZ´°¿ÉÚ¾KGç)ÉQ¦3ÄGâñSíQ&=42L >ôl˜5Ìd޲'šüQ]·DG¬?xžæMD&çº#eP6ýCέ;Ù‘d£¶hùaÅGR$>œ˜)ù'ïî®É nÔ'¸QŸ‘)ƒ3ep¦ ΔÁ™28óüM-;·ASzܧ-ˆ¿%:ÀVƒÞiðW["$k6·uCÄÎ-"¹ËÞ^½B;ÿ­¿¤o³ˆh +-£œ=9ÆŠ(²&}bLyï×3XÈ1µ\@áɽºì­C +›Ì±µÎV*³øë 'Çh0P®™ø(“+µSz¿˜¾ýû¤b®äâ騋¾=4—+F®œ¸#Ò$Ùc«ÚÜ®[·v"}ñåÕ½3†Òob~×C“³+FùŸÈ-íß~LÚˆÙ%»öö榋E§N/zJ‚£‹éì.ŽÌ²£{”ÈŽ ïW:WY§õëph’kð؃ òqÊî0 Tþ«yo.ƽ‰%]mÜ™”œT'ç;NÎw\<æ/.“—„™‹{PÎ7%ó<'æ990ÏÉyNÌsòƒZ …Q’ˆôG•Ø›Ez“™çVdñ¾®æq’½)*©YDn­‹*1ËH90L›åd¤ð¸…ï…ª’ãÞžÓnl»ûÚé=FOÑS`ôô?œ| xW½ïlÒh׌ö}·dY–eK²y“ì8¶,o±ØÎâ¬vÒ¤“&iZÒ¤¡KÒå +´4½,ïA¹—{iIb'¦-´ï{)P.áõ{_é}@é×rßíŠJ ’´‰óÎÿÌÈ–³QnkÆ£9gt~ÿí÷ÿŸs$žx +Ù€êÒs§Í䀊ÁžLÄÿ$¾ˆ†V­81LšÉ …Éo‡Ï¬4û­v¿IáPhà#jÌoÊgâ§”ÇtZ‰—±s›Ú÷´SÚúzk"¡ª³ÙsŸÐdA¹=¡F>@>@>W¥Bw©À¨`DÈçæí0¼PÓ°ÚfÕ&l uroõ°wu9ˆå (î¤ÐXËžEnáŒÏ¶%R)ˆj“ˆ„\µÛb'K  ’´Pø"ƒK„Žã™‚H†¡“Ç&¯Ýê7*¨ù­6»MfIMÍ÷H ì6Ÿ‘­uÞà«Ù”ä~yŸÚá ÛwéFÍ"ÂÛ?>ʪXšaUrD0Ž-\¼&¤qT;/ŒÓ{jìj¥Ñme€O´ƒ NFôz“;>ꥣߨMì& »GUW—Ø“6=¼ “œÎÐ-I¸…#<ËFTuúc‹÷‚1˜¯@9‘‚¥»¬MjQÆT„2Ž-óUõÐÖT8¼¨‘ÌZ³C›qD‚Aóü ¾EQ +£×fóµŽwÄëæÉfwS²ÁF"ÿbôÚ->ƒ¢Ç„(—ÚŒP¯e?ÝRx´xáÏ ¦ö½ê€Êõ^üYzë¦ÉÄп Q?FŒ¹( ûw/•˜·d~ˆ<Ï?ŠÜÁ™@5MžLžL6ÆT^é#êQM |¤óèøßð=øž§©¡"ìdô„~48GÆŽËÆ–†©É…x\üstFÐÊàN¦Æ–†© +Ž‹£bÂf“‡Â¡ê­â#¯ýâ¯>ÛU<úêÑ/¼ô¹³‘u_Ù³ç+£áµ_¾yïW7TSþã…ãÇÿð›Ç>zrãØwþüÏ7ý賃«|zûÍÏ}v`ÕžÁ1yâŸ"[wQâØ‡äÒPåÒPå’yË%ó–KC•ƒYy7èÝœFKö»K¹a9$ÁWÍ‘ª“r¹ O}Ò<¬©pÒ¢ŠUF/9Ü=+ ÛÍpÿŒ€\—;g¦"€Ó?Íïÿþm(~;¸·i®ر«?:Û2>Yû¯ nïÑl~ì¦ÖùºD*ÃZsëŒíLë.ž¯îÙ*â¨.MDñ#¬)®ŽÏ(ÐØ20Ö kÆžmÉ m9žÍñ:ã%y @^—äa1¥«ŽCAûÔž<™Ï[ÛиgýÃVÉíáXÄñ +Þ˜E€¨ËCÓY5ôCËS‚ÔÌr+–]„®£¯@ÏbõÐw´-2Ž„Ãe6¤–›B‡ß¤fö›ãí«Zö•qEìÈØÐáèÛ7 v®ÏúÒñjÓ-:ÅüÅ®•ö\êáêÚÚéEŽO̹œ†ôx.xñ× x£h(£µËÆv/ïØ>ÔlÒÅZæÿ#ä¦ïíßaeåóýþ–•Èö\*Ñ[‘­ö’ÕbÕ'=J…:$8;$˜;$ÿ×!ÁÚ1GÕæcɼÑDö'ó<Ê—’¡¤Æiƒ¶N?NŽƒÔÄ ¢s>E5@ :éÄ‘ö¹“véh§ô<ÙOhêž&#D†P‘Ἒ÷eÈL^­!ûy˜gWÁY†Ïð–V NYtÔ‚L[²}$®\-›äJ(?HqA–ðÆ¢SÈÔÁê'W!æzZÀ½F¡ÛÓîW/¸ +Ô:&u½è4˜²Ó3è:¹ô·Ü, _r$rzëòýßšìØ=ÞbU3H^ºÔʽÅe“ËCÉ‘7Ý0’jÙñðªØø@«QÎP´\ͪ]“ÍM+ÓŽäèΛvަÈ×}¥¾€­Ê‹Ri6PôdV¦2ƒ- ©öU{‡†ï‹ëí^£š· .£Òt»ë;«š[“©¶Ñ½ÀõÈÿü;²³qfD¶<Üg€}bgD‚GÉؙܤÐ-ù›$¢H`xŸqgãr·3AwÙÃ$ià‚øËî3ÀÇ,÷h™A¡3‰Ó÷`ŒÙßÇ__Ðò- +Þe4Š54Îï¡Ès1¿1+fF›â¤¼‡¼‰ÔÒ¬È »öò<‘G4Èái1a‘ °HPX$(, +ËS,ñ$°DPO%êBáFœ‹: ¼QRº—b± + +9 7BÚ´¨d¹Êx´»y)UDó+îš»õÆÜÑ%rc£¢vôÖÞ¾[‡c5¿QI¾ú©ÞÕÙ~àÔ~:XFêŸÖÞ·&^;qxœ¶.P„Xyàb!â>±8ßêé€cØAV£TVKÖÚÉZiŸ“œ>×l+_“¼.Ùmv[¸Ê;b“DîlÈæx)šŒž˜œ$'''c“1çé…Ûlø>p¤˜*2Àošš*bÒb‘³ÔiFg¸-~¯aéù5 +ÒPpù J†ÜG’;hr¥Þ–Vx žA22…ZÁœÀ”6}ü,“ƒëPñ€±· |ò(²Š(‘Ã19À#gpÒ9¬Ay\DL|“è?¨rÀ ïÍ +èMY{1ÙMŠJ½à&gÈ +¶˜±ã'Ñ})·ò"ãðÑ*ƒ–Z}ñ„JœI§¢^tz¯»øuo(Qrç Vi-v¯™~%s b^_„³;<¦ (rrÈ¢ÿ/Fr«&ö§ŸµY#š°vŽ"óJk؇®«Ãª9ªÐp•»&rN£1¸§ 7ÈnëU‰oÈ’ö„í¥×‘k3dÜïÄ` j¡‰œÛˆµ©D 5ZRŠøÙ¥)¤èß°4öû«L +z|>?¨Œ!—;¨£äFc‹xìA›A­ ?M=Inoµ8€äeé]¥Äã2ÓÏ«u,MÒ2ä/ïšWÁwî} ¾ËñI5©mXbáÔÓM¨ /e9 E§9ª Wíˆü¾¡­zƒ›Jý…Ý^Yzéutò:÷zR¬¤6D~ AUoÜ›ú‹€îþD% úª% ú¿»R+Voí˜ÿŸ¦PÈDVo¼c¬Öj +Ʋ?šã+Zÿy6ÛQmnqfF»~üjcWÊM¦Òc+’Îí§¿íwº¶vDºšã:EÍò ò«ÁæjËü³Îxë|_¬³Î6ÿmK¬ôv×¥÷é#L=ÑHÜ(œ°‘9ª=¯ÒX>N¸snʘ# (|n£ÎùꨆÚ9²ñ8»ƒÈ]|i²„_Ùyé Âà”Ûò±àæq•Àok Î ,ÜB@ gbð+ê8SÁ•™ËÂöR¸n|DáH÷Nf„wv÷ÜuRHŒ[J”±êpn2ß½o¸61¶¿·m¼­Z+WÈ诸ý¿ËØóÀ ‡ïþÅ狜Ëïú ^á y2ÛÜòèTÊôÈy0iЂ H  úÕ.ÖÚT +\”)¯TÚÎ릜çeÛËÉ€X2×èlçÝ”Ìy^m_JþƒW¯QÑz?ó³Ï}ŒÅÈæéúAõêû…‡ÚvßšZÊûà/îë%¶âžgïyp{ó…÷¦¿ ²Ï§CŸ¯–˜(רÐ3)}FŸ‘P:þ +Õ¦sÚ©È9ù¢^’‰³b k¥1ìø«€ËJçí”Y¡¼B)ÿŽj’ŽaÕò‹oÂ(«fô7;¿‰ÜΪ¡Ö‹Î‘ßE|ƒéBh³âxXÎi0ØõŠù_°œÃÈÛ9vþ;,g'.]G&ûßT˜ø‚›%ÿL¼Mà_úˆz8H¬Ä#–ñ0bƒK­v.§ì<Ï[™}SÖ––ŽÊÃÕó²óºÇÇ|,à»–¤"òëUŒ,Ôûzýür\ƒÓÈçR!šHlçõzú·!ßüŒ‚³ 4¦U +ýs¿ÛŸ]¸ôý“$òÄœÿ{³9ÙúÀpÝæÈʲ%7Z|ï_¹j,zç ö=ôÂíËo^1©èNNá®r·îüÒš-no´˜I+ˆšu{線ܬÁaT÷?ø“ƒwþò¡!³×kôJ²%ûP”1!1; (ÓŒŠ›ÆAù$þëšÅ°>\¹AQš|6»Ï¤°–?-ýg¹x&íâÑ“ÖËîEÚõÒ*9æ¥ç˦‘n-#vÂógjÍñˆm޼”W´ U<H«à/ž4NÅ-jÚžrßÀI1n¡Ê’4dÛ Œ‹4ŽÇ9]^ùíåÊÕåu+)Ê]¯ne1˦Y£Ïj÷Xjþ³L°Úì2(éùckðÙí^¶ ÞZ¿MIF2©±û£®möÐ"û/Ü£ÑÐr¥œ>tá…«? ø `u1MýÌSãPûôûH-D?¶5¿¶‘¹˜ú9òßòZÂÕ4­®±‚ÑÛ¥Y)ÉÖÔ•ïK³MâˆåàÅš’ ³ÎËG‹ÒVkªŽ^”,ý~À±ÏææßªŠ$E²¼ËbsÃhñN¯˜­ŽR$ú'7¸¬67/ï ø¼~JÝ÷Õþ@±¯¸øãʱ*ô6n>4ü­‘êիǪɿà¼V•"¶]zéBV +õ¤ŒûYÂD!òFxÐ+Tô'ôÛ‚s¤þ¸lÇÇK?úA¿ J?zDÚv|òÒOWÇÏAE™g¸Ÿ†-¾áìþõ®ÿFK‹5û!h›heözXXöeš ±þ ÝéË~(H÷^½°¹JaeY­K'£S˜«\N¿YEéCõéíåñ£ÀàØtïºzwcƒ3^åçÖ¨Ø?˜ëûò_ú|û`Ònd‘ÒJúO5] ÇüÐÿæw‡»·w[ãÔþú|õÛ;õj°5fŸž€odì½ôuiiqˆK'e˜ §Ãiv4:d¤Ú¼2Û~Þ½\Û†Êg¬7RFäÑ´Xu1=CÐ\|©$RU+°gq[­µŸps#´?)eи¬ØgÄRÅ™ +ý–Ò*u¡eÛçGSû9VFQ(JªãÝ›[ãýo¬{íäÚžšôúC…š‘å :ü¾’UFÛFR‘|­­¶g통=µd¤xËP­ÁéâÔœ™3¹MJwÐm‰¶„£m‰ªšÔŠÍùÅ(g±ëÕ¼3"†çp;ÌU)w¬½.RìÚÎ…ô«é—hÆÖB0HNZô 7GêN:§T7Hņ3<‰ã„7füÎbA~íC»^7ÿºÒà·;¼&Åüëe2D½²¦[å¿pxAêw@òepò,+Ψ}ó…0²å¼È=}”ù! ešU…§¹iç¢Ê•Ð,¼©þ¢ÿù¤©>ý^ÛM_ß²ñ±ÝÍH}m¿Q\±1›ÝÐåW}6·×È’_½åË;–¥¦¿t'µ§N/>¶yº+€r‰ j÷Bˆ% ?BöôÙDÎ+R?ά>•ÕŒHO^¥¶º§-2)º£l\ÌÅÔç…§Þ¿,]§®‘®ßĨ¬ao Æ¦aæ¿&gô!Ÿ7hBy]’B±Pi +¸Ý~-ÃzÄÅ: ý¼Å©Å‹.|‹^¯ÒJ©:Id.}$gÑgo%à*…2¡Ò­õõšäù~^Õª±Ú´UÁ &0GYò¼M“™®™®ªéÊŒ÷…ÙéÚ8ñÜ5H´àòvå™—Ê‘ÒAúŠ1SFi5†t£gÞ`´ŽjO fSÓ¯Ñ/¡´·Úë‹9ÿ‡% aŸÇodéÿGýVünWÀÀÒçÈÿ F@EGÉ%T8 õÑE™FBª ߣGÕZ¸ªU^øñœÑ9­­.ÄÔ« E‰µ¢'â¨Í§|&ôC„áË*T>lLö)Uëëv©Ð4VJDÀ²|v¸kV@·É¢ön¿^É#¼`b%*0£‹ûl^FÁiÉßÏû9¢:%hŒ9­Ðkæý¡Ó¯0 ~êõøõ«ÓHõ‡Œ`sz“6ª7›íÆ‹ ˆ=ë/•èýs{>ÄzàÓwz;´ZiMk4ä@*|i(î¥9¨J¥çÈ¿æuD$¢'H 5@¢Yªc7KózÍR=¯¹\Éjž£yo}žHsiªå¹4I¤Étº®£fŽD*òb€ ÷;uŶW4 ‘(¯€zJbrï†Éò$ԙ؆ɬ´r ‰ôkä3¯U[É´õyú à- - ê³ÎýŽPWÔ´½"@¿¶DÅè:6)259T[EfŠ1O5JÜEºÂ`çÁŠžÝ‰ã\N‡W×òðpϾáxû-ÿ´ã¥a0Û¶¹·A£Ð ìÜÙ9¶-½ùV…¿ý¹®©Nïš•»Ûl\®Ñ¬ÍuWuoëèßS¬êN¯lt"¯ŽR*½Ýíºµ«ïXuÆÏE»G;»î­E2òÑ/Äϰÿvá¿8ëþš4ÛþÖ LC_eñÆ{Km\zG\ÌA©óÚ„ŽÔÙßôæUÚ‚74GR3Æ"ýnÔ¯•Ú8äÇ•Ac%ü²° èŒ4ñ•×xío +bFèá´`,6Ðï +ÐÉ,t¢„^N¨JqÝCÊ·åLEN¹8åKÊ>JÆÚ[û&›nìØ{lMl¸«Ñ¦”S­>Òººyÿþüdkv,ÓÀ õãí¼Ö^å6äo?yë½Ïlá›Îh3D¼þjÿé'ÆLÄB± ÂèQ•=+ÛMÜ!®s›!öï¢á«Ø +™!X…s>¯Nµ¥†ÐÏ~Sx-fÙŸ¡ê§òSÔÈÔÈÔÆñ7‹‡ +ÑóÊ›R¶’®­àš#™ÙøÀò’¢Óæ\ +ÜzåÅÕl8µ¤¥å~‚h)ÊÜL‡~Ä;BSÜ¥¡qÿ‡ÆßÐnÆÐ +èm¶’€ž‡Çä•B|@±¼$ GažK#A¯øYHÇA»‘C-Ó³¿BbƒKWË5(>(ù›ÝG²`®.óùY¨ŒÅT·îðèè§Gbo€îóÜ™nkÈeVÈršÕ¹"IgÏÖ¼g¿ÞÀ(µì~{¼3ZÝYg÷Ô+e”A£­Z6œ½L˜•¢Ï Ÿ2ÇègW¬s÷H]ÝØÝ«7°¼ÃòÍ{önTª”2Íà hµj¶ªoßò#_q!¶Ø:žqº’Ý5ˆ“:ƒx=!o¥˜*æžݶL>q²·Çd»ˆ0‘%žÁ>Ñ›k!ÕÎ,xÂ,Ìuda. ¾/ Ž1û4yQ–„h É’&$01G©ò*£¿[8] l¢·‘[eNêdýÀÅ÷Ãyö’õaàï»S•Ú åŒ`+ê íŒ€]C.»Ò³¡tf‘ …ÕùY†~ eœ&XÚslÝÖÇ«“[Þ8t$Ïš¼6”‹+_þé®ÜDÆnNuøÛòÝ»B,)öŒ 9¾å–§ïéY±œR—W5\\1:ÞºåP¾ëðt›¡fyBw¡{ Eœ‘&ÞÁèÖ$šrM»›h£ÖMù`•Ñ_ ³œµ€®¸ØÇäMÎÏvž£bÔYtg,ÍHN‘|þ[bðao¿¿ö§w11Ôs ù"C2Œ+ñJ¸h{g“nŽÒ)ßq H©Ââ*51Èü.&:=¼â ÀÔþTøî#œxEu¶wBÇé(=­s)ß\¢·ƒ ƒ£ÍäBÝíš„þŽ4aY°ô±ˆýâ O÷žáüToBƒˆ&MѬºilo~÷wonnÝûÍ­;¿´)þ8}`ÛúöEQßmcuf‡™ÕÙ Z£^£¶ÛŒíçÞòûWtíûÚ„ñðѺþé Ô„0ú²ƒT˜ôàŠãŸÈ®8V]úˆºOvbƒÿ€™¬…ƒà‚ƒŠSš­ƒ#Ô)MÛ9%…vÂWÕ×TÍ]z1oàx²¿JUjêq„Kõ_?WÀyj*±3©Äø‘‚ByžoR•tg}¸$H÷â<5™»¢šWéºJI‹þJ¬åQ÷1ÈݰfOÔY•öé^P¨•2ƒþ ö6ŸQq§H”î vƒ!˜Ñ­:™R­´¥†›·ˆå»0ÁÅ Ú,º‘É ÷EµzÑ)!Å<';@lg÷fzz£!@ Nc¨á]0 D6U§(­í- •rÝA ÊÒ Ñ~W¿Ãð€¨˜œIoÂ%©äéZ«( Ð67T 5Jò……ö¸®K‚«Ï•5KòÐWCÉMÀÄ%‹ý‹—™çP¦`öV;Šm/ˆþ|Åyárxéõ_ì–áBë@I@÷7Õ–}¾ÜÉq׫T¹èOõ†c†J4}Ji‰xÜ«Je¸=‹Òp„{vtYjCN•œ¡̼£Êµ¢™bvæ®0ôv¹ªìJ¥½êã†ëA‹adJ•š³ñ>«`‘Lœ6QÙÑCÄ ¬×+WÆogj'kbŽÚ}JU‹~²^ÐõCëãX×—·eo+èe²å·”¶ö¬/L”z»ã¾liy!Õ_{Aב'<[†üuið/1 2ˆjD]åQ_[o) Ð[ïDI€þ–gKÂBK´5tœýÄ2¹Žx˜«ØÁ•2“} ´VÊÌŠe‹+Ùùÿ–}xËæµcóèF"‘He”JËìaçŠ$RÇ'éµ,G{…á\EâàÇþÈü+òøÓÄ#Ø‚òÅ9ò\^3 ééiM÷DŠ@">iá4ƒ@6Íò…T¡¹Ù/¹zŠ„¦d)È1Yñ"Aä°;éÁM¤ åé¨ãqa¡W¼$@MIÀ½Ø$‘ŠÝˆ{k®'«ÊÀàÿ¤ô–ÜyE èÙ…ò/†¥i9"ª&ˆ)Ä?U`i¬Añ,•1èßl*Xª\fÝÄ(9O4aé™Ê»éºk„ +Q•‘ååòJΗ%Öªš,³Vw€Ó)刵R:Q*ò7‘>Dü[a{»câëldýz­ {t 9ë«ÑîÒ:ÐOäN¢!9P +ûö5l+­î,J™î#N]¤ÔPð÷›úïG8ÎàlÁ sØ +3ñËNŠF!©çÕÛJô)”Ü{C¤$ˆý³ð€; –â@˜ ZžÅbþN{¼šŒÿ>ÑËßTr^$¬î©¼çzö | ÒåAö¹„>GC=@‚ZÐ¥œ5¹ñH?X“Øä:2÷ÖÒ9³®R ×7ב«*Ëø†ÉûÇ£:t5À—·^[‡`%Gãü#ôôψvbØHZ0¯6â=£ô(YëñqF²¿'•›»tÈ[NÊNÐñµSðVŽB§y­Þ@ö9}=bYàÒfzÏåµè$žbN6g€æÓ@'à>5›¨©Ê«Ñ±J_ÏÒËŠ¿ÑŒ¾e6oZF¿ÝZ¨ñuþzYqݯ}CÒDo×vJ/C¦ƒ˜aê,ÐB+ÒBXÒÄ£‹ÜÙú+¿€&Fp¿šâoÙ<ú–·Òo Ðý²Î_ ËŠ¾u¿Ð#¤iáœXäá~ ‘Ä”`}7V¢pD޼Å*­#-G äËM™rÖl±"ÇO¦Ã …XœŽDt´ôý€QwЕœ¼k0³Õi°v4½»|ÏH]úÆÇ÷î:¶¥–ó7øÉ*o(½þîþh—äx~~~z²¾'a^×PHXG7¿í‹Ú”÷|ªoºÝIßô†Æƒ·Öº-†:O°ŽRQþ¶5-í{V7TåפýíËRv{mÛ¦pÕdçÀÁUq¥Â?ÿÁúí¾e½Õk¶y3…‹šs”ÂV›;–»ëÛqN‹ôã1”uµ+‰û1ÃOzV‚7!t:¢2$mµ›YÖ›l_éa‚ð]nñb:ÌûmïÊD±‰y)ŸJ¡ìè ö¸r¡­h‡¦3B¼„Æy¥ì—ÙÞd’PÄÜõ°˜ž.Ni\2=OY¯«f„o [G›L +šb*ã½;ºò›;}ÑbOO¤œ¾F{VôDHkyöжj×±MµjƒY«çLºÃh7:Ú¦û§£Ù~àÈ“[ö=u¤‡¯j‰îRŠ“Êù¿â”6·âðT«!ŠRZ„î½—>"‡e ÂLø‰ïŠûc‚CÁÝAÚ"UD—¬t4âãk—­ˆW@>Mí%\„Y̸ÌR+³ô®¹œ™Q¨>¥ò¾@øJÄ;׋ /—bRÞ*Õ ÄMev¸iVïB±ö'±ú«-,0ÝíGjO¶‹1ÐȲFXd€ˆNmKs ~í ~ìVœQfÉúæšhý¢v aÑN?S±¾<7£’>`y}ƒôA®¾¾áŠGW< €¦‘(ñI²‘N¯$=Øß9 œZÚ¡æ`asį{FÈî+wc‰+°+vm½#îÚBÈã±ÀþORÜíƒ÷ýà-?¸¡BVsz%¬k]Ù~å¦8±Û+6Ï=Mž#’GÊOôC¸š×QlïŽ/ë#N+y2,¨Øn‘•ÖÌ£(,-r…úþÆ2çñ>u2#ô;po:aiw¶râ¼|ƘͲüu.”#ª4 #ÎÁ˜e/"¡ a¦Ú®ºì¾DøZj—×eoé*‹ &XÜÛÿ…Þekºê¹øp_OhüS½ÞRÁ솮ÐÄꋟ½ö•E9ï_=äHtT7tÕÛ¶=Ð/Jþ&’z’˜ÃR׋R‡—\š¬¹Šd¯±IÚéQC%O "VCSƒÄÕ l5zÿ4‘‡=l;¯Škì¡Þ²¸ ‚‘‰²h¸%rã&j¡¢¸6äoÊc)üfú›"î…­®·¾ýЕ@y`ííýþExõ׸ <Ì)¼ŠP„õ/`]¹(Ym £<¬MkȰ‚ ³d MF)ò*{ˆ^»ê"$ž„ŠTUlNò-Ýœô¥‚= §õÄÀ$N;|O¨¾œ#©ã²i©É¤kbaËÑdùŸ¸…œôEX€BdŸx +ýjó¾ïß¼û;75e÷ýë>tÌ<álß9„†ߙÛ9TØÙå#ÿó¦Þ××yÇÌÍèXDÇC½‡·dÓoΦ7ôŽÍ¥…ЫAñô8^)Œ\›¿I%éšJÒ5UÙ_«$|T tVs ‰$1¼·#ÀÄ;%aV55úYý);.:{¹¡,:• ÉåDºT¹I, Ÿ›…¡ +ºbK4](—[ AÒò«¨hîeÜXÞ"’œ_¥¶~qCuWG>T¡&³ÓÀFû†ã[>3^ý„95–÷µ£˜ÚupyûšŒƒ|ûSÏéáéà|{yéóv9Œ¨išûïyòÖwOµQÿêèDëÔ!Ñ©ïâ9I±Â¶§‘ ë%Hõ’ú2´z s=@k¨Øt„xU^+†õf_¯¹ŸÜ,™8SÞ;€á;Ã7ª„Å;m’½¬y5[Å É©ïRr¥Bau‡ÌöúÆæàå–ZÕÑœuký!·†¡Iz‹ÅÃ+•J…©®?sñWÚꑦ®ˆžV¨TJa2|©DýaÒKrØZ5‰¾\ßPß}OöÉ*¶}(m'ÂVÚÓ„ÆË¶ámFä+y¯¸·ï*§'m-‚r.X­ó)òC¼½U¼š<º®$ ŒúËižÔPšºßeTïò+ùMüž·ýöù-o‰Êº°yHÚ:4 6*¶U0”|U¦îw¯zW xŽ÷ñ´Ž–¶ýï*Ê,o•ÕxaãÔ×ÿ+{‡¨_¦6¬_QoQ1°7(–Ó•tFò+Wç#Ñ‘ÛGB…樥}4«’+M½‰š|Ô\Y=šºÒ«Ýòëô9 Á¦ªpºÚˆµµ6nî­ÕÌœFoá`µ¯Ån1ë]‘Æj_ ¦u!JS¶K¶›ø"ñgqíÝ2òbšX0ï ö¯Í„¢ÆÛï…¿Yo×ïê˜î0êõÆŽifànbàö‚·tk÷²õ;»ûÞY9²idÏ]7R72žz!¼³8þV÷À½ú’½ðäüJÑ£VNArxeqõåýbÆeÈŠ³‘¯Â"9¼T!Ÿ¾½p«·$ˆéC’áF|#H2øY;S/èiÝão èyv}I°”à*€RòÇKç"c¼ÈG*'¯:ãH]./óuåk±þ­ NÙ.Ša5Þj\µñÜ®7ÀÞ§ƒöºÎhõòzGЭ aáU ±X)äë«H|åíö˜Áb­_dÕÈ¡U5oÀNªr¡H*ð^­Ö—K•3’ ÝÑ|Ñåó\E;š¯¯[Í›W„år[!ܹ{xÉ4èb1V%ý‘ÚÅ|Ÿh&Àþ3JðÁ¸äâ’¯ˆK¾".Eö¸äWã¸hÕÆKÁ‚[[²KG¥³à8SÒläÙ3x êº$ {­y«¶$X lCe)(æàÎæ–ìt¸¢Ôs ©Q»œ/ZgížÊ»ïeöér>ð&LI ´3=Öˤ)eKË."Ö×)˜`Œ˜e·SÄQ¿G::’S)¼}ÐNÉúÑN N6l§Âƒ¥‰Bª˜ªÂ@m¿«`)É{¤€ õ4(s!dÎHU´³Ò\.Ÿé¥.&KÂDAìE+ˆÝÈ-%u$Eg(›ýÒ¾<Žâηéž{¦{Žžžû¾4£™Ñ1#®ݣ˲,’lÉ’ï£mY¶Á€Á˜@H°ñ „@xØ à[ aC¾u`wƒÉB»›%›|Ù}ì§ì{,! Ñ«ªž‘F²MÌ>]­î©®®®ú׿~ÿ³`M§-VxDßk˜w¾Ø”_ìd²Î›ÛÕåi…v/¤îŒ$6ëïEç?—«|¤¤[¯=äųR_é”×0¢•*;Ýì5 Z'Á¨Qq"€? ­“„Ÿø&²NÂëïŠnƶ!ÝE¼™ÛèEŽˆrI™Œ4ç˜ÈL}2g€†tŸ\4¤_¼#ƒTW Qƒ¢ÉÈŒPŸMæüd;Gå‘íÙyàT–æ¸þ^~ÖÁÉçº^–_gOZ-ŸŸúòýU â·%ÿ –Žg +ý¢ûÆD– !댺EmßX2²[–kÎÕ×»r‰‘ÒDf’9œ¨þ¾u%Òò¥QQ-| ªðçýT +]g«ÁrLŽP’¹äv$èF]¡¥ëMHÒ ´„_MÌ]a ¿Zºœ9¯Æ'$oËXQ#Ÿqä›K:œ ¥ZGèê]Ž¿¨FÞ*:Í¿§:ç5ükínF£(ôzÉ`°V­V_k8p¼šŸ»:¿‘Ž~óuì-4Rö·Â‘»#•p-7´08dÀW-ÉÇ’-¶mìà·)fîí¼#·?×´ŒÍlËuÂ>.9ßÐ7ocǯRt #9’¸¾—¨ö‹#iAß«˜æ«Þ66#lË u¢¡êk€õ_ +àE%ªö3… ›ë±Ò_}ê\÷„*þy+€t\BÉi©éãÚy;¿Î-jø£%£)eÝÁ«P‡ŒqÿYÚÀß…–³Gýç=®1i¯s.—b«Hý_àˆô âˆçDŽHEŽH7ƒ™¿;‹èÉÙÔáŽÊš££;4¤u4Ô¶T`ÎüÖA¸î˜6õåz›r¹HÄU›¨%jû1ëŒ?',ÀX€Š×zÈ9 !â”szªÊ!,Ô…Õ2µ€Ôúû1¿uFðçŒÄŒE$¸Àæ­{_~ô¯ƒ!ã›K‡˜u^ƒã. 1Ñj7!®Ë ÍÇKÈf©±kXë¾h¯ÍÑKÍ}`C_3ò{óÚ,g¦W¡T„RYFŒ‘Þ1È #þéQ¾uœ³€äÀñH"†ÿœE)ä +"²³ ÷AË}V®/ï +*)s—o§Îݦ‚Hön‰ÂÑš•nÐø¿Ù‚›Ù|¤Ó/³%Þ÷©š³Ç¤:»Ñdg龓HmU4¤™â¹DÓÁv©Á í®òymÖU˶Ù@xŠbñìÿí_ßêZEÜPª NÎý‰º ôb;^!êœ;¨Úàn-4}…kñxôÇð€¸ð€8ð€Úð“x]=^_‡×—ã Qœqñ>¦  ‡Ç¬t3ã50ÚÂex̪ Ú^Ö6w¡rÐu-Ãô3“Ì팄Éê¸SÕåïª{0ŠGágQ(A3z.·5z J´ƒ«¦^„S~: +DÙÑK™ÌåÈh%8ˆ,ö‹¡ýâÌ}hÍÚ›»´Œ“’¨Äçdу–Gq=Dˆ¦¢ÅÕñ1`Ì~ +B#ëá“Î]'hi1—”–8âÏÛ`ô¦šy_üù©»$TþRm +9œefù*A¼Hª-a‡3ÎòŸ‚9pÍοÄ„\ÆÖ©“ÿDàïr½ÛÂÛY)ù„Ô ýü9è—/‘iÄrùì¾â¹FkÊ•R°”«å³¹œø-t'"Á›å‹g„LXñC"KY±r õÜ8¢ÔX7îÄ ?Ã4>œµký'\.«ñ¨+†'bÙ‹)¬'BS5)ö“û +^—Ð÷ÈÉ0^¬ÔÀåwùOàæ˜ñ¨€Å˜Øïc¤Š÷‡¬'„Д¢æ!ÕQp¾,ø—/ÄÛz®é[¾ º–º–Y«ÃmñÖE{RÎPкRí¬ +øÊ2µNS¿©±m4m¹{E¨> «ŒF3>â×*•Rð‡¹h¦,Ö^Îy­e6µÎÈzmzƒƒ·§úâ‡Uœ‹ }AËúЧÌX[Qˆu÷Oã_ËjÆSvÏÃÚ)ò‘hè1é~è ¿çÛ³œÝxJ°k= Ú©(ùˆ•†@ÁÒvÝ?ÿ^%ÊZ|9¤Ö&x ’{FêïþZ¤g[“! +˜”4JR©"”qwöötGšJ© ¸jµN­àÝ'èß×㣕,«Ðè4JƒN!q›Æ'Æ×Ú½rz0åÀ[ÝB³˜KŠ1gäæä+øX.Ëñ#Y†uî2ËÉÐKÜT壪’O‹QEâ@ëQ!.ô’ÀM©*T¥ÃšÎ,xÛ]ŸK-Ê[Ìn–ÓÒñ‰†–µi‹«y}¦bEHªµ †¾7Ôò£rT|]1â7*54d6Ç+âýÛ:öõGïÝÊÁ‚o+±Û¢ÏÕ…[*™J·B!Óx"5®'‚Ý;Û:Àb{¤½Í[íÓÌb6–qJ _ZlfJN;Ñ1µ¬,Ô1–b;zL¡jäü>âGøË´ Ka«‘®C§Ã4Ü4>”eËÙÉÄnÏ)îTÙ¤mŸfaäÑIé•—DçCBvRHì.óœÊ8ð+–D`·Ô¤0/sWóAM-ø­à/š¤#&ˆ(nPiÔÊ´Æj0‚Á^¦³t™©¢»ÒTa”SõNA¨UÖ2{-o³óù z ü¼ÝƧjV$-2¹LmÀH¬ ÿ„Ø ælÖ‹­Å~+j ð6,„éðX,}ƒ+"àÛom„÷I±¾Wð5˜[‰¯Î†ü’ãéÉÐÀñ¬q¹‘0æŽjcR2–.•Ê•=ššr­Á×ͺp þ)s®±LdtfJ¤gÞI‚€ß}ÿ¶à¾Ç|ðs¤,¬HKŽ àÆãfdÀ#TªÜQ=åWè)©ìQ>” W“%Ô´à) a^¤ç=[¿Ø_#u…»ø•^é®AÓ…3b³ZÞ£Ó¸›V'µ:…:àz(Ö[móvMöä¶4;¢A›ËkáÌž¦5U¶¸ñ‚Rùj]5lU×UÛ"Vu,¿ÇË÷´Eê¼ZÉ¿š9}„å*-j•ÂÄèx‚&ŒZO¨µÚÄ7W¨Ù¡Ž[¼õ&.‰çª¬4Å?‘¨aíAC¢š±ûò;@zµ9¯KË»àlž´LPŸ!/‚¬8Âþ3Ìè| rmµœ33{(ȹ~± û– ‚9‹>”ky öþ +3EM‰yÿcJk1BD3@œZJíIÄÜžXÂMü¦H…OËh‚.–9á2§fw ~D~8N¶ñ›”î k`!§µa€çšÓÍS®Ó驆T¸rOxŸijs©…;þAü@Ò15kN ÍSi×iañ KlØ%±%&Ó¥çðE*W4_“‚ÕîNºZC´Ö¢7ZµÒʤ§%L1"36{½¦Ê±Š®U¼µ*çë–U:¯ÍuÆËó'®uNð*ðÕR«‰Ûf¥¯qE­Ø[ÄAÐ[ÑBœº…sÒ†)ƒÒ`6ÍKÁ)ŸÉµ§ØA¢MêàQ×h‚š—„’%ä/è…·ïM„¬¯šªõv†Š`öºÍ•ãUõ+*¸ÒW삯tüŠWB/賬6O‚·Ñƒõ¦'Æ€9Àú*W˜Oj§¼Sû—ä‰ÑšO¸@y¨ý×i¨MO†û÷æú÷ty‚½7,ëÞÝå@ëoŒ•5† ð¸lùIëžåÁÞ]­“ÑpÏ®®PgÒa«îŒ–uTÛÇ`küÄã µ¬Û ÊÈ ì~#hÇ€£/y¦‰¸SBY÷07T›Ž‚S‹ùÐ8pžèKBiQªêtñePéÈUçÇBZ°õE“*ñ¸;3Öh‰–…LE¤4ã±TM4dGj-_W;+}þ\y¨#ä«r2ä'Sý¹ÞnÈÏR0žž+È Lp†¨"ïßÙæoKº"Õ¯–ǜխ"íáo#DÜò°x,˜B•Eq)8åÑ{Œû졸$¦©R—„…ϯà +*œ˜¨ +;J¦ÔY-à¤\éÜâË^½ÆÍIy‡å5RЦ”|Èžv1Åu:C&™DFk`Üm ñC|¼EFŒKùk,¯<¢*ó4¾*kÇTeGUñû +¢"uÌœ¦üSŠ£¯±ÿÈ,wŒÚ_ý?º8ü?ë¯(;*ˆ©œü©cº—UEHÀ/XŠ;Vc1%½º½1½d±Æ¾1'Ág|™á¤«>æTÑ$%•(ì¡”¿¼©¬©+v¥*UA‹’ŸP4ç‹;+ìèΔ‘"-å¼R«U™Œj½ŠbtZOÐæ6™BÙd°!ÂÉUjø„UQjF¶8¼<çGy¬¼ ¿^¤žÄ*Eß›Uº ºzƒLÚØhÈ@–•R{âÒÚcݧއíYHÊ3†Bï‹qøÅìsÚ¥÷•fçÁÁ{èyÑ¿D ¤™k*ÈC`(¥¤äiR„y«Û('vãÄfRn€gù”„”²ƒÉÆJ‰› âF\ʘF³†&Ä^\ÆZ)€J­&¯‘A'|™R†oV©òΟý—†QÊÀ®[¯RáOŠ'£ó£ÊÂäõy‡º°vk@z4µ"k¼ú%@Ù‡.‡e~a¹<ŠÇ-ÈX­¥&)‚!ÁGYj¶-àS0ÉaO Ìgà“âš1yxL´w^¦f­΢$¥P«”™Dªfåÿ[šK+åEÔ‰ ÿ?Ô;¨-YÑC­Ð–(øHnÓâÖhakn§ÈB{6ýÙö¤ä:³Çl÷j$Š3«‘³*(é7¨ï*µ2R¦ÖÉ Õ"°=/ûú¦*1*fœš:GËI‹ö‹Ë¢Kæ99™U‰}qyAk!º‚âE×Ïü‹’ËOÏüé»öP_]\÷T÷¦%uoºFÝ=ÑtmY$]ÉŸ§ü5‘pM-¨ûFàŠ¹ÿÆß§Æ@?†1?²ÑR~kÓ(þç0\ëåÏ¢syþV)¨ ó­‹aþªîwbÓIY\fôÚ¬^£L#7‡œÎ0/—óa§3d–ã7½•È—U:E«XÕgiwĪTZ#nw¹Y©4—Þ™›Á_”¬G-¬ñGlÂ\˜‘H_P2e ½Û1ÐXæR ]€³V˜±Ä¯—â²úZ>!ÕÂAfhœ¥õ>›Õ£—ÊåœÏn ˜ärSÀf÷qr< c¦Ið‡˜S1 +Š‚óç.{W*ù Ý2+æhó+sŸà'ß_¥˜ Æ0M¼¨pxͽ”PÄåÌe¤ø‡Í…ײZDàòUp»´­ÀÞt…`o†\°7—ž“.WödÔå)‡ÇòÙ[¼ºÖ¢RYÊO<Z¹û «°ØFf3†Isåd/ùô#–gÉ^Ô¸B­y²ÚojˆÁß]ñX;ø…k#žÿwRAý /ª•¡0d¢‡ÿðȘeÙ^qé³µÁn4»uš•¨õ£Ù¥“PPkáÌ׫éƒj­œ”ª jX¿s®š8+ùé—¨ÿ5R êç]¬„Ä/QêmàY,I=Ó´ÐpuïG [ÂúÛñsDŒhÄ´˜KÌX UÎH0”ëÎ2‰rF€9.æõ1boÀì!DLÇæÇtà J¦–Sø§A‡3pЬenàú6PïeBJîkéƒfÞŒ„ 'ļ6Rå_ã6láa§%ÊiÜvúZÏ“zýç½N§' פš +x½¿WÎZçææþ›µHÐä~L4y¹…ø ê†Ò™n t2`¦_FdHY³èÎôË•‹fzQ~Xr…3w¶­ÓñZÚ¤0¸M¼Û Çó÷,º–w§:þãâùŠÅׯ×`sjú&*N¸ç²Õœº“÷O㻲1_^‹äWñ«°Žû?p†œ‡~ÇŽünùò©êÎØ”bà{¬ñwÂ]=~̼+iÁ ]EfÐîFÐMîÈ‹äÌÛï±éô…äzçþP+{èwÂòð»¤bÔ ªëùHƒC’¹)­mˆ° ÜFÌ\Llbª)È($ …IAA}•”>¤i¡‘i:%ÅJ NßÄšFô…;R~i¨'×Tùx…ÆU;¸·×UŸª´°[@gÖPÄ0“h ·Tz8E|ï÷¼qúþMíeœ´êлOvݸ&¥€Â .‘ªÒ_YöJ~öÛ9¥³vøöïþò§?z¬wö{åUem•^NžÌ𕵙ÀgŸ“xÛ×ï>0R¥÷¥ý¡´a݉†\YdòÆ©á­+áÒh`¶Ô|õšÁpÇèV¡rÍã:«‡÷ßyäö=ÁÉé»»Y=+ÕšXN«R š¡§ûõê{yâá{6×õ?øãײmáæ«œÝËYo:H®€‘Ÿ¥R^l Û€mÄ~ŒèvCgÇØ86ßšUwLäºVŽ6x< jÿñ™†D×+ø[Ø Æâ—³ÎĆŸ¬ïìä™a|xSðc»_†}ܼ‰ÿ$²IñqÍÆ  ýÀXÊæÒ(Å4Ó~ñBvq¡;ˆôâ€H +É–"~"Àz±a\Ao²?`ÝÍÍØÇBó¦ÿ‰ÙT£øX€à‘0…&øD(¢“!ްCr5*%œ®(ï\™¶XÜG §b©Þ—ýê?½çïŽÖp¦ªÁ[žÞÙ~ÃpŽ3 ÀÓ4q[ëßä?}ºËÞqàügßyÇO…×Ýá q2I&w†¤Y·ÅáV$Õ|Øå‹XTä­Äƒx賿ÅUM6Ýù“Ë[÷?òWWw90ÑîgôŒTójF­4è5^øý×·üË›çô¿Ÿ}vè…ûÖ®xò9Zd•^KÌ^ SGË×ço!»_ÄænsþÀ§ÅvÂ'ï ú©´v†°zqÅÇð˜SàÚoš©Ç½ j ¾˜‹OiÖ~SÒ/õ¸à…“yýzüÔýD¿¿um2¹&ë ´Ž$«‡²¾C:WÔbޏt:°Lò§.—ìªXÝìs7¬¬ªZÓäóÔ¯¬±Æ=z½'f±'¥Ù¹?´$„¹ETÚ¤œ&,g1VVŸ–³¶µf2³—Q>NˆTYü䜀>‚â]•RšUÅ5þ‚f F—‰s•‚$­”ãeËë`šQ³J"R%˜LÇ•µƒgͬŠþ>ØÄZpUÞèâèß&l¿ˆ€9bû…*?øÆÒÓÄ]ç”.WÚ:§³òZ–#éØ:&=צGQ†0¨[snQš°sàŽºE)ï¡áMgpJõäà¶…œa…àEðVKWÑUÅŒŽR”ªï¥ÐÊgÓj/r­7v®ÉWôT5mêN(i¥LBR2¶~ÍÞ–Uw­[Úö ý'Q!Ó*¨œÎª“KYot™õòÆ—·»ƒÙ˜ÅtÑŒÓpŒšñyø`ïdGõ†í7v|_.æËÈçÉ›AÿŒ`ßû§Šèʪ—¯ +-o -_j!a.Çí1¾QßÈ×Nã|Vѳ*6çñP=ëøiÜ|ššÝÉã3iFtbFªÑ-E—F}vÝ݃nW «<±9Us9šéN|Çã‘‚÷øµâQÂËyKí¼²?’¼¹~ïó“íûÖÔª¤ %~eõŠÉö–mžèàͽ·¨´r %Ó*÷´lï +Z’Ë“õº+דJ‰ÌX¿jWfäÞ‘rWÓÚºÌîÁø¡û¶5pN§Rmtpz³–v\ž¦ÕU©¡ŒGÊXŒz3C{3épWÊé {)ÆÊi9Vcð{M±•7t4n_Q«"¨Ê»Á¬÷Ì)$•’V†Å°q„ábnfš Ï%¬|š .rƽ6f Nã¦ǫ́b\2Š’5èÒˆ¡gÕE± K^ +EùB1u=ÔúÌe’óÔXX ã‡{q·¤R¯{¦]äÝzéì´R§¦Î’㤠îr§·Â¡ySËå·ùrü§ÿ{RܨB%}˜Éà´Ù²Y±L+ÿü~/éÿðºgôÃ-Ó¸±¸,tJÑ&,¯ +†YÞ°s‚~˜‚å–„Òô¹ ¸rQ¸¾tIhQ1$ëgÉÝß™Zqëh&Àêãý7?³;ØÛge8­’+éeUcw¯Ž––eC‰ÇÖ_âkGZü½‹;»>Û<ÞäÀ¿µêñ›ºBÝÂמ|þ›÷mmkt¬Ý¢³02 £é;üì:­ƒ×¦7ß7Þ¸¾Å«69u‡_ØQ^±|³è9¤ ÚqbmżŽÛÎÒ´‰&ºÏb&ŠÆÎZF”ã…©ÈPŽr9RøÙ9}Xº‹èMƒ`8 +;ñ")9¯ 5¼×ê08ÿÇì (tÄG£’&ßÓÙ-Íg—!ÛjôjI·BoÓý´Îe`Dß¡Ü`Obíâ>ßÃb„n K˜³ +‡Öë0€oEê¢ ,ðY¢-«RTÕS‘YópëìüàŠ*QQ>€¼Å€-(hŽÌ +æaªu¶d`ÓK–ûš9¯ò-nÜ(¤‡3¥Rpë†bt|Š|§qï3;6>1ÕîÛÕÑ0šuWl~dˆoŒÆÜÍcõ{zB?Û·cç>kzMãæÝoûÖöÌxÆyÏWo¿ï]uçHyxà¦þÆ-«{<ÎöåëR­àÇv5¥Ö¯Ì9½Ý«Ö+'6¬ +¶6¦U‡gŸŒõd›Ü®Æ–®èÄŽ(·%FNƒ•'µ`›Ñ °WÀCÞëÁ ¸Ìæ=i +N€(\jŒ§¥¥\¡à„èߓ̓E +Y ÿè:)è_:±”þ%KYBÍâ€ö%–.rÚP1xðù=áåmz¢2y¨i09qÿH9aiî]Øu|$X-<³ïæom½èiÈ65ØÌuk[zÀßü«'îßÒ `ôz»Ú3æí9ôÌ:­S×m¹`õc:FžúõþÃ/ +ñDÿæêú‰V?Ò\å%½±¶#LØŽ0¡IÄ„¦«bBSš¾&$ߨ¾{èŽç6…»¾{èðs›Ã/ñÛº·5Ûùtt:¡€ w½1áß:5™©ÛñÐPáfì `*§äâp[ÕôÙ²uL²C¦t €Ë`Éó(J'AÇ”¾ +n,Ù°ºït6>FN5›ÔµRR¡Uá|÷H3±±qcO¥šRÊ)—Ù—þêpÔܶd†¨¨g)dÌL,ïðõ¸Bn¸Ã”ÅÍù¼æPÐR³yG.âØV€>*¢Å +¢;«^6X– ,[È’°¦ïh±ž­g¹B‹]ƒÑ9—‹êZÇ]7ZDww¥D´8èŠÎ ¨‚Å ýµÐbê5í~góÔPVF“µ<98ÙÖ²©Í¼¹ï è/)­ÔȧT¬HÖMôV*`Âl’’jêVîk¹w-€Š#õ­“ËËïzpkÑáÐj v£Ïê 8=M«ªRà @Ñ“® çRNŠZ+Çšt*Ïg]ŠÒê¸À +øo¤8¶€M¤ˆ ¢Â½6hÁ™/ø¬…UWЍ žÄ’`a¬úÒ8‘ü7ƒî˜LïF9'gßT‘ Æèá3ƒ«ÜéN8µÇ.ÿ-<߀ÿp Nt˜  ¯&{¥*äC*ûüÈõ +^E±:üY"€0¢°V‚Ï›P<#xêÀâpQ@÷])w”ÊkW:<ô5AãɎç…ae’ÆR™Rª(ëÜžkÝ3 ܺºq(€@c#”Ò º¼ÝÛ•˜|f2}fÛ““u:3¯V³nglv˜-Ûº›ÖgœªÅ ‘"’_´°¬ ¯ÌXå°×Å>êž{-kÒ}ãÝxä† ¾%ƒ·fðê îËà™i¢5kPÙlª[’øŽ$Þ“Äë’x$‰nÕza†»@§C‡iqcàÿ¸ªÁ*\5=÷§¬œ¨êæ ˜ж+hdôÝHdtôäùŒ°(úÚh,ɉº9Ü®!iÛu@Rúz é«`Á¸u]£ŸÑÅú<³Ûß›j€Ð†K•re ÕW5z÷ª0iiî[]±ýÁáÀ ¦¥Ýí”fÆ2Ù±&;þíUOܼ”juJµV¯A°”Õô~®KŒ×­oñAXzÇ ÛË›A§msòE´ÃÅ"Tj¨tëYÌHé *寊JyB¥ü¢ÒyE=ù"¥1JkòY<– ñgÒë$ý¯k@Ò/€)‰­Ôò2£5X'þ´ØÒ :`ñÞŒ>€{×%§ W’Å+ÕÅ+ÕÅ+h‹zvaËú.´y% º.kØØ÷6 ?%×¢2µ0k©ÑŽ÷Õ¢ áµ/­6÷îYH¶ d<¿»f!÷k… ܯ¡d©- qY¬£%*m)6º¥Øè–B£[àäa0°^‘l¤ÊDo_ÑKö8\ºå&Bí  à|À"…/¸O#e.G@¾ýËù¢ÛÊ•Hþ冩gvnúæîºPÏîö†uÉoDH> +“6wNöÿÙ^;˜&–oØ,”yÚ·¶eÖ7:¿z×á;ñÞ•wŽÄÊVÜÔWÀòëRm†–ß©[ÙåBX~}Y[ Ñ|CÚY}hö©XOs£ÛÙ„ÐüNÀ›Vîý Bóm¢¦m1šo=ç‡ìð‚¬¼, ð€´¬Ò—0ïXywºE%¸²€›#ûÎ}Up_ê^ØÐ·ò>cH | û–¸Að¡LQ–¨˜¸o(J$  +w<½wà¶uÙ û¢§e<Ó¼®Þf"n »µså_ŠøÞ`pàömŒNÛ}ûÿZçLÔo½ÅêGoìbÕמìø>ïßTݰ¡Õ¯äpUß +ææûK~ Bø5ákÄý}4WÝßGSÜßGó¥ö÷!ßOï}~r×·…dÝžç÷Àã ¡Î um›[=ÁÎ õðHðw¼õ`oó]?ºÿŽ·¾Ñ›½ëÍãûÕí8¹Ãõ;N”0sÂß—1wa¿¨õÕŸu#­oóY›¸—Æìëí¡$UPéÛ|N°vш¼~ oMgàï+ .Þä4Ê~ÃU)QÈ>UêMVïd¥ðaü¡¶›X«’<*•‹n( }ëNH*±l²ˆÓ'4¾_)j|«/Tqtl T÷&OÓâ†bNŒ««{«³rA¼*{“g +{ÔU2^\©ì­ùbe/)SËfïÕÕ4¥Ð©ßiª2˜Ê[cU+39 s¬KdljÙDrõm+–æýk¿ƒ¿¯c;X‹NNÌht˜Mê·Û&GzÝžú(oõX`vpµU3»1Ú³)]½iß‘5OÁ˜’a@o~„Ûï,âöÚ+p{6Ëû§´ÿbî-ܧ"~1bÏš ýS×àúŠû´Hž‹±:þÿÕýuÂ_LÔŒuUhÁ²¯R*ËZF놮¶í{¡`'Q¨eBõšŒG_Ö¯j/‡I`‡25 C—;’½å ã->¼,wãŠrÆd¡ò—À0K¼%TÖ3Ó³ÚC-‰ö°«&Ìÿ?â¾LŽêZ³nUW‡ªê +]sŽÓqºgz¦'ôDMÐH#4ÊY ÑH‰ ‚„ˆ6Ù6ؘ·ï3om“‘,$™!0cc㇟±‡}ûk#ã÷ûÁòbÔÚ{«ªgzF±ëÝ• «êÖ½¥ªsϽç¿çœ{ŽÝo'Y›È™x=çv=;rK{’AÆ»WÀQ>õ)q£*jFÑêf|Ü$8u4B’Xz<\æÌGæ„*éãyÊ·…’³Î¤ -¯Ïëe"õ̉J]Uk­.ì5ïûs£u7.Áõ Ü?kŒ3Ú[Ym€ËC­kÁÕFOÂíO¹õÿ ‡“ºú ¼z/ØJ>ÿ;5g•wHÞe58­_D³”¼µër oÃGO¾0û†S&¬ uËqž‘ÿçÓ˜½UÆìÅIÀ—™†Žw!S4l¶ÖñÓYàºÔ€¯x;Þ­HMHë,>š™ïÏ€Ôç«wјd¢Ö¾Ý÷gÆ{’z)ó4e‘–ÑÆîõeÏm7Ù£o1ÚíàRâe£«îÒ[ì.Ãê»6Àø²W§iÁHÑ‚]ä-¬F0 ÞâÂäú•IX=à)§C+)D]õ€ ±ðbÈ;Ný‰Øg£”‹YÏ Å¡±¦ç5–EŒi:žJ‰¤ÇSž'ÊU¦|A²"ÏUõZRMÇ+Ju1x¢"Nå¿NK¥Íy+{ó€õ¶Ü¦;Wîk ðB¢ÿ‚;×¹»Z¼WSZÊ—íŽ/Ø9/€›š{†"Ë÷/Ž<²a««½”7¹›åó rV°dþ ëš}+/¾ihÞ×]<–ÑÐo³"÷KŠ¡Z7ìëeÌ•^¼gtõV`f7ݸÈï/-@|”>õ‰”C´Qw)ˆº!jθG¬›émg@ÔèDÔèæ™u~6¢fQpê¥*Ö°ù" ¾}ò„ xü.F Iâ7§ÍÂ|ú8-9öð4qA8D¶¤á†}yìK„¨‡±Ke oÇ% /^§á->ƒ› 0ïF©™¨bw{!U“‰7lóÞP:WŠv5¯±VÛ–x£b› ç½1Ý·³£ƒC×+Küzˆ¨ôïMÛîݸñË3žòº.mÉÕ·®[yò„5?V*ÃAð“õ›sC‹1³°´q™×Ö¼²»{i¶ñöž »¶EC}ëÛR£e­¥<ÜPÜ4”u¯.&†ºKNg[ÿBð§ÎS(ïqçlÉUU>\Ìfì®æ|Þé-F-ÎigÜbHÉù’y¬_ŽrØW¥âQŒç±N)™jÌd²·~œê> jRöš¹³Fú× ë¦Z?®»W¤êû %—ï¢úìêß:„(V›ÏFz.øÊæø‚Ž«Vã* EêÂ-#™á‹†B¸¹Ø=ZqíX$³þ®õý;ÇÚBÂÃî–Ñ\~$oÛ¸ÅÝÞ–Ç[:o¾þÒå†çiŠ3èMvV¥ôÍ믧‡C!µxOÿÀuÒ(8M¾õ[ÁĨд$\߬nƒúy ¼Û…rÁj8”–×à½N8E0s4ùMBE ­UšOwCawê¶~Uö…šø™Å}ØñT +â)5ñšñs+œ¿*§ÛsAMK÷-Iò§N¨ç'ùSPò'þ$¿¬§«ˆÜè³X=¢¦ÚIóhW£N ®VÜ _ÚÍЛª“xõA° +Ä}¾×jI_#9§Õ貚|#-È¢ðä^|øäH e~²^æ— ÌçãRÖÇ¢,ó[%™Ÿêø­ßO¦6[?þ,™Ÿj•e¾¿ã·© iýø¼eþ™lº’ÐWôsÉÒE÷mh[קцeúþ¶U]­kºƒîî‰O6@bߊҸè¤x¹ÕÕöÞèÚ»ÖeÀ’ñW¥Y£QÇv#gÖkŒPœåÓý›JE˜½`Š}‡AWýŽ'F/–ö +*cIýÕÒü–€RŸ8Š´qPêcecŠï¦Rdøc(ñׄÂiÒ^Lß…ÒžÃK’þøŒ48ýÙìMÓc=¹öÎõC/.ú8>Ò³í® ¡¾æ0£&dÆ[˜×°`ÇîuÇK…ùYëön¦»¾æëÞÜ“Y4¯ÝaméšßPÚ4÷®.Œß˜q¶õ.ïuŽŒ”Ýé„%¼±j +´ä2vK:Wò/UdU‡Âïã²ö²¹á kGÜÎFºßõû5Åã Öãšzfçõ…ÓýÝïJ&ÜâñJÄÆz¼&ÀÏßx«šk¼íàc}Þ½16X +ó:\MÃewópvÑ%`ÌwÅ×íñ%×ܱaèâ%Í~ö!¤WqAÖ$¦‡‹ý;ñ–î[¯Û3žÓ±¼Þæ2Ú8È%úÖ ×ö!›Z²»ð€4vÞÝ%w¨mA49Øè Ô|úH‚…ØÌ;&< Ùă§ŸÀ(û$ žàPV"ê09®Èï©wdÿÝ=ZáÆçõDV8›~Çtº[_ç¾ç®¹úØeÅö}Ïˆ/Ü3´üŠ!_lt÷ð²+†}ø{>zlÝøÃ'þåÞ‡Ö?râ~æ®W”F¾øÜ.åXóë#-˜k”Ç©Ê:‹@3´s1¹mñxUÊ%‚lu ]– +¥}ÿw>F§ê¿›&·Å ¹óÁõ@akÞ|²ØU5ÝΪÝεOÒB±EVï¤$õÎRïD«—Ô«wæÚcŸ”!%OJQòŒIJžèز^És&ã¬xN}È:[¬9õ}²ü‚fÁ WM­ëÒüfWë„Öñko_“2Ï»á¢Wñ42М¢NûÍF·Å¢Ôê/_±1‘iõû#>­à2±åCA{aõ•}Wßup×›:ƒ–Ø ©Tg¥ÍŸ¦íYYg¥¥%+í_ÖfÌ /¶<_+--[iÿ"©}Æ•–žfÜ´ægoË®Gwu]¼¬EÐ’„ž¥ó£;úk}{kVÚÓ}†õŠæG,,ÛÙµê‹3}`û¢[¶–Œn/«7ºÍ‡g®?§ñ——7#>̇6Gê-Îà :ÒKöÌk¿`Q “¹%²?ß'*i”ðßÄ þÓ×ðßߘ% -$´‚ëSKÏ +ÈVZºLWêjŸ žžñùt¯>•ÑðŠÖ(Ykµ'O{õ½B})w ëa_EäÕ· +<D=Õ·jIOÍ»,¢ÇéðµzìØ÷kþæÉa…˶“,Ä—Õt?SÓ807­ûi(ëRA n‘u6k +Jmÿ"AÁEÈV;›Ÿ>7TÏh€$¿Îí Ó¬FE ?*Ú³eÞ9|ü7dE^~à›~sg o±ÐŒè4ò6^kqZý=Û‡:Ö¶{T’£çóê ’Íö«8@aãàZAñôÃÕÄ ˜ ‹ØéV‡‚–*(¨€P\%ØÑKÏ€‚Ð=ˆ‚Ð͈O›jÊàrØØ¿ÿ”áÑ–&d@Ô‰N1F&DøîŠO|÷ïcr>â?“pfA>[K¥Ý“’Uþ£†ò‡HvÁ®ÒÖÌîa)ç½d†ÿ¨â/( ù1dÆÑ=QÑœ©SÿúháO=vÿm[ÛhÞdpÙM^-ùh=¸šw"­[K>Zßüíîýß‘}´Ú6ôg|´ %D,h‰¶9áùCµðüIò+„ì¥IPxe±0¢(rFdÎ4ZÑÙ3x-ðå ¿^ÅÜêU²_x•PrðøÚmDaðdYGya‡”1´/ëPNSj!…cÈtŠ®(^6‘¾ Yõ1 +£’ ƒ„ê0ˆ`²ý2±&±†gM}æɈYãßQ)¡Ï)°³TuEE¼œ¾è;®|p"‘©|çÚ«àñ;¬#Ñ6’Yº½ÝìîÚ2P\Úµêð[îùëá Ë>qÿÝ'¤ãcî»li³mô¶g+_úɵ­Ážµ—܈ÕüÍ VIFê…`Ð ‚.t‚€í ha+[@LꃗGi”/ uH`ˆøXL‰³SHS¢÷Å’Ç” }±Iˆ„X·5²Òè—Û37ŒF2 1í«}U:ÎŒü9þ±`›ør4Ê¡ÚOþÃëáÚŽÒ€Ÿ“¢»Áí˺ù/ ¦ê¿È`ûb_¸úŸµPªB·UD6}€‚qúÃþ‡“­²wäûÄW!jìÀ>•çÔH3ˆ4Ii€iNý®<¥6+óf3òh¢á°j~Ò4 +;) +K£h FÙ…¹¹ý9"çBáBá’· n×Óx#†Á§(¨åñÆÊâ$J +ăù²Dè ­yý¹SÎökdÜ—ü›ÊèœZóº&¸ÛÝÙ*ج,#Ø rÐtÙ½½[§4gÀ¾â  ñ²â¡ ñò+ÖßGÚ! ë(ÏÉœc)Áæ ¼ŒÞS&A nH×2Vø›Äñ{ ž?YkÅórÐ[©¯´’nÓ(—Ú¥<žj% °¯Æ>Pç÷+ÉΤ ’ºÜuÒ3áñíc°drµ ‘a‰Ôƒ‰52LQ E?û™+9 +à¹IŠÕÉ®3+N§¬L¢pi&ꔕ‰âÝ)ý¯˜lQ|Ÿx@Y™ü^!b,â$ˆI„ãa¦@/š¬¼ˆ$½P$êkÒÐue´d³d‰D@±׬Ëz1dÀ—&2ÙÅð( %$û`ÓÂsÔüÒh*õ—&JD°J“x¢Ì¦C TþÐëÕ4}G‹"­²(R´ž’Ó,ʨ™X£øÍæêÇeÎ —JÈã ®šâÒrI;½\:§Jô\.oM5·Ä¢®£y¼ÑÑöÅçáñ6|þô’Ǿqë¶Í »ÙÎ’œCûY<™ÒÄmc§ù»J{CIÔWøþò÷¸FEBdøO°$€ÿ\Jþ–¨•’aü5|«TG£”tÁV+¤­R‚#ß‚%:¥¤ÖYBþ–PJÉ*XrŸÔŠVJr°Õz©3ýoMá÷JuôJI/,¹A*aQ‰´¾‹á¿ÁçKzÓÑôŽHÑôž@Ñô^âö^"¯>-šÞKn/x©oÕ–D¡Ó—D³Ô¶øo"‹¯_zÕh8ºF¾bO÷6äúâ¢#Ó›Èõ& Ï®¾{{Kaë=ëVÞ³½µië=[Ævö¸"ÛºàÑØ&Å;•—âƒµÝØOa>p𨤴âçäUÊnlYq«ìÆV¤[Ó»±Ésyæ]ª58Pˆ0Í=¬BÖDÍÓ ©Ñ¦WMjP¸µNƒïÕàÚúª§È@…B¥!áŸj·Bš6ÉZñ§ E?:–ô%}Xã$Þ]¦t–_E÷2ù—ˆ+å35-­D[}Ôò« +¼Mä_ªÀ +òZGz_õŸ»³n”1ã[¶§‘£‡VO}=×î§Ê¥P)éÕªtjBmˆ—¢ë:<úÔ²Áí`ÃÝér«³À›EþjfA¹Éšn3šjΛ›‰õ$}K·õn‘âÝvA®Y¿pAÍÏ. ~^Ö÷û‹Áþþ`‘`m“à/e;ÆÅËfû@üÐÏÜo»q·›Ì¼Øµ×ü}…¡$!šh9ƒŸcÈ?TÁܼ7°YWæÅJ×^Òüýi†SäeKæ {bšæÂצ:©iìŠr,øŠÄÂÝýéùÍ^¤=¥µ7×›¿ØšÈ h)¤ ¤4}cËÛÚƒY\.âÉ4”ÂkÚ] F¢}y§©¸¼ÍË‚†æ,³Ó`Úš]i/¯fá +ÆÈ¨»K©&Ñ"Z]zƒ^ÇXŒ¬3?/1°™Ç W¶,å¼ÏàÇðÞ96uðhM§z²©[S/*¨í +êªsÙÔ­|êÅJ]Õ9ïüö¾ø1F™–—ºú8ŠÖƒ“5pÁž ÚœQsÍVãŸ|j±;¿^‹#÷uü>Îf2RàIµ–i ð‹zÁ?U%Fäš%x'Äv«k;_Ô¼èÀkecýßCû£™¼Üúâ ‹Ì ™(¶ú¿‡öE'›~YI^NZ_¬g‰DæóímQ¢bâK’c»û]…0£RðKI-Ö™Žt¥¬ÆÄ¼ÆpÞnàD3Ø 1®ŠÕWÿ›˜²öoëógË{ZV (¸ü…²[ÃXÎßõf<¬Ö`#£–µ°.ïQxJK‘ü^ip9)¬,kÐGš'ÁwŽRV+•ž‡ÊŒÂò|ÿÏ<ÈŒÇIÿ ÂÞ¶ç먱f×Ûy<°+ +þ*Â^²íù³Ð£6M¨>ÛvŽßª ,ÙQv0îü‹‡-鸗Ѣ9Ok f\Å…Và]Yê_×f¿“õæÃÉ·lE +~.Õ¼n^´yÓF3[6,í +‘Z†1›“žÔj5¡®eY£+X^Ñî/D«±oe“Åj„œ‘ƒc`=ä «î)ŒÊ~qà#”’0üÒ~9}Õ\MqYGØ ¿¬H·Îå§ 1|=AhUÕ· BËéåªÞ®g5¥†ˆŒÄU¬É` O~M«SÃI_¯Å÷xœpÚ×’z‹äÃï…}çÁ°6l¿,-ÃàqŒÇ¼àñ2e§]vþÕ&Ÿ‡¡m‡ËNm"G`>€ÿg3íåZ=­ø©VÐúútÍ.ôÿYwCÃÆ¦ÀcÓ^¢õ± +1ݯµmlJôéÙfs³¹Þl>ËjŽßû;º/Ž®Xjý½[{{7uºç.]óHGg¹ƒóåB{lb¤=*øùÁ‘ùƒà‹P¨ðy›bB,]ô5 Üöl_¼sC0¶ô¤21sÀëæ‹Õçl‘€_½Áˆ%ŸM#Nï…ÔºR !Õ͵Ó‘ï[ ž”Í®ì)ã§Ê |m€~¡a¯õyÍlF¯ó~ýåƒòæç* {5Öç+šÓø\5G1W£ž"êÃûÞÀxò£;‡ÝÍ)â8ͨm±b¨yQÞNðád£«C›#4¸ û]¸1T† +ŽõåÉù¿ÎL¬_ÚTÓ,E1í7Ó *çt‚^èZÖØ¼~^¬¸é ­]+‹6s¤ÑéËD ¤JñÔøü«3x«l0bnŠ·Û!n¿òÈ!ò:HÈðó_|ýEoªpûÉÀ¡ +¼y¾û ð-þþ ·u{|½.¼°l¿÷5…y/ +þh£Gæì[‘K-»ftðê•ù¦UW—µºœÅ±b廒É]ƒc3{êp=þeˆ·Š5¼u¨LI€ëSç~òÀ,´U¦Üú´"Ý8gä›i¬u½Vp˜D‡ a-€bä•NoâM6ŽP8^E…þÛ ¡3 +°œRí8¸ŠDX« ²šÒ³ [RÃZ¯a­$[ª2¯ã-Àr(º_ïê!âZDÛœDÜ:Ó8B]‡*°‘?Tu¦QWèó .»žªnbàòWÓô¡œ[ß”ò"vˆìI‚d#…®¤¬Cˆ 6¯.V_pÚ ê9“Ó]ȧl‘/"à ¼ÑÀ8r½1_gÏHrTB]IÈ;<üÖEØ—j¨ëHY?0h  [ ø²c +…Ÿ™Gz<1{ÈÃqF‡ìÙï1㣠+{I¨ Í¿¿ þW³OÎÙëŸÒ“y¤â‰=T©=4>ZcAùs6”ªÎ¡ClšM¼ "Da|t`¢Ãß™qjN댷ÅYgˆt4tk(9,s×¼¡|‹+s©Uª‚¤‚M=áââf‡htGÛcæ§’Cy—Žx›Ýaà–·ù¸îÖ“Œ‘åDZÕ˜ ¤y‘S1"KsŒ–½-Ñråb.­Ê•ÁÛñÛ%4¶yÝTCcûËsÄáIÔ# +ÊÚG˜d»ÎèåøH¥®îy"2±‘‘µ3ô°"2dŸ¨þd¼*úk X5Léÿˆ¿üãI»sò@áiw©«È› <¶«4r¸îê è«þ“¤î¸ˆßŒeßä§°,Ø,Øl`“³¬ƒÆÌƒ~ó?Æ®ñ˜ù‘éé ÍÑ»æ`3wþÁ +¬K¬Ä®!ÍLÏWçŒVžÍ̳™¾ ïJ9á$@ªÕ:K¸5éɇ̓©‹À‰F°„Ö3LõŠi¾mM—ÿµüX«G§×S+ +ÉpŒÞwåòZÎì¢`u¹·`Ë `’†ø< G’ç²v¨AoÊl¦`g? +i@¡ô@4Jò^à}NÑEP|øL4˜–SÑÌXŸó>ˆæìâÃg¡Á´îâŒx,\Ç’þîum½ëÛ]îÁ+Waƒ=Ðú%fÏöÄEàYl_Üh¹5Ýæérrî¤Ó•p°o$Ç:C‰Ñ=ƒ#7nl!54-ð¼‘Qi4jw¾/l0z +CÙB‹Èå†Òƒ78¹Ÿƒ1³?üBÁao–ÌDò`8h½†F,™}#­†ƒéÞ,,FÔ¢ÖGåp\Kž hE`àq «/Óz= ŽIÉ”ÆôFÁ@U4ý«tŒœ²»ÜV‚6A‚}–ƒ}†|{°Ý5ŸÅ0#7 Ý >ywBîð(òY• T²™ä# òmÛ~Oèz ®Ï‚¼`[äÛÛ~²ëºl™ÓgÅ^(éì MxÎÛ½¹·{CÙk +îŒßà(­íéZU´´õý—T[k¶Ðf 9x÷7ú-Q sæ¢Ý…Ç¢}9§9QŽ;3ñ0Ïy")—¿3ã²&Zù.Ïb  +ÄcOÒF™lŽê+¢Ûng«ÃcÜ6¹<)æ…‹C.—×¶Ä$xì(Æ0Xq¹Åç€ô§“DÌþPXÍeòz,æl} «‡3UÂP(<4—ÇÁéâ`¶Æî´\ ^ÏÀËù¸“k5ö&»â"îihk´ø»Öwö¬kwÞÆ{N{ÜÅѶ¨ÛÝÖݰ¥UC3zõÚ(š‚œ1]…xJfþ–æ¡´Qð&쎘K/ -]¿ßBºpʧ€›aI?®'m°Ä¤”´á7ãv©ŽY)IÂV¼TbQJŒø¼4«R’ƒuD²¼Ê¦”d`IRjeWJü°'Õq(%!X''Õq*%Xâ•J\¨§†Oý;±ƒ,`¦O½ mè•ߢY0x0¢•Âý‚4ÊÜ6+èï쨘(˜·ŸdN£ÙAZâ’59L&Chµ:†Ð¢pÿ:-­&4¬‘† œ l¥j•j¦Á8ÌW@,5cØ“7æ+WïÙ<¿7Ÿï¿yÏÕsùj«sè’Ë\Ö}å¾þ}¹í;švØW®u¯5,7ã­ê*žbS—íÛ±v¼#•ê_»cßešðÄFK¿š~UP’Œ*¹ÏýP Ãçiؾø¿÷~å0ìûç}Eiü…|c.¢EåhQ޵ûš9×ssïk̳¯Csž_û÷ˆ×3ù|ænôs¢1Û˜ ¢³jsþy¼1›mģߓvT€_?]÷äÁL>— ‚l>Ÿ/£›ÕÕè÷ª}7:#¾šCà'ÛXýeccö-x¾OÆÑÓ®‚?à¹\ºpržÝ“Éäq¯R©ª'ï¡f¿Îgò)xG‹ü®ÖÁÐø¾ÿþ òwðú˜rýþtýäôõrézR²]ÝÛw‘¿ÃJ6Rr0Ff$§ôzA5eÄo<,H¹uÔRJUÁèÉ© +¬cUMUjµ¬³ò‘Õ%¤¨9x%T?8Åëõü)w$ 'm°Y È‡\ž·Í>—¿ú+VYü%Ñ%½ó«À*}ã³Ê7üñù¼~Aº¾~Ã{Òõ‹ÒõJüG„ƒü¼~I©ÿ|ŸôÍ?®—Áë½Òõ%ôã?À[É?c}r>¥§ Ð\~,˜ fõöIpsYé¹F®ÑÒr¸ÍNÆ&ñ›ŽX”45²Šì7+G’~_Îm€ªÇZW”ÇHËt²ÙݤÞQ6AR%JrŠö62#W-(÷ªžÖjÀCk|pK©m“5è mghO$ã* XÂŽà@)ê^Ùä(¤‚4¥53ÚØ‘l*X"9gp¨5DiYÑîq À|f¡GÐhxŽ*åí·Â…á¦üh“Sˉe6ö²$í*„ía ÞkBñxUv‹%Ú½¬ÐòøA©o~$ÑÒïÿˆü=œ#[å|?:;äŒ'Œ‹„“Ý ÌÖPOÁÚõ·¤µ” C–(ó…Œ-¢X›·Á4¾˜Åm ‰Z5ã÷­œŽøñK„†³[.šÔàÿ!2Hñ?o´2:;y¦X-A0VzÇQ8¶Až÷a#²•µà_Ì­u±Sfø2Gõî)Õ%²yN–¯Ê¡Ëà+s™Ù© +ªó]½Ê=UµäÕrÍÁ®á-²D2ò`¼S|%Fa<œ™¤a¤©ý©ZFõ:ÈéÄDÀªæ¢Á’ú¹ ¢ƒWão“”:TCâ­Iÿž$ð’lõ:œ´M‚åO2:`"NÊBî(:sï¦ó÷¡nFöMTÖ2C®Ù¬ý®®4ÉXe†Åh4g( ôMÆ\“Qó˜6Ï’£‡”§µ˜t­’½Š¿Z@©/4£ãù¶ú­K»¤‡Æ²¯›MŠŒœÌ¥ïæA9[S×Qˆ>/ù(dñ|®-J¤  3ÀÉs¼ GÖç +/Äžê'e "8»(¼°ò¹~ÒÃ8WüxîšßyöoðûŸ¾×hni^gÊ´µ¶n]g’¹÷=´¿ùµ¯ïyÞÿGëLÕš-žÆ³øs†d+r.Åä1•¢½J/¡ŒžÉ‡Ü­fô¥Š´’ &\ÓÓÏß–ÎP•`Ž©ä‚Oš•tÖˆíµÜF²Ä,v‹µgªkŒÏÀOÏÔ*-úÏåÚ=µ9÷äW¯É(«+6ÈÞÛäî*_úeÌõ^Ï1Ê2Êš6¯·Ö™•KWMÖzÀ"ž2 L'}²Ý¹š6¦ñtç¹Ê¼6=Îq漚¶ ŒáÒ úKúËz¹^Ÿ½é‚€=Mzb¤øÄj(Kï]À‹ U)¿Fß /i­ŠƒÕ¦ ¾øzòÞ4ó}¤:ñ«Êáp…²Ä¯B½ÊÎ&?mÁ§…b©:,KË2èòsÓ›ÕÙùUyMø Ç&ÐP®öé‚JmmïZ³ÞÚTb,Ì3§w«äW\žVÓ3R´Vв?¥î¨æ_̳—d.½SÜf‡øâõ•åmöÒ4>·Ô^ð…,Øb­†ã~ Ç5 Ig…pfÒ,=+íxÖ¬W.äÇN¥.¼‡Ÿ\ó¬"ßpÁ—Ÿ`üu«X>öó’ëGàSþš\ŸkÌÌÕË¿o*p_¬ŸoÈÿZ›­U¾·û$äy­Þ¬“ËufO[ÍdÁ»†)coÇyý\®bmRˆ½$zVž 1’TÄ;k ¨šO!_d«?Òãô غ<“!W'Ï®n)+o©Ì–ë-™Æ<8!ýuop¨Üº9Ћþ]JK­õ[ê-–uëÐ7c)B|‚Ø—äO@œèS¾žÓóiQ¹>V>èYp¤‡©Ib–5fŠ?VEh#«1ä óåCŠ +»¹P'“-Ëv*AƒZ*0jeª õÒlÑø‹üÅE.y۱Îe1 rv,Hîâ‘ï*c/žóiå%/±#g¿Ç´UãXþÀ[t{„žlöwvdd8ÐUøQ“Íi«s–i³líðiÍ`_Û÷p`c“ï÷äÃÖ¦Ø}ëpÉÚ‰ƒÝ»n.];±ˆemD l“ÌÅ"û™ôì\NCሠëjë°$±G#ᯔ +&ÛÉ"wئtÍR·Z›¡ùâóY:uÚEÞ’S”õ &¹sŒÆ‹‰œK3f›”·Èåjõ{Í&àjEØ~Ù"SËžÓqÅ™D ÅÜšDæµÕø;WãÜ“n¢á¾x›C¼‰Æö§g,åè33Œ§×wWê7÷—l\[¢2)3TÍ=ÎɶBcÝÎî»Ñ͹ÈgÎ5”ž\?ÑÓ’»¡ß”c‚³·4¥É¤-Þ0P]>¸ó@Ç ² ±}p•ÒÇ´ž]Ûj#BvÃ5ÙEG¦O[\X\[¼¯8P,/.–·jåFÉ„ß%šÃ‰­zÎXVÂ÷/c¿fTV"=€rÙå‰È²¤_‘gûÖŒÜ\ÙÓdUªå¾¸®{ÍÞ©ý £½N3\ÕU—§+^_VÖ^WÊkT€¶²¹·òÐM9¶6ëÚ¡†|ÖÜ´ËQšžiTòƼ5™æÌagÏ`¦Åœ™UÞXlYSlÌÊÉ2X²³àZט1ë*ïX_ʳ²¢º.ì«h ;*óB½˜ÒsƒFÀÐU>.?K£Qf)_ÀvªM¸%…Œø†ùYÅzÑh(æ)\ WÄŽæ äç[–Îk´¼ +¥óeUk*‡sÞ`—Ãf­9ÚPTXªGoèÓuï]Eç—ØO+ÀöÈö0uLå™Ú\ãY_m­ÜZMŒb•›•_+ÖÃ$Å7$h>ñž‘É¿cÔ³flqsMo]¡‚W*Õª¼šŽÚ½~OÄÚZhЙ èöœœ¥ÌÍù}þ>+[×>ÓmÕdhersž>K«×nÝ50¤2ä A£iíÚfÙâÛ@‡9ïïÕpŽVy¦|-‘¼¼\®/$’ëå’#?Yrz§8‹üCñ¿y3QÒ3ß?æwä¤Ô 6·nѤ+UE–u}iÛö& W:ßÞµoCNX_ÖR½awId‹5mvÃwuóܽãu<ÛÛË J^oÊÓójÞ¾õ@K–ÕêØ¾ÉÚR•U=äkÏ+°·akä¢*vL6Åd3¦³œN¤.žõE .íøò8ùûZ³Ø1•zé¢R(ͶhXê[šÒ¦e¤£ßgêeµ–bã{sú4ò ÎOÃ¥r®£”³»A¹LSÏT9T9ªòr›“ôÇ­“rFÌòuä^Kì)±g«¯þ;.eÒ³ÕØÝ>pâ¿MOï˜(ê˜íîšjËŸØ13}Ïæ-ƒ½ú²¶»ÍÛ'· ŽïÞ>Æ*ggû÷¯)÷tÚú› +ó×uWtÌTÕxЮú¶M æ*ki¦céLÓ–JëpãÆŽv†ø•øA%\µØÏšs7GÈÍ•[kj‚ÀÊ~Ÿ‘3™ Þ@Ïë6HîP–èÇ+ïŠ$ÿ†ÊDÁÖS¡µCFC„jNyc™sWK.[âéèjÎ)îñõû–ƒHkíh¨q”ëuÖM5v²o >vlL ÉÀlÉTkÔöaïcQ©cûúFâ#÷t4Ï ¬)°o**m©Î&Ï|ßÄ| ®ö“z&@=ÁhÙ×L‰æG =½þÀ¢VžÛ²¯£}W³ÅÒ²§³}O³eÖPÚ`­j(L7”6Z« +5lúÐm»×Õî¸mtè(þ<ºc`{AE¯»yÀ‹?§ð·¨0/²JÎ5-÷LZö ì?œM¨k?ÄÙ¹ êšõêšRÃ/ݧJKSzÈ®Ô<¥È6æŽðšK&½ÁÙàwƒÙhPÌÉd<ÿÞYŽ‹!æoÙlnž©aʟѲÙEʵˆ}ý¬ŠµÑ+ŠP]‡ë›Õxƒå-;ké@†V£?aÛPœ±qSA]E>¯Wh”Åö–¢†áõ9ºêÍÍÑÆ¬ÿU¥³Xò´'Öô´®ÍªÝ¨7é+õF• O˵;J‹}Û7„ˆ¤O³Yܦƒ©;ë°ÀÕßÅç|‹¼¶¹êe"e31 ¶Vþ¶`]59Á!ß§¤5¬^ÑÈÓÃÙ,k×Ô¦â–Ú8+Õ*󪛭ƒ[·»:UÚtµ³{{zžM(l¬†ƒ<À+±·MÏliÙƒkúò5Z=\(fã§£µ7´8µYF]dž¬²<ÁdÐf2yE¦^³m¨}{Ëoÿ¬aže97©ae¸†á¼ñ¼TÂ^dÿQb{´½ËL¬bulcÖX¶%×´ô†&CÉ_á…òŠ¢±¬‹è¿DËNðj5B›—SîÌÐÀÉÑ(:²tŒ<ç‡ùkäv3v¦öL…$€šyi%Õx)ȲRã«T²÷-dë°ë­Ýîå-U¹R‘¡4—5•îuÖ™µ-ê0™–.íæÃ7¡{Ç[ +Téiœ<3[HËHëhs*µ&.^Yõ"ë%¿^^Él`jÎX×¹­V¹6?)Ö×'ÅúŠ2Æ^¿Œ%ýÂBQ~Ë®MÝ»Lfgd½ƒW+y•<³ º`ýæšlT°«qàÝ4ÙÒ[;o°6”Z×iÑýµ£Kí{wÌwé +­.hTÊŠÎk … }u{-†öfse=¶Cs–-äö2FÆ|–Ókþ–H®¹BrÃåKª^…J~éšÂRPžÁ#ýÒSàBè´.ƒ«ÏÊÓ¿÷j}ÛTmÌÒãºå€ø*­å0¥ØÞ•*»¤¤¢‚ÓIZÓÖ8¦FÌJ1­­(^ñÚ•ô+É•«ì–›BGFÇîË{nغÞ|ßøèâFGÛ¦Ö¾cßP¯³§¿¯ywOMŒoÚVæôYÛj,æªæâygÙ8lõõ¶Ê¡~é×¶•:k뚩ݿ³{í™ÜÆxÁzY¬W¯ÓzuÖ—±º¿~@ÁJü&Á¶(§ãÐÞ*§>CÍ«¦¢šÂ†{6›?Ñкu­)¿eç¦îÝ &wšÐd+[_”ÑÜoïgËwÌw§óJHÇ:8_©hßf×ç¬ï³ÕŒnXl²;¬9õ¹`r]vmQöX$ÑŸIc_bÿP¤±ç\šLëq)ðOòeÿ¢U©Ê¶MzêO<ž£·pZ!WÏ kOÉï–éäïÀ5oÆ…´qƧ`Xñ÷ŽðOî7ðúÏïäåÉß1ååg¯­‡•/*ïeíÊwÁÜ<~è4¾¨âŠLEÝìÁ÷îT¾;׉_£„|×#¶9‰ž§Ä ­B—“¬à†é’üdœÆëУ˜”.JüX}ƒ’ʵ*ýtuRoé¹ë‘¦Eó•8¥©D:tt]J.£'—Ñ—¯GMçâgô«ÓaL:…HŸM +”ô«Ò3†þUéyJ™'®OÆúd29.SÊúÐKÉ”=ŒÉl ôÒJÊyæÆÈr+¦Ü‡óž–(ç2º´œ +LïG…ºÂs‰$Œ¬NEˆÐIJÅ¡8•±¹`s¸_Óÿ;mßÛrrP>ø©ÁÇ;xmèØpïVÃÖ×F~6úÕ±{Ç>9Þ9>0a™(™°M¬ŸØ4Ñ31<±cbjâÀD$^ÛV°íÞíë·n‡mÇó;Õ;ÛeK Ûwý`÷æÝW÷„öüzïG÷¾¶ofßÛûþcßµI~R?i™,™´M®ŸÜ4Ù3yý»‰Ö,'»Í“=,ˆQš¨oÉûü¢'cüÔ.!â ’zˆ­±çch¨Œ³âœ0ônw +j¡ƒ1+¹ˆà˜OÂ%e7Hâ"üÝ"ÿ’]f‰­ð‘•ùªyê Ñs$Ïo€]ÖA渾§GÏi≘˘ ⑹2OΊ~ŒÍÆžK-î‡ùâ;ÿ5ùVʸ6w$q3$Ê*ÅãÓC¼"@$‹á|ÕÌÔMÝâ•ó+¼§Fô¹Zh&>4K¼Ûæ0Œº@vªciWº§È€%˜!ÒÒËÐ,ºHôä&ñ´šÎE¤^i>S4òWꯡ•¥æW&yðê»SþPÝ&Æ­î‚XŸ#Ärî¤:¹A¼*.—«%Á0Š…ž-H¹2;ó˜&µ×OòˆëºH©ï¹’¼Šæƒ€øNQÑö‰šŸ¦I󊹅îƒgúHö¿¾Ò,î-ß]ŠoÂYÅÉw^QÏ8«§“|é1Hg’–“½ÚF,ã"íiF:¿Zžç–GBŲ¼à!yz‘œQx‰õ±U]0†54 3¤cµâžû–åÎJ1zãÙ"~6 IóaªÓ V!oÙÒB~Ì›÷õ“ä5ôìÄ'V‘¸w¿_…“¼òúU[n89á„sjoê‘ÍØ~Ñî6‚9$V鼂žÍŠv–ü˜úUP<ß¡ä¼ÛEpJžâbâU~y>ûØ"¦!ÁŽõæsý´«nñ\ÛOdM¬™^r6&¾)Êx}ÛB{4¹Îƒµ+t4p…7¼¿ª‘f¯žÝl˲›¤ûå«}äªÀ» ·$Wü,5ñJ$ÙÐÆHWgø*Lê{<$H®¿|Äßæ*,•zŠÈâ+ÕBÌ–‰¹„Ú°V´x˜D‰/&ƒ×ɾtãZM¬ðeb¥Iöé¸&‰çÿ@;JÕ`\]RÍx$˜&ï˜g\/ûa†;¡vDÞ'ÓÌ?MH¯9)‹Ó³±ƒ¤½ÚY·ŸÔ©Ê$^ŸIubµœ’¼*LrµÕ”ˆ{õšëºŽEC1ôaâ¥~²;¢•W¾¨Hõ­—é"G‡˜nèmƒj9BFú`L€,:G& × £0R3FÅãåÄRÛHê…yã¤ÆÑ=Fà}ú;HŽëfÒǽ~˜?{áµ]Ìv£ v%3GÈÞ[`t>»ÄyxEŒŒC·{H¤üa½†èk"•t Æ…Âd©úGI²-Ðý{Å£NØ»ì‡åÇü»I{0&g·(©“èïŒ÷ì‰HŽÃç0Ì%ü3•v`è†ãK‘s®±ÒyX?âl#,ßP•“è —H×_|ƒäxÿ8:F*Ĭì$HG‰öºDa´¤GE-ÕAÐ`­btB{ üï‰én„¼SYFvKÖÝ6r<>‹âsŠïDsC¤G­ÑAzcÄVø¨M´åÁ±œë6â‰]d–“ yH7ñ^*½ä”ÇP‚$”¶m¢,’W ï#téø¸hé•zÁZw`¹Fcœ¯·3Äæg…uöµM¯;f"BG  „\oÀ_#8}>aÄ;; #ž°'tÐ3]“Þë™ +y…¡ Ç?v8è\‡ Á˜õºw x8„Wxg{P†?mˆËœz]~wÀ}F7æüBïÂtó›ó†_â>3ÐîòyÝ.Ÿ r„9`*„ !·GÀâ.ºBaÁ?í ‘9°¥oLðº=þ°§E{<‚g~Ê3=í™|tT˜ö„Ý!oÃ#<¦=—×®épù¼S!/æáæ°!ðqùðKÈ;#̸潾â72'„¦"> +_¯„‚©Ï<¬ôOƒB~O(\#ôE„+²ò„…Px#Àö áyèÕí +B/™_ðE¼AØÒ¿0ï Á̰'B6 ÁP¬¥…Ý}¾À¢0ʼóA—;"xýBë$ƒ%€Ñ¼3”w–lLE<‡"°Ø{ÀS#ˆ0ËüËXp/€I©ÜX}~PrÈXBÞ0Ö¨Ç5/,1ØqFÂÞ›`z$€bH. 0OyaçqϹB ˜'T3â™]ð¹B1¿j–X7cX?*Â&h¨YW—¤úHÈ5í™w…`Ĥ1Ïœñ°;ðý^O¸f`Á]á +W‚…žP ™‹D‚áæÚÚé€;\3/­¬µ‘ÃÁÀlÈœ;\ëš?ÃSa¦oÁí +Ïü p˜g^}^p|¬FØXÀ…"ØYñ0V„LñØ„io8L  yᨦxàÓfô„潑l7u˜ ’ÜT~IÌÁ¶;øÁô‚;bÃîxÖÚð‰ØgqÎëžKl˜zýnßø~\ú€<¥Â[IÃ"a:ìð~ÒÒ(_»‡#!¯›:¤Ä€ø¡´W Ñ@…¸@LàT‘3Xôû®édí¹¨ªÀ³˜7"AÈÓ Ï™óø‚É…¼¾K§cƒxIœÌy§¼œŸÒÇ@䙎,²¨j›0å +ƒ¬,SHF¨}Áã¯Yôð=Ó^WM 4[‹{µ0sŸ˜S*Á¼Ä-H àmVO‚«%¯ï‰3ðŒïc5ï&¬ˆ%$6¢îä4‰U™”(ÓÓ‡±qÂ$x7¨À«À±A3Ó6a&I‡â,`Æ:]Ea¹˜‚dçÇJq‘D-ùÙ£À¹Âá€ÛëÂþq)ËqÑ|êõf*ðŽIh…Q1S¿’H4M²!µÃªóHžÅà îfÝ K/öyÁO)o¼WˆV*à@‚#´á\îÁŸ¢à +Ï‘€…­§pð†ñ è%€°€‡=8E‚^šQ¯+* x`IƒFÔ4bq.0ÿ>q,„ü Œ‡l0€JdÙïqG$‹û18ÿ´—^3uqHc= ׈à¡ÉÜ+†1õñPx׃)OR亀†0ûpœÉ &ŠUž÷SŽ·Þ.at¨{l›s¤Kè†G†&ú:»:…rç(ôËm¶¾±Þ¡ñ1fŒ8ÇvCÝ‚sp‡Ðß7Øiº¶tŽ +C#Bß–á¾.ëìïììÚaÝàÔõ>ˆDØtlHÀ Å­úºFñf[ºF:z¡ëlïèÛaºûÆñžÝ°©SvŽŒõuŒ8G„áñ‘á¡Ñ.`ß Ûö v—®-]ƒcPraL蚀Ž0Úë ¬œã ý‘¯chxÇH_Oï˜Ð;4ÐÙƒí] ™³} ‹²Pξ-6¡Ó¹ÅÙÓEV Á.#dš(ݶÞ.2üœð¯c¬ohÃè® PŽŒÅ–nëí² Î‘¾Q¬î‘!Ø«V ‘M`Ý`Ý«ZH²LÁýñÑ®¸,]ÎØk/Nœ\“žº-º-ð!t›º-ð§»- &ÿS·þt¡» B>ôi´ˆžEC¯ {Ð;è3Üfô×Ü6tŽÛŽ^æ|èB?à"èÇÜ'Ñ%îaô&÷ºÆ½ÅòÜÛ¬‰û[Ìý’­å.³­Ü¯Ø>îv‚û5ëæ~ùwÙ›¹ß²wrWØOp¿c?™Œ›ýì àvî à¾pß ¸? ¸Oî3€ûeÀ}p¿¸ÿpÿp_ERnà.ÜvÀ½p÷îQÀ½pÜ÷m€ûÀý)Àý9À}p pÿ=àþྸ¸ßÜ¿áž`Ówà.ÜvÀ½poÜÛ÷4àþà¾pŸÜîÇ÷ççsɸåûpgn+à®ÜNÀ=¸÷îà> +¸Oî¿ÜŸÜ/îoîî·÷"`µ LT€Šw àÞ¸÷.Àí”G÷qÀýà~p p¿¸¿ ¸¸ßÜ¿ÜKÜvVÍùX=|¶’û$Øõa¶ pîÝ€{?à>¸ïÜîÇ÷—÷Ë€û[€ûÇ€ûMÀýྠ+1ªHÆÍ{pçî +Àݸ»7.£Ó€ûfÀ}à~p?¸_…ÑïîÜ—™[‘ +±È ¸K·p;÷àÞ ¸}€û£€ûà~p?­g÷«€ûÛ€û Àýo€û]ôøïfVÇmcÀmÜu€» p÷î­€{'à^ÜQÀ}/àþ+ÀýÀýUÀ}pÿpÿà¾Â½Ë)¹ßrYÜ®˜ûW¸›“qk>“€;pWîÀݸwî€ûè=¸¿ +¸¿¸¸ßÜW™0ÊÜëw;àÜ»÷<ྠpŸÜîÏî—÷w÷?îÜ¿G§X%ú4kDϲ%èÖ¸»÷À½pÜ!À};à> ¸ïÜŸÜ_Ü_ÜßÜ?Üïp—9–ûgàÞŒ¿æÖq¿áÚ÷àžÜ~À}à¾#·Öš€;p×î~À½pÏî[÷Ã0òàþ!àþ9³qÌ422sÈ +¸Û÷>À}pß ¸ÜŸÜ/î¿Ü?Üoîkè ›…nfKÑ vº‹íÜ[÷>ÀÜ7î÷#€û‹€û«€ûUÀý€û§€ûç€û2÷§çÞâ,ÜÛ\5÷ ®•û%·pïÜÜwîÿ¸¿¸¿¸¿¸¸ßÜ¿ÁuWÂ?®¢¢óÈÑ£¼ñÊK§N]>~üøe^xþòñcð‚Ž ñŠËÑ(ü‹&u¢ú¨J…xMSÄ Fï>=}˜q0­0QÉ&O‰º&âЙ|”èýŠx„Çúu‚ÁØÜ:Äë.ÉX†ççf¸$8.цC8ÿGvR¬ŠW¢¯€>„žì¬JÄ«š:«³)îŸjgUPg%NÉǼ˜•®»‹=.€­cǶ̓±Å+èçîZ3 ‡eG—Bb@;gÇôC¡N.»@?ã­ÇÒ;èÂÃ?Ð{ñ\~ãÜ:× qÛ-+¬(+¬â/+lèäG?†€ÇOðú²¬°©[hàÿw58ðOzËÅ`I  ü†aÙoÿ ΄ȣÄE° -ÃŽDð¡a€†UN5EGåÙV€ìªþó‚d~Øz¶ ¿+¢ÿzúm…&”‘U¡¸ +‹ŸÙÞ´ŸªÉP/)r·²?˜Gáµ((@Aç!p¯²ØAVïçó ¡3ܰ-s :Ngi‡Âàv6<°"˜ñ¬ÛÝöùøz‡8v¨ ÏdíéèAø¡V<÷/·ýD!¨‰ç]©·õ 𔳠u ¶ÔÕ×±T5@• ªLRVtIÒ*ˆ)ÿG8c°P=2³°´&H¤` ®o0´@ÏF_X߯|³2‘$§¨ªª*GÒQU!lÄ#âÿåˆl›* +\tµ„áh’ç€å¬ +»†Ûp©%QŠKeæãŒ‰“Ú¯“°öÒÙËJ×ük·YÙ®>e3Ð.ÉáŸÞ·k!hîv–Ü©¯Ä¿Z•¿?³Ýþ§Yëyå»Cn­Þ\ˆuz3I܆yr¬Ça%­ T¤ê7)2hñŠ·e¨|¥ß%Oc€`R_¾žüØÄ5kïàZPEÚfÃNlqHâÎCâºì]WŠD”_^ OzÃýÛºx±ÔõO›ö6~-µ”Íuls,…7¥Sêá³ÜϱÀêu0¹ô‰ä]©ª),¹Õ^ýÏúóLzzÓs¢¾àñ¢Â7)XHþpšù$0ÊŽúê§/Èuê‘ÑÓ~wÁàÑžš}B$hG8 (4 ŠT€Ńâê¬ùJ,M$p¼[ŸþI³†ðà ÁÁB×!1/ÀCæSšyamÌ:®=6[.SJS.çl¡ „PfÀ6À8Ï0O?^wq†{ˆÿ6ïûùB¥ +‹Û`ö),O#4‹ôIµR¼pÀ0ƒ†‰Fƒ+"”)`-Ñ"~Ëbááá¿êÀ3ä´ +à!~7¢pëR“Hæ?$Ò’,'Ø«‰££o-Õ¼ÓÅ©AÇ«µûÔ.Êš%É^Ú¡IdÝÓ6·s* °èXÀ?Ò»±µ™ù›ù[xyo ®§y¿†¼~°ôþ _ žˆòG4'Ö_5+»¾Ÿh-ŽÎLë6z9¬7›æÆ³c×Ã2»S¹Ö;k©€$ÓÇ.SÉÈrÚ7e¶õf„†WOùDS%Y”´Uåñ'ïOÖ=×-m{ó’ª?WNs„Åú+ ªÕð“c¯µ»¬á´MG;¾<\.µmmŽ娂”«*ç'o¾Nʾž>âlŸbÁ ¶²H•ªÑ'¨µ[fîæ~"3ñ݇ÉRDÉ÷o;çúbhJ‡nZ½Þ 4f=ö `à Œ¬‚±ú‘¤™¨Ë‘:ŒÕ¯–„±CÿXH £Z]ïá)lãëMßN,´û‘@G3U€D 0+1Ðl…Bÿþë‘ÿ¥þ/Ñ(1ùŽ8éøir$÷œ„ë\H¢ìÏ™‰­.I +›åODüˆ¾,Dߊjå«B¶Œ6d›E La] ÌŸòÖhä’ú‚J×q¼Ç2Ž?­ÜK +¶ R»¦Ï×V²q­a¾í;ÅþähezóáqÁKÊŸöÖõ‡Â¶%w¼:1Ú1Ÿúãšk¢Æý»B×wgÖ4Ä•¥]ï*‘yj;«üòáÞ“ïÆöúµf íç´2êük62-`RÚÁö3úló;ÇÁ#_ºNs»ø6n]mWK®¼é§Qþ¤b¦ˆq¦Nü<ìFµMKl ´SÌ)<]9†ÇŽ.¡”H4n6Bp³ì™M™áË–Š\W­]»ã»ª}Xð®ÛÙÑ\Y\AÃgÖPõˆE ý?z%€‘h¼ QDw ´[ÙÓMNIm·’œQ‘$GRT!Êy” ^nD¢²’—ûï Ð(ÐcÈý”reªªè­€K-û§þ;þ¡‚‚÷ÑQTPA-Ò_è ¨Ê$:º­‚@;ŒVVA þ_v°„‚ÿ£‹P1އÃPp¡ñ{sFRp†G¨g{e³˜Åy«ˆçã3?ÞFýô}ƒý¸M³¯!úY}ëØÀ\¶Ó)—5$)*Zß:2±Ê«¸§ra'V¡!¡p}æÌ1=;™¿åTûi~=àr!OÓ=C§/2JGs;¨ÒÌùKD[8vS8/+O^m>.~1æhŸ$ÿ[/$Mù…íH³ÚÀØ<âèÍrK{gLwJ³€{Å>Ü`W”Ǧ ý"b¬f†ævãp±¤ù2Φä!fn«G‚“ÚžŒKý2¤‚>Õ_ÿp_]Ûnó˜[¶|†Ç² +¨’3’BÍã—±eŸaO§ì9盯ò<@xþȳÚL–y ®Ú,®ËÔø¶ Jm±¸.ï-£#ñíß;Îi­Á•ô>5×G<ÑGýrÙ\â=³ˆ©ûϳ¿q›)Þ²wµxnr—tlAþu™Ë]¿Ë*ýŽÇú'„\ùP8›ûš¯KmÎãA€&óPtlÙµª‚{gØ_ˆrh]k¸»CdbnK=ûMAÓ£P5ÈÕR«B/Í"{´úÃ×&ï·žœ¬úæ”Ö Ã7Tùôñ²¯¥@ÀØãK#aÍ÷™ëçÕ¿\ߧйaÿx}gå—ô–þ)ò¸Åí 1ûÊŸ:‰jmvàíKüè]o\¤ðjãQ]ícJz'ªNàÂ(šõÝrù(Ä1£ï¯‘çA'À: †`uãñQ¢c?ÿCX:œ²²œ”HúmJÖ¾ž j#a=°îw…,ËÊ +ª¡ 7ÅWpÓ:(OPu}½|ÝÝB=…uö‡ú…ø†FBà¨J€"¨¬¨àN$ÐIE"ÿ½ú¯ð=7ß¿¬¯Çèä¦h?ùõoî 6d[‰Y^{ôš×\œãã“¢'¦×Bá5£LÏlOq§oØzòzÖN@â%ÌoøÀý±$&Žo쨬ɤ6¡VEñ„sSŸ½ùeç¼OøðÞ¼ ¿V̦%õ‡þc–ö]%í¥[Qç¿_ôÿÍû¹Ô+›Òøö!)yÉ«ñvÖ¸·HÙÙ=ii@`ÂôàÜC]™åÃ"™‡f:ðÓÌ6Ö7õÓr`&†^k$¥½.e¾}Љ19ÿ=®h! %7nÜ.b~ZÀ’ùŒ0¯è3¨¬—³Í-ŒÐ!„·éSý-ß qK€­lîÛ™ðG¢Ûl¾£iuÂØ%|/%Rp,#@‚ÿVáù/£K¾8P(PÿâN Ë¢Oà†C%0 &‹Í1i@L*™‹ý*ÅUÛ^2sh#~nÓV›S;Þ^Èw¿àö«'…3òO¾I^á5Ó}Ÿ™ðòž€%Ã) ÊÓÍÓ‰×úûqñr5´‚rºC°]åŒ@o•C ý?114]F«3eÍ™™LÛ‰ÔSy=róZxÏ£H+3x™|è^§¾øQõãwä;מO Ø}g;¢Õ\o™ý:J{`{e‰Ãiþ7ðø«•SGÛÇÔ᪳¢›S&m¸_[Ÿ|û>uÏ3rí»ô)ŒÂäȉMâ¢Á³_çÞFd˳}c®â5?wÌ5äÔ|µ³Þr VìvïÔâÉ:*¬5ÀÄGüÞF0 #hÈ„`›?k,aÅ÷Õ±º›|~gݨùÑà Ê2» +jF«b·è´ ù´TFxît‚¯cåbïxÉ•õeË]/‡r9…÷ßÄ·YÙŸ N÷¿ªfÚù5²æ +oÔné‰óg¤•0á|»hQ&±M²•uˇ¾¼5xáR¨òó†½bk%°[¬Sö:èrU•——šy7çn] GŠs¸¯á­kwñ5爊´ëŽÈŒT~6j“íì&’M%6‰»8~°Ÿ¸Ø›}®esÐýÉPÌša"5g(µ’¶·Ëöh$å‡¹Ý ÌÇ_¬¹b8¹6èg2ÑÿÆ|ŸUsŠØ¯ûçÖz 4äJv¿óVdèVi‹ûÍ[t§Ž¼åÕôÒˆâò¼Œý|/N&à÷‹*/1æ9¥l¬É›ˆké´xpú£qÿ7¸gPö`³oó»ÀE™Ò ì N;»Í6äwÿPÈÑ’·ãñ{€/ø P˜¢ +z÷’+`Oë »ä—1‰ÿ€aÒÇ WVÐmˆ€²Ãi¨ÐI‘ÿúŠ…‚ø³ï@@¾úÐæŠ'„pòË_ë¼Bá4Sº7uÛA$wë†M~#Ž–Wî`H|(ã{‡i8Áת~k»±“¤ºlLi³Ú38aëÓ$¶H„Cé®âþ%9ÆgG|vuô±¹Á*K+yqYæzKÉóŒ-®|诰a¢µÄZ…÷ÅÌ–Ëõ*œ»ëå‘û‹}¦[¦7ïÌçùlp¯Ÿäq5ÐC9âbž;‡ÜSíßf{™ØžíŒ,4–~ÏV‡¯Nט˜”qä2³—:Ò¿vs…ñ®îñqݱ/Ü8¿á…fYŠóp’EßT¾ÂŽ·iêr×*4ç‰OË‘e7JN’uœ#Ë~1·?!¢¼‘¦èqØæÞYŽkëÅâZ?ßCƧ~s™l·®IIO¨¢Š„ntᕺÝ&)EÚ˜¥f¢ò8ºìäu~±¢Ë^cnB{ÞHŸsIØèüTd›¦uý­íZâÈÉ'QN +Ïă9¬ ÂËg`oª®"(.=Tîòû:í¶½WËç3®â½£­ÿ¶–Õò^¼¯Æ »a¢Ž{Olꘙ1PT|¬oÌ)·dîu©×@mfÌñ®ñm屢ðR‹z“ß%ïŽp¹¡÷|ûÙ5áRRŸÆhRÇek«ZÔ¾9¢—TÏbÚÐY¨«zê[àL„°ƒ,ÞÙõÔiM Ÿ—¥‰ëzsÌ?g”Väùguôw%¦,ûÎqÐwŽüÂý­8Ï_®KÖ/ßÀ…@áYa6ôM@º0ßûÕ?9åÕ+ž¹ÍBšî].´ù›EM„'bIJ€#ùAP-òÌò¶Åÿ_}@»­4ÖåE‰  èB$ÒÝÜ®UnΰÌW¹¹­ÏÍýöC˜\ˆyaTL&“ÄœX’<ˆ‰´–ºCÀyÿj™}¡™o€[H¤{ð>yŸÐ@{¹ $H€™Â bCû­\èû­ûó"AjßâÎAÏåý“ò¿ZˆyOÅfõÛFòÉ?íõ=ƒÍXóÆýdöÖŒƒ‘¸´ZOyYÍZÈ“€Øùj­aÖõÃËÓ¾=î5¢Ê…™ÎžqiXÚuãNFwðmãŸÞ²õ¨u{éO¿AM&yé3ï46vÞOWñx §%6?x1-46õs«Â`S]2gå…ËhÜ™qŸ>ò§ò6imòs0vbñ tÌÊxû™z|Ú@¦wN½ý¾òDàÆëC%’ãí¯§ÙK²¥2³ÌØ5°SÌI]B4"ïÀdƒÜ#§œ›Æj¬¬u×®ÝxÑÃh¥ï@"î•ä;\öYr¦Wv³°oÖI>AE¡4m4æ"|“”&E oæ…¥–›}ysü0÷Aý¢°!íMž4gëÝñ4w•Ìø¾—Ó3S<ù§%ß<,Ìlÿèì®3èÄt6AŽy‚)Û/ÄUíævkòUãTuŸN»ÔÇ^O…±Ì¯ù;3ºa]ù÷wLg²l3âÌ& µÃ¤ÊÎjé‡ *7vœ?Ÿ%úÃè”Pñ¬¡ùKÎL_ŶÌÑý|cT³#y·-t•‹ùìWòcîè(–üÁW½dG™ëëÛà~BãÉ9{s‹òvÑüˆ5D‘¨ Ö2­ÙKmœkóÏlßkon¤OÝúàL˜+ÙÈïgdníý€€=¬÷áÙ¢,(¨R€‚ºŠ€Ã˜Sÿ¶ãúõãÀ•—#y1õø,*1 ’€[ýæäb…ÂØÕµÜ€ØÊ(m?ÓõŠŽM}êŠYÛ'}? -îö(_/à±êÁ°ÍÛD–úåglÿü¥í| ²øµlÛå/L ÿÁ7£(p˜á±‹±·s‚%1=„]Ö +•åVLZv¨ëᆶ;kT•8T9ŸÚx‰Ûa^ZŸàÎ:Íãâ${½ü­¼4çFvÖYß„“†þ'=¶õÔ%£ú|&ñÏ{o¶\;1žzÑêpPÄe8ªêgUÅÝæ‘ñŸ °—ï+Ïyt¨7ù7¹ÌŽÌÞãnÏ$ùË`¦& ÖD´ ,lW8à h?ܔȼ¶î¢öÙ¡Yª´çÌ–-È«F7Eu¢DŠªÞqµ¥éÎ:m·ãÕ¹òó²G²ºÝ=uU‰¯Ý9«UŽ¡åµøÓœÏ§¾æKNÏzùUs”ß¾ÞRe/ásM¨O¶{›¬“Hr>!†'â+s„!PÜ`Ѻjû×â¿~Ó¶J'ÞÕ*‰]yc;_®A8èŽUÊD”ÿ¤‘º#qê9–RM£)ÜT3·#ÿ°d‚t…`Ž?ŒHÚŽäßa’:Êk"­È'Ýä<ýrpêctqú±a¢÷ÚQÜÀËg©æ÷Hô&ïÊ–ëPÙåÉuùÅ`É!ž€:ëÚC_/M°äoÍ™2Ù{x“µcŽÐGD¹œqºžHçÇïX&·Q»ÈCÌ‘‡2ƒñ.yžNRh!¯¦Í^ç:?ºõê„Vüì}9ô“2?ä¾ãñ½Á™l¾õ{O}ú¦w·¿>òÉü£ w°¹´ÍéÊ»BvÎùÓq#'{S«J±1£øsš*{üζ9ë<¹ð¬§ |øeî Þ¡{«lg`åsiõ¸Ñ­lÔX&«7›§‹w˜ÞHƒO”ÔIOí/L&¨½JÕƒýgM +endstream +endobj +24 0 obj +<< +/Type /Metadata +/Subtype /XML +/Length 1463 +>> +stream + + + + + +True + + + + + + + + + + + +endstream +endobj +25 0 obj +[ 226 0 0 0 0 0 0 0 0 0 0 0 0 306 252 386 507 507 507 507 507 507 507 507 507 507 268 0 0 0 0 0 0 579 544 0 615 488 459 0 0 252 0 0 0 855 646 662 517 0 543 459 487 642 567 0 0 0 468 0 0 0 0 0 0 479 0 423 0 498 0 471 0 230 0 0 0 799 0 527 525 0 0 391 335 525 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 339 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 498 ] +endobj +26 0 obj +<< +/Type /Font +/Subtype /TrueType +/Name /F4 +/BaseFont /BCDHEE+Calibri-Italic +/Encoding /WinAnsiEncoding +/FontDescriptor 27 0 R +/FirstChar 32 +/LastChar 234 +/Widths 30 0 R +>> +endobj +27 0 obj +<< +/Type /FontDescriptor +/FontName /BCDHEE+Calibri-Italic +/Flags 32 +/ItalicAngle -11 +/Ascent 750 +/Descent -250 +/CapHeight 750 +/AvgWidth 521 +/MaxWidth 1984 +/FontWeight 400 +/XHeight 250 +/StemV 52 +/FontBBox [ -725 -250 1260 750 ] +/FontFile2 28 0 R +>> +endobj +28 0 obj +<< +/Metadata 29 0 R +/Filter /FlateDecode +/Length1 151560 +/Length 66373 +>> +stream +xœì} |SUöÿ¹ï½,ÍÖ¤mÒ´¡MÒ4m1-ÊÒ²5”¶PÖnÁZºP´´A+*`—qGÑqÜÐ1 .PQÇQÔqÜÆÇmëîè 4ÿsßIº@Aœ™ßÌü?ÓCN¾÷ž{ι瞻½W>``Ä/ jJŠŠ«M}Å Bb1@òÕ%E³§ÝÚsó6 7¨ï˜W•;zÓÆî`ÛЪ¦nEíªý;žÚ +PäPBÝÚ5޽ç<ÿ4@㵊„ÆUËV<ܵîe€Ø®O_Ö¼¾ñÙóSÿ pÆÝÀf?ßÔP[ÿ·Î O¡?úׄýVÖ±HoZ±fÝ‚wªÁúŸ¼ó›WÖÕžb_ÖµÀÝ´¢vݪ”ãx{ê;V4¬©½åg‡ÏaÔ[X_wf튆WÕû3€½ýÀÈŸ¯ZÙº&l„-8ž\UKê ÞíÆ¢¯À4 +x.”Þ«¿bξ%±“¾$5pz诟ãøZÙºäÃcŽ<«IPb‰}°š‡ÇÖb;°ë¡é×q¸Ýð2ðþhi„\ÀÌi&b¿"¶Š’‡]Ž-jÅuŠÓàÊ“î¯;^úÝ÷cöâ×á9ŸlrŸ”‰»`ù1¾P&5Àì²v˜EdÇqã(‡éÒf8㘾ÖÂôh™}ÒWŒ°Ýt¼6áÅq4)•P*­‡ÒÁÚ¤ë æDýMâãŸt ÔˆŒU,ì=!Ú }@Ÿ¦“Tþ\ø ñ<[~„¤¨à|²ýEl&‹ÕçXîeªR’+¾€Ùœö-¾Y ˆÑò`$¬OV^ž¬~4ÎgïÃCØö˜p!§¼ 7 š7'0´M‚áç„{ÂÏo†Ÿn D}#Ú*„÷Âãüx0[á`bßÀH¡2ü‘P~[˜~]( ¿+T€$äƒN85ü¡0'ü)ê]‰z!¡š„2ÌåLX ”B-êmA½K…Sa™0V =žÌ:8)º VÆó îŸõ5DCô¿FÒcÐ(¾Âjp"Ÿ>Øûí¿Š„o Jøö +ßóâ,Ø#Ü!s—X ¯ˆ áqv½ɺ á7Ò +xXlƒ‡ŸÅ÷,ùç_ˆûñNnÅ3d¯˜ûD|Ökó(¼ñû Ñ Ñ Ñ Ñ Ñý{Hy8Õ‚SÚNåùX~Ë“ÀþcvQåÚ×=žÎÑýp=éƒ>™Êþ㾇hˆþ¯ˆ¿SˈïÕ£ïÕrùGÞ«e|·–åø~-¿[GÞ«ÿý#¢!¢!¢!¢!¢!¢!¢7 ±|ä³þÓq Ñ ѱĮûOG0DC4DC4DC4DC4Dÿc$Fxý{Bœü‰ý •àÄaI.pC&L€2(‡ù€å°ÖÃN¸îƒ=p>†¿°QÂS)Ù)#RF¥ŒM™2)eªý3ûGŒÃè(v¬r¬w\ä¸ÛýÜ÷R8,÷®‡ì3{™} šaì3ñùç^Ÿ#SòRòÑç”>×8Ε}údáo0öqeïøœü‹Í × Oâ@§àFÀxõ׃ýÿ|²ó“+ºW¼¿ôýÞßòþ€?~—ÿ±œ“Èïá–cdô;Ú—ÀïwŸtž·Éß×òl‹3ÅŸ‹Š>±Eô‹Íâ'b·ø©ø™ø¹ø…ø¥ø•øµøxª¸$0aÞ­83r†ra +C Ì‚Sa,†zh‚VÖÍËŒ,™¥²,VΰEl%kckÙ&v»˜]Â.g׳ûÙ~ñ;ñïìKvHRHJI%©¥I#i%¤— ÌÃF°é,ŸÍ%“‹¾Œ½‘߈ô÷âhBß8q> +°rM´ñÄãîs2h8õeúò ·lÄ ™‘åƒfåO±§O8(±·dfüvþH÷òå?bÕK≛¥,ñ6¹œÍ“wÊÙ·C»þw»7°åÂ5­-«W­X^á/)¶9YÓd_Aå´ JöåXÎc†‹Ùû;.é2ÂÒ®ÞU_{š?(Ö¢Q‡XÒѱ5hò‡»ŠƒÃ7|`Å!7³]Å%A ͪìí€n£ËÑñ `ð®îOJj#¥Ûø ð"boš°=ZŒ #Äñ9<–‹»¼°+Áö +?Õ°Ôo®'jxËþh‹ÙÇ[Ú£-½æ5.'Ÿª’šÈgm“5ؾԑ“Ù—?nü`»#(fÔ,­kâXÛÐá*.¦¼UûƒÞb,xk#c-陋úµ58ˆå< þ`®kU0ÁUD +(pð9X^å—M"fÁ„iA¨©‹XsKŠy\Ž’Žšb +ûrUø÷@^øPç‡mwŒ#h™†“’QÒá¯o Úklõ¸>~›3è `ú.C€Ï’Ë~»sÊ=ÊV8¶£´£Ê|ä*·Úálb€Ï +¥øå*š„ Fœ.¹Êg´h’ÃÏlUÃ^"¼4ÀVD÷´¼Iä¦ÓfØœ'Ñ B²EbR¸ƒê~¾Œ(è‰ú9nh¤Íî(i(îà§ŠH€oƒÇ)ð\D:F 5ŸÎÑ&Ñ;eº‘E|­Ž ”;ü®WÀ…kÈ[îçcã¹–çwV•kVÅ¿<Û‘UR= FíùT ‚›£a®ÁR-:­r}º\ï­Î8ª¹,ÚìâqutÔw‚èæKÙÖÉä‚bÚÅà³0œl~èvÔ¸ð Æã£½&r—Ž®p¸Úï,Ñ­Õk‚1#Ð!~xY;‚Ÿ9 +·* àåÚÖˆöm j1¢Œ~©Œ`v°©ŒÇ‚Ÿ­*W}Œ»©è‚J×:<:yв'6õî²Z¼ÝÈ^‹W~ÔXÍAmÄÇ’ªøÈu˜w<ºÂ·»Ö;ûžüöãël{p£B ãhAp¡''[}´T/‹;:ÔúÁ (_j}/ÊBÁ]ÇoD¾àäõæšÙ)ÌõÈÈdì˜é»CpsÆG7ŽÓQàZl¹|ŠW‰õSâ´ì¼Ã81Zc‘McGpÙÀjSoµ”3>ºGÐÓ‚Ÿ²¸JN·›qMFUø\8:F×ÿ’§s®Áééݸðq½ñíÒ^çð/ÅeŽKk:J;øÃi]m$a‘ž‚gz¸ÄÁpÙ #>œ`{¹£&à¨Á‡RVáw:m¸ø„êªå—@9§|üRÛÁ7à3JÀTá•ÔXÛàrâÝägeŸÇ(E6 Ø::\AyÇ–¢2ºÏÀ WÆ?«<®ÚþðÜÈŸdÛR WÎ÷f+qá.n@±œKLzKùW]4_TãÁL˜:â:xø.Â{Cʨ›_ƒ—¿‹òT×Ú°†I(ãµ:"Å7W¤ÅÏ£Yáé\¤r÷IäÏJ)«e¯Y¥?XU‘w/¬ö…Ä|läƒg• üÑJäÍe˜^/®*·v…jdzdû2nj‹N™¡D¾=";«÷ž‰Þ@§Ù0§Ç•wƈ]†Pê{—°ž`](U‹pÁÚPê„6‚5¤ÒJˆÐJ„°š`ÁÊPêd„3 VA3Á!|‡îN'XJ)Bh +¥LCXFÐHÐ@POPGKÉ – †Ú–, +AXDpÁB‚?Á©ó |Õ•åó憆#Ì¡Úl‚Y3 ÊfL'(%(!(Ùʦ…l3ЦxC¶Y…SB¶Ù“ &L$˜@PEP@>ó Æ“³qc ÆÏ<‚Ñd7Š`$A.Á‚r–Mæ²;…Ú†dd’f› Ò \d—FšN • %”<a-”<!™ ‰ÀJm‰š â©-ŽÀDB#Õb $Ôè´‚˜PR9‚:”T "P($R©&0… zŽÈìª}Op˜àïß|Kð·µ +ႯCÖj„¯¾$ø‚àsRùŒàSv|BðW‚¿ÊŸ þDð1µ}Dð!Áï“Ê Þ#á!‚w Þ!x;”8á-‚7C‰§"¼Að¾Nð _%x…àe‚ß“ÊKTûÕ^$x„Ï$xŽàY‚ß’æ3¿!áÓO‚G !x˜à!‚½d·‡ ‹„<@p?Á}» Bd¤Xî¥Ú¯ î!•» vÜEp'Ádw;ÜFÂ_ÜJðK‚[n&ØIpÁ!óR„_Ü2×!ì™ë®™® ™®%ø9Á5W\Ep%ÁÏBæZ„+Èçåäó2òy)Ávr} \LÐAš‘ʶه°•œm!g\@šç“—Íd~A;Á¹çl"ØHp6Á†Ïd¶žzXG®Ï"XK=´Q,kZ©¿2_M°Š`%Á™+š Π¡œNý-'h +™Ç!,#h %lFh%ðµ[J8¡.”Àí–’°6”àE¨!á.%œƒ°(”p>Âi¡„ †âñf Bñ©(^ƒp*ÁüP<^óÌŠÇûUTT†âñšg¡x¼ØY9Á¼Pzn(®aÁlÎ"˜IÂ2‚ÓCqxo²RR)!a1Á´i:BQÈÄ7åÔÉà ™…!Ó„)“C&¾Z'L$˜@P2yòC¦l„ñ!SÂ8‚±!ïh u”G0:dâE02dâ‰Ì%A±ädSH +é‚áRA&‘Aà&H'p‘Ai:)$a§þR RHsÌ“ ’¬¤™H`¡Í g6ËœêR ‹ G•Çj·¸2JcÍ,Öl7 %Ÿ™Ù™ƒ1`FQ:÷1³½T|˜ñ¿ïSc—wVWy<³ºTáÊYAuù ÛtWñooÅ‚ r[| ú;»4 ÿ´1˜À\,×/ܾ½ÓŠ ¥hV0¥ÊwîL) +Ì +¶ó²×+—ü ¨¹Òi¢€gqk[«Çï¢Ó!Óç&Ñ¼Ïø‚Qˆe±±áXÁ‹Ã‰5Ø ÿ +D¯aÔøÒX½]/ð¯°^´xõ(á#ÎÔ•W—ÆjíZÁW¨§¼ÚÂi¥^mÎÈÒ#—{ô¬YŒ_‹[×xäÖX¯{¸˜Z×`ÿi“ëà9!‘Â’V¤5Qáš[ýKì?À9Y—,–ÿê[u#@ÏÀÿ£N‡VhÇ?[`;\ ûàMX +çcé:Ø ·Á„Çàxí¤ÿ–ý$¨g½bèÄA ñáÃáîžÛ»†~’+±/9ú$acøÓ£dŸö\6öt)ã@#Ûê…—Pú;>,òzx¯ [±+[|¡º±çÞžÛ„3fC5ø`>œ +˜s‘Ë¡æÀ"XµPõа š`9æë h†p&r#¬„U°Z0‡k  ÖbyMDBõu°6À¦ž ±¼¿7È¥sà\Ìüy½¸¹û$çÃ…Èà÷Ø +Ûà"Dþ=P6°ÖÃ%8Ÿ—Âe½åË•òòåp5òð3œõ«°|-Îýõ°n¥WÂ5ðs¹vÜ‚í× Ðåm}ú¿€Qk'ÜŒš¿ÄÕsûQº\ó&xÁ5õ<Š«m–‡=X~Þ…Cð| ‚?3Ǧ×ð5¼€ÙoĬ󜯒¿—ã÷²ÞŒŸ…¹föÌØÀ<¬´Q>7Ëyж…š[q66÷³éç)ê‹kG}õÏQŸŒFxe¯¤oÜ­H¯ÎfðzY2°õèÌö/ß|Ü–_¯oÅo>G×¢¥;p‡s¾ vÁÝX¢ï¾z´tüîų vÃýð<]½õû°Ö×’%QÁå{á!yìƒýòü?dÙ>,퉴ì•ËÃÓx += ÏÁAx×ÎÓ2? Ïãúø¼„§Ö[ðNd½*¯ óÀ‹ð;)^W˜BÜ saÖ_®Ã™Å`ÀG èißÀÓCL”O¶à…ÿý9–‹zÒT ë†2P±zÀÁ.5>›Ô{ã$Á=^)VØô¦U¬¢X%TCáÛï¼½è·"d¹ow¿Úm<òjw\AAnî(|Ä2D PÛ‹êÖÂd4ˆè`&§I惠R)•®´ÂøñãÆååž"Œ3Bp¥3ÆŽ™"ŒŸ"æNdUÒ”¥¨Ì¥â?,çQ +gÛKΜ›.Øm†‚9öDõäy#âcc³²¼¹v•F)(ÔJõð ÅiÅ‹'$÷Ü/ª´*ÃbI6($•NãHŠO2H=¥ +Ãá/†ï§IÍß_%޳¬rœâZZ”ʇm‰î‰¥Î$#>6Þ¨3(â-qJU|œ6còÌ#«“UJgÔÄX­uŒF©3É!üÛða)S‘i?ð|ï6 ç€ßÃæ|~ï«1žÍqëôéz½%C«qi\iÖôt ³¤»2ÜÝ^-VÅžY¤,Ð1‹¨ÓÅ¥TÆù¾,µ°°0® –,^äI,ˆK,ÈKžÓ=Ú”ÇrŒ.HÊÍËË3nÚzà€‰åFd›×ù»52`óC{»»¹Ÿƒ>ÓèØ<äŒ=hŠÓî¶ðY!dŠNÑ âüfŒÏhzU.æ”ÒE1>+Íâ0©ÙÈ#Þ©Ð'ºm©é¥V¸EeLÎJqOÒ—±ž[ØþÉ›AUº6±ç7½ZTl)¤5¨EQ«Ý~äl\åÕü±Áõž +¿=6÷{ [¿[£1C—ï5ÚG¹-fEF·Åžl9ÒäæïËÉ£ð%z·×TÍÓ‚i(Äuž[€k½»€å>5:ïånSAn7_öÚŸ`*gÒ ™ÑÝ1Iæ6÷5'W˜d«f´êK&þ‰˜z +øâ»!U4'$—3-c|Í9ÆmîY4¦bé‘?V-ìÉÏÓˆo2­áÏ¥õŠTȇŽÍóî”0v ¾r¤d)ÙÃ@3¦ÊÜŲw{³æ÷fÇÄ–Û} €#÷ÿ¸.Ïâ²Ú®w_ó˜ª,Y³5dOV—3G‡ž0’9!Uà ÊmÁLª#g‹Ä×£´Þ¨7dxfWw¬¬?,kö™¥sWWŒ3i5¢¤Pǘ§Õ®/n¼µµ0knÛŽÇ×”» Kê0OIw{Ü…g\rÝ ¥å›æg»<.£O‰äÄø„LWÒä³:[—<óèç–9GgâëÇÕù$®N+d•ƒ­MÆ{c’vc¬16Fþ‰N|…£‹¥ïöÆô_QÑeˆ)Û}bEž®ûP%žëÜ×_#k5dzÔ"‹L‰« æc——$=—9%ÐvM×y=ïéJÅGªÜTfºúÀùSî¿hõ}Ï„6ÜzŽ??Yœ4uûömg7Í>Ee´%ð%T¸îžM37ò~0MlØrÕ\;<ÌDüeóÑc¶¨-uVf²>Y™8ÓÌ—åÉÌ +š˜?7 øJnvªù¸=„Ý^'›v?ÆV{pótã±È×ó%Ÿ‹˜²=ó»ãùì4ËñÄ4£4ó¨åÔz*œ²e³sÐ]ì¡ôâæòâPêK¹„·¹JgÒô¨*ÙnN”ÔZ£¦gîbAÔè¹åÈÏ´æX¥âcÕÈD¡!QêV˜­Éf}Ïé¸ðÌIÖx}Ï(£Ii±&™u*“-ž§ó]>,ò÷‹Lxu|ä|«-N‡^ÂçL·8²Àl4ï7‹nL ‡™q¿7½ÂF·®°è}QM4¦9otÿ4ÿ~z3¬ðjš¹1š¤Ë6ͲM¿ëFNíñr˯›Þ¬ZÄO™BuO¦Ÿí×iªLmfZsZR’3N)|ÎóYbˆ‘>Q&$%[ô=3L±jsbr‚þȇjJ¹WK¿Î´Çc6Ï *…(ešc³yß)žl°u±Ïîχ⻄ñx¬*•U÷Ë/d2Ñ;Ì–= ذa Ä1Þ*kóìöŽé=ëð +ÍÍÍÅÌØmä—M\‘Æ—»7m5Èé½ÿŸv)¥²¯Žÿ¨¼yXfú16ð3FvÔ1&Æ•n›Öþ@ë/ì½±¥(ÉuŠ%h_H_â“Zî Ïi—NŸ†¬‰éZrÝšÄS*Ó]xïxS¼Z«;7MJIÔÈÿ)Ë=NHžsä@!Ë}ñ±Ñy|ƒ0kÿ½²ûŸs+ŸòèB'ûHlîïãÄj< +ùsZt·ôízJS‰ÎÞÒw‚ÖìL¶:â•bË‘Ý-‚Æ’fMvàÖùŽé,Î$«3NÁ– ³›˜Ö"«)„$m•Pxä±hYz+Z:òw|ˆ”i.Øaœ 34 2±fÐjÌZÐH +ce$8¼ óFËbǶÉO\ýåý2€ÍýÇ# ¾wTz‹ÓʇÛ7޾ØéÆ; Ú‰WoM2€^o5ˆêøÊ¤.6|·W]Ýo3²ÜƒùƒÇבiWË +Íêê£7"Gß-Ò;oxè1QÁßNŽ<¡3ã}ýNSšÕÊ»wÙ‹zm«Â’œl1ȷĽÑq}¿3.²/”ð¾˜ÝƒŒ­(Û™ 1">4æGŽFct\–ÃFæ°Ø¦sr&äêŒǘŠ9úxÐX9:sBv®s‚Á–G¸±w)óèMy¸+ò<Øhþú‚ {Ñ"“§ÀškÂG|‰1åá¿ø§œ´G9q'Vï¿"Vý„‹ñ§ÆŒLÑÕGÈ/.ñy,RT)~/hpé;âÂ{‘yêS²†§±×°Lb“Bè–â¬6C½Ã“b”RE±©îœa-±V“Bê[V˾¿Ú Õáèµ½²ÛRãcôÉYÃ~ˆ·Û2m†˜øsdn) +Ld[™›TmN•2‘ ¨'NÌ2íÞ„Ôq•±Æœ¬ì¬®ðç»SÓgpôZ5æF#ÖŒF,xÉÀKžˆ’ŒXÏŽÔ9zÓP åªZ®šÊ´Ùƒ1Ë>q”.)­"ɧ¬ŽS‰~ŽoòäÑT'Äw×q¢—,ý”ü†i{ð¿$:yÙØä`²µp„ò5Ó·jè57##Ó…×\ÿ§Z3KbÞ¸q½ÛSÊã“õS“ÓmfÝWI£}ªñ~À&&Ú +áSu^ò‹?¬½ ÕΟŸ!V†4 •X,¡´6€â*-ÎÎWQØ,ö¢HBUˆÐãqº.,ááÊ™–E%ShàdÂ9§-3R©°Ð†awB®¹Á¿a¡òU‰•êIÝ —·ˆ…Þ)9-JbZ œSbË"§$It.Ô ._’”[­`ÀãPéÙÄ3Þ(Ý—¦`ë–*øã ú攌¢ n¸ªne½³ apx¨¡ íΗ·Ö­Ž[qŠV(YM´}MSÛæî€¿~pÑ@}Aýö§Ç¢#m¥Z†ø. Þj·úÂ…M•ÑÒX÷êÄâG·4œn«…2Z-¥Ëç*h^^VÔ\Y ?n쿲VcÊÓê`ä?ln°¹|dÛ‘ŸEƬguŒ^ª°³ÎæÒ4ˆ»ï½S¦yÚÍBŸK–Á8¥ODç\¿3=[`Ï +³…±ÖÖ—:òL*§aöüûÔQª;^Íáû•ñ'Ê`ÎÓ+?{j&R­ÑjhƒÕlPŠú0ˆLVK‡‘c <™)Œ¸]£‚ó!.ÎhP¸Ã ÈèA‘]p2Af—¸ R=p&]¨¯}¾ò5¹ç‘Ò‰"9¯ä…±[ Q2XfCûnóäÑmÞùÜ:—å)X …€ZèIA]¿©§ûöµ­8j€Ù¡ŽBÑÿµgjO}Ãm?Ü‹3šùüß–î_ZX¼ìîáÙcpö_y#± +Б 1囌FÎÀ™ö!ôšò3“S5@Ë”òi9ïJW’¡dÒãR£‘¢±QØÄw¸BfzGÓáÑÓØC±FRiô9œ^Å;2|â‡:3OàŒŠûìïˆÆL‡>ùOî׃'!-ðä\êd^¡Pº^ÅLà$VœÐ$”¾!ÉÃ(¥¢Ò‹IJ“QÖ°ù«+œ,wís?ÍV‚t„ÅŒe€P¦ªr“>I7b°¾„‚ŽþŽÂ5>O^¾ž%ÖimJÌÛüJmö:¼~¯D?Mågjôì}H[áÀ󧞬ßQ_{s-ºžS±8Ð/¨×°Ë§/_Ä~‰qºê(¡ÌGÌ&¯„ô’Wù*Fƒ¬ÃêZÄä÷}¬ðØac`\;IN‚çÙ‹Ý:ÛÐÆ¦/½Fοk‰ýĤ߲ž´~Þ÷±xÑá7²©Ÿ7½õƒǵ~·3_C¢¡TâRiöÙžæ±¥¶œžB ‡>ˆ¥þ„NÖ‚‡'ZÁœý *#Re3à?S¨hGŠC._–5@þó#w#B¡Áï®è}›p!$ˆTʾ%Áy£%ž’ƒÇzkB8 ¿DÂá4Þ÷œˆ·BÐDÑhTëyß2Vò¡v]ÖC¦;ÂÛäþ LOÎ\:s6”iæ$dÔûž8# ȱxÞ-cÚ’ÅYáLraºÉãŸáxféžoÛËÛ =ua‹%Ú¹foWêv;ó +UhAí};z NvL5ü¸z Ìœo*n.<Óú‡Ø²'>Pº¬+&PîòæPñ²–R›Ã…ŸpÛóÊû†JkR? Ôw§ú%ùÚÔ Om?´½õ—ÿŒ¿FD‘äq¨½“rK³%ÁëÁšhßÚü²/3W«VL˜á"ààú\¥É8Ìg(ŸÅÐ5‰v(Ds(¨J:%VL¡¬“bް9Ñ|ÁÖc†â¡²Ûøk8AqJšw• Ô5mZÒ6¸j—TÖ-k© É)u}£åK¬©p%Fï<¾Æ×R_¯Â§(½5Ï ²yle‹¶ìÞSÙ0Ú˜Ÿç²)•œÇçÖÙ¬Ú’ÕߨwâÉû×ײàŸR_q}ê°¤µeÈ›Pk¯ KÐ%„z$Þ©·”v×—–ÖwãZT$G þ¼yC@øÈR9…²/G,àåçÿQÄ×; N9Ê„|â¬>ÃRQ6îÈjcRªVÙ<øsˆ¶‰(ü´( Cé§EI¼Ê?)æ\ /0£c¹Z#gÕh¸¢¶IÚ”•û%6?Íðû Ð{&o«ÊQì5&£a}BÍr®ê¡RKyØ äFy¾è*Mv‡JiR)û'˜ãfžˆÉÕ‰Tï%x¦`ÿDÆÇ'"3ÏÒgOwvs ›cÓ[ëV?ðãC©‹ + Mò:`ûøî¿Ù\ý‚«M=øÔÁ‰;×¶é±§»¾yôÞñJe ñ–­9´!¶ºÍÿù‡Åýëwîøë…ÿ;x¢Bä6Éç¹X½1¿7ófÄÇþÙôéõ.æãà˜ác×|—ͽ3Ë%LzöÏ¢<6È|,Ç\†E×|§6—–1ä¾É¦fn‚™µŠMÖ£ë É€| õx+úm=|¯d.ý?^§$‰Wè ¦Q€Ù£ f£^‘ú…ƒÑ›ZEêoò(H|ñ´Ú¬êÐ\¾,?¿ ž€KÑ¿ ÿŠÀïïqãͧÐó.¨­v;nÚò#»$m9$m1.ƒÓÅóˆ“ýÄå18õz+óïž1kNÄ˪ÿ?‹Ùa@¯g?Ó#=Ì¿‹sÇ.H_-Ì^Ý€,TÑ®Ft“'A¥Á¤^,eÛf—@a¯SA#ú9”ÃÍ&Ÿ:å¢ &PÎ0-÷hüm·] žuãå‰.à™È3ðY_²A¶ûq‚ …‚4.;÷ºWaû0õûk£ Shü$$šàfƒZèÚ/Eç¹öpê0ôŸ•ýº)¦ùƒ å ¼ßö¡(K¢¡¨ˆ@V-vJ¬ˆš%ççÝ#aY^øJ¼Rz©Ð ¯DQ9\~F€bV¶O¶ôÝ>9Pe tmj/Ÿ,ŠŸåxJ¡U kÌFjˆ0 +Ýß]¼åÙí5=[~qÓâGV(ðïSz“Y«txì¡®ñw$Z7´ûôFÔ©Rq^—ÅmK­ÑÛh¿jò±Ñ‘g»sU…¿Ì"cˆèX9!a(—;Š ;‡$"aTD|ùfÂŽpJqÅDJæg$Òv<Ò wfI£S@/ 4‰_@âu0>rÍ ÞÞŠñbPЭH¹V@À™a³}–0ð-.B?̼±€šh 35}3ϼÇÿBÉï¨Ôô©Ì{Ygèk@g¤SÒ™1(8…CR3ž{ÿ2ÕS*U-Š+ž¬jÎã|"ñT؊ϺiÓü{ÞA¸|ãÈ{€wxzÌ/¤})vÜ¥ ‘3k‰Ù1«”8£·@»˜²Ù›>Ò7ôɹQájô v%^£HyоjI—ÄG¡/¡[xv¡³X *Éëý"óŸß)€;n•â{ÀŸÅ‘'¤;®@¸¸‚/QFK¢ÅæˆÉâ³z}^³IÁUŽ™”V/‡D¢3¯(.ñÅ5ÎÀ˜srzÒÕ£ôK(“_³ï$ræ‹ÉÊåZ25¤g~ã6h·:Ïò“™Ã(•ZEïDÃh¶kì§@;·™Ýìc¼ÅbR`´Z­aÆQVë4m@yMù.»Sø úý}ý½ù—^ËÖÓ•òúýƒCC!45cÊ ‡qe(•¸…ePWMh”Ø„F‰M`^ÒMáÎ5zNøÈ0 +iÀœu4`NŠôœ¸p¤1h­ºïå›W?:Vfƒw;×][zÊ_Ñ8´wEW“_ÙÔ¿{EOÀ~Ü|ìØ£;Ú"«¾¾¼ãÄÓ‡·5—ŽÞ?Yµ²Ñ[;º÷¶]áêùñoÙ· >ÌŽ‹r"EÈîL†ØÈËæ >Ìôú?2©®”%¼9‡%Hè™À‡³}ÿĹc¿hÓÃé Û'¾>r´ƒÍ'l>½N…\çò›ìÅ=Uö—J£ºbÝÃ÷õMÖçáîÂÑ•CuÞÔÃpžqš—æ™¢¹@ý`"Ú“djSIÏ ÒüÞ(Íoi’»§Œ~Ò&¼ +f7ŒTa§H¿‰Â ŠüD-øqÒdOßtfáÚÙ3—¦¥…iy§ÀŽ8%òH­ôfΠ™•idÖœ¤*™˜©3T8:èÙÜù·T/o +uÆ|jJ)(KF‹,Õ‰fôÀB°ÐæàaYӓǎă%v•ZÐúóuÆ’®2¥NEcWµeϾ›ÃÕËe ÜœÆÉc'ù¶ä1´êÃÄyžDLé@Ž!cï~ ÌÂÄžö !ñQá˜gRÈu˜g¥\R–«Â°áp6äx™äS²ºöØûb®¸ÂêĆ3s8ìÚ­àœþ˜»iuCa¥&€ŒÉo·:54ê£LºâñŒ3¤q÷S*dA±›C/é‚ ÑG[ïj_SgÇëâë7êU«‡’Ú<Íà±JÅ_B-kª‡ÿÓm·ÇZ ]ÚÔóþú>øm°—?Ä5ƒr'rV è*±Z¬õà…ø…ªfgÇo z€Æhþ“æ /»?D‹Ð¢R¸QÖ™¯Kg FÓ?í\æ"!@itÇoEº™ÿDlž(òJ1¼È Esd…§¥?‚öjô1‡^ fè FQ¬‚Rx+Û£E]åvOe{W[U~öÇWT¬ê,ÕÑ Hbyš6,¯«\RãŒ/[«šxpÄÓÑP¢#ð_€Äß((ŒyƼâw~IȈÔö•õß¹ª\°äé5e0›õ¼Íms–·øŠÊK[Vµ6ïZZÎë-zXÜû@n¾\'ÃèYY/ñ ôi«rÎqMàQ!³ðÞ;RÙ¹™B ¬¸ðé×`ðç$…Iýá$ÎÉ©&…L%y§YOaÿê?€7³EÇ~×LdÚ'¨TyfƒŠÑ€ç¸ Ä¡¥ b‘MÒs˜‚ˆä +Î;t‚#€ÔÑ#¹~nÞ‚5¨vÓ cB“;†´Ha‰\?7…[˜0æÐøýâ;OŒŽÉ3ß +Q—.;D÷9ÖîªY;ÓìC:8&(ºoâ¡ñŠÊÉoìÆ6fB쥇»/¿mbÛš•?? +²“˜Ôõ] Ÿõ4g4"&“Âü*Æ€cŒJp +û¸q~¦ Ÿ]­´a@Îߨ+œ¸@‹ß «šmñk)µ%àÌYô°£ë2Ûê. }ƒT½v‡”[鿊ÇfÌSw +æóoaøJVIË-~ôòû}ÿ!UO{eËö`qÄ‚(°ú„E¼¼™@-àeòÁFvQbö„ÖS¼ÖJjn©#=ß?ÊÛSÀüd왿Ú8‡:cz±xŽÎ4­³ú³½öŒ>˜oséü[©×)¥Ñ—ç jX zø§4&<ö|-}-¢@ ¶»ƒjVƒÙSNƒEMâ´’A¤D>½Úb@ÿ/: ûÛÀé1©¯£»X€hBeZAîZù=ЊY-aÙj†L‡‚W8Ç(˜•^“•¥´ãÔÜ:æœÂ ¹¡½æéW"0²¨¦ƒ&)qY=ïÒ¨6˜òm{ +E{!™csTàñMÍØ%ºëŸy°ôW <®¶a>5xù,þümÄÔ oÈœÎíØ³»X;ã˜B¿ +ä55ÌúüiDíGÁ•LaŽ„I‡°5v?…»;C¬]•çª^¼'³²"S…‹Œþñ,ôM°[*%Þ×1Pb|,³'ZCDk—ªò¼(›¹Q˜šÍp™MÙë[¦ôž%šÉYV³´ +/$¼!½UÄ+[Vm¯X_o2Dº7\¶ìöRáèó4ú÷‘M-•#Í%NµÂY®Ú2Ú¥µ* Yö;®žD¨zåκêCGniîhX¡Qá Oÿ[kkÙðÆí› =­1OøÈRPÓJš&÷`~“:^g÷Aý×£¿&·l¶ ù‡ùúOh‚Ýátyªªc¶˜M´Ô¼­XàbÕù]v¡ Ë¦„ÊÔ¦ê©=Ÿ {3¬ª¨³Ò œ9›éˆ©¦å_ZTšëõK‘—òÉç”]³GеçE0dvJÒp˳"aÔògØ'XCÑÒ["]=€ 2BgMà¿ùÝÆ#Ëï(Õb@9Œ…\­CK ¤J­¦4­«6W×.©õé™ïqöªâÊ­£Ý‚;"¶”·”ºlíÇlllI,T5YÍð°ÿ,`³µºªDëén¹*Z:Ú óÚjƒõ›<ÓÚX·m;°÷0+Kð· +ä•lÂfC8 ö@ù§'‰’ܹH—ë\±h,‡[ô¾´þ@F—gR›Y¶ÅöE‡Jê7‘埊d„;'Fº,®s¢Å§¿(úr/g?élr¶]gÌ¡bü3LÌZ¥ãUŽ’îxbmgÔ¡\¾¬qUcHð«4×ö¯,ùïÇ ¥}Û®t5VØi¼Oëwí^GÅbqó:ÿº ® K­â݇Åk×xºîáÃ÷oL(n«´zµ'uXÒã0ò´\« ¢ßI(cHE¬-VTkÃ…|¨HÞóF}ɹ€&ä +a!ß§WÑ«þ41¢Æ¼s\WÖó¥3Em,ýf–qÑfØg}Ïb}¨äœªð}*BaFõ§¢‘Ë;'æƒÊÝtšYñû³˜•…uwub¥pò–le]MµÍ[bj–uÆË §BQ‘æTT$Îj¿y(K‘Š+ª<è%âW¦SdS¿%oA¢ˆ·,ŠáT(\x°ð`Õm ­U…k+·êìZÇR8 š­UñäA­Cg¯,¤Kö·ON¡BÂÐŒºF±ÑM{zW\ÜÔ[ÒC†9sÏà»vù/äèólYDâÄäV´&=W¦ØÙRJß)ÕüúͲ÷Þ;óNŽ/’BcÕþxR̺ø¨tu¯8º¢§é¢.½iÅEqæâ»?wíâüæLhY$,߀ԻÖLKq!\*§…²³e@κÐ̦×ÙcR§å¹&D&“é™3ƒ ¢‰· ‹"5Í+·Ô$–Ǭ4³mp_…n!ÞvVlþj®O6[œ‰ã]Ü¢M µA§…ŠU:ŠÛ«g±“쌒ÕÔöIvYÒ#>¸ÜR¤UpB°eÝÁ +:ª|aø­•QÉÃù——{[<—~™Y}ŠZÍö¨G_¿éÈâÔ¶Ìaâ7íX(j1Ò$ö&Âî±Ïƒ#ÈfþÐ#÷­o i]‘-` +æ!Ž$9:ƒ9šÜ‚’W#¾‚´¡¿J¸¡ýw#w®^´z²úî–¢ø}BQ‘p~w|Ë–¥’ðÅ‘ÑýÉCÆ1äËû@Õ8|¨žJô®;¿»—Jö¶ù.Veûº³EÂÌô™R™†ÕÀ2HÞ “¦aµ±*H“Ýí)=´?)J—jÌû@̺ØîuçÅݽàzbo[•ï¢X•×ÂRPk˜ž.•‰Y¹’‚0ÊEÍÂþc.jÒo $é²ô–)NQ J゙a\ʈ$ÞÙT¿¸Âl6P­ÔóJ{Ñu¦XÐkýu#;:=F‘Â?«YŒb95û/c8.±8 ,ÅÓŒ+1UUça‰Oìâ9’×)o!8SHèJD;†ýEÍZÍ ~—á: â-óöwT¹ï¸ÕTn6ÂnFKq†r¡,Âr¬B­t:ÌÀg*(sYo%ow¹TèE¥NåsåH"¡ê”•<™æ–Í›voªïê®ë®ÛݽiwÞ«èw)AßMèöß_ü þÌýÛ·ßÿ Nx7-[Öô„WXã}ðøƒÇ|C»Ø]€¢üÆ ¿l°Æ…šŒWG¾ª¼©/ØuŹ+íߨ’¨&héØ¿6îjXQ[R÷!ºH²Š@ËÒÒ`“ñjV¡vÙôXºò"bä&¤iX¨òJp|ð!›_Ñk5äâmà Ë ”*zÁÖŸ[5A˜È½]LÈTÊ;–ë*Ë@Îé¶èÑÖ¥Š/Xv¥‡Í«¼fúk¦™]™ÒKîÆàE¸7d°jHÌ%U^5#5>mŒvo8°4ÜS_n˜@9=˜N-‰¥ÞXÅâ–—¦©3»üú[wwCÐYÞÚÙåŒ?ôðM:w±MÑJ¸ZOI_ZÓÚQ2´aÛæâÕëj7<2µÞ 2û'A½[ŒÔ"¯Í×úË¡Ò*Š@Ø)L•`=ïÀõzOd +S& ˆ‡z­ª*ä¾ôÝPÿO GoÖ"ij"ga©%¼ Ò5I–î:FIZ7WQ¯‰éSC¥ïŠ¡.ÿO¢cNôI™Ið=W¶ã4/#Y/-õŠŸLÜwæÈš\»%1ÑeY–`” _7úȽõ¡¦Áª²†¢žñjkQ-\Ý!iYªuÒªOP2ÿ8…~ºd —ë@•P²ÔÅÈôÕ–Ö!8_EÿˆÔ úÇ„§³¶#ÑY“è4;5â“}íŽÚdÓ«íè¨L&¼ýõNKmQX!ȹ€´“MÞt+Ï̵‡ÊÓÇ'EpfGmR”ÏõV&Eo®“ž–šª sÖI`ÙWŠü³‰¢Ü•Ìde3^Úˆ—€$á(Ú`ó›Âu……ð–BIP¬BE¿ýœÞÜZ£ R§M+ÕM¨.lçOÜÁIª•Ü>‹¦vñ–fc4J Ь"ƒIÏ3,c­Ž-W +³É á>ÿîðÞÁEò¡ƒ'à8N¨ÁK•ZµŠÛ†ö,O‘ZƒóDU‚yº9ŠæIk5~®` +}!‰ìœ\wÓº®z»×ÕÝ-‰ ààÜò@dxS¤ Aš"7‰ë(Û’» C+¶Á3Ë¢ T'÷´wM&ëwv¬Iô‡z"þj(ÃCç=½_»`è"Û²ýNÚ]ŸpU†Üá8›‰Ã‘œN‡þv/jf3À ªfo`OuR·°s2)‚›X“³oÃóÐyÑÓkøÚqî­¤] œýt»c^ÃÝ%ÆÌ7aüuAçöK^ÞÒ'mJ" Õ¬i[¹)^³¤Vrª=Œ,»³LCôyjýwŒ¥h[¸6и¤Ú­¦JØÖW1S× ®†±CkŒ µQ +ÇÑÿÍÚ«‹«`1“_¼¹¥lqs©[ {K.ÔmqÈ]™Ö†A-?à š£ÿ:\*@Ù|Éû7u›Ž¤û7Û·ÉHe¶’»‘׿G¥•d'tî†^drýã©›\…΢WÑ‹HâDÿxúèó'ßz›ø÷*ú9" ßC?K”_5°dÝÎɸxÓ¡=@ÃUÞvõj…ãÍUwõ +Ç Þ£wuTTsÈ’Ÿ@TW!ÜÛo$èé S]ÛÖ½®¨Ã =NX“O´Jîiëê,œL>zÄ%½9YÚ§êyç<[ÕH9'ï%ðgìsažöhÒö\ðî‚”þ¤}œ)ãê²<^‹|oSÓÄœ»{šŸhßsؼChÒ=ÊvPÚœá}ÒïÌoòI®o`ÜéŒ-,Øô»:äsï¾~K0ä8[÷ì¦k6™­rº±ìÎ-^Ú‰¿` ÅäJváâ…)žÇ)–Wѯ×Å—lk/íä9 ºaPøZ\ú`m¡:µñúŒÆ$Ô,ÞÒbŒ]IÍúwca]Ø©P£š…úµA£ŠP8eÌ™Ä`³S2çÍ19Gúc¯Š€,Ø[T„öVæÖdš­ R³“x•ììWÌÕ¯Vܳ$ V2:RgÑ›¤)kùP5^¼ µU×ÎZÛÖE{rà@$1ë2‘¤Úa@²C`ìW°øÂyö‰^v¦“}>"Ws'÷×Þ]÷*ú2‚Ü ¬s\ù‘¸ò{ïmêÇ;F–Ž­Üà­ˆÉñ}5ñ{¶àï5ެo¿×h¼w{||å ̹nÄ'šøäö}É mµ5Ž¥É{ökÇ:†’MýIoßœÊ.×ÊÐH–yɆÿ2Ik²¨°|½ C8оa_R”®9¶4)JWmJŠMýÞ +.ôÍ©ér­æÚiÃÕ-ÄøÅ „܈’$D¡Þî3‡ëC^x[Ï)”ÌÛ'´5‹·µ—uòlàÃÅñÔÆg´µ‹·¶—t* ~ÊѪR|Æ=óEà^3¼¥5ý9Y a¥U2×ÙŸ®¼gq@£$T¡…Ÿh­åƒÕx͵»wÑÞÌ'ræI@FsXÞÏ”ðÙÔøýD¾éƒ]··5ߨCtD“ÛÛ›F“•bÇòdG~›Seå i–$/Q$KyÐtAœ•³=š$qTùb&. m6Èr£×èV~ÉTbžŸÄ(MoC9ƒÛdù¾™¤ù¼°«b“Ü®„ 7ê+Í!°¹Ù‹Ð²rsMbyµ{ﺺ—_6‰˜u^ë³[§2B˜à©~ƒü !e`nß‚ùe×km«›o»!ð +5M¾Ø~"ùPÛèMû’Ï}§òþŽ[’ýË’} àeáÐqÓ Ëþ%ÀM¶ôr^lèDR”®p?ð2Ò5&nIŠýË’æ_çªùË ê¿ RcÌCË s [ÁÌäÊ ó~œ5¤æs£5@ p^ Z_Õy}UѺn,7Z[ͳÑ: ߨõÂ÷K‡ë\Áp‹x)w&†â—#›é{MN Æád¢}ÃÚžFãuqr9ï$ý¹¨ƒÐÈÖü.ówy œNЉöQi¼I'4êxqR„2Œ¤8W +.À­Uó‹Ùïû rÊÿ˜Ë¬ ’?Æ“'ÏÏ:´§® ¶ÞÜb*ôZI’À’QP´Öâ6k‚ RÇî&5¶Ýá0’ÒØ‚‡W‹á§m¦ÏÍÌ7n¸ö$¦ãG‘—&‘¢%·…]Ž3ùm6Ÿ…e-¾teþ ˜³Ç‘ï!/K~Êp8yWßM=èmöÇj<9ØÞ’Œ¶= g@{,ôø­{GrcwW¨Ãœ¤r»Ýiç$ObÆAIŒõ]‡“â¬ÌÁñ¤8ØmIŠÑ¶c’`³x,”€¢Cޤ( §ÌI‘šÓ'‘}Rzv3ŽifÙË—ó$s>X4¹Òs!~ÿ«ò5@ +DEb(³,ø c(²óFç øó³~ìÉÔÆ«x,¼• Š|Z”¤„¼ÃîxúRn`¶L:e[yæ”^É¡OÍ… )‰¥ —GÊ{·FÛKßå…¤7Áâ•ÁEížÆ¤©·£&ìÇçº È« ±°)v 9s6Üñæãù¥ïŠü"¤Ï32z“"¬IŠsåÈÙ“,'ŒLƒCY}é¯,Oê!‚!‹KøOË€¬‚ZúZ†é¯*§Iç¹ÿpB^‡‘(8ÖÖ佡ýÕ.$i¿'¹­­1á¹1yð€i#H(ÚûãÉ`ßÜIš—¸ÀY*™•ô˜§GÚ·Ý“%ioLŠ’¼v¡´÷ã`Âúæ¯Ûš“¤\÷Œýçå!ä׈4Ãó2ŒkõÂŽ¯²°p†©¯$gø%~ÚÚ?Öþ5䨼¯uß¾‘mÉUíE…Lw²«¸Œ »÷ß²k¤£5YÖ¯>ïžKÛÃhÒ÷ÈxÒÊ‹¢@ȪmIQ3Ò³•µ&Ų~·ú¼èžKÈÏ“„ÍnѸ*Íù¥Q#á’ø 'AÞÉþó8A…Jó +ì†e¡Æw8büÿ¼} x[Õ™èÝw-WWºÚ÷}·-Y²¼Ê‰ÛJ'8+!$Êz³8 ²„¡´L¡¦´CÙZ ´Óåë@(éú¦¦ïÍ Úeæ{LëRZfòx}Ógúâ¼sî•dIQBRÚ‡ùbùêœsÏùÏþýÿOqMщ‘$þ©…½dºOG<1TæA›œA[b åŒè’(oö«ÙWXò—¿ÿüÜ”çK;€4£â@  kôçMZ` ‚è7å*¥§»5ù±–S_μ𾙫ñÕß›{dìÞ¹›–-¯€ý»flÝ‹Ï}ÿ¯¿²o|ÛÜê©‘¹ÜÊ6˜ âÂìlêĥнµ¡ùÞœòÈØM÷Î)Õá÷]3§,¾`õ6 Lå€4’[ÙG’õ×$µ×hôæÀ•?=á9nÑÝ0ÈÀüjI&:!n©Žqžf|·z¦‹.ˆ[W.ìùÿ¢ó@©Æ’ŽzHªŠ˜ŒäÀïTS‹Ð„D*ñK{ÞˆùçÐt4‡®â2qh†vžË²dá~5þ¹Yâm¼ðº\¾¿`õ*·kÀ50-ü>ޏòýˆ‹ ‹ÞÕ9"T>ÙQ‰±¿3™¬+æC“ÖŸ•ɺ'Q­Q+C¨žrhbÌÁ¸‘ªJDsU=)ðG¨ú(ãÍÝ;Ê'0€‰ý†­˜WB“¤õg +ÙY‡JÖÜøªq€l‹Î…ÂùT»c;Ø:ýù¸Gü¬êß8\X?çįš±—_=äªZÞ[ƒ¬×-íò þîˆêåϬºq*æ·r’’e›Ä[²œÉnºÑ^>íZÃhï_Ý÷ö%a×]ÓÊÌÎtr<çPî_ øéÔþÈ2 Ñ^‡¼ ÷x˜GÌèkH'Øó_ %d«Ž¡¯•Ml¦³ –¼%/ Îì$+Ž¢§Êî$õîÒñÌ–·ílAÄËë^ÑÛí‘ÇË•«ŽGZb…Dß9¡šŠK ±©Uc24×R "K©w0¨}ËÛŠ:ª~Ý+о .¯8®”+‘«Ž+‘3·ËñJRMZŒ¨EåD¢€Šb­V®Q÷«PÔBƒŠuS±(Fd¾ž…U¯,ˆFõx•þá?#Ép—(§/p{i«=â`m1Ïk+”e~sÇäŽû·l½kc|ífXçí +‰’9>|ÉõËcãnÔÁé^5„3ƒK.St YÚØç)O½/øõWí[·w܃Uø­¦Aßл&¼O¿Eo5 (K•H`åʱn¿·8™ý˲y lË{}Ö¥áè†õS!–Ñ`ëŠÙ;—oˆºsQ9±ì’Sc±θri¹«/Ü7Š ÈÐéÿ¿GΠÚ&Üržƒ{l?ämüpž ¥“åR%hçP†òÄ—yV+ê…IÕ’…ªW¦ WS‘çÝO+bª5/I'•3Ú7Úë¢åÃç°ÍáZÖ¢Y;µèR@zѪ¹ÖÛ½sKSti-~Þ+ÖãçGªÁ© mÿUCðü5­¡¥€†ˆ£’YDBâZž{3ÌĽfr»¼Ìs^Çì!»á(:ö}²š°WƒÞ™¦­V•¹Úˆ„­žSªÍ@ NŒX5|6+û­%§ m ^GLI™TE[Â>Zá3¨ZK™x¹EþCg]m¾ƒÖ`Ek¸ˆ>„?¿XWÖÎæ-jì‰f h*¡}Ö&mê*ü²i†ª5 Ìо8†gqœå™ê|~Ά¹¶ÍÙ0‚Ù•9„³ðàÝ˪­ÎËQE~þÌ/µÚÞ ÏÏ:aôÌ 7b¥ýLlÓfL¾øó&äý63.¤Ó™’UøW6!›À4P çzütEŒ,OTz2€ ršlZ9RÒç'r+\õ³Z=¬jipÈ·\ºä3•fÁ¯×Jóù/t,"Ðk"vR9G·Æã¯ÿæ‚ õÐËfk}Ë£š°X•&‰yU ( …ήë¶V=8;i²«?w­ö°¶#Ï¢¬ä6[œ F/Ù^ê_Wtàæe—(=K/î±5Ñ +wÞQ^1pÝýëv,>ôôÚ&šâŸG‡ úÛå„¿4• ®JD–lÈGBHfƒ]îE¾Óf—#‡3BèqÄ€šqƒ>l9Y.TÂN=á0tF€$<áƒîFò‹fgávjÕ´}”?¾—–cS°œTÚ4<ƒZ·s¥œssðï1ô @ø¥¦Éü@+n‚ÿÈ¥3êØ›Nno¯<°üœ@Ž/Ý(óÊÓ'ðŸ¸ÂZ7Ÿ YX;Á[f›Ñ†I¸-Å[^pÿNªÄçRÀNTSøT¹…;ókl:Éý;EªÐñ¹Ö ‘ó)ÿÄUÚpÛ·~~CÂÙ»^ý´1ñ]KçTOÿå“¥°Iî\Ù3pü„í©‰u@šW%„ó@Ë©ÓÚG:N*=èÒyäÔÁÙ†â ÈÖ&¥N•¹Ó•Á¼¼–i±[½&=…©q¸ÝôK7ïî[qUÙõ GëétÝë—vú ؽõ廕a“/éXXU#ÐÄ@ðx÷-ÿòáD~ý SÉñ¼«ÞO-íZsíî]0ÎìÔ°ÒHy«ÍÈ¡Lº<$ð\&p’1f.fzÔ˜gGšCp26a,gB„¥ó¤¿Ò7_¶LjÊPCà²|=ììF5ÅÑ~ÞchÁÏMÍý'ÅÒ7¯¨=Ú?7IàÀœ¢¤Ej`難ß%‹>cW {-Ùʵ_¸¸U5êÙ¸´Ã£Q£…#µ @GUy,°|0–YwÃDñÞûïÙ1õ!¡éCÝvì¾6ºí2MR)-öÀnäjw…5ÇœÇDÑmr!n—pµ•åtÅäcî(e LXë<_£°ÙÙzÑ¡ ÂÇ4W««§µQ•–fÍÙ1´gãu2X X¦Ža$«ÇظnLœjת”Ôoª¬ŽŠA•¢ðG«Çç4ÑÝwõ=Ó ;Ï$ OÆW”$ÍR„{úöïbËÚI Ï–t +éCò˜¾œ”ûÀ4äËÎÑWc>²ƒ,“8ɽZ®øNÆ„1 x"ûNÙÙ>óMÝ‹Ð'KÓ?àäè«@0æ^jeÂwRI8³ï(Î6Y£‹53jIPA$š“LÚ•Í€{ñïo`ÇÒLj$cë^µyª»xÕ—.ÎN/íÐ14F©74Š §òöüÔ%SÝù-Ÿ]ëOñ<®p~Ÿ,ÙÌödÑëNÄû¦‡–í_ß©—# +°¤†‰wzÎt¿?ÑL”¦ËKf¦3‚Iæ¹ê‘ÇÈÈc¨^Ë:°oïm{GW_4rÑE{Gn3#?»”BÂ@ѧ‘Pô‡î.¤è{î¾oïþ­)úîûöoݺÿ¾»é5a^½o׎Ü68z`|Ãüµ“Ÿ›\vÏ‹<ò#$,ä*âI§ï¡t§^WSá/Õ˜Y3k×£ÎkQšàÿªþµÉæ¡ÕöÍ)õ×^»a^¹vrðssÊà²îyQy ÷ÈõõNñ¤â|ï(Bëͪ¡³f W·òã¶o1{ûcÑŠÍÙoæLtð|Á‘Z±.kJ™X>ÿ©/o½û’4¾§æñæý+2Þs‚ YæùãYkÏt‡9A7ò<)Hú ^î_[´4/Oé|U\ÄþöüP*³z$–HÚ”´ŽÜvyÿ“©¦¥eÆÖF¢E#%Sf‹,ò^C<9ý!öñdy± õRÉbr óÃE6™ì(Z‹V¤cÉxq¸ŸIAszaÜ0_ö×åX~¶ë¸Zdã¸Za£tFö™t½µ,µa¡ÌRªa½0ÞÆŽѪËa<^­ÒqAHÒ`ÕÆ^¨šÇ$Ùጹe¦5Ý zLnáJt·Ö=$z!mGš}ÈÌÂýäaòFäöjÄ_`ÇŽ«…¹›Æöïïõ\:×·yºÇºz|x~z27š2·:Aë~«jA(åå&aN©sõ¥sJm¤éáyez2”ƒ)#Í£U!ªù$ªÕ Î+kô?\ ø#@kÑ+”Ŷ¦’Aü:±=ý‡Õ Ï®ŠÀ’¬ž_t'<µºð]Cß°«ñž–l✠)/^rÇÚ¸AÇJ´/àP0ªóB7ÿëY+ðÌ_ ³H¹ù´–‘|1:V6¯ê:ætÙð²Øpï¸4ž$[üÝÈñ¤æ–2þ«ZoÕÅ0ÊÅ¡€Ž½sŠÖµÜ;–æ•ÖÞÉ!Ä¡uOÎ_N6×ù¼Ðë’i©9téUÌQ+Î~m!{Aûëo&±¥‘ZS ,A3у!&Ø¢ÙÈr¡Pw:ÐJkXˆJñÈ8ñÏÈ È½ZÝÆË.‹ùvtìÀvlJ§˜Õs«’–X¶÷ê«6çç—MžÅUlUƒÆY Úh £°iõœÒ0IJü¼²lò¬Nb«êü3Î^€ÓïB÷ª^e +´'ã8ÄSöý+Ú:ïÖ5¶0üG¨ÿ–«ÆG.wÞ¶ ÝU­Ý|±pZÖè'ÃúyD󤔻îìþǾ0÷±Ãã‡Æp|Ë¥½%Ïgæ6ßÞ·•¸ñ‹ãWÎß8yvzªˆ¨ú~‡4šZª_gÞ_þ;€º¶¼à‹Ÿ™Sj¯¸ñÊyåÆÉs“Z­Äâ‹’µý‰iî'@šâÌ𪠖¦Ím’µüÜ„Ž%8GKŸ¤à/$ÿܸ†¾^ P8?RN[.ˆ”ôl$ûݧ~èþÍÈ}Z…íïß8®Œ_7þHÅÝ·oéìøµsÙ5º.¢²ûS[Æ{æ+“íØÀ‰¡ã5¤EÁ¸§ç´±nW +Úh[ÖÎ)µñÊ[Æ+=óJe²=wH9Ž×èd`Ô àŸÃÎ`&ä¯ÕPD5Óúk ™?7þ`KÝ"Ye=M®– `=ŸKÚ±)@×v>ÿéG¾ÑF2ð6¤³¿«3²ÛÞê´û»X²8á™HÍ—“äb&}µèt®kªyZñuëyôÑ„ð–†ÆÔ¼b<yZîL­[œ + 5©ºK¾þ,…r&·&€b~ãèæ¥‘Í%;KïÄêN£Å«¾Ã­ËMSZnÍ—$ÀBróÍÀòr,<¼±Û?Äò5sÉ©Ÿ:zÜžÎy@ùÊôžÚcÕ›Oÿ~@µS«çßj}ö£w>m’cÇ0/‚ >ôe¾,§':ç„®j<ª^ôú ãÛªA„mýZóÖŸ6š’ª: +¼ë˜®N¬“r«d &P¤ˆðæ™;WÑ&»OöF,,úY€4&¯Ã#=²ïò5Ë£8o :l‘ÆŸâ,üöwß~c/ÐÁè9|-/Ò:X]‘Ö±§µñðÓ³×úŠ8ɘ©×$È"µ³"1ƒZeÑF•E½Ze1XÖ—­‰ X4q´‚ª¹-J —(µVXl×X…VÓWM^zñÅÚ…zµk`[¬D˜ž¥p9êuùLþ× ïQ:[Øã‰8‡^ÿ +“"à«{Q=%È~'8í¸ýŸ^H–%ܶð( ã +“}}<'pŠ£¾‡®¿p‚“ô‡, _Vq¨¹§Mu€ YŠÃŒè©gl6XºKÊL³{¼\?Õ¬YXšª–À'´m§Á©ñ«vpÒP«#© »rUä’ñƒé_yõÝ[NQ&GØî š0þ·_Á0PH§W¤Ñ}ØàkƼo 9ÓüIÞÊmzé­þbáë  `¤`Ö£%|§`¦y ç\æNÖùÁ —AZ)N÷7ØK¸H:‘Ò­Ý2ò\ ˆÐÝÎ`ò(úxÙ.Rì:]÷Ítöâ{Àšþ»½A±ÕŒsõJ¤®¦Ž¶ÈAÅ6#tRZ;/–_Ôîêm[}Q®šÀë!'Eì ÜXq‘IöGó£q“ÞÓ9º©·8íãЀßoÅ;ã™% 3mòÚ=å¾,Í ‚ŽßbN…mâD4¸~ãt9vñ:ÿh8շr›BåÝ._pÁ)•Ð|Y»1€s{rùnø1‰‰£èe'Âuç>’Î +Ϙ\jAÃíú==OÑ{–Øäó9Q­®z4—§:H8{Hi†îyJièœuëömŠjïÄÁp\ïí½¸Ô³ÖÇbހ߂eD‡YrH4C›>Y Ç"ú{(Ñëp÷fxÁÙ—H',ÄtxÃÆ‹Ê‘D4Á…»(šÄ0 ™Íy†­æxÐë[–0„<–pyC®L×\Nß!ìÇØã¤)hU|µÚ‡èceS\ìˆØI;iæv̘EšÁ¥•HM ÷KYj:¸ƒJÇLÄ|H‰4ƒ&Yët®ê…M´TÃóã§g9³'ˆô&\"SìŽbvž&qŠ¥¹HgŸwûv/_¹bØÙ™ôñ,ñÁë”D‹èÎô÷÷X +ÉjÒsŒÝ)ÓœÅÀ}j[xý†‹†"Œ^b¹êé¡D$‚‘/©X$ÐYÄ-ºˆ«˜…GÌ Ž˜+Bàþíàq–&…8d]íYƒ·ªæ©ªù©<-cØêyëj{Þ\Om\é×kÙUæ €ƒeb“ýãÑže1½ÁÛ ð©°ÊÞÉ)™zýŸŽr<µ$i‰&|KûÒ,6ñe‹” +Û£ýcþШ ØC,l §z×^ïÊÇ–¬ÏBÙûØKØ/EJ#}ÈýZkAd%)€P… { ÝhU½¡Ì#¢(t>/<£Žžþû²Î§(w|Føš»¡´HE•ngá<¡Ö<€ÕÓ5 Œï|X¡ +*ênákŠ»½`ÙX?§]霩œƒý"¹ñîÍKQl`4¾´+@ ͱl¼gI Ó O §®ZÒ;ÝmûËŽT¸?éeûû/ê´wÆÇòÖ¡/äy=¯§,6+ÃAAµkE.vñÆUƒ!{¢pzmñ¯Áo¹8ý;ô#ìnÊ…,C¾©B­PÊfz3‚lå­Ö ß›Éõ½¹ ø3Vß+=Ï ÌcC;äìBigìH?pÈæ¤–¡Œl†®j.¦jLb«­Ø©ZbSÀ¥ì +Ô\i²–£¬V?©VuÏÖª87e§c1ÑØÝê! 8::xa?ËP¬žÝ¿…–&;ƒ9šÂiŽa=V[0±-“ C°zn¥Ž”–gEŸË‚8ù{Êî´è ýݬÀzÒB¨{*ïàhŠ£.3«Êú&¯cœNiÀÝŽ“@”å!ŽF‹›Ž– +rT㮉J¯Ó5á,õ"Î%ð`‡„X)çD²°Ë³¤ÒÛEfgbÜ#¢( +î‘%¯o¦{g„ûΞ˜íz½KDJ¥[î$«Å.-ƒf*`X‘{DG)Á=¤ü¨B6ýM¸ní–f EûpÝ\¥ñÙå×ú:ƒÔŒželÑÞD°úºHCVèIJz•D®Ì¿ß†CãÊR(í[қⰻ&»´ § íršƒ sÅÝÑ>INøÍÞÂDR£M ÷5@+Ömv¢ÃV €KÿöÀ¥û»´Ü¤xÂ"[c֘ϊpÞ>>æ rˆWæû24)ÎÍ·[{È&‚ø£¡j΀^Ý•ûq?«CäÄÃÊÙÑ2šú‹A=õÚ=5~S&v¨ NÀˆýÆHOÈUîËp)Ô—`åí¯£¾¨Ùa Ð Æ0©²édÔDØÉRA±$:¦ë¼ÁÐðÆü[ª¥‡Ä]9ô{¼×çå¥xP¶F‹>KÖñ÷ ìŸÐãä ‰"×h^O³'â0óÀßZܤð,ÚeoZç;Õ8ËìëÇkW±Õ0†RPc([úœ-†²É3/Óè?’:(Fz‹Ïjóðƒª„b¶ƒÅoW?Æì(yÄì41*Àœ"Ï)W +˜b(Œf<Vø3$dR]Ÿ(ñÇs'ñ©ßÞ¼}Úšj+âÏÚ¨A¶¨o%SÐöî±ÚFa?‡÷áðÇ6Gj3".4c½vg¹£œN—¬~„ËöTd9°žŸšc‡Gg²gõ÷¤å¿¾\)ésý»r{\-ø¦I‚jìaÞZšÍÍvÍve« €‘Fc‡• K‹¬îPw#ê¶Áæ&Èmâ YÛ8€¾KpÂëw Z?—t9]N‹ÒËp'­B>—Dü9™©Íí2í+žCok«ç­ Éu¤a ºxš`¼ G«9ú.Ò|Gjz›³#ê×u¢¬èQG %ÎhHT‚y¤kiÒ|O8å^PCpĽ]—Ä@ÅmÃt9‹6ý<8`óÁÑø_°VC©º0`²ùlAÕÛBqG¦44ñÀÑàµ_MúûžKpq„Kä¡xã²qŒdd—>ߟRú w¦xHÚKî;›â41×Ä^=-cxÓïŒT<¤´ŽÓ6fîc¤•ŹëÁ rKf;8ARb! fGRh5¸¸È'äƒV_WÔ)²‰¨o)”P 5¨=ç–Íñ€ì€Æ< + žíì·æ»4F£/ש:Œ+_ö† §ˆ8¸˜Õ1þ.‡rÇâ3¢Ãr’Ï.K+›Q%o ýåjÄÅçŽ)çì±÷ÖŽD×pKïu˜šÅÇy¬Öb.Î6RwPÃ'C<Ûe—# Aœ&LV‡Y/ÄÊkRM”¢Ï&{Ú'¹¬÷3@g»¬wHãmÏ#:t’GÒèþ²Áœ?ˆ/­³—Š‘PU“­Îq’{¨4ãy4ö÷á×ÂX8ñ°½ñÀ,Þé”lÛæ„£‘ƒ)d‰{H)Í„=*a{âa¥i”³E¦QÍi‹âo¡%,íjœáiÖæKººz@M„F¶ ù{3^š·±²ö`>Ò[tõçþÁKúÙ˜›¡‰ŸÓðj#qÅ›¤*/«7ÒŒžv8$£É‰X=à›®hlYÞMq:Þt ÀpŠ|œ¸û4YÖdŠ"¥4˜c DÑ=à'ˆ–vödri*øp¤wêžt´jº0ä@‹ê™Ív5Õ.?.j¶›6F™Jy†Ã8tO*ŽV}·”œm ÖÁÝÝ…ªÊ[»®µp¦vfQ#u¦HÖÀÝÕ“v¯×+ì0¤n î‹XH²g9ÃÀ¯+v”1:-f›°ßÅÑÄG¬ (bÿ©·².Ad¬²Dêõ§ß–P+o`œvé Pøç(éýû︙4^¾_‹àm=HÆoØìi‡ð¶@:Óã·sdn—kWì°q/ÙbX©êZ*0Ó®Û±·ö4ªµï¢TX%Bî”êÁ[t·k.5ÈÏ 66\âÓ}ãáä`T¢‰%˜7¦R¨%á +y–ô¥€£ —‹Ð69¶Z£Ÿ%iE—kgqáïŒn½?^Ÿƒb5`ó"ö2ö€MZãæOSˆ÷(zÕÓFsè`ëâAo(sæø./oßÅ7•êíRÆ·Oh~(ö,­ªÆl +[ô“ä-Ùu/ öeﺜ2XÜ’Ó/QèŒ08­2”‡ƒ})åD— ñ€ÄH‘½cá{iŽÆà=Sèÿf ¼MajaMþò+w«‹$á/´®qñÖ)ôëЂ>ÙêA÷Cú¼ujtcì2í¡Z´³ß:uŽMŽ­«FýhÍña-Öü§ ÜäwÈpO7Tw|ºã ÂE_:"úMbäzPõ•í/‹²ŒˆŒÜå‡Ënáú–% ™TŠ›­Õ,ÔP@wî‹n Í& PlrkÔ¼؇ié^[zœMÆ­@J¾z%†Q¢ÓbP©{;b"tªÎÐY6h3üЈÃ9^[¼à«yŽe£Á¸Óx4ÃÕÙ6¶„³…áÜ-3Î×g|hÈpÆ’À|‹6]6¿¬§8âmÂÿ3Nh Nx7R…éžf˜ò˜ü‰ Ÿ0å>LkG¥~>Pô›´Nr˜eGÐÑ¢5`wùu8sê«Ä6l:Åù÷y€ú´Nd®«Btw3DyÌ¡ÎïAQîO +Ñ6óý-Ôæû`Ã|$^¬Í÷ß8ƒÓ‚È-ܬÁxú‘€f{yÎ*ûž—¹c譼±,ó±®w]˜ë6R 4AvN< +«—ÿ™JËbyظh†3h^jƺi'pCr‡Åf`‰K1zÉ!9ÝŒ ÿ)m”½²Å) ä©‹‰› €È”À9ÂñNë,†÷H†i–^X¯í¾ ì\Ù§[Vöˆº²‡Ë¦ÚÊ>táêÚšöä¬k“ø˜ÁµÓuÀ6H[eóÍj[”üø¥nc ×a±yRy–5š]’ËËrÆ_2Ùo—OžJÿ¢3ëáR™ï~Èy8­·èÿp#°TŽ^¸ÑÖŠž$?‹HˆYZ=ÇØÕ`‘$:õŒÁÜ´*˜ƒ@ äQtêYÅPnúÚñJ²¡î·ÆDI4Mš\q—3$a$irÆ]® [x‹ 9Â@ï²…ް•ç­áà\Žþ=v3y)@ùlÕža¶ðrwå‘ô¨ ÁF2y½èˆgÒØTƒüÔ+¢Vû(gUeClîVöÀŽÏ*­=“ŽZ×v÷f6ʇªQYÍšþ&L«±È}l!‡3 ø»oàõ© #(Ñ$gäŒ ¿;$Ñè¾Z¢þw:O’‚IøÃv}4ä z ?t‘X˜7ò¬Ñ`ððéX€Ø¢Â`sõngô…g8.h9† <4Ÿ§ƒ›Žx®1^Ù°Õ‹4UVÿŒ¶äM`É-íÀ’Ï­×c¬ä„3öy”“G@"ÑçH^Çê^»ÏDSŒžeŸ™C‹4#_ ®ÑK’œÀüß!Þçó2z=+ZtB è°VôôWÞA È¿!Vd®ôoä(¶òi=-½€®FlH¬¶IÆß û1\]¶©ß^·ømR¥Àa˜´Qc×R-½½Ë>£K„M2 [Ï[I£=ì²û%æÛ¥==¯t$cäQéz§ÏH‘: bàöÓ¡oá_QíÉõ{ÄCÌØvÄ$²é§í+ö¯yÚÐHï ·¢ÓGû +xJÖ<£45L6YÍìÇ‘H¾6ç×(Éôz"JS&ø5£_"%OÒëHer'<¾¨ Ã}¾”Sœ)Ÿ? §OÅáΑø´@Šª€õ$TT­`ØnD@$tíÓtcÜKídÓÒQtí3JÓwjàvKê*š 9ƒ-p…Ì É¬ñˆ;h¦ÔGb›ÀHNÑø­:Nr@ÞÌÂûøOÉœ.i³°`fúŸˆg8# ^u v+|¼OèÄ›p"O7?3°Ö£p4Že¦ý´hóZœÊàß Ëgq ôotÈS%u“ÎÀneÖ¯DCîC 5Œ0`FgÝv„Á…±†}?^żÜô…&ñ4z‚d½÷…LVŽ£™LGˆÀ?gÕäÌWà?x¶À›ñ‹À›áÙÚT¯@s+˜—3€gøÌ!pY>JÚCcÆÆ—½ /w2žR'õi/·6q¼=ÛJ×dºåOì_€@n3U§Ê[ÖŽ ±CY£<⟫'˜¾ +? ­O€„ §uÔSd™Aî@>‹| Ñì›Ñ·ÊRhwòŽÔî¤W˜¶M'“Ó6üŠÂ1ôMÀ[GÐ7ʉ+RÙ¿7þǪUË Û…›Swì…i/-.ÿÕÈöÍŸKŽÇÆ·¿ß·ï oeñ$ x¨ùÆ×ÅÒ©wfU?¼9§záÛë'Lµ; ÕœTSIsYñÀ¯•UÿCi}Ñæå¿Rj¯êÛþ¾Òç-{÷½¡4½0é0¾ kœýÔ}g”וfTR!‡FŽŒhtÐ Рι›ìn6Y$Å&)QL²dJ²d9(PÉöxœd[ËII=Ö8ÈËqØÍÚ3¶%kÖa÷X䑼”8^9»¢½ï€Î”¸»?ö,ÁCÀª[…÷î»÷ûÞ½ï>yÜ·qK߯ÖÙ°i·ívTœº,ì9Í+–oáæªv$ë‹\îÖyNTð5E }߃£Áލ7õäœî†€Y!R‡Òs§»¬ñŠ€ÚÀ/s:õü-öæP_*l‘yþæÞÿòKÇú+ÊH©;}ðóû»î©†Å4Ë"¦Ï¶Ÿùþƒã1µÄÕ¸ðÙ¿ÿ…'ÿõ¡¦ÕçMmÑ@W"h‘+l#mÌÂc?uþXZjöù[‚™©¼ªÎVqêì5RkØ:*ò½û¦«F—OÞm½k®6µÿ“O}î¡eKtn¬+na”r©”65BB© =msGïj +<øµžûâmé3ϽŸlòµŽŽXëCÙ ØßqZ”_üˆoŽí0r[¡ +WJ5xˆb°HŽš™™uå\¹ñ2ú:Ò†hÐߤ±C‡/²fñ…¡Ü Þ30àéaÐ…#þ?Ûí&"5޼ÕsÄô–&>"¹šº-»©_u jøçÚå¢]F&å¾8œ*/C•â Ш¢>•2% RU8|™Ýrëž…#vÿŸÙÂ{z·Øž#aÓ[,¼{Jr•ÝzÿË>N¥dð½ RðséîõJðá4æG꯴ÖÒí¶[¼ÐEÂŽ[Q¾ Ø› +Ûdê`û¹þ“?ûëÓI·Læiš`¬ãÔd=%„I™ž¿³þ೟¨3h*ûŽ?ù®}fþ«wO%MºÊì¡O —9Ô$®Ïß7‡Sj›Ád¦Bôû©Îkqø´"ôØïQ÷WP /ÙsÛµõûÇÒQ}|ϹG¿pþÞhÕìP[…Q®’K%„¡Ì@ˆÔ +Úš]¾¿»õkß¹ðÌg4X“Gèéûâ£wMVóHFúØ7¤€' Rìp$<žH"šÎŸÄ;áRʵ‚¿å?… ðÏ)«žY{—÷s¾ 9ˆü¦ 9é¾A|Ö2ÚÙ9jÁ£—Ƴ+ØÀE)¢¨XAƒ)Utöê '}ÕØ§<0¸P7X7¸Ð¸‚:.r +¨ç9´Ùîl$³É.ÿh°92X`ØãË>6šäJ¸?_ÇÝ@ÏJg¯²ž¾ôUÖØ—Ú¸IÞåÈ‘ð>Ù-7Ú”'» èïra#_ç¦Ü¤õIÚêêØz‰Áb›`š³;ˆsÁk1Ç*Á‹ÇÀ3/aÍJ_$i{&£{Ÿ^Š=BJàÆzçø }/ÅùU‰ðÏòÃÏí õ¥Ô|‚b·­35ÝQw`ªÛ„6IEJ!É“OŠ„:BSf¨æ_¶4îii;ÔW%£…¿Û¬‘¶Ü$¯?úÌ~©œ²Z4þa¿TL¨5j†ZüêѩѩT#e¬’‡ÙË­ž®Ãí*)i1«P@¡jprçm—+à’>÷¯]çM>_@É‚ÏÙ·ö£”QŠuÛ‡¦º²ø˜ v»e ø› /¢[Á*R©B:v5ëJ]5z”]Ž. éB±.GšE…Ù¬ ½ c ÂC/騾Üô +êÞ]'¸@`V ­—LO‚7NAÐÔŽbž§#‘ð¤ÏRJ³cWYWW +(FWJïZZAË/°{yàf/±Ü}} œšør$¼õMÔă"¡’¢|¤ž`=Ùº§­`C78=)¨Ì†šà_†dNÞØ?^x|.t;Eñ(FÌ +”"–‚[1Jn÷ìð[û3÷† ÷"š»êëÎ]¨FÜ>Ðb2ÿ}>M +q4­ÐJIþçºøTkÓ|GD&$.sXË(¹Õ ­=òÕ%)CZÍZï”G̈lVíÂ3ÇSN›Ä #TZ­‚6ÚʾôY#`4*†R•…´Z5݇Úmf—Yq¦cí:þ6/ŒìE+9K nÌôà#Nƒ—šû[¤µßÌ‹2#+?U-e¤#/ô8_4x™Ê †dd Ëh=ÒsÖÓSN†ßñ^Ÿ‹×dýõò…É¿K›ˆä ¸0|Ø5'êyuf_d·>TªøT">W,ü.;Ç{垬¼þ:[¾@Nþ…Ýòt[u„›UŠRx<øÚùt;ôgwõ)Õ+]¯±ah‚ãM”Ã…b¡$Ö=Y1xßDxY ȵ‡'íÒ|RN³¶ù³Oä@ûùÿl©í ×O¶úiŠú®¨ÌdJLz&2yÿP™ÀdTÚ[ì´DPfVç5‘P6‹Æh5šjb2’0•©ÍV@áÍFU| ¶ übtýÚû¼_‰ !cÈßsëÅŒ#Ãí¼²¶ô{/z"Ñz^C8|ÉrÓŽSÎŽ±Q¯“Ñ»»ûsõÿ2&ˆŽ‘6È=Qð²5õÛUƒ›Æ.jJSØ&û7‰†~õê¯4ñÂŽ]Ũ+(2Zÿ/,'ÔùgöÄú8±p9ùFÈo#)³Ä[¬ëy[¥~Þˆþm¬[~Á¥¬à#/<²äîƒÇi1É÷8ƒÃçß>Œ £FS&űÃÇ´<à¹Ï±'$´PÌP,¡”Ò¢Öh [BUûp{@cãØâQ1½ú%U³øy‘ŬɿÀÈ(‹I™VFsËC†òÏ +¹ù:xl#ÍfšQ0‹Aá,  ù RIáHq0ÿšA°µ5Гž FÆ‘_s–@béàÙÛýUÕI^ʾ‚þkJêŠTÞŸ¿Ò›‚Ú2ë¿WÇNÿÉát±BüT7ÏÒ%8Öƒê3|8–bXÀ«Ž ºQlUÀ¨T€­_—IùŒZ­ Þ½ÉuéûïKÅÜ»Ch1©Q™¼iÞ–H`Ñû·ßK¹wÐ¥×QŽA¯]ãeyˆ‰”"æGôˆ ó§HÚ¼ªšð­Ó ñ>ŽÛ>1•«Ì«¬j‚ð­²[ÎÙQœL°[q2^ÖÖ²xÿ·–Ÿžô(\ñ®™£÷õ,?=徤¨žîn<<žéÕ3]…#ìÙÜ7>ÿ‰ùxãÁÏôÔŸ>±¼0Xok:ü©qÿtoE°÷À÷$S½Ñ`ïÒ÷@Ÿ5µö>v'Ï‹˜‘9NSEiVQR’¦VÐŽI"fœ¯çOmzhn½ô«0Ú]\¨s‘Né¹Ó)öfç' +KÞ/(Ô„u–j_>‡ŠÕ6µÚ¢âßÈ_5©! +Gûùb¹ŽáŠ3êEpUA“xßcRV §2_Áy8Š »¾Ë‘ûèŸä\‘Õb¾—Ɖ8±vë¡R\~à ¨îÅJ­04ÁÔ® ú ÂÉÍ-ÒÞ©À¾¸ÉÜmå7X[^›±…«…ðò‹ì–ë}ÑbœÒ¤µ4 Ñz%Õâ//eæoøÀmá _DËÉÕ1Còp±F‰îK/6[¥Žd¨a¡¯°^>I déé#ñÑæÀÔ§gò×1›Xº$Piàî, ÏD·G‚ò*¦ÆFCêr»Êä²b¸LK›Ê´™Ëªö6ZO8ÙôC%‚®ý>ŸÇOAþ¦Ðb&,›#97’t#ˆ;‰‹+W°¾ =âøÃås=ZËwäBo‚ñÞ1A® Ö”º5bvSŠ…®Åe…ìn;â?)ÎŒ?_ωcØúŽXžÍÙCo²œ8%”šWIèÖØ-2 Õ…B¾Í-»£B4׼네° 9lî¢[ÙÜÜ*Ž×ècÇŸœ²ZJ£<) ƒ™Å&Xλ,¹·íA™œ'‰eÔ¡ŽScѾ©øb®Ž")>%RM“Gj{oïõ„rËÍM“µ†ïD—fŽ€M¤— +T:½Jlr™*úöF½­•eŒ‚P©U èÙWß–sxíR9F!åtèé¹Dû©™f|Ãmpoèµÿ´FâW€ß"ÑÂ*ÍT8ªT„>¡¨\$R”‡"æ°Å¬·(ˆ>.Ç•‰sÜgŽæE +‰rR2³E9Û½…¶VÇCñB}žÐöuºM”Ñ<{Sq¾’¸R?l2ü›t}ÝkãvÔŠ_Áù$-þƒ®óÕö X}àœO©¤Ø3­=d¶†M4záeä¿£«O£¿X"5µœü A ùpé7páa÷…x\ßËJ„< Áe«Ðäß®!ø}< ÒV¨)w©!˜XV°@J‰‚ àURç`$hn&µ1^ˆŒÑ+¨ùµa§úÂpiÉú¶Í²R9à”¸Ùyƒ-Љ@9—ØÈ˜JŠ«& »(®¯(m³™ßMu ªÊÍè®3"¼£ˆ•ÕŸþÂL ?]«‘ŠQž’ˆHGýDëØAMýb¯¹ÂçVÂ%« 3I$8Ð]àóêÛ%v›E2ûéq?J$ÏÝÓY.’©i¡Šá©´:•DmT×ÍÝÕìNu8×;1™Å¢j½ФóŽ¢Þ®ýÐ÷¾/È· H'r˜[…—ð_ÆTbÞƒ :þf(D¸¯¨F[>Øî “oYöª ÅßdÁ*÷V5J´|°Ã/nl2¾É7ª·ïVPDëÆµ˜'ÅÃ_ÓÇrÇ›ûX¿“Ô:?ùÂrÓA—FšO$RöêÎÈÔù#ÝêÚÏÍ Ÿìq|WÌT¹{:[Mbznªz,]i“cHÃ]·/öø«§?Þã>óä׿òØmÍJ ©b¥JÍb¹¤ëÌ×'Ìa_f_Ö•ðkh­‰i:<}ÀZ“É r  èåºoU©ø¹L.gVвÉ— pÊ8FÍló•×¢!4ôJE”Kµ»(—¹Ó)öfçû¢¥%ekÑM! ð ¤Bº:&Tèz›KÊb?^}šS‰ŒÂÞÕÊñUÊâ ho¼ +(ļN•‚Pêt*±Á‘$èߊx‘:¤y €~*1¶®Ý/FœñF9|R"t9T ’†jA§ëã•å"ô'ÃhæO;Ô‚[‡¸3MJUºÌúk%2Ú©[’ ·”—/Zy`ä7•˜×TWÃ\…ùbÁùïi+²GÎOÍ~v2™~plϨ6Ô±pwvá\—)8p¢=1×ç[UÛÞF“ØÕ;÷褦"[7y6cVW4ggèí©‘®¸ÕÛ>WÓrû☧æ\.0–k¯6‡;†½ÍË3Y»µµ£;¢‹¸5ÞdÖe©ŒDÍõ®^´Äkâ–òžžlÀ÷éÊ[a­\>°b¿þ¸ +éA>ɲj‹4›ðtМz‘v¾i©Žã!»]”¸šçÕ†D»Y0¨FÛ†œÉÞù&[º:”¸Â†&Ôâ<«>`E»Ù-¨Z…Vì²%Ãz´~ÅÃ×kůïÅ€ÿB¨ t,=òÓ-G=ŒåÃQ®xoÅÜGú uOLêsi+³ÇžœÉÌøµÂŸˆÅºP{°Ž>™2ØYéêÍ´b?·ßyþ_}|¹E-*U<… )#MŸ|fÖðtîo¬ºãv6qÔwg{ò7Ž…R£1­5ÞÑ×ç´Õb Ú°ÔÚ5ü*h]3@ˆ¥U ˜hjj°Ô"yÃDežÜa»6­JgœyÖ0AVæYr‡Á*éäF$ŸWJ׬,ÌvIø…Ö©Ž%øøU‘ÂJz›Ÿ?¾ôЀš|Æöѥ侇ßU‡{k[öyÌa§^J¨"½µ­û<¦°C''°ŸÛ&÷f÷–7wÄç>ž±Ž.ÞvxÉWq©jæÎT5X‚sv|z´×X5\g »Í}cÓ£=%O”œh?ˆ,xi¹Ò§°(J½¡TÊ´ý%7¶¸þÕË\vñõŠ«U)'<Ø%p…Pqc¾\Ìtpn‰Ÿà/pm…þxa’†RE«ã”Œp°”D%æ¯ÊT4a@s|šÑ2:³G/¾-¡æJµFA)R£fhì¿<°„„ZmVá1>†ÂˆÂ§¹z{ð‹Ÿýž(Ø­¿«ü%˜í.ò‚j±?o+`û:…F&˜úÔ`õŽôìB üyÖá.§ØÒõÂú]ÈÁ+…êOAŠßmexÀ? Ub9ÅçAr°¿}±Ñ"q$Âõ‹Ù¸˜ L"[k™>ž¹£Ãìÿìžü5ÌU¶DvÀÐ|ÀH§ÇÐCÅôØh@峫Ì.†òDRZ\fÔDjÓC~ÐròÄ©æÂÌ÷?x´ÜX‰X8~0èE½âmÄ¥Õ+Xï…>iüZÈh"žÏ FÞt:‰Ì ùÁnë#øA‚ǰ‰L<Ï:#o²œ8³¬7…Y;øÁî(ëÖ BŸ®jàØSÑñî&ƒP`»DÂpf_ÓàÉ>7¤IåfÉÈ#™Ó£‘¾éø¾\=%¢@{’Tjr9Ñ{¼×ì_nmž¬Õ'¼83˜rŠUe2‘NV$ NsevOÄ“®0ÉBŽ${öÕq$A&š¬’rÚuÎôž†Ö“³-Rœˆ’€­½ +0Åç‹á¯>‚#„CÖ;Ç-c#(DÂ’I6É‚á¦Ò|Ei»1®ñw„'p0äeÔ#å8©²7[ý•´/%bçj[¸@žD,ù>¶úMô•%!Ôkjƒ 0 +‘ÆXfÔ“xçAPàô*œX»|ëó‰5tùR¼¼Ök‚ A‡xˤ܋GÄÞò€Kg¿bBjñ†~Ò„À`¥&Èrù»9Y8W—o¬hß` + '¬Á~…-Š Ä9ºƒ<×y.ð\þnnX NjqFü¦ŒA°“0Ð0>Ûò©_?ÈeZ©ãÀ0åͳÓMõ‰Åî¶½®Y¨—ÂÀªäMޏûàS3¾µ™•ÏS +˜PUUkÒÆçîJÛSa]` #TCp˜?ÏÇB} ÝÏaÄÿ¿8Âßé*úŽ=13~¦ÏNê Ÿ|áHã’K+ÇÀp‹(keGdê±ÃݪÚ'¦‡ïAè¬pvw¶˜$ÔìDÕHºp,vêöýáª)ÀN?õõ¯œ?Rä\ÈP8ÂÙ¯›ƒþÌBÖ 9‚ÆÌ´Þ8µd8Âk$Oÿÿž#ðô|’¯ ƒÓ`uCŽð÷«OHĵûï ~ƒ¶{|Ê-A.PCQŽøj•ã H¶Pkrp‚D‘#4oãí˜'%§Ëã†vÀ§!EèÞI8‹´;MP¯,²„î]XBáêÿ=¦À·3…/k+úŽ<:9ûé‰@xêÁѹM¨cþîìü=ݦPÄHLŸUøÚ*Ó{S&±£9Ö´ØæšVG³ñéÓ&uåpcöXÆþá\¡iy6k·µìà +æÆLnõÜ.laí‹öŽ-tÖË]LËš_ N#Õ°a„.«{³¹:䑈ŠÐ¯ †éð~ šM_!&¶´30hòÝIƒ,R÷&»!ÄÁI‘²•÷V5K¤¯°[D•ÖÊ•¸ƒb£¡»²"‰ˆ•*2•V2órFæ™B}°cÿÃ/Ÿ°4Ä‚J G#$­ÔtGö>y¤[[÷ÄÔÐÉnûw”ÁŽJg›â¹ÒØ4ÇNÆæ=¿ŽMh E*¹ÑÉH:O?3±ut¶,N°ÖfU›†Z ZÙ€Ä%ÖЀ/Öð’8â5ÚxBó +J\Ð,á›p[ˆ¶@q9öðRál <ý«Y HÜ6ݨ°™E”L˜k‰X5Vg«[¾}`âþ1¿XçˆÔÙ;/ÌÜ;ýîþ™ðBÄq‘&ÚS]½×kæ>`ÿ5÷í¯<kn é©=~ôÐÞa{&éÉ}lÏ¡ygÈÜ;6;3î +õÄL¾rsø0 +¬ÔèÚûXÏ ¬·:â%3RŠtà ›àœÿ<Kä¨#øI”Û¹©"è&êf§o ÛCç0JmÓhL +ûÖª^Í£äbTK«4eŒÆ$ç£Z¸œî‚Ý-¦´”Íj"ž&D| .øâjô&âE‘:äáž­Á /ɨÌn§Ô+ØÔ…(åym†É€Ö¦È˜\å  ²š´î‚pqÓÓncÐȰ«Å³‚6]d-à +A³ë2„PèìÍRvaë¿xÓœàvt +ƒÜØqnpõ~’éä¨qð`B+³×x"#í’¤_3YÏ¡´¥|òÑý?CEÓK|¥F§+ +—Ã.¹ÒzÛL¿[ï·2›^¦YíV¡Ô¤»RÑÔgêÿ+ h5fí]¼š,໥(A3dn¤F ¹(AòBŸÀöº”.‘ůgC¯Ù©÷”J€™Ýubë°àÊ&A#í + ݌ԥ,,—‰_gí¡×X%õ[’I讳ÄÖ¡SêóAø´ ÜB¤à¦m ™€@hß÷Àpî\Lø<€ íµ#ɶ¥›*6Ùv»~KJEû[—:´­>iöQ4ì©.Ñž N鬩ÉúÊ®¨tdû:bV«E¨¬^£‘Ó:£Öìv+½™”¯P©å´µ¶?Êx¬jƒÕ WPe£HfPQÞdŸ«zOoœÆoM+Ä\¼µ÷ñ%žñ#áb=PÐ* +…W(òˆ<Q™ÖˆV! +LÄ>•y¯+…’Í#ðw—Wtùr‰pµü™øf G‹ØV³EÐ{U +S[déwÙW¶+ÞFv‰,ÁbÕÑÓ>ŒT[´Z ¼OÃ$&ÒZeÖ BïyšÿËGÐt‚àìø…¬J ÿ(•R.o9ƒ P\)LZ¸zƒyWß‚ã_4¹•‹|cs” ™ÒlD ÁHy¹ÁùÛD!P ºÙ x'xì_¶hÛz ê/³D5;Ë&ŠáÑ%6²òXªÀcÿ²MƒKá_AæÿEÄU…2™t¶ÔF´nÔMñEöXwåðñtS9–6f™FNŒð-Zôº˜Äù$)æÅhµ¶L1{w·}À;9‘Kºÿ¹L¤Ö¨ä”\-wMÊ"5ÎǵtÅh`¤B.?*ÿ +þÚÆ¡fN®½ƒ +ØÚ +$ÜÏ¡“Z¿¡áeL„: Øi³¹co4ÔúñPˆï¾®Xhz—¿Ý}r‹×¶ ¸4{ƒ-^¬p_g ü¦wYþvoÊÑ)f£æÚ¦(ûÍhçc7ê×âуß>™;Öni½É±OÎj+¢AC£<¾ˆæh‹/{z¼N:5Òu¨Íölv°íd€*=už–¹&3úåžÏé æŽ¥]NÝ{vy( +³E„r » “4Y;{W³ÎáHµ'S}¸¿¬²Ã¯õÎí#ü$ÇÆ ì€/Èä*_ÌãKeÜKmõ£€Ï¿‚†~R*Dto„§…Ûýdß+:8ɧåâÕ$äZ§Þæ’á–[½A‹0FöˆZÊCDV_ùÁsÜÒ ZNá‹  ZRÌÀÜjЄ‡€&¸¹ØÁ§ +*Šñ¹Øx{¬QZà¤çeL€˜4¦O)Ét}£Ô‹z„üÀOu ™ŸîЛD4ê?eu üÌOwêÅ–:Lœ= +â¥EÆ·Æ +R·?3?znÈ:ÞmöÈã>?7|{‡¥¼k1ï¨Gä®T(2˜tIœ‰Hx¤ÑÕÇøÒÕ‰…v"˜‰×̶yÐʾ;såöúl¨q¡7iÐVÇkMÍ˹ »!ãŒOt't†Úú$ú?N3£ñ'¼J·×«Qc-«k:¿Ï¯ÓTÔ¶4>«RLƒ1ç-} ´t 0ðG †ÊHß<´g­ m‚¶-­;[â «> .ûøLi½®[þÛö,ÍM ¥(œ¨³^zIÿmGÒä†ÇüPô¯.‚ÿ£¤ÊJ¸k™é=Úé ÕÖPƒ«îü80VÖg{»CvcС—‹2Ù`‡Ópêøÿ£cñØÉãûÜ5 Á³Y÷¾c§Ž-¸ëâá‘3݇¦mÃÈâmûF öX†áÅÛ–F ç?öýû‹Q­Wá1)J­¡èjö¥ )I +­N%VjUU=“冨KC© KÂSjõ*Iþ ó§Ç€ö{t +èi5Ò]ˆk]L†LMÐ}ÒH #Rz1ÑNgyýkM±dˆåï¨ÚÞ n`ÁµÑúרÒÕêòwXõÑöÆvÒµañ¶­›‹Ý„²xxÌÓ´çÁ±ìrÚJ0–ŠÖpò¥3ÚŠˆ_ÎÐÁÓBAY´Åß{r¬N:3ܱÔjýšÜ]ïOŸ ’$´ó•}q§Z„þµgfv¬µXúvíÐÁ3§‡“½À8„\ÌW¨5Œ˜SñÙ»ZuvKb$c +Û›¾"爦ýʲPCªhë90ÆŸã0×P¡r0_œX…PêÒvó¥â*lýbažø»ýLŸ|crgw¸õÎÂþL Ó9t6· b«ïÁêÀÒ‰°'•2|Mhñ–+?øE8Ÿ–Qø’LQ€[R€¶ìE àFâ@3Šh+Œ¾ÐU-&„h«*¹ mÀƒµ¦$=á*»4YÛ"äûÚêøÙ-£­ u>muüìÿm¹>l¹jeièL¿×Ÿ=ÒI:%óç÷æ–Û-î¶ùDM& îÊÖæªu”­.œªÒôʽ­•ÉÙF«¼¼#Ö0•´ U]w-uUõ³}MeÚšº:]ër6à¨ïòÄ&º“zC¼>¾©5…, +·\­¯Ž×¯®j|>¿^_QÛêÑlJc4 ½Ä´‹ÅÑw7úbv¦Ž>€WQ +\„0™×ì±Z<êr‘É7¢ ¦7và‚]ç[u®ÌkléÂhò 6º@šÞ؉6gg”°Â‡fhÀ¡·5C£_¤5ŽHÂÙùƒSæx¥_ªˆJ@Ò"¢,ÚÎÞ5Õ œì=Ôbb¼-{ï<š6­€Áæ®÷F»ân-%q4„Ó'±²ËGÙYgg7àï‚‘&Wi™¸vöc­:‡-9Zåžm) ûo‘œ¹²# 4j ½1bWÙKÑ£e¾•ÃWó%|ÚéÇ¢—d&¿È¾‚â4¹|m[ µ)Eã8UϽÄjr"xöEV´mñÒ:µlZ9Ë#6–Êr®—¥–ŠŽ=gžžê;1\cëêg?ó£3½'†ãVÉóŠèD{ã¡æJ‡šd*Æ;²Û“ªð‰‡ò“'F*ì ýÓóÑÜOþãµ7ü/î¾<Îâ绥VKÝjIÝ:Z÷}K£{F£¹${îÓöŒÇƃí±ñ í1ÄGŒmˆL€€°7áÆO0Ù„ÄK„lòÉ&ûÙ\8YöœkßûÈZ󪪥Ía’ý'ëùXR—ªJÝ¿úUýŽúþê72¾¹±~Ûp61|ÍÇoÚ¿=šß:œê¿á¡¯<u«ÏN}@|…ð¬”hLl&gÅZ,ìY(1âŪ_|M¨+àkâ§å·ÝF9ÃÏ`.t$aQI®U•¼ånÚ4'·ê›2R†CŸK{}Œ^«´ï±×‰Ó:óaг:&yVcȳ/© +œI¦¬Ñ5MâÁç”Ëkn¶Æ±úf-Ì9VcÇjþ‰«¼æÆ”Ûñô*§ÛE«~kòõ±ÈеWïÿÜèÍpôÙ©ó²Ç官ñ®®œ‡Á…ì38‰µ`y\^¢{G’ïBÌô}σ•܂˟£j™¼eq16y"°'A,Da¿‹PØ#pw:‚°Á7'ÅY½ÎÁY|hïê¥`[¬ £×ß³fóò–Q‡Ý·¥}XÂaw}FÇÉÀŠÄÑÛûöe–­)liR«…J£T/Z»â°#‡Ý¾ºÉŠÍn]·¼ÍŸbk\bCŒÏS&ÚŒmmíöE|Zãö8(uÀg tl@@l-A¥»àDZ ¼G°(–¨ìʲ‹í +µg8Q‚´áêÑ*m0¨ÈKZ72’k++`íS"õšúPOŸ£¦O‡D-ä Å¡–þžBcÔ¾ÖLÐ&”I7_øQ+g Zb+%xÓn_ÒÉ_þž†-@\ø)~ Xís åŸSRú$ +÷òz`ñÇybJÉ*å¤R£ú¯Ÿ˜ˆo]XyQ xñ©Áº±§ký£%¦.¡Å°z-ôŒNâØéDº“ü£ÑçÒËÔgð$f3{&œV׹І S¾VŸ±Á‰6_ËLòófçë{WtK€êóbrDeCSm¾Ê™äÿ6,uYi®ëÙvä›û:¯ê!@‰f”t°iIný½»–Y›î[7ºIМ¾î¾uýbYù kIu'ócÝYˆ¥îm‚©';íÛwï‰Ç–š2",5¯ÖòšÎý'Ö9!–zqýžëÅá´¿eh)ÄR,QÅR/óA,µZpAm}p­ +ÐӬ̤œhÒÃVóê5O}³¤ÒƒX3®•a/)Ì=õσwÝ$‘z^뮣‘BoIA½D¯¨æ¯*ó1À¯0jÜVR¡N.Ý"ÂAåU¶çA5›¤þÛFhTsÞÙ—†iÏu±ÊUŒ%Ü´$Û|bçÚ›W„ÁEóPÖÕ;º®aüæÑÐÓã[›ÇÃá¶”ÛH¯ÛÒ2 +S£Jv4~èóÞûéLKOvÑ5àâènɺ2>·áÈÚC„»o=rËüÚsë‘›wV±ÙÀH`ßZˆ¦)@S3¤i +£ +ÛÆ¬L4 „Àí¾“á˜ˆÓ“%  #Ú@ܶäƒ=ûÆ r[¢*-usÙ¶Uʾ«"Äwß)ÔV¢êsoˆù^È{yØ·Z‹0 4®ùvùm%Ih‚,#YÞÂ!Ø÷[ïh˜Í +£4lGB¾eeß¿[I*tjÆãq*¿!“Ë¡9¢øËçôÔ÷k€CÛ±_/DËÎ*v"”KVáÖIbãslâ žÂü˜ Z+V}Q¦ÌŽð%hiÌÐgaK÷êö#ôQ%ò³þÄ$ž:)ú³.ÉÌ©¶S–>”™3íÞ%gÛ9òyvÎpÅΩgyš”©ÍF|phb0aUj¹ÂÖå†VÃ39ŠY´zg˺ƒ½µ¯¸és> œY;< +9¥ÝÁû;ölYÙÓ,˜ó‹G©7™ zŠñ{- Ãë€Í3lžå?¶@=ÓVãoƒ±ã ÍêêØ¬†Ó~ÙC³1çËŸ[ªZgÐ:»ðà m&ðg+@S†îM¿ áâ#Hq,QÓ«„dÍ™1Ï*ªŒüÑ¿µïéá„jlÃs"IJO‹¨«þ‚drÒï"`ûÈ‚:nÅЪœ¡q÷Û[7ZF>vïxfÕ’EV ÍÂW¥*9°¥}ù~ˆjßÔ}›NBµ3}7¬Ê,[ X¡Y­¢%TûêëZ—ì +ÕìêX¼\éÍëF‹µÑÁ!X»Ùfd]µ°vÉäª[²µš\~N«tz+°öÎ ­]û×uB“ žbf`s}Ø\ ,ƒ ñEðE +òE ÑlÈ{Òv¹¬î$(KÎDÆÇ\HlU ƳjF•`¼’Eh‚€©W[Ùw™uЖ„{ǥŒC¿ù‘ú­ò@‰­ifÚ‰Õv3§,¢æµÑµøLúï›pìü·Ñp©îj@V!X*²ú ï‹TcšØ©< —'édñãwiÕ¯~„?¢4˜ž)ÿ¡šñ×AûØê°[™–J*YÕ½b$þ×…v0c`Æþ +hÙíxêb«)[]M+{;…’‹iãXËjÝX‹Œ*BK „öx, ¿ZIh=¦%ëqfFMǰAnñÕÔ pªÖJ1ýäCÿÓbõ@©ÅéÎà†0L“È0M_Æ0•º±þš}¥#®ÖµZ_ÞW4k$ ¿Š·¯o_óÙ5 Kqó`φPÕ.mE‘œjŽ);z|Íí_\ÃÏ—îZßfx³š2B¿Å¤±8¬ÍëuWaüÀ&åõ(ØؤryréµsPüo-4Ö`¬Õp¬ág¬Õ0JŒáïõ† +ï.jƒ°œi›µv­¼ÈŽ“4œ&Ôë‡ïbz’™ ؼ•V—3{Ú°ú; €™QíÛ‹lß/-4R0Rz8R@ÓY[X±S%déV²KñЙ\U¨ÉEkOO–¿Ívî%U(â@oCÐ"qp`vh;3ÄŸlùÿ‘"þ&«ÐðÀv6p +aሃYˆ#U]b*ðŒ8«Î¼ó˜j2ñVÈ•OiƒÅ57Ž lnµêmko\>¼¥Ùp¤»;ÝßèÒôŽwdöìÙ¹2ë]×úØÞWä2ƒkóÃñ®+®\îZë¾âÊp7L¥ð[‰^°Ž¯E>L­Ñå‚y&µR`3‰³Ï[÷’ûõ ‡jÒ ¡ä/HQ°ò)qníÊR"Ì ­¨š"T¼Ã :<~×­Z™RCÿd´FÁÂÊ&))‹2EˆCŒZ§¶Y Š2Ë䔯V~oªÈ‘Èc¥=¬þZI¥Ñ¨\à‘T‰I‚)© *áë‘}lîÅÇkn ÀÈ㪺Ú=‰_A]EîqVm`ðÂÁ!ÑÞé'¸¸Å-]ü÷ÀvaÊ“âñ¿Ñ¼,©¯ËJ£ á _Lª­Ç®ÅâÐ!¼VîR9F­ŽÚ°úÔpg«ÝŸ2˜ jmµš(F6N¶äN¬Z³µu3<õqêUÀ‰Qðü#RŽ÷¯aVüW@ ù°&†ùšd °ê_-±½ÌP8R2Y{"'Â.˜ÁLk²ô¸\döÉŽ}ƧÈ9¬ZÉ7 þæïà•ŒC®È 4îÈ>)vì#O‰ä>Fät iÅåH,`8s¢ 0 <µê¦e[c*©Ò¨T¶Xk<Ô‘upáE©^†V¨5ªÎho½[e +9‹* ©bÊXKo¨e$'¸sÝ¡P!¨¯+Œw ‚B£…‡ r¼Žó漦€]«S³³Ž÷7úµv“F/èÍ´Å"(”FkK´x’ý¿’9bYxJÒëS)b=Ñä~v;š1Á˜ÅÄ×E¹¨"¤À_”3…,uO*bÑ ÌCq<¯öìUÏšÒþ‹?« PÒE9Œï+ßùð À‡Y¢´!{ª!T¯ Û'ñW fÉ’Œç«…Yÿblðäì&xÄf¬74<_A‹Xý‹bl)<¹ Íe±KÛ8`êVÔjB^qûU-k<4…Ë`‘¡Ì‘¦HÃÒœ•õµ¥¢ V=#_,·ñë”´œáÔåŸùÍ.¶C“ùŠìÕ« +É1$oÐëh޵'Û|‚ÏÂ*y>(´¬Êé2=Oà®,DFëevšÄc{PF«°Ð|ƒ^ÐGžÇ0®‡’“³þx,Fúžàöµ=¾°ØŒvh«?.‚œï ‘ÛG¶=~iÍ䘼,.ÆNôù‡o\=´&©a¼­›îÜèï¶r*\N*U +¥Ù›p6^±8ÊøÆZ +˲æÏ1Ö¨»n4Ïç3Q~kaו…L÷°Ë?qèÐæ­$õ¬\Ëëµ´RI­Löt{Ž÷¬Ùà.Zeƒ… H0¿¶>r`ýRVgŽ$FL¡“s/Z÷0³fŒ5x"|u0B‰–[¹Ź•æÅ䪆2*l‡Þ†òzRct›ln¼|M‘ŒŽÆÿ c XŠš wƒg&àêCìÒ©i§ÓÄb²©·ÁÈî# ñnýØ=•èüaˆwÃ}Aº9ažº0Ö?Vb莦b>V„É:8â<ñºG-ûÂÝpaî~töcÒ «@¸k<|` ®ôDZê-ûÈîGç½P˜=ò—‹2¨ÙK“†¿Ù½äð†öumNGãHƒ;ne<½{GÛWå ölg4TïÖ¬b,QW¨ÑÏ«„ˆ{iožu¦ý鎘¾©?µ8¢·EVtÕYãmÞXwsÎÄ…¢CtdqØ^×`‹v5%õ†H¬ß©1ñ4ïŠ +¬ÕæÐyËqN—›7…Ãu–@Dïƒ5ÒyÍ ¶¡Rö,Û<‰?rÒïgQJ\c–mƒDl;îrQ OÄö ÏU¿ªèMõÇñ•0WÛq ʨXÃbl%<>O%ãˆç#Þ<“`n3©€ˆq6PÜtçúº‹VO… ÌÁœ·aU{‚õ¯)´-KXw¶Ó⎱ã—(²±> ¦N¶ÆW‡v¸aC›š¡8˜1’SÒ*q4Ã[™E>Wow{Ⱥ•¹,íMþÆvg4%€µ†›ú#1BÜ‹ôÒmU½ôa¤—> ìK³7Lél¸í„þPØÀ'¨OÌ⸠ôÂÇjO2{)½í„¨?DNˆ³êÏÉ…|Qu„±g†¶÷V4ÚgfPì)­jn¯k ·Äì:E¦!ܳé(ü´o|ÓUCI'àµàU›Öõ%½ÍÃù¦ÖPÛ@ß"C)léX5ÖÔÔø â. Þ-C+„h¬01º¼¸ä¤õyÓ,1‰tÕ7¸lFZ3™‹V[(þ·º5‡‡q%&ÐR7­Ñx0¦2Lâ?/y*4 NgX¡³à–Y­!!WDi®ž;¡¸±Vs…ö_À`ÁÌ àmÎÉ@%›Œ–Ó©ˆXNˆÓ])r'ÄYUvq¸!1K· W“¤ÄŒrûºœféòF ¯y8Ûâ”·É›9(%`v-Ïzkóx×&ÜÂPËU«Aé¬v;} Ü–KXÔÏêôZ-K[-&R°8êm±¾Þ¥é~ ØÏ¦þˆ¿¨6‚}AÊ'[|¨±1Óeñì±Î%aW õ0ð¼àñP€¥\xd>KOü‚‹‚®J3H%_cñ!±±1Ö™=&.ñÄŽŠ<óˆX펙Ëïó‚| . +sÔÛ†KÄø:eøO úŽeÉúUAµ +⤔B¸1â-D'é i°l0¥¥«”F¿Ã]s)•*’Ö(¹H2çÈ d,–x[À—õè~èiN‡íZ½dY…Ýj`yVãˆÙ9›aYÊbæKiF¢6£a­Fޤ9–2†½ž¦:·RföEÁJû“©%ñY ¯âRœz)ÎÇjPP~Šâüј-j·qøí +µë`…¼ëôHF²ÇÅÈR8&’óÖãdeßnÞù=5Ü\X1Πü^¿Œ-ÝÝkͦ":š’S,M Á|ÈÓš°ç‹™6AÇÊ `aÇ—«T` T•ßwr>CÛŠóÖt†€Ý¥$Eæ°›X «ñ€_Š(5Fܪç4,L‹|aŽ7¡Øñ?0³S@¢ß'ab"ÖÂ|PŠÓ@TÓÕJ»\a?¤Ýý‘B<ÈèÇý¡“€º8 •s¡í.—?ž½_„}‘ÿ¢áÙòЂ¬úçg©N5Ù#ˆyzó,­/ûzv ¶§ W6d̵ Ľm‚†&(VEìakº/çQùúb鞤éö•žNIÆêüõ>¾\7¾$hˆx×mÛ2z–VÊYF!Xô¥pe;‚zÞmŠvêÁŠ®oÊ:@ªÁœÎtH(´—0þ¦À8üX‰#$f$Ã:çŽ[0³$’"h²Êe4i压sëÍQ tœ¥?ÇaJÛòcrÑ¡·ºu¸¿ºüXÿUÀ¢|že‰ Ææp°eJH¹J­Ä§4j¥Ýf 1 AÿðAð˜HX;v¿tÿq|7PœsàþYÌ—.T=å@‘Þ æZ `»º%Wà|éxP š¹ßø¢ˆ￈BS«BׯLwCY"÷‹–CTñþù:ÎÌqb³<á3z´É„âGµZô ;¼§÷×·'šVlöLG¸>îïÚ´¸i8'£máöÜ•ÑL¾SÁ{l¥Ž m9»²EG&`8í¬{ͬ1Ðè÷ÒÞ¾¨îkY§3—ñžAÜjö¤‚¬Éhbí¹òO´V‹Yël ¹|jÁ ÖòßÚòhŽuJgµ=ïJëÚ&ñ‡N†B: 5ï)ytFcØêjÇÛïopŽÞ0­+à…£q@M+n=J_l–ñ5Ól¶>m5­ÞöûEÔ/ã‡hëQ‘ž?ÑøBmp¼”Àé¢ê5*¢¦n• ‚׸³A¡¡­/ì7jhR©V)wÜ™ìÉyU¾îº–þ°ÆÝµciaYÆt!'ˆD4XïÕ’¼Ïáì¿ܰmcPðšÔšÒª ¯bTÎ\gˆ7¸’ySlÝP½£aàVÖl2¨šÓÎdÞ¢¶ÕÜÔöyb/ñ#ÒAPrö âPòx¼i%ÆJÉVââ&TÇT)­ö£¡R2Z}†4€s¥d=¨s˜‘[*%7ƒ’ûQ+k¥äÐê)TÇV)Ùêüªc¯”ì%w£,Áðòo¦þMn!ë1}5¢,¸0àž“J 93>5¹gƒ¡’†©š QA¤t‚Ãçò›•:“Ã`²©ŒR¥¢dT)a–]Ѭë§þ¼üzPì¸ð.c0 £äaü˜vÛ0õY//aF¬[„­Â®•âqØbüËØ¶¼a&ðšÀñG0/fÄÃdŽø£%+=¶±wͱÑ-Çz·%#ÍÇéc‘ͺÍ(l&Í·”Ù¬ò†ž® UcÇú]sLííÝrLD9š‰ŽH$}L\ 7˜Å vWy‡þá9É*yIãèÒ¦.£8“Ó 8Ô$#÷(y³Óh´3$}á•5ѳ¥«¬"Œ5Ù³©£sERwG$çË ¬äf5Iü’¶ÖMWKôlîèX‘äîˆÔ{s~3«ÕûëK0ÏLî,7 Á +5§:aë[:T Úr½qÇÀÒ! aºÃ™´=ÞØ˜å9G¢Ð˜¾ðkÿ¬JA?¬”±×åA¥¤T Óa›±1ù•ò!ŒÂ´Œ4 +;>±nl ¶Ƕ`;°=Ø!|é›Û—n—‹{oh¹!¼óúøõîuý•=ê¬Ô!ïÐ¥r†œxÃõ:r¹Ž×ß Rö+V›í}»ví^üñƒ]3WooØn[ë\˯0­ šÚmt4¡Iì>¸}튶D¢mÅÚíwSÁÍWyƒXòäR3” («{#sé¶à?J ÈYÝý•‚˜9iý¨·ˆVTèJÏfB•w}å]¨¼W¿§æ\Ï}Ÿû=eš}˜Óõ÷do¦r¹ÔÝðåÏÙt6퇟Êù ø÷d6ÎÃðõ‚‡§ë^x*•Ëdüx:—Kãß_–WÃ×?ÃÚwÃO²{ÁK +\•ÿ%›Mÿ\à_VÀÞöƒüë™dý…ðéžT*G¸+•Êøð°ÙOs©\|Zhaê¼ì:ÙkX}Õ¯t*ähÛ$~á9,Û4IhJFžfóÿ(­ ŸÏùËD_ëËì l+B‡Rîˆ$ÏóH·ÈÀ8è–>hѵŒîh7¥".…BA“ŽVPF{PˆµÆ ÷*ÃÊ*FC½ö6A`$d –W +fÏÞ¿˜0jÉÓrÎ(ÔJ•Òš_^ÓrŒY0êè¿®bÖM®žú B“õÒÎiss>@kµŒ Ðíù<‰ÃÒésŽîvæ\^è!!Û ²~ÉHæ0$M…ktŽô9Ô˜s¢Tð +¢K­_êÓçfžñÁN!KõIeÆOŸ©©©¯—?/û•컄Å Ô!~ S’¿!Ê÷Ñõ‹Ä›2-ù¸þ ½y¯¯ÊÆÈó@K]ŽìÀx\ï™Ä÷žÖ+íO±&;IÜz*õ?-»ƒ3®(·ŠÎKT{µ?%JµNG£2ÿÓ"¨g† TŒÍ$+–Hh¿I™ÂCÁ'-šZP‘'~Zؾ¸óÚþpËÎ/on¹Ö§ÁI¥žQ™h÷b_ÿÎàèhaMˆL©‘1N¿»kûà¶—n¶8ÔnƒÛ©£ýbñ3ÝÛF£Ã8XË‚!|Û²è‰/`Òõeùkp]F˜$~@\ 9±A´;Ä*œ“¸÷¤Á Ó¿ˆ{1šøô³²]pÅ‘vÉàc?k€UN‰ ­?*‰Õjp}©:¬5F~ÅÆŸ¶öñáñE,²Ûn¿Ò)gxmù?ã8®ÕÁL˜åˆß±œQG¼è0{‡ðc^K;lzp÷?ãu”|—P½>Í·ÀøÞÇW…£ëo?ÀŽ® tý]âMâ:tM¢ë—ˆÈAjÀcÁõÐþIòÜâGׯ£þσkº~|ïDõtýMpíB×jD½ëˆW‰ÿ±a”IÞÞÁw€Ý€ï<%¬…~,ä·žŒ=nT ñ8 T>è‚: *4Ñ‹°Ê)KìqтاƱ]1öQ"ZãBèÝ“Ïðñ LÁP +“/í(† +…P¨k}“o¬7²z±L{R‹c½Á¦ö¦`°óª–x¯`R’_PZÍœV¯mÊx¡pÃ@cöŠ’_NëÔJƒ²Xô‹¡­àMF"ùÁ|z¤ÕkÔjôh6ý@¦GÔ`u¾¨wQ[ƒ¨ó{ðý3äo0‹”óû½Å©Lš‰Oc<®F|u¾˜«´tŽÉ³&Íð• ~ùœˆØ)VÌÎL£,(=§—2=ve´Îâ䕸>™Lë|nâJ¼—rEë ñŽŽ&´ŠxUg ejæÂÄËèÝð¾þÜ׿™û*i8`1€›ÃpœWRêIÀÌrÈóðÎÐ2™­œ´ò5L-}Þ—¬Âä² tà‡¾’•œ óò€?(_¢]9Þ´Ü«ÿ¬ FÓz“lªüï4C3¸?åæd¤JQ~aÔœ"Á¤S4€U}»Yòô} [J8Kõ»Æ´ËZ®l‘Ë'6^¹SO°~³`°ÂÚö±Þß[9¸çýÞ¾|—x.Ú­¶œÃ|=ü’ê‚_¬0|ž7Ï‚0Gw!™}¬b*“’ùºZyã{âÊÁÞ=ï‹°»¨xNú,çD©ËªT(VØ‘ažPœ/(“P…@4)ÕG\É¡ USçé¥w$Mð*ø”2IöÈë/VÄ™úv­x)n¼ã*S±%¥Æ6ªØ,<,×h)ŠÒù|«¯mj^Ñ0R¦ÔÀÕ·­\uSV'… 6-‰ÿ_B¥ ì±–ð¢Fö¤ÊјÈo_×ÏyÛ;²£í';=_ËÌ‘P lÐ+E„íåíÖÆ¼Eà}þ`1ê®ïèév¶ùüm×,ê,®ä´¨ý?É J²ò&[WK¤õÚ»Wï\œZºe×D…'”;É}ØQì9ì—O žèÐõ)çÍ7=r§ó»SÜ{;}‡wî\Í5îOz¯/~e…lecãÚ•k>µ÷®s¢ëžÛ–XQì|⽑ÁGÞïìËvm>ì¶œ#»ÐÒ4Í&à_0°5²¯Hü]¨4rë¼yö,ЧPQ…yê>µ÷ð3³~gä‰÷Ä‘ÁÎGÞáo7ŸƒÝ$à$ð{h•›æ!ôƒ± ².¢Xxf4ŽÁHÁY|4_i›•„³Â©ó¸­…kÝÑaJFÜ +²FW1Å[c.F‹ßmáÚ6Ü ™-©É§™$–’Ó̶½Ð¼²1[ÿÕ·]±ê¦4/ …#ùJ…ÒG¬æVs3lýÖ [¿U¾fa&W<¨tä“ù3S"ä̬01Ìß6£™õUõh dË0dK9ùaØò +N£ÓÊ_g¢öWN³ü½Ó,õBì_þÆ|îEº;y àÞ ìN)cƒk•sllÓÄFç6ÛX(®ìè(î+<+W l>Wríì_2<Ô4›7«,ùf¡p6Ë-ȉÈúY5°0Zµ“`Ó|¦û(¼våA>º<ß4/ßÑYù'Iø½Á0ÇÚ¢Nuüaxáþdÿ¬oxVùT=…È£ÃØ½hôÒí-×!tx÷5Z7¼SfWQ{ïÊ›:x!”…Æê,ôJfZ ¡ás ^z7U¤ÏÁKHŸ,²_ÿÙôo5ÝjæÐÅ™²ZYô·ÊÎë]½½¹4Öh¥¨ œ6z°´¤Ô¶˜»þZ0›—è :—N1W}t±³ÍÚPo®ÌïÀ¢±œ¿ÃwáûÕ¶DܺÈìHù m×Þ=Zž˜îrFUf®r)˜¹ÏbßGcßýÌÞ§÷=}ç'?øé#û_³VŸÝƒíÞ°aí²µØn§Ð%,ëZi®Ëõܽ]{¯ùÔ¹gÆ?×spÉÄÓŸé(½ïïã»V#»±if¨Îjh“"Vx ™³’¨™á0É«IB÷~õÜÿgïLà›¸ÎE?3g$díÞ$[–ÇÆÆØŽÍ¾y·ÁØŽmö@%ÙÈ’"ÉCBŒC4šå^ÈB³õrIÙ²47m¹é’æ÷š4/mïmûrã6Éí¯iIšÜЄ8ï;çÌh1†Òöwï{öö™™³}ÿo93š‘äÃCì¿cÌ—0HžãÏ><Œb | xê)rÔÓGœ¯¼”|!¿¸ºœp¹„’ƒ¶š»‘ KÜ""{Íü A÷­Ä§‚`ãÌ’ìÙøì¤©S%oüRËJú_H[ü¬ÉÖ‘kò³kX\‚—Ísp†”=~_ ž:‡i¤ß€ëÐç–å”—çh˜9)|Òœ¹g¹CUUAiáÌÊÖâfÛ˜¾¡þ,ÛpzQ;–«¦¯½N–pÄW**ÊÞ+“|.º°hqC½m̧oX„Û:’|‹Ôejv̇; ¯!Ï‘õ%ö:’üÅϱ;·’ÝáA¾vÈ‘ +òíMòÊ=yU ø÷«xü¶™ &µ’WëÕúŠ¢ ‹mI&N•iâóùו۹‡À¢|ÞupÄÏPmÓíö<3§Pš2§Ûæà×—ty9–[ŸxØ Q¤jbNFJ&~ÕÄ–~ñ^ƒÑh@©ŸÞŽÿ*3méMz ÿ3pEã„+yºÝ‘@5žfÇ(ÅKšcÁ}j×êê©PïRî +~f˜y†~ÒJ§§£»»£o–¯z¶/€K\í^ãªôW0É*eNR +£ô¶lhn[Ð0sÌZ¿ƒxLÄïÆ:+͈,‹8õ¯£Äâ²Î„Ô â.´Œù4XgŽù¬õÒ¯Á1û=faÌ'õm‘²uH +7Y÷—sÒe`ü±$'"ÞoíÜ(à«Ï+÷ZàtÈ_—^’—¡Tpøñ^RH¶ŠiŠг´Ä~èx,Å=8¾ù·tˆßŽoæÿMaÂþžof±¿Û³òÍÜø l·«ÉÒ’F©0j)5=Y§T‘Õo]¦åâ½±W ?=@z °E#$ߪV[ó¥QÎ#ÞAž$qTÆûÆ}âRg¸œ+LôÛD?˜Ôú{Óÿ]ý·³+µ"¿Îs[?±â´††êóJfÕ´V3Õ`!5=éýr‹,~ÍZºïÊØ˜lú®3‡Å®ÉJJ2e«›9+K`LödzàdJŸ~–ÛsRR„mŠ~à\þú3ù/ÉW4û㾿Ԕ¸F}g^aŽôš°|ݯB•H8CvFžeŒ¿¹AÈΟ•’ÊîVè̶K–Yàú¾ñ3$˜Ó´¼Þtì¸^Ÿ^À=8NÐ%Ý1þüÝ.Òd&ÉaJ˜;éëò¹ì#§A©40gÙ#sz¦±Ð€lG‹~RÀh3&ãÓ†.yoþB`f>¹nz~¯}¯6*°õAÛäÌ£>Üú´¶ð˜/¡½ô!†Þ1Tª¤‹&ùæ+¾5«`Ú4ùP„Xɰ¤ºbAåêHõl™Ê;•…)ló”.¸qƆ¢y¹†ôÅKÂ3·_?=Y±hIï4CËìZOuŽÍÎ=lOïÜ N{Ã6cÖøw§Ïü½¥x¶·t—™1ƒ½;( †}øL²U“¡¶Óaµ3Ž)'¨-i‹?Ug=æÃµN+3Žù”Ô‹~LlT%éÝ‚ÓQ%X5ø¤ï©t»êe^úÃÍÛV–ÝeŸ³læÚ`gç`kÎæöFk.÷=}Z½ï†ëêJR>{Íá݃ó t7œÉg"ÄKÓ”bvZRZcÎV(ú‰‰5™lÊg§áù›Ÿ³Mn6Pƒ~}ÖJkRðA³iÊg}¸ái›ù9Ÿm‹ÉjåH© ¿¹ z‡Â1ЦådòÒ¯I£JÏ]0©Ly²Í¤53IzFÇ'¤¶ì•ÊWè°zœÌÇ'&€h Ðd ü%8aˆ ÝøÓ³^ö*«€Å­Ÿ˜t(_™aKUêÒMÜY{²é³;ñ|¤ç>˜éÌfÑ`HOÓ 99iÓsUŒÒ˜–Íœ£2 ä ´É¡¤‰6Ão¢†~¥¢d}â‘Ì<ÿªÇA¤ QœÝ鬔³ùΞ†ŽQeg‰™ÜÍAÎVPdAw) +, Òìɾ‡]˜R^XaS0rŸ½ˆ?¥‚[òÙwÉöI[–:Ù–<®ä1?+8HÏ»0…L/á -ÌQ3Ù°0§è’ó`êßJÊ6’eÕx©ÇåáÚTHËûK-$éÓ…ªK´Mz|,Aù)Ödƒ0’g]²§Xù»”…©¥f«Y'Œæd´#[^aÔYBr¶…=Ü·{|©Á˜bâNÛ­*“-u¼kãAö z“ ¯HÒ“¨l¶óMR=–µñŠb±òiDlɵgîØ°v'æd +2îܾ'%w¦¥möÒµe…mÑúÒ²YãŸjMÉ&îŒÝºq“mZŠjü|fy è#=Gën9s yî̬!çLiÅÙ;šq´ˆI7¦‹é(==³øX.v°Ì.ÑÁΛ^ªxý³sôœ)}ÆQ´Ë->曼åÄ3¦trbO2Âç]¢yô´){ý +{¾f¤XtJ6K]±hÖÎ^P`çïVæ§?î©X¸nf]YMqŠbNËm9Éõ3ŸHJNJ6òj}ÒÉùŽñ$ÏØÓ׸r‹ß´φ¸”ž¤b2˜ú½;ŒRiÖ«tJý“8¸žÖ$š?šñÆ+•eøƒN)ÓõOú&©5£"öùú :äS(™×˜ ?¸ eeðÃß5ëðÇÎrZ“Vñ/ÊÌŒ”Ïn#±µ=Ù ‚-ü¹²ÒÓ]àô»Ô¹6&Ó¬MNÊÆt€³å¸"ñüÞx¦‹ç˜lZï´ÂrܧHh ,+ RJSÙâ•h|ŽIÔÝÚ½–}Yo4›އÎpÛ2ZXóÈʤU¨‘®‘YòëWX‚ó¤9tø¾DƯ_‘óutÍc,ä: »53ÊË-ºñ_ðkõêlÖžbHO¯†8e ÿ9Rÿä^Ϩ R“2`ˆ b2Ø#B¾ž„- ÷;’ÓÈ,ìv^,/Ïá¬hQa&·P±#ÅdH+[£{”!?ÏQa·^N¸Rîû1AÍTøÉ~Ž)FeQ®$rüJ¢²ÅÉïÔª8Ù;¹hf§’ôNL´’¼=™è\ òáDÑ÷ë‡&CŽáyYŒ_5^¤bºdé«ñbV›OÉ’ÜJäþ òH‚|“”#©³ãä±É%-älzKjœ JòÇÉÄÚ'ÿ'£y¢d²™ÚËÈÏlÛeÉZhï·÷gÉQ眣’;r{î¾x™Ö•w¦`wáËE¿,^1£ìR)¹ùJ2s •ÒÞ²n,å?¾îÛ²Tœ’¥ÒOäÓ‰2«æy &³÷ÏY˜ ÏM.so{ë¼Úy¿¢2ÿ©˜,D’œ£²èÛ‹o¹T®w/yÆñ“K¥jûdRÍÄɃ5¥—‘gko¬ýUÝ@}rýînœÞxˆÈXÓ7–Î^zï²ùË~Ñ|CóŸ–ïoÉjÙß²¿5­õ^·Û–H²¿í*7tÞ𣿴§dJþ +r0^:Iny¦ãâÕIçâÎQy¦ó»ù|Åf*+÷­z|Õ“‰²úëkž¾TÖ¾/ëN¯;}ã‘õÚõÁ ê ¯Ýäßhßø¬Óî|µkÈ…\·¸­îßxnë.ïþqOyÏ»½‡½ÙÞ›l›~·y§o®ïßûõ½ï8`|5p8ðhðúà;7ß{óŸBO„[Ã?Ž”F^î¿o‹iË6¼¼uÇ`Áà«Û¶×ÝÒv«}GòŽÿ¼Í;T·S¿3}§¸súΊ wÖî\¾såΛvöÆÉ+Ã3‡Ÿ¼Ýsûû»vÜ‘zÇæ;³ï<“Ý»‡ödîy}¯ó+ÂWŽß¥½ëÙïHhdûÈ®‘»GîyxäŸFNŒ<;ò½»¹¿(É ãSòßUö/Ûÿæè¦ÑF?û"r@q@w`Ç;ì;ðÛïøèÀgX*ê¦Ì:˜2óà7ž<øüW"+¦dJ¦dJ¦äÿu¹ç¦{_¸ïÁûÿÃù|`¢Ê>”}¸t¢<`Š“ÓTüæC{±<üÌ”|9R râȉ¯é¾6ôµ¡GŒìxä,²Þñè'~ò˜ä‡ßðø£O(¦dJ¦dJ¦dJþ?”ÙOôLÉ”LÉ”LÉ”LÉ”LÉ”LÉ”|1af&—Ëà÷zÀg$O^!ò¹fz²…Ë£åßʈ©àÿY*óŒI*+ ÿ–TVÂþO¤²ŠÙ¢H“ÊS¬8$•ÕŒ¨zH*k¸#ѱ’˜•ª¤²–)R¤²N¯®—Êzf)Ôaécb¬V+•YF•Þ,•9FiyJ*#Æjy@*óŒÞòu©¬`´–SRY û¿#•UÌBËÿ’Ê“š¶L*«£U#•5l[t¬$f†5C*k™TkTÖ©u­TÖ3ùP1,¯†É™#R™r¦eÊ™–)gZ¦œi™r¦eÊ™–)gZ¦œi™r¦eÊ™–)gZ¦œiY§·ˆë¥2åü Fd*˜ræ:f”–3^ÆÅ„˜†ÿÝLöÕ@)ÄÉo'ìñBÉϔ‘*Æ"2í°¯‡é…ca²å¿¨½~»¡¦Ži„Rìñ0P£zó@Ì )‰L3ô<ýö“}Pê!3áê B[y 1:çr¦JÑ­¹L ß =¡®ã:a܇‹Ù,Õ] +[½°í‡ù…£útÂ~/ÑÁwÙùt"S Û]pïu +‰:Ò~’¦"¥Žºˆ¾2Ýh"{ú¡–›Pa/Ù·œi‚9a:^ÒÎO¸.$í=¤†‡éƒ11e7ù-J3’ëŠd˜ØÔ s‘­ÓÀ,¼Ð2 jˆ6^¢‰7ª‡þ÷A :Cª“Œ!J¶öB¸W'ÔÃ} ÂÖ”"ÄaЯ Ê>2§aõõÂï‰í5Bt¢cú‰F.2S?%LìÔD¬Ò {°?ö‚aÒ¯G²…—èDY„‰W„¡W§ä¯ØbAi¿ê!¶ÆžŒjCçØ#Õ ÃÖ6©÷hA-´%j%'ñ} zÉ™Ç3q’ñ]Òø¥“d¨—èIí#Û¥ä9²çÏ^*È·eÄ·™™ÐæòQ!óq/ÅsÛµO,j/Í¡=’Ï£µ±WSoðC}ñ«¿O.ÖLeãÿ1Ù¸fâbŠHN—Ž‹LñŠ™Yç²Lˆ›°Å-û.ñžRÉçÊ &~$ºS +r;lÕ5d š… iJ&µ¶\[Î.)¯ã PBàzAÉ+âsxpõK¹ƒöâ‘¶R¾ölã%ÒÙu‘yÈVžh±ˆÔ‚úOè’=ÝQJ®*ÐÃM˜F¤•‰Æ'·$:ÎD h† œ\$ž&c6 iê%‘æ#1E#ÿRö¸ ]uŠ þôž¼w:‡ket奵;B,çJXC'j[1'Îkaœ`M¨.ôLBΕ¡èY‰›¬Ë~’Gœ—Õ”úž3Á«h>H¿©V´ÜOâ…æ'7Yã¼Rn¡ýàš>’ý/ï£4‹û%ËÄz—#ÄwÆÑKòW⌳ºŽäK¤ƒ|ö!SNôêb')»ùÜkbž› Eò‚‡äér¶á%ÖÇVuÂ>L¨jÈÇʤ>oš;§KÑ˱3y6_duºÊÕ@´Mè£YîCÌŠzó&ØGí${ =sñI«HÌ»¯´ÂÉ^yùU[®-9á¸ójoêi,š±ý’ÝKˆÎ!iõ‘Ï+è9SdgÙ©_¥s!:B€œ“;‰ž²§8™Ø*?1Ÿý l%ä$ºcn^)×»¥XuIçá~2×ø5ÓKÎÔÃÄ7¥9^Þ¶PîH\çÁÚÓã¹ã®âãáªûcbW—P–I“(ñEç Çu¢/]=Õøžj¿Ò$útŒÄáØwv”Wƒ~råIÉxâfà&¿ñ˜1.› †+níˆ\!ÓÌï&È+Þ‚„,NÏÆ¶òdgÝ~²FÈ«Lüµ›¼NL–S[…I® ¶ê’ôž|Íu^Æ¢¡¨öaâ¥~Ò;¢K¯Š¯Õäõ­‘©#G[™zØZ«e;ÙÓûDÈ¢ípd%lÕÂÞZØS5:¤ã…ÄR«È:ÔõV5ŽöÑ¿[`{ ÉqõŒH¶ñÖ2¨ß}á¶uÌj2FôÖAj¶“¾—ÃÞfø['ÕÃ-j`Ï +ØÆå’éx-Њ^C4Ik"i'ì£&Ϊ‰Œ(Ïl9lµCÿÒÑ*軉ô‡çǯ'å–è<륙VF¸gÜg ̨™lá½+àoÔë ãWél[ˆõpœêRGf€G.•t¥õ0Ÿ•Òl#<¿f˜VU„A#™MŒ_ ümƒ™ãþàh'Y!Z¡e-Ñ´ƒÐ«“˜am›ÉVL+j©¢ ¦ŠÔBy9üoˆ²k'¿é\ÚãzKd·ŠÕ¢úUI¿k¹V²E­QC¶:‰­ðÑÉ–íD‰£®"žXGjU;¢RO¼—Î^öN:FkÜLèxضñs‘½Z¼BŒÐ^äã+$K_ÊS¯"Lð¼:¢#_®gˆÍoˆå×Í—{]¡@8Ðk¡` äŒxþR±ÊçÛ½=½‘°Øî {B[<îR]£§+ä[ƒç`Ð#6;ýÑèñºDW 8Â-DÜsy¥X€ÿÌ-Û¾`¯Øèô»®Í°wi ×/6ö»ÃxœÎ^oXôÅ÷Ó‰ÕÞ.Ÿ×åô‰ÒˆP'ƒŠá@Èåñtœ!Øïw{Bb¤×#.o꛽.?ìY(†=ÑÓ×åq»=nÑG÷ŠnOØò±zd ·'âôúÂ¥5NŸ·+äÅc8žtã8ýaè%äí»}^ß 8àôŠáþ®ˆÏ#†0®×ß“‚ªO´ô»@Èï …KŦˆØíqFúCž°ò€ÞŒá +—ˆá>'pu9ƒPÆMúú}oºô÷÷yBP3ì‰Âb0kàÙBï>_`@츢·/ètED¯_Œ`Ö03h:úa¬@·Øåí!Ó"ž­hìÝì)%5 ÃbŸÓ?(ºúÁ¤tÞŸ ‡œ KÈÆD=Î>±?ˆ‡{`OØ» ªG Ð¬’Sôѱ°ó¸z!˜˜'Tu¨ò˜ Ö%ÀÁðç”VTJGfÒ# &ˆ„œnOŸ3´ëCLõÐ Ä»]Àà÷zÂ¥Íý®"gx:XSl‘ÞH$^PVæ¸Â¥}rËRhP zBÎ`ï`™³ ü W…š¾~—3Üðx¨,Ü ú¼à@øX©¸&ÐäÅ~p¥vZ¼q‰#žÑí Á‘©aƒ!/uAüu‚9=¡>o$Ýu ­d·dà?\èÆ#”\ª;øƒ»ß)Án¹Ú–à6ò`§^¯«7nf0¨×ïòõC ÄfðƒÇy§Óðˆ«=\i¶4šÀçÁþáHÈ뢎)@üQîk!!Pä…Q 6pJ árü¾€ÓHÏIQ‡:`>\è!¸=XM\§×ã &…ü>L«cƒxI¼ôz»¼œ§t0åîŽÃÁyúÿJ?<¿P«e¡×{µõu:\ýÓÕÖ7p}þÝ«­o4âúÊ«ž¿É„ë«®zþÉÉPŸçç3ø] <©ÏÃÿ¥ä· 0›™ Æ‰ÌÆÌb +!¦„Y p/s=¤ÒZf r?$­ÇÀ<'˜µÌ ÌæeHå?‡¿…4ü³ùœåX-‹ØtÖÀæ³F¶‚Me³ìRÖήbE¶‹Íaƒl»ƒmcïfײ‡Øõì×Ù{’íg¿Ãna_coeÅîeßeïb?bG8Žåtì!Ξâòع2ö%nû}®Ž}kg?àÖ°sÑR®­à"hw ZÍíF>înâD÷q¢û¹cè0÷-ô÷#t†ûú=÷ô÷>ú7Žþˆ’ÐydAï£|ôª@BKЇ¨}„Ö Q7º€èÏh+?íÛïKä‡þøU¿ëß2à·ø¹_ø ¿Qà÷ ð;üο—€ßÏ€ß[Àï=à÷ ðS?3ðË~ÅÀo6ðs¿eÀo5ð» øu¿>à·øÝüö¿{€ßcÀï(ð{ø= ü~ +üÞ~ï¿OÐ +ø¥¿àW +ü¿Fà·øu¿ð~·¿»×¡D~ª’8~zàg~Åð{ð«~8ám~ƒÀo7ð»ø}ø}øýð{øýãfy¦—53aVd¶±¥Àoðk~«€_7ð ¿Àoø=üŽ¿gßß¿¿ß¿ l?°ÚÂe°·rì^®‚½‹«~@™»øõ¿-Àoøí~‡€ß7€ß?¿3Àïà÷ +ð{ø½üþø}ŠîC,ºiÐa”Œž@åè ºýüë=´øõ¿-Àoð;üŽ¿ãÀïyà÷#à÷sà÷ðû=ðû/WC"¿¤…qü ÀÏüf¿EÀoð[ üÂÀoø~Gß÷àÈ/ßGÌZà¶M~¹Àï:àç~­ÀoðÛü¶¿¯¿û€ßãÀïðûð{øýðû]Ë!v=—̸\àWüê€ß Ào=ðó¿íÀo7ðû*ðûð{ø=üþø½ü~ ü~ü~ü.¢UHV#òAL†P1ð+~ó_5ð» øm~»ß}Àïqàwø}ø½üþø~Ÿ£x=ú˜ÏBøéèÏül~>_üÖ&ò3ÜÇÏüDà·ø-~ë€ßfü-GÀïkÀïðûðû%ý˜Yþ¶¸m`+€_5ðk~]ÀïVàw7ð;üŽ¿çßß/€ßï€ßÇl'°Eœ•mãf¿ÅÀ¯øm~à· ø~¿ãÀïà÷2ðû9ð{ø}Ⱦ„XöûHϾ‡ì쨀ýbo)šQ×üÚ€ßzàç~w¥»€ß=ÀïAà÷<ðƒü‡Þ~£?ð¿|::Ï¢÷ù¹è¾ý‰ïBò!à7 ü¿‡€ßQàwø½šÈ/¥;Ž_ð[üV¿ð;üŽ¿—ß»ÀïÏL-«aêØBf[ üœÀoð; üοÿ ü ÿq–ãDq¥¬ò”r|*·‘ÍànfíÄ/pɘ+â¾ üÞ~ØõHÃíG¥ìþ‡:ؽÈÉÞ…BìºEØCèaözŠ}}ø½ üÞ~Ÿ³ð*öcÞ€–‡à+«øJ´š¯B>¾…øºïG÷ó·¡Ãü^ôá¿Ñ뇂EP˜Ñeè¼¢½¯X>PlCRÜ>TœD)^E+þ€.(>AV*ùùJ3¬íeøb7Šó¢Gž={¤åê"Of<$SÔ&ÚE‚p^Áq–C +žÕðAÈç¥ÒÄÈT ŒZ­Ôh̹¹·UíT«Xµ°(·º‚p×µ[ö²zÞR_ŸS?Õw^À5U×7ʡĭ!µjf3⸳ŸÙ WdÕp¶L:ÈÉPÅ!¢F¬š§ƒ›uIÚº Ö²jÖnÛØv¤ À/w9v9p¿q¨|覉Hœ73d·ÉaCx¦;a@2œ¤KuíV<€¬ÙÖF0ŒZ‡m¹Ã1™ý8¶žZàÔšªªáa²,ã-õÎáaìq¤æð.(ÿßæÎ;®©d{à7½S¤‘Š‚ÔŠ`¡wDPTl¡ƒT!XC@EE)6°wE–ÅUÑ ED±aïÅŽŠð›¹)D×÷Þ¾?öó~wÊ™s¾g&ÉðL +G¡Ž‡ó\M'ãèT±+ŠèSÐ($… =¸0]î¸"ÎÄ㉒ aÐwø° +ðhy‘m Y”:IâÓXßaU²þ8É÷Ø—‰cÐ 8:A¦~…Ž£0g"Ü@ÊÅàˆNr-v ½¸7‚P¨¦–zzbÅÒå”)i:O\)¡@T¢ 34"ŽFâpz°æxX}nb7ÇF }Ì6ÔMq10R2òʦcÇ.À¾QŽØÕébW§CW'âéd^I‚_F¡<´)£<ôvÃቋ:À ƒU¯œÃqDRú +ìV <¾œÉÀÑYŠ%'ǣܻ¼SÈYï´ZâöÐ_( +Êœ>§^'àФ~_€Tâø¹)ìh%lzz%‡û¾äL"…‘“˜ªFF^¹Àû1I”¥eš<ÌýÛ[ +†ª–*iÏ .…’¤Dû@ƒ(Eƒ$E< ÓptOPˆ¬CŠh„¨ + Õ³:¡c8¢çèìœ “&á0»—N% é"ÀRhÉ2`"Æ CƒMÒ¥PÈa+à8gÄY†ÀW!–àäBü†NáÈAgáè +6jäoäïï_àUà­´R)‡“Í‘Ô)!åDÆ ¬`ƒ¤À:.#… Ëb7`‡t +sƒ4<*ƒ…ð]º„P„¸Èv‹Fžv²Œ?#ƒŠü Ë!C l—B—;VRâ1(àTüÌ J¨€UC„&SUeÔPn@¢ÓrÃphm8|k0À:ŒN2 Rp08‘#GŽÂš% +㸀)íôÿŒžA8q°¿,´3Èÿ8)<þ z°¢ƒ(¡CL&°KŠˆ ìÅXe¡ '_éáLx˜"¢$à } >MpˆŒ$˜¨©'ÞÅÓ§JQÂé•”‚ÞÀõ}ŸT$‚õf @$Ó‡¸e÷S©¯ä8ñKµÁŽ7ˆ§ˆKñÁ0¤íº‰Wr²nxŒï¡pL"¯S˜-&) »¬Gz þõÐé,N[š`ˆ“ž“‹S¦€AEt1YàJ#1@‹Œ- ù MP9 *ŽA¯' ”©Ž)iúå¥b¥ãØFJ\Õ +‰«;|ÃV6ÅÍφ ý`7 Ž¡ƒBàøCàäàds$µ¢?-M t°"yè bvp Ö TÜ/„£‚PÁƒÇgó<G†ÀÃy= žAW/D²7Ä ñ‰”€i(£v)\¼Ò0óÊOeRpLhù!¶1+îfŽK—â·Lò “ +Î+j¼ôréÛ}pKë¢ûB~È Ò‡È2©ÌA"‰‘Ä ÊõXíO=ÊΖL",&4Médaï%€u» KR0aÖV Òw_ƒ% Çá\È+8¶ÑƒpÂê†ëóñ.€N`ñ}¬\{Åí&aµº`»@‰&`ý0`WABAD¹¥RÁÄë¡£L £˜F1)€QL “eã’‡ܧ‘œÄ)¥hL +Øß 8A­ J$±+h‘0h1ÅÐ"Vàû,hÛ„L°÷0ôòjöÊ-È-((,XóÖóM1¶äÁ¥‡h"˜‘*+ë-ÓÓsëÀÇÜZL. ] ÙïbvÁóiÚº°¿ýƒòx¼ØÈÁù€^ª|1h \G Äx0,qÊFøbÿQ•,> ãcò2<^ºÀ“uEB3ISÀc\ðbœ±äpÆ"â ;†8c0p &Êñkâ<43„£Ç@cÒ&ƒ€€X#`4 $®ÀQÄI$Á¤;"\"C–ÂïO£:A=Ò0é PQÀvBsò‘,…BÕ'“é(@E(Oî!’\ ª¥BD|åRìU\Ã_ +y€nƒÕcÕ°$móèeèPˆÀQ\ˆò`‚Ý_† ‚‡× ˜D@w•tŽ >ZãZãóKαϱ±ºíx0ʼn`ŠÄR½&¬hB2X‰ò@ÃaPò:kQn<-Œ©KLø§ˆ°1]Ø+UÓD)YŒiŸ6 b"L„-—P,ý¤ q °ÑñL†X„­Àöà—jø %!€rLZ}SS\_¬¸Ý¥;†…Õ××7µ¥±¨8Í$"?æÀSRÂÀ£éÙlªŠ© ‚RN eÑÀ8L°–I<Ü&¤ IÃö»4ÍÈȦ>x>‹‚cÑÈL*2˜Ú£)hX æ(ÑûYdœˆ€AÒ@ˆÓ N€qɃœÏÿ¹ßMM,"p$E™‰Hr¤& rh,M1!)¥$Œ-NM(L˜’da’¶¸­&>S®ìÙhx?v…Lƶ!© ÷<¬]Ö6xjmUÅÝÐ*F…ZëÉ4㯜Ï,_.ÔÊYpAÁe 42ÉD€× !h™nBË¡-G,D'£¦r9šÛµðq˜&aß%LÄ¾Ý ¿{êª+WQµ2¸-¹êÎç?]©Ì›£vxµ[}0(²§¢Bb=*$('ßÀ«X.V\¿"v¤²'Öáj”%ë-XÊ h:ÖMÂT"Y?5«‚*CªBŸ’“•š˜ÀUB`&E…Ÿ˜ÎÕF5a]Eí—·GsuQXNPa–O‰‰0 L ‰Oâø»:£ÚCYÜÑèÔ–kkcgm D;9ͬúGzÆB°œ¡BôäÀ5DGˆEíט$x»¤[ ;Ç=Ðo¬‹»«™êlmf˵¶æŽ@õÅ#ÒüåˆÅ7¢Bœž¼†q$„ Ä)" ŸŽâpÈ®ÅV·žÜ:úô&¡v‘éÇ}Þ5C³ºošÆõûÜi_s ÷û³¯~üù¿×»UOÔ´mtÛo·Âûå¨qû§Vå&”í~åÝ2ÎKQ)z£–¬?\?Òëz‰×½'¼¨3ÄïMOW/Prîä3nŽRgì°N»k Sã¾hœW¶37iUCj¾æ„I 3Z?õ|ÈfiÃøó®Ì­w|Úx3æ%²íhÎNØÔ’ùÝx>õb+5ýtëº9ïñklMÆ™¾É´×´Mp +«Ž(º©¶gâÃS=I!'µþ`•}h;¸)\záâùOù+éfkþ}Ù8P’9bߥ,ö§‰‰&¸S:Þ¤MÀíâh@#$T ¨TK¨NTÍÒzɱ~Ÿöžºþ–ïšNí]s/ÇlHKŸÈFÕªúÖ½7<’èÝNßÒ¾U™­·©RD§Àtˆ¾èDԻܳÜ=ÇUrŸjXrÜO77'ÅÆÀ\ ÉmÂ)²i„³ˆM"°Jsp +:LŽI"Qp8¢:õ’Ê(>g¼¤ôôô_5‘üojNEU`G™(]Z%ú“C •Pª¾öy#]‚ ÑÇ϶Lnêþf=svkЦg¾~¯²—OmÑÊæLù#£:|‹îAãìÃÜÊRŒî¾í®ÌòXûi_2§ÃÊp }Az¾±ºNȨ/õ|äSû+Ñ™ÒU5±joã*G$µm +3NÎYB¹þÞÞ~ÍkI{Ÿ^,ùœûm¯Ç¨a*M/(ó*.ž³vgQ²Á¥Ò˜8G•„Èæ|«ÂFÖùÕ|F"ê\_<š×3}ÖëštgØÙÛjæ6Ò-'ó³l2_¤—_ìùÝÜ**\Îi|ísŸ-¾µc= wèý‰†=‹ŸÅ\®Üêg`brÍõðkÅçuK—•¶Žó¼TãnòJß’qcrkèÌë]˜éß9€a¬A^k €±¥ÿ,ŒÐ‘b§×‘/àÆDa7 ƒ‰…¿ÁÅhf‹Úq¹–(Hš Šhê?Ò?I9á_”ÿG宋œÃºŸPËïV)³¹g—4%q\×!wê]wz-ZʼvþsÊõôK«N£.çtkïµy;ÿìƒTdâÊËw +_uðûW=Ä˵¯ýCçphñ™ÆìÊ‚ÃGL®LùfsëÏùëžitͽ°Œš–ú@i²×Õ·H³—ÏŠÍÓ¬ï‹77? ~¼ücG™¢ÎšÝO²‡Öu´lÓÂûîµGeU±®—eïYƒíȱÓ-Y £ff¾±K¼?Ù¥Âx%¥‘hd±7# nd‘Ù‡Š“y*AW:B³/òƼˆ:;ëróÉ5õ*%h,V&íôDÝŽ4Ö¨%I*&–V(ʵ4 ³C­Cm"B̬DŽZ›Y[ZÙ™ÙY¶4 ·³áF†XZÚXG†ý€@¯„ð§þ¤+ÂýCmmõªã÷¶,Àoø×ü%¡“R0 +sv ¬0´ß¹ðÅ µ5Cí0†È!p* +V+rtÿ H)øošHE™°ã*8ÜV¨?º3AˆÇ!duÛÓÎú7ëOÚ>™½»÷ûŸµ×Do¿ êlŽñ$]k¸Ðõ¨¯t憹ÊvF"’»Êƒ²ŒÜS‘nŸ|…Ÿª_c¯ÏwŽ?Üû .*]©ÙJÛÐ^¦é†îÛ¥~î„çÌ&Ö«¶­n[ï§yD¯EéÏB¥}6=‡õš×ìÎ\ußPóI¤VžƒùÀ4‚o]BV¹å«ßª,üƒf“+Õò›µÂjR˜;ŽT4Þè¾Ç2Ëa£Ã4ïtý¼þJ¥s+ŸRÕ&7šsgŽ™·qïÎÜØF‰o¿¬uÚê—Y=EÃsMÉ®xQ‚aS¯¡Ns7g£òm£¬èѼ-1Y£¯Çsú—_¨?^<šÖo¯ZW¢ºO”ÓúFXw`ª+»Úk9?§ýËå-ŽÃnªæ=_½-Ú 7zܾs¿‘Ï©º>aß7¯WóµªâMº>á»5æw+çît=Ï¿Xy2vmVÜŠäý/w}ÛvW£cL_øùxêÓÅY•‡Ní8±èâÆ  §_âzY÷Mßø.ã³…Cø.ÛDž¿c[Á¤rƪÓK§:µ"äöÖ’†æü ‰žEæEÝ•ŸŽ¢ñ]ó¼÷vnLk®¥6ôûx8Å–|,èâ°«'?µ¬Ð|'˜‡›ôûðÌ”ª+3õÇNgßÏ}Õà½ÇâΈUösÚ»¬Ý +µN2Ó„on˜Uñk¼¾¼¹‹¿HØ‚7â @Q¶ÆØ¯ùóv.†S:mÝȼõïLÃqÃÔ À¹ÃС?dÒdÆ +ÌÐDÌMƒAn$&xÓ‰Œ Ià8/HNLŽIÍ€pGmQkÔŠkic…Žp·äb¢ +ÅÿÝú?ñ}[E\åýÛ^ëŒÇš{Xûèqcéd}ÿCmwÙ~Н/í¹äs(å(¿¢\›²AÍ»h¸ËºÃ%³Ð‘·Ø‹j»ò(ŠŸˆ%=y­:¬ Vly÷!JÓ´oÑó\­—ÏývTÔ鶬þê~‘Ö>çHûQâö/»ãÖG]7ºãx4§ý©‘‡¹áÁœIS˜O¦ßæ  +ÞÏ@·|]ÚQ\õB·xiïe•÷ÔšÀø€ßÜ ¶y!<#• GEî-~r…œ9aû—ì=Êžª4á¶ìî©ü~\™–?u9¢„zt×ÜÓ÷8Ù`6eÛm¾37½uÓýqYë+BðÕZ¬Ê¾Ï›ŽáÚô&NøBª?ËaHù~hdª(# %€?r<ÿåêâ[K‘Hö—ƒ*‘i’˜ †ƒ9šY"fsfš¹Z ªpPÈs +2,~:B¥Ïø!=pÃŒ';+Âv†üãæ)TÊ8¤^1¡|×!Ÿ”é(*樿8(x£ •»–;ç8þýu±¬þZD9¦È/Ôu“ vÿÍšŽÃU\ëß\]+¯¬ŸEp}·ó·Cé·Û2&ûâ*ÍSçÏŒgªh;½híqó«C¶çLJŸ†¿àÇQñ/½»ÐéÑ´“G¦—i>ÔÂå<É·ª½kîõ£Ók餿Õ^zÕîN:°îÉóÕó® êž½#[,'tè%}ûÔ÷„_jÎúLy”tŠí·eM,=yÃñŠ1›£Ì'+¼ å¨^²Šãøˆ¢aù¥•;!ko’Ìh~™d?°œ®rÿ,=dMÏõãC_ù­ZÖhc2gÇ™W§–0\] LÖ}¶œäGÌš‰JWU¸|Kµäãø?"§W™Y<ÿ²<§urЋ-IEqÇø\ý”qf?{aè¨7Û7²&§k„ž·×Ž×ö0Ιž¼èZõôK×’êÇ;÷¦Ú÷kœ¯?ddc|@þü`WÕSUUG}£š·¹ 2t[ÕÐÈ.Cæh4oÕÓmwí4é<ùÁ«Õôê KÏHc/ƒ¹Á/ƒÞì¾Wº¥elbm¦a*Yùušî™MÂ:Ã)¿WγϫH ù-¡Be÷™ýž=C¿¯´Œ;Örs¾þùÈÚ-Z+†„ãíÍŽÌX{ü‰îÓê£-a¿ñ§®:›û,:º‹ ª|ã›ëV¨,г°ÜKM(Ÿ™?âLù›ìÝŽWړΗ½ö~ð‘˜ÇXÒÓü,áåžâ6ƙ³nø¯¸ñÕb«£ùTõØó*;¾£BÊBTH +•†…‚ËX( ü¼ ÈÌýGPl‰¢b‡õwrpGÀaÃε#£1‘‹Bñ¾câÿ;ð0vàAì>w çk²’¦ù¡ û…J¾Ö'Þý>]w›ËpãØÎ`ÿýÇÉvDïËê™Úwmc›†Ü`ôØ-%ms §Êu¹’ÇÊ_±´ˆgwd«÷æÎè9—ïo +œ ä¬þ<·§=àL~ÑŠS"ÝÔsÙF¿·Ù(3aôÅÅ•ëkêïÙÙ¢3ï¡‘÷–¹¹F̾¢;Ñ! ¡zš£¡çÒ™×ô'ÍVœì‘^Õ‹<yáƒäç÷Ïx”6¾9«9ívÖê._otÏ5÷»fn;Òw÷h䣺âÌEÝÝŸ{Ú£b´{Ï’(Á³•¡ü¹Ç,²¯OÛ<ëLº‘ÑÛîøz£µ¦kl'Õ=\î–×@ói¼ºËÕ"uÃç„^>gº©ÊlÞ†2‡IVÙ·Žæ½·ÕïÃÆ£§<ÊãJ.?èÈÍ—ÅÎn;;þƒç/÷%Ãd¨â‰Lm:ˆÝ$íŠ8ÿWÿ”åw<ÉfcñÜ×?TI~_î9ǽ¤Ÿg‹ƒ| uR¹oùÄïÿêMà·Àk³Ê6%sQ«¹––X˜›#æPÔO.̹ü½0÷oêOE3·ÁÎsˆ™ÅhfšY(S’9ÍÌB¥ÍáqêVÿi›ÁŒ,&>$9#,)Å<:5u’U€G­µ-9ZˆDa÷£ÏÅîGÿ~AR$¿¬!û} sŽÖ¯6bQïrv•<˜’¡a~åFj”Þ&ÆFå‡aëJ]6.¹œÁ,¨‹˜knêÐ[Ÿ|)>«ÿ´ã z˸3žûv¼¹vFÏfWñìˆì‚%«<ü§Þ`®[|Yc¢æûñ.«Ú~}ì@1µé™ýð]W«µÒ‹Æ<ê ?ïfÏ_¨ÿ^eÉî‚Ô¬Õ.ŒÄ{Ÿ]©trç>sSwô×hó åÆŽÆ±Ó½Ãth1 Á%Ÿd}­}ïar¯o\{­Í›„‡Ÿ1ìn¿û^áH©Qq‰¯‚=ã5¯C§Þ’ý¨§Ñ¬mæÖß¼ÇЛèg›~zìæmµÜÉîÓí,çj,«ü`Ø{Ït,'¦äØŒ¼è„Ä=5©õN$ònœ±‘ƒÐQÅ7’!ªòýøpí2ÍDµ%î{Òž:G쨟šS¯6º8çþ­÷½ïÔ+Ê þ¹«¸ýõì0çÇ3)›W8ÓÉ—È• tTO‡„T÷ÜiN<}ßùœ‚Ñë{]ÅŸ*fm¼tTxÔÎx_¼‹6ÑK©T ÓŽŒj¬Ü´ËÑ=]Û¦éòöíÛ.ÔûêµAçÀ7O}ÁÇ­½gbk&?zµ€¯ÑõÒ¶4ƒ=q £J?zÁ³#_ûV½b^ÆŒ;Ò‡v}ÖÜ¿¿ >¬ÐþÒ– ¿IgÓô*øÊ–º ß8Ó+¿ímÝ9»®"wÓ´ùA~^î"—ó›ÒfÒ^±ß3¶ÕÕÆÇÏ;¢ÂZèÿ'WH<Š +‰ñ8š¹á¸~ývàà‡#å™ >#¦¸LùO^@/%W•/UCõ/$rÚŽ…íp¯ Ú¬6!zùè½-Y_LuÐ64\î&7Rn,0úåÏ^MùëÿHR1R`ð/={Šì89?Åf¢‡p^+äžß÷Ugv†ÞÖÅ€¡NÜž‘GÙžËS ºLÞø²ô·´9«´¯jµ¾.wu(Wbû´ñâ7ù”œ§fè©A2ÓYõyfZ¢ïn]îåò üôÉïSÎ;k·sÒ‡«ŠÔ8œ÷}³bðºæá‘Qf»çñѹ_™ž_”¬wŒµ÷^­ =³Ó˜{òŠ·¿ÛÊ C†ò˜&+?÷,>ÕÞ¢0ÿ–¥uZT䥱O¬iùØùp½aش׳.n N¢ªGÕVÎR¥m þX¨[ؾaí±Ev"“žcIì=_ܼMOŽlUQñ»Ó|vP@Ùõí±g];.¸¸döK$âSÐe—5>†ï"‘wB¼Xž Ι+Ä«,eÌ4×üÏ6â¿þ¤MÎ&g£ly“d ~bˆËJH\EìãÑ\K.|ÿÅ"ÓÔœ\>¿q½û.här¾{B€ËÕšŸ¶LÐVÌÞžÍo\J¶}\³,ºúsŸ‚Þ{bûÝ÷f|7×ý¬”8±Î]4ìÒ'!Ý+ÓtAfÕ¢ŽåÔHµlµ¥n–±<‹”cnNX9Œµ«ËÒq~-øãO…לHé-˜Ñ¥1sÑ}õMŸNÍÚ6ÖÀ{Û·á7Ü®¹>ЛÙ{yû²á.›/Õ^ynqvXg¦JnÜ «²¸e‹:âŠýý¯Oú§Ï«Ì¹·‘‚…9ÃôO&&|íh+ˆÖkGy…ì…·oE¼m9¸ôwÅE‡”‘SÚ“R VÄYßòP·]û“ÁÇv“†–ΪI5Üíתä¹Èe¬úŒöG³”&Ùùü•×oaµ +ç|ª‘ÿ¶Õp¥ +endstream +endobj +29 0 obj +<< +/Type /Metadata +/Subtype /XML +/Length 1463 +>> +stream + + + + + +True + + + + + + + + + + + +endstream +endobj +30 0 obj +[ 226 0 0 498 0 715 0 221 0 0 0 0 250 306 252 388 507 507 507 507 507 507 507 507 507 507 268 0 0 0 0 0 894 579 544 522 615 488 459 631 623 252 0 0 420 855 645 654 517 0 543 452 487 642 567 0 0 487 0 0 0 0 0 0 0 514 514 416 514 478 305 514 514 230 0 0 230 791 514 513 514 514 343 389 335 514 446 0 433 447 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 514 0 0 0 0 0 0 416 0 478 478 ] +endobj +31 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /BCDIEE+Calibri +/Encoding /Identity-H +/DescendantFonts 32 0 R +/ToUnicode 37 0 R +>> +endobj +32 0 obj +[ 33 0 R ] +endobj +33 0 obj +<< +/BaseFont /BCDIEE+Calibri +/Subtype /CIDFontType2 +/Type /Font +/CIDToGIDMap /Identity +/DW 1000 +/CIDSystemInfo 34 0 R +/FontDescriptor 35 0 R +/W 36 0 R +>> +endobj +34 0 obj +<< +/Ordering (Identity) +/Registry (Adobe) +/Supplement 0 +>> +endobj +35 0 obj +<< +/Type /FontDescriptor +/FontName /BCDIEE+Calibri +/Flags 32 +/ItalicAngle 0 +/Ascent 750 +/Descent -250 +/CapHeight 750 +/AvgWidth 521 +/MaxWidth 1743 +/FontWeight 400 +/XHeight 250 +/StemV 52 +/FontBBox [ -503 -250 1240 750 ] +/FontFile2 23 0 R +>> +endobj +36 0 obj +[ 0 [ 507 ] 3 [ 226 579 ] 17 [ 544 ] 24 [ 615 ] 28 [ 488 ] 38 [ 459 ] 47 [ 252 ] 68 [ 855 646 ] 75 [ 662 ] 87 [ 517 ] 90 [ 543 ] 94 [ 459 ] 100 [ 487 ] 104 [ 642 ] 115 [ 567 ] 127 [ 468 ] 258 [ 479 ] 272 [ 423 ] 286 [ 498 ] 288 [ 498 ] 296 [ 305 ] 336 [ 471 ] 349 [ 230 ] 373 [ 799 525 ] 381 [ 527 ] 393 [ 525 ] 396 [ 349 ] 400 [ 391 ] 410 [ 335 ] 437 [ 525 ] 449 [ 715 ] 855 [ 268 252 ] 876 [ 386 ] 882 [ 306 ] 884 [ 498 ] 923 [ 894 ] 931 [ 339 ] 1004 [ 507 507 507 507 507 507 507 507 507 507 ] ] +endobj +37 0 obj +<< +/Filter /FlateDecode +/Length 328 +>> +stream +xœ]’Ïnƒ0 Æï> +endobj +39 0 obj +[ 40 0 R ] +endobj +40 0 obj +<< +/BaseFont /BCDJEE+Calibri-Italic +/Subtype /CIDFontType2 +/Type /Font +/CIDToGIDMap /Identity +/DW 1000 +/CIDSystemInfo 41 0 R +/FontDescriptor 42 0 R +/W 43 0 R +>> +endobj +41 0 obj +<< +/Ordering (Identity) +/Registry (Adobe) +/Supplement 0 +>> +endobj +42 0 obj +<< +/Type /FontDescriptor +/FontName /BCDJEE+Calibri-Italic +/Flags 32 +/ItalicAngle -11 +/Ascent 750 +/Descent -250 +/CapHeight 750 +/AvgWidth 521 +/MaxWidth 1984 +/FontWeight 400 +/XHeight 250 +/StemV 52 +/FontBBox [ -725 -250 1260 750 ] +/FontFile2 28 0 R +>> +endobj +43 0 obj +[ 0 [ 507 ] 3 [ 226 579 ] 17 [ 544 522 ] 24 [ 615 ] 28 [ 488 ] 38 [ 459 631 ] 44 [ 623 ] 47 [ 252 ] 62 [ 420 ] 68 [ 855 645 ] 75 [ 654 ] 87 [ 517 ] 90 [ 543 ] 94 [ 452 ] 100 [ 487 ] 104 [ 642 ] 115 [ 567 ] 122 [ 487 ] 258 [ 514 514 ] 271 [ 514 416 ] 277 [ 416 ] 282 [ 514 ] 286 [ 478 ] 288 [ 478 478 ] 296 [ 305 ] 336 [ 514 ] 346 [ 514 ] 349 [ 230 ] 367 [ 230 ] 373 [ 791 514 ] 381 [ 513 ] 393 [ 514 ] 395 [ 514 343 ] 400 [ 389 ] 410 [ 335 ] 437 [ 514 ] 448 [ 446 ] 454 [ 433 447 ] 853 [ 250 ] 855 [ 268 252 ] 876 [ 388 ] 882 [ 306 ] 918 [ 221 ] 923 [ 894 ] 934 [ 507 ] 951 [ 498 ] 1004 [ 507 507 507 507 507 507 507 507 507 507 ] 1081 [ 715 ] ] +endobj +44 0 obj +<< +/Filter /FlateDecode +/Length 304 +>> +stream +xœ]‘MjÃ0…÷:…–é"X²ã¸c0N^ô‡º=€#SA- YYøö•FIZ"°ácÞ{#Í$M»oµr4y·“èÀÑAiiaž.V=ÁYiÂS*•pW¿{Coî–ÙÁØêa"eI“_œ]èª–Ó žHòf%X¥ÏtõÕtž»‹1?0‚v”‘ª¢ôÒ›×~š mÝJ_WnY{ÏŸâs1@Sd/#& ³éØ^Ÿ”ÌŸŠ–G*Z>Ô7ÑuÄwoQy5c)«> +stream +xœÕ[}lç? $þ8ÛIH|g;„„HpÄöùl'@!>B[•B+TË:Ò®l¬cÝ—ªª¦•?¦­¥P&u•¶ÚV!B«…ºAÙVJH ¡¬lÆ +m–„'ñ~ï1þ¶ƒí¸;=JNï=w÷üîù|ß÷±Ç“œƒ¢(…šSéœ4ËÑ,¯`JS©qø‘ƒ4kÇU°)ÔNÜ’¤—'z0ÌrƦ` +†È©Ò-Ré”ZW ü~¤ulãÀr5ŸŸïJ—ü´ÆN3N%ËC6"¼¶>äãG''nà8ðšqàS*?‹o›áï~öI ލ òL†Ø[ªå—«-Är„—&,|8íŸE¡áeùu)‚ Ðò +ï‹’.¿¿ãWàE´Æ‘\ù%9FŒ*ˆâ¶I%ñ]ˆi’ìÚ¤@ix%‹g¦Â„â00KÊr‰B`íD äi¯ »4ÏFÑJZƒ¿8WÁ*ùJ!Öå%DÅÚ—B}ŠvÈÔ\†Ê,™e-,oÜ´õ¹oî|ùK[vÎ._&ɳ¥Ìºêá&Jæ~â°LLœY¹VÉ,Ksë¶S§Î\ºxÙ}û68ÝÃ×þÑ·gß™9æTib°“Öˆ’å”ZÁlò +öìýõ„ûNè-vÌPšR„âî÷[œh¶[pç{A¸ èÚ—wí%cnÛÿ—/ý³ëì…žs½Wúú·¶}ofN]Š ÜáQðÄ…‚±‡ºsF¶ÙùÀæÏnÞòLLL¸Ýc££?ûùp(HšÏU™[ Ê–âÆ”¢P +γP¡(ÍðÊp%©~e÷›à½ûPYz||HÊše•«SA ”+õQ#¡ Õ©Æšš!dñ‚¦Óï@˜&&úû®VšZ©²¦Dò` YQì +ÅX;ˆ4Ma\¼â ‘w8{æ¼$ÏJ´–‚]!öF¼´š#ZW#QrÃÊÖv¯9y<~﯈ESeBáH{„f¥·ÒäLJ"(ª¼aùVŠ#GŽSòZ¹DઔևaÕAr:O1úP#óWz€ .Z´´ù+õËÿÖwvy&Æ ŠññÓ︬¥ ´|õ“-ëÚ-® HèéЈ óĨbC¦®®[{ýÊÕÛCCÃÿ¹3<<øÙç"¹Gï8p™z‚wÜC¡R “ýª( Öuîá!‘ Dòæî£'(YMZt±!¼(†2 5'¥`«Lk.t÷ö÷õÿ»ÿ̉èbtth` ïrŸHŸÞøôõ_š–]ä‚ð^s"~½(”¹#[çœ]¾‚k÷›YÙætqÇ(Ø|¦Êtøp'xþþ·®<ãÕ×ÈÄêÝwOÁt%¹Ö4ÍG&‡4Ca´/ÙtíÚ °ýá­Î‘¡áÑ‘‘å«ÛPhM}Ý{ß(ˆƒdéÞø 7Ê-Ì ÇÇÚ·¿HI«Ó•Üïm¨±>4<0NÃK›Ÿ 2¦~u4 1ÊGpÜÙõGO€íæÿ`’Þ}î£y [Š£¿BH“…®ãDA³<ŒçÅ—vƒ§ç\oãª6Ã8ß¿ÿ %«¦#¿(‹udøÑLÖ!a'BÁ`BÇ%ž»}l [nݼž¶öç)ªtÇΟŒ¹ÝƒƒCn~v:ª÷p²AìB-ÿƒy–c•æ?V™U™ÛKlù4UÄÜ”: +”™kA¡Þ{þ":ŠšD’k‘βëü F®üëJ©¾9#Û €Æ1q¶q}5FÑ0f0\N&ŒÆ“U¦ª>3BWM+3´<ø”orwâøé Hg¨Ò÷îû-IyŸXë§+LŸ¡4ñK6c&…ñßýþ‘Ów,§JÇ_Ò›<&ÃñJó’B{¥Žÿr±íª€eW™cúˆXÓJgsÊÈó ‘ Lý²-]ÝÏ|ÐÝu®÷µ=¿—ïÉ“]·¸ikw×Gg»zŸ|ú…é²a¿[XÝ•×~µýùîž/ôô®yèi<ÊkÌÇtÆùõ+ œ×› ?•ï¢'þ>WJ{õ¦š{Ft!ké< D™ëÝs–Ï+l(Õ¯B´)Õ·ÀrBxx VÔ®)©jÆôTÂoYõ*\/˜ÈX‡ZË^`7N.4?Sbû~©´£ÄúVeݨÁè6›æp-„úæzQæÝþ‚åg ¶ºFù*2„®9c—@þ >pÞbAo4‡ Ä„‚ÉdhŽ…ÂÞi $¥E:¾[or ïTšWαo(¶=ZÌÖ ´±˜›«ã¥ÑÌ)` ÄkT±âmâ„ $…§Àø' >GëøUE¾ydz8D2M´` åLÀªYLBAÌïïDü|½Âò‹ + ?Û97͵‰1öÇ¥Vø;ìƒHyùZGnÌ$²6H1z²+ä&B´ ˆýÂÇ÷˜kw•[ pžÆq`>6;+ÍÛVq/”Z>®6>;ÏŠHQáÖi=dÍÜiÍ<)¤|á¹yVsÝäûÌu}æy‰vœÞ÷!ôüóÿ¿=ÿA‡ßï/l‘Á§è÷ÿ4?š +endstream +endobj +46 0 obj +<< +/Filter /FlateDecode +/Length 7539 +>> +stream +xœÅ]ërÜFvþ¯*½ªR‰g6"„¾¢ár©–¢H/7©¥H&Þu~ŒEJfŠ"½¤´ñ¾Õ¾FÞ"ÿRÊS¤¿ÓÝ@ۀ܊]â ˜ÓçÖçÖdÏßfß}÷üÍÞ᫬xñ"{ùj/ûóÓ'¥ÌÏ„Â_)U^ñ¬,ËœËìîòé“ýMvóôIa[«ìãÓ'¼Ò¹TYiD.tÆ*•›*ãUn =ýá7OŸüáé“ÙP.3Àæø««ìî#ý²Y© zàŒåFeö/_ÖƒÇÛUUÎxZ¡ƒf?:bÿS.r-Ú?‰‹GA³Pù‡–wÖ%\¹–“½º‡zz O–?ÀyÎô#p‰qÜÀ×?ôh\Ò•ÌeÝ+3¹öOo§t˜yY Z”yazhÐZ×KCwÌi I÷“;ª¹ºà¹xLeRe•K=$œ­˜¤$Ïesüáƒ\ ‘sñ@ôº0Y‘ 6¡á¡‡*¿*X^”Sù‡Ú™¬l/ƒÜêê ,­ÝWÓ¥a›/¬6(aªqU™¼ÐKÆßXÜÂÖ&+YQæµ½g:ç=*äŸq²l=óTÜý’¸°Ü}w`Ø£ÄÃX‡ßPÀYGŽÙþ›½,‹"*¶]Dõòôé“ç,3y©³ÓOŸ°¬°ÿ[óaõž‰ÌØñmdvúÉ"‰Xdß?}ò§ÕÁzG¯v×bµ·Þ‘«Ó³“ýõŽZeh=ú[†ïß®ÿ=;ýýÓ'û§ýxòÇų4v@%h¾Ú|^«ÕåzG8ܦK²7rÁ[H•*—Æ>Ïð&¢‘¾%}L!RØžÀï_ƒ£ ”9¢”)AT \h| qœ– ÊBÚNzD±u¶aG!g(´ +Úu¸£å¹H$©ä>¬s$CÆE­“Réú{iªú{Q8¥–S´ß ýóÆJÓ}Ë®î1ÜÖ;åjs=EB>h%\˜¿•p,îHÜ•†r;á(&í âÖ†ö^ɼ”’f'®l +Ñ$Њ|!«mž+Rÿ×x{ŸÝ!ì"X{fÛno/&ÐN|ÿ"´¹ÕzS á}~{†ïÕ…W‚^\}@¨²¹ù<‰iââµÜ¥&ÑÚdrËajS#µÀòúQûÊ"Ý„.{h"7sH±"ìYÇ`Õ†ì ýpÁÉ`«)⓸À¿å0…r¥©eÔ§~GhEv©4ø¨ ]±)j’(A3žó¥—ÉfP/åK#7>¨-Úóý£ÓýNç´û×ûÁWe!•p2¦K®$™é)f$!Å2fÑÆÜPr_aã¯àƒâ–ÇqÅ•‹<¨E;’½÷b]W̧OÂT8«­ÃøÀ‹‚üøs?í 5Iþ±IÜ¡LEå¥CUlÂò6žùá^ƒ'Å"Ô½×ÀläÕ_î(N°!ƒYÝÞPÁø¾¹ 7xB:Üh’•G¥8‰C”)è-2YÊðœ=¤ˆ-íòE ,×K-|!òò¾MüÁnmÑÏNöpßù:~£>àÎÕcdýxÁ£Œ­S¬HÂE¬zób»Œ lØ=ݧ¹—eúP“NvŸMÕdDøÉŠçr¡ï“X ´Ä÷ Óý@UÅs{‹1ü ¾pŠ%I8¸Œ%^ódŽ•¨cÆÆž†H,I´£çyÒ)Jf[Ž$6”FÀ Ž1H êŒQX•ÌÐ#Ø]CòµØ§ì”½—ŒÏN½1Ùi;{y²ÿîÔ­Mð IôêÈòË)L]±Ú²S­§¹Z“‘X‹TÃL±U8ÍdÊÁaL×¹!q# #gpƒg´T£S[)Ë7F§£^‘VŸ¯w³Q´gk,;ýfµFãæDãúGÛròãzjiD6JIëÛXIëIK- ‹»ôF+lj²¡Z¸Ù6Ùéû?­þ¡3Qó°^KµRñÚµ +Tju…ÒÉÇ_ŠRÝi¢÷®Pa¢Œ*].dÍ*@§Sˆ]kµ ÈH“WFÎÆ†nUaŸ,ßIûÍê I¹bV/÷Ö<›ª‘ÌÞñZy†ƒM'ΰ##~ ?ð,•ÔØð¬{@V'®8a%¶B®öhŠ-‚Kb³sqâ¢R ñê­ePNuÂò‚¨~G ÐÖ[ò($Â@C<²\`ýÇ\\…e °îPé¼LøÙÑái*·õ'*t$­¸™JúÃÜä-¸r…7bnMp$‰Œ—IOX+ ¥÷ˆêó×)\¢PU5 uºkš}šª˜-<ÇØ©f(cºíjjn ÏFmö@Ö©3Z† ȳœtèÔ-BM–ÆzþÇkêB–¡æð|®m;€S?b£QÇD¬ÈS4{2q›&cx˜œÏ13;˜’šÃÅÔ‰Lc×ÏÄJÎGo[&–‰Cá&Ú€,gÕàPp&ƒДGÊÄ¡ÌAq•ËPœÃÊ…û&Ò8¯° }é\<-N¢m?W×4­¥þEBµºÅîÙ,Rº¢›T©ûõ_iES³Ê‰v_¹UÀÍ2_Zñt{Q¯nÂ6ϯã…ÁÿÒÚÓ¸»ï–ÃLq7ñƒ[ëÍTlÖâ.:AoÓ9”=‹e d™Äó-B¦¤ùõ~d ®Í—_§I<ÜDPVflÌâo°ü»‘®S¥)ÔR7kçyw@ˆ„7™³·q¯EUÓ4î%£;æâÌ ­jžeORÿ¶ˆ’kw¨ÌVˆÓ.®L\S¾ î”ÏFM³Ô¯(ÁI¦EžÎ°œ®ù %įk«1KÍ–gq šÆg8±bÎæRV<ƒ™ä Yt´EÏÚ ¨XÆ8¥•\@û=ùêöÓ/Ÿi£FX€?…ßâ#-:+X—¦3Æxžn`}Cלiqñw:Ö³üL¾gsóþ’öLb»ð¬‹[f]ÊßY[¹˜z^ðç¼à“b_x^Å@¤`ãšpâCÇn­×%׋–¯È__m®îœ³O1‰T‹ à†‚‚*ÌÆ·ƒ/b)¦ŠST±ðkƒy„—økžÅs„–›9àFa]ªè<5!±x +aùfº…YÏBS¢8¡éÔ½[z–ìTͺš9kô „×,Œxë¢ûûoö!££Óµ›³ Ë~›“IfÆ­¤IÚ”þ’–¹­'ý Í—”«FxUNI&³–´,§+Å73±·üÖÇ…(ib½¼Y}¶ÿðÏÚ­N{© +ò"M/³†_öŽº.ѳբ«¯´¸þ+Ío,7önãó¯tÖDg ’ =³rï'ÛÂf üÛ«©ã65lkêQ›56úÛP"ûëìb]­Ü,ÿ¯P´_¡{yó•þdûg'h9~7‡VQ0ÊR{h¥…^…1nò,Û™E.Ö’nM®ý@'2ù^ÁæÙ[G0€Õ燯iúÑ%Qrüä)¤ÂMMß±+A¶–ý Ó^ÚD Éy';rÝcL‚¯´ÿ¡å³”Z–ØÀYb'zòiƒã…è°·ÙÒëuöéñŒ4ð=$ -¿¨ŸùeíZîqë34è:;¿ºÆ§[ö#â>!Dõë/gý–ü»¢(Daóš¬pß+^ìˆï +V¾òŸúÅŽ²ŸÕî c? +NÒcM³¨^ú§Õ =U/bXáGêÕ Ë}é!»+¡Ì‹Ò^qS0³çÑãø|!mó«ÿáÉêïÔ¥ïŒ1Ä—s´QQL·­ÆAè#gszùBamìds·h *Q˜ Îä¬qy¬|±Ž€á„»¬´95Ž¢Óá Î×bZ®¥/Ä6:W†"Ø%~¸/âNÃ·î „ ŒÀ·já›f>lÀqKŽHzsüƒ‹¼³Eû"]L`°G‹¤}@`Mü©Ë{L3xŽå”'ÉccÄFe¥iâ«bñXþ¾€vÚ"uü„]~‘óN{…UŠY`9¯bóð·¡[¢k‡/ÉÕš— "µ“’FPf﹜áL³ +Û׺ +×~Í ׊½²þ½{Ò ð¨9xy8Ö +ëÑYñΈLŽ!D½šáHQ*†ãö*Ó¾—ݵ?Œðí±(Ö"KõHÚXTªq$Å’Ç€áÈ +T12¿‹@®ÎFpsq²#8ôR9¡c†NP¶š+–ŒŒæã7-ízmÇII:v|†ó@ ~‡ïè¨;Oœä»·ÖŠ>‚¹.ÁËêÔ¤¹Ö%¥ÈZby‹¢Íéº}ÌAšV¤ÚÄh𡼳ÒÓn…Î8@åFõ(H]”ƒ®#+똧9Üô(ïÊ)œ„’(Boǻߑ¹ÅÐñ­Áp˜m“ÞXØ›‹Û& +^ÓŒô%B‡%·™$£X=ˆf× '!R©è¬üRçb‹ a‘vaц*cfõgËð/kIùêç:_Eneãüû/vàѱŸÙ5êY­î³Kd}7ö'øùÆÿôþžši 6Ã}€êÖü5-h¹Û/þG–+› Åý¶ÿ DqT+«Ø«ºg4$ÝfTNÁÕÇusç"@# _h½‘l ~õQ¢€ÄÂ#vðWßçGÿù“’@ü÷š²ÊÕíÓhuÌ«¿¦z'eã‘¥;hø±zg¦*VEOnãÉg¡›€æ{Ê‹Ü÷!ÉQŸ?ù>ï]­iB2½“ÌEà‘EPo¯ ÜìÃm¿íÆDm¼Zýˆ%Ú®¨ÑPM þ×~!™]Óä]EÜ Ä娬Fò«Å})-Ièí[s/V6W^“ƒ’4R‡ oæ| Z‹-ªNÍ +‚µôð_üA£ªVK¥ fD““¼SŽu,RwÉf›ÌÆéÒ%k²•”ùDnGF—šžq©åªD }=°÷÷èyºÞÕI†6l~¤Ä‰ˆNI^#Årâî«%ÿc46R³Æ”«ÿñª{Ÿ!ÿËËÿjUxà8Énñ“ÛªÉFí¨…: ÖÄép°)ÀËið}wd磮“‘¼‰8L8é;µõÖL‡XäJ³”ª§úèȳúŸuyŠûã±£`<&eRà-XL¢—œxpBæuÆi›é¹åÓ¼7û”¥ÒÕá.ÕìöÇèÅÚÎczÃVˆycÉÇ¢Åyþ4…ó˜í·ïSº)ç#²éM2âþkwÀtŠîÿ-iZøÅÜB`.oˆtÙQFZOÔJ@$ækJlòè9Üí8~œ“1ÀZp2(_}¹”´2˜á°(¬¦Éã7VtÓˆùHE4¥ç­ºY6ªVÿÒ`7}òîYÝ÷G~›”Ý CÂþ®?L¶‘±P–#ôú#š(1ȇÑïÎ%<–’¼QüF‘ïêçÌ•ÏhžN8+Çñ5´M§Á× eË6¯î œ¦ËRåZǯ·Pêy}¬NdâCåµðÚ JÃñÞ ›æ+5¦&Aµ3 ‹‰UÒ ›fžg¯\–Ÿí½†6ÐëŽNâ»Ýf#Áu[§r‡ß#"¾Ì¨~N®ÐÕØ/ï& Á¨úÀdõ}Î_é8(:CѪè¥ä‘['Ñ÷³Î²9A¡mT’†£/°˜ +åÜt?H£p¯IrÒ°têait3­´dÑÒ•…©úÞñ‰lÇoÂÇø´¿R¨sGçºÓ¬œníž"‹sËüëo¼ê c˺õÉÁãlpÜvߊƒæ¬Bª)ÂR&s‚]¨%_hú`)wŽÿ]P$ü½Þ¬ý]êaL™Ð…ú~[h×WˆÛƵp-w«µÈ¥ç„•p~“gaàNyÛb]cû%ÅLCRšªÂ㯗ìy[‡8Äú:ä<Ûefõîl-èAü;>9 ¢wÜ!•ÞW_ÒÜW¹zç÷N«Õ/>§‹[ +ªû9¨à´ÇÁqú-%cV®Ülr¶fGOüÝIò¼®㛟ì¯ëÂМ/þy1öüXY1„|àä a3£HYèfIò6rë”0IvT¼t²ÌÜÙ|uxîBÇwMû£‹MTe…ÿä€n<„XZåO^ +”+ÅuÙQމD—xËÏ,‘ÌŒsNiYçî¾õ3Oû¯Qd~|6—´Ž°ùFàn|K³åmkÛdN#|¦ÐÐûKË™ÁXº~w@‘3™ýgXíÀ³ßg–„ÿÈsÌ Ôk?¹ )#BÃõÓ'#q3JÔî^vX +m^ÿo‡™'CO8SGAòxÀ÷EïKŒûò ®/×MôNEß .[€X„3]v¡4of$,™ :LƒlLg¡‡ñ³s]8e]a‰zƒ NKmLÜk ‚Ôpé]D´¡ÕK"1”€H OXkC>àëcm‹½ò#*F™šròq m–ø×CF,Á\iô>¼'8»³pŸ$Öú†ŨÑâ÷Ùš +ŽX;"Ê5´¨ò/«ì£Ê‰$0Æ]u @@Báö»ÅoÝŒyÉÍA@1¿üÍS£ª®b:TEkŒÇ¤ÓˆØ_·°h½»³˜ Šš˜Ðƒ ²%†ZÜw¼>³j±Ô¿Q“~®±>[&<½¦ÅLXÙ†SvTÄömÓ£jTp¦™d-Tü ( „¢#uÙäâ®èõ–U›©þ•—Î >hdC·tËòñ*Ì¢Åloèõ ­Ž<Û»Ev¯rooÐTãúô4\㌖@pE¯ÒE!£òóØ—A·-K­—†TŠø¾óà:ê$4Ľ4å’^&°#…¼±½ÃxÙC‰ÀʆáN³Ž)¡&æú°Ükš³Å7´Àøˆd Í1Vž¡ÆODFpŠÂF8œj5(Ô]U,!ßÐ勳1J ðÃÄp\CNÄ´~8Ð(‹Áá¬1¬Û¢ÂNi¬[QÁ›õðG4üá’Žœkñ‡Újöc=I '±˜Ó®¡ÍiWšâ4Ö[”1‡\C›CnQÆ(§½€jâ|C‹¸PN¯‰ëRæ1‘¨¯êóùcumºò ­®|¥x°§†ùEn"aà°u¸fÍm›€2-WàVò×-@aUK(Ø ¸ë6¿øaŠcîÛX,°Ï>bb² 4…–*l)]/ó†jC{ml“ q´µ¢Jg‚‰†¤wÊÅ0ðˆ) ÄXd Y×´E¸úW¾&¾ÓÑxokù%ïÛ:ŽIÊØN—¨äòðÞw ‹ÅÔ¾ª¾¡5¼ó K¡¬½+À*´¢­Û– LÐá€Ý)®öDõ¡ +"¹¿O7Xs ¼(Të¾îjºïÜ>CI°‰ñ±­x„Ääbg¿ø74o…g ŒfsF„ů²WD÷‘µo khgÒG†¿*ÞŽ­cT}¡*D×ó6hD=ê–çA".†LdÉZ£ÞY²xЋ֫¿bJÖÖ+MÇeuýEcëÜuÛÖ9w1j낎&ñ“yôšpI´ #ƒ”Ó-@ªHZq“ÂÇ€}OÐ#–çM~%J*ίP#/+·ã•jÆi& E”G÷åWNH¤8ÝDš2ò¿ÖI05´R,ä§Ã) ¸„u ƒõP\;”×ÊBŽe+²C—ÏcÇøS'Ž}9N€ã3Ç8>5¨Z‡Ã!gëƒàs>—Ô d9>ósIN‹1"T':‘± -@p;Õ O“Ï;O™ODF(ó.mÀÇ9„¼‹ëS—‹ÀÕ'¤¹Â`LË’±‚iS244vÆçÒÆeY'­1¶ØÚ·Ñãjl¥Û ëá½0PlV*‚á"h‘Õ ›we Ã5Ä0ÐÂú`¸Û.¢ïã™»/hF«¹ÏªªLÐÀꋘ¾!Fö”1;ŠB'`˜€ü"0®!ÃD8ce€#v*Ãp 1 ^5ƒW´g½á"hác’Á ¦c®!†–qŽp]Å tÕú½Uw¿|z:3¸††Â +ØAíðiÈ€ôý#*‘uÍMXá#B×1xÏN/-tÛÇÈ„hËCèQÑ pá”ámC¸4˜n‡ëx„‡p½´¿ï†ë¡eôôƒãìYY‡ÚÎÚõ>áÜž¼9lBÐ(¢,Û‚Ì?Š_U +±]+>p×MjítEo‘÷ûEz}N'Æè„Ã,„‡µp".+$7ûP>Ö4Ä,±ƒP¶ÉïÛÎZ¯ÿ¨¹Á(I`³…²4í½–­–)4·Âñª_Â4¢¶²Âçì½%æùá§ÍÇK+âW·Yèôÿ€b@ +endstream +endobj +xref +0 47 +0000000000 65535 f +0000000015 00000 n +0000000074 00000 n +0000000531 00000 n +0000000818 00000 n +0000016728 00000 n +0000016896 00000 n +0000019567 00000 n +0000019827 00000 n +0000024025 00000 n +0000024050 00000 n +0000024249 00000 n +0000024436 00000 n +0000024696 00000 n +0000080856 00000 n +0000082402 00000 n +0000082956 00000 n +0000083149 00000 n +0000083417 00000 n +0000133248 00000 n +0000134794 00000 n +0000135270 00000 n +0000135452 00000 n +0000135707 00000 n +0000191305 00000 n +0000192851 00000 n +0000193363 00000 n +0000193552 00000 n +0000193816 00000 n +0000260297 00000 n +0000261843 00000 n +0000262401 00000 n +0000262541 00000 n +0000262568 00000 n +0000262738 00000 n +0000262813 00000 n +0000263068 00000 n +0000263583 00000 n +0000263984 00000 n +0000264131 00000 n +0000264158 00000 n +0000264335 00000 n +0000264410 00000 n +0000264674 00000 n +0000265336 00000 n +0000265713 00000 n +0000268452 00000 n +trailer +<< +/Size 47 +/Root 10 0 R +/Info 2 0 R +/ID [ ] +>> +startxref +276065 +%%EOF diff --git a/vendor/horstoeko/zugferd/tests/assets/pdf_fx_minimum_1.pdf b/vendor/horstoeko/zugferd/tests/assets/pdf_fx_minimum_1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..03fdcb4539f9b0488daabe5c771273c0d96cf73a GIT binary patch literal 250114 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

#g?_ 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�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