Das Problem kommt aus der Produktion. Noventi hatte einem vollkommen kaputten eRezeptAbgabedatensatz präsentiert, aber anstatt den Leuten die 25+ Fehler im Datensatz um die Ohren zu hauen, beging der Referenzvalidator Selbstmord:
220 [main] DEBUG de.abda.fhir.validator.core.Validator - Start validating File Issue4.xml
260 [main] ERROR de.abda.fhir.validator.core.ValidatorFactory - Version "0.0.0" for profile "http://fhir.abda.de/eRezeptAbgabedaten/StructureDefinition/DAV-PR-ERP-AbgabedatenBundle" is not supported
Schritte zum Nachvollziehen:
ABDA-eigene Beispieldateien umwandeln in XML (weil der Referenzvalidator momentan kein JSON verarbeiten kann):
for %f in (*.json) do if not exist %~nf.xml (fhir push %f && fhir save %~nf.xml)
eine Datei öffnen, die Version aus meta.profile herausoperieren, und dann die Datei unter einem anderen Namen speichern (e.g. *-plain.xml)
223 [main] DEBUG de.abda.fhir.validator.core.Validator - Start validating File Bundle-72bd741c-7ad8-41d8-97c3-9aabbdd0f5b4-plain.xml
263 [main] ERROR de.abda.fhir.validator.core.ValidatorFactory - Version "0.0.0" for profile "http://fhir.abda.de/eRezeptAbgabedaten/StructureDefinition/DAV-PR-ERP-AbgabedatenBundle" is not supported
Das Weglassen der Version in der Profil-URL ist zulässig, da das Profil den Text der Profil-URL nicht festnagelt (im Gegensatz zu diversen GKV-Profilen). HAPI-Validator:
FHIR Validation tool Version 5.6.27 (Git# 90008b77449d). Built 2022-01-21T21:43:46.20Z (64 hours old)
Java: 16.0.1 from C:\Program Files\Java\jdk-16.0.1 on amd64 (64bit). 8172MB available
Paths: Current = d:\dev\CLR\ApoTI\E-Rezept-Beispieldaten\ABDA\eRezeptAbgabedaten-1.1.2, Package Cache = C:\Users\KnightOwl\.fhir\packages
Params: -version 4.0.1 -ig de.abda.erezeptabgabedaten#1.1.2 Bundle-72bd741c-7ad8-41d8-97c3-9aabbdd0f5b4.xml
Loading
Load FHIR v4.0 from hl7.fhir.r4.core#4.0.1 - 4575 resources (00:04.0705)
Load hl7.terminology#3.0.0 - 3795 resources (00:01.0024)
Terminology server http://tx.fhir.org - Version 2.0.12-SNAPSHOT (00:01.0813)
Load de.basisprofil.r4#0.9.13 - 128 resources (00:00.0196)
Load de.abda.eRezeptAbgabedatenBasis#1.1.3 - 49 resources (00:00.0080)
Load de.abda.erezeptabgabedaten#1.1.2 - 13 resources (00:00.0009)
Get set... go (00:00.0340)
Validating
Validate Bundle-72bd741c-7ad8-41d8-97c3-9aabbdd0f5b4.xml ..Detect format for Bundle-72bd741c-7ad8-41d8-97c3-9aabbdd0f5b4.xml
00:05.0671
Done. Times: Loading: 00:08.0478, validation: 00:05.0672. Memory = 626Mb
Success: 0 errors, 0 warnings, 3 notes
Information @ Bundle.entry[0].resource.ofType(Composition).type (line 27, col11): None of the codings provided are in the value set 'FHIR Document Type Codes' (http://hl7.org/fhir/ValueSet/doc-typecodes), and a coding is recommended to come from this value set) (codes = http://fhir.abda.de/eRezeptAbgabedaten/CodeSystem/DAV-CS-ERP-CompositionTypes#ERezeptAbgabedaten)
Information @ Bundle.entry[1].resource.ofType(Organization).address[0].country (line 78, col27): The value provided ('D') is not in the value set 'Iso 3166 Part 1: 2 Letter Codes' (http://hl7.org/fhir/ValueSet/iso3166-1-2), and a code is recommended to come from this value set) (error message = The code provided (urn:iso:std:iso:3166) is not in the value set http://hl7.org/fhir/ValueSet/iso3166-
1-2, and a code is required from this value set. The system D is unknown.)
Information @ Bundle.entry[3].resource.ofType(Invoice).lineItem[0].chargeItem.ofType(CodeableConcept).coding[0] (line 221, col15): Code System URI 'http://fhir.de/CodeSystem/ifa/pzn' is unknown so the code cannot be validated
Die Meldungen sind genau die gleichen wie für die XML-Datei mit versionierter Profil-URL.
Bei anderen Strukturen - e.g. Gematik-Quittung - verwendet der Validator einfach eine falsche Profilversion, mit vorhersehbar unbrauchbarem Resultat.
VORSCHLAG
Es sollte die Möglichkeit gegeben werden, dem Referenzvalidator einen Vorgabe bezüglich des Profils, der Profilversion oder des Profilpakets zu machen (Kommandozeilenschalter).
Wert http://fhir.abda.de/eRezeptAbgabedaten/StructureDefinition/DAV-PR-ERP-AbgabedatenBundle|1.1.0: Validator agiert so, als hätte er diese URL in meta.profile der Ressource gefunden
Wert 1.2.3: Paketauswahl erfolgt so, als hätte die URL in meta.profile die Versionsangabe |1.2.3
Wert kbv.ita.erp#1.0.2: Leitpaket direkt angegeben - zugehörigen Paketsatz verwenden
Damit würde auch wieder die Möglichkeit bestehen, beliebige FHIR-Datensätze zu validieren, sofern die eingebauten Profilpakete dafür hinreichend sind. Das betrifft insbesondere auch (unprofilierte) Standardstrukturen wie Patient, die sich hervorragend zum Testen von Extensions, ValueSets, CodeSystems u.ä. eignen. So ist es z.B. sehr hilfreich, wenn eine Datei für einen Testfall nur 5 Zeilen lang sein muß und nicht mehrere Hundert.
Derzeit kann der Referenzvalidator fast gar nichts validieren (5 verschiedene Strukturen von Hunderten oder Tausenden ist fast nichts).
Solange unversionierte Profil-URLs gemäß den Profilen zulässig sind, muß der Referenzvalidator irgendwie damit umgehen können.
Eigentlich sollte der Referenzvalidator auch alle involvierten Profildefinitionen validieren können - aber die sind per definitionem JSON und nicht XML. Das ist insofern von Relevanz als einige beteiligte Organisationen* offensichtlich Profile veröffentlichen, die nicht einmal FHIR-valide sind, und Simplifier hat offensichtlich auch noch keine ausreichende/funktionierende eingebaute Validierung. Der HAPI-Referenzvalidator ist kostenlos, aber er wird ganz offensichtlich von den betreffenden Organisationen nicht benutzt.
Das Problem kommt aus der Produktion. Noventi hatte einem vollkommen kaputten eRezeptAbgabedatensatz präsentiert, aber anstatt den Leuten die 25+ Fehler im Datensatz um die Ohren zu hauen, beging der Referenzvalidator Selbstmord:
Schritte zum Nachvollziehen:
for %f in (*.json) do if not exist %~nf.xml (fhir push %f && fhir save %~nf.xml)
*-plain.xml
)java -server -jar reference-validator-cli-0.9.8.jar Bundle-72bd741c-7ad8-41d8-97c3-9aabbdd0f5b4-plain.xml
Das Weglassen der Version in der Profil-URL ist zulässig, da das Profil den Text der Profil-URL nicht festnagelt (im Gegensatz zu diversen GKV-Profilen). HAPI-Validator:
Die Meldungen sind genau die gleichen wie für die XML-Datei mit versionierter Profil-URL.
Bei anderen Strukturen - e.g. Gematik-Quittung - verwendet der Validator einfach eine falsche Profilversion, mit vorhersehbar unbrauchbarem Resultat.
VORSCHLAG
Es sollte die Möglichkeit gegeben werden, dem Referenzvalidator einen Vorgabe bezüglich des Profils, der Profilversion oder des Profilpakets zu machen (Kommandozeilenschalter).
http://fhir.abda.de/eRezeptAbgabedaten/StructureDefinition/DAV-PR-ERP-AbgabedatenBundle|1.1.0
: Validator agiert so, als hätte er diese URL in meta.profile der Ressource gefunden1.2.3
: Paketauswahl erfolgt so, als hätte die URL in meta.profile die Versionsangabe |1.2.3kbv.ita.erp#1.0.2
: Leitpaket direkt angegeben - zugehörigen Paketsatz verwendenDamit würde auch wieder die Möglichkeit bestehen, beliebige FHIR-Datensätze zu validieren, sofern die eingebauten Profilpakete dafür hinreichend sind. Das betrifft insbesondere auch (unprofilierte) Standardstrukturen wie
Patient
, die sich hervorragend zum Testen von Extensions, ValueSets, CodeSystems u.ä. eignen. So ist es z.B. sehr hilfreich, wenn eine Datei für einen Testfall nur 5 Zeilen lang sein muß und nicht mehrere Hundert.Derzeit kann der Referenzvalidator fast gar nichts validieren (5 verschiedene Strukturen von Hunderten oder Tausenden ist fast nichts).
Solange unversionierte Profil-URLs gemäß den Profilen zulässig sind, muß der Referenzvalidator irgendwie damit umgehen können.
Eigentlich sollte der Referenzvalidator auch alle involvierten Profildefinitionen validieren können - aber die sind per definitionem JSON und nicht XML. Das ist insofern von Relevanz als einige beteiligte Organisationen* offensichtlich Profile veröffentlichen, die nicht einmal FHIR-valide sind, und Simplifier hat offensichtlich auch noch keine ausreichende/funktionierende eingebaute Validierung. Der HAPI-Referenzvalidator ist kostenlos, aber er wird ganz offensichtlich von den betreffenden Organisationen nicht benutzt.
*) Namen sind der Redaktion bekannt