Skip to content

Commit

Permalink
Release 0.7.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Gematik-Entwicklung committed Jul 5, 2023
1 parent ae8a970 commit e93b067
Show file tree
Hide file tree
Showing 837 changed files with 9,254 additions and 54,794 deletions.
87 changes: 70 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

# Gematik Referenzvalidator

![GitHub Latest Pre-Release)](https://img.shields.io/github/v/release/gematik/app-referencevalidator?include_prereleases&label=pre-release&logo=github) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/de.gematik.refv/referencevalidator/badge.svg)](https://maven-badges.herokuapp.com/maven-central/de.gematik.refv/referencevalidator) [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)


<details>
<summary>Inhaltsverzeichnis</summary>
<ol>
Expand Down Expand Up @@ -52,50 +55,79 @@ Siehe [Release Notes](ReleaseNotes.md)
- Wertebereiche: Die Wertebereiche von Eigenschaften werden berücksichtigt (einschließlich aufgelistete Codes)
- Coding/CodeableConcept bindings: Die Code-Angaben in einer Instanz entsprechen der Definition des Kodierungssystems aus dem Profil
- Constraints/Invariants: Die für die Eigenschaften im Profil definierten Regeln sind eingehalten
- Prüfung der Gültigkeitszeiträume der in den Instanzen referenzierten Profile
- Nutzung der FHIR-Package-Abhängigkeiten in Abhängigkeit von dem Instanz-Erstellungszeitpunkt (bspw. der datumsabhängigen [KBV-Schlüsseltabellen](https://applications.kbv.de/overview.xhtml))

Ergänzungen zum Standardverhalten des HL7 Java Validators:
- Instanzen mit unbekannten Profilen führen zum invaliden Ergebnis
- Instanzen mit unbekannten Extensions führen zum invaliden Ergebnis
- Nicht auflösbare relative Referenzen in Bundles führen zum invaliden Ergebnis
- Nicht auflösbare relative Referenzen in Bundles führen zum invaliden Ergebnis

### E-Rezept-Modul

Abweichend vom allgemeinen Prüfumfang verhält sich das E-Rezept-Modul wie folgt:
- Codes aus den CodeSystemen `http://fhir.de/CodeSystem/ifa/pzn` und `http://fhir.de/CodeSystem/ask` werden nicht validiert
- Fehler, die bei Validierung von `http://fhir.abda.de/eRezeptAbgabedaten/StructureDefinition/DAV-PR-ERP-AbgabedatenBundle|1.0.3` im Zusammenhang mit falschen Angaben bei `http://fhir.abda.de/Identifier/DAV-Herstellerschluessel` stehen, werden ignoriert und führen zum **validen** Ergebnis

Die eingebundenen Packages, unterstützte Profile und Versionen findet man [hier](supported-profiles.md).
#### Anpassungen der Packages:
- Alle Packages enthalten Snapshots

#### Anpassungen der Profile
- de.gematik.erezept-workflow.r4-1.0.3-1.tgz
- ErxChargeItem.json
- BugFix: Korrektur der supportiveInformation-Slices (Keine Snapshot-Generierung sonst möglich)
- de.gematik.erezept-workflow.r4-1.1.1.tgz
- ErxCommunicationReply.json
- Communication.about targetProfile: typos: KBV_PR_ERP_Medikament_Freitext, KBV_PR_ERP_Medikament_PZN, KBV_PR_ERP_Medikament_Rezeptur, erxTask. Korrigiert in KBV_PR_ERP_Medication_FreeText, KBV_PR_ERP_Medication_PZN, KBV_PR_ERP_Medication_Compounding, ErxTask
- de.abda.erezeptabgabedatenbasis-1.1.0.tgz
- Extension-DAV-EX-ERP-Rezeptaenderung.json
- Extension-DAV-EX-ERP-Zusatzattribute.json
- Extension-DAV-EX-ERP-ZusatzdatenHerstellung.json
- Änderungen siehe Version 0.9.6 im [ChangeLog.md des ABDA Referenzvalidators](https://github.com/DAV-ABDA/eRezept-Referenzvalidator/blob/main/CHANGELOG.md)

### EAU-Modul

Abweichend vom allgemeinen Prüfumfang verhält sich das eAU-Modul wie folgt:
- ICD-10-Codes (CodeSysteme `http://fhir.de/CodeSystem/dimdi/icd-10-gm` und `http://fhir.de/CodeSystem/bfarm/icd-10-gm`) werden nicht validiert

Die eingebundenen Packages, unterstützte Profile und Versionen findet man [hier](supported-profiles.md).
#### Anpassungen der Packages:
- Alle Packages enthalten Snapshots

#### Anpassungen der Profile
- de.basisprofil.r4-0.9.13.tgz
- Extension-seitenlokalisation.json
- BugFix: Version 0.9.12 auf 0.9.13 korrigiert

### ISIP1-Modul

Die eingebundenen Packages, unterstützte Profile und Versionen findet man [hier](supported-profiles.md).
#### Anpassungen der Packages:
- Alle Packages enthalten Snapshots

### ISIK2-Modul

Abweichend vom allgemeinen Prüfumfang verhält sich das ISIK2-Modul wie folgt:
- Codes aus den CodeSystemen `http://snomed.info/sct`, `http://fhir.de/CodeSystem/bfarm/icd-10-gm`, `http://fhir.de/CodeSystem/bfarm/atc` und `http://fhir.de/CodeSystem/bfarm/ops` werden nicht validiert
- Folgende ValueSets werden nicht validiert: `https://gematik.de/fhir/isik/v2/Basismodul/ValueSet/ProzedurenCodesSCT`, `https://gematik.de/fhir/isik/v2/Basismodul/ValueSet/DiagnosesSCT`, `https://gematik.de/fhir/isik/v2/Basismodul/ValueSet/ProzedurenKategorieSCT`, `https://gematik.de/fhir/isik/v2/Terminplanung/ValueSet/ISiKTerminPriority`, `https://gematik.de/fhir/isik/v2/Medikation/ValueSet/SctRouteOfAdministration` und `http://fhir.de/ValueSet/bfarm/ops`

### Anpassungen der Packages:
- Alle Packages enthalten Snapshots

### ISIK1-Modul

Abweichend vom allgemeinen Prüfumfang verhält sich das ISIK1-Modul wie folgt:
- Codes aus den CodeSystemen `http://snomed.info/sct`, `http://fhir.de/CodeSystem/bfarm/icd-10-gm` und `http://fhir.de/CodeSystem/bfarm/ops` werden nicht validiert
- Folgende ValueSets werden nicht validiert: `https://gematik.de/fhir/isik/v2/Basismodul/ValueSet/ProzedurenCodesSCT`, `https://gematik.de/fhir/isik/v2/Basismodul/ValueSet/DiagnosesSCT`, `https://gematik.de/fhir/isik/v2/Basismodul/ValueSet/ProzedurenKategorieSCT` und `http://fhir.de/ValueSet/bfarm/ops`

#### Anpassungen der Packages:
- Alle Packages enthalten Snapshots

### DIGA-Modul

Abweichend vom allgemeinen Prüfumfang verhält sich das DIGA-Modul wie folgt:
- Codes aus den CodeSystemen `http://fhir.de/CodeSystem/ifa/pzn` und `http://fhir.de/CodeSystem/dimdi/atc` werden nicht validiert


Die eingebundenen Packages, unterstützte Profile und Versionen findet man [hier](supported-profiles.md).
#### Anpassungen der Packages:
- Alle Packages enthalten Snapshots

## Erste Schritte

Expand All @@ -107,19 +139,21 @@ Der Referenzvalidator wird als Java-Bibliothek und als Konsolenanwendung verteil

#### Konsolenanwendung

Für die Verwendung der Konsolenanwendung soll die Datei `referencevalidator-cli-X.Y.Z.jar` in einem beliebigen Ordner im Dateisystem abgelegt werden.
Für die Verwendung der Konsolenanwendung soll die Datei `referencevalidator-cli-X.Y.Z.jar` in einem beliebigen Ordner im Dateisystem abgelegt werden (siehe [Releases](https://github.com/gematik/app-referencevalidator/releases)).

#### Java-Bibliothek

Der Referenzvalidator wird zur Einbindung in andere Projekte auf [Maven Central](https://search.maven.org/artifact/de.gematik.refv/referencevalidator) veröffentlicht. Bei der Einbindung ist darauf zu achten, dass genau die angegebenen Versionen der Abhängigkeiten, insbesondere der HAPI-Bibliothekten (`ca.uhn.hapi.fhir`), zur Laufzeit eingebunden sind.

Beispiel zur Einbindung des Referenzvalidator:

``` XML
<dependency>
<groupId>de.gematik.refv</groupId>
<artifactId>referencevalidator-lib</artifactId>
<version>${version.referencevalidator}</version>
</dependency>
```

Die Versionsangabe `${version.referencevalidator}` soll mit der gewünschten einzubindenden Referenzvalidator-Version ersetzt werden.

Expand All @@ -129,7 +163,7 @@ Die Versionsangabe `${version.referencevalidator}` soll mit der gewünschten ein

Der Referenzvalidator erfordert als Eingabe einen Modulnamen und einen gültigen Pfad zur Datei, die eine FHIR-Ressource enthält:

java -jar referencevalidator-cli-X.Y.Z.jar -m erp -i c:\temp\example.xml
java -jar referencevalidator-cli-X.Y.Z.jar erp c:\temp\example.xml

Unterstützte Modulnamen:
- `erp` (E-Rezept)
Expand All @@ -139,25 +173,30 @@ Unterstützte Modulnamen:
- `isik1` (Informationstechnische Systeme in Krankenhäusern Stufe 1)
- `diga` (Digitale Gesundheitsanwendungen)

Weitere Parameter:
- `-e` - Nur Validierungsmeldungen der Stufen ERROR und FATAL ausgeben (keine INFO und WARN-Meldungen)
- `-v` - Verbode-Modus mit Debug-Ausgaben

Optionen:
- `--errors-only` - Nur Validierungsmeldungen der Stufen ERROR und FATAL ausgeben (keine INFO und WARN-Meldungen)
- `--verbose` - Verbode-Modus mit Debug-Ausgaben
- `--no-profile-validity-period-check` - Deaktivierung der Zeitraumgültigkeitsprüfung der Profilversionen
- `--profile` - Angabe einer Profil-Canonical-URL zur Validierung. Falls angegeben, wird die Angabe der Instanz unter meta.profile ignoriert
- `--module-info` - Ausgabe der unterstützten Profile, Profilversionen und FHIR-Packages zu einem Validierungsmodul
- `--accepted-encodings` - Komma-separierte Liste mit den zu akzeptierenden Serialisierungsformaten der FHIR-Ressourcen. Unterstützte Werte: `xml`,`json`. Überschreibt die Modul-eigene Konfiguration.

### Java-Bibliothek

Folgende Beispiele veranschaulichen die Verwendung vom Referenzvalidator in einer Java-Anwendung.

Validierung einer FHIR-Ressource aus einer Datei:

ValidationModule erpModule = new ValidationModuleFactory().createValidationModule(SupportedValidationModule.ERP);
Path path = Paths.get("c:/temp/KBV_PR_ERP_Bundle.xml");
ValidationResult result = erpModule.validateFile(path);
System.out.println(result.isValid());
System.out.println(result.getValidationMessages());
``` Java
ValidationModule erpModule = new ValidationModuleFactory().createValidationModule(SupportedValidationModule.ERP);
ValidationResult result = erpModule.validateFile("c:/temp/KBV_PR_ERP_Bundle.xml");
System.out.println(result.isValid());
System.out.println(result.getValidationMessages());
```

Validierung einer FHIR-Ressource als String:

``` Java
ValidationModule erpModule = new ValidationModuleFactory().createValidationModule(SupportedValidationModule.ERP);
String fhirRessource = "<Bundle xmlns=\"http://hl7.org/fhir\">\n"
+ " <id value=\"fb16b9fb-eca9-4a64-b257-083ac87c9c9c\"/>\n"
Expand All @@ -169,6 +208,20 @@ Validierung einer FHIR-Ressource als String:
ValidationResult result = erpModule.validateString(fhirRessource);
System.out.println(result.isValid());
System.out.println(result.getValidationMessages());
```

Die Validierungseinstellungen auch angepasst werden:

``` Java
ValidationModule erpModule = new ValidationModuleFactory().createValidationModule(SupportedValidationModule.ERP);
ValidationOptions options = ValidationOptions.getDefaults();
options.setProfileValidityPeriodCheckStrategy(ProfileValidityPeriodCheckStrategy.IGNORE);
options.setProfiles(List.of("https://fhir.kbv.de/StructureDefinition/KBV_PR_ERP_Bundle|1.0.1"));
options.setAcceptedEncodings(List.of("xml", "json"));
ValidationResult result = erpModule.validateFile("c:/temp/KBV_PR_ERP_Bundle.xml");
System.out.println(result.isValid());
```
Die Anpassung der Validierungseinstellungen soll allerdings nur für Testzwecke erfolgen, da damit die Bewertung der eingegebenen Instanz gegenüber Standardeinstellungen verfälscht wird.

## Lizenz

Expand Down
21 changes: 20 additions & 1 deletion ReleaseNotes.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,24 @@

# Release Notes Gematik Referenzvalidator

## Release 0.7.0

### added
- Profile validity period checks based on instance creation date
- New parameter to set a profile for validation
- Output of release version and help on empty input
- New parameter to print supported profiles and FHIR packages of a validation module
- New parameter to override module setting on accepted encodings
- KBV_CS_SFHIR_KBV_DARREICHUNGSFORM_V1.12.xml integrated for ERP and EAU modules

### changed
- Usage of different FHIR package dependencies based on the instance creation date
- Performance optimization (memory consumption, multithreading)
- Module name and input file are passed directly to the command line tool instead of using -m and -i parameters respectively
- Upgrade to HAPI 6.6.1
- E-Rezept module accepts only XML encoding by default


## Release 0.6.1

### added
Expand All @@ -19,11 +37,12 @@
- support for the 1.2 version of profiles in de.abda.erezeptabgabedatenpkv (package de.abda.erezeptabgabedatenpkv-1.2.0)
- New validation module: isik2 (Informationstechnische Systeme in Krankenhäusern Stufe 2)
- New validation module: isik1 (Informationstechnische Systeme in Krankenhäusern Stufe 1)
- KBV_CS_SFHIR_KBV_DARREICHUNGSFORM_V1.11.xml integrated

### changed
- removed packages de.abda.erezeptabgabedaten-1.3.0, de.abda.erezeptabgabedatenpkv-1.1.0
- added packages (erp): de.abda.erezeptabgabedaten-1.3.1, de.abda.erezeptabgabedatenbasis-1.3.1
- KBV_CS_SFHIR_KBV_DARREICHUNGSFORM_V1.11.xml integrated


## Release 0.4.1

Expand Down
28 changes: 22 additions & 6 deletions cli/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,12 @@
<parent>
<artifactId>referencevalidator</artifactId>
<groupId>de.gematik.refv</groupId>
<version>0.6.1</version>
<version>0.7.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>referencevalidator-cli</artifactId>

<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>

<build>
<plugins>
<plugin>
Expand All @@ -31,6 +26,7 @@
<appendAssemblyId>true</appendAssemblyId>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<mainClass>de.gematik.refv.cli.ReferenceValidator</mainClass>
</manifest>
</archive>
Expand Down Expand Up @@ -59,6 +55,26 @@
<artifactId>mockito-junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${version.slf4j-api}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-reload4j</artifactId>
<version>${version.slf4j-log4j}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${version.log4j2}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${version.log4j2}</version>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
* Copyright (c) 2023 gematik GmbH
*
* Licensed under the Apache License, Version 2.0 (the License);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an 'AS IS' BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package de.gematik.refv.cli;

import de.gematik.refv.commons.configuration.ValidationModuleConfiguration;

public class ModuleConfigurationPrinter {
public String moduleConfigurationToString(ValidationModuleConfiguration configuration) {
StringBuilder sb = new StringBuilder();
addSupportedProfiles(configuration, sb);
addFHIRPackages(configuration, sb);
return sb.toString();
}

private static void addFHIRPackages(ValidationModuleConfiguration configuration, StringBuilder sb) {
sb.append("\r\nFHIR-Package lists: \r\n");
for (var dependencyListsEntrySet :
configuration.getDependencyLists().entrySet()) {
sb.append(" * " + dependencyListsEntrySet.getKey());
if(dependencyListsEntrySet.getValue().getValidFrom() != null || dependencyListsEntrySet.getValue().getValidTill() != null) {
sb.append(" (Valid ");
if(dependencyListsEntrySet.getValue().getValidFrom() != null)
sb.append("from " + dependencyListsEntrySet.getValue().getValidFrom());
if(dependencyListsEntrySet.getValue().getValidTill() != null)
sb.append(" till " + dependencyListsEntrySet.getValue().getValidTill());
sb.append(")\r\n");
}
else
sb.append("\n");
for (var packageFile: dependencyListsEntrySet.getValue().getPackages()){
sb.append(" - " + packageFile + "\r\n");
}
}
}

private static void addSupportedProfiles(ValidationModuleConfiguration configuration, StringBuilder sb) {
sb.append("Supported profiles:");
for (var profileEntrySet :
configuration.getSupportedProfiles().entrySet()) {
sb.append("\r\n * " + profileEntrySet.getKey());
for (var versionsEntrySet :
profileEntrySet.getValue().getProfileVersions().entrySet()) {
sb.append("\r\n -" + versionsEntrySet.getKey());
}
}
}
}
Loading

0 comments on commit e93b067

Please sign in to comment.