<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="Extension-England-HealthcareServiceEligibility" />
  <url value="https://fhir.nhs.uk/England/StructureDefinition/Extension-England-HealthcareServiceEligibility" />
  <version value="0.1.0" />
  <name value="ExtensionEnglandHealthcareServiceEligibility" />
  <title value="Extension England HealthcareService Eligibility" />
  <status value="draft" />
  <date value="2026-04-15" />
  <publisher value="NHS England" />
  <contact>
    <name value="NHS England" />
    <telecom>
      <system value="email" />
      <value value="interoperabilityteam@nhs.net" />
      <use value="work" />
    </telecom>
  </contact>
  <description value="Extension on HealthcareService.eligibility to indicate whether a service is restricted or unrestricted, and to list permitted GP service organisations." />
  <purpose value="Supports eligibility-based access control for HealthcareService in Directory of Services use cases." />
  <fhirVersion value="4.0.1" />
  <kind value="complex-type" />
  <abstract value="false" />
  <context>
    <type value="element" />
    <expression value="HealthcareService.eligibility" />
  </context>
  <type value="Extension" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Extension" />
  <derivation value="constraint" />
  <differential>
    <element id="Extension">
      <path value="Extension" />
      <max value="1" />
      <constraint>
        <key value="elig-1" />
        <severity value="error" />
        <human value="If restricted is true, at least one permitted service must be provided." />
        <expression value="extension.where(url='restricted').valueBoolean = false or extension.where(url='services').exists()" />
      </constraint>
    </element>
    <element id="Extension.extension">
      <path value="Extension.extension" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="url" />
        </discriminator>
        <description value="Slices for restricted flag and permitted services" />
        <ordered value="false" />
        <rules value="open" />
      </slicing>
      <min value="1" />
      <max value="*" />
    </element>
    <element id="Extension.extension:restricted">
      <path value="Extension.extension" />
      <sliceName value="restricted" />
      <short value="Restricted indicator" />
      <definition value="Indicates whether eligibility is restricted (true) or unrestricted (false)." />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Extension.extension:restricted.url">
      <path value="Extension.extension.url" />
      <fixedUri value="restricted" />
    </element>
    <element id="Extension.extension:restricted.valueBoolean">
      <path value="Extension.extension.valueBoolean" />
      <min value="1" />
      <max value="1" />
      <type>
        <code value="boolean" />
      </type>
    </element>
    <element id="Extension.extension:services">
      <path value="Extension.extension" />
      <sliceName value="services" />
      <short value="Permitted GP service organisations" />
      <definition value="Reference to an Organization permitted under this eligibility rule." />
      <min value="0" />
      <max value="*" />
    </element>
    <element id="Extension.extension:services.url">
      <path value="Extension.extension.url" />
      <fixedUri value="services" />
    </element>
    <element id="Extension.extension:services.valueReference">
      <path value="Extension.extension.valueReference" />
      <min value="1" />
      <max value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="http://hl7.org/fhir/StructureDefinition/Organization" />
      </type>
    </element>
    <element id="Extension.url">
      <path value="Extension.url" />
      <fixedUri value="https://fhir.nhs.uk/England/StructureDefinition/Extension-England-HealthcareServiceEligibility" />
    </element>
    <element id="Extension.value[x]">
      <path value="Extension.value[x]" />
      <max value="0" />
    </element>
  </differential>
</StructureDefinition>