<StructureDefinition xmlns="http://hl7.org/fhir">
  <url value="https://fhir.gevko.de/StructureDefinition/PR_OSC_Consent_LE_VZ" />
  <version value="1.1.0" />
  <name value="PR_OSC_Consent_LE_VZ" />
  <status value="active" />
  <fhirVersion value="4.0.1" />
  <kind value="resource" />
  <abstract value="false" />
  <type value="Consent" />
  <baseDefinition value="https://fhir.gevko.de/StructureDefinition/PR_OSC_Consent" />
  <derivation value="constraint" />
  <differential>
    <element id="Consent">
      <path value="Consent" />
      <constraint>
        <key value="req-01" />
        <requirements value="Wenn es sich nicht um eine Ablehnung handelt, muss die Extension für Bereinigungsrelavent gesetzt werden." />
        <severity value="error" />
        <human value="Wenn status = rejected, dann wird 'Consent.extension:bereinigungsrelevant' obligatorisch." />
        <expression value="(extension.where(url = 'https://fhir.gevko.de/StructureDefinition/EX_OSC_Bereinigungsrelevant').exists()) or (status = 'rejected')" />
        <source value="https://fhir.gevko.de/StructureDefinition/PR_OSC_Consent_LE_VZ" />
      </constraint>
      <constraint>
        <key value="req-02" />
        <requirements value="Wenn es sich um eine Ablehung handelt, muss die Extension für den Ablehungsgrund gesetzt werden." />
        <severity value="error" />
        <human value="Wenn status = rejected, dann wird 'Consent.extension:ablehnungsgrund' obligatorisch." />
        <expression value="(extension.where(url = 'https://fhir.gevko.de/StructureDefinition/EX_OSC_Ablehnung').exists()) or (status != 'rejected')" />
        <source value="https://fhir.gevko.de/StructureDefinition/PR_OSC_Consent_LE_VZ" />
      </constraint>
      <constraint>
        <key value="req-03" />
        <requirements value="Wenn es sich um eine Ablehung zur Korrektur, Stornierung oder Änderung handelt (AMVVZ), muss die Extension für die abgelehnte Meldung gesetzt werden." />
        <severity value="error" />
        <human value="Wenn status = rejected (amvvz), dann wird 'Consent.extension:abgelehnte_meldung' obligatorisch." />
        <expression value="(extension.where(url = 'https://fhir.gevko.de/StructureDefinition/EX_OSC_Abgelehnte_Meldung').exists()) or (status.extension.where(url = 'https://fhir.gevko.de/StructureDefinition/EX_OSC_Status_Erweiterung').value.code.empty() or status.extension.where(url = 'https://fhir.gevko.de/StructureDefinition/EX_OSC_Status_Erweiterung').value.code != 'amvvz')" />
        <source value="https://fhir.gevko.de/StructureDefinition/PR_OSC_Consent_LE_VZ" />
      </constraint>
    </element>
    <element id="Consent.extension:ersteinschreibung">
      <path value="Consent.extension" />
      <sliceName value="ersteinschreibung" />
      <max value="0" />
    </element>
    <element id="Consent.extension:vertrag">
      <path value="Consent.extension" />
      <sliceName value="vertrag" />
    </element>
    <element id="Consent.extension:vertrag.value[x]">
      <path value="Consent.extension.value[x]" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://fhir.gevko.de/StructureDefinition/PR_OSC_Contract_LE" />
      </type>
    </element>
    <element id="Consent.extension:endegrund">
      <path value="Consent.extension" />
      <sliceName value="endegrund" />
    </element>
    <element id="Consent.extension:endegrund.extension:grund">
      <path value="Consent.extension.extension" />
      <sliceName value="grund" />
    </element>
    <element id="Consent.extension:endegrund.extension:grund.value[x].coding:versicherter">
      <path value="Consent.extension.extension.value[x].coding" />
      <sliceName value="versicherter" />
      <max value="0" />
    </element>
    <element id="Consent.extension:stornogrund">
      <path value="Consent.extension" />
      <sliceName value="stornogrund" />
    </element>
    <element id="Consent.extension:stornogrund.extension:grund">
      <path value="Consent.extension.extension" />
      <sliceName value="grund" />
    </element>
    <element id="Consent.extension:stornogrund.extension:grund.value[x].coding:versicherter">
      <path value="Consent.extension.extension.value[x].coding" />
      <sliceName value="versicherter" />
      <max value="0" />
    </element>
    <element id="Consent.extension:betreuung">
      <path value="Consent.extension" />
      <sliceName value="betreuung" />
      <max value="0" />
    </element>
    <element id="Consent.extension:ablehungsgrund">
      <path value="Consent.extension" />
      <sliceName value="ablehungsgrund" />
    </element>
    <element id="Consent.extension:ablehungsgrund.extension:grund">
      <path value="Consent.extension.extension" />
      <sliceName value="grund" />
    </element>
    <element id="Consent.extension:ablehungsgrund.extension:grund.value[x].coding:versicherter">
      <path value="Consent.extension.extension.value[x].coding" />
      <sliceName value="versicherter" />
      <max value="0" />
    </element>
    <element id="Consent.extension:identifikation">
      <path value="Consent.extension" />
      <sliceName value="identifikation" />
      <max value="0" />
    </element>
    <element id="Consent.extension:identifikation.extension:versichertennr_egk_te">
      <path value="Consent.extension.extension" />
      <sliceName value="versichertennr_egk_te" />
    </element>
    <element id="Consent.extension:identifikation.extension:versichertennr_egk_te.value[x].type.coding">
      <path value="Consent.extension.extension.value[x].type.coding" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="system" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <min value="1" />
    </element>
    <element id="Consent.extension:teilnahme_zeitraum">
      <path value="Consent.extension" />
      <sliceName value="teilnahme_zeitraum" />
      <min value="1" />
    </element>
    <element id="Consent.extension:teilnahme_zeitraum.extension:zeitraum">
      <path value="Consent.extension.extension" />
      <sliceName value="zeitraum" />
      <min value="1" />
    </element>
    <element id="Consent.extension:teilnahme_zeitraum.extension:zeitraum.value[x].start">
      <path value="Consent.extension.extension.value[x].start" />
      <min value="1" />
    </element>
    <element id="Consent.extension:teilnahme_zeitraum.extension:leistungserbringer">
      <path value="Consent.extension.extension" />
      <sliceName value="leistungserbringer" />
      <min value="1" />
    </element>
    <element id="Consent.extension:teilnahme_zeitraum.extension:leistungserbringer.extension:le_rolle">
      <path value="Consent.extension.extension.extension" />
      <sliceName value="le_rolle" />
      <min value="1" />
    </element>
    <element id="Consent.identifier:teilnahme_id_intern">
      <path value="Consent.identifier" />
      <sliceName value="teilnahme_id_intern" />
      <min value="1" />
    </element>
    <element id="Consent.identifier:dpcm_id">
      <path value="Consent.identifier" />
      <sliceName value="dpcm_id" />
      <max value="0" />
    </element>
    <element id="Consent.category:verarbeitungskennzeichen_versicherter">
      <path value="Consent.category" />
      <sliceName value="verarbeitungskennzeichen_versicherter" />
      <max value="0" />
    </element>
    <element id="Consent.category:verarbeitungskennzeichen_le">
      <path value="Consent.category" />
      <sliceName value="verarbeitungskennzeichen_le" />
      <max value="0" />
    </element>
    <element id="Consent.patient">
      <path value="Consent.patient" />
      <max value="0" />
    </element>
    <element id="Consent.performer">
      <path value="Consent.performer" />
      <min value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://fhir.gevko.de/StructureDefinition/PR_OSC_Practitioner" />
      </type>
    </element>
  </differential>
</StructureDefinition>