NHS North West Genomics
2.2.0 - ci-build
NHS North West Genomics - Local Development build (v2.2.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
iGene Orders and Reports: how Alder Hey, Manchester Foundation Trust (MFT) and Liverpool Women's send genomic test orders directly to NW Genomics, and receive reports back, via the Regional Integration Engine (RIE).
This page isn't about one specific clinical test - it's about how three NHS Trusts (Alder Hey, MFT and Liverpool Women's), plus Clatterbridge for immunology, place genomic and immunology test orders directly with NW Genomics and receive reports back, rather than via a national order comms system. The underlying tests are whatever each Trust's clinicians order from the NW Genomics test directory.
flowchart LR
A[Clinician at Trust<br/>orders test] --> B[Order reaches<br/>NW Genomics via RIE]
B --> C[Testing<br/>performed]
C --> D[Report<br/>compiled]
D --> E[Report returned<br/>to Trust via RIE]
E --> F[Clinical decision]
| IHE Actor | Role |
|---|---|
| Order Placer | Manchester Foundation Trust (MFT) - NHS Trust, direct HL7 (EPIC and HODS) |
| Order Placer | Alder Hey - NHS Trust, direct HL7 (EPR: Meditech) |
| Order Placer | Liverpool Women's - NHS Trust, direct HL7 (EPR: Meditech) |
| Order Placer | Clatterbridge - NHS Trust, direct HL7 (EPR: Meditech) (Immunology test requests + Genomic and Immunology reports) |
| Intermediary | Regional Integration Engine (RIE) - see Regional Integration Engine (RIE) for its own use case detail |
| Order Filler | LIMS iGene - internal LIMS, master LIMS |
| Transaction | Description |
|---|---|
OML_O21 / FHIR O21 |
Laboratory order placement, Trust to RIE |
ORU_R01 |
Test report/result delivery, RIE to Trust |
Alder Hey, MFT and Liverpool Women's each send genomic orders directly to NW Genomics and receive reports back, rather than via a national order comms system - Clatterbridge does the same for immunology test requests, and additionally receives combined genomic and immunology reports.
Each Trust exports its order from its EPR to its own Trust Integration Engine
(TIE) as a local HL7 v2 ORM_O01 - see Regional Integration Engine (RIE) -
Order Process for what happens from here
onwards. How each Trust converts that local ORM_O01 into the NW Standard
before sending it to the RIE differs. The RIE then forwards the order to the
destination LIMS (iGene) as a V2 order:
ORM_O01 into a FHIR Message O21 (NW Standard).ORM_O01 to the NW HL7 Standard happens within the MFT TIE itself.flowchart LR
subgraph AH["Alder Hey / Liverpool Women's"]
EPR1["EPR (Meditech)"] --> TIE1[TIE] --> Conv["Docker service<br/>(Apache Camel + HAPI FHIR)"]
end
subgraph MFT["Manchester Foundation Trust (MFT)"]
EPR2["EPR (EPIC, HODS)"] --> TIE2["TIE<br/>(converts internally)"]
end
Conv -- "FHIR Message O21<br/>(NW Standard)" --> RIE
TIE2 -- "NW HL7 Standard<br/>ORM_O01" --> RIE
subgraph LIMS["Internal LIMS Systems"]
L1[LIMS iGene<br/>HL7 flavour A]
end
subgraph RIE["NW Genomics Regional Integration Engine"]
direction TB
T[Message Distribution and Transform to<br/>individual LIMS HL7]
end
RIE -- "Orders V2" --> L1
Reports flow back from the RIE to each Trust as ORU_R01, NW Standard - see
Regional Integration Engine (RIE) - Report Process
for the RIE-side detail (LIMS conversion, PDS/ODT validation and enrichment,
ODS-code routing). The diagram below shows the four Trusts covered by this use
case alongside the RIE and its internal LIMS - for each Trust the report
flows from the RIE to the Trust's TIE and on to the Trust's EPR.
flowchart LR
subgraph LIMS["Internal LIMS Systems"]
L1[LIMS iGene<br/>HL7 flavour A]
end
subgraph RIE["NW Genomics Regional Integration Engine"]
direction TB
T[Message Distribution and Transform to<br/>standardised HL7]
end
subgraph TR1G["Manchester Foundation Trust (MFT)"]
TIE1[TIE] --> EPR1["EPR (EPIC and HODS)"]
end
subgraph TR2G["Alder Hey"]
TIE2[TIE] --> EPR2["EPR (Meditech)"]
end
subgraph TR3G["Liverpool Women's"]
TIE3[TIE] --> EPR3["EPR (Meditech)"]
end
subgraph TR4G["Clatterbridge<br/>Immunology test requests +<br/>Genomic and Immunology reports"]
TIE4[TIE] --> EPR4["EPR (Meditech)"]
end
L1 -- Reports V2 --> RIE
RIE -- "NW Diagnostic Core Standard reports (ORU_R01)<br/>Genomics and Haemato-Oncology" --> TIE1
RIE -- "NW Diagnostic Core Standard reports (ORU_R01) Genomics" --> TIE2
RIE -- "NW Diagnostic Core Standard reports (ORU_R01) Genomics" --> TIE3
RIE -- "NW Diagnostic Core Standard reports (ORU_R01)<br/>Genomics and Immunology" --> TIE4
No Trust-specific future-state changes are planned beyond those already described for the RIE as a whole - see Regional Integration Engine (RIE) - Future Process, which covers potential interfacing with National Genomic Order Comms systems.
This use case uses the same Diagnostic Core and Genomic Model (Placer Order LAB-1 / Reports LAB-3) data models as the RIE generally - see Regional Integration Engine (RIE) - Data Models for the full detail, including the Account Number, Placer Order Number, NHS Number and Requested Procedure Code identifiers these Trusts' orders and reports carry.
These two Questionnaires are the actual LAB-1 data model for this use
case, in both HL7 v2 (ORM_O01/NW Standard) and FHIR (Message O21) form -
Genomic Test Order for the common
core order fields, NW Genomic General Test
Order for the default Ask
At Order Entry questions (Consent, infection risk, pregnancy/neonatal, etc.)
these four Trusts use. This is what Alder Hey, MFT, Liverpool Women's and
Clatterbridge's own EPR/TIE actually sends, described in Order
Process above.
The Laboratory Order O21 Mapping table below is a different thing, despite the name and heavy field overlap: it's the shape of iGene Laboratory Order Export, which documents LAB-2 - iGene's own daily CSV re-export of an order after it has been received (via LAB-1) or manually entered, not the LAB-1 message itself. It's reproduced here (for IG purposes, so this use case has its own worked mapping, rather than only a link that may drift from NEYManagementInformation.html over time) because most of its fields still apply once an order from these Trusts reaches iGene. There's an open TODO to look at whether the LAB-1 model (GenomicTestOrder/GenomicGeneralAskAtOrderEntry) and this LAB-2 model (iGeneLaboratoryOrderExport/iGeneWorkOrderExport) should eventually be merged into one - not attempted here, since the two currently serve different stages of the same order's journey.
| Field | Description | Type | FHIR Mapping |
|---|---|---|---|
PatientAccessionIdentifier |
iGene's internal patient accession number - see Patient Identifier | string | Patient.identifier (PatientIdentifier) |
NHSNumber |
Patient's NHS Number - see NHS Identifier | string | Patient.identifier (NHS Number) |
HospitalNumber |
Patient's hospital/medical record number - see Medical Record Number | string | Patient.identifier (MedicalRecordNumber) |
PatientFamilyName |
Patient's surname | string | Patient.name.family |
PatientGivenName |
Patient's first name | string | Patient.name.given |
DateOfBirth |
Patient's date of birth | date | Patient.birthDate |
AdministrativeSex |
Sex registered at birth | string | Patient.gender |
PostCode |
Patient's postcode | string | Patient.address.postalCode |
HospitalSpellIdentifier |
Identifier for the hospital spell/episode the order was placed under - see Hospital Provider Spell Identifier | string | ServiceRequest.encounter.identifier (HospitalProviderSpellIdentifier) |
OrderingProviderIdentifier |
Ordering clinician's professional identifier - see Practitioner Identifier | string | PractitionerRole.practitioner.identifier.value |
OrderingProviderName |
Ordering clinician's name | string | PractitionerRole.practitioner.display |
RequestingOrganisationCode |
Requesting Trust's ODS code - see Organisation Code | string | PractitionerRole.organization.identifier.value |
RequestingOrganisationName |
Requesting Trust's name | string | PractitionerRole.organization.display |
PlacerOrderNumber |
Order identifier assigned by the ordering Trust - see Order Identifier | string | ServiceRequest.identifier (OrderIdentifier, type=PLAC) |
FMIIdentifier |
Blank on every current example row - purpose not yet confirmed | string | ServiceRequest.identifier (TBD) |
FillerOrderNumber |
Order identifier assigned by iGene (the lab) - see Order Identifier | string | ServiceRequest.identifier (OrderIdentifier, type=FILL) |
OrderStatus |
Order's current status in iGene | string | ServiceRequest.status |
NGTDTestCode |
NHS England Genomic Test Directory test code | string | ServiceRequest.code |
NGTDTestName |
NHS England Genomic Test Directory test/package name | string | ServiceRequest.code.coding.display |
TestCode |
Local iGene short test code (e.g. ctDNA_M4) |
string | ServiceRequest.code.coding (second coding, local system TBD) |
TestAccessionIdentifier |
iGene's test-level accession number | string | ServiceRequest.identifier (system TBD) |
TestOrderDate |
Date/time the test was ordered | dateTime | ServiceRequest.authoredOn |
SpecimenTakenDateTime |
Date/time the specimen was taken from the patient | dateTime | Specimen.collection.collectedDateTime |
SpecimenReceivedDateTime |
Date/time the specimen was received in the lab | dateTime | Specimen.receivedTime |
SpecimenAccessionIdentifier |
Specimen's lab accession number - see Specimen Accession Number | string | Specimen.accessionIdentifier |
SpecimenTypeCode |
Coded specimen type (e.g. SAMPLE: BL) - normally SNOMED coded using the Specimen Type value set |
string | Specimen.type.coding.code |
SpecimenTypeDescription |
Specimen type, free text (e.g. Blood) | string | Specimen.type.coding.display |
Same underlying model as Laboratory Order O21 Mapping above, with one addition: unlike NE&Y's management-information copy (which strips the clinical PDF), the Laboratory Report these Trusts receive carries the full Narrative Report.
| Field | Description | Type | FHIR Mapping |
|---|---|---|---|
NHSNumber |
Patient's NHS Number - see NHS Identifier | string | Patient.identifier (NHS Number) - also echoed on DiagnosticReport.subject.identifier/ServiceRequest.subject.identifier |
HospitalNumber |
Patient's hospital/medical record number - see Medical Record Number | string | Patient.identifier (MedicalRecordNumber) |
PatientFamilyName |
Patient's surname | string | Patient.name.family |
PatientGivenName |
Patient's first name | string | Patient.name.given |
DateOfBirth |
Patient's date of birth | date | Patient.birthDate |
AdministrativeSex |
Sex registered at birth | string | Patient.gender |
PostCode |
Patient's postcode | string | Patient.address.postalCode |
HospitalSpellIdentifier |
Identifier for the hospital spell/episode the order was placed under - see Hospital Provider Spell Identifier | string | ServiceRequest.encounter.identifier (HospitalProviderSpellIdentifier) |
OrderingProviderIdentifier |
Ordering clinician's professional identifier - see Practitioner Identifier | string | PractitionerRole.practitioner.identifier.value |
OrderingProviderName |
Ordering clinician's name | string | PractitionerRole.practitioner.display |
RequestingOrganisationCode |
Requesting Trust's ODS code - see Organisation Code | string | PractitionerRole.organization.identifier.value |
RequestingOrganisationName |
Requesting Trust's name | string | PractitionerRole.organization.display |
PlacerOrderNumber |
Order identifier assigned by the ordering Trust - see Order Identifier | string | ServiceRequest.identifier (OrderIdentifier, type=PLAC) |
FillerOrderNumber |
Order identifier assigned by iGene (the lab) - see Order Identifier | string | ServiceRequest.identifier (OrderIdentifier, type=FILL), echoed on DiagnosticReport.basedOn |
OrderStatus |
Order's current status in iGene | string | ServiceRequest.status |
ReportStatusDateTime |
Date/time the report status was last updated | dateTime | DiagnosticReport.issued |
ReportIdentifier |
Report's identifier, once issued - see Report Identifier | string | DiagnosticReport.identifier (ReportIdentifier) |
NGTDTestCode |
NHS England Genomic Test Directory test code | string | DiagnosticReport.code.coding |
NGTDTestName |
NHS England Genomic Test Directory test/package name | string | DiagnosticReport.code.coding.display |
TestCode |
Local iGene short test code (e.g. ctDNA_M4) |
string | DiagnosticReport.code.coding (second coding, local system TBD) |
TestAccessionIdentifier |
iGene's test-level accession number | string | DiagnosticReport.identifier / ServiceRequest.identifier (system TBD) |
TestOrderDate |
Date/time the test was ordered | dateTime | ServiceRequest.authoredOn |
ObservationResultStatus |
Result status (F = finalised) |
string | DiagnosticReport.status |
ObservationDateTime |
Date/time the result was observed/produced | dateTime | DiagnosticReport.effectiveDateTime |
ObservationIdentifierCode |
Code identifying the result outcome - also known as the Genomics Test Outcome, see Genomic Test Outcome Codes | string | DiagnosticReport.conclusionCode.coding.code |
ObservationIdentifierDescription |
Display name for the result/analyte code above | string | DiagnosticReport.conclusionCode.coding.display |
Narrative Report |
The clinical PDF narrative report - not stripped for these Trusts, unlike NE&Y's management-information copy | Attachment | DiagnosticReport.presentedForm |
See ctDNA Management Information - Laboratory Report R01
Mapping for the
open questions the worked ctDNA example surfaces against this same model
(identifier ambiguity between FillerOrderNumber/TestAccessionIdentifier/
ReportIdentifier, and Specimen not currently being included in the R01
Bundle) - not repeated here since they aren't specific to this use case.
HODS-originated orders from MFT use PV1-3/PV1-4 non-standardly. MFT
sends orders from both EPIC and HODS through the same TIE (see
Actors above) - but HODS orders carry a site code in PV1-3
and a HODS Order Placer Number in PV1-4, rather than either field's
usual meaning. This IG's own PV1 definition models
PV1-3 as Assigned Patient Location (the ward/clinic/bed the patient is
assigned to, which can include a facility component) - a site code isn't
necessarily inconsistent with that, but isn't confirmed either. PV1-4
isn't modelled by this IG at all, and standard HL7 v2.5.1 defines it as
Admission Type, not an order identifier - HODS appears to be repurposing it
to carry an order-level identifier on what is otherwise a visit/admission
segment. Not yet resolved:
ORM_O01 into
the NW Standard (see Order Process above) currently reads
PV1-4 for HODS orders, or only looks at the usual ORC/OBR
placer-order fields.PV1-4 should map onto
ServiceRequest.identifier (OrderIdentifier, type=PLAC) the same way
PlacerOrderNumber does elsewhere in this use case's Laboratory Order O21
Mapping above, or whether it represents a
distinct identifier from a standard Placer Order Number.FHIR examples for the Laboratory Order (LAB-1) and Laboratory Report (LAB-3) interactions described above:
Includes:
Bundle following the laboratory-order MessageDefinitionORU^R01 into FHIR - converts a lab's own HL7 v2 report into a FHIR R01 MessageSee Developer Guides for the full notebook series.