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