ediverse Explore the platform

Spotlight PEPPOL BIS Billing 3.0 The EU e-invoicing mandate is here — France Sept 2026, Belgium Jan 2026, Germany 2025.

ServiceRequest — Procedure, lab or imaging order

FHIR's order resource for anything that is not a medication: lab test, imaging procedure, physiotherapy, intervention, nursing care.

Purpose of the resource

ServiceRequest is the generic FHIR request resource for health services. It covers blood panel orders (LOINC 58410-2), brain MRI requests, physiotherapy session bookings, and specialist consults. Medications have their own resource — MedicationRequest — to keep the workflow, dosage, dispensing and administration route distinct.

ServiceRequest sits inside the FHIR Request workflow pattern: an intent to perform, which materialises into a Procedure (or DiagnosticReport for results) once the act is executed. A typical chain: ServiceRequest → Task → Procedure / DiagnosticReport.

Key fields

The StructureDefinition lists 33 top-level elements. The most prominent:

FieldTypeCardinalityRole
identifierIdentifier[]0..*Local business reference (placer number, requisition number).
basedOnReference(CarePlan | ServiceRequest | MedicationRequest)[]0..*Request derived from a care plan or parent order.
statuscode1..1Lifecycle state: draft, active, on-hold, revoked, completed, entered-in-error, unknown.
intentcode1..1Intent: proposal, plan, directive, order, original-order, reflex-order, filler-order, instance-order, option.
categoryCodeableConcept[]0..*Category (Laboratory procedure, Imaging, Counselling…). Typically SNOMED CT.
prioritycode0..1routine, urgent, asap, stat.
codeCodeableReference0..1The requested act. LOINC for labs, RadLex / SNOMED for imaging, CCAM (FR) for medical procedures.
subjectReference(Patient | Group | Location | Device)1..1Subject of the request (usually Patient).
encounterReference(Encounter)0..1Associated visit.
occurrence[x]dateTime | Period | Timing0..1Desired date / schedule for execution.
authoredOndateTime0..1Request creation date.
requesterReference(Practitioner | PractitionerRole | Organization | Patient | RelatedPerson | Device)0..1Prescriber.
performerReference(Practitioner | PractitionerRole | Organization | CareTeam | HealthcareService | Patient | Device | RelatedPerson)[]0..*Desired performer (lab, imaging service…).
reasonCodeableReference(Condition | Observation | DiagnosticReport | DocumentReference)[]0..*Clinical reason for the request.
specimenReference(Specimen)[]0..*Associated specimens (for lab analyses).
bodySiteCodeableConcept[]0..*Target anatomic site (for imaging or biopsy).
noteAnnotation[]0..*Free-text annotations by the requester.

Lifecycle (status & intent)

ServiceRequest inherits the workflow.Request FHIR pattern. The pair status × intent drives the whole state machine:

  • intent=proposal + status=draft — proposal under review.
  • intent=order + status=active — active order transmitted to performer.
  • intent=filler-order — order generated by the performer itself (typical in radiology when a RIS breaks the exam into sub-acts).
  • status=on-hold — temporarily suspended.
  • status=revoked — cancelled before execution.
  • status=completed — executed, awaiting Procedure / DiagnosticReport creation.

JSON example

Order for a complete blood count (CBC, LOINC 58410-2) on Patient "example", by Dr Jones, to be performed by the ACME lab:

json servicerequest-cbc.json
{
  "resourceType": "ServiceRequest",
  "id": "lab-cbc",
  "status": "active",
  "intent": "order",
  "category": [{
    "coding": [{
      "system": "http://snomed.info/sct",
      "code": "108252007",
      "display": "Laboratory procedure"
    }]
  }],
  "priority": "routine",
  "code": {
    "coding": [{
      "system": "http://loinc.org",
      "code": "58410-2",
      "display": "Complete blood count (hemogram) panel - Blood by Automated count"
    }]
  },
  "subject": { "reference": "Patient/example" },
  "encounter": { "reference": "Encounter/example" },
  "authoredOn": "2026-05-14T09:15:00+01:00",
  "requester": { "reference": "Practitioner/dr-jones" },
  "performer": [{ "reference": "Organization/lab-acme" }],
  "reasonCode": [{
    "coding": [{
      "system": "http://snomed.info/sct",
      "code": "75102001",
      "display": "Routine general medical examination"
    }]
  }],
  "specimen": [{ "reference": "Specimen/blood-001" }]
}
  • status=active + intent=order: the request is enforceable.
  • category SNOMED CT 108252007 = "Laboratory procedure".
  • code in LOINC 58410-2 = automated CBC on blood.
  • specimen points to existing Specimen/blood-001.
  • reasonCode SNOMED CT 75102001 = routine medical examination.

REST API

  • GET /ServiceRequest?subject=Patient/example&status=active — active requests for a patient.
  • GET /ServiceRequest?category=108252007&_lastUpdated=ge2026-05-01 — recent lab requests.
  • POST /ServiceRequest — create a new request.
  • PUT /ServiceRequest/lab-cbc — update (status change, note added).
  • GET /ServiceRequest?_include=ServiceRequest:specimen — include associated Specimen.
  • GET /ServiceRequest?_revinclude=DiagnosticReport:based-on — also fetch the diagnostic reports produced.

National profiles

ProfileRegulatorSpecifics
US Core ServiceRequestHL7 US Realm — ONC EHRMust carry status, intent, subject Patient, code, authoredOn, requester.
US Core Laboratory Service RequestUSCDI v3Restricts category to Laboratory and code to LOINC lab codes.
FR Core BiologyServiceRequestANSSlicing on code, constrained to LOINC FR / NABM / CIQUAL.
IPS ServiceRequestHL7 + CEN/TC 251Used in the international patient summary.
AU eRequestingHL7 Australia / ADHAMandatory profile for ePathology / eImaging orders.

Common pitfalls

  • Mixing code and orderDetailcode says what, orderDetail precises specific modalities. Never bury a modality inside code as a free-text label.
  • Missing intent — it is mandatory. Without it, the server rejects creation (HTTP 422). Pick between order (sent to filler) and plan (intent not yet transmitted).
  • Confusing with MedicationRequest — a drug goes through MedicationRequest, not ServiceRequest. Chemotherapy can be both (the administration session = ServiceRequest, the drug = MedicationRequest, linked by basedOn).
  • Status inconsistent with workflow — moving from active back to draft is forbidden. Every transition must respect the state machine (see Request Pattern).
  • Local identifier omitted — many EHRs forget to fill identifier with the local placer number, which complicates legacy reconciliation.
  • MedicationRequest — equivalent for medications.
  • DiagnosticReport — result produced by executing the request.
  • Procedure — executed act in response to the ServiceRequest.
  • Specimen — referenced biological specimen.
  • Task — orchestration of execution between placer and filler.
  • HL7 v2 ORM^O01 — legacy equivalent.