DAV-ABDA / eRezept-Referenzvalidator

eRezept-Referenzvalidator auf Basis des HAPI-FHIR-Validators
Apache License 2.0
20 stars 8 forks source link

Validator raucht ab oder macht Unsinn, wenn die Profil-URL der zu validierenden Ressource kein Versionssuffix hat #24

Closed DarthGizka closed 1 year ago

DarthGizka commented 2 years ago

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:

java -server -jar reference-validator-cli-0.9.8.jar Bundle-72bd741c-7ad8-41d8-97c3-9aabbdd0f5b4-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:

java -server -jar validator_cli-5.6.27.jar ^
 -version 4.0.1 ^
 -ig de.abda.erezeptabgabedaten#1.1.2 ^
 Bundle-72bd741c-7ad8-41d8-97c3-9aabbdd0f5b4-plain.xml
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).

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.

*) Namen sind der Redaktion bekannt

ABDA-FHIR commented 1 year ago

fix 1.0.2