Implementation Guide
ePA Medication Service
Version 1.1.5 - ballot

Operation API: Dispensierinformationen einstellen (E-Rezept-Fachdienst)

Die Operation Dispensierinformationen einstellen (E-Rezept-Fachdienst) im Medication Service dient dazu, Informationen über die Arzneimittelabgabe, die auf Basis einer Verschreibung erfolgt, in den Medication Service einzutragen. Diese Operation wird vom E-Rezept-Fachdienst verwendet, wenn ein Versicherter sein Arzneimittel in einer Apotheke erhält. Sie dokumentiert, dass das Arzneimittel gemäß der Verschreibung abgegeben wurde, einschließlich der Details wie Menge, Abgabedatum und Informationen zur Apotheke. Dies ermöglicht einen vollständigen Überblick über die verschriebenen und dispensierten Arzneimittel des Versicherten.

ePA-AktensystemePA-Aktensystem / VAUAVSE-Rezept-FachdienstInformation ServiceMedication ServiceVAUSessionManagement1Anfrage: Dispensierinformationen übermitteln2Durchführen der standardmäßigen Workflow-Logik des E-Rezept-Fachdienstes3Antwort: Erfolg4Persistieren der Dispensierinformationen in einer Warteschlangefür die asynchrone ÜbertragungrefLokalisierung der Service-Endpunkte der ePA und der Akte eines Versicherten5Anfrage: Widerspruchsinformationen zum Einstellen durch E-Rezept-Fachdienst6Antwort: Widerspruchsinformationenalt[Widerspruch zum Einstellen durch E-Rezept-Fachdienst vorhanden]7Abbruch. Löschen der Dispensierinformationen aus der Warteschlange[Kein Widerspruch zum Einstellen durch E-Rezept-Fachdienst]refLogin in die Akte des Versicherten8Erzeugen der FHIR-Ressourcen MedicationDispense, Medication, Organizationauf Grundlage der Dispensierinformationen9Übermittlung der erzeugten FHIR-Ressourcen als FHIR Operation per HTTP POST10FHIR-Ressourcenpersistierenalt[successful case]11Antwort: Transaktion erfolgreich12Löschen der Dispensierinformationen aus der Warteschlange13Abbruch. Die Dispensierinformationen bleiben in der Warteschlange für eine spätere Übertragung
Abbildung: Anwendungsfall Dispensierinformationen einstellen

Nachricht

Die Nachricht zum Übertragen von Dispensierinformationen wird als HTTP POST-Anfrage an den Medication Service gesendet.

Auslösung

Der E-Rezept-Fachdienst sendet eine Dispensierinformationen einstellen-Nachricht an den Medication Service, um eine bereits erstellte elektronische Dispensierung zu übertragen. Der Medication Service verarbeitet die empfangenen Daten und speichert die Dispensierinformationen dauerhaft.

FHIR Operation API

Der Medication Service MUSS die Operation API: Dispensierinformationen einstellen (E-Rezept-Fachdienst) gemäß der FHIR OperationDefinition Provide Dispensation eRP ausführen. Die Verarbeitung der Dispensierinformationen MUSS entsprechend den in der OperationDefinition festgelegten Regeln und Strukturen erfolgen. Der Medication Service MUSS die Operation Dispensierinformationen einstellen (E-Rezept-Fachdienst) mittels einer HTTP POST-Anfrage verarbeiten. Die empfangenen Dispensierinformationen MÜSSEN verarbeitet und die Dispensierinformationen dauerhaft gespeichert werden. Der Medication Service MUSS für die Operation Dispensierinformationen einstellen (E-Rezept-Fachdienst) einen Partial Success ermöglichen.
  • Falls einzelne Dispensierungen erfolgreich verarbeitet wurden, MUSS der Medication Service die zugehörigen prescriptionId und authoredOn Werte in der Antwort zurückgeben.
  • Falls einzelne Dispensierungen nicht verarbeitet werden können, MUSS der Medication Service für diese ein OperationOutcome in der Antwort bereitstellen.
  • Auch bei einer erfolgreichen Verarbeitung MUSS der Medication Service ein OperationOutcome mit einer entsprechenden Bestätigung bereitstellen.
  • Der HTTP Response Code MUSS 200 OK sein, unabhängig davon, ob eine oder mehrere Dispensierungen fehlschlagen.

Geschäftslogik

Die Operation Dispensierinformationen einstellen (E-Rezept-Fachdienst) verarbeitet eine oder mehrere Dispensierinformationen, die im FHIR Parameters-Objekt übergeben werden. Für jede übergebene Abgabe erfolgt zunächst eine Validierung der enthaltenen Ressourcen Medication, Organization und MedicationDispense.

Anhand des Abgabedatums und der E-Prescription-ID wird ein eindeutiger RxPrescriptionProcessIdentifier gebildet, der als Schlüssel für die weiteren Verarbeitungsschritte dient. Es wird geprüft, ob eine passende MedicationRequest-Instanz existiert, die noch nicht abgeschlossen ist. Falls nicht, wird die Verarbeitung abgebrochen.

Ist die MedicationRequest-Instanz gültig, wird im Kontext einer Transaktion weiterverarbeitet:

  • Die angegebene Organization-Ressource wird anhand der Telematik-ID aktualisiert oder neu angelegt.
  • Vorherige MedicationDispense-Instanzen zum selben RxPrescriptionProcessIdentifier, die nicht den Status cancelled haben, werden gelöscht.
  • Ebenso werden Medication-Instanzen gelöscht, die noch aktiv sind, aber nicht mehr von der zugehörigen MedicationRequest referenziert werden.

Wichtig: Gelöschte Instanzen bleiben über die FHIR-Versionshistorie weiterhin abrufbar, da keine physikalische Löschung erfolgt.

Für jede übergebene MedicationDispense wird die referenzierte Medication-Ressource aus den Input-Parametern ermittelt. Je nach Substitutionsstatus (MedicationDispense.substitution.wasSubstituted) wird entweder eine neue Medication-Instanz angelegt oder diejenige aktualisiert, die von der verschreibenden MedicationRequest referenziert wird.

Anschließend wird eine neue MedicationDispense-Instanz erstellt, deren Status aus dem Parameter RxDispensation.part.status übernommen wird. Wird der Status nicht gesetzt oder ist er gleich completed, so wird zusätzlich die zugehörige MedicationRequest auf completed gesetzt.

Alle Änderungen erfolgen transaktional. Am Ende der erfolgreichen Verarbeitung wird eine entsprechende OperationOutcome-Meldung zurückgegeben. Fehlerhafte Eingaben führen zu einer abgeleiteten Fehlermeldung im Output.

Der Medication Service MUSS bei der Ausführung der Operation Dispensierinformationen einstellen (E-Rezept-Fachdienst) erkennen, ob es sich um eine Substitution handelt. Dies geschieht durch die Prüfung, ob der boolesche Wert MedicationDispense.substitution.wasSubstituted auf true gesetzt ist.

  • Falls wasSubstituted den Wert true hat, MUSS eine neue Medication-Instanz für diesen Abgabeprozess erstellt werden.
  • Falls wasSubstituted nicht gesetzt oder false ist, muss die im Verschreibungsprozess vorhandene Medication-Instanz aktualisiert werden

Das folgende Aktivitätsdiagramm illustriert die Geschäftslogik der Operation Dispensierinformationen einstellen (E-Rezept-Fachdienst) im Medication Service.

$provide-dispensation-erpReturn errorOperationOutcomewith code forbidden and detailsSVC_IDENTITY_MISMATCHno Check if the KVNR-based logical reference(s) inthe subject element of the MedicationDispense resourcecorrespond(s) to the x-insurant value in the HTTP header. Validate allMedication,OrganizationandMedicationDispensefromInput-Parameters[x].RxDispensation.part Validation successful yesnoGenerateRxPrescriptionProcessIdentifierfrom values ofInput-Parameters[x].RxDispensation.part.authoredOnandInput-Parameters[x].RxDispensation.part.PrescriptionId Check whether there is aMedicationRequestwithRxPrescriptionProcessIdentifier andstatus NOTcompletedand NOTcancelled noyesAdd errorOperationOutcometoOutput-Parameters MEDICATIONSVC_PRESCRIPTION_NO_EXISTif nomatchingMedicationRequestexistsorMEDICATIONSVC_PRESCRIPTION_STATUSif theMedicationRequesthas an invalid statustransactionCheck for existingOrganizationwith TelematikID from Input-Parameters[x].RxDispensation.part.OrganizationOrganizationexists?yesno«Update»OrganizationfromInput-Parameters[x].RxDispensation.part.Organization identifier[TelematikID] = Value(TelematikID)Replace all other elements with given resource instance«Create»OrganizationfromInput-Parameters[x].RxDispensation.part.Organization identifier[TelematikID] = Value(TelematikID)Set all other elements with given resource instance Note:Deleted instances remainaccessible via the FHIR history view. Delete allMedicationDispenseinstanceswith extension[RxPrescriptionProcessIdentifier] equal toRxPrescriptionProcessIdentifier  in Medication Service, except those with statuscancelled Note:Deleted instances remainaccessible via the FHIR history view. Delete allMedicationinstanceswithextension[RxPrescriptionProcessIdentifier]equal toRxPrescriptionProcessIdentifier  and statusactive,where the correspondingMedicationRequestinstance does not reference them viaMedicationRequest.medicationReference.referenceloop GetMedicationresource referenced byMedicationDispense fromInput-Parameters[x].RxDispensation.part Generate forRxOriginatorProcessIdentifierfrom values ofInput-Parameters[x].RxDispensation.part.Medication.Id and Input-PrescriptionIdGenerate forEPAMedicationUniqueIdentifierfrom hashed Input-Medication Verify whetherMedicationDispense.substitution.wasSubstitutedistrue yesno«Create»Medicationusing theMedicationresource previously retrieved via reference fromMedicationDispensefrom currentRxDispensation Input-Parameterspart listidentifier[EPAMedicationUniqueIdentifier] = Value(EPAMedicationUniqueIdentifier)identifier[RxOriginatorProcessIdentifier] = Value(RxOriginatorProcessIdentifier)extension[RxPrescriptionProcessIdentifier] = Value(RxPrescriptionProcessIdentifier)status =activeSet all other elements with given resource instance Note:Create a new version of the Medicationinstance based on the given resource. «Update»Medicationinstance referenced by the correspondingMedicationRequest  with extension[RxPrescriptionProcessIdentifier] =RxPrescriptionProcessIdentifierusing theMedicationresource previously retrieved via reference fromMedicationDispensefrom currentRxDispensation Input-Parameterspart listidentifier[EPAMedicationUniqueIdentifier] = Value(EPAMedicationUniqueIdentifier)identifier[RxOriginatorProcessIdentifier] = Value(RxOriginatorProcessIdentifier)identifier[RxPrescriptionProcessIdentifier] = Value(RxPrescriptionProcessIdentifier)status =activeSet all other elements with given resource instanceGenerate forRxOriginatorProcessIdentifierfrom values ofInput-Parameters[x].RxDispensation.part.MedicationDispense.Id and Input-PrescriptionId«Create»MedicationDispensefromInput-Parameters[x].RxDispensation.part.MedicationDispenseidentifier[RxOriginatorProcessIdentifier] = Value(RxOriginatorProcessIdentifier)extension[RxPrescriptionProcessIdentifier] = Value(RxPrescriptionProcessIdentifier)medicationReference = Reference(Medication)performer.actor = Reference(Organization)authorizingPrescription = Reference(MedicationRequest) Check whetherInput-Parameters[x].RxDispensation.part.status exists yesnoSet status of theMedicationDispenseinstance to the value ofInput-Parameters[x].RxDispensation.part.statusSetMedicationDispenseinstance to statuscompletedGet nextMedicationDispensefrom currentRxDispensation Input-Parameterspart listno If nextMedicationDispenseinInput-Parameters RxDispensationpart list exists yesSetMedicationRequestwithRxPrescriptionProcessIdentifierto Statuscompletedyes Check whetherInput-Parameters[x].RxDispensation.part.statusnot exists or equalscompleted Add informationOperationOutcome(MEDICATIONSVC_OPERATION_SUCCESS) toOutput-ParametersAdd errorOperationOutcome(NO_VALID_STRUCTURE) toOutput-ParametersGet nextRxDispensationfromInput-ParametersnoIf nextInput-ParametersexistsyesReturn "Output-Parameters"
Abbildung: Geschäftslogik des Medication Service für die Operation Dispensierinformationen einstellen (E-Rezept-Fachdienst)

Sicherheitsanforderungen

Generelle Sicherheitsanforderungen werden hier festgehalten.