NHS Digital FHIR Implementation Guide (Retired - 2.1.50)

This guidance is under active development by NHS Digital and content may be added or updated on a regular basis.

NHSDigital-Practitioner

Profile url
https://fhir.nhs.uk/StructureDefinition/NHSDigital-Practitioner

This profile is designed around Organisation Data Services and ODS should be used as the source of this data. From a technical perspective PDS data can be accessed:

This data can also be accessed via ODS Organisation/Practitioner Search

Note unlike NHS Digital HL7v3 and FHIR STU3, this profile is NOT using Spine Directory Services (SDS) identifiers and data items. SDS LDAP maybe be used as a source of this data. Differences may exist between ODS and SDS, in these cases ODS is regarded as being correct.



UK Core Practitioner

idΣ0..1string
metaΣ0..1Meta
implicitRulesΣ ?!0..1uri
language0..1codeBinding
text0..1Narrative
contained0..*Resource
extensionI0..*Extension
modifierExtension?! I0..*Extension
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uri
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uriFixed Value
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uriFixed Value
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uriFixed Value
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uriFixed Value
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uriFixed Value
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uriFixed Value
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
activeΣ0..1boolean
nameS Σ1..*HumanName
id0..1string
extensionI0..*Extension
systemΣ I0..1codeBinding
valueΣ1..1string
useΣ ?!1..1codeBinding
rankΣ0..1positiveInt
periodΣ I0..1Period
addressΣ0..*Address
genderΣ0..1codeBinding
birthDateΣ0..1date
photoI0..*Attachment
id0..1string
extensionI0..*Extension
modifierExtensionΣ ?! I0..*Extension
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
code1..1CodeableConcept
periodI0..1Period
id0..1string
extensionI0..*Extension
referenceΣ I0..1string
typeΣ0..1uriBinding
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
displayΣ0..1string
communication0..*CodeableConceptBinding

from UK Core Practitioner

idΣ0..1string
metaΣ0..1Meta
implicitRulesΣ ?!0..1uri
language0..1codeBinding
text0..1Narrative
contained0..*Resource
extensionI0..*Extension
modifierExtension?! I0..*Extension
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uri
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uriFixed Value
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uriFixed Value
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uriFixed Value
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uriFixed Value
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uriFixed Value
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uriFixed Value
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
activeΣ0..1boolean
nameS Σ1..*HumanName
id0..1string
extensionI0..*Extension
systemΣ I0..1codeBinding
valueΣ1..1string
useΣ ?!1..1codeBinding
rankΣ0..1positiveInt
periodΣ I0..1Period
addressΣ0..*Address
genderΣ0..1codeBinding
birthDateΣ0..1date
photoI0..*Attachment
id0..1string
extensionI0..*Extension
modifierExtensionΣ ?! I0..*Extension
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
code1..1CodeableConcept
periodI0..1Period
id0..1string
extensionI0..*Extension
referenceΣ I0..1string
typeΣ0..1uriBinding
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference()
displayΣ0..1string
communication0..*CodeableConceptBinding

keyhumanseverityexpression
prac-nmcNMC must be of the format NNANNNNAwarningidentifier.where(system='https://fhir.hl7.org.uk/Id/nmc-number').exists().not() or (identifier.where(system='https://fhir.hl7.org.uk/Id/nmc-number').exists() and identifier.where(system='https://fhir.hl7.org.uk/Id/nmc-number').value.matches('^[0-9]{2}[A-Z]{1}[0-9]{4}[A-Z]{1}$'))
prac-gmpGMP must be of the format GNNNNNNN and not be a spurious code (starts with G6 or G7)warningidentifier.where(system='https://fhir.hl7.org.uk/Id/gmp-number').exists().not() or (identifier.where(system='https://fhir.hl7.org.uk/Id/gmp-number').exists() and identifier.where(system='https://fhir.hl7.org.uk/Id/gmp-number').value.matches('^[G]{1}[01234589]{1}[0-9]{6}$'))
prac-gmcGMC must be of the format CNNNNNNNwarningidentifier.where(system='https://fhir.hl7.org.uk/Id/gmc-number').exists().not() or (identifier.where(system='https://fhir.hl7.org.uk/Id/gmc-number').exists() and identifier.where(system='https://fhir.hl7.org.uk/Id/gmc-number').value.matches('^[C]{1}[0-9]{7}$'))
prac-gphcGPHC must be of the format NNNNNNNwarningidentifier.where(system='https://fhir.hl7.org.uk/Id/gphc-number').exists().not() or (identifier.where(system='https://fhir.hl7.org.uk/Id/gphc-number').exists() and identifier.where(system='https://fhir.hl7.org.uk/Id/gphc-number').value.matches('^[0-9]{7}$'))
prac-hcpcHCPC must be of the format AANNNNNNwarningidentifier.where(system='https://fhir.hl7.org.uk/Id/hcpc-number').exists().not() or (identifier.where(system='https://fhir.hl7.org.uk/Id/hcpc-number').exists() and identifier.where(system='https://fhir.hl7.org.uk/Id/hcpc-number').value.matches('^[A-Z]{2}[0-9]{6}$'))
prac-dinDIN format must be NNNNNNwarningidentifier.where(system='https://fhir.hl7.org.uk/Id/din-number').exists().not() or (identifier.where(system='https://fhir.hl7.org.uk/Id/din-number').exists() and identifier.where(system='https://fhir.hl7.org.uk/Id/din-number').value.matches('^[0-9]{6}$'))
prac-sds-userProfessional code (GMC, GMP, NMC, etc) is preferred.warningidentifier.count() != 1 or (identifier.count() = 1 and identifier.where(system='https://fhir.nhs.uk/Id/sds-user-id').exists().not())


Must Support, Optional and Not Supported

Elements marked with a S MUST be supported by both producing and receiving systems. They should be populated if the data exists or the profile has made them mandatory.

The following elements SHOULD NOT are not expected to be supported by consuming or receiving systems.

  • qualification
  • photo

Elements that are neither marked as Must Support or listed as unsupported, are optional.

identifier

SHOULD contain a professional code.

The inclusion of a professional code is strongly recommended. For consultants and doctors a prescribing code should be present. Please see NHS Data Model and Dictionary for details on these code.

The SDS User Id should be sourced from NHS Identity (SmartCard), this is also held within the Spine Directory Service LDAP database.

FHIR identifier OID/HL7v3 HL7v2 ITK Format Description Professional Code Prescribing Code
https://fhir.hl7.org.uk/Id/gmp-number 2.16.840.1.113883.2.1.3.2.4.16.62 GMP G[1234589]NNNNNN General Medical Practitioner Code GENERAL MEDICAL PRACTITIONER PPD CODE Yes No, also include DIN
https://fhir.hl7.org.uk/Id/gmc-number 2.16.840.1.113883.2.1.3.2.4.16.63 GMC CNNNNNNN General Medical Council Code CONSULTANT_CODE Yes Yes
https://fhir.hl7.org.uk/Id/nmc-number NNANNNNA Nursing and Midwifery Council Code Yes Yes
https://fhir.hl7.org.uk/Id/gphc-number NNNNNNN General Pharmaceutical Council Code Yes Yes
https://fhir.hl7.org.uk/Id/hcpc-number AANNNNNN(*) Health and Care Professional Council Code Yes Yes
https://fhir.hl7.org.uk/Id/din-number 1.2.826.0.1285.0.2.1.54 NNNNNN DOCTOR INDEX NUMBER No Yes
https://fhir.nhs.uk/Id/sds-user-id 1.2.826.0.1285.0.2.0.65 SDS User ID No No

Format

  • N = any number
  • A = any alpha

(*) NHS Prescription Services systems require these prescriber codes to be 8 characters long. Additional zeroes (0) should be inserted immediately following the first 2 alpha characters to extend the code to 8 characters as necessary.

Code Format Example
GP/medical prescriber (DIN) NNNNNN 954000
Nurse prescriber (NMC) NNANNNNA 71A2998E
Pharmacist prescriber (GPHC) NNNNNNN 2033467
Optometrist prescriber NN-NNNNN 01-09491
Podiatrist prescriber (HCPC) CHNNNNNN CH029821
Physiotherapist prescriber (HCPC) PHNNNNNN PH095159
Radiographer prescriber (HCPC) RANNNNNN RA088262
Dietician prescriber (HCPC) DTNNNNNN DT012345
Paramedic prescriber (HCPC) PANNNNNN PA054321

The Doctor Index Number (DIN) will be present in the resource even if they are prescribing using a different prescribing code. This code is called the spurious code is held within the NHSDigital-PractitionerRole resource and MUST NOT be contained in the Practitioner resource.

In the example below, the practitioner (GP as they have a GMP Code) has a SDS User Id of 3415870201, GMP code of G1234567 and DIN code of 123456. If the GP was in a role, prescribing using a spurious code this would be found in the PractitionerRole.

{
  "resourceType": "Practitioner",
  ...
  "identifier": [
          {
            "system": "https://fhir.nhs.uk/Id/sds-user-id",
            "value": "3415870201"
          },
          {
            "system": "https://fhir.hl7.org.uk/Id/gmp-number",
            "value": "G1234567"
          },
          {
            "system": "https://fhir.hl7.org.uk/Id/din-number",
            "value": "123456"
          }
        ]
  ...
}

In the example below, the practitioner (Consultant as they have a GMC Code) has a SDS User Id of 1415870201, GMC code of C2134567.

{
  "resourceType": "Practitioner",
  ...
  "identifier": [
          {
            "system": "https://fhir.nhs.uk/Id/sds-user-id",
            "value": "1415870201"
          },
          {
            "system": "https://fhir.hl7.org.uk/Id/gmc-number",
            "value": "C2134567"
          }
        ]
  ...
}

Professional Code System Not Known

In cases where the profession code is present but it is not certain what type of code this is, the https://fhir.hl7.org.uk/Id/professional-code system should be used. In the example below, 2134567 is probably a raw GMC code (without the preceding C) but we are not certain.

{
  "resourceType": "Practitioner",
  ...
  "identifier": [
          {
            "system": "https://fhir.nhs.uk/Id/sds-user-id",
            "value": "1415870201"
          },
          {
            "system": "https://fhir.hl7.org.uk/Id/professional-code",
            "value": "2134567"
          }
        ]
  ...
}

Search Parameters

The following search parameters and search parameter combinations SHALL be supported.:

Name Type Description Conformance Path
adddress-postcode string A postalCode specified in an address SHOULD Practitioner.address.postalCode
identifier token Any identifier for the practitioner (e.g. GMP/GMC code) SHALL Practitioner.identifier
name string A server defined search that may match any of the string fields in the HumanName, including family, give, prefix, suffix, suffix, and/or text SHALL Practitioner.name

Additional parameters can be on Practitioner - Search Parameters

Mandatory Search Parameters

identifier

SHALL support searching a practitioner by an identifier such as an GMC using the identifier search parameter:

GET [base]/Practitioner?identifier={system|}[code]

Example:

GET [base]/Practitioner?identifier=https://fhir.hl7.org.uk/Id/gphc-number|97860456

name

SHALL support searching for a practitioner by a string match of any part of name using the name search parameter:

GET [base]/Practitioner?name=[string]

Example:

GET [base]/Practitioner?name=Smith

Optional Search Parameters

address-postcode

SHOULD support searching practitioner role by address-postcode search parameter:

GET [baseUrl]/Practitioner?address-postcode=[address-postcode]

Example:

GET [baseUrl]/Practitioner?address-postcode=NG10%201QQ

Return all Practitioner resources with Post Code of NG10 1QQ.

back to top