gematik / app-referencevalidator

The reference validator is a tool to perform advanced validation of FHIR resources for TI applications and interoperability standards
https://fachportal.gematik.de/hersteller-anbieter/primaersysteme/referenzvalidator
Other
21 stars 4 forks source link

Referenzen die im FHIR Dokument nicht auflösbar sind werden nicht als Fehler erkannt #21

Open GithubChrisWysocki opened 1 month ago

GithubChrisWysocki commented 1 month ago

Guten Tag, ich arbeite als Softwareentwickler in einem Apotheken Rechenzentrum. Von Zeit zu Zeit erhalten wir E-Rezepte, bei denen eine Referenz innerhalb des FHIR - Dokuments nicht auflösbar ist. Laut FHIR Spezifikation ist es eine absolute Voraussetzung für die Implementierung (siehe: https://www.hl7.org/fhir/references-definitions.html). Leider ist euer app-referencevalidator nicht im Stande dieses zu erkennen, aber das Problem scheint tiefer zu liegen, denn auch die offiziellen Online-Seiten (https://inferno.healthit.gov/validator/ oder https://validator.fhir.org/ ) zur Validierung von FHIR Dokumenten klassifizieren diesen Fehler nur als Information.

image

Ich füge hier ein echtes anonymisiertes E-Rezept mit diesem Fehler bei. NoRef.txt In dem Beispiel gibt es eine Referenz auf einen Patienten "Patient/1764862" Zeile 281, der im Dokument nicht gefunden wird. Glücklicherweise bezieht sich die Referenz auf die Begünstigte Person, die für die Abrechnung von E-Rezepten aktuell nicht benötigt wird, sodass man das im Code ignorieren kann. Es könnte aber Fälle geben wo dies nicht der Fall ist. Ich frage mich eigentlich nur, warum das in der Validierung hier und bei den offiziellen Validatoren nicht als Fehler erkannt wird, wenn es in der Spezifikation als notwendig Voraussetzung angegeben wird? image

alexey-tschudnowsky commented 1 month ago

Hallo @GithubChrisWysocki ,

danke für die Meldung.

Es gibt einen definierten Algorithmus zum Auflösen der Referenzen in Bundles, dem alle Validatoren folgen:

  1. Die relative URL in der Referenz "Patient/1764862" wird in die absolute URL "http://prd.srh-principa.de/fhir/Patient/1764862" umgewandelt
  2. Es wird im Bundle nach einem entry mit entry.fullUrl gleich der absoluten URL gesucht.
  3. Falls im Bundle kein Eintrag mit der absolutenURL gefunden wird, "wird versucht" diese zu "dereferenzieren" --> und hier besteht eine Schwierigkeit für die Validatoren, denn die Ressource kann gar nicht im ERP-Umfeld über HTTP abgerufen werden.

Die meisten Validatoren, auch Referenzvalidator, hören beim Punkt 2 auf und fragen keine extern referenzierten Ressourcen ab wie im Punkt 3 beschrieben. Es gibt gewisse Argumente dies nicht zu tun (Offline-Betrieb, Sicherheit, Performance etc.). Stattdessen wird oft nur eine Information oder Warnung ausgegeben, dass der Validator nicht weiß ob die Ressource existiert oder nicht.

Um nun in den Bundles trotzdem Integrität zu bewahren wurden in den aktuellen KBV-FHIR-Profilen viele zusätzliche FHIR Constraints definiert, die versuchen sicherzustellen, dass die Querreferenzen "korrekt" sind, also dass sie auf entries verweisen die wirklich existieren. Hier haben Sie allerdings eventuell eine Stelle entdeckt, wo ein Constraint fehlt.

Wir nehmen den Fund mit und klären ihn intern sowie mit den Kollegen aus KBV.

ABDA-FHIR commented 1 month ago

Die ProfileBasis "Coverage.beneficiary" erwartet eine Wertbelegung (Kardinalität 1:1), daher wurde hier auf den Patienten (begünstigte Person) referenziert. Der Typ der Referenz ist beschränkt ([Patient]) und da nur ein Patient im Bundle angegeben werden kann ist dies eigentlich eindeutig. Vielleicht eher eine Frage von gültigen URLs.

Für die Fehlerbehebung des verursachenden Systems (Composition.author:Pruefnummer.identifier.value) wäre eine Auflistung über das ERPFIND-Ticket 919 (https://service.gematik.de/browse/ERPFIND-919) hilfreich.

Danke