gematik / spec-ISiK-Basismodul

The Information Technology Systems in Hospitals (ISiK – Informationstechnische Systeme in Krankenhäusern) "Basic Module" enables use-case-independent functionalities for the communication and validation of data within hospital environments, by providing FHIR resources, examples and an implementation guide.

Repository from Github https://github.comgematik/spec-ISiK-BasismodulRepository from Github https://github.comgematik/spec-ISiK-Basismodul

Maintenance Basis

f-peverali opened this issue · comments

Stufe 3

  • SUSHI Version erhöhen
  • Validierungsfehler prüfen
  • Use slice name instead of numeric index access
  • Fix eventual errors

Vergleiche ggf. mit Terminplanung : gematik/spec-ISiK-Terminplanung#128

Tasks

@ylboerner könntest Du mir hier helfen? Was ist beim Indexing hier schief gelaufen:https://github.com/gematik/spec-ISiK-Basismodul/actions/runs/6785351346/job/18443470959#step:3:223
Hätte ich das für die Examples nicht nutzen dürfen?

@f-peverali Gerne helfe ich.

Fall 1: Kein definiertes Slicing

Für diesen Fall (den zweiten erkläre ich weiter unten) können wir uns den ersten Fehler direkt als Beispiel nehmen:

* identifier[Berichtnummer].type = $v2-0203#FILL
* identifier[Berichtnummer].system = "https://fhir.krankenhaus.example/sid/system-a/berichtnummer"
* identifier[Berichtnummer].value = "0123456789"

Wir greifen mit diesen drei Zeilen auf einen Slice zu, der im Profil nicht definiert ist. Tatsächlich ist in dem Profil für ISiKBerichtSubsysteme kein einziger Slice auf identifier definiert. Daher gibt SUSHI hier direkt folgende Fehlermeldungen aus:

error The element or path you referenced does not exist: identifier[Berichtnummer].type
  File: /home/runner/work/spec-ISiK-Basismodul/spec-ISiK-Basismodul/Resources/input/fsh/ISiKBerichtSubSysteme.fsh
  Line: 70
error The element or path you referenced does not exist: identifier[Berichtnummer].system
  File: /home/runner/work/spec-ISiK-Basismodul/spec-ISiK-Basismodul/Resources/input/fsh/ISiKBerichtSubSysteme.fsh
  Line: 71
error The element or path you referenced does not exist: identifier[Berichtnummer].value
  File: /home/runner/work/spec-ISiK-Basismodul/spec-ISiK-Basismodul/Resources/input/fsh/ISiKBerichtSubSysteme.fsh
  Line: 72

Wir können diesen Fehler recht einfach fixen, indem wir '+' und '=' verwenden, anstatt nicht existierende Slice Namen oder Indizes:

* identifier[+].type = $v2-0203#FILL
* identifier[=].system = "https://fhir.krankenhaus.example/sid/system-a/berichtnummer"
* identifier[=].value = "0123456789"

Fall 2: Unbekannter Slice
In diesem Fall ist zwar ein Slicing definiert, aber der Slice ist unbekannt. Ein Beispiel dafür ist ISiKPersonImGesundheitsberuf mit folgendem Fehler:

error The element or path you referenced does not exist: identifier[ArztnummerKBV].type
  File: /home/runner/work/spec-ISiK-Basismodul/spec-ISiK-Basismodul/Resources/input/fsh/ISiKPersonImGesundheitsberuf.fsh
  Line: 96
error The element or path you referenced does not exist: identifier[ArztnummerKBV].system
  File: /home/runner/work/spec-ISiK-Basismodul/spec-ISiK-Basismodul/Resources/input/fsh/ISiKPersonImGesundheitsberuf.fsh
  Line: 97
error The element or path you referenced does not exist: identifier[ArztnummerKBV].value
  File: /home/runner/work/spec-ISiK-Basismodul/spec-ISiK-Basismodul/Resources/input/fsh/ISiKPersonImGesundheitsberuf.fsh
  Line: 98

Dieser lässt sich einfach fixen, indem wir einen der Slice-Namen verwenden, die im Profil definiert sind:

* identifier contains
    Arztnummer 0..* MS and
    EFN 0..1 MS and
    TelematikId 0..1 MS

Mit dem Slice 'Arztnummer' sieht das Beispiel dann wie folgt aus:

* identifier[Arztnummer].type = $v2-0203#LANR
* identifier[Arztnummer].system = "https://fhir.kbv.de/NamingSystem/KBV_NS_Base_ANR"
* identifier[Arztnummer].value = "123456789"

@ylboerner siehst du überhaupt den Bedarf die numeric indexes zu prüfen/überarbeiten? Im Pipeline-Durchlauf (https://github.com/gematik/spec-ISiK-Basismodul/actions/runs/6784977127/job/18442329679) sehe ich dazu weder warnings noch errors. Ich war da einfach vorschnell mit dem PR (der ist jetzt gelöscht).

@f-peverali
noch ein Hinweis zu named slicing: Pattern oder fixed values werden automatisch in Instanzen übernommen. Auf das obere Beispiel bezogen kann man dann den type weglassen, sushi setzt diesen dann beim Processen.

* identifier[Arztnummer].system = "https://fhir.kbv.de/NamingSystem/KBV_NS_Base_ANR"
* identifier[Arztnummer].value = "123456789"