Skip to content

Oracle Health (Cerner)

  • Register through Oracle Health’s code console. A sandbox account and public FHIR documentation are available.
  • SMART Backend Services with a JWT. Base and token URLs are built from the customer’s tenant id.
  • system/*.read is rejected with invalid_scope. List every scope you need explicitly; the server narrows the grant to what that tenant allows.

Patient-level search, starting from a known patient list (your denominator). Typical searches:

Purpose Search
Lab and screening results Observation?patient=<id>&code=<codes>&date=ge<start>
Blood pressure Observation?patient=<id>&code=85354-9&date=<period> (panel with components)
Reports (e.g. mammography) DiagnosticReport?patient=<id>&date=ge<start>
Active problems Condition?patient=<id>&clinical-status=active
Medications MedicationRequest?patient=<id>&intent=order&date=ge<start>
Procedures Procedure?patient=<id>&date=ge<start>

Guard against empty parameter values — an empty code= matches nothing rather than everything.

Searches return 10 results per page, in no particular order, unless you ask for more. One patient with 93 matching records came back as 10 entries and a next link. Always send _count (100 works) and walk every next link.

In blood pressure panels, component.code.coding[0] is a proprietary Cerner code. The LOINC codes (8480-6 systolic, 8462-4 diastolic) appear later in the array. A parser that reads only coding[0] silently finds zero readings. Scan every coding.

Encounter types don’t match measure value sets

Section titled “Encounter types don’t match measure value sets”

Encounter.type uses local codes that do not match the measures’ qualifying-encounter value sets. Plan to qualify visits another way.

  • Conditions frequently have no recordedDate.
  • performedDateTime on many historical screenings is a year only (2019). Decide how a year-only date is treated against lookback windows and apply it consistently.

Advanced illness and frailty evidence is not reliably exposed, so the related denominator exclusions are hard to apply from FHIR alone.

Per-patient extraction is almost entirely waiting on the server. Running several workers in parallel (each taking a share of the patient list) is the main lever on run time.