<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="EndpointCertificateEx" />
  <url value="https://gematik.de/fhir/directory/StructureDefinition/EndpointCertificateEx" />
  <version value="1.3.0" />
  <name value="EndpointCertificateEx" />
  <title value="Endpoint Certificate Extension" />
  <status value="active" />
  <experimental value="false" />
  <date value="2025-02-26" />
  <publisher value="gematik GmbH" />
  <description value="X.509-Zertifikat eines Endpunkts, z. B. das Verschlüsselungszertifikat einer KIM-Mailadresse.&#xA;Die Extension ist wiederholbar, um Zertifikatswechsel (Rollover) abzubilden." />
  <fhirVersion value="4.0.1" />
  <kind value="complex-type" />
  <abstract value="false" />
  <context>
    <type value="element" />
    <expression value="Endpoint" />
  </context>
  <type value="Extension" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Extension" />
  <derivation value="constraint" />
  <differential>
    <element id="Extension">
      <path value="Extension" />
      <short value="Endpoint Certificate Extension" />
      <definition value="X.509-Zertifikat eines Endpunkts, z. B. das Verschlüsselungszertifikat einer KIM-Mailadresse.&#xA;Die Extension ist wiederholbar, um Zertifikatswechsel (Rollover) abzubilden." />
    </element>
    <element id="Extension.extension">
      <path value="Extension.extension" />
      <min value="1" />
    </element>
    <element id="Extension.extension:certificate">
      <path value="Extension.extension" />
      <sliceName value="certificate" />
      <short value="Zertifikat im DER-Format, Base64-kodiert" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Extension.extension:certificate.extension">
      <path value="Extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:certificate.url">
      <path value="Extension.extension.url" />
      <fixedUri value="certificate" />
    </element>
    <element id="Extension.extension:certificate.value[x]">
      <path value="Extension.extension.value[x]" />
      <min value="1" />
      <type>
        <code value="base64Binary" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="Extension.extension:serialNumber">
      <path value="Extension.extension" />
      <sliceName value="serialNumber" />
      <short value="Seriennummer des Zertifikats (dezimal)" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Extension.extension:serialNumber.extension">
      <path value="Extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:serialNumber.url">
      <path value="Extension.extension.url" />
      <fixedUri value="serialNumber" />
    </element>
    <element id="Extension.extension:serialNumber.value[x]">
      <path value="Extension.extension.value[x]" />
      <min value="1" />
      <type>
        <code value="string" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="Extension.extension:issuer">
      <path value="Extension.extension" />
      <sliceName value="issuer" />
      <short value="Distinguished Name des Ausstellers" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Extension.extension:issuer.extension">
      <path value="Extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:issuer.url">
      <path value="Extension.extension.url" />
      <fixedUri value="issuer" />
    </element>
    <element id="Extension.extension:issuer.value[x]">
      <path value="Extension.extension.value[x]" />
      <min value="1" />
      <type>
        <code value="string" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="Extension.extension:publicKeyAlgorithm">
      <path value="Extension.extension" />
      <sliceName value="publicKeyAlgorithm" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Extension.extension:publicKeyAlgorithm.extension">
      <path value="Extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:publicKeyAlgorithm.url">
      <path value="Extension.extension.url" />
      <fixedUri value="publicKeyAlgorithm" />
    </element>
    <element id="Extension.extension:publicKeyAlgorithm.value[x]">
      <path value="Extension.extension.value[x]" />
      <min value="1" />
      <type>
        <code value="Coding" />
      </type>
      <constraint>
        <key value="CodingSytemCodeInv" />
        <severity value="warning" />
        <human value="System and Code SHOULD be present" />
        <expression value="system.exists() and code.exists()" />
        <source value="https://gematik.de/fhir/directory/StructureDefinition/EndpointCertificateEx" />
      </constraint>
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/directory/ValueSet/CertificatePublicKeyAlgorithmVS" />
      </binding>
    </element>
    <element id="Extension.extension:period">
      <path value="Extension.extension" />
      <sliceName value="period" />
      <short value="Gültigkeitszeitraum: start = notBefore, end = notAfter" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Extension.extension:period.extension">
      <path value="Extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:period.url">
      <path value="Extension.extension.url" />
      <fixedUri value="period" />
    </element>
    <element id="Extension.extension:period.value[x]">
      <path value="Extension.extension.value[x]" />
      <min value="1" />
      <type>
        <code value="Period" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="Extension.extension:active">
      <path value="Extension.extension" />
      <sliceName value="active" />
      <short value="Zertifikat ist gültig bzw. nicht gesperrt" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Extension.extension:active.extension">
      <path value="Extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:active.url">
      <path value="Extension.extension.url" />
      <fixedUri value="active" />
    </element>
    <element id="Extension.extension:active.value[x]">
      <path value="Extension.extension.value[x]" />
      <min value="1" />
      <type>
        <code value="boolean" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="Extension.url">
      <path value="Extension.url" />
      <fixedUri value="https://gematik.de/fhir/directory/StructureDefinition/EndpointCertificateEx" />
    </element>
    <element id="Extension.value[x]">
      <path value="Extension.value[x]" />
      <max value="0" />
    </element>
  </differential>
</StructureDefinition>