Hier dokumentiert die gematik die Nutzung der Schnittstellen rund um den Nachrichtenaustausch zwischen Versicherten und Apotheken zum E-Rezept.
- Anwendungsfall Ein E-Rezept verbindlich einer Apotheke zuweisen
- Anwendungsfall Nachricht als Apotheke an einen Versicherten schicken
- Anwendungsfall Auf neue Nachrichten im E-Rezept Fachdienst prüfen
- Anwendungsfall Alle Nachrichten vom E-Rezept-Fachdienst abrufen
- Anwendungsfall Nachricht als Apotheke löschen
|
In einigen Fällen kann der Fachdienst nicht eineindeutig identifizieren, ob eine Communication von einem PKV- oder GKV-Versicherten eingestellt wurde. In diesen Fällen übermittelt der Fachdienst den KVNR-Typ "GKV". |
Hinweis: Laut Spezifikation für das E-Rezept-FdV gilt, dass keine non-printable-characters übertragen werden dürfen. Diese sind z.B. In UTF-8 entspricht das den C0- und C1-Steuercodes.
-
C0-Steuercodes:
-
Bereich: U+0000 bis U+001F
-
Beispiel: Null-Byte (U+0000), Start of Header (U+0001), Line Feed (U+000A), Tabulator (U+0009), usw.
-
-
C1-Steuercodes:
-
Bereich: U+0080 bis U+009F
-
Beispiel: Start of Sentence (U+0082), End of Text (U+0003), Escape (U+001B), usw.
-
-
Andere non-printable Zeichen:
-
Null-Byte (U+0000)
-
Byte Order Mark (BOM): U+FEFF
-
Replace Character (U+FFFD)
-
Als Versicherter möchte ich einer Apotheke alle Informationen zukommen lassen, damit diese mein E-Rezept beliefern kann. Über einen JSON-Payload kann ich weitere Informationen zur Belieferung angeben.
Der Aufruf erfolgt als http-POST
-Operation. Der Server prüft die Nachricht auf Zulässigkeit und ergänzt Metainformationen wie den Sendezeitpunkt und die Angaben des Absenders aus dessen ACCESS_TOKEN.
Es obliegt der Apotheke, eine hilfreiche Bestätigung an den Versicherten zurückzusenden. Es kann ggfs. zusätzlich erforderlich sein, eventuelle Zuzahlungsmodalitäten, Lieferadresse usw. über einen separaten Kanal (Bestell-Bestätigungs-App) der Apotheke abzuwickeln.
ℹ️
|
Die Validierung der JSON-payload wird nach folgendem Schema durchgeführt DispReq JSON-Schema. |
Request
URI |
|||||
---|---|---|---|---|---|
Method |
POST |
||||
Requester |
|||||
Responder |
|||||
HTTP Header |
Content-Type: application/fhir+json; charset=UTF-8 Authorization: Bearer eyJraWQ.ewogImL2pA10Qql22ddtutrvx4FsDlz.rHQjEmB1lLmpqn9J
|
||||
Payload |
{
"resourceType": "Communication",
"id": "erp-communication-05-request-RezeptZuweisen",
"meta": {
"profile": [
"https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_PR_Communication_DispReq|1.4"
]
},
"status": "unknown",
"extension": [
{
"url": "https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_EX_PrescriptionType",
"valueCoding": {
"code": "160",
"system": "https://gematik.de/fhir/erp/CodeSystem/GEM_ERP_CS_FlowType",
"display": "Muster 16 (Apothekenpflichtige Arzneimittel)"
}
}
],
"recipient": [
{
"identifier": {
"system": "https://gematik.de/fhir/sid/telematik-id",
"value": "3-2-APO-XanthippeVeilchenblau01"
}
}
],
"basedOn": [
{
"reference": "Task/160.000.000.000.000.01/$accept?ac=777bea0e13cc9c42ceec14aec3ddee2263325dc2c6c699db115f58fe423607ea"
}
],
"payload": [
{
"contentString": "{ \"version\": 1, \"supplyOptionsType\": \"onPremise\", \"name\": \"Dr. Maximilian von Muster\", \"address\": [ \"wohnhaft bei Emilia Fischer\", \"Bundesallee 312\", \"123. OG\", \"12345 Berlin\" ], \"phone\": \"004916094858168\" }"
}
]
}
|
Response HTTP/1.1 201 Created Content-Type: application/fhir+json;charset=utf-8
{
"resourceType": "Communication",
"id": "cd4958ad-da92-453c-aef1-f3e02a4c6c73",
"meta": {
"profile": [
"https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_PR_Communication_DispReq|1.4"
]
},
"status": "unknown",
"extension": [
{
"url": "https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_EX_PrescriptionType",
"valueCoding": {
"code": "160",
"system": "https://gematik.de/fhir/erp/CodeSystem/GEM_ERP_CS_FlowType",
"display": "Muster 16 (Apothekenpflichtige Arzneimittel)"
}
}
],
"recipient": [
{
"identifier": {
"system": "https://gematik.de/fhir/sid/telematik-id",
"value": "3-2-APO-XanthippeVeilchenblau01"
}
}
],
"sender": {
"identifier": {
"system": "http://fhir.de/sid/gkv/kvid-10",
"value": "X123456789"
}
},
"sent": "2025-01-15T15:29:00.434+00:00",
"basedOn": [
{
"reference": "Task/160.000.000.000.000.01/$accept?ac=777bea0e13cc9c42ceec14aec3ddee2263325dc2c6c699db115f58fe423607ea"
}
],
"payload": [
{
"contentString": "{ \"version\": 1, \"supplyOptionsType\": \"onPremise\", \"name\": \"Dr. Maximilian von Muster\", \"address\": [ \"wohnhaft bei Emilia Fischer\", \"Bundesallee 312\", \"123. OG\", \"12345 Berlin\" ], \"phone\": \"004916094858168\" }"
}
]
}
|
Die derzeitige Spezifikation sieht vor, dass der E-Rezept Token in .basedOn.reference angegeben wird. Dieser Token entspricht nicht der FHIR-Spezifikation, wodurch die FHIR-Validatoren einen Fehler werfen.
|
ℹ️
|
Bei der direkten Zuweisung wird im Payload ein strukturierter Text übergeben. Im Beispiel übermittelt die E-Rezept-App die Details für eine Botenlieferung. Dies erfolgt für Versand mit supplyOptionsType = shipment und für die Filialabholung mit supplyOptionsType = onPremise .
|
Code |
Type Success |
201 |
Created |
Code |
Type Warning |
253 |
Die ID einer Ressource und die ID ihrer zugehörigen fullUrl stimmen nicht überein. |
254 |
Format der fullUrl ist ungültig. |
Code |
Type Error |
400 |
Bad Request |
401 |
Unauthorized |
403 |
Forbidden |
405 |
Method Not Allowed |
408 |
Request Timeout |
429 |
Too Many Requests |
500 |
Server Errors |
Uns als Apotheke wurde von einem Versicherten eine Nachricht zu einem E-Rezept geschickt. Der Versicherte fragt, ob ein Medikament vorrätig ist, dieses wurde in der Anfrage über dessen Pharmazentralnummer http://fhir.de/CodeSystem/ifa/pzn|06313728
benannt. Eine interne Warenbestandsprüfung hat ergeben, dass das Medikament vorrätig ist, nun schicken wir dem Versicherten eine Nachricht als Antwort nach der Frage zur Verfügbarkeit des Medikaments.
Bieten wir einen Online-Verkauf von Medikamenten an, können wir dem Versicherten einen Link zusenden, um in den Warenkorb unserer Apotheke zu wechseln und dort den Einlöseprozess fortzusetzen.
Der Aufruf erfolgt als http-POST
-Operation. Im Aufruf muss das während der Authentisierung erhaltene ACCESS_TOKEN im http-Request-Header Authorization
übergeben werden. Im http-RequestBody wird die zu verschickende Nachricht als Communication-Ressource übergeben. Der Server prüft den Inhalt auf Zulässigkeit (z.B. um die Verbreitung von Viren und Schadcode zu unterbinden) und ergänzt Metainformationen wie den Sendezeitpunkt und die Angaben des Absenders aus dessen ACCESS_TOKEN.
Die Nachricht steht nun zum Abruf durch den Empfänger bereit, der seine Nachrichten über eine GET-Abfrage herunterladen kann.
ℹ️
|
Die Validierung der JSON-payload wird nach folgendem Schema durchgeführt Reply JSON-Schema. |
Request
URI |
|||||||
---|---|---|---|---|---|---|---|
Method |
POST |
||||||
Requester |
|||||||
Responder |
|||||||
HTTP Header |
Content-Type: application/fhir+xml; charset=UTF-8 Authorization: Bearer eyJraWQ.ewogImL2pA10Qql22ddtutrvx4FsDlz.rHQjEmB1lLmpqn9J
|
||||||
Payload |
<Communication xmlns="http://hl7.org/fhir">
<id value="erp-communication-03-request-PostPharmacyToPatient"/>
<meta>
<profile value="https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_PR_Communication_Reply|1.4"/>
</meta>
<basedOn>
<reference value="Task/160.000.000.000.000.01"/>
</basedOn>
<status value="unknown"/>
<recipient>
<identifier>
<system value="http://fhir.de/sid/gkv/kvid-10"/>
<value value="X123456789"/>
</identifier>
</recipient>
<payload>
<contentString value="{"version": 1, "supplyOptionsType": "onPremise", "info_text": "Wir möchten Sie informieren, dass Ihre bestellten Medikamente zur Abholung bereitstehen. Den Abholcode finden Sie anbei.", "pickUpCodeHR": "12341234", "pickUpCodeDMC": "", "url": ""}"/>
</payload>
</Communication>
|
Response HTTP/1.1 201 Created Content-Type: application/fhir+xml;charset=utf-8 Location: https://erp.zentral.erp.splitdns.ti-dienste.de/Communication/12346
<Communication xmlns="http://hl7.org/fhir">
<id value="erp-communication-04-response-PostPharmacyToPatient"/>
<meta>
<profile value="https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_PR_Communication_Reply|1.4"/>
</meta>
<basedOn>
<reference value="Task/160.000.000.000.000.01"/>
</basedOn>
<status value="unknown"/>
<sent value="2025-01-15T15:29:00.434+00:00"/>
<recipient>
<identifier>
<system value="http://fhir.de/sid/gkv/kvid-10"/>
<value value="X123456789"/>
</identifier>
</recipient>
<sender>
<identifier>
<system value="https://gematik.de/fhir/sid/telematik-id"/>
<value value="3-2-APO-XanthippeVeilchenblau01"/>
</identifier>
</sender>
<payload>
<contentString value="{"version": 1,"supplyOptionsType": "onPremise","info_text": "Hallo, wir haben das Medikament vorraetig. Kommen Sie gern in die Filiale oder wir schicken einen Boten.","url": "https://sonnenschein-apotheke.de"}"/>
</payload>
</Communication>
ℹ️
|
Der Server übernimmt beim Absenden der Nachricht den Sendezeitpunkt in die Communication-Ressource ` <sent value="2020-03-12T18:01:10+00:00" />` |
ℹ️
|
Die Informationen zum Absender werden aus dem im Request übergebenen ACCESS_TOKEN übernommen, in diesem Fall die Telematik-ID der Apotheke in ` <sender>` als Absender der Nachricht. |
Code |
Type Success |
201 |
Created |
Code |
Type Warning |
253 |
Die ID einer Ressource und die ID ihrer zugehörigen fullUrl stimmen nicht überein. |
254 |
Format der fullUrl ist ungültig. |
Code |
Type Error |
400 |
Bad Request |
401 |
Unauthorized |
403 |
Forbidden |
405 |
Method Not Allowed |
408 |
Request Timeout |
429 |
Too Many Requests |
500 |
Server Errors |
Als Versicherter und als Apotheke möchte ich wissen, ob im Fachdienst "ungelesene" Nachrichten für mich vorhanden sind.
Der Aufruf erfolgt als http-GET
-Operation auf die Ressource /Communication
. Im Aufruf muss das während der Authentisierung erhaltene ACCESS_TOKEN im http-Request-Header Authorization
für Filterung der an den Nutzer adressierten Nachrichten übergeben werden.
ℹ️
|
Der Aufruf ist aus Performance Gründen nicht für die regelmäßige Abfrage von Nachrichten vorgesehen. Es soll nur nach neuen Nachrichten geprüft werden, wenn der Nutzer aktiv eine Aktion ausführt, die eine solche Prüfung erfordert oder in der App ein "refresh" der Daten durchgeführt wird. |
Request
URI |
In der Aufruf-Adresse können Suchparameter gemäß Es wird empfohlen, die KVNR des Versicherten als "recipient" zu übergeben, damit nur die Nachrichten angezeigt werden, die an den Versicherten adressiert sind. Andernfalls würden ebenso die an die Apotheke versendeten Nachrichten abgerufen werden, wenn diese ihre Nachrichten noch nicht abgeholt hat. |
||||
---|---|---|---|---|---|
Method |
GET |
||||
Requester |
|||||
Responder |
|||||
URL Parameter |
sent, received, sender, recipient |
||||
HTTP Header |
Authorization: Bearer eyJraWQ.ewogImL2pA10Qql22ddtutrvx4FsDlz.rHQjEmB1lLmpqn9J
|
||||
Payload |
- |
Response HTTP/1.1 200 OK Content-Type: application/fhir+json;charset=utf-8
{
"resourceType": "Bundle",
"id": "erp-communication-07-response-GetMessages",
"type": "searchset",
"total": 1,
"link": [
{
"relation": "self",
"url": "https://erp.zentral.erp.splitdns.ti-dienste.de/Communication?received=NULL"
}
],
"entry": [
{
"fullUrl": "https://erp.zentral.erp.splitdns.ti-dienste.de/Communication/cd4958ad-da92-453c-aef1-f3e02a4c6c73",
"resource": {
"resourceType": "Communication",
"id": "cd4958ad-da92-453c-aef1-f3e02a4c6c73",
"meta": {
"profile": [
"https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_PR_Communication_DispReq|1.4"
]
},
"status": "unknown",
"extension": [
{
"url": "https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_EX_PrescriptionType",
"valueCoding": {
"code": "160",
"system": "https://gematik.de/fhir/erp/CodeSystem/GEM_ERP_CS_FlowType",
"display": "Muster 16 (Apothekenpflichtige Arzneimittel)"
}
}
],
"recipient": [
{
"identifier": {
"system": "https://gematik.de/fhir/sid/telematik-id",
"value": "3-2-APO-XanthippeVeilchenblau01"
}
}
],
"sender": {
"identifier": {
"system": "http://fhir.de/sid/gkv/kvid-10",
"value": "X123456789"
}
},
"sent": "2025-01-15T15:29:00.434+00:00",
"basedOn": [
{
"reference": "Task/160.000.000.000.000.01/$accept?ac=777bea0e13cc9c42ceec14aec3ddee2263325dc2c6c699db115f58fe423607ea"
}
],
"payload": [
{
"contentString": "{ \"version\": 1, \"supplyOptionsType\": \"onPremise\", \"name\": \"Dr. Maximilian von Muster\", \"address\": [ \"wohnhaft bei Emilia Fischer\", \"Bundesallee 312\", \"123. OG\", \"12345 Berlin\" ], \"phone\": \"004916094858168\" }"
}
]
}
}
]
}
ℹ️
|
Die abgerufene Nachricht enthält kein Element received , da die Nachricht erstmalig vom E-Rezept-Fachdienst abgerufen wurde. Dieses Attribut received wurde beim Abruf durch den Fachdienst auf dessen aktuelle Systemzeit in "sent": "2020-03-12T18:01:10+00:00" aktualisiert, sodass ein erneuter Aufruf mit dem Filter ?received=NULL kein Ergebnis liefert, da keine neuen bzw. ungelesenen Nachrichten vorhanden sind.
|
ℹ️
|
In "value": "X234567890" ist die Empfänger-ID (in diesem Fall Versicherten-ID) des Adressaten angegeben, über die die Nachrichten beim Abruf gemäß der Nutzerkennung im übergebenen ACCESS_TOKEN gefiltert werden.
|
ℹ️
|
Dies sei die Antwort der Apotheke auf eine verbindliche Zuweisung, dann erhält die E-Rezept-App vom Warenwirtschaftssystem der Apotheke ebenfalls einen strukturierten Text im "contentString" . In diesem sind u.a. Details für die Abholung in der Filiale wie z.B. der Abholcode pickUpCodeHR angegeben.
|
Code |
Type Success |
200 |
OK |
Code |
Type Error |
400 |
Bad Request |
401 |
Unauthorized |
403 |
Forbidden |
404 |
Not found |
500 |
Server Errors |
Als Apotheke möchten wir alle Nachrichten des Monats April 2020 abrufen, um uns einen Überblick der bisherigen E-Rezept-Anfragen zu beschaffen.
Request
URI |
|
||||
---|---|---|---|---|---|
Method |
GET |
||||
Requester |
|||||
Responder |
|||||
URL Parameter |
sent, received, sender, recipient |
||||
HTTP Header |
Authorization: Bearer eyJraWQ.ewogImL2pA10Qql22ddtutrvx4FsDlz.rHQjEmB1lLmpqn9J
|
||||
Payload |
- |
❗
|
Der E-Rezept-Fachdienst verarbeitet Zeitstempel nach deutscher Zeit. |
Response HTTP/1.1 200 OK Content-Type: application/fhir+xml;charset=utf-8
<Bundle xmlns="http://hl7.org/fhir">
<id value="erp-communication-08-response-GetAllMessages"/>
<type value="searchset"/>
<total value="1"/>
<link>
<relation value="self"/>
<url value="https://erp.zentral.erp.splitdns.ti-dienste.de/Communication?_sort=sent&_count=50&sent=gt2025-01-14"/>
</link>
<entry>
<fullUrl value="https://erp.zentral.erp.splitdns.ti-dienste.de/Communication/a3384a5a-4180-4be5-b6e4-df80a88554dd"/>
<resource>
<Communication>
<id value="a3384a5a-4180-4be5-b6e4-df80a88554dd"/>
<meta>
<profile value="https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_PR_Communication_DispReq|1.4"/>
</meta>
<extension url="https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_EX_PrescriptionType">
<valueCoding>
<system value="https://gematik.de/fhir/erp/CodeSystem/GEM_ERP_CS_FlowType"/>
<code value="160"/>
<display value="Muster 16 (Apothekenpflichtige Arzneimittel)"/>
</valueCoding>
</extension>
<basedOn>
<reference value="Task/160.000.000.000.000.01/$accept?ac=777bea0e13cc9c42ceec14aec3ddee2263325dc2c6c699db115f58fe423607ea"/>
</basedOn>
<status value="unknown"/>
<sent value="2025-01-15T15:29:00.434+00:00"/>
<recipient>
<identifier>
<system value="https://gematik.de/fhir/sid/telematik-id"/>
<value value="3-2-APO-XanthippeVeilchenblau01"/>
</identifier>
</recipient>
<sender>
<identifier>
<system value="http://fhir.de/sid/gkv/kvid-10"/>
<value value="X123456789"/>
</identifier>
</sender>
<payload>
<contentString value="{ "version": 1, "supplyOptionsType": "onPremise", "name": "Dr. Maximilian von Muster", "address": [ "wohnhaft bei Emilia Fischer", "Bundesallee 312", "123. OG", "12345 Berlin" ], "phone": "004916094858168" }"/>
</payload>
</Communication>
</resource>
<search>
<mode value="match"/>
</search>
</entry>
</Bundle>
ℹ️
|
<total value="391"/> gibt Auskunft über die Anzahl der Ergebnis-Einträge.
|
ℹ️
|
Der E-Rezept-Fachdienst setzt in <relation value="next"/> ein Paging ein, mit dem die ersten 50 Einträge des gesamten Suchergebnisses zurückgegeben werden. Die nächsten 50 Ergebnis-Einträge werden über die nachfolgende URL next abgerufen.
|
ℹ️
|
Die Eigenschaft <received value="2020-04-12T18:02:10+00:00" /> gibt an, dass diese Nachricht bereits gelesen bzw. schon einmal heruntergeladen wurde.
|
ℹ️
|
Das Beispiel ist der Übersichtlichkeit halber bei […] gekürzt, weitere Nachrichten-Einträge folgen als entry -Elemente.
|
Code |
Type Success |
200 |
OK |
Code |
Type Error |
400 |
Bad Request |
401 |
Unauthorized |
403 |
Forbidden |
404 |
Not found |
500 |
Server Errors |
Als Apotheke möchten wir eine von uns versendete Nachricht auf dem Fachdienst entfernen.
Request
URI |
|||||
---|---|---|---|---|---|
Method |
DELETE |
||||
Requester |
|||||
Responder |
|||||
HTTP Header |
Authorization: Bearer eyJraWQ.ewogImL2pA10Qql22ddtutrvx4FsDlz.rHQjEmB1lLmpqn9J
|
||||
Payload |
- |
Response
HTTP/1.1 204 No Content Warning: 'Deleted message delivered at 2020-07-01 10:30:00'
ℹ️
|
Wenn die Nachricht vor dem Löschen bereits durch den Versicherten abgerufen wurde, wird zusätzlich ein Response-Header mit einer entsprechenden Warnung zurückgegeben. |
Code |
Type Success |
204 |
No Content |
Code |
Type Error |
400 |
Bad Request |
401 |
Unauthorized |
403 |
Forbidden |
404 |
Not found |
500 |
Server Errors |