Skip to content

The reference validator is a tool to perform advanced validation of FHIR resources for TI applications and interoperability standards

License

Notifications You must be signed in to change notification settings

gematik/app-referencevalidator

Repository files navigation


Gematik Referenzvalidator

GitHub Latest Release) Maven Central License

Inhaltsverzeichnis
  1. Über das Projekt
  2. Funktionsumfang
  3. Erste Schritte
  4. Verwendung
  5. Lizenz
  6. Beiträge zum Projekt und Danksagung
  7. Kontakt

Über das Projekt

Der Referenzvalidator ermöglicht eine erweiterte Validierung von FHIR-Ressourcen, die in den Anwendungen der Telematikinfrastruktur (TI) verwendet werden. Der Referenzvalidator liefert autoritative Antworten zur Validität von übertragenen Datensätzen und ist somit eine Referenz für eventuell sonst im Rahmen einer TI-Anwendung eingesetzte FHIR-Validatoren.

Siehe Use Cases, Anforderungen, Architektur, Entwicklungsprozess für weitere Informationen.

Warning Die Verbindlichkeit des E-Rezept-Moduls vom Referenzvalidator in Abrechnungsprozessen wird in der Technische Anlage 7, Anhang 2, zur Arzneimittelabrechnungsvereinbarung gemäß § 300 Absatz 3 SGB V festgelegt. Siehe auch E-Rezept: Technische Verarbeitbarkeit, Schiedsrichter-Rolle und Problemlösungsverfahren. Die Verbindlichkeit anderer Validierungsmodule wurde bisher nicht festgelegt. Es besteht lediglich eine Nutzungsempfehlung seitens der gematik.

Warning Der Betrieb des Referenzvalidators in bestehenden Anwendungen oder Anwendungslandschaften obliegt der Verantwortung der Nutzer. Die gematik trifft angemessene Maßnahmen, um die Sicherheit und Performance des Referenzvalidators zu gewährleisten. Sie übernimmt aber keine Verantwortung für etwaige Schäden, die durch die Integration des Referenzvalidators in Produktionssysteme entstehen (siehe auch Haftungsausschuss der Apache 2.0-Lizenz. Insbesondere müssen die Sicherheitsaspekte des Gesamtsystems unter Einbeziehung der technischen und organisatorischen Rahmenbedingungen der jeweiligen Betriebsumgebung durch die Nutzer selbst bewertet werden. Des Weiteren hängen die Performance-Eigenschaften des Validators stark von der jeweiligen Betriebsumgebung ab.

Release Notes

Siehe Release Notes

Funktionsumfang

  • Validierung von FHIR-Ressourcen anhand der referenzierten Profile
  • Der Prüfumfang entspricht dem Umfang des HL7 Java Validators:
    • Struktur: Alle Elemente einer Instanz MÜSSEN in dem referenzierten Profil definiert sein
    • Kardinalität: Die Min/Max-Angaben aller Eigenschaften sind berücksichtigt
    • 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)

Unterstützte Validierungsmodule

Modul Version
E-Rezept 2.7
Elektronische Arbeitsunfähigkeitsbescheinigung 0.91
FHIR Core 1.0
E-Rezept Abrechnungsdaten (experimentell) 0.3

E-Rezept-Modul

Abweichend vom allgemeinen Prüfumfang verhält sich das E-Rezept-Modul wie folgt:

  • Folgende CodeSysteme werden nicht validiert:
    • http://fhir.de/CodeSystem/ifa/pzn
    • http://fhir.de/CodeSystem/ask
    • http://fhir.de/CodeSystem/bfarm/atc (wird in GEM_ERP_PR_Medication verwendet)
    • http://snomed.info/sct (wird in GEM_ERP_PR_Medication verwendet)
    • https://terminologieserver.bfarm.de/fhir/CodeSystem/arzneimittel-referenzdaten-pharmazeutisches-produkt (wird in GEM_ERP_PR_Medication verwendet)
  • Folgende CodeSysteme werden validiert, führt aber zu einer Warnung im Falle der Nicht-Validität:
    • http://unitsofmeasure.org
  • Folgende ValueSets werden nicht validiert:
    • http://hl7.org/fhir/uv/ips/ValueSet/medicine-doseform (wird in GEM_ERP_PR_Medication verwendet)
  • 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
  • Instanzen mit unbekannten Profilen führen zum invaliden Ergebnis
  • Instanzen mit unbekannten Extensions führen zum invaliden Ergebnis

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

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
  • Instanzen mit unbekannten Profilen führen zum invaliden Ergebnis
  • Instanzen mit unbekannten Extensions führen zum invaliden Ergebnis

Für folgende Profile erfolgen Instanz-datumsbasierte Auswahl der FHIR-Packages zur Validierung sowie Profilgültigkeitsprüfungen:

Profil Datenelement Anmerkung
KBV_PR_EAU_Bundle Bundle.entry.resource.where(meta.profile.contains('KBV_PR_EAU_Composition')).date Ausstellungsdatum
KBV_PR_EAU_Composition date Ausstellungsdatum
KBV_PR_EAU_Storno_Bundle Bundle.entry.resource.where(meta.profile.contains('KBV_PR_EAU_Composition')).date Aktuelles Datum der Stornierung
KBV_PR_EAU_Storno_Composition date Aktuelles Datum der Stornierung

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

CORE-Modul

Der Referenzvalidator bietet die Möglichkeit, FHIR Core-Ressourcen zu validieren. Beim Aufruf des core-Validierungsmoduls ist die Angabe einer Profil-Canonical-URL zur Validierung erforderlich (siehe Optionen der Konsolenanwendung).

E-Rezept Abrechnungsdaten-Modul (EXPERIMENTELL)

Dieses Modul bietet eine experimentelle Umsetzung zur performanten Validierung von großen TA7-FHIR-Abrechnungsdateien. Unterstützt werden nur Resourcen mit dem Profil https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Rechnung_Bundle|1.3.0.

Das Modul mit der id erpta7 kann auf die gleiche Art und Weise verwendet werden wie das E-Rezept-Modul, z.B.

java -jar .\referencevalidator-cli-X.Y.Z.jar erpta7 c:\temp\big-ta7-file.xml

oder aus dem Quellcode heraus unter der Verwendung der entsprechenden Kennung SupportedValidationModule.ERPTA7:

ValidationModule erpModule = new ValidationModuleFactory().createValidationModule(SupportedValidationModule.ERPTA7);

Für die Validierung der TA7-FHIR-Instanzen teilt das Modul die Eingabe in mehrere GKVSV_PR_TA7_RezeptBundle-Ressourcen auf und validiert diese unabhängig voneinander - parallel und unter Verwendung des E.Rezept-Validierungsmoduls. Zusätzlich erfolgt Validierung des umschließenden Bundles, anderer Ressourcen sowie Querverweisprüfungen innerhalb der Eingabe-FHIR-Instanz, um die Gesamtkorrektheit der Validierung zu gewährleisten. Das Modul strebt identische Validierungsergebnisse wie das E-Rezept-Modul an. Die Leistung des Moduls hängt von der Anzahl der verfügbaren CPU-Kerne ab, was der Anzahl der vom Modul gestarteten parallelen Threads entspricht. Wie auch das E-Rezept-Modul validiert das ERPTA7-Modul KEINE base64-kodierten Daten (eRezepte, Abgabedaten, Belege) innerhalb der TA7-Datei.

Externe Validierungsmodule (Plugins)

Der Referenzvalidator kann mit weiteren Validierungsmodulen erweitert werden. Die von der gematik bereitgestellten Validierungsmodule können aus dem entsprechenden GitHub-Repository heruntergeladen werden.

Nutzung mit der Konsolenanwendung

Die Plugins sollen im Ordner plugins auf derselben Ordnerebene wie die jar-Referenzvalidator-Datei abgelegt werden. Beim Aufruf des Referenzvalidators soll die id des abgelegten Plugins angegeben werden.

Beispiel der Ordnerstruktur:

referencevalidator/
├── plugins/
│   └── isik3-terminplanung.zip
├── referencevalidator-cli-X.Y.Z.jar
└── test-ISIKTermin.json

Beispielaufruf:

    cd referencevalidator
    java -jar .\referencevalidator-cli-X.Y.Z.jar isik3-terminplanung test-ISIKTermin.json

Nutzung mit der Java-Bibliothek

Plugin plugin = Plugin.createFromZipFile(new ZipFile("src/test/resources/plugins/minimal-plugin.zip"));
var pluginModule = new ValidationModuleFactory().createValidationModuleFromPlugin(plugin);
String fhirRessource = "<Bundle xmlns=\"http://hl7.org/fhir\">\n"
        + "    <id value=\"fb16b9fb-eca9-4a64-b257-083ac87c9c9c\"/>\n"
        + "    <meta>\n"
        + "        <profile value=\"https://fhir.kbv.de/StructureDefinition/KBV_PR_ERP_Bundle|1.0.1\"/>\n"
        + "        \n"
        + "    </meta>\n"
        + "</Bundle>";
var result = pluginModule.validateString(fhirRessource);
System.out.println(result.isValid());

Erste Schritte

Voraussetzungen

Der Referenzvalidator wird als Java-Bibliothek und als Konsolenanwendung verteilt. Für die Verwendung ist JDK 11 erforderlich (z.B. AdoptOpenJDK).

Installation

Konsolenanwendung

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).

Java-Bibliothek

Der Referenzvalidator wird zur Einbindung in andere Projekte auf Maven Central 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:

    <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.

Verwendung

Konsolenanwendung

Der Referenzvalidator erfordert als Eingabe einen Modulnamen und einen oder mehrere gültige Pfade zu Dateien oder Verzeichnissen, die FHIR-Ressourcen enthalten (bei mehreren Pfaden müssen diese mit Kommas separiert werden):

java -jar referencevalidator-cli-X.Y.Z.jar erp c:\temp\example.xml
java -jar referencevalidator-cli-X.Y.Z.jar erp c:\temp\example.xml,c:\temp\example2.xml,c:\temp\folder-with-fhir-resources

Unterstützte Modulnamen:

  • erp (E-Rezept)
  • eau (Elektronische Arbeitsunfähigkeitsbescheinigung)
  • core (FHIR Core)
  • erpta7 (E-Rezept Abrechnungsdaten)

Optionen:

  • --verbose - Verbode-Modus mit Debug-Protokoll-Ausgaben und INFORMATION- bzw. WARNING-Validierungsnachrichten
  • --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
  • --profile-filter - Angabe eines regulären Ausdrucks zur Prüfung der unter meta.profile referenzierten Profile. Falls kein referenzierstes Profil dem regulären Ausdruck entspricht, wird die Instanz als invalide betrachtet. Beispiele zur Nutzung:
    • Prüfen, dass es sich bei einer Instanz grundsätzlich um eine E-Rezept-Quittung und nicht etwa um eine Verordnung handelt: --profile-filter "ErxReceipt|GEM_ERP_PR_Bundle"
    • Prüfen, dass es sich bei einer Instanz um eine E-Rezept-Verordnung (in der Profilversion 1.1) handelt: --profile-filter "KBV_PR_ERP_Bundle\|1\.1"
    • Prüfen, dass es sich bei einer Instanz um Abgabedaten (GKV oder PKV) handelt: --profile-filter "DAV-(PKV-)?PR-ERP-AbgabedatenBundle"
  • --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.
  • --output - Angabe eines Dateipfades um das Validierungsergebnis in Form einer FHIR OperationOutcome-Ressource bzw. eines Bundles mit OperationOutcome-Ressourcen in eine Datei zu schreiben. Beispiel: --output c:\temp\output.xml. Als Ausgabeformate werden sowohl xml als auch json unterstützt. Die Struktur der Ausgabedateien ist in der weiterführenden Dokumentation zu finden.

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);
        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:

    ValidationModule erpModule = new ValidationModuleFactory().createValidationModule(SupportedValidationModule.ERP);
    String fhirRessource = "<Bundle xmlns=\"http://hl7.org/fhir\">\n"
        + "    <id value=\"fb16b9fb-eca9-4a64-b257-083ac87c9c9c\"/>\n"
        + "    <meta>\n"
        + "        <profile value=\"https://fhir.kbv.de/StructureDefinition/KBV_PR_ERP_Bundle|1.0.1\"/>\n"
        + "        \n"
        + "    </meta>\n"
        + "</Bundle>";
    ValidationResult result = erpModule.validateString(fhirRessource);
    System.out.println(result.isValid());
    System.out.println(result.getValidationMessages());

Die Validierungseinstellungen können auch angepasst werden:

        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"));
        options.setValidationMessagesFilter(ValidationMessagesFilter.KEEP_ALL);
        options.setProfileFilterRegex("KBV_PR_ERP_Bundle");
        ValidationResult result = erpModule.validateFile("c:/temp/KBV_PR_ERP_Bundle.xml", options);
        System.out.println(result.isValid());
        System.out.println(result.getValidationMessages());

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

Siehe Apache License, Version 2.0

Beiträge zum Projekt und Danksagung

Teile des Projekts basieren auf dem ABDA E-Rezept-Referenzvalidator (Copyright 2022 Deutscher Apothekerverband (DAV)), der unter Apache License, Version 2.0 steht. Modifizierte Quellcodedateien sind im Quellcode als solche gekennzeichnet.

Die Snapshots für die FHIR-Packages wurden auf Basis vom Pull Request von spectrumK und bakdata vorgeneriert und in den Referenzvalidator eingebunden.

Kontakt

Fragen, Anregungen, Bug Reports und Feature requests sind willkommen und können gerne über die GitHub Issues oder über referenzvalidator@gematik.de eingereicht werden.