Hier dokumentiert die gematik den Anwendungsfall der Einlösung eines E-Rezepts mittels Stecken der Gesundheitskarte
Mit diesem Anwendungsfall wird die Apotheke durch Übergabe und Stecken der eGK berechtigt, die Liste einlösbarer E-Rezepte vom E-Rezept-Fachdienst abzurufen. Zunächst muss ein VSD-Abruf über den Konnektor erfolgen. In der Response gibt der Konnektor die von der eGK gelesenen Versichertenstammdaten VSD und den Prüfungsnachweis zurück.
Die Apotheke übermittelt den Prüfungsnachweis URL-codiert im Aufruf GET /Task, mit dem der E-Rezept-Fachdienst die PZ auswerten und verifizieren kann. Nach erfolgreicher Prüfung extrahiert der E-Rezept-Fachdienst die KVNR aus der PZ und filtert in einer Suche entsprechend.
Im Ergebnis stellt der E-Rezept-Fachdienst dem AVS eine Liste der KVNR zugeordneten, einlösbaren E-Rezepte als Bundle von Task-Objekten bereit, die die notwendigen Einlöseinformationen TaskID und AccessCode enthalten. Der Task.status
ändert sich mit dem Abruf der Liste nicht. Dieser erfolgt mit dem anschließenden Abruf des Verordnungsdatensatzes mittels der Task/<TaskID>/$accept
-Operation gemäß E-Rezept abrufen
Mit dem Einzelabruf je Rezept erhält die Apotheke Einsicht in die eigentlichen Verordnungen, um zu klären, welche(s) davon in der Apotheke eingelöst werden soll(en). Dieses Vorgehen ist analog zum Einscannen des Sammel-Barcodes auf dem E-Rezept-Patientenausdruck.
Vor dem Zugriff auf den E-Rezept-Fachdienst muss ein Prüfungsnachweis mittels VSD-Online-Prüfung durch den Konnektor erstellt werden.
Um den VSD-Abruf am Konnektor tätigen zu können, muss die eGK bestimmt werden, von welcher die Daten gelesen werden sollen. Das ist im Kontext paralleler Vorgänge an mehreren Handverkaufstischen relevant.
URI |
|||
---|---|---|---|
Method |
POST |
||
Requester |
|||
Responder |
Konnektor |
||
HTTP Header |
Content-Type: text/xml; charset=UTF-8 SOAPAction: "http://ws.gematik.de/conn/EventService/v7.2#GetCards" |
||
Payload |
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Body>
<EVT:GetCards xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:EVT="http://ws.gematik.de/conn/EventService/v7.2" xmlns:CONN="http://ws.gematik.de/conn/ConnectorCommon/v5.0" xmlns:CCTX="http://ws.gematik.de/conn/ConnectorContext/v2.0" xmlns:CARDCMN="http://ws.gematik.de/conn/CardServiceCommon/v2.0" mandant-wide="false" xsi:schemaLocation="http://ws.gematik.de/conn/EventService/v7.2 EventService.xsd">
<CCTX:Context>
<CONN:MandantId>Mandant1</CONN:MandantId>
<CONN:ClientSystemId>CS1</CONN:ClientSystemId>
<CONN:WorkplaceId>AP1</CONN:WorkplaceId>
</CCTX:Context>
<CARDCMN:CtId>Terminal1</CARDCMN:CtId>
<CARDCMN:CardType>EGK</CARDCMN:CardType>
</EVT:GetCards>
</soap-env:Body>
</soap-env:Envelope>
|
Response
<EVT:GetCardsResponse xmlns:GERROR="http://ws.gematik.de/tel/error/v2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:CARD="http://ws.gematik.de/conn/CardService/v8.1" xmlns:EVT="http://ws.gematik.de/conn/EventService/v7.2" xmlns:CONN="http://ws.gematik.de/conn/ConnectorCommon/v5.0" xmlns:CARDCMN="http://ws.gematik.de/conn/CardServiceCommon/v2.0" xsi:schemaLocation="http://ws.gematik.de/conn/EventService/v7.2 EventService.xsd">
<CONN:Status>
<CONN:Result>OK</CONN:Result>
</CONN:Status>
<CARD:Cards>
<CARD:Card>
<CONN:CardHandle>a5567061-f3b0-436b-b702-fbb5026aa168</CONN:CardHandle>
<CARDCMN:CardType>EGK</CARDCMN:CardType>
<CARD:CardVersion>
<CARD:COSVersion>
<CARD:Major>65535</CARD:Major>
<CARD:Minor>65535</CARD:Minor>
<CARD:Revision>65535</CARD:Revision>
</CARD:COSVersion>
<CARD:ObjectSystemVersion>
<CARD:Major>65535</CARD:Major>
<CARD:Minor>65535</CARD:Minor>
<CARD:Revision>65535</CARD:Revision>
</CARD:ObjectSystemVersion>
<CARD:CardPTPersVersion>
<CARD:Major>65535</CARD:Major>
<CARD:Minor>65535</CARD:Minor>
<CARD:Revision>65535</CARD:Revision>
</CARD:CardPTPersVersion>
<CARD:DataStructureVersion>
<CARD:Major>65535</CARD:Major>
<CARD:Minor>65535</CARD:Minor>
<CARD:Revision>65535</CARD:Revision>
</CARD:DataStructureVersion>
<CARD:LoggingVersion>
<CARD:Major>65535</CARD:Major>
<CARD:Minor>65535</CARD:Minor>
<CARD:Revision>65535</CARD:Revision>
</CARD:LoggingVersion>
<CARD:ATRVersion>
<CARD:Major>65535</CARD:Major>
<CARD:Minor>65535</CARD:Minor>
<CARD:Revision>65535</CARD:Revision>
</CARD:ATRVersion>
<CARD:GDOVersion>
<CARD:Major>65535</CARD:Major>
<CARD:Minor>65535</CARD:Minor>
<CARD:Revision>65535</CARD:Revision>
</CARD:GDOVersion>
<CARD:KeyInfoVersion>
<CARD:Major>65535</CARD:Major>
<CARD:Minor>65535</CARD:Minor>
<CARD:Revision>65535</CARD:Revision>
</CARD:KeyInfoVersion>
</CARD:CardVersion>
<CARDCMN:Iccsn>00000000000000000000</CARDCMN:Iccsn>
<CARDCMN:CtId>Terminal1</CARDCMN:CtId>
<CARDCMN:SlotId>2</CARDCMN:SlotId>
<CARD:InsertTime>2022-08-17T09:30:47Z</CARD:InsertTime>
<CARD:CardHolderName>Patientin Muster</CARD:CardHolderName>
<CARD:Kvnr>K010124021</CARD:Kvnr>
<CARD:CertificateExpirationDate>2024-08-13</CARD:CertificateExpirationDate>
</CARD:Card>
</CARD:Cards>
</EVT:GetCardsResponse>
ℹ️
|
Mit dem gemeldeten <CONN:CardHandle>a5567061-f3b0-436b-b702-fbb5026aa168</CONN:CardHandle> wird die eGK zum Auslesen der Versichertenstammdaten adressiert.
|
ℹ️
|
Die Werte 65535 und 00000000000000000000 für die ICCSN sind Dummy-Werte und im Anwendungsfall nicht relevant.
|
Für den VSD-Abruf wird die ReadVSD-Operation des Konnektors mittels folgendem Aufruf gestartet.
URI |
|||||
---|---|---|---|---|---|
Method |
POST |
||||
Requester |
|||||
Responder |
Konnektor |
||||
HTTP Header |
Content-Type: text/xml; charset=UTF-8 SOAPAction: "http://ws.gematik.de/conn/vsds/VSDService/v6.0#ReadVSD" |
||||
Payload |
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns6:ReadVSD xmlns:ns2="http://ws.gematik.de/tel/error/v2.0"
xmlns:ns3="http://ws.gematik.de/conn/ConnectorCommon/v5.0"
xmlns:ns4="urn:oasis:names:tc:dss:1.0:core:schema"
xmlns:ns5="http://www.w3.org/2000/09/xmldsig#"
xmlns:ns6="http://ws.gematik.de/conn/vsds/VSDService/v5.2"
xmlns:ns7="http://ws.gematik.de/conn/ConnectorContext/v2.0"
xmlns:ns8="urn:oasis:names:tc:SAML:1.0:assertion">
<ns6:EhcHandle>a5567061-f3b0-436b-b702-fbb5026aa168</ns6:EhcHandle>
<ns6:HpcHandle>3ddfbd41-4737-4bfc-9e26-eb5580ec2f4d</ns6:HpcHandle>
<ns6:PerformOnlineCheck>true</ns6:PerformOnlineCheck>
<ns6:ReadOnlineReceipt>true</ns6:ReadOnlineReceipt>
<ns7:Context>
<ns3:MandantId>Mandant1</ns3:MandantId>
<ns3:ClientSystemId>CS1</ns3:ClientSystemId>
<ns3:WorkplaceId>AP1</ns3:WorkplaceId>
<ns3:UserId>user1</ns3:UserId>
</ns7:Context>
</ns6:ReadVSD>
</S:Body>
</S:Envelope>
|
Response
<?xml version="1.0"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns6:ReadVSDResponse xmlns:ns2="http://ws.gematik.de/conn/ConnectorCommon/v5.0"
xmlns:ns3="http://ws.gematik.de/tel/error/v2.0"
xmlns:ns4="urn:oasis:names:tc:dss:1.0:core:schema"
xmlns:ns5="http://www.w3.org/2000/09/xmldsig#"
xmlns:ns6="http://ws.gematik.de/conn/vsds/VSDService/v5.2"
xmlns:ns7="http://ws.gematik.de/conn/ConnectorContext/v2.0"
xmlns:ns8="urn:oasis:names:tc:SAML:1.0:assertion">
<ns6:PersoenlicheVersichertendaten>
H4sIAAAAAAAAAI1S207rMBD8lcjvdJNIKS3aGAHlUolQdCp6eKtMsjQRjoNsp0B/lg9A/AObHijtEQ+82Jnx7M6ONnj4XOtgSdZVjUlF1AtFQCZvisosUjGeTvYGg2S4FyUicF6ZQunGUCpeyIlDiTcn82subcjoKi9p1rXh23piJR+32WVwMsrms9M/0/HkKhVJL+4c2NO4VJTePx4APLnegmrlq4deQXCvYOmKujtgyXohcauv3UFmPh7J2ygKk0EY9hOE/99wPZ6ReE53rfWOp2prGQ37UTiM9xF2aJw11qia5JGmZ85KNsi4mSIdZMrmpLn/pwKvVF6uv47f3q2uDFmEDcduLi815aWXWWeyQVxXk3Gr1im/kmeWKp51XbpF49Rb5RyZo8IS35yicV5T5Veq1DLuR3GMsMPhxHo50QUZzrNA6CBecgaJf5vSOJZpRV0kXi3JEcJPNMK/kk9/yWhBQYdeCeGLxQvVOtPWNS9jP0TYghvR9+jwtQHY3SL84t+RH/LCuyOeAgAA</ns6:PersoenlicheVersichertendaten>
<ns6:AllgemeineVersicherungsdaten>
H4sIAAAAAAAAAL1SW2+CMBT+K4R3OYCispQap8tinLrMzC17IR0cgQhlaatb/PUrhixgjNvTXtqcy3dpzyGjryI3DihkVvLAdCzbNJBHZZzxJDBn61VnOPT8juOZI0qeJ+E4zxMsMOO4qTBRimLPExkzhfx18WBoNi4DM1Xq4wbgU1q6m6lsZ8UIWwYHGRfVAQfPck1jMl2Em7un9Wy1DEyd0eqU/BArFI2okpFRuldHSm4xyTinru26dtftEagTZF5KbUQJhkkFboU75FyTUN/3vf5g6NsELtbbqJwhj1HoH0E6PUM0a2TJCqT1a43FXreJHZMSnfv5hsCpSsbvAqOUn1B/s+oMuj2v3/9/q3DFK5zHF4f0tpdMHTO+LWUr0CKtIXMmFO02SOpUExPWbjR/eMK/rB6pMyBQ3QSudcK5NLSMQXvd4Pcdp9+NCt5ANAMAAA==</ns6:AllgemeineVersicherungsdaten>
<ns6:GeschuetzteVersichertendaten>
H4sIAAAAAAAAAIVQbUvDMBD+KyXf12xCcZNrxjZFBs6JZUP2ZYTmTMratCSXKv31ZiioDPHLvTzP3XMvMH9v6qRH56vW5mySjlmCtmxVZXXO1sV2NJ1ms9EkY3MBu9XxHn1pAtJAuD83lQYdoVUympfNQxLVrM+ZIepuOH/zqcZGUnVKFfJXyXuvmrPhfZZesWR1uznu756L9fYxZxGJ0wUcwiBNHaz2niQFL6D49GPgXxHwy6Il+tYqdPgU92otWu1C16G4Bv4XBQXWeKKqj/eTk6gjtEA3UB3vEjPg3wkcpLHyJ/cbiKtdavH/HyY+AAOgGlSBAQAA</ns6:GeschuetzteVersichertendaten>
<ns6:VSD_Status>
<ns6:Status>0</ns6:Status>
<ns6:Timestamp>2022-03-24T08:34:22.000Z</ns6:Timestamp>
<ns6:Version>5.2.0</ns6:Version>
</ns6:VSD_Status>
<ns6:Pruefungsnachweis>
H4sIAAAAAAAAAB2N3U6DMABGX4X01khbCM6YtssiNf5RRFiXeGPAdghbC1pk4tPb7Oa7OMl3Dln/mmMw62/XDZYCHCIQaPsxqM62FGyru8trELiptqo+DlZTsGgH1oy8iMAfraPgc5rGGwhPLmy1qafuECoN9zWcnTJwtCc4n6W3afYu+Wv5kItzxjNGqpJFKIpRgq/QCsV4RaBHhLOIQO4jb0ymGyR6jrK+SPKKR3laLFm/wXmlpEzvHy+K7V+72zX78qkZXaKbRfAvYw5KPsf4J6MEeokfwf4Bl4Neo+oAAAA=</ns6:Pruefungsnachweis>
</ns6:ReadVSDResponse>
</S:Body>
</S:Envelope>
🔥
|
Liefert die <ns6:ReadVSDResponse> <ns6:VSD_Status> einen <ns6:Status>1</ns6:Status> (ungleich 0), konnte der Stammdatenabgleich nicht erfolgreich beendet werden. Bei dieser Rückmeldung kann durch einen erneuten Aufruf von ReadVSD versucht werden, das Problem zu beheben. Falls es dann nicht klappt, muss der Anwendungsfall abgebrochen werden
|
ℹ️
|
<ns6:PersoenlicheVersichertendaten> enthalten die KVNR des Versicherten im Attribut Versicherten_ID siehe decodiertes Beispiel<ns6:Pruefungsnachweis> enthält den Status der Onlineprüfung im Attribut <E> siehe decodiertes Beispiel
|
ℹ️
|
Der <ns6:Pruefungsnachweis> ist wie folgt aufgebaut: Base64(gzip(xml_PN)) und muss als Ganzes - wie ihn die ReadVSD-Operation zurückliefert - in URL-Safe-Codierung an den Fachdienst übergeben werden.
|
Code |
Type Success |
200 |
OK |
Code |
Type Error |
400 |
Bad Request |
Ist die Gesundheitskarte gesperrt, bspw. wegen Kartenwechsel oder -verlust, liefert die Operation ReadVSD keine ReadVSDResponse sondern einen SOAP:Fault
. In diesem Fall muss der Anwendungsfall abgebrochen werden.
Bei folgenden Fehlercodes liegt eine gesperrte eGK vor, möglicherweise ist der Patient bereits im Besitz einer neuen eGK.
-
Fehlercode 106
-
Fehlercode 107
-
Fehlercode 114
Mit der folgenden Fachdienst-Operation ruft das AVS alle Tasks zu einlösbaren E-Rezepten vom E-Rezept-Fachdienst ab.
Der E-Rezept-Fachdienst überprüft in 5-Minuten-Intervallen, ob mehrere Apotheken Prüfungsnachweise (pnw) mit dem Ergebnis "3" übermitteln (PN3). Sollte ein festgelegter Schwellenwert überschritten werden, akzeptiert der E-Rezept-Fachdienst auch Anfragen mit einem Prüfungsnachweis, der das Ergebnis "3" enthält.
Um diese Funktion zu nutzen, muss der neue URL-Parameter kvnr
in der Anfrage enthalten sein. Dieser Parameter ist unabhängig vom Ergebnis des Prüfungsnachweises. Da das AVS nicht verpflichtet ist den Prüfungsnachweis zu überprüfen, kann der Parameter kvnr
auch ohne Ergebnis 3 im pnw übermittelt werden.
Ablaufdiagramm für das PN3 Feature im E-Rezept-Fachdienst (Klicken zum Ausklappen)
Request
URI |
|
||
---|---|---|---|
Method |
GET |
||
Requester |
|||
Responder |
|||
HTTP Header |
Authorization: Bearer eyJraWQ.ewogImL2pA10Qql22ddtutrvx4FsDlz.rHQjEmB1lLmpqn9J
|
Response
<Bundle xmlns="http://hl7.org/fhir">
<id value="erp-abrufen-egk-05-Response-Task"/>
<type value="searchset"/>
<timestamp value="2025-01-15T15:29:00.434+00:00"/>
<total value="2"/>
<entry>
<fullUrl value="https://erp-dev.zentral.erp.splitdns.ti-dienste.de/Task/160.000.000.000.000.01"/>
<resource>
<Task>
<id value="160.000.000.000.000.01"/>
<meta>
<profile value="https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_PR_Task|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>
<extension url="https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_EX_AcceptDate">
<valueDate value="2025-02-12"/>
</extension>
<extension url="https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_EX_ExpiryDate">
<valueDate value="2025-04-15"/>
</extension>
<identifier>
<use value="official"/>
<system value="https://gematik.de/fhir/erp/NamingSystem/GEM_ERP_NS_PrescriptionId"/>
<value value="160.000.000.000.000.01"/>
</identifier>
<identifier>
<use value="official"/>
<system value="https://gematik.de/fhir/erp/NamingSystem/GEM_ERP_NS_AccessCode"/>
<value value="777bea0e13cc9c42ceec14aec3ddee2263325dc2c6c699db115f58fe423607ea"/>
</identifier>
<status value="ready"/>
<intent value="order"/>
<for>
<identifier>
<system value="http://fhir.de/sid/gkv/kvid-10"/>
<value value="X123456789"/>
</identifier>
</for>
<authoredOn value="2025-01-15T15:29:00+00:00"/>
<lastModified value="2025-01-15T15:29:00.434+00:00"/>
<performerType>
<coding>
<system value="https://gematik.de/fhir/erp/CodeSystem/GEM_ERP_CS_OrganizationType"/>
<code value="urn:oid:1.2.276.0.76.4.54"/>
<display value="Öffentliche Apotheke"/>
</coding>
<text value="Öffentliche Apotheke"/>
</performerType>
</Task>
</resource>
<search>
<mode value="match"/>
</search>
</entry>
<entry>
<fullUrl value="https://erp-dev.zentral.erp.splitdns.ti-dienste.de/Task/160.000.000.000.000.02"/>
<resource>
<Task>
<id value="160.000.000.000.000.02"/>
<meta>
<profile value="https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_PR_Task|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>
<extension url="https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_EX_AcceptDate">
<valueDate value="2025-02-12"/>
</extension>
<extension url="https://gematik.de/fhir/erp/StructureDefinition/GEM_ERP_EX_ExpiryDate">
<valueDate value="2025-04-15"/>
</extension>
<identifier>
<use value="official"/>
<system value="https://gematik.de/fhir/erp/NamingSystem/GEM_ERP_NS_PrescriptionId"/>
<value value="160.000.000.000.000.02"/>
</identifier>
<identifier>
<use value="official"/>
<system value="https://gematik.de/fhir/erp/NamingSystem/GEM_ERP_NS_AccessCode"/>
<value value="777bea0e13cc9c42ceec14aec3ddee2263325dc2c6c699db115f58fe423607ea"/>
</identifier>
<status value="ready"/>
<intent value="order"/>
<for>
<identifier>
<system value="http://fhir.de/sid/gkv/kvid-10"/>
<value value="X123456789"/>
</identifier>
</for>
<authoredOn value="2025-01-15T15:29:00+00:00"/>
<lastModified value="2025-01-15T15:29:00.434+00:00"/>
<performerType>
<coding>
<system value="https://gematik.de/fhir/erp/CodeSystem/GEM_ERP_CS_OrganizationType"/>
<code value="urn:oid:1.2.276.0.76.4.54"/>
<display value="Öffentliche Apotheke"/>
</coding>
<text value="Öffentliche Apotheke"/>
</performerType>
</Task>
</resource>
<search>
<mode value="match"/>
</search>
</entry>
</Bundle>
ℹ️
|
Alle gelieferten Tasks haben den Status <status value="ready" /> und können im Folgenden durch die Apotheke einzeln abgerufen und beliefert werden.
|
ℹ️
|
Eine Sortierung der Ergebnisse der Liste durch den Fachdienst erfolgt nicht. Ab eine Ergebnismenge von 50 Einträge erfolgt ein paging. |
ℹ️
|
Je Rezept müssen die Task-ID <id value="160.000.036.967.704.52" /> und der AccessCode<value value="eb6002c60dffdfb742002bf44f9f72326de3dddfe2271ab64a21a6cb0f168bbf" /> ausgelesen und für den Folgeaufruf der
POST /Task/160.000.036.967.704.52/$accept?ac=eb6002c60dffdfb742002bf44f9f72326de3dddfe2271ab64a21a6cb0f168bbf -Operation zusammengesetzt werden, siehe E-Rezept abrufen.
|
Code |
Type Success |
200 |
OK |
202 |
Accepted |
Code |
Type Error |
400 |
Bad Request |
401 |
Unauthorized |
403 |
Forbidden |
404 |
Not found |
405 |
Method Not Allowed |
408 |
Request Timeout |
409 |
Conflict |
410 |
Gone |
429 |
Too Many Requests |
454 |
+ Die Anfrage wird abgebrochen, da die Voraussetzungen zur Erfüllung nicht gegeben sind. Der E-Rezept-Fachdienst akzeptiert zu diesem Zeitpunkt keine Anfragen mit einem Prüfungsnachweis, der das Ergebnis "3" enthält. |
455 |
+ Die Anfrage wird abgebrochen, da die kvnr als URL-Parameter nicht angegeben ist. |
500 |
Server Errors Im OperationOutcome übermittelte Fehlermeldungen: Anwesenheitsnachweis konnte nicht erfolgreich durchgeführt werden (Prüfziffer fehlt im VSDM Prüfungsnachweis).
Anwesenheitsnachweis konnte nicht erfolgreich durchgeführt werden (Fehler bei Prüfung der HMAC-Sicherung).
Anwesenheitsnachweis konnte nicht erfolgreich durchgeführt werden (Zeitliche Gültigkeit des Anwesenheitsnachweis überschritten).
|
ℹ️
|
Die allgemeinen http-Statuscodes finden sich in der Übersicht E-Rezept-Fachdienst-Statuscodes |