<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="KBV-PR-VoS-Bundle-PVS-VoS" />
  <url value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
  <version value="2.2.0" />
  <name value="KBV_PR_VoS_Bundle_PVS_VoS" />
  <title value="KBV_PR_VoS_Bundle_PVS_VoS" />
  <status value="draft" />
  <date value="2025-10-01" />
  <publisher value="Kassenärztliche Bundesvereinigung" />
  <description value="Bundle zum Aufruf der Verordnungssoftware, enthält die Composition mit dem Profil KBV_PR_VoS_Composition und alle darin referenzierten Ressourcen." />
  <fhirVersion value="4.0.1" />
  <kind value="resource" />
  <abstract value="false" />
  <type value="Bundle" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Bundle" />
  <derivation value="constraint" />
  <differential>
    <element id="Bundle">
      <path value="Bundle" />
      <short value="Aufruf-Bundle" />
      <definition value="Bundle mit kID und den Ressourcen, die für den Aufruf der VoS nötig sind" />
      <constraint>
        <key value="-vos-compositionPflicht" />
        <severity value="error" />
        <human value="Die Ressource vom Typ Composition muss genau einmal vorhanden sein" />
        <expression value="entry.where(resource is Composition).count()=1" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <constraint>
        <key value="-vos-versionComposition" />
        <severity value="error" />
        <human value="Die Instanz der Composition muss vom Profil KBV_PR_VoS_Composition|2.2.0 sein" />
        <expression value="entry.where(resource is Composition).resource.meta.profile.contains('https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Composition|2.2.0')" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <constraint>
        <key value="-vos-practitionerPflicht" />
        <severity value="error" />
        <human value="Die Übergabe einer Instanz zur behandelnden Person (KBV_PR_VoS_Practitioner|2.2.0) ist Pflicht." />
        <expression value="entry.where(resource.meta.profile = 'https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Practitioner|2.2.0' or resource.meta.profile = 'https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_User|2.2.0').exists()" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <constraint>
        <key value="-vos-ASV-Teamnummer" />
        <severity value="error" />
        <human value="Die ASV-Teamnummer muss in der PractitionerRole genau dann vorliegen, wenn die VoS im Rahmen eines ASV-Falls (Statuskennzeichen 01 oder 11) aufgerufen wird." />
        <expression value="entry.where(resource is Composition).resource.author.where(type='PractitionerRole').reference.resolve().organization.identifier.exists() xor (entry.where(resource is Composition).resource.extension('https://fhir.kbv.de/StructureDefinition/KBV_EX_FOR_Legal_basis').exists() and (entry.where(resource is Composition).resource.extension('https://fhir.kbv.de/StructureDefinition/KBV_EX_FOR_Legal_basis').value as Coding).code.toString().endsWith('1').not())" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <constraint>
        <key value="-vos-angabeOrganizationReferencePflicht" />
        <severity value="error" />
        <human value="Wenn in der Composition mindestens ein PractitionerRole als Author angegeben ist, muss in mindestens einer der referenzierten PractitionerRoles eine Verknüpfung zur Betriebsstätte (organization.reference) vorhanden sein." />
        <expression value="entry.where(resource is Composition).resource.author.where(type='PractitionerRole').reference.resolve().organization.reference.exists()" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <constraint>
        <key value="-vos-angabeRechtsgrundlagePflicht" />
        <severity value="error" />
        <human value="In der Ressource vom Typ Composition ist keine Rechtsgrundlage vorhanden, diese ist aber eine Pflichtangabe bei den Kostentraegern der Typen &quot;GKV&quot;, &quot;PKV&quot;, &quot;BG&quot;, &quot;SKT&quot; oder &quot;UK&quot; ein Pflichtelement." />
        <expression value="(entry.where(resource is Composition).exists() and &#xD;&#xA;                entry.where(resource is Coverage).exists() and &#xD;&#xA;                (entry.where(resource is Coverage).resource.type.coding.code='GKV' or &#xD;&#xA;                    entry.where(resource is Coverage).resource.type.coding.code='PKV'or &#xD;&#xA;                    entry.where(resource is Coverage).resource.type.coding.code='BG' or &#xD;&#xA;                    entry.where(resource is Coverage).resource.type.coding.code='SKT' or &#xD;&#xA;                    entry.where(resource is Coverage).resource.type.coding.code='UK')) &#xD;&#xA;                implies entry.where(resource is Composition).resource.extension('https://fhir.kbv.de/StructureDefinition/KBV_EX_FOR_Legal_basis').exists()" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <constraint>
        <key value="-vos-angabeArztnummerPflicht" />
        <severity value="error" />
        <human value="In einer Ressource vom Typ Practitioner ist kein LANR-Identifier angegeben; dies ist jedoch Pflicht, wenn die ausstellende Person (im Composition.author) die Qualifikation „Arzt“ (Code 00) oder „Arzt als Vertreter“ (Code 04) trägt." />
        <expression value="entry.where(resource is Composition).resource.author.where(type='PractitionerRole').reference.resolve().practitioner.reference.resolve().qualification.code.coding.where(system='https://fhir.kbv.de/CodeSystem/KBV_CS_FOR_Qualification_Type').all($this.code='00' or $this.code='04') implies entry.where(resource is Composition).resource.author.where(type='PractitionerRole').reference.resolve().practitioner.reference.resolve().identifier.where(type.coding.code='LANR').exists()" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <constraint>
        <key value="-erp-angabePatientenPLZPflicht" />
        <severity value="warning" />
        <human value="In der Ressource vom Typ Patient ist keine Postleitzahl vorhanden, diese ist aber eine Pflichtangabe bei den Kostentraegern der Typen Typ &quot;GKV&quot;, &quot;PKV&quot;, &quot;BG&quot;, &quot;SKT&quot; oder &quot;UK&quot; falls der Wohnsitzländercode der Versichertenanschrift den Wert &quot;D&quot; hat." />
        <expression value="(entry.where(resource is Patient).resource.address.country.exists() and entry.where(resource is Patient).resource.address.country = 'D' and (entry.where(resource is Coverage).resource.type.coding.code='GKV' or entry.where(resource is Coverage).resource.type.coding.code='BG' or entry.where(resource is Coverage).resource.type.coding.code='UK' or entry.where(resource is Coverage).resource.type.coding.code='PKV' or entry.where(resource is Coverage).resource.type.coding.code='SKT')) implies entry.where(resource is Patient).resource.address.postalCode.exists()" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <constraint>
        <key value="-erp-angabeVerantwortlichePersonVerbot-1" />
        <severity value="warning" />
        <human value="Eine Ressource vom Typ Practitioner wird als verantwortliche Person angegeben, diese darf aber nur angegeben werden, wenn es sich bei der ausstellenden Person um einen Arzt in Weiterbildung oder Arzt als Vertreter handelt." />
        <expression value="entry.where(resource is Composition).resource.attester.party.reference.exists() implies entry.where(resource is Composition).resource.author.reference.resolve().qualification.code.coding.where(system='https://fhir.kbv.de/CodeSystem/KBV_CS_FOR_Qualification_Type').all($this.code='03' or $this.code='04')" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <constraint>
        <key value="-erp-angabeVerantwortlichePersonVerbot-2" />
        <severity value="warning" />
        <human value="Eine Ressource vom Typ Practitioner wird als verantwortliche Person angegeben, diese darf aber nur angegeben werden, wenn es sich nicht um eine Hebamme oder einen Arzt in Weiterbildung handelt." />
        <expression value="entry.where(resource is Composition).resource.attester.party.reference.exists() implies entry.where(resource is Composition).resource.attester.party.reference.resolve().qualification.code.coding.where(system='https://fhir.kbv.de/CodeSystem/KBV_CS_FOR_Qualification_Type').all($this.code!='02' and $this.code!='03')" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <constraint>
        <key value="-vos-angabeIdentifikatorVerantwortlichePersonPflicht" />
        <severity value="error" />
        <human value="In der Ressource vom Typ Practitioner ist der Identifikator der verantwortlichen Person nicht vorhanden, dies ist jedoch Pflicht, wenn die behandelnde Person (PractitionerRole) ein Arzt in Weiterbildung ist (die Qualifikation Code „03“ trägt) und selbst keine Identifier besitzt." />
        <expression value="entry.where(resource is Composition).resource.author.where(type='PractitionerRole').reference.resolve().practitioner.reference.resolve().qualification.code.coding.where(system='https://fhir.kbv.de/CodeSystem/KBV_CS_FOR_Qualification_Type').all($this.code='03') and entry.where(resource is Composition).resource.author.where(type='PractitionerRole').reference.resolve().practitioner.reference.resolve().identifier.exists().not() implies entry.where(resource is Composition).resource.attester.party.reference.resolve().identifier.where(type.coding.code='LANR').exists()" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <constraint>
        <key value="-erp-angabeFachgruppennummerAsvAusstellendePersonVerbot" />
        <severity value="warning" />
        <human value="In einer Ressource vom Typ Practitioner ist eine ASV-Fachgruppennummer der ausstellenden Person vorhanden, diese darf aber nur angegeben werden, wenn die Rechtsgrundlage den Wert &quot;01&quot; oder &quot;11&quot; besitzt und wenn es sich um einen Arzt oder Arzt als Vertreter handelt, für den kein Identifikator angegeben ist." />
        <expression value="entry.where(resource is Composition).resource.author.reference.resolve().qualification.where(code.coding.system='https://fhir.kbv.de/NamingSystem/KBV_NS_FOR_Fachgruppennummer_ASV').exists() and entry.where(resource is Composition).resource.extension('https://fhir.kbv.de/StructureDefinition/KBV_EX_FOR_Legal_basis').exists() implies entry.where(resource is Composition).resource.extension('https://fhir.kbv.de/StructureDefinition/KBV_EX_FOR_Legal_basis').all(($this.value as Coding).code='01' or ($this.value as Coding).code='11') and entry.where(resource is Composition).resource.author.reference.resolve().qualification.code.coding.where(system='https://fhir.kbv.de/CodeSystem/KBV_CS_FOR_Qualification_Type').all($this.code='00' or $this.code='04') and entry.where(resource is Composition).resource.author.reference.resolve().identifier.exists().not()" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <constraint>
        <key value="-erp-angabeFachgruppennummerAsvVerantwortlichePersonVerbot" />
        <severity value="warning" />
        <human value="In einer Ressource vom Typ Practitioner ist eine ASV-Fachgruppennummer der verantwortlichen Person vorhanden, diese darf aber nur angegeben werden, wenn die Rechtsgrundlage den Wert &quot;01&quot; oder &quot;11&quot; besitzt und wenn es sich um einen Arzt oder Arzt als Vertreter handelt, für den kein Identifikator angegeben ist." />
        <expression value="entry.where(resource is Composition).resource.attester.exists() and entry.where(resource is Composition).resource.attester.party.reference.resolve().qualification.where(code.coding.system='https://fhir.kbv.de/NamingSystem/KBV_NS_FOR_Fachgruppennummer_ASV').exists() and entry.where(resource is Composition).resource.extension('https://fhir.kbv.de/StructureDefinition/KBV_EX_FOR_Legal_basis').exists() implies entry.where(resource is Composition).resource.extension('https://fhir.kbv.de/StructureDefinition/KBV_EX_FOR_Legal_basis').all(($this.value as Coding).code='01' or ($this.value as Coding).code='11') and entry.where(resource is Composition).resource.attester.party.reference.resolve().qualification.code.coding.where(system='https://fhir.kbv.de/CodeSystem/KBV_CS_FOR_Qualification_Type').all($this.code='00' or $this.code='04') and entry.where(resource is Composition).resource.attester.party.reference.resolve().identifier.exists().not()" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <constraint>
        <key value="-erp-angabeIKKostentraegerPflicht" />
        <severity value="warning" />
        <human value="In der Ressource vom Typ Coverage ist kein IK des Kostenträgers vorhanden, dies ist aber eine Pflichtangabe bei Kostenträgern vom Typ &quot;BG&quot; oder &quot;UK&quot;," />
        <expression value="(entry.where(resource is Coverage).exists() and (entry.where(resource is Coverage).resource.type.coding.code='BG' or entry.where(resource is Coverage).resource.type.coding.code='UK')) implies  entry.select(resource as Coverage).payor.identifier.extension('https://fhir.kbv.de/StructureDefinition/KBV_EX_FOR_Alternative_IK').exists()" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <constraint>
        <key value="-erp-angabePKVTarifVerbot" />
        <severity value="warning" />
        <human value="In der Ressource vom Typ Composition ist ein PKV-Tarif angegeben, dies darf aber nur bei einem Kostenträger vom Typ &quot;PKV&quot; erfolgen." />
        <expression value="entry.where(resource is Coverage).exists() and entry.where(resource is Coverage).resource.type.coding.code!='PKV' implies entry.where(resource is Composition).resource.extension('https://fhir.kbv.de/StructureDefinition/KBV_EX_FOR_PKV_Tariff').exists().not()" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <constraint>
        <key value="-erp-geburtsdatumPatient" />
        <severity value="warning" />
        <human value="Das Geburtsdatum des Patienten darf nicht nach dem Ausstellungsdatum liegen." />
        <expression value="entry.where(resource is Patient).exists() and entry.where(resource is Patient).resource.birthDate.extension.exists().not() and entry.where(resource is MedicationRequest).resource.authoredOn.exists() implies entry.where(resource is Patient).resource.birthDate.toString() = entry.where(resource is MedicationRequest).resource.authoredOn.toString().substring(0,4) or entry.where(resource is Patient).resource.birthDate.toString() = entry.where(resource is MedicationRequest).resource.authoredOn.toString().substring(0,7) or entry.where(resource is Patient).resource.birthDate &lt;= entry.where(resource is MedicationRequest).resource.authoredOn" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
    </element>
    <element id="Bundle.id">
      <path value="Bundle.id" />
      <short value="BundleID" />
      <definition value="Die ID des Bundles wird als kID beim Aufruf der VoS übertragen" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.meta">
      <path value="Bundle.meta" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.meta.source">
      <path value="Bundle.meta.source" />
      <max value="0" />
    </element>
    <element id="Bundle.meta.profile">
      <path value="Bundle.meta.profile" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="$this" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.meta.profile:vosProfile">
      <path value="Bundle.meta.profile" />
      <sliceName value="vosProfile" />
      <min value="1" />
      <max value="1" />
      <fixedCanonical value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS|2.2.0" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.meta.security">
      <path value="Bundle.meta.security" />
      <max value="0" />
    </element>
    <element id="Bundle.meta.tag">
      <path value="Bundle.meta.tag" />
      <max value="0" />
    </element>
    <element id="Bundle.implicitRules">
      <path value="Bundle.implicitRules" />
      <max value="0" />
    </element>
    <element id="Bundle.language">
      <path value="Bundle.language" />
      <max value="0" />
    </element>
    <element id="Bundle.identifier">
      <path value="Bundle.identifier" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.identifier.use">
      <path value="Bundle.identifier.use" />
      <max value="0" />
    </element>
    <element id="Bundle.identifier.type">
      <path value="Bundle.identifier.type" />
      <max value="0" />
    </element>
    <element id="Bundle.identifier.system">
      <path value="Bundle.identifier.system" />
      <min value="1" />
      <fixedUri value="https://fhir.kbv.de/NamingSystem/KBV_NS_VoS_BundleID" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.identifier.value">
      <path value="Bundle.identifier.value" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.identifier.period">
      <path value="Bundle.identifier.period" />
      <max value="0" />
    </element>
    <element id="Bundle.identifier.assigner">
      <path value="Bundle.identifier.assigner" />
      <max value="0" />
    </element>
    <element id="Bundle.type">
      <path value="Bundle.type" />
      <fixedCode value="document" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.timestamp">
      <path value="Bundle.timestamp" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.total">
      <path value="Bundle.total" />
      <max value="0" />
    </element>
    <element id="Bundle.link">
      <path value="Bundle.link" />
      <max value="0" />
    </element>
    <element id="Bundle.entry">
      <path value="Bundle.entry" />
      <short value="Ressourcen" />
      <definition value="Ressourcen, die für den Aufruf der VoS benötigt werden, inklusive der mandatorischen Composition-Ressource" />
      <min value="1" />
      <constraint>
        <key value="-vos-erlaubteRessourcen" />
        <severity value="error" />
        <human value="Es dürfen nur Ressourcen aus der VoS-SST und E-Rezept-Bundles übertragen werden." />
        <expression value="resource.meta.profile.startsWith('https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS') or resource.meta.profile.startsWith('https://fhir.kbv.de/StructureDefinition/KBV_PR_ERP_Bundle')" />
        <source value="https://fhir.kbv.de/StructureDefinition/KBV_PR_VoS_Bundle_PVS_VoS" />
      </constraint>
      <mustSupport value="true" />
    </element>
    <element id="Bundle.entry.link">
      <path value="Bundle.entry.link" />
      <max value="0" />
      <contentReference value="http://hl7.org/fhir/StructureDefinition/Bundle#Bundle.link" />
    </element>
    <element id="Bundle.entry.fullUrl">
      <path value="Bundle.entry.fullUrl" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.entry.resource">
      <path value="Bundle.entry.resource" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.entry.search">
      <path value="Bundle.entry.search" />
      <max value="0" />
    </element>
    <element id="Bundle.entry.request">
      <path value="Bundle.entry.request" />
      <max value="0" />
    </element>
    <element id="Bundle.entry.response">
      <path value="Bundle.entry.response" />
      <max value="0" />
    </element>
    <element id="Bundle.signature">
      <path value="Bundle.signature" />
      <max value="0" />
    </element>
  </differential>
</StructureDefinition>