CMS FHIR Quality Measure Development IG
0.8.0-cibuild - CI Build International flag

CMS FHIR Quality Measure Development IG, published by Centers for Medicare & Medicaid Services (CMS). This guide is not an authorized publication; it is the continuous build for version 0.8.0-cibuild built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/cqframework/cms-qmd/ and changes regularly. See the Directory of published versions

Observations

US Core defines a variety of profiles for representing and accessing a patient’s observations. US Quality Core defines observation profiles where additional conformance is needed beyond the US Core profiles.

Authoring patterns for observations are documented in Observation in the US CQL implementation guide, covering status, category, interpretation, timings, and each of the observation profiles. This page records only what differs for quality measurement; see the Pattern Index for the full list of available patterns.

For Observation, see also modifier elements, search parameters, and cross-version considerations in that guide.

Two points apply throughout. A retrieve against a profile is a filter by conformance, so the expression does not need to test elements the profile fixes — retrieving [USCore.RespiratoryRateProfile] does not need a test for LOINC 9279-1. And observation status should be tested with the status functions in FHIRCommonisResulted() for the usual final, amended, or corrected test, or isFinal(), isAmended(), and isCorrected() individually — rather than by listing status codes inline.

define "Respiratory Rate":
  [USCore.RespiratoryRateProfile] RR
    where RR.isResulted()

Vital Signs

See Vital signs.

US Core defines a base vital signs profile along with specific profiles for respiratory rate, heart rate, body temperature, body height, head circumference, body weight, BMI, blood pressure, pediatric BMI for age, pediatric weight for height, and pulse oximetry. Each is retrieved by its profile as above; oxygen saturation is part of the pulse oximetry profile. Blood pressure components are reached with the systolic() and diastolic() fluent functions in USCoreCommon rather than by component index.

Pregnancy Status

See Pregnancy status.

Pregnancy may be recorded as a pregnancy status observation, a laboratory result, an encounter diagnosis, or a problem list item, and logic that needs to establish pregnancy should consider all four. The US CQL example does this against US Core profiles; a measure builds the same expression against the corresponding US Quality Core profiles. Where the question involves a prevalence period, only the Condition profiles can answer it, since onset and abatement are not available on the observation representations.

Pregnancy Intent

See Pregnancy intent.

Smoking Status

US Quality Core uses the US Core Smoking Status profile, which sets the minimum expectations for recording, searching, and retrieving a patient’s smoking status.

define "Smoking Status":
  [USCore.SmokingStatusProfile] SmokingStatus
    where SmokingStatus.isResulted()

Laboratory Result

See Laboratory results.

Measures use the US Quality Core Laboratory Result Observation profile, which is characterized by code and fixes category to laboratory.

Clinical Result

See Clinical results.

Measures use the US Quality Core Observation Clinical Result profile for non-laboratory clinical test results, such as the size of a polyp seen during a colonoscopy. Observations associated with imaging are expected to represent specific measurements obtained from imaging; see Imaging procedures.

Surveys and Assessments

See Screening assessments.

Measures use the US Quality Core Observation Screening Assessment profile, which is characterized by code and fixes category to survey. It supports individual survey responses, multi-question panels, and multi-select answers.

Simple Observations

See Simple observations.

Measures use the US Quality Core Simple Observation profile for observations not covered by a more specific profile, filtered by code. Because this profile does not fix a status, the status test matters more here than elsewhere — and where preliminary results are in scope, isResulted() is not sufficient:

define "Pap Test With Results":
  [USQualityCore.SimpleObservation: "Pap Test"] PapTest
    where PapTest.value is not null
      and (PapTest.isResulted() or PapTest.status ~ 'preliminary')

Observations Not Done

An observation that was not performed is represented as the rejection of a proposal to perform it: US Quality Core Task Rejected with focus referencing a US Quality Core ServiceRequest for the intended observation. See Negation Patterns for the general treatment.

define "Pap Test Rejected For Reason":
  [USQualityCore.ServiceRequest: "Pap Test"] PapTestRequest
    with [USQualityCore.TaskRejected] Rejection
      such that Rejection.focus.references(PapTestRequest)
        and Rejection.code ~ FHIRCommon."Fulfill"
        and Rejection.statusReason in "Patient Declined"
    where PapTestRequest.status = 'active'

Observations Non-Patient

US Quality Core defines a US Quality Core NonPatient Observation profile for evaluating resource use and availability rather than a patient’s own data.

NOTE: This profile is marked with an asterisk in the US Quality Core profile list, meaning it is not part of that guide’s conformance expectations. The same applies to the US Quality Core Device profile used in the example below.

define "Hemodialysis Machine Availability":
  [USQualityCore.NonPatientObservation: "Hemodialysis"] Hemo
    where Hemo.subject.getDevice().type ~ "Hemodialysis machine, device (physical object)"
      and Hemo.value ~ "Equipment type available"

CQMCommon provides getCondition(), getProcedure(), and getLocation() for resolving references, but there is no equivalent for Device, so the example declares one:

define fluent function getDevice(reference FHIR.Reference):
  singleton from (
    [USQualityCore.Device] Device
      where reference.references(Device)
  )