<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="erp-service-request-dispense-request" />
  <url value="https://gematik.de/fhir/erp-servicerequest/StructureDefinition/erp-service-request-dispense-request" />
  <version value="1.2.0" />
  <name value="ERPServiceRequestDispenseRequest" />
  <title value="ERP Service Request Abgabeanforderung" />
  <status value="active" />
  <experimental value="false" />
  <date value="2025-07-31" />
  <publisher value="gematik GmbH" />
  <description value="ServiceRequest, der zur Abgabe eines Rezepts verwendet wird" />
  <fhirVersion value="4.0.1" />
  <kind value="resource" />
  <abstract value="false" />
  <type value="ServiceRequest" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/ServiceRequest" />
  <derivation value="constraint" />
  <differential>
    <element id="ServiceRequest">
      <path value="ServiceRequest" />
      <constraint>
        <key value="servicerequest-dispense-request-1" />
        <severity value="error" />
        <human value="Wenn der Status aktiv ist, muss der Anforderer vorhanden sein." />
        <expression value="status = 'active' implies requester.exists()" />
        <source value="https://gematik.de/fhir/erp-servicerequest/StructureDefinition/erp-service-request-dispense-request" />
      </constraint>
      <constraint>
        <key value="servicerequest-dispense-request-2" />
        <severity value="error" />
        <human value="Wenn der Status aktiv ist, muss der E-Rezept-Token vorhanden sein." />
        <expression value="status = 'active' implies extension.where(url = 'https://gematik.de/fhir/erp-servicerequest/StructureDefinition/eprescription-token-ex').exists()" />
        <source value="https://gematik.de/fhir/erp-servicerequest/StructureDefinition/erp-service-request-dispense-request" />
      </constraint>
      <constraint>
        <key value="servicerequest-dispense-request-3" />
        <severity value="error" />
        <human value="Wenn der Status abgeschlossen ist, müssen die Abgabedaten vorhanden sein." />
        <expression value="status = 'completed' implies supportingInfo.where(type='MedicationDispense').exists()" />
        <source value="https://gematik.de/fhir/erp-servicerequest/StructureDefinition/erp-service-request-dispense-request" />
      </constraint>
      <constraint>
        <key value="servicerequest-dispense-request-4" />
        <severity value="error" />
        <human value="Wenn der Code für den Liefertyp 'alternative-address' ist, muss die Adresse angegeben werden." />
        <expression value="(status = 'active' and code.coding.where(system='https://gematik.de/fhir/erp-servicerequest/CodeSystem/delivery-type-cs').exists() and code.coding.where(system='https://gematik.de/fhir/erp-servicerequest/CodeSystem/delivery-type-cs').code = 'delivery-to-alternative-address') implies (extension.where(url = 'https://gematik.de/fhir/erp-servicerequest/StructureDefinition/alternative-delivery-address-ex').exists() and extension.where(url = 'https://gematik.de/fhir/erp-servicerequest/StructureDefinition/alternative-delivery-address-ex').value.empty().not())" />
        <source value="https://gematik.de/fhir/erp-servicerequest/StructureDefinition/erp-service-request-dispense-request" />
      </constraint>
    </element>
    <element id="ServiceRequest.extension">
      <path value="ServiceRequest.extension" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="url" />
        </discriminator>
        <ordered value="false" />
        <rules value="open" />
      </slicing>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.extension:EPrescriptionToken">
      <path value="ServiceRequest.extension" />
      <sliceName value="EPrescriptionToken" />
      <short value="The e-prescription token for delivery to the pharmacy can be provided here." />
      <comment value="The token is of the form '/Task/{PrescriptionID}/$accept?ac={AccessCode}. See [gemSpec_DM_eRp](https://fachportal.gematik.de/fachportal-import/files/gemSpec_DM_eRp_V1.5.0.pdf)'." />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="https://gematik.de/fhir/erp-servicerequest/StructureDefinition/eprescription-token-ex" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.extension:alternativeDeliveryAddress">
      <path value="ServiceRequest.extension" />
      <sliceName value="alternativeDeliveryAddress" />
      <short value="Alternative delivery address." />
      <definition value="If the ServiceRequest states that the delivery should be delivered to an alternative address, it must be stated here." />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="https://gematik.de/fhir/erp-servicerequest/StructureDefinition/alternative-delivery-address-ex" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.modifierExtension">
      <path value="ServiceRequest.modifierExtension" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="url" />
        </discriminator>
        <ordered value="false" />
        <rules value="open" />
      </slicing>
    </element>
    <element id="ServiceRequest.modifierExtension:medicationChanged">
      <path value="ServiceRequest.modifierExtension" />
      <sliceName value="medicationChanged" />
      <short value="Indicates whether the medication has been changed by the pharmacy." />
      <definition value="If the medication has been changed, the value is set to true." />
      <comment value="If the medication has been changed, the receiving system must display the changed medication to the receiving user." />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="https://gematik.de/fhir/erp-servicerequest/StructureDefinition/changed-medication-ex" />
      </type>
      <mustSupport value="true" />
      <isModifierReason value="If the medication has been changed, the receiving system must display the changed medication to the receiving user." />
    </element>
    <element id="ServiceRequest.identifier">
      <path value="ServiceRequest.identifier" />
      <slicing>
        <discriminator>
          <type value="pattern" />
          <path value="system" />
        </discriminator>
        <description value="Defines identifiers to be used in a process" />
        <rules value="open" />
      </slicing>
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.identifier:requestId">
      <path value="ServiceRequest.identifier" />
      <sliceName value="requestId" />
      <short value="Identifier that uniquely references a ServiceRequest." />
      <comment value="For referencing and assignment of ServiceRequest, e.g. if one ServiceRequest is to replace another, it is important to be able to make this assignment with the identifier. Can be mapped via a UUID, for example." />
      <min value="1" />
      <max value="1" />
      <type>
        <code value="Identifier" />
        <profile value="https://gematik.de/fhir/erp-servicerequest/StructureDefinition/erp-service-request-request-identifier" />
      </type>
    </element>
    <element id="ServiceRequest.requisition">
      <path value="ServiceRequest.requisition" />
      <short value="Identifier of the process. All ServiceRequests within a process receive the same ID." />
      <comment value="Is to be understood as a case or process ID in order to be able to track which request the ServiceRequest belongs to." />
      <min value="1" />
      <type>
        <code value="Identifier" />
        <profile value="https://gematik.de/fhir/erp-servicerequest/StructureDefinition/erp-service-request-procedure-identifier" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.status">
      <path value="ServiceRequest.status" />
      <short value="Indicates the processing status of a service request." />
      <comment value="If the status changes, this value is overwritten." />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/erp-servicerequest/ValueSet/service-request-status-vs" />
      </binding>
    </element>
    <element id="ServiceRequest.intent">
      <path value="ServiceRequest.intent" />
      <fixedCode value="filler-order" />
    </element>
    <element id="ServiceRequest.priority">
      <path value="ServiceRequest.priority" />
      <short value="Indicates the urgency of the request." />
      <definition value="The priority can be used to indicate the urgency of the request." />
      <comment value="Allowed values: routine | urgent" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/erp-servicerequest/ValueSet/service-request-priority-vs" />
      </binding>
    </element>
    <element id="ServiceRequest.code">
      <path value="ServiceRequest.code" />
      <short value="Indicates the type of service request." />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.code.coding">
      <path value="ServiceRequest.code.coding" />
      <slicing>
        <discriminator>
          <type value="pattern" />
          <path value="$this" />
        </discriminator>
        <description value="Differentiates between the service request type and additional information." />
        <ordered value="false" />
        <rules value="open" />
      </slicing>
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.code.coding:request-type">
      <path value="ServiceRequest.code.coding" />
      <sliceName value="request-type" />
      <short value="Indicates the type of service request." />
      <min value="1" />
      <max value="1" />
      <patternCoding>
        <system value="https://gematik.de/fhir/erp-servicerequest/CodeSystem/service-request-type-cs" />
        <code value="dispense-request" />
      </patternCoding>
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/erp-servicerequest/ValueSet/service-request-type-vs" />
      </binding>
    </element>
    <element id="ServiceRequest.code.coding:request-type.system">
      <path value="ServiceRequest.code.coding.system" />
      <min value="1" />
    </element>
    <element id="ServiceRequest.code.coding:request-type.code">
      <path value="ServiceRequest.code.coding.code" />
      <comment value="#dispense-request serves as a service request for a pharmacy to deliver a prescription." />
      <min value="1" />
    </element>
    <element id="ServiceRequest.code.coding:delivery-type">
      <path value="ServiceRequest.code.coding" />
      <sliceName value="delivery-type" />
      <short value="Indicates how the delivery should be made." />
      <definition value="The delivery type can be used to indicate how the delivery should be made. The following options are available: pickup-by-healthcare-service, pickup-by-patient, delivery-to-healthcare-service, delivery-to-alternative-address." />
      <comment value="If the delivery type is delivery-to-alternative-address, the alternative address must be specified in location." />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/erp-servicerequest/ValueSet/delivery-type-vs" />
      </binding>
    </element>
    <element id="ServiceRequest.code.coding:delivery-type.system">
      <path value="ServiceRequest.code.coding.system" />
      <min value="1" />
    </element>
    <element id="ServiceRequest.code.coding:delivery-type.code">
      <path value="ServiceRequest.code.coding.code" />
      <min value="1" />
    </element>
    <element id="ServiceRequest.subject">
      <path value="ServiceRequest.subject" />
      <short value="Patient for whom a dispense is requested on behalf of the patient." />
      <type>
        <code value="Reference" />
        <targetProfile value="https://gematik.de/fhir/erp-servicerequest/StructureDefinition/erp-service-request-patient" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.occurrence[x]">
      <path value="ServiceRequest.occurrence[x]" />
      <short value="Indicates the date when the medication should be delivered." />
      <type>
        <code value="dateTime" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.authoredOn">
      <path value="ServiceRequest.authoredOn" />
      <short value="Creation date of the request." />
      <comment value="Is initially created and then no longer changed." />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.requester">
      <path value="ServiceRequest.requester" />
      <short value="Inquiring facility or practitioner." />
      <comment value="The KIM address is already stored in the message header." />
      <type>
        <code value="Reference" />
        <targetProfile value="https://gematik.de/fhir/erp-servicerequest/StructureDefinition/erp-service-request-organization" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.supportingInfo">
      <path value="ServiceRequest.supportingInfo" />
      <slicing>
        <discriminator>
          <type value="pattern" />
          <path value="type" />
        </discriminator>
        <description value="Supporting information about dispense" />
        <rules value="open" />
      </slicing>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.supportingInfo:AbgabeDaten">
      <path value="ServiceRequest.supportingInfo" />
      <sliceName value="AbgabeDaten" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://gematik.de/fhir/erp-servicerequest/StructureDefinition/erp-service-request-medication-dispense" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.supportingInfo:AbgabeDaten.type">
      <path value="ServiceRequest.supportingInfo.type" />
      <short value="Dispense data that is also sent to the e-prescription server." />
      <min value="1" />
      <fixedUri value="MedicationDispense" />
    </element>
    <element id="ServiceRequest.note">
      <path value="ServiceRequest.note" />
      <short value="Further information on the dispense request." />
      <comment value="Any use cases that are not specified can be placed here in free text." />
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.note.time">
      <path value="ServiceRequest.note.time" />
      <comment value="This is used in order to sort the Annotations" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
  </differential>
</StructureDefinition>