NHS England FHIR Implementation Guide (deprecated)

Important Announcement regarding this Implementation Guide
  • As of 04/10/2023, this implementation guide has been deprecated and all development on the legacy NHS England FHIR Implementation Guide assets has ceased.
  • Therefore, vendors looking to start new implementations or looking to update existing implementations should use the new NHS England Implementation Guide. Vendors continuing to implement legacy NHS England FHIR Implementation Guide based solutions do so at their own risk and on the understanding that no maintenance or support will be available.

NHSDigital-Immunization

Conformance url FHIR Module Maturity Level
https://fhir.nhs.uk/StructureDefinition/NHSDigital-Immunization Medications trial-use


Combined with UK Core Immunization

parentPresentI0..1Extension(boolean)
vaccinationProcedureS I0..1Extension(CodeableConcept)Binding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uri
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
statusS Σ ?!1..1codeBinding
systemΣ1..1uri
versionΣ0..1string
codeΣ1..1code
displayΣ1..1string
userSelectedΣ0..1boolean
textΣ0..1string
systemΣ1..1uri
versionΣ0..1string
codeΣ1..1code
displayΣ1..1string
userSelectedΣ0..1boolean
textΣ0..1string
referenceΣ I0..1string
typeΣ0..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uriFixed Value
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
displayΣ0..1string
referenceΣ I0..1string
typeΣ0..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
displayΣ0..1string
occurrenceDateTimedateTime
recordedS0..1dateTime
primarySourceS Σ1..1boolean
reportOriginS0..1CodeableConcept
referenceΣ I0..1string
typeΣ0..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
displayΣ0..1string
referenceΣ I0..1string
typeΣ0..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
displayΣ1..1string
lotNumberS0..1string
expirationDateS0..1date
systemΣ1..1uri
versionΣ0..1string
codeΣ1..1code
displayΣ1..1string
userSelectedΣ0..1boolean
textΣ0..1string
routeS0..1CodeableConceptBinding
doseQuantityS I0..1SimpleQuantity
functionΣ0..1CodeableConceptBinding
referenceΣ I0..1string
typeΣ1..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uri
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(Organization)
displayΣ0..1string
authorStringstring
authorReferenceReference(UK Core Practitioner | UK Core Patient | UK Core RelatedPerson | UK Core Organization)
timeΣ0..1dateTime
textΣ1..1markdown
systemΣ1..1uri
versionΣ0..1string
codeΣ1..1code
displayΣ1..1string
userSelectedΣ0..1boolean
textΣ0..1string
referenceΣ I0..1string
typeΣ0..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
displayΣ0..1string
isSubpotentΣ ?!0..1boolean
subpotentReason0..*CodeableConcept
documentType0..1string
reference0..1uri
publicationDate0..1dateTime
presentationDate0..1dateTime
programEligibility0..*CodeableConcept
fundingSource0..1CodeableConcept
date0..1dateTime
referenceΣ I0..1string
typeΣ0..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
displayΣ0..1string
reported0..1boolean
series0..1string
referenceΣ I0..1string
typeΣ0..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
displayΣ0..1string
targetDiseaseS0..*CodeableConceptBinding
doseNumberPositiveIntpositiveInt
doseNumberStringstring
seriesDosesPositiveIntpositiveInt
seriesDosesStringstring

parentPresentI0..1Extension(boolean)
vaccinationProcedureS I0..1Extension(CodeableConcept)Binding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uri
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
statusS Σ ?!1..1codeBinding
systemΣ1..1uri
versionΣ0..1string
codeΣ1..1code
displayΣ1..1string
userSelectedΣ0..1boolean
textΣ0..1string
systemΣ1..1uri
versionΣ0..1string
codeΣ1..1code
displayΣ1..1string
userSelectedΣ0..1boolean
textΣ0..1string
referenceΣ I0..1string
typeΣ0..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uriFixed Value
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
displayΣ0..1string
referenceΣ I0..1string
typeΣ0..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
displayΣ0..1string
occurrenceDateTimedateTime
recordedS0..1dateTime
primarySourceS Σ1..1boolean
reportOriginS0..1CodeableConcept
referenceΣ I0..1string
typeΣ0..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
displayΣ0..1string
referenceΣ I0..1string
typeΣ0..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
displayΣ1..1string
lotNumberS0..1string
expirationDateS0..1date
systemΣ1..1uri
versionΣ0..1string
codeΣ1..1code
displayΣ1..1string
userSelectedΣ0..1boolean
textΣ0..1string
routeS0..1CodeableConceptBinding
doseQuantityS I0..1SimpleQuantity
functionΣ0..1CodeableConceptBinding
referenceΣ I0..1string
typeΣ1..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ1..1uri
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(Organization)
displayΣ0..1string
authorStringstring
authorReferenceReference(UK Core Practitioner | UK Core Patient | UK Core RelatedPerson | UK Core Organization)
timeΣ0..1dateTime
textΣ1..1markdown
systemΣ1..1uri
versionΣ0..1string
codeΣ1..1code
displayΣ1..1string
userSelectedΣ0..1boolean
textΣ0..1string
referenceΣ I0..1string
typeΣ0..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
displayΣ0..1string
isSubpotentΣ ?!0..1boolean
subpotentReason0..*CodeableConcept
documentType0..1string
reference0..1uri
publicationDate0..1dateTime
presentationDate0..1dateTime
programEligibility0..*CodeableConcept
fundingSource0..1CodeableConcept
date0..1dateTime
referenceΣ I0..1string
typeΣ0..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
displayΣ0..1string
reported0..1boolean
series0..1string
referenceΣ I0..1string
typeΣ0..1uriBinding
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ0..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(UK Core Organization)
displayΣ0..1string
targetDiseaseS0..*CodeableConceptBinding
doseNumberPositiveIntpositiveInt
doseNumberStringstring
seriesDosesPositiveIntpositiveInt
seriesDosesStringstring

keyhumanseverityexpression
eps-2subject - An identifier reference or resource reference must be providedwarning(reference.exists() or (identifier.exists()))
patient-nhsSupplied NHS Number is outside the English and Welsh NHS Number range or length of the number is wrong.erroridentifier.where(system='https://fhir.nhs.uk/Id/nhs-number').exists().not() or (identifier.where(system='https://fhir.nhs.uk/Id/nhs-number').exists() and identifier.where(system='https://fhir.nhs.uk/Id/nhs-number').value.matches('^([456789]{1}[0-9]{9})$'))
performerAn identifier reference or resource reference must be providederror(reference.exists() or identifier.exists())


This conformance profile is based on the NHS Digital - Daily Clinical Vaccination Specification COVID 19 and is intended for internal use only.


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.

  • isSubpotent
  • subpotentReason
  • education
  • programEligibility
  • fundingSource

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


extension(vaccinationProcedure)

Where status=completed this is Mandatory.
This relates to the vaccine that was administered (procedure) and is a SNOMED CT from UKCoreVaccinationProcedure

In addition to the codes in the following codes are recommended.

Vaccination Procedure UK SNOMED self
Administration of first dose of SARS-CoV-2 (severe acute respiratory syndrome coronavirus 2) vaccine 1324681000000101
Administration of second dose of SARS-CoV-2 (severe acute respiratory syndrome coronavirus 2) vaccine 1324691000000104

"extension":  [
        {
            "url": "https://fhir.hl7.org.uk/StructureDefinition/Extension-UKCore-VaccinationProcedure",
            "valueCodeableConcept": {
                "coding":  [
                    {
                        "system": "http://snomed.info/sct",
                        "code": "1324681000000101",
                        "display": "Administration of first dose of severe acute respiratory syndrome coronavirus 2 vaccine (procedure)"
                    }
                ]
            }
        }
    ],


identifier

identifier.system

A URI for the system that has allocated the vaccination identifier. Note, this must be unique within a given Supplier system or instance of Supplier system

e.g.

  1. Example of a “single instance for all customers” Supplier system https://supplierABC/identifiers/vacc

  2. Example of “per customer instance” Supplier system https://supplierABC/ODSCode/NKO41/identifiers/vacc

identifier.value

A unique identifier for the vaccination record, that is consistent between any subsequent update or delete records.

Ideally this would be a GUID / UUID

Value in combination with UNIQUE_ID_URI must be globally unique In other words, a combination of identifier.value and identifier.system act as composite primary key to allow lookup of any Adverse Reactions records from the corresponding Adverse Reaction data file.

  1. UUID example: e045626e-4dc5-4df3-bc35-da25263f901e

  2. Example of a “single instance for all customers” Supplier system ACME-vacc123456

  3. Example of “per customer instance” Supplier system ACME-CUSTOMER1-vacc123456 ACME-CUSTOMER2-vacc123456


status

For a vaccination that has been administered, the status will be completed. This status does not indicate a vaccination course has been completed. When the vaccination has not been administered, the status will be not-done and a statusReason should be supplied.


vaccineCode

Where status is completed this is Mandatory. This indicates vaccine product administered. This should be a SNOMED CT code from UKCoreVaccineCode AMPP codes should not be used.

Vaccine Reference Set UK SNOMED Members Of UK SNOMED Descendents Of
Meningococcal ACWY vaccines 999000811000001105
Influenza vaccines prescribable within general practice 12465201000001105
Meningococcal B vaccines 999000831000001104
Pneumococcal vaccines 999000841000001106
Seasonal Flu vaccines 999000821000001101
COVID-19 vaccines 39330711000001103

"vaccineCode": {
        "coding":  [
            {
                "system": "http://snomed.info/sct",
                "code": "39114911000001105",
                "display": "COVID-19 Vaccine AstraZeneca (ChAdOx1 S [recombinant]) 5x10,000,000,000 viral particles/0.5ml dose solution for injection multidose vials (AstraZeneca)"
            }
        ]
    },


For EU/international purposes, a vaccination type code can be also be included. The SNOMED CT concept should be from Vaccines (GPS) - IPS and EU SNOMED CT Vaccine List (COVID-19)

"vaccineCode": {
        "coding":  [
            {
                "system": "http://snomed.info/sct",
                "code": "39114911000001105",
                "display": "COVID-19 Vaccine AstraZeneca (ChAdOx1 S [recombinant]) 5x10,000,000,000 viral particles/0.5ml dose solution for injection multidose vials (AstraZeneca)"
            },
            {
                "system": "http://snomed.info/sct",
                "code": "1119305005",
                "display": "SARS-CoV-2 antigen vaccine"
            }
        ]
    },


patient

A traced NHS Number SHOULD be provided and when applicable a resource reference to the Patient resource.

"patient": {
                    "reference": "urn:uuid:edea022a-2d81-11eb-adc1-0242ac120002",
                    "type": "Patient",
                    "identifier": {
                        "system": "https://fhir.nhs.uk/Id/nhs-number",
                        "value": "9912003888"
                    }
                },


occurrenceDateTime

The date and time on which the vaccination intervention was carried out or was meant to be administered.


recorded

The date that the vaccination administered (procedure) or not administered (situation) was recorded in the source system.


primarySource

Set as TRUE when the content of the record is based on information from the person performing the vaccine or who has clinical responsibility for the vaccination, and the system can be considered a primary source of the vaccination event. Set as FALSE when the information has NOT come directly from people performing the vaccine (e.g. a patient or patient’s carer), and the system should not be treated as a primary source for this record. This is used to help identify and eliminate duplicate records held centrally.


reportOrigin

Where primarySource=false,

  • The ODS code should be set to the location of the primary source of the data where the report of the vaccination event is held

Where primarySource=false and the vaccination event has been stored in local Primary Care System.

  • The ODS code should be set to the ODS code of the organisation where the event has been stored e.g. GP practice or PCN.
    Note this field will be used to determine whether or not to send the vaccination event to the patient’s registered GP

"reportOrigin": {
        "text": "RR8 - LEEDS TEACHING HOSPITALS NHS TRUST"
    },


location

Country where the vaccination took place. This should follow Using ISO 3166 Country Codes with FHIR or a SNOMED Country Code.


"location": {
        "identifier": {
            "system": "urn:iso:std:iso:3166",
            "value": "FR"
        },
        "display": "France"
    },


manufacturer

Manufacturer of vaccine product. Only the display is expected to be populated.


"manufacturer": {
        "display": "DREAMLAND Pharmaceuticals Ltd"
    },


lotNumber (Batch Number)

Where status=completed this is Mandatory. This should be captured at source ideally via use of automated scanning technology (GS1 GTIN / NTIN standard).


   "lotNumber": "R04X",


expirationDate

Shorter date of either:

  • Manufacturer expiry date of the vaccine
  • Coronavirus point of care sites will only put in the defrost expiry date

site

Body site vaccine was administered into. A SNOMED Concept ID value from UK published reference set “Vaccine body site of administration simple reference set” (1127941000000100) should be used UKCoreBodySite


"site": {
        "coding":  [
            {
                "system": "http://snomed.info/sct",
                "code": "368208006",
                "display": "Left upper arm structure (body structure)"
            }
        ]
    },


route

A SNOMED concept ID value from either of the following should be used: UK “ePrescribing route of administration simple reference set (foundation metadata concept)” (999000051000001100) UKCoreMedicationDosageRoute Or: UK published reference set “Vaccine route of administration simple reference set” (115231000001104)


 "route": {
        "coding":  [
            {
                "system": "http://snomed.info/sct",
                "code": "78421000",
                "display": "Intramuscular route (qualifier value)"
            }
        ]
    },


doseQuantity

A dm+d (SNOMED) Concept ID value representing the Unit of measure used.

For COVID-19 a reference set has been published here: https://dd4c.digital.nhs.uk/dd4c/publishedmetadatas/intid/980?size=10


 "doseQuantity": {
        "value": 1,
        "unit": "pre-filled disposable injection",
        "system": "http://snomed.info/sct",
        "code": "3318611000001100"
    },


performer (practitioner and organisation)

The organisation ODS code of the location where the vaccination event took place with corresponding system of https://fhir.nhs.uk/Id/ods-organization-code. For roving teams on home visits or care home visits use the site code of the responsible site e.g. GP practice or dedicated vaccination site. It is strongly recommend the name of the Organisation is present in the display field.

Vaccination professional should be recorded using professional codes, see NHSDigital-Practitioner for details.


"performer":  [
        {
            "actor": {
                "type": "Practitioner",
                "identifier": {
                    "system": "https://fhir.hl7.org.uk/Id/nmc-number",
                    "value": "5566789"
                },
                "display": "HOLDING, Rafferty"
            }
        },
        {
            "actor": {
                "type": "Organization",
                "identifier": {
                    "system": "https://fhir.nhs.uk/Id/ods-organization-code",
                    "value": "C4B2A"
                },
                "display": "ELLAND ROAD STADIUM - COVID VACCINATION CENTRE"
            }
        }
    ],


reasonCode

A SNOMED Concept Id. For COVID19 and Flu see https://digital.nhs.uk/developer/api-catalogue/vaccination


protocolApplied

doseNumberPositiveInt Nominal position in a series of vaccines, N.B. This field will not always be reliable, therefore for Covid vaccinations, the vaccination procedure code or situation code should be used as that includes the dose number


"protocolApplied":  [
        {
            "doseNumberPositiveInt": 1
        }
    ]


It is recommended for international/EU interoperability targetDisease is populated. The SNOMED CT concept should be from EU COVID-19 Diseases or Vaccine Target Diseases (GPS) - IPS

Disease UK SNOMED self
COVID-19 840539006
Others See Vaccine Target Diseases (GPS) - IPS


  "protocolApplied": [
    {
        "targetDisease": [
            {
                "coding": [
                    {
                        "system": "http://snomed.info/sct",
                        "code": "840539006",
                        "display": "COVID-19"
                    }
                ]
            }
        ],
        "doseNumberPositiveInt": 1
    }
]



SNOMED CT codes relating to COVID-19 Vaccination

A complete list of SNOMED CT Codes relating to this profile can be found here SNOMED CT codes relating to COVID-19 Vaccination

Search Parameters

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

  • patient:identifier + procedure-code:below
Name Type Description Conformance Path
date date Vaccination (non-)Administration Date SHOULD Immunization.date
patient:identifier token The patient for the vaccination record SHALL Immunization.patient (Patient)
procedure-code token The target disease and dose number the dose is being administered against MAY Immunization.extension:vaccinationProcedure
status token Immunization event status MAY Immunization.status

Additional parameters can be on Immunization - Search Parameters

Mandatory Search Parameters

patient:identifier

SHALL support searching using the patient:identifier search parameter:

GET [baseUrl]/Immunization?patient:identifier={system|}[code]

Example:

GET [baseUrl]/Immunization?patient:identifier=https://fhir.nhs.uk/Id/nhs-number|9876543210

GET [baseUrl]/Immunization?patient:identifier=9876543210

Return all Immunization resources for Patients with a NHS Number of 9876543210


Optional Search Parameters

date + patient:identifier

SHOULD support searching using the combination of the patient:identifier and date search parameters

  • including support for these date comparators: gt,lt,ge,le-
  • including optional support for composite AND search on date (e.g.date=[date]&date=[date]]&...)
GET [baseUrl]/Immunization?patient.identifier={system|}[code]&date=[date]

Example

GET [baseUrl]/Immunization?patient:identifier=9876543210&date=ge2010-01-01&date=le2011-12-31

Return all Immunization resources that have a date greater than or equal to 1st Jan 2010, a date less than or equal to 31st Dec 2011 and Patient with an identifier of 9876543210.

procedure-code + patient:identifier

SHOULD support searching using the combination of the patient:identifier and procedure-code search parameters

  • including optional support for composite OR search on procedure-code (e.g. procedure-code={system|}[code],{system|}[code],...)
GET [baseUrl]/Immunization?patient:identifier={system|}[code]&procedure-code={system|}[code]

Example:

GET [baseUrl]/Immunization?patient:identifier=9876543210&procedure-code=http://snomed.info/sct|1324681000000101,1324691000000104

Return all Immunization resources with a procedure-code of SNOMED CT 1324681000000101 or 1324691000000104 and Patient with a identifier of 9876543210.

status + patient:identifier

SHOULD support searching using the combination of the patient:identifier and status search parameters

GET [baseUrl]/Immunization?patient:identifier={system|}[code]&status=[code]

Example:

To filter on status ( in-progress | on-hold | completed | entered-in-error | stopped )

GET [baseUrl]/Immunization?patient:identifier=9876543210&status=on-hold

Return all Immunization resources with a status of on-hold and Patient with a identifier of 9876543210.

back to top