Care Coordination and 360 Referrals (Proof of Concept)
0.1.0 - proof-of-concept
Care Coordination and 360 Referrals (Proof of Concept) - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
A detailed review of the Booking and Referral Standard (BaRS) against IHE 360X and the general standards (HL7 v2, FHIR Workflow, FHIR Messaging). It replaces a summary judgement with evidence from the BaRS implementation guide and API specification. Each finding quotes the source; points not checked are marked To confirm.
hl7.fhir.eu.eps, 2026-06-06; CI build)| # | Question | Finding | This guide |
|---|---|---|---|
| - | Is BaRS close to 360X? | Yes, in shape. Asynchronous request and response messages, with sender and receiver swapping roles, cover request, accept / reject, cancel, booking, did not attend and a final outcome - the 360X loop. Application 4 (validation) is the closest | Map each BaRS message to a 360X transaction - below |
| 1 | Are the message payloads strictly defined? | No. A MessageDefinition lists every resource in the Bundle as a focus, and conformance is "a manual, business logic, check" |
One MessageDefinition per event, one focus, validatable profiles |
| 2 | Is the referral a ServiceRequest or a Task? | Workflow state is spread over ServiceRequest.status, Encounter.status and CarePlan.status. Application 5 adds a Task, but as the instruction to the receiver (what to do, by when), not as the fulfilment of the ServiceRequest |
360X workflow state belongs in a Task that fulfils the ServiceRequest; what is requested is ServiceRequest.code - Open whether PCC-55 should focus on the Task |
| 3 | What is the BaRS CarePlan? | The sender's assessment outcome (triage disposition codes and consultation narrative), status fixed completed - closer to a referral form than a care plan |
Referral supporting information; CarePlan is kept for "who is doing what" (DCP) |
| 4 | How is a patient without an NHS Number identified? | A "Local patient identifier" with no type or assigning organisation | MRN with identifier type MR and the assigning organisation (ODS code) |
| 5 | Are payloads proportionate? | Organisations, practitioners, locations and services are sent as full resources, many "MUST" | Identifier references (ODS, professional codes) unless more is needed |
| 6 | Can an implementer tell what each message contains? | With difficulty. The meaning of a message comes from combinations of codes and statuses, and receivers may define their own MessageDefinitions | Explicit event and status codes |
| 7 | Is the referral payload in line with existing practice? | No (Application 5). The referral is mixed with the sender's consultation: Encounter, Condition, CarePlan, Task and MedicationStatement each carry part of the request | ServiceRequest with code, reasonCode, requester (PractitionerRole), encounter (Visit Number); the consultation as supportingInfo - below |
| 8 | How should a system adopt BaRS? | - | Behind an anti-corruption layer, so BaRS models stay at the edge - below |
$process-message endpoint to be able to support the asynchronous workflows"
(API v1.0.7). This is the same transport as this guide's FHIR route
(Exchange Options).X-Request-Id) and
defined error responses (OperationOutcome).A BaRS message is identified by MessageHeader.eventCoding (servicerequest-request,
servicerequest-response, booking-request), MessageHeader.reason (new, update)
and the MessageDefinition it claims. The MessageDefinitions in the API specification
include bars-message-servicerequest-request-referral, -request-validation,
-request-cancelled, -response-referral, -response-referral-short,
-response-validation-interim, -response-validation-full, bars-message-booking-request
and -booking-request-cancelled.
| 360X | HL7 v2 (360X) | BaRS | How BaRS signals it |
|---|---|---|---|
| Referral Request [PCC-55] | OMG^O19 ORC-1 NW |
servicerequest-request, reason new |
ServiceRequest.status active; ServiceRequest.category referral type and use case |
| Accept [PCC-55] | OSU^O51 OK / IP |
Interim Validation Response (Application 4) | Responder's Encounter.status in-progress |
| Decline [PCC-55] | OSU^O51 UA / CA |
Interim Validation Response, rejected (Application 4) | Responder's Encounter.status cancelled with a reason |
| Later decline [PCC-56] | OSU^O51 |
- To confirm | |
| Cancellation [PCC-58] | OSU^O51 CA / CR |
servicerequest-request, reason update |
ServiceRequest.status revoked (or entered-in-error if sent to the wrong endpoint). No cancel confirmation found - To confirm |
| Interim Consultation Note [PCC-59] | OSU^O51 SC / A + document |
- | No clinical document; the interim response is a status |
| Referral Outcome [PCC-57] | OSU^O51 SC / CM + document |
Validation Response (full) (Application 4) | ServiceRequest.status completed, Encounter triaged / complete |
| Appointment [PCC-60] | SIU^S12 |
booking-request, reason new (sender books) |
Appointment.status booked, linked to the referral |
| Appointment cancelled / changed | SIU^S15 / S13 |
booking-request, reason update |
Appointment.status cancelled / booked |
| No-Show [PCC-61] | SIU^S26 |
servicerequest-response "Safeguarding DNA response (noshow)" |
ServiceRequest.status revoked, reason new |
| Referral ID in every message | ORC-2 | MessageHeader.response.identifier = the original Bundle.id; Journey ID = an EpisodeOfCare reference |
No referral business identifier found in the payload guidance - To confirm |
So BaRS does cover most of the closed loop, and is closer to 360X than this guide first said. The differences are in how it is defined, below.
The BaRS MessageDefinition example in the API specification (BARS Message Definition
ServiceRequest - Request CaseTransfer) lists 15 entries in focus, each min 1,
max 1: Bundle, MessageHeader, ServiceRequest, Patient, Encounter, Location,
Organization, Practitioner, PractitionerRole, Observation, Flag, MedicationStatement,
AllergyIntolerance, QuestionnaireResponse and Consent.
MessageDefinition.focus
identifies the resource(s) that are the subject of the event - the same as
MessageHeader.focus - not every resource in the Bundle. Listing the Bundle and the
MessageHeader as a focus is not meaningful, and max 1 for Observation or Flag does
not fit a referral with several findings.In 360X each transaction is one HL7 v2 message structure with a fixed ORC-1 / ORC-5
pair. In this guide each event is a MessageDefinition with one focus
(Referral Order (O19),
Referral Order Status (O51)) and the
contents are profiles that a validator can check.
In Applications 1 and 4 there is no Task. The workflow state of a referral is spread over three resources:
ServiceRequest.status (active, revoked, completed), the sender's and responder's
Encounter.status (triaged, in-progress, finished, cancelled) and
CarePlan.status. ServiceRequest.intent is fixed to plan.
In FHIR Workflow these are different things:
| ServiceRequest | Task | |
|---|---|---|
| What it is | The order - what is wanted and why (the referral letter) | A request to a specific performer to act on the order, and the state of that work |
| Who owns the status | The requester (active, revoked, completed) |
The performer (requested, accepted, rejected, in-progress, completed) plus businessStatus |
| 360X | The referral content | Accept, decline, cancel, interim, outcome - ORC-1 / ORC-5 |
A 360X OMG^O19 both creates the order and asks a named recipient to act, so its FHIR
equivalent is a ServiceRequest and a Task (status requested, focus the
ServiceRequest). The HL7 Physical Activity IG
does the same. Using Encounter.status to say whether a referral was accepted mixes the
referral workflow with the recipient's own patient administration.
Application 5 does include a Task, but not in this role - see
section 7.
This guide's Referral Order (O19) currently has
the ServiceRequest as its focus and O51
the Task. Whether O19 should also carry the Task, so every message has the Task as its
focus, is Open - see notes/research.md.
In Application 1 the BaRS CarePlan is the sender's triage result:
CarePlan.status "MUST be populated with 'completed' - FIXED VALUE"; intent fixed plan;CarePlan.period.start is "the date/time the triage Disposition was identified";CarePlan.activity.outcomeCodeableConcept carries "the triage outcome codes" (NHS
Pathways symptom group, symptom discriminator and disposition codes), and its text
"MUST be populated with the clinical narrative" (the consultation summary);ServiceRequest.basedOn references the CarePlan.This is the assessment that justifies the referral - in this guide, referral
supporting information: the reason (ServiceRequest.reasonCode), the findings
(Observation) and any form (Referral Forms,
QuestionnaireResponse). FHIR R4 also has ClinicalImpression for an assessment. A
CarePlan in Dynamic Care Planning and the Clinical Process
says who is doing what, for an ongoing plan that several teams update - a different
use. Receiving systems that file a BaRS CarePlan as a care plan would mislead users.
QuestionnaireResponse or ClinicalImpression). In social care a care
plan is much closer to the FHIR CarePlan: the agreed activities, who carries
them out and when. Check which is meant before mapping a "care plan" to
CarePlan.
BaRS Application 1 guidance for Patient.identifier:
system https://fhir.nhs.uk/Id/nhs-number; value "MUST be populated with the NHS
number when available. If no NHS number is available this SHOULD be populated with the
Local patient identifier";The guidance gives no system, identifier type or assigning organisation for the local identifier, and places it under an element whose system is the NHS Number. Without them, a receiver cannot tell whose number it is, so it cannot match the patient or send the identifier back. Urgent and emergency care is exactly where patients are often untraced.
General practice, and this guide (see Patient Administration):
| HL7 v2 | FHIR | |
|---|---|---|
| NHS Number | PID-3 9737383397^^^NHS^NH |
system https://fhir.nhs.uk/Id/nhs-number, verification status extension |
| Hospital number (MRN) | PID-3 B6789012^^^R0A^MR - assigning authority and identifier type |
type MR, system naming the organisation, assigner.identifier the ODS code |
Recommendation: when there is no verified NHS Number, send the sender's MRN (or other local identifier) with its type and assigning organisation, and return it in every response, as 360X requires for the patient identifier.
BaRS sends the parties as full resources: MessageHeader.sender and
destination.receiver "MUST be populated with the full url to the Receiving
Organisation resource", and that Organization "MUST" have an identifier (ODS code) and a
name. Practitioner, PractitionerRole, Location and HealthcareService are also listed in
the MessageDefinition, each with min 1.
Most standards identify organisations by code: HL7 v2 MSH-4 / MSH-6 (ODS code),
FHIR Reference.identifier with a display, as in this guide's
Referral Order message example and the NW GMSA
messages. A resource adds nothing when it only repeats the ODS code and name, and every
extra resource is something the receiver must validate and reconcile with its own
directory (ODS). Send a resource only when it carries information the receiver cannot
look up.
The receiver works out what it has been sent from a combination of values. The BaRS
pseudo-code for $process-message (Standard Pattern For Composites) decides, for
example:
eventCoding servicerequest-request, reason new,
ServiceRequest.status active, category "Referral", CarePlan.status completed
and Encounter.status triaged or finished;servicerequest-response, reason new,
ServiceRequest.status active, focus Encounter in-progress;servicerequest-response, category "Referral",
ServiceRequest.status revoked, reason new.revoked therefore means both "cancelled by the sender" and "the patient did not attend",
told apart only by the event code. The payload also depends on the receiver's own
MessageDefinitions, the use case category and the Application. This liberal approach is
an anti-pattern for interoperability: every pair of systems has to agree the detail,
which is the point-to-point integration that a standard is meant to remove.
360X and this guide make the event explicit: one order control code (ORC-1) and order
status (ORC-5) per transaction in HL7 v2, and one Task.businessStatus from
Referral Workflow Status in FHIR.
Application 5
(Referrals into Pharmacy, v1.2.1; live use case Primary Care to Community Pharmacy -
Pharmacy First) describes its payload as a narrative: "the assessment performed by the
Sender (Encounter), identifying a 'problem' (Condition) which a plan of care (CarePlan)
is established to address. The Sender is unable to support the plan of care so
transitions responsibility, via a referral (ServiceRequest), while directing the next
requested action (Task)." Against existing practice (HL7 v2 OMG^O19 / REF_I12, eRS,
FHIR Workflow):
| What is needed | BaRS Application 5 | Existing practice / this guide |
|---|---|---|
| What is requested | Task.code - "the action … the Sender is requesting of the Receiver", e.g. SNOMED CT 2140231000000104 "Referral to Community Pharmacy Pharmacy First Service (procedure)". ServiceRequest.code has no guidance |
ServiceRequest.code - normally mandatory (OBR-4 in HL7 v2) |
| By when | Task.restriction.period ("within twenty-four hours") |
ServiceRequest.occurrence[x], priority (BaRS also gives ServiceRequest.occurrencePeriod) |
| Why | Condition (presenting complaint, code.text free text) referenced from CarePlan.addresses. ServiceRequest.reasonCode "will ONLY be populated in a cancellation message with the reason for cancellation" |
ServiceRequest.reasonCode - a code (DG1 in HL7 v2); a Condition reference only where the problem is recorded as such. A cancellation reason is not the reason for the referral |
| Who is asking | ServiceRequest.requester "MUST be populated with a reference to the Practitioner resource"; the organisation only in MessageHeader.sender and an Organization resource |
requester = PractitionerRole (practitioner and organisation identifiers - GMC / SDS and ODS); see Referral Request |
| Where the referral was made | An Encounter resource, "the container for their assessment", with the sender's reference in Encounter.identifier; a second "planned" Encounter returned by the receiver for the referral's human readable reference |
ServiceRequest.encounter - the Visit Number (or Hospital Spell / Account Number) as an identifier; the receiver's reference is a ServiceRequest.identifier (filler order number) - see Patient Administration |
| The plan | CarePlan (status completed) linking the Condition to the Task |
Not needed - the ServiceRequest is the plan's request |
| Fulfilment | Task status requested, intent order, referenced from CarePlan.activity.reference; no guidance for Task.basedOn / focus to the ServiceRequest |
A Task is the receiver's work on the ServiceRequest (basedOn / focus the ServiceRequest), owned and updated by the receiver |
| Medicines | MedicationStatement - "new medication prescribed at the encounter. This SHOULD NOT be used to carry Medication History"; for the New Medicines Service the Task focus is a MedicationStatement |
Content of the consultation - supportingInfo |
The SNOMED CT code above could not be checked on tx.fhir.org, whose UK Edition is older than the code - To confirm.
Task is misused. In FHIR Workflow a Task
"fulfils" a request: Task.basedOn is "a higher-level authorization that triggered the
creation of the task", such as a ServiceRequest. Application 5's Task instead carries
the request itself (its code and timeframe), duplicating what ServiceRequest.code and
occurrence are for, and is linked from a CarePlan rather than to the ServiceRequest.
The CarePlan is unnecessary. It only connects the Condition (why) to the Task (what);
both belong on the ServiceRequest (reasonCode / reasonReference, code).
Much of the confusion comes from putting the referral and the sender's consultation into one request. The Application 5 requirements ask the sender to include "medications administered or prescribed during the latest assessment and not available on existing records", "new allergies, established during the latest assessment", the patient's "Body Mass Index (BMI)", the blood pressure "service type", and current oral contraception for repeat supply. These are the record of the consultation that led to the referral, and of the patient's background - not the referral.
In existing practice the referral (ServiceRequest) stays small and points to the
supporting information with ServiceRequest.supportingInfo. eRS works this way: the
referral carries the clinical information and patient summaries as attachments
(HL7 v3 or PDF) referenced from ServiceRequest.supportingInfo. The supporting
information can be:
| Option | Contents | Fits when | FHIR Document |
|---|---|---|---|
| Clinical document for the episode | What happened at the consultation or stay that made the referral: findings, vital signs, new medicines and allergies, the referral reason | Always - it is the referrer's account of this episode | HL7 Europe HDR - for outpatient and primary care encounters a Composition with the HDR section codes (HDR itself allows only inpatient encounters); vital signs as Observation (Vital Signs) |
| Patient summary | Problems, current medicines, allergies, vital signs, immunisations - the background, not the episode | The receiver has no access to the patient's record (e.g. a community pharmacy) | HL7 Europe Patient Summary (EPS), the European profile of the International Patient Summary (IPS). NHS England equivalents are GP Connect Access Record and the shared care records |
| Query the record | Whatever the receiver needs, when it needs it | The receiver can query an API | Preferred - see EU Health Data API and Query Existing Data [PCC-44]. BaRS itself asks only for what is "not available on existing records", which assumes the receiver can read them |
Suggested approach for this guide: the ServiceRequest carries the request (code,
reasonCode, requester, encounter, occurrence); supportingInfo references a
clinical document (HDR structure) for the episode, plus a patient summary (EPS)
only where the receiver cannot query the record. Whether the clinical document or the
patient summary should be the default for referrals to services without record access
(such as community pharmacy) is Open.
The same two documents appear at both ends of a referral - as its input and as its output:
| Document | Input to the referral (ServiceRequest.supportingInfo) |
Output of the referral (Task.output, PCC-57) |
|---|---|---|
| HL7 Europe HDR (and outpatient letters with the HDR section codes) | The referrer's account of the episode that led to the referral, e.g. a discharge report when a hospital refers on to community services | The recipient's discharge report or clinic letter that closes the referral |
| HL7 Europe Patient Summary (EPS) | The patient's background for the recipient | An updated summary, if the recipient keeps the patient's record |
BaRS and eRS cover only the input side. Neither defines the outcome document, so
both use clinical documents and patient summaries only as referral input, through
ServiceRequest.supportingInfo (eRS attachments; BaRS resources in the message bundle).
The output - the document that closes the loop - comes back by another route (Transfer
of Care, MESH, GP Connect Send Document, HL7 v2 MDM^T02) and has to be linked to the
referral by the receiver - see Referral Outcome [PCC-57].
Keeping the referral separate from its supporting documents is also future proof.
NHS England shared care records - and the Single Patient Record - are expected to hold
patient summaries and discharge reports. When they do, the referral does not change:
supportingInfo references the published document (by DocumentReference or URL, see
Document Sharing [MHD] and EU Health Data API) instead
of carrying a copy. The receiver then retrieves the documents through an API when it
needs them, so they no longer need to be in the message payload at all - the
message carries only the workflow (the referral and its status). A payload that embeds
the consultation in the referral bundle, as BaRS does, has to be redesigned for that.
The BaRS data models come from PRSB standards: Application 1 from the PRSB 111 referral work ("PRSB have defined and endorsed an information model"), Application 5 from "the Community Pharmacy Standard v3.0 as defined and endorsed by the Professional Records Standards Body (PRSB)". PRSB standards are headings for a document - what a clinician needs to read - so they map more naturally onto FHIR Documents than onto a BaRS message bundle:
| PRSB standard | BaRS | FHIR Document |
|---|---|---|
| 111 Referral Standard | Application 1 (111 to emergency care) | Clinical document for the 111 assessment (HDR structure), referenced from supportingInfo |
| Community Pharmacy Standard | Application 5 (Pharmacy First) | Referral: clinical document for the GP consultation. Pharmacy consultation returned to the GP: clinical document [PCC-57] |
| Clinical Referral Information Standard | - | The referral letter (ServiceRequest + clinical document) |
| Outpatient Letter Standard | - | Composition with the HDR section codes |
| Transfer of Care - Acute Inpatient Discharge Standard and Emergency Care Discharge Standard | - | HL7 Europe HDR |
| Core Information Standard | - | HL7 Europe Patient Summary (EPS) |
See PRSB Standards for the full list and where each fits in the clinical process. The PRSB to HDR / EPS section mappings are To confirm.
A system that supports referrals generally - IHE 360X, IHE Dynamic Care Planning, IHE Dynamic Care Team Management (DCTM), HL7 v2, FHIR Workflow and FHIR Documents - should not let one national standard's model shape its core. The domain-driven design anti-corruption layer is the usual answer: a translation layer at the edge that converts between the external model (BaRS) and the system's own model, so BaRS concepts never enter the core.
flowchart LR
subgraph EXT [External - BaRS]
B1[BaRS $process-message<br/>ServiceRequest, Encounter,<br/>CarePlan, Task, Condition ...]
end
subgraph ACL [Anti-corruption layer]
T1[Translate message<br/>to 360X event]
T2[Map payload to<br/>general model]
T3[Assemble BaRS<br/>responses]
end
subgraph CORE [Referral system - general model]
C1[ServiceRequest + Task<br/>360X state]
C2[FHIR Documents<br/>HDR, EPS]
C3[Appointment, Encounter<br/>Patient Administration]
C4[CarePlan, CareTeam<br/>DCP / DCTM]
end
B1 --> T1 --> C1
B1 --> T2 --> C2
T2 --> C3
C1 --> T3 --> B1
C2 --> T3
Tips for the layer:
| Concern | BaRS (external) | General model (core) |
|---|---|---|
| Event | eventCoding + reason + resource statuses (see section 6) |
One 360X transaction and Referral Task businessStatus - decide the event once, in the layer |
| What is requested | Task.code, Task.restriction (Application 5) |
ServiceRequest.code, occurrence, priority |
| Why | Condition, CarePlan.activity.outcomeCodeableConcept |
ServiceRequest.reasonCode / reasonReference |
| Requester | Practitioner; organisation in MessageHeader.sender |
PractitionerRole with practitioner and organisation (ODS) identifiers |
| Patient | NHS Number, or an untyped local identifier | NHS Number plus MRN with type and assigning organisation; keep the BaRS value as received for replies |
| Encounter | Sender's assessment Encounter; receiver's "planned" Encounter | Visit Number / Spell identifier (Patient Administration); the receiver's reference as a filler identifier on the ServiceRequest |
| Clinical content | CarePlan, Condition, Observation, MedicationStatement, AllergyIntolerance, Flag, QuestionnaireResponse | supportingInfo: a clinical document (HDR structure), patient summary (EPS), forms (QuestionnaireResponse) |
| Correlation | Original Bundle.id (MessageHeader.response.identifier), Journey ID |
Referral ID (ServiceRequest.identifier), with the BaRS ids kept as additional identifiers |
| Outcome | Status in a response | Clinical document [PCC-57] - sent by another route (e.g. MESH, GP Connect Send Document) if BaRS cannot carry it |
Provenance).ServiceRequest with the clinical information and patient summary
attached through supportingInfo.In summary, where BaRS is the route (for example NHS 111 to an emergency department):
Task.code (Application 5) into ServiceRequest.code, and
the requesting practitioner and organisation into a PractitionerRole;Composition with the HDR section codes for outpatient encounters) where BaRS has
no equivalent;