<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="HealthcareServiceDirectory" />
  <url value="https://gematik.de/fhir/directory/StructureDefinition/HealthcareServiceDirectory" />
  <version value="1.1.1" />
  <name value="HealthcareServiceDirectory" />
  <title value="HealthcareService in gematik Directory" />
  <status value="active" />
  <experimental value="false" />
  <date value="2025-02-26" />
  <publisher value="gematik GmbH" />
  <description value="Defines the data structure for medical, regulatory and technical&#xA;organisations specific for german Healthcare and Telematics Infrastructure." />
  <fhirVersion value="4.0.1" />
  <kind value="resource" />
  <abstract value="false" />
  <type value="HealthcareService" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/HealthcareService" />
  <derivation value="constraint" />
  <differential>
    <element id="HealthcareService.id">
      <path value="HealthcareService.id" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.meta.tag">
      <path value="HealthcareService.meta.tag" />
      <slicing>
        <discriminator>
          <type value="pattern" />
          <path value="system" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <min value="1" />
      <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/HealthcareServiceDirectory" />
      </constraint>
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.meta.tag:Origin">
      <path value="HealthcareService.meta.tag" />
      <sliceName value="Origin" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/directory/ValueSet/OriginVS" />
      </binding>
    </element>
    <element id="HealthcareService.meta.tag:Origin.system">
      <path value="HealthcareService.meta.tag.system" />
      <min value="1" />
      <patternUri value="https://gematik.de/fhir/directory/CodeSystem/Origin" />
    </element>
    <element id="HealthcareService.extension">
      <path value="HealthcareService.extension" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="url" />
        </discriminator>
        <ordered value="false" />
        <rules value="open" />
      </slicing>
    </element>
    <element id="HealthcareService.extension:holderId">
      <path value="HealthcareService.extension" />
      <sliceName value="holderId" />
      <min value="0" />
      <max value="*" />
      <type>
        <code value="Extension" />
        <profile value="https://gematik.de/fhir/directory/StructureDefinition/holder-id-ex" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.extension:ownerTelematikId">
      <path value="HealthcareService.extension" />
      <sliceName value="ownerTelematikId" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="https://gematik.de/fhir/directory/StructureDefinition/OwnerTelematikIdEx" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.identifier">
      <path value="HealthcareService.identifier" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="system" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.identifier:TelematikID">
      <path value="HealthcareService.identifier" />
      <sliceName value="TelematikID" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Identifier" />
        <profile value="http://fhir.de/StructureDefinition/identifier-telematik-id" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.providedBy">
      <path value="HealthcareService.providedBy" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.category">
      <path value="HealthcareService.category" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/directory/ValueSet/healthcare-service-category-codes" />
      </binding>
    </element>
    <element id="HealthcareService.category.coding">
      <path value="HealthcareService.category.coding" />
      <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/HealthcareServiceDirectory" />
      </constraint>
    </element>
    <element id="HealthcareService.type">
      <path value="HealthcareService.type" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/directory/ValueSet/HealthcareServiceTypeVS" />
      </binding>
    </element>
    <element id="HealthcareService.type.coding">
      <path value="HealthcareService.type.coding" />
      <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/HealthcareServiceDirectory" />
      </constraint>
    </element>
    <element id="HealthcareService.specialty">
      <path value="HealthcareService.specialty" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/directory/ValueSet/HealthcareSpecialtyTypeVS" />
      </binding>
    </element>
    <element id="HealthcareService.specialty.coding">
      <path value="HealthcareService.specialty.coding" />
      <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/HealthcareServiceDirectory" />
      </constraint>
    </element>
    <element id="HealthcareService.location">
      <path value="HealthcareService.location" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.name">
      <path value="HealthcareService.name" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.telecom">
      <path value="HealthcareService.telecom" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.telecom.system">
      <path value="HealthcareService.telecom.system" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.telecom.value">
      <path value="HealthcareService.telecom.value" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.telecom.use">
      <path value="HealthcareService.telecom.use" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.coverageArea">
      <path value="HealthcareService.coverageArea" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.coverageArea.extension">
      <path value="HealthcareService.coverageArea.extension" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.coverageArea.extension:serviceCoverageArea">
      <path value="HealthcareService.coverageArea.extension" />
      <sliceName value="serviceCoverageArea" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="https://gematik.de/fhir/directory/StructureDefinition/ServiceCoverageArea" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.coverageArea.extension:serviceCoveragePostalCode">
      <path value="HealthcareService.coverageArea.extension" />
      <sliceName value="serviceCoveragePostalCode" />
      <min value="0" />
      <max value="*" />
      <type>
        <code value="Extension" />
        <profile value="https://gematik.de/fhir/directory/StructureDefinition/ServiceCoveragePostalCode" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.characteristic">
      <path value="HealthcareService.characteristic" />
      <slicing>
        <discriminator>
          <type value="pattern" />
          <path value="$this" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <short value="Physical Features &amp; Technical Services" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.characteristic.coding">
      <path value="HealthcareService.characteristic.coding" />
      <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/HealthcareServiceDirectory" />
      </constraint>
    </element>
    <element id="HealthcareService.characteristic:technicalCharacteristic">
      <path value="HealthcareService.characteristic" />
      <sliceName value="technicalCharacteristic" />
      <short value="Technical Services" />
      <min value="0" />
      <max value="*" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/directory/ValueSet/healthcareservice-technical-characteristic-vs" />
      </binding>
    </element>
    <element id="HealthcareService.characteristic:physicalFeatures">
      <path value="HealthcareService.characteristic" />
      <sliceName value="physicalFeatures" />
      <short value="Physical Features" />
      <min value="0" />
      <max value="*" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/directory/ValueSet/PhysicalFeaturesHealthCareServiceVS" />
      </binding>
    </element>
    <element id="HealthcareService.characteristic:physicalFeatures.extension:additionalNote">
      <path value="HealthcareService.characteristic.extension" />
      <sliceName value="additionalNote" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="https://gematik.de/fhir/directory/StructureDefinition/PhysicalFeaturesAdditionalNoteEX" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.communication">
      <path value="HealthcareService.communication" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.communication.coding">
      <path value="HealthcareService.communication.coding" />
      <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/HealthcareServiceDirectory" />
      </constraint>
    </element>
    <element id="HealthcareService.appointmentRequired">
      <path value="HealthcareService.appointmentRequired" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.availableTime">
      <path value="HealthcareService.availableTime" />
      <constraint>
        <key value="VZD-Service-Opening-TimeInv-1" />
        <severity value="error" />
        <human value="If the specialOpeningTimes extension is set, daysOfWeek, availableStartTime, and availableEndTime must not be set." />
        <expression value="extension('https://gematik.de/fhir/directory/StructureDefinition/SpecialOpeningTimesEX').exists() implies (daysOfWeek.empty() and availableStartTime.empty() and availableEndTime.empty())" />
        <source value="https://gematik.de/fhir/directory/StructureDefinition/HealthcareServiceDirectory" />
      </constraint>
      <constraint>
        <key value="VZD-Service-Opening-TimeInv-2" />
        <severity value="error" />
        <human value="If the specialOpeningTimes extension is not set, daysOfWeek, availableStartTime, and availableEndTime all must be set." />
        <expression value="extension('https://gematik.de/fhir/directory/StructureDefinition/SpecialOpeningTimesEX').empty() implies (daysOfWeek.exists() and availableStartTime.exists() and availableEndTime.exists())" />
        <source value="https://gematik.de/fhir/directory/StructureDefinition/HealthcareServiceDirectory" />
      </constraint>
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.availableTime.extension">
      <path value="HealthcareService.availableTime.extension" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="url" />
        </discriminator>
        <ordered value="false" />
        <rules value="open" />
      </slicing>
    </element>
    <element id="HealthcareService.availableTime.extension:specialOpeningTimes">
      <path value="HealthcareService.availableTime.extension" />
      <sliceName value="specialOpeningTimes" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="https://gematik.de/fhir/directory/StructureDefinition/SpecialOpeningTimesEX" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.availableTime.daysOfWeek">
      <path value="HealthcareService.availableTime.daysOfWeek" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.availableTime.allDay">
      <path value="HealthcareService.availableTime.allDay" />
      <max value="0" />
    </element>
    <element id="HealthcareService.availableTime.availableStartTime">
      <path value="HealthcareService.availableTime.availableStartTime" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.availableTime.availableEndTime">
      <path value="HealthcareService.availableTime.availableEndTime" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.notAvailable">
      <path value="HealthcareService.notAvailable" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.notAvailable.description">
      <path value="HealthcareService.notAvailable.description" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.notAvailable.during">
      <path value="HealthcareService.notAvailable.during" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.availabilityExceptions">
      <path value="HealthcareService.availabilityExceptions" />
      <mustSupport value="true" />
    </element>
    <element id="HealthcareService.endpoint">
      <path value="HealthcareService.endpoint" />
      <mustSupport value="true" />
    </element>
  </differential>
</StructureDefinition>