Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ig-publisher.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
image: ghcr.io/gefyra/ig-publisher-with-snapshot-support:latest
env:
SUSHI_INPUT_DIR: Resources
IG_PUBLISHER_DIR: publisher-guides/Organspendeerkennung
IG_PUBLISHER_DIR: publisher-guides/Terminplanung

steps:
- name: Checkout
Expand All @@ -50,7 +50,7 @@ jobs:
with:
input_directory: ${{ env.SUSHI_INPUT_DIR }}/fsh-generated
output_directory: ${{ env.IG_PUBLISHER_DIR }}/input/resources
capability_statement_url: 'https://gematik.de/fhir/isik/CapabilityStatement/ISiKCapabilityStatementBasisServerAkteur'
capability_statement_url: 'https://gematik.de/fhir/isik/CapabilityStatement/ISiKCapabilityStatementTerminRepositoryAkteur'

# Run the HL7 FHIR IG Publisher
- name: Build IG
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"experimental": false,
"date": "2025-12-17",
"publisher": "gematik GmbH",
"description": "Unter einer medizinischen Behandlungseinheit wird hier im weiteren Sinne eine Dienstleistung (diagnostisch, therapeutisch, im weiten Sinne gesundheitsfördernd etc.) zum Zweck einer Terminbuchung verstanden. Hierfür können von der Fachabteilung (Organization) unabhängige Kalender gepflegt werden. Im Kontext der Terminplanung können somit angebotene Leistungen (z.B. CT/MRT-Untersuchungen, chirurgische Eingriffe, Beratungsstunden zur Geburt etc.) abgebildet werden.\n\nDer Kontext zu diesem Profil wird mit folgender User Story veranschaulicht: \n\n**User Story**: Ein Patient erhält von seiner Hausärztin einen Überweisungsschein für eine weitere diagnostische Untersuchung in Form einer Kapselendoskopie der Speiseröhre. Der Patient nutzt ein Patientenportal, um unter Angabe der benötigten diagnostische Leistung nach einem verfügbaren Termin zu suchen und findet einen passenden Termin bei der Fachabteilung für Gastroenterologie eines örtlichen Krankenhauses.\n\nHintergrund: Die Suche nach verfügbaren Terminenblöcken (Slot) unter Einbeziehung der Dienstleistung entspricht der Angabe des Überweisungsscheins, ermöglicht hier zugleich eine präzisere Suche und vergrößert darüber hinaus den Raum möglicher Termine über verschiedene Abteilungen (und Institutionen im Patientenportal) hinweg.",
"description": "Unter einer medizinischen Behandlungseinheit wird hier im weiteren Sinne eine Dienstleistung (diagnostisch, therapeutisch, im weiten Sinne gesundheitsfördernd etc.) zum Zweck einer Terminbuchung verstanden. Hierfür können von der Fachabteilung (Organization) unabhängige Kalender gepflegt werden. Im Kontext der Terminplanung können somit angebotene Leistungen (z.B. CT/MRT-Untersuchungen, chirurgische Eingriffe, Beratungsstunden zur Geburt etc.) abgebildet werden.\n\nDer Kontext zu diesem Profil wird mit folgender User Story veranschaulicht: \n\n**User Story**: Ein Patient erhält von seiner Hausärztin einen Überweisungsschein für eine weitere diagnostische Untersuchung in Form einer Kapselendoskopie der Speiseröhre. Der Patient nutzt ein Patientenportal, um unter Angabe der benötigten diagnostische Leistung nach einem verfügbaren Termin zu suchen und findet einen passenden Termin bei der Fachabteilung für Gastroenterologie eines örtlichen Krankenhauses.\n\nHintergrund: Die Suche nach verfügbaren Terminblöcken (Slot) unter Einbeziehung der Dienstleistung entspricht der Angabe des Überweisungsscheins, ermöglicht hier zugleich eine präzisere Suche und vergrößert darüber hinaus den Raum möglicher Termine über verschiedene Abteilungen (und Institutionen im Patientenportal) hinweg.",
"fhirVersion": "4.0.1",
"kind": "resource",
"abstract": false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Der Kontext zu diesem Profil wird mit folgender User Story veranschaulicht:

**User Story**: Ein Patient erhält von seiner Hausärztin einen Überweisungsschein für eine weitere diagnostische Untersuchung in Form einer Kapselendoskopie der Speiseröhre. Der Patient nutzt ein Patientenportal, um unter Angabe der benötigten diagnostische Leistung nach einem verfügbaren Termin zu suchen und findet einen passenden Termin bei der Fachabteilung für Gastroenterologie eines örtlichen Krankenhauses.

Hintergrund: Die Suche nach verfügbaren Terminenblöcken (Slot) unter Einbeziehung der Dienstleistung entspricht der Angabe des Überweisungsscheins, ermöglicht hier zugleich eine präzisere Suche und vergrößert darüber hinaus den Raum möglicher Termine über verschiedene Abteilungen (und Institutionen im Patientenportal) hinweg."
Hintergrund: Die Suche nach verfügbaren Terminblöcken (Slot) unter Einbeziehung der Dienstleistung entspricht der Angabe des Überweisungsscheins, ermöglicht hier zugleich eine präzisere Suche und vergrößert darüber hinaus den Raum möglicher Termine über verschiedene Abteilungen (und Institutionen im Patientenportal) hinweg."
* insert Meta
* insert CommonElements
* active 1..1 MS
Expand Down
4 changes: 4 additions & 0 deletions publisher-guides/Terminplanung/ig.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[IG]
ig = fsh-generated/resources/ImplementationGuide-terminplanung.json
template = https://github.com/gematik/fhir-ig-template
auto-load = true
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@

{% assign renderList = include.render | strip_newlines | strip | split: ',' %}
<table class="grid">
<colgroup>
<col style="width:20%">
</colgroup>
<tbody>
{% assign with_desc = true %}
{% if include.withDesc == false %}
{% assign with_desc = false %}
{% endif %}
{% assign with_purp = false %}
{% if include.withPurpose == true %}
{% assign with_purp = true %}
{% assign with_desc = false %}
{% endif %}
{% for resource in site.data.resources %}
{% assign allowed = false %}
{% if renderList.size > 0 %}
{% if renderList contains resource[0] %}
{% assign allowed = true %}
{% endif%}
{% elsif include.resourceType %}
{% if resource[0] contains include.resourceType %}
{% assign allowed = true %}
{% endif %}
{% else %}
{% assign allowed = true %}
{% endif %}
{% if allowed == true and include.nameContains %}
{% if resource[0] contains include.nameContains %}
{% assign allowed = true %}
{% else %}
{% assign allowed = false %}
{% endif %}
{% endif %}
{% if allowed == true and include.nameExcludes %}
{% if resource[0] contains include.nameExcludes %}
{% assign allowed = false %}
{% endif %}
{% endif %}
{% if allowed == true %}
<tr>
<td style="column-width:30%">
<a href="{{ resource[1].path | default "-" }}" title="{{ resource[0] }}">
{% if resource[1].title %}
{{ resource[1].title }}
{% else %}
{{ resource[1].name | default "-" | }}
{% endif %}
</a>
</td>
{% if with_desc %}
<td>
{{ resource[1].description | default: "-" | replace: "###### ", "" | replace: "##### ", "" | replace: "#### ", "" | replace: "### ", "" | replace: "## ", "" | replace: "# ", "" | markdownify }}
</td>
{% endif %}
{% if with_purp %}
<td>
{{ resource[1].purpose | default: "-" | replace: "###### ", "" | replace: "##### ", "" | replace: "#### ", "" | replace: "### ", "" | replace: "## ", "" | replace: "# ", "" | markdownify }}
</td>
{% endif %}
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{% sqlToData ms_comments with targets as (
select Url, Json
from Resources
where Type = 'StructureDefinition'
)
select
targets.Url as ProfileUrl,
json_extract(elem.value, '$.id') as Element,
json_extract(elem.value, '$.short') as Short,
json_extract(elem.value, '$.comment') as Comment
from targets,
json_each(targets.Json, '$.differential.element') as elem
where coalesce(json_extract(elem.value, '$.mustSupport'), 0) = 1
order by ProfileUrl, Element
%}
48 changes: 48 additions & 0 deletions publisher-guides/Terminplanung/input/pagecontent/Akteure.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
topic: Akteure
---

Innerhalb des ISiK Moduls Terminplanung kann ein beteiligtes System verschiedene Rollen einnehmen und somit unterschiedliche Aufgaben innerhalb der im Abschnitt {{pagelink:Interaktionen}} definierten Arbeitsabläufe übernehmen. Im Weiteren werden diese Rollen mithilfe der Definition von Akteuren formalisiert, sodass eine Zuordnung von relevanten Interaktionen zum jeweiligen Akteur erfolgen kann.

Allein für den Akteur Termin-Repository gelten normative Festlegungen für die Implementierung einer Schnittstelle.

Grundsätzlich wird als Terminblock eine für einen Termin buchbare Zeiteinheit verstanden, in der bestimmte Ressourcen (z.B. Fachabteilungen, Personen im Gesundheitswesen, Geräte, Räume) zur Verfügung stehen. Übergreifend über ein oder mehrere Terminblöcke hinweg kann für diese Ressourcen anschließend ein Termin vereinbart werden.

### Termin-Repository

**Definition:**

Als Termin-Repository werden alle Systeme definiert, die Informationen zu verfügbaren Termineinheiten von Ressourcen (vgl. zuvor genannte Definition) vorhalten und die dafür vereinbarten Termine als führendes System verwalten. In diesem Sinne ist ein Termin-Repository als ein zentraler Terminplanungs-Server zu verstehen.

Das Termin-Repository kann intern in ein Repository für die Termine und ein separates Repository für die buchbaren Terminblöcke (Terminblock Repository) geteilt werden.

**Beispielsysteme:**

* Patientenportal im Falle, dass das System selbst terminführend ist
* KIS / KAS inkl. Terminverwaltung

**Festlegungen'**
In diesem Modul gilt für den Akteur Termin-Repository das entsprechende {{pagelink:ISiKCapabilityStatementTerminRepositoryAkteur, text=Capability Statement}}.

### Termin-Requestor / Termin Source

**Definition:**

Als Termin-Requestor (in Anlehnung an die IHE Terminologie auch als Termin Source zu bezeichnen) werden alle Systeme definiert, die zur Erhebung, Erfassung, Anpassung oder Veränderung von Termininformationen dienen. Ein Termin-Requestor verfügt über keine permanente Persistierung der verarbeiteten Informationen. Der Termin-Requestor übernimmt die Koordination der Schnittstellenaufrufe, um einen Termin zu buchen.

**Beispielsysteme:**

* Patientenportal im Falle, dass ein externes System das terminführende System ist

### Termin-Consumer

**Definition:**

Als Termin-Consumer werden alle Systeme definiert, die Termininformationen abfragen, um diese einem Benutzer zu präsentieren. Ein Termin-Consumer verfügt über keine permanente Persistierung der abgefragten Informationen. Durch den Termin-Consumer erfolgt explizit nur die Aufbereitung und Präsentation der Termininformationen. Eine anderweitige Verarbeitung der Termininformationen fällt in die Kategorie der anderen Akteure.

**Beispielsysteme:**

* Apps zum Anzeigen eines Kalenders
* Backendsysteme zum Versenden von Benachrichtigungen im Kontext eines Termins
* Ressourcenmanagementsoftware

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
topic: Architekturoptionen
---

Im folgenden werden beispielhaft Architekturen dargestellt, die das Zusammenspiel von Systemen im Kontext der Terminplanung darstellen.

### KIS als terminführendes System

Eine in der Praxis vorkommende Architektur sieht das KIS als terminführendes System. Im Sinne des IGs wäre das KIS somit das Termin-Repository. Darüber hinaus existiert ein Patientenportal, über das Patienten online Termine buchen können. Das Patientenportal ist somit zugleich Termin-Requestor und Termin-Consumer.

<img src="https://raw.githubusercontent.com/gematik/spec-ISiK-Basismodul/refs/heads/archive-stable-pics-etc/Material/Terminplanung/Termin_KIS_als_Repository.drawio.svg" width="100%"/>

### Patientenportal als Terminführendes System

Eine andere Variante sieht vor das Patientenportal als terminführendes System einzubinden. In dieser Variante ist das KIS weiterhin auch als Termin-Repository zu betrachten, da Kapazitäten der Leistungserbringer hier vorgehalten werden. Das Patientenportal erhält jedoch weitergehende Rechte und kann hierdurch direkt Termine buchen. Eine bidirektionale Synchronisierung des Patientenportals und des KIS müsste bei dieser Variante fortlaufend durchgeführt werden.

<img src="https://raw.githubusercontent.com/gematik/spec-ISiK-Basismodul/refs/heads/archive-stable-pics-etc/Material/Terminplanung/Termin_Patientenportal_als_Repository.drawio.svg" width="100%" />
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
**Vereinfachtes Informationsmodell**

<img src="https://raw.githubusercontent.com/gematik/spec-ISiK-Basismodul/refs/heads/main-stufe-5/Material/Terminplanung/ISiK_Terminplanung_ER_Diagram.svg" width="90%"/>
Loading