
Order entry in FHIR uses the ServiceRequest resource, not MedicationRequest (that's for meds). Four patterns cover how EHR vendors implement clinical order workflows in 2026.
Pattern 1: Single ServiceRequest per order. Simple lab orders and imaging orders map one-to-one with a single ServiceRequest. code identifies the test, subject is the Patient, requester is the Practitioner, occurrenceDateTime is scheduled or requested date.
Pattern 2: ServiceRequest with basedOn linkage for panels. A lab panel (CBC = several individual tests) can be modeled as one ServiceRequest with a code that references the panel, or as multiple ServiceRequests linked via basedOn to a parent. The US Core ServiceRequest profile covers either, but most EHRs settle on the parent-plus-children model for reporting cleanliness.
Pattern 3: PractitionerRole binding for cover coverage. The requester.reference should point at PractitionerRole, not Practitioner, when the ordering context matters (e.g., attending vs. resident, specialty department). PractitionerRole references let downstream systems reason about who ordered from what role.
Pattern 4: SupplyRequest for durable medical equipment. DME orders use SupplyRequest, not ServiceRequest. Same request-response pattern but with itemReference pointing at the equipment resource.
Vendor implementation quality (mid-2026)
| System | Panel modeling | PractitionerRole binding | SupplyRequest support |
|---|---|---|---|
| Epic | Parent-plus-children | Yes | Yes |
| Cerner Powerchart | Parent-plus-children | Yes | Yes |
| Athenaclinicals | Single-order | Partial | Add-on |
| InterSystems IRIS | Both | Yes | Yes |
Common integration mistakes.
- Modeling panels as one code without child ServiceRequests → reporting loses per-test granularity. - Binding requester to Practitioner instead of PractitionerRole → role-based access control breaks. - Using MedicationRequest for supply orders → downstream fill systems reject.
ServiceRequest is well-designed for clinical order entry, but the modeling choices upfront determine reporting granularity for years. Get the panel-vs-panel-child pattern locked in early.