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 |
programId | 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" | |
qppPartialType | 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 qppPartialType = Measurement |
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 ProgramId
references a FHIR Library resource Id and is meant to define a Specialty Measurement Set
profile the user is intended to match conform to with the other input parameters.
ProgramId acts as a business rule enforcing profile that forces the user to populate $qpp-build
parameters to match the required conformance rules
.
RelatedArtifacts
section of Program profile must have 1 matching Measure Report
reference in $qpp-build
parameter measureReportIds
Measure Report
defined in measureReportIds
does not match a resource in the RelatedArtifacts
of profile it will throw an error to user.Measure Report
defined in RelatedArtifacts
is missing from measureReportIds
, the operation will throw an error to user.Program
(Mips, App1)
Related Artifacts
that does not conform to the same Program
selected by the Program
parameter of qpp-build
CMS API will reject the submission and throw an error.Related Artifacts
that does not conform to the same Program
as other member measures defined, the qpp-build
will throw an error.Submission Method
, if a measure in your program is not compatible the CMS api will reject it.
registry
electronicHealthRecord
MIPS Example
{"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": "mips",
"display": "MIPS"
}
]
}
}
]
}
APP1 Example
AAPM
, and replaced in operation with correct value of app1
{
"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": "aapm",
"display": "AAPM"
}
]
}
}
]
}
Program
(MIPS or APP1) and the Specialty
measurementSet.
specialty
here CMS130 Specialty Exampleprogram
here CMS130 Allowed Programs{
"relatedArtifact": [
{
"type": "composed-of",
"id": "113",
"display": "CMS130",
"resource": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR|0.0.003"
}
]
}
type
equals "composed-of" (required type, does not change)id
must be the MeasureId
specification id from QPP specification (Use specification for performance year submitting)
MeasureID
that is needed to be referenced is 113resource
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 Profile for electronicHealthRecord
submission Method and MIPS Program
{"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": "mips",
"display": "mips"
}
]
}
}
],
"approvalDate": "2019-08-03",
"lastReviewDate": "2019-08-03",
"relatedArtifact": [
{
"type": "composed-of",
"id": "113",
"display": "CMS130",
"resource": "http://ecqi.healthit.gov/ecqms/Measure/ColorectalCancerScreeningsFHIR|0.0.003"
},
{
"type": "composed-of",
"id": "309",
"display": "CMS124",
"resource": "http://ecqi.healthit.gov/ecqms/Measure/CervicalCancerScreeningFHIR|0.0.005"
},
{
"type": "composed-of",
"id": "143",
"display": "CMS157",
"resource": "http://content.alphora.com/fhir/dqm/Measure/CMS157|2.0.0"
},
{
"type": "composed-of",
"id": "226",
"display": "CMS138",
"resource": "http://content.alphora.com/fhir/dqm/Measure/CMS138"
}
]
}
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 qppPartialType
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, measurereport-QPP-124, measurereport-QPP-138
Specialty MeasurementSet
profile referenced by the parameter ProgramId
.
measureReportId
parameterPerformanceYear
parameter.
PerformanceYear
'2023'PerformanceYear
'2024'PerformanceYear
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.
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&programId=QPP-quality-program&measureReportIds=measurereport-QPP-157, measurereport-QPP-130, 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&programId=QPP-quality-program&measureReportIds=measurereport-QPP-157, measurereport-QPP-130, measurereport-QPP-124&performanceYear=2023&entityType=group&QPPPartialType=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&programId=QPP-quality-program&measureReportIds=measurereport-QPP-130&performanceYear=2023&entityType=group&QPPPartialType=measurement&measurementsetid=1234567
{
"measurementSetId": "1234567",
"measureId": "113",
"value": {
"eligiblePopulation": 2,
"eligiblePopulationExclusion": 0,
"performanceMet": 1,
"performanceNotMet": 1,
"isEndToEndReported": true,
"eligiblePopulationException": 0
}
}