├── .gitignore ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── settings.gradle ├── core └── src │ ├── test │ ├── resources │ │ ├── de │ │ │ └── abda │ │ │ │ └── fhir │ │ │ │ └── validator │ │ │ │ └── core │ │ │ │ └── filter │ │ │ │ └── regex │ │ │ │ ├── validation-filter-empty.xml │ │ │ │ ├── validation-filter-severity.xml │ │ │ │ ├── validation-filter-location.xml │ │ │ │ ├── validation-filter-message.xml │ │ │ │ └── validation-filter.xml │ │ ├── log4j.properties │ │ ├── valid │ │ │ ├── 20210701 │ │ │ │ ├── Rez_Nr1_MedicationDispense.xml │ │ │ │ ├── Rez_parenterale_Zytostatika_MedicationDispense.xml │ │ │ │ ├── PZN_Nr1_MedicationDispense.xml │ │ │ │ ├── PZN_Nr3_MedicationDispense.xml │ │ │ │ ├── PZN_Impfstoff_V2_MedicationDispense.xml │ │ │ │ ├── PZN_Nr5_MedicationDispense.xml │ │ │ │ ├── PZN_Nr7_MedicationDispense.xml │ │ │ │ ├── PZN_Impfstoff_V1_MedicationDispense.xml │ │ │ │ ├── PZN_MV1_MedicationDispense.xml │ │ │ │ ├── PZN_MV2_MedicationDispense.xml │ │ │ │ ├── PZN_MV3_MedicationDispense.xml │ │ │ │ ├── PZN_MV4_MedicationDispense.xml │ │ │ │ ├── PZN_Nr8_MedicationDispense.xml │ │ │ │ ├── PZN_KB_V2_MedicationDispense.xml │ │ │ │ ├── PZN_Nr2_MedicationDispense.xml │ │ │ │ ├── PZN_KB_V1_MedicationDispense.xml │ │ │ │ ├── FT_V2_MedicationDispense.xml │ │ │ │ ├── FT_V1_MedicationDispense.xml │ │ │ │ ├── WS_MV2_MedicationDispense.xml │ │ │ │ ├── WS_MV1_MedicationDispense.xml │ │ │ │ ├── WS_BK_V2_MedicationDispense.xml │ │ │ │ ├── WS_BK_V1_MedicationDispense.xml │ │ │ │ └── PZN_Nr4_MedicationDispense.xml │ │ │ ├── 20220101 │ │ │ │ ├── Rez_Nr1_MedicationDispense.xml │ │ │ │ ├── Rez_parenterale_Zytostatika_MedicationDispense.xml │ │ │ │ ├── PZN_Nr1_MedicationDispense.xml │ │ │ │ ├── PZN_Nr3_MedicationDispense.xml │ │ │ │ ├── PZN_Impfstoff_V2_MedicationDispense.xml │ │ │ │ ├── PZN_Nr5_MedicationDispense.xml │ │ │ │ ├── PZN_Nr7_MedicationDispense.xml │ │ │ │ ├── PZN_Impfstoff_V1_MedicationDispense.xml │ │ │ │ ├── PZN_MV1_MedicationDispense.xml │ │ │ │ ├── PZN_MV2_MedicationDispense.xml │ │ │ │ ├── PZN_MV3_MedicationDispense.xml │ │ │ │ ├── PZN_MV4_MedicationDispense.xml │ │ │ │ ├── PZN_Nr8_MedicationDispense.xml │ │ │ │ ├── PZN_KB_V2_MedicationDispense.xml │ │ │ │ ├── PZN_Nr2_MedicationDispense.xml │ │ │ │ ├── PZN_KB_V1_MedicationDispense.xml │ │ │ │ ├── FT_V1_MedicationDispense.xml │ │ │ │ ├── FT_V2_MedicationDispense.xml │ │ │ │ ├── WS_MV2_MedicationDispense.xml │ │ │ │ ├── WS_MV1_MedicationDispense.xml │ │ │ │ ├── WS_BK_V2_MedicationDispense.xml │ │ │ │ ├── WS_BK_V1_MedicationDispense.xml │ │ │ │ └── PZN_Nr4_MedicationDispense.xml │ │ │ ├── 20230701 │ │ │ │ ├── Rez_Nr1_MedicationDispense.xml │ │ │ │ └── Rez_parenterale_Zytostatika_MedicationDispense.xml │ │ │ ├── test-ConsentPKV.xml │ │ │ ├── test-chargeItemPKVBinary.xml │ │ │ └── 20220101_prefix │ │ │ │ ├── Rez_Nr1_MedicationDispense.xml │ │ │ │ └── Rez_parenterale_Zytostatika_MedicationDispense.xml │ │ └── wip │ │ │ └── FHIR-FAIL_subject_identifier_value.warn │ └── java │ │ └── de │ │ └── abda │ │ └── fhir │ │ └── validator │ │ └── core │ │ ├── filter │ │ └── regex │ │ │ ├── FilterBeschreibungsListeTest.java │ │ │ └── FilterBeschreibungTest.java │ │ └── ReferenceValidatorPreloadTest.java │ └── main │ ├── resource │ └── log4j.properties │ └── java │ └── de │ └── abda │ └── fhir │ └── validator │ └── core │ ├── exception │ └── ValidatorInitializationException.java │ ├── configuration │ ├── FhirProfile.java │ ├── FhirPackageInfo.java │ ├── FhirPackageVersion.java │ ├── FhirPackage.java │ ├── FhirPackageProperties.java │ ├── FhirPackageValidityPeriod.java │ └── FhirProfileVersion.java │ ├── filter │ ├── MessageFilter.java │ └── regex │ │ ├── PatternTypeAdapter.java │ │ └── FilterBeschreibungsListe.java │ ├── util │ ├── ParserHelper.java │ ├── FhirPackagePropertiesHelper.java │ ├── ValidationSupportChainHelper.java │ ├── FileHelper.java │ ├── ProfileValidityDate.java │ ├── Profile.java │ └── AllowListHelper.java │ ├── ProfileForPreloading.java │ └── support │ ├── NpmPackageValidationSupportCache.java │ └── IgnoreMissingValueSetValidationSupport.java ├── packages └── src │ └── main │ └── resources │ └── package │ ├── kbv.basis-1.1.3.tgz │ ├── kbv.basis-1.3.0.tgz │ ├── kbv.ita.erp-1.0.1.tgz │ ├── kbv.ita.erp-1.0.2-1.tgz │ ├── kbv.ita.erp-1.0.2.tgz │ ├── kbv.ita.erp-1.1.1.tgz │ ├── kbv.ita.for-1.0.3.tgz │ ├── kbv.ita.for-1.1.0.tgz │ ├── de.basisprofil.r4-0.9.13.tgz │ ├── de.basisprofil.r4-1.3.2.tgz │ ├── dav.kbv.sfhir.cs.vs-1.0.2-json.tgz │ ├── dav.kbv.sfhir.cs.vs-1.0.3-json.tgz │ ├── dav.kbv.sfhir.cs.vs-1.0.4-json.tgz │ ├── dav.kbv.sfhir.cs.vs-1.0.5-json.tgz │ ├── dav.kbv.sfhir.cs.vs-1.0.6-json.tgz │ ├── dav.kbv.sfhir.cs.vs-1.0.7-json.tgz │ ├── de.abda.erezeptabgabedaten-1.0.3.tgz │ ├── de.abda.erezeptabgabedaten-1.1.2.tgz │ ├── de.abda.erezeptabgabedaten-1.2.0.tgz │ ├── de.abda.erezeptabgabedaten-1.3.1.tgz │ ├── de.abda.erezeptabgabedatenpkv-1.2.0.tgz │ ├── de.gematik.erezept-workflow.r4-1.1.1.tgz │ ├── de.gematik.erezept-workflow.r4-1.2.2.tgz │ ├── de.abda.erezeptabgabedatenbasis-1.1.0.tgz │ ├── de.abda.erezeptabgabedatenbasis-1.1.3.tgz │ ├── de.abda.erezeptabgabedatenbasis-1.2.0.tgz │ ├── de.abda.erezeptabgabedatenbasis-1.3.0.tgz │ ├── de.abda.erezeptabgabedatenbasis-1.3.1.tgz │ ├── de.gematik.erezept-workflow.r4-1.0.3-1.tgz │ ├── de.gkvsv.erezeptabrechnungsdaten-1.0.4.tgz │ ├── de.gkvsv.erezeptabrechnungsdaten-1.0.5.tgz │ ├── de.gkvsv.erezeptabrechnungsdaten-1.0.6.tgz │ ├── de.gkvsv.erezeptabrechnungsdaten-1.1.0.tgz │ ├── de.gkvsv.erezeptabrechnungsdaten-1.2.0.tgz │ ├── de.gkvsv.erezeptabrechnungsdaten-1.3.0.tgz │ └── de.gematik.erezept-patientenrechnung.r4-1.0.1.tgz ├── cli ├── src │ └── main │ │ └── resources │ │ └── log4j.properties └── build.gradle ├── .github └── workflows │ └── gradle.yml └── gradlew.bat /.gitignore: -------------------------------------------------------------------------------- 1 | /.gradle/ 2 | build/ 3 | out/ 4 | /.idea/ 5 | **/.project 6 | **/.classpath 7 | **/.settings/ 8 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = "HAPI-Referenz-Validator" 2 | include("core") 3 | include("cli") 4 | include("packages") 5 | include("bom") 6 | -------------------------------------------------------------------------------- /core/src/test/resources/de/abda/fhir/validator/core/filter/regex/validation-filter-empty.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /packages/src/main/resources/package/kbv.basis-1.1.3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/kbv.basis-1.1.3.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/kbv.basis-1.3.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/kbv.basis-1.3.0.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/kbv.ita.erp-1.0.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/kbv.ita.erp-1.0.1.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/kbv.ita.erp-1.0.2-1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/kbv.ita.erp-1.0.2-1.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/kbv.ita.erp-1.0.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/kbv.ita.erp-1.0.2.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/kbv.ita.erp-1.1.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/kbv.ita.erp-1.1.1.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/kbv.ita.for-1.0.3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/kbv.ita.for-1.0.3.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/kbv.ita.for-1.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/kbv.ita.for-1.1.0.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.basisprofil.r4-0.9.13.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.basisprofil.r4-0.9.13.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.basisprofil.r4-1.3.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.basisprofil.r4-1.3.2.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/dav.kbv.sfhir.cs.vs-1.0.2-json.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/dav.kbv.sfhir.cs.vs-1.0.2-json.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/dav.kbv.sfhir.cs.vs-1.0.3-json.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/dav.kbv.sfhir.cs.vs-1.0.3-json.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/dav.kbv.sfhir.cs.vs-1.0.4-json.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/dav.kbv.sfhir.cs.vs-1.0.4-json.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/dav.kbv.sfhir.cs.vs-1.0.5-json.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/dav.kbv.sfhir.cs.vs-1.0.5-json.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/dav.kbv.sfhir.cs.vs-1.0.6-json.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/dav.kbv.sfhir.cs.vs-1.0.6-json.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/dav.kbv.sfhir.cs.vs-1.0.7-json.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/dav.kbv.sfhir.cs.vs-1.0.7-json.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.abda.erezeptabgabedaten-1.0.3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.abda.erezeptabgabedaten-1.0.3.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.abda.erezeptabgabedaten-1.1.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.abda.erezeptabgabedaten-1.1.2.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.abda.erezeptabgabedaten-1.2.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.abda.erezeptabgabedaten-1.2.0.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.abda.erezeptabgabedaten-1.3.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.abda.erezeptabgabedaten-1.3.1.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.abda.erezeptabgabedatenpkv-1.2.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.abda.erezeptabgabedatenpkv-1.2.0.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.gematik.erezept-workflow.r4-1.1.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.gematik.erezept-workflow.r4-1.1.1.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.gematik.erezept-workflow.r4-1.2.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.gematik.erezept-workflow.r4-1.2.2.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.abda.erezeptabgabedatenbasis-1.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.abda.erezeptabgabedatenbasis-1.1.0.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.abda.erezeptabgabedatenbasis-1.1.3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.abda.erezeptabgabedatenbasis-1.1.3.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.abda.erezeptabgabedatenbasis-1.2.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.abda.erezeptabgabedatenbasis-1.2.0.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.abda.erezeptabgabedatenbasis-1.3.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.abda.erezeptabgabedatenbasis-1.3.0.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.abda.erezeptabgabedatenbasis-1.3.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.abda.erezeptabgabedatenbasis-1.3.1.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.gematik.erezept-workflow.r4-1.0.3-1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.gematik.erezept-workflow.r4-1.0.3-1.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.gkvsv.erezeptabrechnungsdaten-1.0.4.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.gkvsv.erezeptabrechnungsdaten-1.0.4.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.gkvsv.erezeptabrechnungsdaten-1.0.5.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.gkvsv.erezeptabrechnungsdaten-1.0.5.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.gkvsv.erezeptabrechnungsdaten-1.0.6.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.gkvsv.erezeptabrechnungsdaten-1.0.6.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.gkvsv.erezeptabrechnungsdaten-1.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.gkvsv.erezeptabrechnungsdaten-1.1.0.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.gkvsv.erezeptabrechnungsdaten-1.2.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.gkvsv.erezeptabrechnungsdaten-1.2.0.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.gkvsv.erezeptabrechnungsdaten-1.3.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.gkvsv.erezeptabrechnungsdaten-1.3.0.tgz -------------------------------------------------------------------------------- /packages/src/main/resources/package/de.gematik.erezept-patientenrechnung.r4-1.0.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DAV-ABDA/eRezept-Referenzvalidator/HEAD/packages/src/main/resources/package/de.gematik.erezept-patientenrechnung.r4-1.0.1.tgz -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /core/src/test/resources/de/abda/fhir/validator/core/filter/regex/validation-filter-severity.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | warning|error 5 | .* 6 | .* 7 | 8 | -------------------------------------------------------------------------------- /core/src/test/resources/de/abda/fhir/validator/core/filter/regex/validation-filter-location.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | .* 5 | testLocationWarning 6 | .* 7 | 8 | -------------------------------------------------------------------------------- /core/src/test/resources/de/abda/fhir/validator/core/filter/regex/validation-filter-message.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | .* 5 | .* 6 | testWarningMessage|testErrorMessage|testFatalMessage 7 | 8 | -------------------------------------------------------------------------------- /core/src/main/resource/log4j.properties: -------------------------------------------------------------------------------- 1 | # Set root logger level to DEBUG and its only appender to A1. 2 | log4j.rootLogger=INFO, A1 3 | 4 | # A1 is set to be a ConsoleAppender. 5 | log4j.appender.A1=org.apache.log4j.ConsoleAppender 6 | 7 | # A1 uses PatternLayout. 8 | log4j.appender.A1.layout=org.apache.log4j.PatternLayout 9 | log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 10 | 11 | log4j.logger.de.abda.fhir=DEBUG -------------------------------------------------------------------------------- /cli/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | # Set root logger level to DEBUG and its only appender to A1. 2 | log4j.rootLogger=INFO, A1 3 | 4 | # A1 is set to be a ConsoleAppender. 5 | log4j.appender.A1=org.apache.log4j.ConsoleAppender 6 | 7 | # A1 uses PatternLayout. 8 | log4j.appender.A1.layout=org.apache.log4j.PatternLayout 9 | log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 10 | 11 | log4j.logger.de.abda.fhir=DEBUG 12 | -------------------------------------------------------------------------------- /core/src/test/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | # Set root logger level to DEBUG and its only appender to A1. 2 | log4j.rootLogger=INFO, A1 3 | 4 | # A1 is set to be a ConsoleAppender. 5 | log4j.appender.A1=org.apache.log4j.ConsoleAppender 6 | 7 | # A1 uses PatternLayout. 8 | log4j.appender.A1.layout=org.apache.log4j.PatternLayout 9 | log4j.appender.A1.layout.ConversionPattern=%d{dd.MM.yy-HH:mm:ss.SSS} [%t] %-5p %c %x - %m%n 10 | 11 | log4j.logger.de.abda.fhir=DEBUG 12 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/exception/ValidatorInitializationException.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.exception; 2 | 3 | /** 4 | * A RuntimeException thrown, if an error occurs on initialization of the validator 5 | * @author RupprechJo 6 | */ 7 | public class ValidatorInitializationException extends RuntimeException{ 8 | 9 | public ValidatorInitializationException(String message) { 10 | super(message); 11 | } 12 | 13 | public ValidatorInitializationException(String message, Throwable cause) { 14 | super(message, cause); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /cli/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.github.johnrengelman.shadow' 3 | } 4 | dependencies { 5 | implementation(project(":core")) 6 | implementation 'org.slf4j:slf4j-log4j12:1.7.32' 7 | runtimeOnly(project(":packages")) 8 | testRuntimeOnly(project(":packages")) 9 | } 10 | jar { 11 | manifest { 12 | attributes["Main-Class"] = "de.abda.fhir.cli.ValidatorCLI" 13 | } 14 | } 15 | shadowJar{ 16 | archiveBaseName.set('reference-validator-cli') 17 | archiveClassifier.set('') 18 | } 19 | tasks.build.dependsOn("shadowJar") 20 | tasks.publish.dependsOn("shadowJar") 21 | tasks.publishToMavenLocal.dependsOn("shadowJar") 22 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/configuration/FhirProfile.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.configuration; 2 | 3 | import java.util.Map; 4 | 5 | public class FhirProfile { 6 | 7 | private String profileName; 8 | private Map versions; 9 | 10 | public String getProfileName() { 11 | return profileName; 12 | } 13 | 14 | public void setProfileName(String profileName) { 15 | this.profileName = profileName; 16 | } 17 | 18 | public Map getVersions() { 19 | return versions; 20 | } 21 | 22 | public void setVersions(Map versions) { 23 | this.versions = versions; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/configuration/FhirPackageInfo.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.configuration; 2 | 3 | import java.util.Map; 4 | 5 | public class FhirPackageInfo { 6 | 7 | private String packageName; 8 | private Map versions; 9 | 10 | public String getPackageName() { 11 | return packageName; 12 | } 13 | 14 | public void setPackageName(String packageName) { 15 | this.packageName = packageName; 16 | } 17 | 18 | public Map getVersions() { 19 | return versions; 20 | } 21 | 22 | public void setVersions(Map versions) { 23 | this.versions = versions; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /core/src/test/java/de/abda/fhir/validator/core/filter/regex/FilterBeschreibungsListeTest.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.filter.regex; 2 | 3 | import static org.junit.jupiter.api.Assertions.assertThrows; 4 | 5 | import org.junit.jupiter.api.BeforeEach; 6 | import org.junit.jupiter.api.Test; 7 | 8 | public class FilterBeschreibungsListeTest { 9 | 10 | FilterBeschreibungsListe filterBeschreibungsListe; 11 | 12 | @BeforeEach 13 | public void setup() { 14 | filterBeschreibungsListe = new FilterBeschreibungsListe(); 15 | } 16 | 17 | @Test() 18 | public void testSetFilterBeschreibungsListeException() { 19 | assertThrows(IllegalArgumentException.class, () -> { 20 | filterBeschreibungsListe.setBeschreibungFilterList(null); 21 | }); 22 | 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/filter/MessageFilter.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.filter; 2 | 3 | import java.util.List; 4 | 5 | import ca.uhn.fhir.validation.SingleValidationMessage; 6 | 7 | /** 8 | * Schnittstellenbeschreibung für einen Filter zur Entfernung von unerwünschten Meldungen. 9 | * 10 | * @author Dzmitry Liashenka 11 | * @author Georg Tsakumagos 12 | */ 13 | public interface MessageFilter { 14 | 15 | /** 16 | * Filtert die übergebene Liste und entfernt alle 17 | * Messages, die der Filterbedingung entsprechen. 18 | * 19 | * @param messages Die zu filternde Liste. Darf nicht null sein. 20 | * 21 | * @throws IllegalArgumentException Wenn die übergeben Liste ungültig ist. 22 | */ 23 | public void filter(List messages) throws IllegalArgumentException; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/util/ParserHelper.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.util; 2 | 3 | import ca.uhn.fhir.context.FhirContext; 4 | import ca.uhn.fhir.parser.IParser; 5 | import org.hl7.fhir.instance.model.api.IBaseResource; 6 | 7 | public class ParserHelper { 8 | 9 | private FhirContext ctx = null; 10 | 11 | public ParserHelper(FhirContext ctx) { 12 | this.ctx = ctx; 13 | } 14 | 15 | public ParserHelper() { 16 | this.ctx = FhirContext.forR4(); 17 | } 18 | 19 | public IBaseResource parseString(String xmlInput) { 20 | return ParserHelper.parseString(xmlInput, this.ctx); 21 | } 22 | 23 | static public IBaseResource parseString(String xmlInput, FhirContext ctx) { 24 | IParser xmlParser = ctx.newXmlParser(); 25 | IBaseResource resource = xmlParser.parseResource(xmlInput); 26 | return resource; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/configuration/FhirPackageVersion.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.configuration; 2 | 3 | import java.util.List; 4 | 5 | public class FhirPackageVersion { 6 | 7 | private String version; 8 | private String filename; 9 | private List dependencies; 10 | 11 | public String getVersion() { 12 | return version; 13 | } 14 | 15 | public void setVersion(String version) { 16 | this.version = version; 17 | } 18 | 19 | public String getFilename() { 20 | return filename; 21 | } 22 | 23 | public void setFilename(String filename) { 24 | this.filename = filename; 25 | } 26 | 27 | public List getDependencies() { 28 | return dependencies; 29 | } 30 | 31 | public void setDependencies(List dependencies) { 32 | this.dependencies = dependencies; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /core/src/test/resources/de/abda/fhir/validator/core/filter/regex/validation-filter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | information 5 | testLocationInformation 6 | testInformationMessage 7 | 8 | 9 | warning 10 | testLocationWarning 11 | testWarningMessage 12 | 13 | 14 | error 15 | testLocationError 16 | testErrorMessage 17 | 18 | 19 | fatal 20 | testLocationFatal 21 | testFatalMessage 22 | 23 | -------------------------------------------------------------------------------- /.github/workflows/gradle.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle 3 | 4 | name: Run gradle build with tests 5 | 6 | on: [push, pull_request] 7 | jobs: 8 | build: 9 | 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - uses: actions/checkout@v2 14 | - name: Set up JDK 1.8 15 | uses: actions/setup-java@v2 16 | with: 17 | java-version: '8' 18 | distribution: 'adopt' 19 | cache: gradle 20 | - name: Grant execute permission for gradlew 21 | run: chmod +x gradlew 22 | - name: Build with Gradle 23 | run: ./gradlew build 24 | - name: Publish Unit Test Results 25 | uses: EnricoMi/publish-unit-test-result-action@v1 26 | if: always() 27 | with: 28 | files: "**/build/test-results/**/*.xml" 29 | - name: Archive test results 30 | uses: actions/upload-artifact@v2 31 | if: always() 32 | with: 33 | name: Testresults 34 | path: core/build/reports/tests/test/ 35 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/filter/regex/PatternTypeAdapter.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.filter.regex; 2 | 3 | import java.util.Optional; 4 | import java.util.regex.Pattern; 5 | 6 | import javax.xml.bind.annotation.adapters.XmlAdapter; 7 | 8 | /** 9 | * Die Klasse wird mit der Methode {@linkplain PatternTypeAdapter#marshal(Optional)} ein Pattern zum String konvertieren. 10 | * Mit der Methode {@linkplain PatternTypeAdapter#unmarshal(String)} wird ein String ('Case_Insensitive') zum Pattern konvertieren. 11 | * @author Dzmitry Liashenka 12 | */ 13 | public class PatternTypeAdapter extends XmlAdapter> { 14 | 15 | /** 16 | * {@inheritDoc} 17 | */ 18 | @Override 19 | public Optional unmarshal(String value) throws Exception { 20 | if (null == value) { 21 | return Optional.empty(); 22 | } 23 | return Optional.of( Pattern.compile(value, Pattern.CASE_INSENSITIVE)); 24 | } 25 | 26 | /** 27 | * {@inheritDoc} 28 | */ 29 | @Override 30 | public String marshal(Optional value) throws Exception { 31 | if (null == value || false == value.isPresent()) { 32 | return null; 33 | } 34 | return value.get().pattern(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/configuration/FhirPackage.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.configuration; 2 | 3 | public class FhirPackage { 4 | 5 | private String packageName; 6 | private String packageVersion; 7 | 8 | public String getPackageName() { 9 | return packageName; 10 | } 11 | 12 | public void setPackageName(String packageName) { 13 | this.packageName = packageName; 14 | } 15 | 16 | public String getPackageVersion() { 17 | return packageVersion; 18 | } 19 | 20 | public void setPackageVersion(String packageVersion) { 21 | this.packageVersion = packageVersion; 22 | } 23 | 24 | @Override 25 | public boolean equals(Object o) { 26 | if (this == o) return true; 27 | if (o == null || getClass() != o.getClass()) return false; 28 | 29 | FhirPackage that = (FhirPackage) o; 30 | 31 | if (!packageName.equals(that.packageName)) return false; 32 | return packageVersion.equals(that.packageVersion); 33 | } 34 | 35 | @Override 36 | public int hashCode() { 37 | int result = packageName.hashCode(); 38 | result = 31 * result + packageVersion.hashCode(); 39 | return result; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/configuration/FhirPackageProperties.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.configuration; 2 | 3 | import de.abda.fhir.validator.core.util.Profile; 4 | import java.util.Map; 5 | 6 | public class FhirPackageProperties { 7 | 8 | private Map fhirPackages; 9 | private Map supportedProfiles; 10 | 11 | public Map getFhirPackages() { 12 | return fhirPackages; 13 | } 14 | 15 | public void setFhirPackages(Map fhirPackages) { 16 | this.fhirPackages = fhirPackages; 17 | } 18 | 19 | public Map getSupportedProfiles() { 20 | return supportedProfiles; 21 | } 22 | 23 | public void setSupportedProfiles(Map supportedProfiles) { 24 | this.supportedProfiles = supportedProfiles; 25 | } 26 | 27 | public FhirPackageValidityPeriod getProfileValidityPeriod(Profile profile){ 28 | FhirProfile myProfile = this.supportedProfiles.get(profile.getBaseCanonical()); 29 | if (myProfile != null) { 30 | FhirProfileVersion myProfileVersion = myProfile.getVersions().get(profile.getVersion()); 31 | if (myProfileVersion != null) { 32 | return myProfileVersion.getValidityPeriod(); 33 | } 34 | } 35 | return null; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /core/src/test/java/de/abda/fhir/validator/core/ReferenceValidatorPreloadTest.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core; 2 | 3 | import org.junit.jupiter.api.Test; 4 | 5 | import static de.abda.fhir.validator.core.ProfileForPreloading.*; 6 | 7 | /** 8 | * @author RupprechJo 9 | */ 10 | public class ReferenceValidatorPreloadTest { 11 | 12 | @Test 13 | void testPreload() { 14 | ReferenceValidator validator = new ReferenceValidator(); 15 | validator.preloadAllSupportedValidators(KBV_PR_ERP_BUNDLE); 16 | validator.preloadAllSupportedValidators(ERX_MEDICATION_DISPENSE); 17 | validator.preloadAllSupportedValidators(ERX_RECEIPT); 18 | validator.preloadAllSupportedValidators(DAV_PR_ERP_ABGABEDATEN_BUNDLE); 19 | validator.preloadAllSupportedValidators(GKVSV_PR_TA7_SAMMELRECHNUNG); 20 | validator.preloadAllSupportedValidators(GEM_ERP_PR_MedicationDispense); 21 | validator.preloadAllSupportedValidators(GEM_ERP_PR_CloseOperationInputBundle); 22 | validator.preloadAllSupportedValidators(GEM_ERP_PR_Bundle); 23 | validator.preloadAllSupportedValidators(GKVSV_PR_TA7_RECHNUNG); 24 | validator.preloadAllSupportedValidators(GEM_ERPCHRG, GEM_ERPCONSENT); 25 | validator.preloadAllSupportedValidators(DAV_PKV_PR_ERP_ABGABEDATEN_BUNDLE); 26 | validator.preloadAllSupportedValidators(KBV_PR_ERP_BUNDLE, ERX_RECEIPT, GEM_ERP_PR_Bundle, DAV_PR_ERP_ABGABEDATEN_BUNDLE, GKVSV_PR_TA7_RECHNUNG); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/configuration/FhirPackageValidityPeriod.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.configuration; 2 | 3 | import java.time.LocalDate; 4 | import java.util.Objects; 5 | 6 | public class FhirPackageValidityPeriod { 7 | private LocalDate valid_from; 8 | private LocalDate valid_to; 9 | private String fhir_path; 10 | 11 | public LocalDate getValid_from() { 12 | return valid_from; 13 | } 14 | 15 | public void setValid_from(LocalDate valid_from) { 16 | this.valid_from = valid_from; 17 | } 18 | 19 | public LocalDate getValid_to() { 20 | return valid_to; 21 | } 22 | 23 | public void setValid_to(LocalDate valid_to) { 24 | this.valid_to = valid_to; 25 | } 26 | 27 | public String getFhir_path() { 28 | return fhir_path; 29 | } 30 | 31 | public void setFhir_path(String fhir_path) { 32 | this.fhir_path = fhir_path; 33 | } 34 | 35 | @Override 36 | public boolean equals(Object o) { 37 | if (this == o) return true; 38 | if (o == null || getClass() != o.getClass()) return false; 39 | FhirPackageValidityPeriod that = (FhirPackageValidityPeriod) o; 40 | return Objects.equals(valid_from, that.valid_from) && Objects.equals(valid_to, that.valid_to) && Objects.equals(fhir_path, that.fhir_path); 41 | } 42 | 43 | @Override 44 | public int hashCode() { 45 | return Objects.hash(valid_from, valid_to, fhir_path); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/util/FhirPackagePropertiesHelper.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.util; 2 | 3 | import com.fasterxml.jackson.databind.ObjectMapper; 4 | import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; 5 | import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; 6 | import de.abda.fhir.validator.core.configuration.FhirPackageProperties; 7 | import de.abda.fhir.validator.core.exception.ValidatorInitializationException; 8 | import org.slf4j.Logger; 9 | import org.slf4j.LoggerFactory; 10 | 11 | import java.io.InputStream; 12 | 13 | public class FhirPackagePropertiesHelper { 14 | 15 | static Logger logger = LoggerFactory.getLogger(FhirPackagePropertiesHelper.class); 16 | 17 | public static FhirPackageProperties loadFhirPackageProperties() { 18 | ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); 19 | mapper.registerModule(new JavaTimeModule()); 20 | FhirPackageProperties fhirPackageProperties; 21 | try { 22 | InputStream packagesConfigFile = FhirPackagePropertiesHelper.class.getClassLoader().getResourceAsStream("packages.yaml"); 23 | fhirPackageProperties = mapper.readValue(packagesConfigFile, FhirPackageProperties.class); 24 | return fhirPackageProperties; 25 | } catch (Exception e) { 26 | logger.error("Unable to load package properties."); 27 | throw new ValidatorInitializationException("Unable to load package properties. Root cause: " + e.getMessage()); 28 | } 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/util/ValidationSupportChainHelper.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.util; 2 | 3 | import ca.uhn.fhir.context.FhirContext; 4 | import ca.uhn.fhir.context.support.IValidationSupport; 5 | import de.abda.fhir.validator.core.support.IgnoreMissingValueSetValidationSupport; 6 | import de.abda.fhir.validator.core.support.FixedSnapshotGeneratingValidationSupport; 7 | import de.abda.fhir.validator.core.support.VersionPipeAwareSupportChain; 8 | import org.hl7.fhir.common.hapi.validation.support.PrePopulatedValidationSupport; 9 | //import org.hl7.fhir.common.hapi.validation.support.SnapshotGeneratingValidationSupport; 10 | 11 | public class ValidationSupportChainHelper { 12 | 13 | // This is basically the validator configuration! 14 | public static IValidationSupport createValidationSupportChain(PrePopulatedValidationSupport npmPackageSupport, FhirContext ctx) { 15 | /* 16 | * Reuse already prepared supports from context 17 | * save memory from the hogs 18 | */ 19 | IValidationSupport validationSupport = ctx.getValidationSupport(); 20 | 21 | // Create a support chain including the NPM Package Support 22 | return new VersionPipeAwareSupportChain( 23 | npmPackageSupport, 24 | validationSupport, 25 | new FixedSnapshotGeneratingValidationSupport(ctx), 26 | //new SnapshotGeneratingValidationSupport(ctx), // TODO: test or look for HAPI fix 27 | new IgnoreMissingValueSetValidationSupport(ctx) 28 | ); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/filter/regex/FilterBeschreibungsListe.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.filter.regex; 2 | 3 | import java.util.List; 4 | 5 | import javax.xml.bind.annotation.XmlAccessType; 6 | import javax.xml.bind.annotation.XmlAccessorType; 7 | import javax.xml.bind.annotation.XmlElement; 8 | import javax.xml.bind.annotation.XmlRootElement; 9 | 10 | /** 11 | * Eine Liste mit FilterBeschreibung für Validation. 12 | * @author Dzmitry Liashenka 13 | * 14 | */ 15 | @XmlRootElement(name="filterlist") 16 | @XmlAccessorType(XmlAccessType.PROPERTY) 17 | public class FilterBeschreibungsListe { 18 | 19 | private static final String ERROR_FILTER_LIST_NULL = "Die Liste der Filters darf nicht NULL sein."; 20 | 21 | private List beschreibungFilterList; 22 | 23 | /** 24 | * Gibt eine Liste mit {@linkplain FilterBeschreibung} zurück. 25 | * @return the beschreibungFilterList Eine Liste mit FilterBeschreibung für Validation. 26 | */ 27 | @XmlElement(name="filter") 28 | public List getBeschreibungFilterList() { 29 | return beschreibungFilterList; 30 | } 31 | 32 | /** 33 | * Setzt den Wert für die Eigenschaft. 34 | * @param beschreibungFilterList Liste der FilterBeschreinungen. Darf nicht null sein! 35 | * @throws IllegalArgumentException wenn beschreibungFilterList null ist. 36 | */ 37 | public void setBeschreibungFilterList(List beschreibungFilterList) throws IllegalArgumentException { 38 | if ( null == beschreibungFilterList) { 39 | throw new IllegalArgumentException(ERROR_FILTER_LIST_NULL); 40 | } 41 | this.beschreibungFilterList = beschreibungFilterList; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/util/FileHelper.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.util; 2 | 3 | import ca.uhn.fhir.context.FhirContext; 4 | import ca.uhn.fhir.parser.StrictErrorHandler; 5 | import ca.uhn.fhir.parser.XmlParser; 6 | import java.io.File; 7 | import java.nio.charset.Charset; 8 | import java.nio.charset.StandardCharsets; 9 | import java.nio.file.Paths; 10 | import org.apache.commons.io.FileUtils; 11 | import org.hl7.fhir.instance.model.api.IBaseResource; 12 | import org.slf4j.Logger; 13 | import org.slf4j.LoggerFactory; 14 | 15 | import java.io.IOException; 16 | import java.nio.file.Files; 17 | import java.nio.file.Path; 18 | 19 | public class FileHelper { 20 | 21 | static Logger logger = LoggerFactory.getLogger(FileHelper.class); 22 | 23 | public static String loadValidatorInputAsString(String inputPath) { 24 | try { 25 | String inputString = FileUtils.readFileToString(new File(inputPath), StandardCharsets.UTF_8); 26 | return inputString; 27 | } catch (IOException e) { 28 | logger.error("Angegebene Datei \"" + inputPath + "\" konnte nicht gefunden werden.", e); 29 | throw new RuntimeException(e); 30 | } 31 | } 32 | 33 | public static IBaseResource loadValidatorInputAsResource(String inputPath, FhirContext ctx) { 34 | try { 35 | XmlParser parser = new XmlParser(ctx, new StrictErrorHandler()); 36 | return parser.parseResource(Files.newInputStream(Paths.get(inputPath))); 37 | } catch (IOException e) { 38 | logger.error("Angegebene Datei \"" + inputPath + "\" konnte nicht gefunden werden.", e); 39 | throw new RuntimeException(e); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/ProfileForPreloading.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core; 2 | 3 | /** 4 | * Enum with all supported Profiles, that can be used for proloading validators 5 | * @author RupprechJo 6 | */ 7 | public enum ProfileForPreloading { 8 | KBV_PR_ERP_BUNDLE("https://fhir.kbv.de/StructureDefinition/KBV_PR_ERP_Bundle"), 9 | ERX_MEDICATION_DISPENSE("https://gematik.de/fhir/StructureDefinition/ErxMedicationDispense"), 10 | GEM_ERP_PR_MedicationDispense("https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_PR_MedicationDispense"), 11 | GEM_ERP_PR_CloseOperationInputBundle("https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_PR_CloseOperationInputBundle"), 12 | ERX_RECEIPT("https://gematik.de/fhir/StructureDefinition/ErxReceipt"), 13 | GEM_ERP_PR_Bundle("https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_PR_Bundle"), 14 | GEM_ERPCHRG("https://gematik.de/fhir/erpchrg/StructureDefinition/GEM_ERPCHRG_PR_ChargeItem"), 15 | GEM_ERPCONSENT("https://gematik.de/fhir/erpchrg/StructureDefinition/GEM_ERPCHRG_PR_Consent"), 16 | DAV_PR_ERP_ABGABEDATEN_BUNDLE("http://fhir.abda.de/eRezeptAbgabedaten/StructureDefinition/DAV-PR-ERP-AbgabedatenBundle"), 17 | DAV_PKV_PR_ERP_ABGABEDATEN_BUNDLE("http://fhir.abda.de/eRezeptAbgabedaten/StructureDefinition/DAV-PKV-PR-ERP-AbgabedatenBundle"), 18 | GKVSV_PR_TA7_SAMMELRECHNUNG("https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Bundle"), 19 | GKVSV_PR_TA7_RECHNUNG("https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Rechnung_Bundle"); 20 | 21 | private String canonical; 22 | 23 | ProfileForPreloading(String canonical) { 24 | this.canonical = canonical; 25 | } 26 | 27 | public String getCanonical() { 28 | return canonical; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/test-ConsentPKV.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/java/de/abda/fhir/validator/core/filter/regex/FilterBeschreibungTest.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.filter.regex; 2 | 3 | 4 | import static org.junit.jupiter.api.Assertions.assertEquals; 5 | import static org.junit.jupiter.api.Assertions.assertThrows; 6 | 7 | import java.util.Optional; 8 | import java.util.regex.Pattern; 9 | 10 | import org.junit.jupiter.api.BeforeEach; 11 | import org.junit.jupiter.api.Test; 12 | 13 | 14 | /** 15 | * Testet die JaxB- Implementierung von {@link FilterBeschreibung} 16 | * @author Dzmitry Liashenka 17 | * 18 | */ 19 | public class FilterBeschreibungTest { 20 | 21 | FilterBeschreibung filterBeschreibung; 22 | 23 | @BeforeEach 24 | public void setup() { 25 | filterBeschreibung = new FilterBeschreibung(); 26 | } 27 | 28 | @Test() 29 | public void testSetSeverityPatternException() { 30 | assertThrows(IllegalArgumentException.class, () -> { 31 | filterBeschreibung.setSeverityPattern(null); 32 | }); 33 | } 34 | 35 | @Test() 36 | public void testSetLocationPatternException() { 37 | assertThrows(IllegalArgumentException.class, () -> { 38 | filterBeschreibung.setLocationPattern(null); 39 | }); 40 | } 41 | 42 | @Test() 43 | public void testSetMessagePatternException() { 44 | assertThrows(IllegalArgumentException.class, () -> { 45 | filterBeschreibung.setMessagePattern(null); 46 | }); 47 | } 48 | 49 | @Test 50 | public void testToString() { 51 | filterBeschreibung.setLocationPattern(Optional.of(Pattern.compile("location"))); 52 | filterBeschreibung.setMessagePattern(Optional.of(Pattern.compile("message"))); 53 | filterBeschreibung.setSeverityPattern(Optional.of(Pattern.compile("information"))); 54 | 55 | assertEquals("FilterBeschreibung [ severityPattern='information', locationPattern='location', messagePattern='message' ]", filterBeschreibung.toString()); 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/test-chargeItemPKVBinary.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/util/ProfileValidityDate.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.util; 2 | 3 | import de.abda.fhir.validator.core.configuration.FhirPackageValidityPeriod; 4 | 5 | import java.time.LocalDate; 6 | import java.util.Objects; 7 | 8 | public class ProfileValidityDate { 9 | Profile profile; 10 | FhirPackageValidityPeriod validityPeriod; 11 | 12 | LocalDate instanceDate; 13 | 14 | public ProfileValidityDate(Profile profile) { 15 | this.profile = profile; 16 | this.validityPeriod = null; 17 | this.instanceDate = null; 18 | } 19 | 20 | public ProfileValidityDate(Profile profile, FhirPackageValidityPeriod validityPeriod, LocalDate instanceDate) { 21 | this.profile = profile; 22 | this.validityPeriod = validityPeriod; 23 | this.instanceDate = instanceDate; 24 | } 25 | 26 | public Profile getProfile() { 27 | return profile; 28 | } 29 | public FhirPackageValidityPeriod getValidityPeriod() { 30 | return validityPeriod; 31 | } 32 | 33 | public void setValidityPeriod(FhirPackageValidityPeriod validityPeriod) { 34 | this.validityPeriod = validityPeriod; 35 | } 36 | 37 | public LocalDate getInstanceDate() { 38 | return instanceDate; 39 | } 40 | 41 | public void setInstanceDate(LocalDate instanceDate) { 42 | this.instanceDate = instanceDate; 43 | } 44 | 45 | @Override 46 | public boolean equals(Object o) { 47 | if (this == o) return true; 48 | if (o == null || getClass() != o.getClass()) return false; 49 | ProfileValidityDate that = (ProfileValidityDate) o; 50 | return Objects.equals(profile, that.profile) && Objects.equals(validityPeriod, that.validityPeriod) && Objects.equals(instanceDate, that.instanceDate); 51 | } 52 | 53 | @Override 54 | public int hashCode() { 55 | return Objects.hash(profile, validityPeriod, instanceDate); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/util/Profile.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.util; 2 | 3 | public class Profile { 4 | 5 | private String canonical; 6 | private String baseCanonical; 7 | private String version; 8 | 9 | public Profile(String canonical, String baseCanonical, String version) { 10 | this.canonical = canonical; 11 | this.baseCanonical = baseCanonical; 12 | this.version = version; 13 | } 14 | 15 | public String getCanonical() { 16 | return canonical; 17 | } 18 | 19 | public void setCanonical(String canonical) { 20 | this.canonical = canonical; 21 | } 22 | 23 | public String getBaseCanonical() { 24 | return baseCanonical; 25 | } 26 | 27 | public void setBaseCanonical(String baseCanonical) { 28 | this.baseCanonical = baseCanonical; 29 | } 30 | 31 | public String getVersion() { 32 | return version; 33 | } 34 | 35 | public void setVersion(String version) { 36 | this.version = version; 37 | } 38 | 39 | @Override 40 | public boolean equals(Object o) { 41 | if (this == o) return true; 42 | if (o == null || getClass() != o.getClass()) return false; 43 | 44 | Profile profile = (Profile) o; 45 | 46 | if (!canonical.equals(profile.canonical)) return false; 47 | if (!baseCanonical.equals(profile.baseCanonical)) return false; 48 | return version.equals(profile.version); 49 | } 50 | 51 | @Override 52 | public int hashCode() { 53 | int result = canonical.hashCode(); 54 | result = 31 * result + baseCanonical.hashCode(); 55 | result = 31 * result + version.hashCode(); 56 | return result; 57 | } 58 | 59 | @Override 60 | public String toString() { 61 | final StringBuilder sb = new StringBuilder("Profile{"); 62 | sb.append("canonical='").append(canonical).append('\''); 63 | sb.append('}'); 64 | return sb.toString(); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/util/AllowListHelper.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.util; 2 | 3 | import ca.uhn.fhir.validation.ResultSeverityEnum; 4 | import ca.uhn.fhir.validation.SingleValidationMessage; 5 | import de.abda.fhir.validator.core.configuration.FhirProfileVersion; 6 | 7 | import java.util.List; 8 | 9 | public class AllowListHelper { 10 | 11 | public static void applyAllowLists(List messages, FhirProfileVersion fhirProfileVersion) { 12 | removeDAVActorIdentifierErrors(messages, fhirProfileVersion); 13 | //add custom allowlist filters here 14 | } 15 | 16 | //This ain't failsafe. A better solution has to be found for the long term as this might ignore more errors than just the bad identifier definition in the profile (or better make a better/correct profile) 17 | // --> fixed in package de.abda.eRezeptAbgabedaten 1.1.0 18 | public static void removeDAVActorIdentifierErrors(List messages, FhirProfileVersion fhirProfileVersion) { 19 | // TODO: eigentlich AllowListHelper pro ProfileVersion / Package 20 | if ((fhirProfileVersion.getVersion().equals("1.0.3")) && (fhirProfileVersion.getRequiredPackage().getPackageName().equals("de.abda.erezeptabgabedaten"))) { 21 | messages.removeIf(singleValidationMessage -> { 22 | if (singleValidationMessage.getSeverity() == ResultSeverityEnum.ERROR && 23 | ( 24 | (singleValidationMessage.getMessage().contains("http://fhir.abda.de/Identifier/DAV-Herstellerschluessel") && singleValidationMessage.getMessage().contains("http://fhir.de/NamingSystem/arge-ik/iknr")) || 25 | singleValidationMessage.getMessage().contains("http://fhir.abda.de/eRezeptAbgabedaten/StructureDefinition/DAV-PR-ERP-ZusatzdatenEinheit") || 26 | singleValidationMessage.getMessage().contains("http://fhir.abda.de/eRezeptAbgabedaten/StructureDefinition/DAV-PR-ERP-ZusatzdatenHerstellung") || 27 | singleValidationMessage.getMessage().contains("http://fhir.abda.de/eRezeptAbgabedaten/StructureDefinition/DAV-PR-Base-ZusatzdatenHerstellung") 28 | ) 29 | ) return true; 30 | else return false; 31 | }); 32 | } 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/support/NpmPackageValidationSupportCache.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.support; 2 | 3 | import ca.uhn.fhir.context.FhirContext; 4 | import java.io.IOException; 5 | import java.util.List; 6 | import java.util.Map; 7 | import java.util.concurrent.ConcurrentHashMap; 8 | import org.hl7.fhir.common.hapi.validation.support.NpmPackageValidationSupport; 9 | import org.hl7.fhir.common.hapi.validation.support.PrePopulatedValidationSupport; 10 | import org.hl7.fhir.instance.model.api.IBaseResource; 11 | 12 | /** 13 | * Erweiterung des std. Lademechanismus zur Unterstützung von Caching. D.h. 14 | * Versionierte Resourcen werden im Cache abgelegt und nicht bei jeder Anfragen 15 | * erneut geladen. 16 | * 17 | * @author Georg Tsakumagos 18 | * 19 | */ 20 | public class NpmPackageValidationSupportCache { 21 | 22 | private final Map packageCache = new ConcurrentHashMap<>(0); 23 | private final FhirContext fhirContext; 24 | 25 | 26 | /** 27 | * Konstruktor 28 | * 29 | * @param ctx Der Kontext. Darf nicht null sein. 30 | */ 31 | public NpmPackageValidationSupportCache(FhirContext ctx) { 32 | this.fhirContext = ctx; 33 | } 34 | 35 | public PrePopulatedValidationSupport createPrePopulatedValidationSupport(List packageFilesToLoad) throws IOException { 36 | 37 | final PrePopulatedValidationSupport result = new PrePopulatedValidationSupport(this.fhirContext); 38 | 39 | for(String packagePath : packageFilesToLoad) { 40 | PrePopulatedValidationSupport fragment = this.packageCache.get(packagePath); 41 | 42 | if (null == fragment) { 43 | synchronized(this.packageCache) { 44 | fragment = this.packageCache.get(packagePath); 45 | 46 | if (null == fragment) { 47 | NpmPackageValidationSupport loader = new NpmPackageValidationSupport(this.fhirContext); 48 | loader.loadPackageFromClasspath(packagePath); 49 | fragment = loader; 50 | this.packageCache.put(packagePath, fragment); 51 | } 52 | } 53 | for(IBaseResource resource : fragment.fetchAllConformanceResources()) { 54 | result.addResource(resource); 55 | } 56 | } 57 | } 58 | /* 59 | * Scheinbar gibt es Abhängigkeiten oder die erzeugten Instanzen werden nachträglich manipuliert. 60 | * Wenn diese Instanzen wiederverwendet werden, führt dies zu Fehlern wenn unterschiedliche 61 | * Profilversionen hintereinander validiert werden. 62 | */ 63 | this.packageCache.clear(); 64 | return result; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/configuration/FhirProfileVersion.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.configuration; 2 | 3 | public class FhirProfileVersion { 4 | 5 | private String version; 6 | private FhirPackageValidityPeriod validityPeriod; 7 | private FhirPackage requiredPackage; 8 | 9 | public FhirProfileVersion() { 10 | } 11 | 12 | public FhirProfileVersion(String version, FhirPackageValidityPeriod validityPeriod, FhirPackage requiredPackage) { 13 | this.version = version; 14 | this.validityPeriod = validityPeriod; 15 | this.requiredPackage = requiredPackage; 16 | } 17 | 18 | public String getVersion() { 19 | return version; 20 | } 21 | 22 | public void setVersion(String version) { 23 | this.version = version; 24 | } 25 | 26 | public FhirPackage getRequiredPackage() { 27 | return requiredPackage; 28 | } 29 | 30 | public void setRequiredPackage(FhirPackage requiredPackage) { 31 | this.requiredPackage = requiredPackage; 32 | } 33 | 34 | public FhirPackageValidityPeriod getValidityPeriod() { 35 | return validityPeriod; 36 | } 37 | 38 | public void setValidityPeriod(FhirPackageValidityPeriod validityPeriod) { 39 | this.validityPeriod = validityPeriod; 40 | } 41 | 42 | @Override 43 | public boolean equals(Object o) { 44 | if (this == o) { 45 | return true; 46 | } 47 | if (o == null || getClass() != o.getClass()) { 48 | return false; 49 | } 50 | 51 | FhirProfileVersion that = (FhirProfileVersion) o; 52 | 53 | if (version != null ? !version.equals(that.version) : that.version != null) { 54 | return false; 55 | } 56 | if (!requiredPackage.equals(that.requiredPackage)) { 57 | return false; 58 | } 59 | return validityPeriod.equals(that.validityPeriod); 60 | } 61 | 62 | @Override 63 | public int hashCode() { 64 | int result = version != null ? version.hashCode() : 0; 65 | result = 31 * result + requiredPackage.hashCode(); 66 | result = 31 * result + validityPeriod.hashCode(); 67 | return result; 68 | } 69 | 70 | @Override 71 | public String toString() { 72 | final StringBuilder sb = new StringBuilder("FhirProfileVersion{"); 73 | sb.append("requiredPackage=").append(requiredPackage.getPackageName()); 74 | sb.append(", version='").append(version).append('\''); 75 | sb.append('}'); 76 | return sb.toString(); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /core/src/main/java/de/abda/fhir/validator/core/support/IgnoreMissingValueSetValidationSupport.java: -------------------------------------------------------------------------------- 1 | package de.abda.fhir.validator.core.support; 2 | 3 | import ca.uhn.fhir.context.FhirContext; 4 | import ca.uhn.fhir.context.support.ConceptValidationOptions; 5 | import ca.uhn.fhir.context.support.ValidationSupportContext; 6 | import java.util.HashMap; 7 | import org.hl7.fhir.common.hapi.validation.support.BaseValidationSupport; 8 | import org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain; 9 | 10 | import javax.annotation.Nullable; 11 | import java.util.AbstractMap; 12 | import java.util.Map; 13 | 14 | /** 15 | * This validation support module must be placed at the end of a {@link ValidationSupportChain} 16 | * in order to configure the validator to generate a warning if a resource being validated 17 | * contains an unknown code system. 18 | */ 19 | public class IgnoreMissingValueSetValidationSupport extends BaseValidationSupport { 20 | 21 | private final Map supportedCodeSystemMap = new HashMap<>(); 22 | 23 | /** 24 | * Constructor 25 | * @param theFhirContext {@link FhirContext} 26 | */ 27 | public IgnoreMissingValueSetValidationSupport(FhirContext theFhirContext) { 28 | super(theFhirContext); 29 | supportedCodeSystemMap.put("http://fhir.de/CodeSystem/ifa/pzn", "PZN found. This validator has no PZN database and will not check if the provided PZN is valid."); 30 | supportedCodeSystemMap.put("http://fhir.de/CodeSystem/ask", "ASK entry found. This validator has no ASK database and will not check if the provided entry is valid"); 31 | } 32 | 33 | @Override 34 | public boolean isCodeSystemSupported(ValidationSupportContext theValidationSupportContext, String theCodeSystem) { 35 | if (theCodeSystem != null && supportedCodeSystemMap.containsKey(theCodeSystem)){ 36 | return true; 37 | } else return false; 38 | } 39 | 40 | @Nullable 41 | @Override 42 | public CodeValidationResult validateCode(ValidationSupportContext theValidationSupportContext, ConceptValidationOptions theOptions, String theCodeSystem, String theCode, String theDisplay, String theValueSetUrl) { 43 | if (theCodeSystem != null && supportedCodeSystemMap.containsKey(theCodeSystem)) { 44 | CodeValidationResult result = new CodeValidationResult(); 45 | result.setSeverity(IssueSeverity.INFORMATION); 46 | result.setCodeSystemName(theCodeSystem); 47 | result.setCode(theCode); 48 | result.setMessage(supportedCodeSystemMap.get(theCodeSystem)); 49 | return result; 50 | } else return null; 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/Rez_Nr1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/Rez_Nr1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20230701/Rez_Nr1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/Rez_parenterale_Zytostatika_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/Rez_parenterale_Zytostatika_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20230701/Rez_parenterale_Zytostatika_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/PZN_Nr1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/PZN_Nr1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/wip/FHIR-FAIL_subject_identifier_value.warn: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto execute 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto execute 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :execute 68 | @rem Setup the command line 69 | 70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 | 72 | 73 | @rem Execute Gradle 74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 | 76 | :end 77 | @rem End local scope for the variables with windows NT shell 78 | if "%ERRORLEVEL%"=="0" goto mainEnd 79 | 80 | :fail 81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 | rem the _cmd.exe /c_ return code! 83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 | exit /b 1 85 | 86 | :mainEnd 87 | if "%OS%"=="Windows_NT" endlocal 88 | 89 | :omega 90 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101_prefix/Rez_Nr1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101_prefix/Rez_parenterale_Zytostatika_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/PZN_Nr3_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/PZN_Impfstoff_V2_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/PZN_Nr3_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/PZN_Nr5_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/PZN_Nr7_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/PZN_Impfstoff_V2_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/PZN_Impfstoff_V1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/PZN_MV1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/PZN_MV2_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/PZN_MV3_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/PZN_MV4_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/PZN_Nr8_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/PZN_Nr5_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/PZN_Nr7_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/PZN_KB_V2_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/PZN_Nr2_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/PZN_Impfstoff_V1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/PZN_MV1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/PZN_MV2_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/PZN_MV3_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/PZN_MV4_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/PZN_Nr8_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/PZN_KB_V2_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/PZN_Nr2_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/PZN_KB_V1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/FT_V2_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/PZN_KB_V1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/FT_V1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/WS_MV2_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/FT_V1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/FT_V2_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/WS_MV1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/WS_MV2_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/WS_BK_V2_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/WS_MV1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/WS_BK_V1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/WS_BK_V2_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/WS_BK_V1_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20210701/PZN_Nr4_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /core/src/test/resources/valid/20220101/PZN_Nr4_MedicationDispense.xml: -------------------------------------------------------------------------------- 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 | --------------------------------------------------------------------------------