Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/update searchparam req stufe 3 ptdata1094 #456

Open
wants to merge 3 commits into
base: TC_3.0.6
Choose a base branch
from

Conversation

f-peverali
Copy link
Contributor

Contributor Pull Request

Description

analogous to #452

Motivation and Context

solves PTDATA-1094

How has this been tested?

Snippets or Screenshots (if necessary):

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)

Checklist:

  • My code follows the code style of this IG / specification.
  • My change requires a change to the documentation or narrative (intend) of the IG.
  • I have already updated the documentation / narrative (intend) accordingly.

Reviewer / Quality Assurance Checklist

  • The Present PR does not need a thorough review process, due to brevity, low complexity or because it represents a rather minor change; otherwise go trough the list! ... and read the linked manual, if you did not do it yet!

content review steps (based on Best Practice IG Germany)

formal intellectual review steps of Implementation Guide

  • no formal review needed

  • proofreading for orthography

  • there are no (critical) validation Errors in the CI pipeline

    • inspected and no critical errors found(In the "github action view" -> Option button -> "View raw logs") - possibly list non-critical below
  • skim reading for correct rendering of IG (possibly using IG-grep of string String like "Could not render")

automated review steps:

  • no formal review needed
  • check IG-pages for broken links (possibly using plug-in)
  • [ ]

For reviewers

You migh use this: https://conventionalcomments.org/

## Allgemeine Hinweise zu Suchparametern
Originäre ISiK Use Cases sind versorgungsorientiert und patientenorientiert. Dies resultiert darin, dass in der Profilierung der ISiK-Datenobjekte das Vorhandensein einer Referenz auf ISiKPatient (Patient) und ISiKKontaktGesundheitseinrichtung (Encounter) wo möglich gefordert wird. Entsprechend sind Abfragen durch Clients auf Basis von bekannten Informationen aus *einer* Patient- und/oder Encounter-Ressource zu begrenzen (Abfragen auf Patientenkohorten oder sonstige Forschungsabfragen sind nicht im Fokus von ISiK).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question: "aus" einer Patient- und/oder Encounter-Ressource oder AUF eine Patient- und/oder Encounter-Ressource zu begrenzen?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comment: Gute Frage. "Aus" macht hier keinen Sinn. Die Formulierung ist allgemein unglücklich - es ging hier im Wesentliche darum klarzustellen, dass ISIK nicht primär den Use Case von Massenabfragen adressiert, sondern einzelne Patienten und einzelne Fälle.

FYI @simoneOnFhir - sollten wir ggf. auch noch in Stufe 4 überarbeiten.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hier ist aus m.E. korrekt. Ich kenn den Identifier "123452 aus der Patienten-Ressource und suche jetzt die Diagnosen dazu:
/Condition?patient.identifier=12345

@@ -24,13 +30,19 @@ Für die im Rahmen dieses Leitfadens relevanten Typen gelten folgende allgemeine

Die Präfixe `lt`,`le`,`gt`,`ge`,`eq` MÜSSEN für jeden Suchparameter vom Typ 'date/dateTime' unterstützt werden.

Begründung: Die Funktionalität datums-eingeschränkt suchen zu können ist essentiell.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nitpick: dieser Satz liefert keinen Infromationsgehalt. Dafür aber der Hinweis unten, der m.M.n. als Begründung verwendet werden kann

```[base]/Patient?birthDate=ge2000-01-01``` <br>
Suche nach allen Patienten mit einem Geburtsdatum 2000-01-01T00:00 oder später.
```[base]/Encounter?date=eq2024-01-01&patient=Patient/Test``` <br>
Suche nach allen Kontakten mit einem Datum am 2024-01-01T00:00 im Patientenkontext "Test".
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: "mit einem Datum am 2024-01-01T00:00" ist nicht korrekt. Die Uhrzeit spielt bei so einer Abfrage keine Rolle

```[base]/Patient?birthDate=eq2000-01-01``` <br>
Suche nach allen Patienten mit einem Geburtsdatum von 2000-01-01T00:00 bis (aber nicht einschließlich) 2000-02-01T00:00
```[base]/Condition?recorded-date=eq2024-01-01&patient=Patient/Test``` <br>
Suche nach allen Diagnosen mit einem Dokumentationsdatum von 2024-01-01T00:00 bis (aber nicht einschließlich) 2024-01-02T00:00 im Patientenkontext "Test".
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: sollte das Beispiel nicht eher die Verwendung von ge und le demonstrieren? Muss man ja m.M.n. sonst im Text nicht erklären, dass ein eq2024-01-01 das Datum 2024-01-02 NICHT einschließt...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ja, das Beispiel ist unglücklich gewählt, vor allem auch im Hinblick auf die Tatsache, dass
Condition?recorded-date=eq2024-01-01 gleichbedeutend ist mit der selben Query ohne jegliche Prefixes.

Vorschlag zur Verbesserung:

[base]/Condition?recorded-date=ge2024-01-01&recoded-date=lt2024-02-01&patient=Patient/Test

Suche nach allen Diagnosen mit einem Dokumentationsdatum Im Zeitraum Januar 2024 (von 2024-01-01T00:00 bis (aber nicht einschließlich) 2024-02-01T00:00 im Patientenkontext "Test".

**Beispiele**:
Dies gilt beispielsweise für Encounter.account - also die Referenz zwischen ISiKKontaktGesundheitseinrichtung und ISiKAbrechnungsfall. Encounter MÜSSEN anhand der Fallnummer gesucht werden können, ohne dass Clients Zugriffsberechtigungen auf Accounts haben müssen, bzw. ohne dass Account zwingend implementiert/referenziert werden muss. Der Suchabruf erfolgt entsprechend dann nur über die logische Referenz.

Begründung: Die Unterstützung dieser Suchparameter-Typen ist essentiell für Abfragen mit [Chaining](https://hl7.org/fhir/r4/search.html#chaining) und [Reverse Chaining](https://hl7.org/fhir/r4/search.html#has). Innerhalb der Spezifikation ist für jedes Datenobjekt spezifiziert weshalb eine solche Abfrage versorgungsrelevant ist.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: m.M.n. hat der Suchparameter :identifier erstmals mit Chaining nichts zu tun - damit ist sogar kein Chaining möglich (cf. https://www.hl7.org/fhir/R4/search.html#reference) Der Modifier hat aus meiner SIcht eher den oben beschriebenen Zweck - also Suche nach Identifiern von assoziierten Ressourcen zu ermöglichen falls die assoziierten Ressourcen im System als eigenständige Entitäten nicht existieren

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@simoneOnFhir , @alexey-tschudnowsky hat recht. Zumindest di Begründung an dieser Stelle ist einfach falsch.
Muss auch in Stufe 4 nochmal geändert werden.


* ``Reverse Chaining``

- Beispiel für Reverse Chaining mit Referenz auf einen Patienten aus einem Observation-Kontext:GET [base]/Patient?_has:Observation:patient:code=1234-5
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo: fehlt hier eine geeignete Formattierung des Beispiels?

* ``Reverse Chaining``

- Beispiel für Reverse Chaining mit Referenz auf einen Patienten aus einem Observation-Kontext:GET [base]/Patient?_has:Observation:patient:code=1234-5
- Hinweis: Diese Form der Suchanfrage dient im Wesentlichen dem Auffinden von Patienten (z.B. unter angabe einer BEsondern Diagnose, beobachtung Prozedur etc.) oder Fallkontakten (z.B. zum Ermitteln des Kontextes einer Prozedur)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo: besonderen

- Anwendungshinweise: Weitere Informationen zur Suche nach "_tag" finden sich in der [FHIR-Basisspezifikation - Abschnitt "Including other resources in result"](https://www.hl7.org/fhir/R4/search.html#revinclude).
- Alle Referenzen für die ein Chaining unterstützt wird MUSS auch der _include-Parameter implementiert werden. Alle unterstützten Include-Referenzen MÜSSEN im CapabilityStatement unter ```CapabilityStatement.rest.resource.searchRevInclude``` angegeben werden. Siehe {{pagelink:ImplementationGuide/markdown/CapabilityStatement.md}}.
- Anwendungshinweise: Weitere Informationen zur Suche nach "_revinclude" finden sich in der [FHIR-Basisspezifikation - Abschnitt "Including other resources in result"](https://www.hl7.org/fhir/R4/search.html#revinclude).
- Alle Referenzen für die ein Chaining unterstützt wird MUSS auch der _revinclude-Parameter implementiert werden. Alle unterstützten Revinclude-Referenzen MÜSSEN im CapabilityStatement unter ```CapabilityStatement.rest.resource.searchRevInclude``` angegeben werden. Siehe {{pagelink:ImplementationGuide/markdown/CapabilityStatement.md}}.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question: "Alle Referenzen für die ein Chaining.." oder "Alle Referenzen für die ein Reverse Chaining..."?


Der [type] Modifier MUSS für alle spezifizierten Suchparameter vom Typ 'Reference' unterstützt werden.
Der Modifier :identifier MUSS implementiert werden, wenn die entsprechende Reference eine 1..1-Kardinalität oder ein MS-Flag auf Reference.identifier hat.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo: fehlende Formattierung vom :identifier --> :identifier

Der ```:iterate``` Modifier KANN unterstützt werden.
Für Suchparameter namens 'patient' und 'encounter' MÜSSEN die Festlegungen für [Chaining](https://hl7.org/fhir/R4/search.html#chaining) verpflichtend implementiert werden.

* ``Chaining``
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nitpick: Chaining und der nachfolgende Reverse Chanining sind keine Schlüsselwörter, die entsprechende Formattierung kann raus


Der ```:iterate``` Modifier KANN unterstützt werden.
Für Suchparameter namens 'patient' und 'encounter' MÜSSEN die Festlegungen für [Chaining](https://hl7.org/fhir/R4/search.html#chaining) verpflichtend implementiert werden.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question: welche Tiefe geben wir vor? denkbar wäre ja sonst auch Tiefe 2: Condition.encounter.patient

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question: für Suchparameter subject (beim Encounter) muss somit kein Chaining implementiert werden, richtig? nur 'patient'?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comment: nein, mMn auch "subject" z.B. beim Encounter - FYI @simoneOnFhir


- Beispiele: ``GET [base]/Encounter?_include=Encounter:patient``
- Anwendungshinweise: Weitere Informationen zur Suche nach "_include" finden sich in der [FHIR-Basisspezifikation - Abschnitt "Including other resources in result"](https://www.hl7.org/fhir/R4/search.html#revinclude).
- Für alle Referenzen, für die ein Chaining unterstützt wird, MUSS auch der _include-Parameter implementiert werden. Alle unterstützten Include-Referenzen MÜSSEN im CapabilityStatement unter ```CapabilityStatement.rest.resource.searchInclude``` angegeben werden. Siehe {{pagelink:ImplementationGuide/markdown/CapabilityStatement.md}}.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thought: ich frage mich, wie viele Hersteller diese nicht triviale Funktionalität (include) umgesetzt haben...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants