Dieser Leitfaden beschreibt, welche FHIR-Ressourcentypen der PGK-Proxy verwendet, wie sie miteinander verknüpft sind und wie die Verzeichnis- und Föderationsfunktionen auf dem HAPI-FHIR- Server abgebildet werden.
Verwandte Dokumente: Setup, Benutzerhandbuch, Administrationshandbuch, Technische Abläufe.
Der Proxy verwendet den HAPI FHIR Server (R4) als „Provider Directory“. Konfiguriert wird
der Server über pgk.fhir.base-url (Standard http://localhost:8081/fhir). Alle Such- und
Schreibadapter liegen unter search/adapter/outbound, invitation/adapter/outbound und
provisioning/adapter/outbound.
Practitioner <── PractitionerRole ──> Organization ──> Organization (partOf-Kette bis Wurzel)
│ │ |
│ │ └── code: Coding {system}|{code} (Rollenkatalog aus CodeSystem)
│ └── telecom: matrix:u/<mxid> ◄── MXID-Auflösung
└── meta.security: trust-level + visibility
HealthcareService ── telecom: matrix:u/<mxid>
Endpoint ── connection-type matrix-homeserver, address = <fqdn> (Föderations-Whitelist)
Repräsentiert einen im IDP verwalteten Benutzer (Gesundheitsdiensteanbieter). Er wird vom
Proxy automatisch erzeugt, aktualisiert und gelöscht, sobald sich im IDP etwas ändert
(Keycloak-Event-Listener → POST /internal/idp/user-events):
| Feld | Wert |
|---|---|
identifier |
System PGK_IDENTIFIER_SYSTEM (Standard https://idp.traefik.me/realms/pgk), Wert = Keycloak-Benutzer-UUID |
name |
Vor- und Nachname aus dem IDP (HumanName, use official) |
telecom |
System PGK_MATRIX_TELECOM_SYSTEM (Standard url), Wert matrix:u/<mxid>:<domain>, use work |
meta.profile |
PGK_PRACTITIONER_PROFILE (Standard HL7 Austria at-core-practitioner) |
meta.security |
Trust-Level-Coding (tl-2 bei provisionierten Benutzern) |
Ein Benutzer ohne gesetztes mxid-Attribut wird nicht nach FHIR geschrieben; wird die mxid
entfernt oder der Benutzer gelöscht, wird der Practitioner gelöscht.
Beschreibt, welche Rolle ein Practitioner in einer Organisation ausübt. Wird über die Admin-Seite „Rollen zuweisen“ oder die Benutzer-Seite „Rollen“ erzeugt:
| Feld | Wert |
|---|---|
practitioner |
Referenz auf den Practitioner (Practitioner/<id>) |
organization |
Referenz auf die Organization (Organization/<id>) |
code |
CodeableConcept mit Coding {system}|{code} aus dem Rollenkatalog plus text |
meta.profile |
HL7 Austria at-core-practitionerRole |
meta.security |
Trust-Level-Coding |
Der Rollenkatalog stammt aus lokalen FHIR-CodeSystem-Dateien unter
src/main/resources/valuesets/ (z. B. elga-gtelvogdarollen, elga-fachaerzte). Ein Rollen-Token
ist {CodeSystem-URL}|{Code}, z. B. https://termgit.elga.gv.at/CodeSystem/elga-gtelvogdarollen|222.
Der Katalog wird gecacht und periodisch neu geladen.
Repräsentiert Ordinationen, Krankenanstalten usw. Organisationen können über Organization.partOf
verschachtelt sein; die Such- und Konsolidierungslogik baut daraus eine Organisationskette bis
zur Root-Organisation. Bei der Sichtbarkeitsprüfung zählt die Wurzelorganisation: Ein interner
Eintrag ist nur für Benutzer mit derselben Root-Organisation sichtbar.
Alternative Darstellung eines Gesundheitsdienstes im Verzeichnis. Wie der Practitioner trägt er
seine Matrix-ID im telecom-Feld (das die Suchadapter über den healthcareservice-telecom-
SearchParameter durchsuchen). Er besitzt ebenfalls Visibility- und Trust-Level-Tags und kann
somit ebenfalls intern/öffentlich geschaltet werden.
Trägt die Föderations-Whitelist. Der Proxy sucht regelmäßig alle Endpoint-Ressourcen mit
connection-type = https://pgk.elga.gv.at/CodeSystem/endpoint-connection-type +
Code matrix-homeserver und übernimmt deren address (FQDN) in die in-memory-Whitelist
(Refresh-Intervall PGK_FEDERATION_REFRESH_INTERVAL_MINUTES, Standard 60 Minuten). Ein Server
darf nur einladen bzw. adressiert werden, wenn er in dieser Whitelist steht.
Der FHIR-Server wird per Init-Container mit zusätzlichen Suchparametern versorgt
(config/pgk-fhir/searchparams/, Upload über pgk-fhir-post-init):
| Datei | Suchparameter | Zweck |
|---|---|---|
healthcareservice-telecom.json |
telecom (token) auf HealthcareService.telecom |
Suche von Healthcare Services über die Matrix-ID |
practitionerrole-role-text.json |
role-text (string) auf PractitionerRole.code.text | PractitionerRole.code.coding.display |
Namenssuche zusätzlich über Rollenbezeichnungen |
Die unter src/main/resources/valuesets/ abgelegten CodeSystem-Ressourcen werden nicht an den
FHIR-Server geschrieben, sondern vom Proxy direkt aus dem Klassenpfad gelesen (classpath:valuesets/,
konfigurierbar über pgk.role-catalog.local-folder).
Die Standardsuche (pgk.fhir.search-mode: revinclude) lädt bei einer Benutzersuche die passenden
Practitioner-Ressourcen zusammen mit ihren PractitionerRole (via _revinclude PractitionerRole:practitioner), den zugehörigen Organization (via PractitionerRole:organization)
und der gesamten partOf-Kette (Organization:partof rekursiv). Die Suche erfolgt dreifach:
Practitioner.name– NamenssuchePractitionerRolemitrole-text– RollensucheOrganization.name– Organisationssuche
Die gefundenen Ressourcen werden zu einem PractitionerSearchBundle zusammengeführt, und der
PractitionerConsolidator baut daraus je MXID einen ConsolidatedUser (Anzeigename, Rollen,
Organisationsketten, Sichtbarkeit). Server ohne _revinclude-Unterstützung (z. B. pineit) nutzen
den Modus pgk.fhir.search-mode: forward mit separaten Nachschlage-Adapter.
Zwei meta.security-Tags steuern Trust-Level und Sichtbarkeit:
| CodeSystem | Codes |
|---|---|
https://pgk.elga.gv.at/CodeSystem/trust-level |
tl-1 … tl-4 |
https://pgk.elga.gv.at/CodeSystem/visibility |
public, internal |
Die Sichtbarkeit wird über die Admin-Seite „Sichtbarkeit“ als Security-Tag an
Practitioner bzw. HealthcareService gesetzt (bzw. vorheriges Tag ersetzt).