Smile CDR offers DQM Module users a bridge for CMS Quality Payment Program (QPP) participants to use FHIR authored Quality Measure artifacts and produced FHIR Measure Reports into CMS accepted QPP JSON format.
This feature is available to users as a FHIR endpoint exposed data transformation operation called $qpp-build
.
Smile also offers a user interface on a Smart-On-FHIR application that enables users to seamlessly build, authenticate, and submit CMS QPP measurement-sets for annual reporting to CMS API.
In the US, 'Centers for Medicare & Medicaid Services' (CMS) acts as a federal agency within the US department of Health and Human Services that administers the Medicaid and Medicare programs.
The QPP program establishes a model of funding that rewards clinicians who provide high-quality patient-centered care. This is with the aim to improve the quality and safety of care for all individuals and to reduce the administrative burden to clinicians, allowing more time to focus on person-centered care and improving health outcomes.
An add-on application that authenticates users to CMS servers and authenticates users to Smile CDR to drive back-end operations from a user-friendly interface.
This application allows users to leverage FHIR quality reporting generation via FHIR's Clinical Reasoning operations as well as seamlessly leverage $qpp-build
operation to execute, manage, and submit CMS QPP compliant reports.
Run FHIR Authored Quality Measures using $evaluate-measure
operation and generate results for your desired patient population in FHIR Measure Report resources.
Build QPP Quality Reporting per performance year for your respective Organization or Practice by building a measurement-set for your selected specialty and quality program.
Authenticate to CMS using your CMS login or Registry token
Submit Reporting to CMS via API.
Manage and Edit submitted Reporting.
Store and save CMS Submissions in CDR for Provenance
DQM Module enabled operation exclusive to CDR $qpp-build
. This operation relies on upstream resource creation and report generation from $evaluate-measure
and is configurable in CDR Web-Admin-Console.
Parameter | DataType | Required | Description |
---|---|---|---|
organizationId | IdType | ✓ | the id of the Organization resource for this qpp report |
qualityProgramLibraryId | IdType | ✓ | the id of the Library-Program resource that specifies the measure program requirements |
measureReportIds | String | ✓ | the list of the MeasureReport id's that fulfill Program measure requirements |
performanceYear | String | ✓ | The qpp year you are submitting for, ex. 2023 |
entityType | String | ✓ | the qpp entity designation. Acceptable values are apm/virtualGroup/group/individual |
entityId | String | The unique identifier for the virtualGroup or APM associated with the submission. Required if entityType is "apm" or "virtualGroup" | |
qppStructureType | String | the type of qpp report being built, options are submission, measurementSet, measurement. Required | |
measureSetID | String | the unique id given to a measurementSet after it has been submitted, this is required for qppStructureType = Measurement | |
submissionMethod | String | the api submission method used to submit to CMS endpoint, this controls the format of the report output from the operation. This parameter can be set to override module configuration value. | |
qualityProgram | String | ✓ | the qpp quality program being submitted to : mips, app1, or MVP ID (example values: G0053, M0001, M1366). |
Organization parameter represents a profile for a qpp-build
submitting entity and is leveraged by $qpp-buld
to source required identifiers for qpp submission and report building, the key critical pieces used by QPP are the following
This Organization resource would be referenced by $qpp-build
by referencing its id
, which in this example below would be organization-1
.
This specific example represents how all three identifiers would be represented for an organization so that $qpp-build
could locate them. EntityId
specifically can be passed in from the operation request or sourced from the Organization
identifier field, as shown below.
See Evaluation Reporter Documentation on how to append this profile to reports created from $evaluate-measure
.
{
"resourceType" : "Organization",
"id" : "organization-1",
"identifier" : [
{
"use": "official",
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "XX",
"display": "CMS QPP EntityId"
}
]
},
"value": "abc123456"
},
{
"use": "official",
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "TAX",
"display": "Tax ID Number"
}
]
},
"value": "000000001"
},
{
"use": "official",
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "NPI",
"display": "National Provider Identifier"
}
]
},
"value": "1234567893"
}
],
"active" : true,
"type" : [
{
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/organization-type",
"code" : "pay"
}
],
"text" : "Payer"
}
],
"name" : "Reporting Payer",
"telecom" : [
{
"system" : "phone",
"value" : "(+1) 555-555-5555"
},
{
"system" : "email",
"value" : "hq@acme.org"
}
],
"address" : [
{
"line" : [
"100 Insurance Avenue"
],
"city" : "Amherst",
"state" : "MA",
"postalCode" : "01002",
"country" : "USA"
}
]
}
The QualityProgramLibraryId
references a FHIR Library resource Id and is meant to define a Quality Program Library
of all available measures that can be used for CMS QPP submission.
{
"useContext": [
{
"code": {
"system": "http://terminology.hl7.org/CodeSystem/usage-context-type",
"code": "program"
},
"valueCodeableConcept": {
"coding": [
{
"system": "http://hl7.org/fhir/us/cqfmeasures/CodeSystem/quality-programs",
"code": "qpp",
"display": "QPP"
}
]
}
}
]
}
performanceYear
. This can contain Measures from a variety of programs like (mips, app1, or mvp Id's).$qpp-build
parameters for programName
and submissionMethod
will act as the enforcement points to ensure that a compliant report can be built.{
"relatedArtifact": [
{
"type": "composed-of",
"display": "CMS130",
"resource": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR|0.0.003"
}
]
}
type
equals "composed-of" (required type, does not change)resource
must match the canonical url of the FHIR Measure Resource (url & version)
http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR|0.0.003
MeasureReports
with matching url's are used to build the qpp report.This is an example of a Program Library Resource.
{"resourceType": "Library",
"id": "qpp-quality-program-mips-ehr-1",
"meta": {
"profile": [
"http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/quality-program-cqfm"
]
},
"url": "http://hl7.org/fhir/us/cqfmeasures/Library/ep-ec-quality-program",
"identifier": [
{
"use": "official",
"system": "http://example.org/fhir/cqi/ecqm/Library/Identifier",
"value": "Mips Test Quality Program"
}
],
"version": "0.1.0",
"name": "MeasurementSet MIPS EHR Measures",
"title": "qpp-mips-ehr-program",
"status": "active",
"experimental": true,
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/library-type",
"code": "asset-collection"
}
]
},
"date": "2019-09-03",
"publisher": "Smile Digital Health",
"description": "This library is an example of a quality program specification",
"useContext": [
{
"code": {
"system": "http://terminology.hl7.org/CodeSystem/usage-context-type",
"code": "program"
},
"valueCodeableConcept": {
"coding": [
{
"system": "http://hl7.org/fhir/us/cqfmeasures/CodeSystem/quality-programs",
"code": "qpp",
"display": "QPP"
}
]
}
}
],
"approvalDate": "2019-08-03",
"lastReviewDate": "2019-08-03",
"relatedArtifact": [
{
"type": "composed-of",
"display": "CMS130",
"resource": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR|0.0.003"
},
{
"type": "composed-of",
"display": "CMS124",
"resource": "http://ecqi.healthit.gov/ecqms/Measure/CervicalCancerScreeningFHIR|0.0.005"
},
{
"type": "composed-of",
"display": "CMS157",
"resource": "http://content.alphora.com/fhir/dqm/Measure/CMS157|2.0.0"
},
{
"type": "composed-of",
"display": "CMS138",
"resource": "http://content.alphora.com/fhir/dqm/Measure/CMS138"
}
]
}
In order for $qpp-build
to correctly produce a CMS QPP report, it requires a Measure Resource with specific identifiers to be populated.
These required identifiers act as the connection between FHIR Measure Report resources passed into the $qpp-build
operation, and the CMS specification.
CMS Specification for Colorectal Cancer, where we uniquely identify the specification using "measureId": "113"
.
{
"title": "Colorectal Cancer Screening",
"eMeasureId": "CMS130v12",
"nqfEMeasureId": null,
"nqfId": "0034",
"measureId": "113",
"description": "Percentage of patients 45-75 years of age who had appropriate screening for colorectal cancer.",
"measureType": "process",
"isHighPriority": false,
"primarySteward": "National Committee for Quality Assurance",
"firstPerformanceYear": 2017,
"lastPerformanceYear": null,
"isInverse": false,
"category": "quality",
"isRegistryMeasure": false,
"isRiskAdjusted": false,
"icdImpacted": [],
"isClinicalGuidelineChanged": false,
"isIcdImpacted": false,
"clinicalGuidelineChanged": [],
"metricType": "singlePerformanceRate",
"allowedPrograms": [
"pcf"
],
"submissionMethods": [
"electronicHealthRecord",
"cmsWebInterface"
],
"measureSets": [],
"measureSpecification": {
"electronicHealthRecord": "https://ecqi.healthit.gov/ecqm/ec/2024/cms0130v12"
},
"eMeasureUuid": "2c928084-82ea-d7c5-0183-6bf2944520dc",
"strata": [
{
"description": "Patients with one or more screenings for colorectal cancer. Appropriate screenings are defined by any one of the following criteria: \n- Fecal occult blood test (FOBT) during the measurement period\n- Stool DNA (sDNA) with FIT test during the measurement period or the two years prior to the measurement period\n- Flexible sigmoidoscopy during the measurement period or the four years prior to the measurement period\n- CT Colonography during the measurement period or the four years prior to the measurement period\n- Colonoscopy during the measurement period or the nine years prior to the measurement period",
"eMeasureUuids": {
"initialPopulationUuid": "CE7E7820-62A0-430C-93D4-36F096BC66F1",
"denominatorUuid": "01CFAAD2-55BE-4F1F-AF0D-58C11583FEFC",
"numeratorUuid": "D01C8F72-6AA1-4DF9-8458-29DE8F10D4FE",
"denominatorExclusionUuid": "6B6E3E45-86AA-4AEC-917D-6A7D5D452513",
"strata": [
"0C8CCBC3-BC5D-45AE-9ADD-4AA70859516C",
"4874EA9D-3E03-4E4D-8605-264136B3A0B7"
]
}
}
]
}
It is required to add this value measureId: 113
from the CMS specification to Measure resources that are a member of the Quality Program Library
or the operation will not work. This acts as the lookup value to CMS to validate compliance while building the report.
This is an example of the identifier that is required on the Measure resource:
{
"use": "official",
"type": {
"coding": [
{
"system": "http://hl7.org/fhir/us/cqfmeasures/CodeSystem/identifier-type",
"code": "publisher"
}
]},
"value": "113"
}
CMS measureId populated on a full Measure Resource
{
"resourceType": "Measure",
"id": "CMS130",
"url": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR",
"identifier": [ {
"use": "official",
"system": "http://hl7.org/fhir/cqi/ecqm/Measure/Identifier/cms",
"value": "CMS130v11"
},
{
"use": "official",
"type": {
"coding": [
{
"system": "http://hl7.org/fhir/us/cqfmeasures/CodeSystem/identifier-type",
"code": "publisher"
}
]
},
"value": "113"
} ]
}
Supported values for entityType parameter for qpp-build
are listed below, these values are used to define the type of entity you are submitting to CMS for.
Individual
- One of several MIPS participation options, where MIPS data is collected and submitted on behalf a single clinician (identified by TIN/NPI combination).Group
- One of several MIPS participation options, where MIPS data is collected, aggregated and submitted on behalf all the clinicians in the TIN.virtualGroup
- A participation option available to solo practitioners and practices with 10 or fewer clinicians that allows them to join forces and submit aggregated data for all the clinicians in the TINs.APM
- An entity that participates in an Alternative Payment Model or other payer arrangement through a direct agreement with CMS, other payer, or through federal or state law or regulation.for more information on what entityType your organization is, reach out to your known CMS contact or representative.
virtualGroup
or APM
entityType associated with the submission. This value should be supplied to you from CMS and can be appended to your qpp json report via this parameter or by storing on Organization
resource used in OrganizationId
parameter.qpp-build
operation can construct different elements of qpp json to conform to a specific workflow need in the submission process.Initial Report Submission Replace MeasurementSet Replace Measurement
Submission
-- this will force the user to generate reports for each Measure specified in the "Quality Program Profile", and will assume no submission was created before it. If this parameter is left blank, this will be the default behavior of qpp-build
operation.
MeasurementSet
-- this will force the user to generate a single MeasurementSet that matches the measures in Specialty MeasurementSet Profile
, this will require a single MeasurementSet, so any profile with multiple measurementSets will not work.
Measurement
-- this will force the user to generate a single Measurement json body that is inside the "Quality Program Profile", this will only create one measurement resource. This will overwrite existing measurement with the same id and requires the measurementSetId
parameter to be populated with the value from CMS server.
qpp-build
when qppStructureType
parameter is set.qpp-build
operation.measureReportIds
parameter are from the same year as the performanceYear
.YYYY
or as an example value 2023
, this will store as start of 2023-01-01
and end at 2023-12-31
.Once reporting is generated from the $evaluate-measure
operation, and an output MeasureReport exists in CDR, you would reference the "id" of the MeasureReport(s) and add to the $qpp-build
operation parameter as a comma separated list.
$qpp-build
would be
measureReportIds=measurereport-QPP-130
measureReportIds=measurereport-QPP-130&measureReportIds=measurereport-QPP-124&measureReportIds=measurereport-QPP-138
Quality Program Library
resource referenced by the parameter qualityProgramLibraryId
.
PerformanceYear
parameter.
PerformanceYear
'2023'PerformanceYear
'2024'PerformanceYear
qualityProgram
parameter is a required parameter for $qpp-build
that allows for passing in the qpp program that you would like to build a report for.
The purpose of this parameter is to enforce compliance of selected Measure Reports in the measureReportIds
parameter to meet compliance for a specific cms quality program.
Correct Example
qualityProgram=mips
is populated for the parameter, measure reports populated for the measureReportIds
parameter contain: MeasureReport-1 belongs to only mips
& MeasureReport-2 belongs to app1
& mips
. This means they both can submit for selected program mips
Bad Example
qualityProgram=app1
is populated for the parameter, measure reports populated for the measureReportIds
parameter contain: MeasureReport-1 belongs to only mips
& MeasureReport-2 belongs to app1
& mips
. This means one of the measure Reports is not allowed to submit for app1
and would throw an error.Supported Programs:
This parameter was made available as a runtime override of the dqm module configuration that controls the same functionality. This allows external applications to drive formatting requirements more dynamically, without needing to restart the module.
submissionMethod
parameter refers to the cms api submission method, which allows two modes.
electronicHealthRecord
- an OAuth api connection that requires direct login to CMSregistry
- a provided auth token that is used to submit on behalf of several providers.Each mode influences the structure of a qpp report as well as specific endpoints that are permissible to users.
This parameter or configuration option enforces compliance of measureReportIds
chosen for $qpp-build
operation to be compliant with the same submissionMethod
, defined in the CMS Specifications.
If the operation contains values for measureReportIds
parameter with conflicting support for submissionMethod
(one supports only electronicHealthRecord
and the other only registry
), the operation will throw an error.
If executing $qpp-build
operation from the backend, ensure the user has the correct rights and modules on CDR.
FHIR Client Super user
and above will also allow this to be accessed.$qpp-build
Operation is enabled through the DQM Module and has configurations available within the web-admin console that are required for qpp workflows.
This configuration is found within the DQM Module under qpp category, the user will be able to change the type of qpp-build output required for performing CMS qpp submissions. This accepts only values of electronicHealthRecord
or registry
. The default value is electronicHealthRecord
.
This means only Measures that are compliant with the chosen submission method are able to be added to the $qpp-build
operation for submission.
This also controls behavior of the operation by building either a Submission or MeasurementSet for posting to CMS within the DQM UI.
This configuration also allows for a runtime override via the submissionMethod parameter
See here for Dqm Module Configuration Categories
$qpp-build
relies on the output MeasureReport
resources that are created from the $evaluate-measure
operation and is a configurable to help users identify and correlate to Organization
resources used for $qpp-build
.
This correlation is especially helpful when building reporting for multiple Providers, Practices, or/and Organizations that may simultaneously store data in the same CDR server. This will allow you to append references to a reporting Organization
into MeasureReport
resources to delineate which report created belongs to which Organization
.
This Organization based filtering of reporting is directly integrated into DQM UI to manage this for users. see DQM UI for more information.
See here for Dqm Module Configuration Categories
When running Distributed Evaluate Measure
, you have the option to populate a MeasureReport.reporter value by setting this configuration to point at an Organization
FHIR resource reference.
For the use cases that will use the same Organization
resource for all MeasureReport
resources created, and only performing submissions for one entity. This setting can be used to globally represent and tie your reporting to the organizationId that you will use for $qpp-build
operations.
If left blank it will not populate MeasureReport.reporter.
See here for Default Reporter Configuration
When this config is enabled, the user will be able to populate MeasureReport.reporter when running Distributed Evaluate Measure
with a reference to an Organization
sourced from a Group
resource used as a subject
or practitioner
parameter value to represent the subject population.
The operation would take the priority of looking for a pre-defined field on the passed in Group
called managingEntity
as a reference to extract Organization
. If no reference exists, then it will use the Default Reporter
config setting instead.
This is how you can run reporting for defined populations of patients or defined attributions to practitioners that are defined for different organizations, practices, and providers. The managingEntity
field should be the sameorganizationId that you will use for $qpp-build
operations.
See here for Group managingEntity Configuration
Patient Group
{
"resourceType": "Group",
"id": "demo-group-patients-1",
"type": "person",
"actual": true,
"name": "Demo Group 1",
"identifier": [
{
"use": "usual",
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "MR",
"display": "Medical Record Number"
}
]
},
"system": "http://hospital.smarthealthit.org",
"value": "demo-group-1"
}
],
"member": [
{ "entity": { "reference": "Patient/denom-EXM130" } },
{ "entity": { "reference": "Patient/neg-ip-EXM130" } },
{ "entity": { "reference": "Patient/numer-EXM130" } }
],
"managingEntity": "Organization/organization-1"
}
Practitioner Group
{
"resourceType": "Group",
"id": "practitioner-group-1",
"type": "practitioner",
"actual": true,
"member": [
{ "entity": { "reference": "Practitioner/practitioner-2" } },
{ "entity": { "reference": "Practitioner/practitioner-1" } }
],
"managingEntity": "Organization/organization-1"
}
GET http://localhost:8000/MeasureReport/$qpp-build?organizationId=org-acme-payer-1&qualityProgramLibraryId=QPP-quality-program&measureReportIds=measurereport-QPP-157&measureReportIds=measurereport-QPP-130&measureReportIds=measurereport-QPP-124&performanceYear=2023&entityType=group
{
"measurementSets": [
{
"performanceEnd": "2023-12-31",
"performanceStart": "2023-01-01",
"programName": "mips",
"category": "quality",
"submissionMethod": "electronicHealthRecord",
"measurements": [
{
"measureId": "113",
"value": {
"eligiblePopulation": 2,
"eligiblePopulationExclusion": 0,
"performanceMet": 1,
"performanceNotMet": 1,
"isEndToEndReported": true,
"eligiblePopulationException": 0
}
},
{
"measureId": "309",
"value": {
"eligiblePopulation": 2,
"eligiblePopulationExclusion": 0,
"performanceMet": 1,
"performanceNotMet": 1,
"isEndToEndReported": true,
"eligiblePopulationException": 0
}
},
{
"measureId": "143",
"value": {
"eligiblePopulation": 27,
"eligiblePopulationExclusion": 0,
"performanceMet": 13,
"performanceNotMet": 14,
"isEndToEndReported": true,
"eligiblePopulationException": 0
}
},
{
"measureId": "226",
"value": {
"strata": [
{
"eligiblePopulation": 12,
"eligiblePopulationExclusion": 0,
"performanceMet": 10,
"performanceNotMet": 0,
"eligiblePopulationException": 2,
"stratum": "screened"
},
{
"eligiblePopulation": 12,
"eligiblePopulationExclusion": 0,
"performanceMet": 5,
"performanceNotMet": 1,
"eligiblePopulationException": 2,
"stratum": "overall"
},
{
"eligiblePopulation": 12,
"eligiblePopulationExclusion": 0,
"performanceMet": 7,
"performanceNotMet": 1,
"eligiblePopulationException": 4,
"stratum": "combinedPopulations"
}
],
"isEndToEndReported": true
}
}
]
}
],
"performanceYear": 2023,
"entityType": "group",
"taxpayerIdentificationNumber": "000000001"
}
GET http://localhost:8000/MeasureReport/$qpp-build?organizationId=org-acme-payer-1&qualityProgramLibraryId=QPP-quality-program&measureReportIds=measurereport-QPP-157&measureReportIds=measurereport-QPP-130&measureReportIds=measurereport-QPP-124&performanceYear=2023&entityType=group&qppStructureType=measurementSet
Requires only one measurementSet be provided
{
"measurementSets": [
{
"performanceEnd": "2023-12-31",
"performanceStart": "2023-01-01",
"programName": "mips",
"category": "quality",
"submissionMethod": "electronicHealthRecord",
"measurements": [
{
"measureId": "113",
"value": {
"eligiblePopulation": 2,
"eligiblePopulationExclusion": 0,
"performanceMet": 1,
"performanceNotMet": 1,
"isEndToEndReported": true,
"eligiblePopulationException": 0
}
},
{
"measureId": "309",
"value": {
"eligiblePopulation": 2,
"eligiblePopulationExclusion": 0,
"performanceMet": 1,
"performanceNotMet": 1,
"isEndToEndReported": true,
"eligiblePopulationException": 0
}
},
{
"measureId": "143",
"value": {
"eligiblePopulation": 27,
"eligiblePopulationExclusion": 0,
"performanceMet": 13,
"performanceNotMet": 14,
"isEndToEndReported": true,
"eligiblePopulationException": 0
}
},
{
"measureId": "226",
"value": {
"strata": [
{
"eligiblePopulation": 12,
"eligiblePopulationExclusion": 0,
"performanceMet": 10,
"performanceNotMet": 0,
"eligiblePopulationException": 2,
"stratum": "screened"
},
{
"eligiblePopulation": 12,
"eligiblePopulationExclusion": 0,
"performanceMet": 5,
"performanceNotMet": 1,
"eligiblePopulationException": 2,
"stratum": "overall"
},
{
"eligiblePopulation": 12,
"eligiblePopulationExclusion": 0,
"performanceMet": 7,
"performanceNotMet": 1,
"eligiblePopulationException": 4,
"stratum": "combinedPopulations"
}
],
"isEndToEndReported": true
}
}
]
}
],
"performanceYear": 2023,
"entityType": "group",
"taxpayerIdentificationNumber": "000000001"
}
requires measurementSetId parameter
GET http://localhost:8000/MeasureReport/$qpp-build?organizationId=org-acme-payer-1&qualityProgramId=QPP-quality-program&measureReportIds=measurereport-QPP-130&performanceYear=2023&entityType=group&qppStructureType=measurement&measurementsetid=1234567
{
"measurementSetId": "1234567",
"measureId": "113",
"value": {
"eligiblePopulation": 2,
"eligiblePopulationExclusion": 0,
"performanceMet": 1,
"performanceNotMet": 1,
"isEndToEndReported": true,
"eligiblePopulationException": 0
}
}