Seiteninhalt:
Diese Seite beschreibt das grobe Konzept für den Nachrichtenaustausch.
Das MessageBundle dient als Container, der alle für den Anwendungsfall relevanten Ressourcen enthält. Ein Constraint fordert hierbei, dass alle im Bundle angegebenen Ressourcen und Referenzen auflösbar sein müssen. D.h. es dürfen keine Referenzen angegeben werden, deren Zielressource sich nicht im Bundle befindet.
Als erste Ressource muss hierbei der MessageHeader angegeben werden. Hier sind Sender und Empfänger anzugeben. Weiterhin ist unter .eventCode der Anwendungsfall aus ServiceIdentifierCS anzugeben (bspw. “eRezept_Rezeptanforderung;Rezeptanfrage”). MessageHeader.id enthält hierbei eine eindeutige und einzigartige UUID, um eine Nachricht zu identifizieren.
MessageHeader.focus verweist auf die Ressource, die für den jeweiligen Anwendungsfall führend ist, bzw. als Trägerressource dient. Näheres dazu wird im ImplementationGuide des jeweiligen Anwendungsfalls beschrieben.
<MessageHeader xmlns="http://hl7.org/fhir">
<id value="ExampleMessageHeaderAppTransportFramework"/>
<meta>
<profile
value="https://gematik.de/fhir/atf/StructureDefinition/atf-message-header"/>
</meta>
<text>
<status value="generated"/>
<div xmlns="http://www.w3.org/1999/xhtml"><p class="res-header-id"><b>Generated Narrative: MessageHeader ExampleMessageHeaderAppTransportFramework</b></p><a name="ExampleMessageHeaderAppTransportFramework"> </a><a name="hcExampleMessageHeaderAppTransportFramework"> </a><div style="display: inline-block; background-color: #d9e0e7; padding: 6px; margin: 4px; border: 1px solid #8da1b4; border-radius: 5px; line-height: 60%"><p style="margin-bottom: 0px"/><p style="margin-bottom: 0px">Profile: <a href="StructureDefinition-atf-message-header.html">MessageHeader</a></p></div><p><b>event</b>: <a href="CodeSystem-operation-identifier-cs.html#operation-identifier-cs-atf.59Empfangsbestaetigung">Verarbeitungsidentifier (CS) atf;Empfangsbestaetigung</a>: Empfangsbestätigung und Auskunft über FHIR Interpretierbarkeit der Nachricht</p><h3>Destinations</h3><table class="grid"><tr><td style="display: none">-</td><td><b>Endpoint</b></td><td><b>Receiver</b></td></tr><tr><td style="display: none">*</td><td><a href="mailto:receiver@example.klaus.kim.telematik">receiver@example.klaus.kim.telematik</a></td><td>Receiver Example (Identifier: <code>https://gematik.de/fhir/sid/telematik-id</code>/3-test-telematik-id)</td></tr></table><p><b>sender</b>: Sender Example (Identifier: <code>https://gematik.de/fhir/sid/telematik-id</code>/1-test-telematik-id)</p><h3>Sources</h3><table class="grid"><tr><td style="display: none">-</td><td><b>Name</b></td><td><b>Software</b></td><td><b>Version</b></td><td><b>Contact</b></td><td><b>Endpoint</b></td></tr><tr><td style="display: none">*</td><td>TopDoc Systems</td><td>TopDoc TI</td><td>2.4.5</td><td><a href="mailto:support@topdoc-systems.de">support@topdoc-systems.de</a></td><td><a href="mailto:sender@example.peter.kim.telematik">sender@example.peter.kim.telematik</a></td></tr></table><p><b>focus</b>: <a href="Bundle-ExampleBundleMessageContainer.html#urn-uuid-86a87254-ce15-11ed-afa1-0242ac120004">Bundle: identifier = UUID:86a87254-ce15-11ed-afa1-0242ac120002; type = message; timestamp = 2023-03-29 13:28:17+0200</a></p></div>
</text>
<eventCoding>
<system
value="https://gematik.de/fhir/atf/CodeSystem/operation-identifier-cs"/>
<code value="atf;Empfangsbestaetigung"/>
</eventCoding>
<destination>
<endpoint value="mailto:receiver@example.klaus.kim.telematik"/>
<receiver>
<identifier>
<system value="https://gematik.de/fhir/sid/telematik-id"/>
<value value="3-test-telematik-id"/>
</identifier>
<display value="Receiver Example"/>
</receiver>
</destination>
<sender>
<identifier>
<system value="https://gematik.de/fhir/sid/telematik-id"/>
<value value="1-test-telematik-id"/>
</identifier>
<display value="Sender Example"/>
</sender>
<source>
<name value="TopDoc Systems"/>
<software value="TopDoc TI"/>
<version value="2.4.5"/>
<contact>
<system value="email"/>
<value value="support@topdoc-systems.de"/>
</contact>
<endpoint value="mailto:sender@example.peter.kim.telematik"/>
</source>
<focus>
<reference value="urn:uuid:86a87254-ce15-11ed-afa1-0242ac120004"/>
</focus>
</MessageHeader>
Nachdem der MessageHeader erstellt und unter Bundle.entry hinzugefügt wurde können nun auch alle für den jeweiligen Anwendungsfall relevanten Ressourcen dem Bundle hinzugefügt werden.
<Bundle xmlns="http://hl7.org/fhir">
<id value="ExampleBundleMessageContainer"/>
<meta>
<profile
value="https://gematik.de/fhir/atf/StructureDefinition/atf-message-bundle"/>
</meta>
<identifier>
<system value="urn:ietf:rfc:3986"/>
<value value="urn:uuid:86a87254-ce15-11ed-afa1-0242ac120002"/>
</identifier>
<type value="message"/>
<timestamp value="2023-03-29T13:28:17+02:00"/>
<entry>
<fullUrl value="urn:uuid:86a87254-ce15-11ed-afa1-0242ac120003"/>
<resource>
<MessageHeader>
<id value="ExampleMessageHeaderAppTransportFramework"/>
<meta>
<profile
value="https://gematik.de/fhir/atf/StructureDefinition/atf-message-header"/>
</meta>
<text>
<status value="generated"/>
<div xmlns="http://www.w3.org/1999/xhtml"><a name="MessageHeader_ExampleMessageHeaderAppTransportFramework"> </a><p class="res-header-id"><b>Generated Narrative: MessageHeader ExampleMessageHeaderAppTransportFramework</b></p><a name="ExampleMessageHeaderAppTransportFramework"> </a><a name="hcExampleMessageHeaderAppTransportFramework"> </a><div style="display: inline-block; background-color: #d9e0e7; padding: 6px; margin: 4px; border: 1px solid #8da1b4; border-radius: 5px; line-height: 60%"><p style="margin-bottom: 0px"/><p style="margin-bottom: 0px">Profile: <a href="StructureDefinition-atf-message-header.html">MessageHeader</a></p></div><p><b>event</b>: <a href="CodeSystem-operation-identifier-cs.html#operation-identifier-cs-atf.59Empfangsbestaetigung">Verarbeitungsidentifier (CS) atf;Empfangsbestaetigung</a>: Empfangsbestätigung und Auskunft über FHIR Interpretierbarkeit der Nachricht</p><h3>Destinations</h3><table class="grid"><tr><td style="display: none">-</td><td><b>Endpoint</b></td><td><b>Receiver</b></td></tr><tr><td style="display: none">*</td><td><a href="mailto:receiver@example.klaus.kim.telematik">receiver@example.klaus.kim.telematik</a></td><td>Receiver Example (Identifier: <code>https://gematik.de/fhir/sid/telematik-id</code>/3-test-telematik-id)</td></tr></table><p><b>sender</b>: Sender Example (Identifier: <code>https://gematik.de/fhir/sid/telematik-id</code>/1-test-telematik-id)</p><h3>Sources</h3><table class="grid"><tr><td style="display: none">-</td><td><b>Name</b></td><td><b>Software</b></td><td><b>Version</b></td><td><b>Contact</b></td><td><b>Endpoint</b></td></tr><tr><td style="display: none">*</td><td>TopDoc Systems</td><td>TopDoc TI</td><td>2.4.5</td><td><a href="mailto:support@topdoc-systems.de">support@topdoc-systems.de</a></td><td><a href="mailto:sender@example.peter.kim.telematik">sender@example.peter.kim.telematik</a></td></tr></table><p><b>focus</b>: <a href="Bundle-ExampleBundleMessageContainer.html#urn-uuid-86a87254-ce15-11ed-afa1-0242ac120004">Bundle: identifier = UUID:86a87254-ce15-11ed-afa1-0242ac120002; type = message; timestamp = 2023-03-29 13:28:17+0200</a></p></div>
</text>
<eventCoding>
<system
value="https://gematik.de/fhir/atf/CodeSystem/operation-identifier-cs"/>
<code value="atf;Empfangsbestaetigung"/>
</eventCoding>
<destination>
<endpoint value="mailto:receiver@example.klaus.kim.telematik"/>
<receiver>
<identifier>
<system value="https://gematik.de/fhir/sid/telematik-id"/>
<value value="3-test-telematik-id"/>
</identifier>
<display value="Receiver Example"/>
</receiver>
</destination>
<sender>
<identifier>
<system value="https://gematik.de/fhir/sid/telematik-id"/>
<value value="1-test-telematik-id"/>
</identifier>
<display value="Sender Example"/>
</sender>
<source>
<name value="TopDoc Systems"/>
<software value="TopDoc TI"/>
<version value="2.4.5"/>
<contact>
<system value="email"/>
<value value="support@topdoc-systems.de"/>
</contact>
<endpoint value="mailto:sender@example.peter.kim.telematik"/>
</source>
<focus>
<reference value="urn:uuid:86a87254-ce15-11ed-afa1-0242ac120004"/>
</focus>
</MessageHeader>
</resource>
</entry>
<entry>
<fullUrl value="urn:uuid:86a87254-ce15-11ed-afa1-0242ac120004"/>
<resource>
<OperationOutcome>
<id value="SuccessOperationOutcome"/>
<text>
<status value="generated"/>
<div xmlns="http://www.w3.org/1999/xhtml"><a name="OperationOutcome_SuccessOperationOutcome"> </a><p class="res-header-id"><b>Generated Narrative: OperationOutcome SuccessOperationOutcome</b></p><a name="SuccessOperationOutcome"> </a><a name="hcSuccessOperationOutcome"> </a><h3>Issues</h3><table class="grid"><tr><td style="display: none">-</td><td><b>Severity</b></td><td><b>Code</b></td><td><b>Diagnostics</b></td></tr><tr><td style="display: none">*</td><td>Information</td><td>Informational Note</td><td>Anfrage erfolgreich entgegengenommen</td></tr></table></div>
</text>
<issue>
<severity value="information"/>
<code value="informational"/>
<diagnostics value="Anfrage erfolgreich entgegengenommen"/>
</issue>
</OperationOutcome>
</resource>
</entry>
</Bundle>
Das fertiggestellte Bundle kann nun mit einem Übertragungsmedium der Wahl übermittelt werden. Bisher ist KIM vorgesehen. In Zukunft wird auch der Nachrichtenaustausch über TIM und möglicherweise weiteren Diensten möglich sein.
Wenn Nachrichten mit dem ATF ausgetauscht werden, muss (ab ATF Stufe 2) dem sendenden System rückgemeldet werden, ob der empfangene Auftrag technisch verarbeitet werden konnte. Hierzu wurde ein ATF-OperationOutcome modelliert, um entsprechende Auskunft darüber zu geben.
Wie für alle Nachrichten im ATF notwendig, ist der OperationOutcome im MessageBundle mit MessageHeader anzuführen.
MessageHeader.eventCode ist hierbei “atf;Empfangsbestaetigung”. Der OperationOutcome ist unter MessageHeader.focus zu referenzieren.
Nachdem eine Nachricht im System angekommen ist SOLL das System (ab ATF Stufe 2) mit einer Bestätigung antworten. Diese Bestätigung enthält die Information, ob die übermittelten FHIR-Ressourcen interpretiert werden konnten und eine weiterverarbeitung im empfangenden System möglich ist. Das bedeutet, dass das empfangende System bei Eingang einer Nachricht die Ressourcen validieren und feststellen soll, ob alle Inhalte für die Weiterverarbeitung vorhanden sind.
Unter .issue können dem sendenden System als Antwort mehrere Einträge übermittelt werden. Enthalten alle Einträge nur issues mit OperationOutcome.issue.severity = “warning” oder “information” ist davon auszugehen, dass die Nachricht wie gewünscht verarbeitet werden kann. Das sendende System geht dann davon aus, dass die Nachricht verstanden wurde und die Übertragung erfolgreich war.
Sobald ein OperationOutcome.issue.sverity = “error” oder “fatal” enthält, ist davon auszugehen, dass der Vorgang abgebrochen wurde und die Anfrage nicht erfolgreich war.
Weitere Informationen können unter Fehlerbehandlung eingesehen werden.
Hier beispielhaft ein Nachrichtenaustausch im Anwendungsfall “E-Rezept Rezeptanforderung”