FHIR Chat · Instant ohne Zeitzone · german (d-a-ch)

Stream: german (d-a-ch)

Topic: Instant ohne Zeitzone


view this post on Zulip Markus Danz (Feb 12 2019 at 13:14):

Laut STU3 datatypes ist ein Instant eine vollständige Datumsangabe inklusive Zeit und Zeitzone.

An instant in time - known at least to the second and always includes a time zone. Note: This is intended for precisely observed times (typically system logs etc.), and not human-reported times - for them, use date and dateTime. instant is a more constrained dateTime

Wenn ich jetzt z.B. eine DocumentReference, wo das Element "indexed" vom Typ "Instant" ist, gegen das HL7 Basisprofil "DocumentReference" mit Hilfe von FHIR.NET einlese und validiere, dann werden fehlende Zeitzonen durch die local timezone ersetzt, z.B. "+01:00". Dadurch ist es unmöglich, eine fehlende Zeitzone zu erkennen und entsprechend zu reagieren.

Im sorce code sieht man, dass FHIR.NET in der Datei ".Hl7.Fhir.Core\Model\Instant.cs" die .NET Methoden DateTimeOffset.TryParse() und DateTimeOffset.Nowverwendet. Das ist nicht restriktiv genug, um der FHIR Spezifikation zu genügen.

Lustigerweise macht simplifier etwas ähnliches. Wenn die Zeitzone fehlt, dann wird einfach +00:00 als Zeitzone angenommen und der String verändert. Hier ein Beispiel: https://simplifier.net/justforfun/documentreference-example
Hochgeladen wurde der String "2005-12-24T09:43:41" und nach dem hochladen steht "2005-12-24T09:43:41+00:00" drin.

Frage: Darf für invalide Zeit-Strings für den Typ Instant die Zeitzone einfach generiert werden? Das erscheint uns falsch.

view this post on Zulip Stefan Lang (Feb 12 2019 at 18:23):

Es ist zumindest ein pragmatischer Ansatz, aber meines Wissens so nicht in der FHIR-Spec. zu finden und sicher diskussionswürdig.
Dass Simplifier sich ähnlich verhält, ist klar - Simplifier benutzt die Dotnet-Library.

Wäre sicher ein Thema für den implementers-Stream.
Evtl. weiß auch @Alexander Zautke mehr?

view this post on Zulip Alexander Zautke (Feb 12 2019 at 18:35):

Das “gewünschte” Result wäre dann, dass die Resource nicht akzeptiert wird und der Parser einen Fehler schmeißt, verstehe ich das so richtig?

view this post on Zulip Christof Gessner (Feb 12 2019 at 19:23):

Nicht der Parser - der validator. Oder? Keine Ahnung, wie das die angesprochene Library hält, aber im allgemeinen gibt es validierende und nicht-validierende Parser (option "strict", oder sowas ähnliches meistens).

view this post on Zulip Christof Gessner (Feb 12 2019 at 19:28):

Netter topic zu ähnlichen Fragen: https://chat.fhir.org/#narrow/stream/179166-implementers/topic/Client.20Timezone

view this post on Zulip Alexander Zautke (Feb 13 2019 at 09:24):

Habe das Thema intern an das API Team weitergegeben, wir schauen uns den Fall an. Sobald ich eine Ticket Nummer dazu hab, reiche ich diese nach. Ich denke der Validator sollte es klar zurückweisen. Unschlüssig bin ich beim Parser. Ich stimme Christof zu, dass sein Setting in diesem Fall hilfreich wäre.

view this post on Zulip Alexander Zautke (Feb 13 2019 at 09:25):

Danke fürs Melden :)

view this post on Zulip Stefan Lang (Feb 13 2019 at 10:50):

Ich denke, per Default sollte der Parser sich standardkonform verhalten. Dass es dann einen "lazy"- oder "non-strict"-Parameter gibt, mit dem man solche Heuristiken einschalten kann, mag wie gesagt sicher in bestimmten Use Cases pragmatisch sein.

view this post on Zulip Alexander Zautke (Feb 13 2019 at 11:40):

Validation Bug: https://github.com/ewoutkramer/fhir-net-api/issues/865

view this post on Zulip Alexander Zautke (Feb 13 2019 at 11:44):

Für den Parser wird es kein Setting geben, da wir auf dieser Ebene keine genaueren Typinformationen haben (instance vs. dateTime vs. date). Per default wird der String zu einem DateTimeOffset umgewandelt und UTC wird angenommen.

view this post on Zulip Alexander Zautke (Feb 13 2019 at 11:45):

Diese Regel gilt für alle DateTimeOffset Datentypen.

view this post on Zulip Markus Danz (Feb 13 2019 at 17:45):

Uns als Konsument der FHIR.NET Library ist es egal, ob der Parser oder der Validator den Fehler ekennt. Wichtig ist, dass wir irgendeine Möglichkeit haben, eine fehlende Zeitzone beim Datentyp Instant zu erkennen, wenn die FHIR.NET zum Einlesen einer Resource verwendet wird.

view this post on Zulip Christof Gessner (Feb 13 2019 at 18:13):

schematron validation filter?

view this post on Zulip Simone Heckmann (Feb 17 2019 at 09:43):

Das könnte Zusammenhängen mit einem Fehler im RegEx Pattern für dateTime in STU3. In R4 wurde das korrigiert. In STU3 wird die Korrektur mit den Technical Corrections publiziert.

view this post on Zulip Alexander Zautke (Feb 17 2019 at 13:21):

@Simone Heckmann Meinst du damit, dass in STU3 instant überhaupt keinen Regex zum Validieren besitzt? Hat jemand das schon vorgeschlagen für ein Backport?

view this post on Zulip Simone Heckmann (Feb 17 2019 at 13:23):

Schau mal im implementers Stream, da gibt aktuell eine Diskussion zum dateTime pattern. Ich kann’s leider nicht verlinken, da ich die mobile App benutze...

view this post on Zulip Alexander Zautke (Feb 17 2019 at 13:48):

Ah, ok. Vielen Dank. Das löst aber nicht das Problem hier. Weiß jemand gegen was HAPI in diesem Fall bei einem Instant Type validiert? @Patrick Werner

view this post on Zulip Patrick Werner (Feb 17 2019 at 16:03):

Hapi hat im Dstu3 Instant Validator die Regex von R4 verwendet, wurde hier also anscheinend schon gebackportet

view this post on Zulip Patrick Werner (Feb 17 2019 at 16:05):

was mich irritiert: hapi beginnt die Regex mit "-?" ansonsten alles gleich. Wie sollte eine Instant mit "-" beginnen? Übersehe ich da nun was?
(edit:) nein, ist wohl falsch und kommt aus den Referenz Klassen.

view this post on Zulip Alexander Zautke (Jul 08 2019 at 19:09):

Es ist zwar schon eine kleine Weile her, aber die C# API hat nun auch den R4 Regex implementiert. Gforge Ticket für den Backport in STU3 inklusive.
Siehe https://github.com/FirelyTeam/fhir-net-api/pull/1028


Last updated: Apr 12 2022 at 19:14 UTC