The FHIR Clinical Reasoning Module defines the Measure resource and several associated operations. The Measure Resource represents a structured, computable definition of a health-related measure such as a clinical quality measure, public health indicator, or population analytics measure. These Measures can then be used for reporting, analytics, and data-exchange purposes.
Electronic Clinical Quality Measures (eCQMs) in FHIR are represented as a FHIR Measure resource containing metadata and terminology, a population criteria section, and at least one FHIR Library resource containing a data criteria section as well as the logic used to define the population criteria. The population criteria section typically contains initial population criteria, denominator criteria, and numerator criteria subcomponents, among others. This is elaborated upon in greater detail in the CQF Measures IG. An example of an eCQM as defined in FHIR looks like:
{
"resourceType" : "Measure",
"library" : [
"http://hl7.org/fhir/us/cqfmeasures/Library/EXMLogic"
],
"group" : [
{
"population" : [
{
"code" : {
"coding" : [
{
"code" : "initial-population"
}
]
},
"criteria" : {
"language" : "text/cql-identifier",
"expression" : "Initial Population"
}
},
{
"code" : {
"coding" : [
{
"code" : "numerator"
}
]
},
"criteria" : {
"language" : "text/cql-identifier",
"expression" : "Numerator"
}
},
{
"code" : {
"coding" : [
{
"code" : "denominator"
}
]
},
"criteria" : {
"language" : "text/cql-identifier",
"expression" : "Denominator"
}
}
]
}
]
}
Measures are then scored according to whether a subjects (or subjects) are members of the various populations.
For example, a Measure for Breast Cancer screening might define an Initial Population (via CQL expressions) of "all women", a Denominator of "women over 35", and a Numerator of "women over 35 who have had breast cancer screenings in the past year". If the Measure is evaluated against a population of 100 women, 50 are over 35, and of those 25 have had breast cancer screenings in the past year, the final score would be 50%1 (total number in numerator / total number in the denominator).
The FHIR Measure specification defines several types of Measures and various parameters for controlling the Measure evaluation. This section describes the features supported by Smile CDR.
Smile CDR uses the populations defined by the CQF Measures IG for each scoring type. A matrix of the supported populations is shown in the Criteria Names section of the CQF Measures IG.
The logical criteria used for determining each Measure population is defined by the Measure.group.population.criteria element. The Measure specification allows population criteria to be defined using FHIR Path, CQL, or other languages as appropriate. Smile CDR currently only supports using CQL. The relationship between a Measure Population and CQL is illustrated in the Population Criteria section of the CQF Measures IG.
An example Measure resource with a population criteria referencing a CQL identifier looks like:
{
"resourceType": "Measure",
"group": [ {
"population": [ {
"code": {
"coding": [ {
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "initial-population",
"display": "Initial Population"
} ]
},
"criteria": {
"language": "text/cql-identifier",
"expression": "Initial Population"
}
}]
}]
}
The population basis specifies the type of elements represented in the MeasureReport populations (example: "Numerator").
For measures that have a population basis that is different from a subject, this element specifies the type of the population basis.
This done with an extension element that can be added to a measure, see examples below.
Scoring Basis | Supported | Description |
---|---|---|
Boolean | ✓ | Population criteria define True/False values for each individual in the population |
Encounter | ✓ | Population criteria return lists of encounters for a subject in the population |
other resources | ✓ | Population criteria return lists of "resources" like an encounter for a subject in population |
Example Population Basis of Encounter
{
"extension": [ {
"url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-populationBasis",
"valueCode": "Encounter"
} ]
}
Example Population Basis of Boolean
{
"extension": [
{
"url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-populationBasis",
"valueCode": "boolean"
}
]
}
The Measure scoring method determines how a Measure score is calculated. It is set with the scoring element on the Measure resource.
The Smile CDR implementation conforms to the requirements defined by the CQF Measures IG. A more detailed description of each scoring method is linked in the table below.
Scoring Method | Supported | Description |
---|---|---|
proportion | ✓ | Proportion Measures |
ratio | ✓ | Ratio Measures |
continuous-variable | ✓ | Continuous Variable |
cohort | ✓* | Cohort |
composite | See below |
An example Measure resource with scoring
defined looks like:
{
"resourceType": "Measure",
"scoring": {
"coding": [ {
"system": "http://terminology.hl7.org/CodeSystem/measure-scoring",
"code": "proportion",
"display": "Proportion"
} ]
}
}
CDR also supports setting measure-scoring` on a Group level instead of just on the Measure level.
{
"group": [
{
"id": "64f0daaf56d636294b157ea1",
"extension": [
{
"url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-scoring",
"valueCodeableConcept": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-scoring",
"code": "proportion",
"display": "Proportion"
}
]
}
},
{
"url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-populationBasis",
"valueCode": "Encounter"
},
{
"url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-type",
"valueCodeableConcept": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-type",
"code": "process",
"display": "Process"
}
]
}
}
]
}
]
}
A composite Measure is scored by combining and/or aggregating the results of other Measures. The compositeScoring element is used to control how composite Measures are scored. Smile CDR does not currently support any composite scoring method.
Composite Scoring Method | Supported | Description |
---|---|---|
opportunity | Combines Numerators and Denominators for each component Measure | |
all-or-nothing | Includes individuals that are in the numerator for all component Measures | |
linear | Gives an individual score based on the number of numerators in which they appear | |
weighted | Gives an individual a cored based on a weighted factor for each numerator in which they appear |
Expression Type | Supported |
---|---|
CQL | ✓ |
FHIR Path |
Supplemental Data Elements are used to report additional information about the subjects that may not be included in the Population criteria definitions. For example, it may be of interest to report the gender of all subjects for informational purposes. Supplemental data elements are defined by the Measure.supplementalData element, and are reported as Observations in the evaluatedResources of the MeasureReport.
Supplemental Data Elements can be specified as either CQL definitions or FHIR Path expressions.
Expression Type | Supported |
---|---|
CQL | ✓ |
FHIR Path |
An example Measure resource with some supplemental data elements set looks like:
{
"resourceType": "Measure",
"supplementalData": [ {
"code": {
"text": "sde-ethnicity"
},
"criteria": {
"language": "text/cql-identifier",
"expression": "SDE Ethnicity"
}
}]
}
Stratifiers are used divide Measure populations into segments of interest. For example, it may be of interest to compare the Measure score between different age groups or genders. Each stratum within a stratification is scored the same way as the overall population. Stratifiers are defined using the Measure.group.stratifier element.
An example Measure resource with a stratifier set looks like:
{
"resourceType": "Measure",
"group": [ {
"stratifier": [ {
"code": {
"text": "Stratum 1"
},
"criteria": {
"language": "text/cql-identifier",
"expression": "Stratification 1"
}
}]
}]
}
As with Populations and Supplemental Data Elements the criteria used for Stratification may be defined with CQL or FHIR Path.
Expression Type | Supported |
---|---|
CQL | ✓ |
FHIR Path |
The Measure specification also supports multidimensional stratification, for cases where more than one data element is needed.
Stratifier Type | Supported |
---|---|
Single Component | ✓ |
Multi Component |
A FHIR MeasureReport permits referencing the Resources used when evaluating in the MeasureReport.evaluatedResource element. Smile CDR includes these resources when generating subject
reports for a single Patient. Evaluated resources for population
or subject-list
reports are not included. For large populations this could quickly become an extremely large number of resources.
The evaluated resources will not include every resource on the Smile CDR server for a given subject. Rather, it includes only the resources that were retrieved from the server by the CQL logic that was evaluated. This corresponds to the data-requirements for a given Measure. As an example, consider the following CQL:
valueset "Example Value Set" : 'http://fhir.org/example-value-set'
define "Example Observations":
[Observation : "Example Value Set"]
That CQL will only select Observation Resources that have a code in the "Example Value Set". Those Observations will be reported in the Evaluated Resources while any others will not.
A number of extensions to Measure evaluation defined by various IGs are supported. They are described briefly in the table below.
Extension | Description |
---|---|
http://hl7.org/fhir/us/cqframework/cqfmeasures/StructureDefinition/cqfm-productLine | Used to evaluate different product lines (e.g. Medicare, Private, etc.) |
http://hl7.org/fhir/StructureDefinition/cqf-measureInfo | Used to denote a Measure Observation |
http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-populationReference | Used to specify the population that triggered a particular evaluatedResource |
There's not currently a way to configure which extensions are enabled. All supported extensions are always enabled.
Smile CDR implements the $evaluate-measure operation into three different implementations and use cases.
Feature | Standard Evaluate-Measure | Distributed Evaluate-Measure | Spark Evaluate-Measure |
---|---|---|---|
Processing Type | Low Latency Response | Bulk Processing | Big Data Processing |
Population Size | <1,000 | >=1000 to 10's of Millions | 100's of Millions to Billions |
Integrated into CDR | ✓ | ✓ | |
FHIR R5 | |||
FHIR R4 | ✓ | ✓ | ✓ |
FHIR DSTU3 | ✓ | ||
Available in open-source | ✓ | ||
Creates MeasureReport | ✓ | ✓ | ✓ |
Persists MeasureReport | ✓ | ✓ | |
Multi-Threaded Processing | ✓ | ✓ | |
Horizontally Scalable | ✓ | ✓ | |
Populates Reporter Field | ✓ | ✓ | |
Evaluation Type 'Subject-List' | ✓ | ✓ | Coming Soon |
Parameter | Supported | Description |
---|---|---|
Id | ✓ | the id of the Measure to evaluate |
PeriodStart | ✓ | The start of the reporting period |
PeriodEnd | ✓ | The end of the reporting period |
ReportType | ✓ | The type of measure report: subject, subject-list, or population. If not specified, a default value of subject will be used if the subject parameter is supplied, otherwise, population will be used |
Subject | ✓ | Subject for which the measure will be calculated. If not specified, the measure will be calculated for all subjects that meet the requirements of the measure. If specified, the measure will only be calculated for the referenced subject(s) |
Practitioner | ✓ | Practitioner for which the measure will be calculated. If specified, the measure will be calculated only for subjects that have a primary relationship to the identified practitioner |
LastReceivedOn | ✓ | The date the results of this measure were last received. This parameter is only valid for patient-level reports and is used to indicate when the last time a result for this patient was received. This information can be used to limit the set of resources returned for a patient-level report |
ProductLine | ✓ | the productLine (e.g. Medicare, Medicaid, etc) to use for the evaluation. This is a non-standard parameter |
Additional Data | ✓ | the data bundle containing additional data |
Terminology Endpoint | ||
Parameters | ✓ | Any input parameters for the evaluation. Parameters defined in this input will be made available by name to the CQL expression. Parameter types are mapped to CQL as specified in the Using CQL topic of the Clinical Reasoning Module. If a parameter appears more than once in the input Parameters resource, it is represented with a List in the input CQL. If a parameter has parts, it is represented as a Tuple in the input CQL. |
The periodStart
and periodEnd
parameters are used to control the Reporting Period for which a report is generated. This corresponds to Measurement Period
defined in the CQL logic, as defined by the conformance requirements in the CQF Measures IG. Both periodStart
and periodEnd
must be used or neither must be used.
If neither are used the default reporting period specified in the CQL logic is used, as shown here
parameter "Measurement Period" Interval<DateTime>
default Interval[@2019-01-01T00:00:00.0, @2020-01-01T00:00:00.0)
If neither are used and there is no default reporting period in the CQL logic an error is thrown.
A request using periodStart
and periodEnd
looks like:
GET fhir/Measure/<MeasureId>/$evaluate-measure?periodStart=2019-01-01&periodEnd=2019-12-31
periodStart
and periodEnd
support Dates (YYYY, YYYY-MM, or YYYY-MM-DD) and DateTimes (YYYY-MM-DDThh:mm:ss+zz:zz)
Measure report types determine what data is returned from the evaluation. This is controlled with the reportType
parameter on the $evaluate-measure Operation
Report Type | Supported | Description |
---|---|---|
subject | ✓ | Measure report for a single subject (e.g. one patient). Includes additional detail, such as evaluatedResources |
subject-list | ✓ | Measure report including the list of subjects in each population (e.g. all the patients in the "numerator") |
population | ✓ | Summary measure report for a population |
NOTE: There's an open issue on the FHIR specification to align these names to the MeasureReportType value set.
A request using reportType
looks like:
GET fhir/Measure/<MeasureId>/$evaluate-measure?reportType=subject-list
The subject of a measure evaluation is controlled with the subject
(R4+) and patient
(DSTU3) operation parameters. Currently, the only subject type supported by Smile CDR is Patient. This means that all Measure evaluation and reporting happens with respect to a Patient or set of Patient resources.
Subject Type | Supported | Description |
---|---|---|
Patient | ✓ | A Patient |
Practitioner | A Practitioner | |
Organization | An Organization | |
Location | A Location | |
Device | A Device | |
Group1 | ✓ | A set of subjects |
A request using subject
looks like:
GET fhir/Measure/<MeasureId>/$evaluate-measure?subject=Patient/123
The set of Patients used for Measure evaluation is controlled with the subject
(R4+) or patient
(DSTU3), and practitioner
parameters. The two parameters are mutually exclusive.
Parameter | Supported | Description |
---|---|---|
Not specified | ✓ | All Patients on the server |
subject=XXX or subject=Patient/XXX | ✓ | A single Patient |
practitioner=XXX or practitioner=Practitioner/XXX or practitioner=Group/XXX | ✓ | All Patients whose generalPractitioner is the referenced Practitioner or practitioners in Group |
subject=Group/XXX 1 | ✓ | Group containing subjects |
subject=XXX AND practitioner=XXX | ✓ | Not a valid combination |
A request using practitioner
looks like:
GET fhir/Measure/<MeasureId>/$evaluate-measure?practitioner=Practitioner/XYZ
The following table shows the combinations of the subject
(or patient
), practitioner
and reportType
parameters that are valid
subject reportType | subject-list reportType | population reportType | |
---|---|---|---|
subject parameter | ✓ | ✓ 1,2 | ✓ 1,2 |
practitioner parameter | 3 | ✓ | ✓ |
subject
(or patient
) parameter to get report for multiple Patients. The subject-list and population report types have less detail than a subject report.subject
with a subject-list or population reportType
will be a valid combination once Group support is implemented.The lastReceivedOn
parameter is the date the Measure was evaluated and reported. It is used to limit the number of resources reported in the Measure report for individual reports. It is currently not supported by Smile CDR.
Any input parameters for the evaluation. Parameters defined in this input will be made available by name to the CQL expression. Parameter types are mapped to CQL as specified in the Using CQL topic of the Clinical Reasoning Module. If a parameter appears more than once in the input Parameters resource, it is represented with a List in the input CQL. If a parameter has parts, it is represented as a Tuple in the input CQL.
The outcome of running $evaluate-measure
returns a Measure Report resource with the results outputting in the structure defined in the Measure resource.
Example requests and outputs with parameter reportType=subject.
GET http://your-server-base/fhir/Measure/ColorectalCancerScreeningsFHIR/$evaluate-measure?periodStart=2023-01-01&periodEnd=2023-12-31&reportType=subject&subject=Patient/numer-EXM130-Patient-1
{
"resourceType": "MeasureReport",
"language": "en",
"contained": [
{
"resourceType": "Observation",
"id": "70e1db58-acc7-4d06-b9d1-1139164bfb0d",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/cqf-measureInfo",
"extension": [
{
"url": "measure",
"valueCanonical": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR"
}
]
}
],
"status": "final",
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-data-usage",
"code": "supplemental-data"
}
]
},
"valueCodeableConcept": {
"coding": [
{
"code": "M"
}
]
}
},
{
"resourceType": "Observation",
"id": "3f773d33-d40f-4b76-9de9-dd5af88f8924",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/cqf-measureInfo",
"extension": [
{
"url": "measure",
"valueCanonical": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR"
}
]
}
],
"status": "final",
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-data-usage",
"code": "supplemental-data"
}
]
},
"valueCodeableConcept": {
"coding": [
{
"code": "2135-2"
}
]
}
},
{
"resourceType": "Observation",
"id": "cd1924a6-15e5-448f-9b90-3de1bd1f4efe",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/cqf-measureInfo",
"extension": [
{
"url": "measure",
"valueCanonical": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR"
}
]
}
],
"status": "final",
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-data-usage",
"code": "supplemental-data"
}
]
},
"valueCodeableConcept": {
"coding": [
{
"code": "2028-9"
}
]
}
}
],
"extension": [
{
"url": "http://hl7.org/fhir/5.0/StructureDefinition/extension-MeasureReport.population.description",
"valueString": "Percentage of adults 50-75 years of age who had appropriate screening for colorectal cancer"
},
{
"url": "http://hl7.org/fhir/5.0/StructureDefinition/extension-MeasureReport.supplementalDataElement.reference",
"valueReference": {
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "5C3ACF2A-15D2-44A0-A83D-F4FCC3E2F27A"
}
],
"reference": "#cd1924a6-15e5-448f-9b90-3de1bd1f4efe"
}
},
{
"url": "http://hl7.org/fhir/5.0/StructureDefinition/extension-MeasureReport.supplementalDataElement.reference",
"valueReference": {
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "9CB0299E-74B0-4425-8758-52D6FC0F979C"
}
],
"reference": "#3f773d33-d40f-4b76-9de9-dd5af88f8924"
}
},
{
"url": "http://hl7.org/fhir/5.0/StructureDefinition/extension-MeasureReport.supplementalDataElement.reference",
"valueReference": {
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "8114BAD7-FAC8-4E22-91CB-33BC3DDB9986"
}
],
"reference": "#70e1db58-acc7-4d06-b9d1-1139164bfb0d"
}
}
],
"status": "complete",
"type": "individual",
"measure": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR|0.0.003",
"subject": {
"reference": "Patient/numer-EXM130-Patient-1"
},
"date": "2024-03-05T19:30:24+00:00",
"period": {
"start": "2023-01-01T00:00:00+00:00",
"end": "2023-12-31T23:59:59+00:00"
},
"improvementNotation": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-improvement-notation",
"code": "increase"
}
]
},
"group": [
{
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-cqfm-denominator-membership",
"valueString": "1"
},
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-cqfm-numerator-membership",
"valueString": "1"
}
],
"population": [
{
"id": "178DA8D8-0694-4B88-8FFE-42CE671EEE35",
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "initial-population",
"display": "Initial Population"
}
]
},
"count": 1
},
{
"id": "0AC3911A-2ADC-4DA4-BEBF-545FF8D6D819",
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "denominator",
"display": "Denominator"
}
]
},
"count": 1
},
{
"id": "67EABB9C-ADCF-4593-A8DA-35FF25DA594C",
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "denominator-exclusion",
"display": "Denominator Exclusion"
}
]
},
"count": 0
},
{
"id": "14B66980-07F4-4872-83AF-C425C379B971",
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "numerator",
"display": "Numerator"
}
]
},
"count": 1
}
],
"measureScore": {
"value": 1.0
}
}
],
"evaluatedResource": [
{
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "178DA8D8-0694-4B88-8FFE-42CE671EEE35"
},
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "0AC3911A-2ADC-4DA4-BEBF-545FF8D6D819"
},
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "67EABB9C-ADCF-4593-A8DA-35FF25DA594C"
},
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "9CB0299E-74B0-4425-8758-52D6FC0F979C"
},
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "5C3ACF2A-15D2-44A0-A83D-F4FCC3E2F27A"
},
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "8114BAD7-FAC8-4E22-91CB-33BC3DDB9986"
}
],
"reference": "Patient/numer-EXM130-Patient-1"
},
{
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "178DA8D8-0694-4B88-8FFE-42CE671EEE35"
},
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "0AC3911A-2ADC-4DA4-BEBF-545FF8D6D819"
},
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "67EABB9C-ADCF-4593-A8DA-35FF25DA594C"
}
],
"reference": "Encounter/numer-EXM130-Encounter-1"
},
{
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "14B66980-07F4-4872-83AF-C425C379B971"
}
],
"reference": "Procedure/numer-EXM130-1"
}
]
}
Example requests and outputs with parameter reportType=population.
GET http://your-server-base/fhir/Measure/BreastCancerScreeningFHIR/$evaluate-measure?periodStart=2019-01-01&periodEnd=2019-12-31&subject=numerator&reportType=population
{
"resourceType": "MeasureReport",
"language": "en",
"contained": [
{
"resourceType": "Observation",
"id": "5203d419-bb0b-4fe5-b5a7-83f761b0f13e",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/cqf-measureInfo",
"extension": [
{
"url": "measure",
"valueCanonical": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR"
}
]
}
],
"status": "final",
"code": {
"coding": [
{
"code": "F"
}
]
},
"valueInteger": 2
},
{
"resourceType": "Observation",
"id": "ccf81b4d-4440-44ef-91ff-101b0758eded",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/cqf-measureInfo",
"extension": [
{
"url": "measure",
"valueCanonical": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR"
}
]
}
],
"status": "final",
"code": {
"coding": [
{
"code": "2135-2"
}
]
},
"valueInteger": 6
},
{
"resourceType": "Observation",
"id": "258b869e-b4da-441c-93d4-fc64c71bb49a",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/cqf-measureInfo",
"extension": [
{
"url": "measure",
"valueCanonical": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR"
}
]
}
],
"status": "final",
"code": {
"coding": [
{
"code": "2028-9"
}
]
},
"valueInteger": 6
},
{
"resourceType": "Observation",
"id": "23995bb2-bc5e-4ff5-8509-17dacfe6b375",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/cqf-measureInfo",
"extension": [
{
"url": "measure",
"valueCanonical": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR"
}
]
}
],
"status": "final",
"code": {
"coding": [
{
"code": "M"
}
]
},
"valueInteger": 4
}
],
"extension": [
{
"url": "http://hl7.org/fhir/5.0/StructureDefinition/extension-MeasureReport.population.description",
"valueString": "Percentage of adults 50-75 years of age who had appropriate screening for colorectal cancer"
},
{
"url": "http://hl7.org/fhir/5.0/StructureDefinition/extension-MeasureReport.supplementalDataElement.reference",
"valueReference": {
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "5C3ACF2A-15D2-44A0-A83D-F4FCC3E2F27A"
}
],
"reference": "#258b869e-b4da-441c-93d4-fc64c71bb49a"
}
},
{
"url": "http://hl7.org/fhir/5.0/StructureDefinition/extension-MeasureReport.supplementalDataElement.reference",
"valueReference": {
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "8114BAD7-FAC8-4E22-91CB-33BC3DDB9986"
}
],
"reference": "#23995bb2-bc5e-4ff5-8509-17dacfe6b375"
}
},
{
"url": "http://hl7.org/fhir/5.0/StructureDefinition/extension-MeasureReport.supplementalDataElement.reference",
"valueReference": {
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "9CB0299E-74B0-4425-8758-52D6FC0F979C"
}
],
"reference": "#ccf81b4d-4440-44ef-91ff-101b0758eded"
}
},
{
"url": "http://hl7.org/fhir/5.0/StructureDefinition/extension-MeasureReport.supplementalDataElement.reference",
"valueReference": {
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "8114BAD7-FAC8-4E22-91CB-33BC3DDB9986"
}
],
"reference": "#5203d419-bb0b-4fe5-b5a7-83f761b0f13e"
}
}
],
"status": "complete",
"type": "summary",
"measure": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR|0.0.003",
"date": "2024-03-05T19:33:25+00:00",
"period": {
"start": "2023-01-01T00:00:00+00:00",
"end": "2023-12-31T23:59:59+00:00"
},
"improvementNotation": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-improvement-notation",
"code": "increase"
}
]
},
"group": [
{
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-cqfm-denominator-membership",
"valueString": "2"
},
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-cqfm-numerator-membership",
"valueString": "1"
}
],
"population": [
{
"id": "178DA8D8-0694-4B88-8FFE-42CE671EEE35",
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "initial-population",
"display": "Initial Population"
}
]
},
"count": 2
},
{
"id": "0AC3911A-2ADC-4DA4-BEBF-545FF8D6D819",
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "denominator",
"display": "Denominator"
}
]
},
"count": 2
},
{
"id": "67EABB9C-ADCF-4593-A8DA-35FF25DA594C",
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "denominator-exclusion",
"display": "Denominator Exclusion"
}
]
},
"count": 0
},
{
"id": "14B66980-07F4-4872-83AF-C425C379B971",
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "numerator",
"display": "Numerator"
}
]
},
"count": 1
}
],
"measureScore": {
"value": 0.5
}
}
]
}
Example requests and outputs with parameter reportType=subject-list.
GET http://your-server-base/fhir/Measure/ColorectalCancerScreeningsFHIR/$evaluate-measure?periodStart=2023-01-01&periodEnd=2023-12-31&reportType=subject-list&subject=Patient/numer-EXM130-Patient-1
{
"resourceType": "MeasureReport",
"language": "en",
"contained": [
{
"resourceType": "Observation",
"id": "9ed35e34-9270-49e2-bf71-ca979fb2bcbf",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/cqf-measureInfo",
"extension": [
{
"url": "measure",
"valueCanonical": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR"
}
]
}
],
"status": "final",
"code": {
"coding": [
{
"code": "2135-2"
}
]
},
"valueInteger": 1
},
{
"resourceType": "List",
"id": "d11fe780-66e2-4ab5-aff6-63028665114a",
"entry": [
{
"item": {
"reference": "numer-EXM130-Patient-1"
}
}
]
},
{
"resourceType": "Observation",
"id": "428128d9-9e4f-4fe5-999f-b2748032c5dd",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/cqf-measureInfo",
"extension": [
{
"url": "measure",
"valueCanonical": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR"
}
]
}
],
"status": "final",
"code": {
"coding": [
{
"code": "2028-9"
}
]
},
"valueInteger": 1
},
{
"resourceType": "List",
"id": "ca82c41b-e668-477d-80ae-b545986e013f",
"entry": [
{
"item": {
"reference": "numer-EXM130-Patient-1"
}
}
]
},
{
"resourceType": "List",
"id": "80873504-6c9b-4d85-a0de-2b8c36962327",
"entry": [
{
"item": {
"reference": "numer-EXM130-Patient-1"
}
}
]
},
{
"resourceType": "Observation",
"id": "56a28519-939e-41bd-99c9-1e6fddf600da",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/cqf-measureInfo",
"extension": [
{
"url": "measure",
"valueCanonical": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR"
}
]
}
],
"status": "final",
"code": {
"coding": [
{
"code": "M"
}
]
},
"valueInteger": 1
}
],
"extension": [
{
"url": "http://hl7.org/fhir/5.0/StructureDefinition/extension-MeasureReport.population.description",
"valueString": "Percentage of adults 50-75 years of age who had appropriate screening for colorectal cancer"
},
{
"url": "http://hl7.org/fhir/5.0/StructureDefinition/extension-MeasureReport.supplementalDataElement.reference",
"valueReference": {
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "8114BAD7-FAC8-4E22-91CB-33BC3DDB9986"
}
],
"reference": "#56a28519-939e-41bd-99c9-1e6fddf600da"
}
},
{
"url": "http://hl7.org/fhir/5.0/StructureDefinition/extension-MeasureReport.supplementalDataElement.reference",
"valueReference": {
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "9CB0299E-74B0-4425-8758-52D6FC0F979C"
}
],
"reference": "#9ed35e34-9270-49e2-bf71-ca979fb2bcbf"
}
},
{
"url": "http://hl7.org/fhir/5.0/StructureDefinition/extension-MeasureReport.supplementalDataElement.reference",
"valueReference": {
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-criteriaReference",
"valueString": "5C3ACF2A-15D2-44A0-A83D-F4FCC3E2F27A"
}
],
"reference": "#428128d9-9e4f-4fe5-999f-b2748032c5dd"
}
}
],
"status": "complete",
"type": "subject-list",
"measure": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR|0.0.003",
"date": "2024-03-05T19:31:47+00:00",
"period": {
"start": "2023-01-01T00:00:00+00:00",
"end": "2023-12-31T23:59:59+00:00"
},
"improvementNotation": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-improvement-notation",
"code": "increase"
}
]
},
"group": [
{
"extension": [
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-cqfm-denominator-membership",
"valueString": "1"
},
{
"url": "http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-cqfm-numerator-membership",
"valueString": "1"
}
],
"population": [
{
"id": "178DA8D8-0694-4B88-8FFE-42CE671EEE35",
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "initial-population",
"display": "Initial Population"
}
]
},
"count": 1,
"subjectResults": {
"reference": "#d11fe780-66e2-4ab5-aff6-63028665114a"
}
},
{
"id": "0AC3911A-2ADC-4DA4-BEBF-545FF8D6D819",
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "denominator",
"display": "Denominator"
}
]
},
"count": 1,
"subjectResults": {
"reference": "#80873504-6c9b-4d85-a0de-2b8c36962327"
}
},
{
"id": "67EABB9C-ADCF-4593-A8DA-35FF25DA594C",
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "denominator-exclusion",
"display": "Denominator Exclusion"
}
]
},
"count": 0
},
{
"id": "14B66980-07F4-4872-83AF-C425C379B971",
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "numerator",
"display": "Numerator"
}
]
},
"count": 1,
"subjectResults": {
"reference": "#ca82c41b-e668-477d-80ae-b545986e013f"
}
}
],
"measureScore": {
"value": 1.0
}
}
]
}
When looking at single-rate or Multi-rate (more than one group) measures that have been evaluated it is important to understand what you are looking at in the counts for each population.
We learned in population-basis that this could represent a patient resource or represent resources of a subject like an encounter, but each population is not simply a raw expression output of CQL, each scoring-method defines the structure of each Measure Report as well as how population membership is evaluated and scored.
These scoring algorithms are defined in the following IG.
The intent of the MeasureReport population counts is to display how each population was evaluated to the scoring algorithm for the specified scoring type. Allowing end users the ability to compute the measure "score" using the values from population counts.
If a user ever needed to understand the raw output of a population expression, as a means to audit the algorithm, they could use the available Library $evaluate operation.
The tables below express in set logic how each scoring method would evaluate from raw CQL expression output to eventual "score".
MeasureReport Populations | Criteria Expression Result Set | Evaluated Population Membership Set | Criteria Expression Result Count | Evaluated Population Membership Count |
---|---|---|---|---|
Initial Population | A,B,C,D,E | A,B,C,D,E | 5 | 5 |
Denominator | A,B,C,D,E | B,E | 5 | 2 |
Denominator Exclusion | A | A | 1 | 1 |
Denominator Exception* | B,C | C | 2 | 1 |
Numerator Exclusion | D | D | 1 | 1 |
Numerator | B,D,E | B,E | 3 | 2 |
TotalDenominator* | B,E | B,E | 2 | |
TotalNumerator* | B,E | B,E | 2 | |
MeasureScore | 1.0 |
MeasureReport Populations | Criteria Expression Result Set | Evaluated Population Membership Set | Criteria Expression Result Count | Evaluated Population Membership Count |
---|---|---|---|---|
InitialPopulation | A,B,C,D,E | A,B,C,D,E | 5 | 5 |
MeasurePopulation | A,B,C,D,E | B,C,D,E | 5 | 4 |
MeasurePopulationExclusion | A | A | 1 | 1 |
Observation* | NA | B | 1 | 1 |
TotalMeasurePopulation | 4 |
MeasureReport Populations | Criteria Expression Result Set | Evaluated Population Membership Set | Criteria Expression Result Count | Evaluated Population Membership Count |
---|---|---|---|---|
InitialPopulation | A,B,C,D,E | A,B,C,D,E | 5 | 5 |
MeasureScore | NA |
The $evaluate-measures
operation is used to execute more than one measure resource per selected subject population. This behaves similarly to the $evalaute-measure
operation in that it has a "Distributed" and "Standard" mode for low latency and batch processing, but returns a Bundle resource instead of a MeasureReport resource.
This is designed to assist any users that will perform the measure evaluations for the same population against multiple measures.
$evaluate-measure
, one for each measure, you can now have a single request to $evaluate-measures
that contains all run results in a contained bundle resource.Parameter | Supported | Description |
---|---|---|
measureIds | ✓ | the IDs of the Measure to evaluate |
periodStart | ✓ | The start of the reporting period |
periodEnd | ✓ | The end of the reporting period |
reportType | ✓ | The type of measure report: subject, subject-list, or population. If not specified, a default value of subject will be used if the subject parameter is supplied, otherwise, population will be used |
subject | ✓ | Subject for which the measure will be calculated. If not specified, the measure will be calculated for all subjects that meet the requirements of the measure. If specified, the measure will only be calculated for the referenced subject(s) |
practitioner | ✓ | Practitioner for which the measure will be calculated. If specified, the measure will be calculated only for subjects that have a primary relationship to the identified practitioner |
productLine | ✓ | the productLine (e.g. Medicare, Medicaid, etc) to use for the evaluation. This is a non-standard parameter |
additional Data | ✓ | the data bundle containing additional data |
terminology Endpoint | ||
parameters | ✓ | Any input parameters for the evaluation. Parameters defined in this input will be made available by name to the CQL expression. Parameter types are mapped to CQL as specified in the Using CQL topic of the Clinical Reasoning Module. If a parameter appears more than once in the input Parameters resource, it is represented with a List in the input CQL. If a parameter has parts, it is represented as a Tuple in the input CQL. |
reporter | ✓ | optional parameter to pass in a reference to a resource that the user would like to have populated on Measure Report reporter field. |
For each measureIds
parameter added to the operation request, a subsequent Measure Report resource will be added to the returned Bundle resource created by $evaluate-measures
request.
For example, in order to evaluate six measure resources for a selected population (subject or practitioner parameters), then the operation will evaluate that same population against each of those measures and return a single Measure Report back for each passed in Measure.id
.
This feature also allows for an additional parameter to the standard $evaluate-measure
, allowing callers to pass in a compliant resource for Measure Report reporter
.
This can be used instead of dQM module configurations for default reporter and/or use Group Managing Entity.
reporter
parameter will override these configurations (if set), and persist the parameter value to each Measure Report created.GET fhir/Measure/$evaluate-measures?practitioner=Practitioner/XYZ&reporter=Organization/123&measureIds=<MeasureId-1>&measureIds=<MeasureId-2>&measureIds=<MeasureId-3>
GET fhir/Measure/$evaluate-measures?practitioner=Practitioner/XYZ&reporter=Organization/123&measureIds=<MeasureId-1>&measureIds=<MeasureId-2>&measureIds=<MeasureId-3>
Prefer: respond-async
{
"resourceType": "Bundle",
"id": "bundle-id",
"identifier": {
"value": "measure-eval-job-id-<job-id>"
},
"type": "collection",
"entry": [
{
"fullUrl": "http://localhost:8000/MeasureReport/<id>",
"resource": {
"resourceType": "MeasureReport",
"id": "<id>",
"extension": [
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureId",
"valueString": "<MeasureId-1>"
},
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureTitle",
"valueString": "<MeasureId-1-Title>"
}
],
"status": "pending",
"measure": "url/Measure/<MeasureId-1>",
}
},
{
"fullUrl": "http://localhost:8000/MeasureReport/<id>",
"resource": {
"resourceType": "MeasureReport",
"id": "<id>",
"extension": [
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureId",
"valueString": "<MeasureId-2>"
},
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureTitle",
"valueString": "<MeasureId-2-Title>"
}
],
"status": "pending",
"measure": "url/Measure/<MeasureId-2>"
}
},
{
"fullUrl": "http://localhost:8000/MeasureReport/<id>",
"resource": {
"resourceType": "MeasureReport",
"id": "<id>",
"extension": [
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureId",
"valueString": "<MeasureId-3>"
},
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureTitle",
"valueString": "<MeasureId-3-Title>"
}
],
"status": "pending",
"measure": "url/Measure/<MeasureId-3>"
}
}
]
}
{
"resourceType": "Bundle",
"id": "bundle-id",
"identifier": {
"value": "measure-eval-job-id-<job-id>"
},
"type": "collection",
"entry": [
{
"fullUrl": "http://localhost:8000/MeasureReport/<id>",
"resource": {
"resourceType": "MeasureReport",
"id": "<id>",
"extension": [
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureId",
"valueString": "<MeasureId-1>"
},
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureTitle",
"valueString": "<MeasureId-1-Title>"
}
],
"status": "complete",
"measure": "url/Measure/<MeasureId-1>",
"date": "2024-05-16T11:51:02-06:00",
"reporter": {
"reference": "Organization/123"
},
"subject": {
"reference": "Practitioner/XYZ"
},
"period": {
"start": "2023-01-01T00:00:00-07:00",
"end": "2023-12-31T23:59:59-07:00"
}
}
},
{
"fullUrl": "http://localhost:8000/MeasureReport/<id>",
"resource": {
"resourceType": "MeasureReport",
"id": "<id>",
"extension": [
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureId",
"valueString": "<MeasureId-2>"
},
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureTitle",
"valueString": "<MeasureId-2-Title>"
}
],
"status": "complete",
"measure": "url/Measure/<MeasureId-2>",
"date": "2024-05-16T11:51:02-06:00",
"reporter": {
"reference": "Organization/123"
},
"subject": {
"reference": "Practitioner/XYZ"
},
"period": {
"start": "2023-01-01T00:00:00-07:00",
"end": "2023-12-31T23:59:59-07:00"
}
}
},
{
"fullUrl": "http://localhost:8000/MeasureReport/<id>",
"resource": {
"resourceType": "MeasureReport",
"id": "<id>",
"extension": [
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureId",
"valueString": "<MeasureId-3>"
},
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureTitle",
"valueString": "<MeasureId-3-Title>"
}
],
"status": "complete",
"measure": "url/Measure/<MeasureId-3>",
"date": "2024-05-16T11:51:02-06:00",
"reporter": {
"reference": "Organization/123"
},
"subject": {
"reference": "Practitioner/XYZ"
},
"period": {
"start": "2023-01-01T00:00:00-07:00",
"end": "2023-12-31T23:59:59-07:00"
}
}
}
]
}
SearchSet
instead of Collection
{
"resourceType": "Bundle",
"id": "bundle-id",
"type": "searchset",
"entry": [
{
"fullUrl": "http://localhost:8000/MeasureReport/<id>",
"resource": {
"resourceType": "MeasureReport",
"id": "<id>",
"extension": [
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureId",
"valueString": "<MeasureId-1>"
},
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureTitle",
"valueString": "<MeasureId-1-Title>"
}
],
"status": "complete",
"measure": "url/Measure/<MeasureId-1>",
"date": "2024-05-16T11:51:02-06:00",
"reporter": {
"reference": "Organization/123"
},
"subject": {
"reference": "Practitioner/XYZ"
},
"period": {
"start": "2023-01-01T00:00:00-07:00",
"end": "2023-12-31T23:59:59-07:00"
}
}
},
{
"fullUrl": "http://localhost:8000/MeasureReport/<id>",
"resource": {
"resourceType": "MeasureReport",
"id": "<id>",
"extension": [
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureId",
"valueString": "<MeasureId-2>"
},
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureTitle",
"valueString": "<MeasureId-2-Title>"
}
],
"status": "complete",
"measure": "url/Measure/<MeasureId-2>",
"date": "2024-05-16T11:51:02-06:00",
"reporter": {
"reference": "Organization/123"
},
"subject": {
"reference": "Practitioner/XYZ"
},
"period": {
"start": "2023-01-01T00:00:00-07:00",
"end": "2023-12-31T23:59:59-07:00"
}
}
},
{
"fullUrl": "http://localhost:8000/MeasureReport/<id>",
"resource": {
"resourceType": "MeasureReport",
"id": "<id>",
"extension": [
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureId",
"valueString": "<MeasureId-3>"
},
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureTitle",
"valueString": "<MeasureId-3-Title>"
}
],
"status": "complete",
"measure": "url/Measure/<MeasureId-3>",
"date": "2024-05-16T11:51:02-06:00",
"reporter": {
"reference": "Organization/123"
},
"subject": {
"reference": "Practitioner/XYZ"
},
"period": {
"start": "2023-01-01T00:00:00-07:00",
"end": "2023-12-31T23:59:59-07:00"
}
}
}
]
}
The $evaluate-measure
operation is used to execute a Measure as specified by the relevant FHIR Resources against a subject or set of subjects. This implementation currently focuses primarily on supporting the narrower evaluation requirements defined by the CQF Measures IG. Some support for extensions defined by other IGs is included as well, and the implementation aims to support a wider range of functionality in the future.
Several example Measures are available in the ecqm-content-r4 IG. Full Bundles with all the required supporting resources are available here. You can download a Bundle and load it on your server as a transaction:
POST http://your-server-base/fhir BreastCancerScreeningFHIR-bundle.json
These Bundles also include example Patient clinical data so once posted Measure evaluation can be invoked with:
GET http://your-server-base/fhir/Measure/BreastCancerScreeningFHIR/$evaluate-measure?periodStart=2019-01-01&periodEnd=2019-12-31&subject=numerator&reportType=subject
CDR offers an exclusive enhancement to the evaluate-measure
operation to allow it to work at scale with significantly larger patient populations. This enhanced version is called "Distributed" mode that leans on CDR's ability to perform parallel processing of larger workloads.
The open-source available "standard" mode allows for performant low-latency response on smaller populations.
To take advantage this functionality you need to have a clustered Smile CDR deployment (see Clustering for more information) and a premium license for the DQM module (see Licensing for more information).
id
be populated so merge logic can uniquely relate data elements together. If your resource does not have this, the operation will give you an error.1000
and the total population of subjects retrieved was 10,000. Then 10 subject chunks would be created for processing.See here for Dqm Module Configuration Categories
See here for Dqm Module Configuration Categories
See here for Dqm Module Configuration Categories
4
to use all available cores.See here for Dqm Module Configuration Categories
Work Chunk Size
, users can set the chunk size for each thread to process.Work Chunk Size=1000
, Thread Batch size=250
, and Number of threads=4
with a total population of 10,000 subjects.
See here for Dqm Module Configuration Categories
Admin Web Console
, under the RunTime/Batch Jobs menu.Standard
mode, but requires an additional header of prefer: respond-async
. If done correctly, you will receive back a report in "Pending" status.GET fhir/Measure/<MeasureId>/$evaluate-measure?practitioner=Practitioner/XYZ
Prefer: response-async
{
"resourceType": "MeasureReport",
"id": "c365bc0a-7b76-4869-a99f-71c8c5a1ffb3",
"meta": {
"versionId": "1",
"lastUpdated": "2024-03-04T09:35:08.802-07:00",
"source": "#pvlOpkXdI88TcUUV"
},
"extension": [
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.jobId",
"valueString": "2849ef30-66cb-4f75-add0-110479e2f365"
},
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureId",
"valueString": "Measure/ColorectalCancerScreeningsFHIR"
},
{
"url": "http://smilecdr.com/fhir/StructureDefinition/extension-MeasureReport.measureTitle",
"valueString": "Colorectal Cancer ScreeningFHIR"
}
],
"status": "pending",
"date": "2024-03-04T09:35:08-07:00"
}
Admin Web Console
Batch jobs screen.
GET fhir/MeasureReport/c365bc0a-7b76-4869-a99f-71c8c5a1ffb3
GET fhir/MeasureReport/<MeasureReport.id>
Standard
mode it will not be populated, but in Distributed
mode it can be populated from passed in operation resources or by defaulting it on module configuration.Measure Report default reporter
configuration in the DQM Module
is meant to be set as a reference to an Organization Resource that you want to show on your Measure Reports.
To populate this, just add the Organization.id
value to the configuration field in the Web Admin Console while in the DQM Module
.
See here for Dqm Module Configuration Categories
If configuration is set to true, MeasureReport.reporter field will attempt to source MeasureReport.reporter
from evaluate-measure subject or practitioner parameter.
If a Group resource is used for the parameter and has a populated managingEntity
reference to an Organization. It will use this value instead of the value saved to Measure Report default reporter
configuration.
See here for Dqm Module Configuration Categories
Spark Evaluate-Measure provides a premium Big Data processing solution for Quality Measure Evaluations that relies on scaled out parallel processing using a spark compute cluster. This solution is meant to compliment Distributed Measure-Evaluation
by giving a larger ceiling of processing power for population scale Quality Measure
queries with 100's of Millions to Billions of resources.
It also provides the ability to perform multi-measure processing where users have the option to process as many measures as needed with the same patient population.
In order to bridge capability between generating Quality Measure Reporting in FHIR and being able to submit Measure Reports to CMS, we have a built in operation that transforms FHIR into Quality Payment Program (QPP) JSON format.
For more information see QPP Reporting.
The data-requirements operation aggregates and returns the parameters and data requirements for the measure and all its dependencies as a single module definition.
Parameter | Supported | Description |
---|---|---|
Id | ✓ | the id of the Measure to evaluate |
PeriodStart | ✓ | The start of the reporting period |
PeriodEnd | ✓ | The end of the reporting period |
GET fhir/Measure/<measureID>/$data-requirements?periodStart=2014&periodEnd=2014
{
"resourceType": "Library",
"type": {
"coding": [
{
"code": "module-definition"
}
]
},
"relatedArtifact": [
{
"type": "depends-on",
"resource": "Library/library-quick-model-definition"
}
],
"dataRequirement": [
{
"type": "Condition",
"codeFilter": [
{
"path": "code",
"valueSetString": "Other Female Reproductive Conditions"
}
]
},
{
"type": "Patient"
},
{
"type": "Condition",
"codeFilter": [
{
"path": "category",
"valueCode": [
"diagnosis"
]
},
{
"path": "clinicalStatus",
"valueCode": [
"confirmed"
]
},
{
"path": "code",
"valueSetString": "2.16.840.1.113883.3.464.1003.102.12.1011"
}
]
},
{
"type": "Condition",
"codeFilter": [
{
"path": "category",
"valueCode": [
"diagnosis"
]
},
{
"path": "clinicalStatus",
"valueCode": [
"confirmed"
]
},
{
"path": "code",
"valueSetString": "2.16.840.1.113883.3.464.1003.102.12.1012"
}
]
},
{
"type": "Encounter",
"codeFilter": [
{
"path": "status",
"valueCode": [
"finished"
]
},
{
"path": "class",
"valueCode": [
"ambulatory"
]
},
{
"path": "type",
"valueSetString": "2.16.840.1.113883.3.464.1003.101.12.1061"
}
]
},
{
"type": "DiagnosticReport",
"codeFilter": [
{
"path": "diagnosis",
"valueSetString": "2.16.840.1.113883.3.464.1003.198.12.1012"
}
]
},
{
"type": "Medication",
"codeFilter": [
{
"path": "code",
"valueSetString": "2.16.840.1.113883.3.464.1003.196.12.1001"
}
]
},
{
"type": "MedicationRequest",
"codeFilter": [
{
"path": "status",
"valueCode": [
"active"
]
},
{
"path": "medication.code",
"valueSetString": "2.16.840.1.113883.3.464.1003.196.12.1001"
}
]
},
{
"type": "MedicationStatement",
"codeFilter": [
{
"path": "status",
"valueCode": [
"completed"
]
},
{
"path": "medication.code",
"valueSetString": "2.16.840.1.113883.3.464.1003.196.12.1001"
}
]
}
]
}
The collect-data operation is used to collect the data-of-interest for the given measure.
Parameter | Supported | Description |
---|---|---|
Id | ✓ | the id of the Measure |
PeriodStart | ✓ | The start of the reporting period |
PeriodEnd | ✓ | The end of the reporting period |
Subject | ✓ | Subject for which the measure will be calculated. If not specified, the measure will be calculated for all subjects that meet the requirements of the measure. If specified, the measure will only be calculated for the referenced subject(s) |
Practitioner | ✓ | Practitioner for which the measure will be calculated. If specified, the measure will be calculated only for subjects that have a primary relationship to the identified practitioner |
LastReceivedOn | The date the results of this measure were last received. This parameter is only valid for patient-level reports and is used to indicate when the last time a result for this patient was received. This information can be used to limit the set of resources returned for a patient-level report |
GET fhir/Measure/<MeasureId>/$collect-data?practitioner=Practitioner/XYZ&periodStart=2023-01-01&periodEnd=2023-12-31
GET fhir/Measure/<MeasureId>/$collect-data?subject=Patient/XYZ&periodStart=2023-01-01&periodEnd=2023-12-31
GET fhir/Measure/<MeasureId>/$collect-data?subject=Group/XYZ&periodStart=2023-01-01&periodEnd=2023-12-31
{
"resourceType": "Parameters",
"parameter": [
{
"name": "measureReport",
"resource": {
"resourceType": "MeasureReport",
"status": "complete",
"type": "data-collection",
"measure": "Measure/measure-mrp",
"patient": {
"reference": "Patient/Practitioner-2178"
},
"period": {
"start": "2017-01-01T00:00:00+00:00",
"end": "2017-12-31T00:00:00+00:00"
},
"evaluatedResource": [
{
"reference": "Patient/Practitioner-2178"
},
{
"reference": "Encounter/Encounter-62912"
},
{
"reference": "Procedure/Procedure-89972"
}
]
}
},
{
"name": "resource",
"resource": {
"resourceType": "Patient",
"id": "Practitioner-2178",
"meta": {
"versionId": "8",
"lastUpdated": "2018-05-31T07:15:08.000+00:00",
"profile": [
"http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-patient"
]
},
"text": {
"status": "generated",
"div": "<div xmlns=\"http://www.w3.org/1999/xhtml\"><div class=\"hapiHeaderText\">Natalie Huff <b>WALTER </b></div><table class=\"hapiPropertyTable\"><tbody><tr><td>Identifier</td><td>000002418</td></tr><tr><td>Address</td><td><span>623 SW French Place </span><br/><span>Westland </span><span>MI </span></td></tr><tr><td>Date of birth</td><td><span>26 July 1974</span></td></tr></tbody></table></div>"
},
"extension": [
{
"url": "http://mihin.org/extension/copyright",
"valueString": "Copyright 2014-2017 Michigan Health Information Network Shared Services. Licensed under the Apache License, Version 2.0 (the 'License'); you can not use this file except in compliance with the License. You can obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License."
},
{
"url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
"valueCodeableConcept": {
"coding": [
{
"system": "http://hl7.org/fhir/v3/Race",
"code": "2106-3",
"display": "White"
}
]
}
},
{
"url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
"valueCodeableConcept": {
"coding": [
{
"system": "http://hl7.org/fhir/v3/Ethnicity",
"code": "2186-5",
"display": "Not Hispanic or Latino"
}
]
}
},
{
"url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
"valueCodeableConcept": {
"coding": [
{
"system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
"code": "1020",
"display": "Hinduism"
}
]
}
}
],
"identifier": [
{
"use": "official",
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "SB",
"display": "Social Beneficiary Identifier"
}
],
"text": "US Social Security Number"
},
"system": "http://hl7.org/fhir/sid/us-ssn",
"value": "000002418"
}
],
"active": true,
"name": [
{
"family": "Walter",
"given": [
"Natalie",
"Huff"
]
}
],
"telecom": [
{
"system": "phone",
"value": "248-555-3608",
"use": "home"
},
{
"system": "phone",
"value": "248-555-4649",
"use": "mobile"
}
],
"gender": "female",
"birthDate": "1974-07-26",
"address": [
{
"use": "home",
"type": "postal",
"line": [
"623 SW French Place"
],
"city": "Westland",
"district": "Wayne County",
"state": "MI",
"postalCode": "48185"
}
]
}
},
{
"name": "resource",
"resource": {
"resourceType": "Encounter",
"id": "Encounter-62912",
"meta": {
"versionId": "1",
"lastUpdated": "2018-05-31T08:21:50.000+00:00",
"profile": [
"http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-encounter"
]
},
"extension": [
{
"url": "http://mihin.org/extension/copyright",
"valueString": "Copyright 2014-2017 Michigan Health Information Network Shared Services. Licensed under the Apache License, Version 2.0 (the 'License'); you can not use this file except in compliance with the License. You can obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License."
}
],
"status": "finished",
"class": {
"system": "http://hl7.org/fhir/encounter-class",
"code": "inpatient",
"display": "Inpatient"
},
"type": [
{
"coding": [
{
"system": "http://snomed.info/sct",
"code": "56876005",
"display": "Drug rehabilitation and detoxification"
}
]
}
],
"subject": {
"reference": "Patient/Practitioner-2178",
"display": "Natalie Huff Walter"
},
"period": {
"start": "2018-05-29T11:00:00-04:00",
"end": "2018-05-29T11:00:00-04:00"
},
"hospitalization": {
"dischargeDisposition": {
"coding": [
{
"system": "http://hl7.org/fhir/discharge-disposition",
"code": "home",
"display": "Home"
}
]
}
}
}
},
{
"name": "resource",
"resource": {
"resourceType": "Procedure",
"id": "Procedure-89972",
"meta": {
"versionId": "1",
"lastUpdated": "2018-05-30T23:56:19.000+00:00",
"profile": [
"http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-procedure"
]
},
"extension": [
{
"url": "http://mihin.org/extension/copyright",
"valueString": "Copyright 2014-2017 Michigan Health Information Network Shared Services. Licensed under the Apache License, Version 2.0 (the 'License'); you can not use this file except in compliance with the License. You can obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License."
}
],
"identifier": [
{
"system": "mihin.org/fhir/sid/elementId",
"value": "ca097928-b18c-406c-a01b-6ad4a321fc28"
}
],
"status": "completed",
"code": {
"coding": [
{
"system": "http://www.ama-assn.org/go/cpt",
"code": "1111F",
"display": "Medication reconciliation postdischarge"
}
]
},
"subject": {
"reference": "Patient/Practitioner-2178",
"display": "Natalie Huff Walter"
},
"performedPeriod": {
"start": "2018-06-02T14:00:00-05:00",
"end": "2018-06-02T14:00:00-05:00"
}
}
}
]
}
To enable both 'Standard' and 'Distributed' evaluate-measure, you will need to turn on the DQM Module on CDR.
See DQM for more details.
Q: I get an error saying Smile CDR can't locate my library, and I've verified it's on the server.
A: Smile CDR follows the Library conformance requirements defined by the CQF Measures IG, meaning the Library must have a logic-library
type, the name and versions of the FHIR Library and CQL Library must match, and the url of the Library must end in the name of the Library.
FHIR Libraries generated from CQL via the IG Publisher follow these requirements automatically.
Q: Does Smile CDR support partitions for evaluation?
A: Yes, though the Measure and associated Resources must be in the same partition as the clinical data being used.