Skip to content

Commit 88704fc

Browse files
authored
Merge pull request #329 from CMSgov/QPPA-10471-py25-updates
QPPA-10471: Updates for PY25 changes
2 parents 10ea26c + f97fc6b commit 88704fc

File tree

12 files changed

+662
-132
lines changed

12 files changed

+662
-132
lines changed

src/app/components/app.test.tsx

Lines changed: 585 additions & 1 deletion
Large diffs are not rendered by default.

src/app/components/guides/advanced-tutorial.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { CodeTab, LinkToId, ExternalLink, ApiExample } from '../../../shared';
2-
import { steps, apiExamples } from './data';
1+
import { LinkToId, ExternalLink } from '../../../shared';
32
import envConfig from '../../../envConfig';
43

54
import '../../../styles/components/tutorial.scss';
@@ -8,18 +7,19 @@ import { DocPageProps } from '../../../shared/types';
87
const AdvancedTutorial: React.FC<DocPageProps> = ({dataTestId}: DocPageProps) => {
98
return (
109
<div data-testid={dataTestId}>
11-
<p className='qpp-docs-page-updated'>Last Updated: 08/28/2024</p> {/* IMPORTANT: update this Last-Updated value if you have made any changes to this page's content. */}
10+
<p className='qpp-docs-page-updated'>Last Updated: 08/28/2025</p> {/* IMPORTANT: update this Last-Updated value if you have made any changes to this page's content. */}
1211
<h2 className='ds-text-heading--2xl' style={{marginTop: 0}} id='advanced-tutorial'>Tutorial: Add and update data via API</h2>
1312
<p>
1413
In the <LinkToId to='/tutorial' text='first tutorial' /> we covered how to create a measurement set and retrieve the score in two different API requests. We're now going to build on the previous tutorial by adding another measure to the measurement set we created in the previous tutorial. All of these examples serve to illustrate how the Submissions API can make it easier to react to and fix issues that arise.
1514
</p>
1615

1716
<h3 className='tutorial-header-link' id='add-more-measures'>Add more measures to an existing measurement set</h3>
1817
<p>
19-
Here's a <code>PATCH</code> request to add more measures to an existing measurement set. You can pass an <code>Accept</code> header to specify the API version and the desired response format by using our custom mime type, <code>application/vnd.qpp.cms.gov.v1+json</code>. We support JSON by using <code>+json</code>. You can also continue to use a standard <code>application/json</code> header, which will point to the latest version. Check out the response and request below!
18+
You can use a <code>PATCH</code> request to add more measures to an existing measurement set. You can pass an <code>Accept</code> header to specify the API version and the desired response format by using our custom mime type, <code>application/vnd.qpp.cms.gov.v1+json</code>. We support JSON by using <code>+json</code>. You can also continue to use a standard <code>application/json</code> header, which will point to the latest version.
19+
</p>
20+
<p>
21+
To see an example request and response, please see the <code>PATCH /measurement-sets/:id</code> section within the <ExternalLink href={`${envConfig.qppCmsPreviewUrl}/api/submissions/public/docs`} text='Interactive Docs' />.
2022
</p>
21-
<ApiExample data={apiExamples.measurementSetsId2} />
22-
<CodeTab data={steps.advanced2} />
2323

2424
<h3>Next steps</h3>
2525
<p>

src/app/components/guides/basic-tutorial.tsx

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
import { ExternalLink, CodeTab, ApiExample, LinkToId } from '../../../shared';
1+
import { ExternalLink, LinkToId } from '../../../shared';
22
import envConfig from '../../../envConfig';
3-
import { steps, apiExamples } from './data';
43
import { DocPageProps } from '../../../shared/types';
54

65
const BasicTutorial: React.FC<DocPageProps> = ({dataTestId}: DocPageProps) => {
76
return (
87
<div data-testid={dataTestId}>
9-
<p className='qpp-docs-page-updated'>Last Updated: 08/28/2024</p> {/* IMPORTANT: update this Last-Updated value if you have made any changes to this page's content. */}
8+
<p className='qpp-docs-page-updated'>Last Updated: 08/28/2025</p> {/* IMPORTANT: update this Last-Updated value if you have made any changes to this page's content. */}
109
<h2 className='ds-text-heading--2xl' style={{marginTop: 0}}>Tutorial: Create and Score Data via API</h2>
1110
<p>
1211
The Submissions API is an easy way to manage your performance data with CMS. Performance data is organized into submissions, which can have many measurements. Measurements within a submission are also grouped by category (e.g. quality) and submission method (e.g. registry) and program name (e.g. mips) into measurement sets.
@@ -26,26 +25,22 @@ const BasicTutorial: React.FC<DocPageProps> = ({dataTestId}: DocPageProps) => {
2625
When submitting, you can pass an <code>Accept</code> header to specify the API version and type of response back by using our custom mime type, <code>application/vnd.qpp.cms.gov.v1+json</code>. We support JSON by using <code>+json</code>. Right now, only version <code>v1</code> is supported. You can also continue to use a standard <code>application/json</code> header, which will point to the latest version.
2726
</p>
2827
<p>
29-
We'll also need to supply some information to tell CMS how to identify this particular submission, which you can see below. Every submission is unique to the combination of the fields provided. Note that we enforce fake TINs (starting with <code>000</code>) in the Developer Preview Testing Environment to avoid accidentally collecting personally identifiable information.
28+
We'll also need to supply some information to tell CMS how to identify this particular submission. Every submission is unique to the combination of the fields provided. Note that we enforce fake TINs (starting with <code>000</code>) in the Developer Preview Testing Environment to avoid accidentally collecting personally identifiable information.
3029
</p>
3130
<p>
32-
Take a look at the request below, and then click the 'Response' tab to see what the API returns when we submit this request!
31+
To see an example request and response, please see the <code>POST /measurement-sets</code> section within the <ExternalLink href={`${envConfig.qppCmsPreviewUrl}/api/submissions/public/docs`} text='Interactive Docs' />.
3332
</p>
34-
<ApiExample data={apiExamples.measurementSets} />
35-
<CodeTab data={steps.basic1} />
3633

3734
<h3 className='ds-text-heading--xl' id='scoring-a-submission'>Scoring a submission</h3>
3835
<p>
3936
With the submission <code>id</code> we were given, we can ask the API to calculate the submission score with a GET request. We don't need to include a request body this time since we're only interested in retrieving the score, and CMS doesn't need any information other than the submission <code>id</code>.
4037
</p>
41-
<ApiExample data={{verb: 'GET', url: '/submissions/:id/score'}} />
42-
<CodeTab data={steps.basic2} />
43-
4438
<p>
45-
In general, we can think about the Submissions API as a way to have a live conversation with CMS about performance measurements. Rather than waiting months to hear back about missing information or a score, the API gives us feedback that is immediate, specific, and actionable - we can easily make another API request if necessary.
39+
To see an example request and response, please see the <code>GET /submissions/:id/score</code> section within the <ExternalLink href={`${envConfig.qppCmsPreviewUrl}/api/submissions/public/docs`} text='Interactive Docs' />.
4640
</p>
41+
4742
<p>
48-
What we've shown is an example of working directly with the API - typically these requests are made through a web interface or script, but the requests &amp; responses above illustrate the kind of power and speed the Submissions API and applications built against it can provide.
43+
In general, we can think about the Submissions API as a way to have a live conversation with CMS about performance measurements. Rather than waiting months to hear back about missing information or a score, the API gives us feedback that is immediate, specific, and actionable - we can easily make another API request if necessary.
4944
</p>
5045
<p>
5146
<em>Disclaimer:</em> Scoring is subject to change, based on periodic policy updates, eligibility reviews, and technical integration developments.

src/app/components/references/benchmarks.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@ import { DocPageProps } from '../../../shared/types';
77
const Benchmarks: React.FC<DocPageProps> = ({dataTestId}: DocPageProps) => {
88
return (
99
<div data-testid={dataTestId}>
10-
<p className='qpp-docs-page-updated'>Last Updated: 08/28/2024</p> {/* IMPORTANT: update this Last-Updated value if you have made any changes to this page's content. */}
10+
<p className='qpp-docs-page-updated'>Last Updated: 08/28/2025</p> {/* IMPORTANT: update this Last-Updated value if you have made any changes to this page's content. */}
1111
<h2 className='ds-text-heading--2xl' style={{marginTop: 0}} id='current-benchmarks'>Benchmarks</h2>
1212
<p className='ds-text-body--lg'>
13-
Benchmarks serve as the reference points for measurements and are used to score submissions. Each benchmark is unique based upon its combination of measureId, submissionMethod, and performanceYear, and each has a list of 9 data points.
13+
Benchmarks serve as the reference points for measurements and are used to score submissions. Each benchmark is unique based upon its combination of measureId, submissionMethod, and performanceYear, and each has a list of 11 data points.
1414
</p>
1515
<p>
16-
Please see the <ExternalLink href={`${envConfig.amazoneawsUrl}/uploads/2671/2024BenchmarksUserGuide.pdf`}
17-
text='2024 Quality Benchmarks User Guide with Scoring Examples' /> for more information on MIPS Quality Benchmarks.
16+
Please see the <ExternalLink href={`${envConfig.amazoneawsUrl}/uploads/3162/2025-Quality-Benchmarks-User-Guide.pdf`}
17+
text='2025 Quality Benchmarks User Guide with Scoring Examples' /> for more information on MIPS Quality Benchmarks.
1818
</p>
1919
<p>
20-
You can view the benchmarks for a Performance Year using the publicly accessible <ExternalLink href={`${envConfig.qppCmsPreviewUrl}/api/submissions/public/docs/#/Public%20Endpoints/listBenchmarks`} text='benchmarks endpoint' />.
20+
You can view the benchmarks for a Performance Year using the publicly accessible <ExternalLink href={`${envConfig.qppCmsPreviewUrl}/api/submissions/public/docs/#/Public%20Endpoints/BenchmarksController_getBenchmarks`} text='benchmarks endpoint' />.
2121
</p>
2222
<br />
2323
<CodeTab data={benchmarksTabs.fields} />

src/app/components/references/data.ts

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@ interface IScoringData {
1919
[k: string]: ICodeTab[];
2020
}
2121

22-
export const measurementSetPracticeDetails = {
23-
'Practice Details': 'practice-details',
24-
};
25-
2622
export const measurementsTitleAndId = {
2723
'Boolean': 'boolean-measurements',
2824
'Proportion': 'proportion-measurements',
@@ -329,18 +325,13 @@ export const measurementSetsFields: IFields = {
329325
{ name: 'updatedAt', value: 'datetime', description: 'The modification time of the measurement set in <a href="https://www.ietf.org/rfc/rfc3339.txt" rel="noopener noreferrer" target="_blank">RFC 3339</a> format.', notes: ' ' },
330326
{ name: 'submissionId', value: 'string', description: 'The id of the submission in which the measurement set belongs.', notes: ' ' },
331327
{ name: 'category', value: 'string', description: 'The category of the measurement set. Acceptable values are: <li><b>"quality"</b></li> <li><b>"pi"</b></li> <li><b>"ia"</b></li>', notes: 'writable, required' },
332-
{ name: 'cehrtId', value: 'string', description: 'The CMS EHR Certification Identification Number is generated by the CHPL. This is only applicable to Promoting Interoperability measurement sets.', notes: 'writable, required' },
328+
{ name: 'cehrtId', value: 'string', description: 'The CMS EHR Certification Identification Number is generated by the CHPL. This is applicable to Promoting Interoperability and eCQM Quality measurement sets. CEHRT ID must be in the format 2025CXXXXXXXXXX or XX15CXXXXXXXXXX.', notes: 'writable, required' },
333329
{ name: 'submissionMethod', value: 'string', description: 'The method by which the measurement set data was submitted. Acceptable values are: <ul><li>Quality Category:<ul><li><b>"registry"</b> for MIPS CQMs reporting</li><li><b>"electronicHealthRecord"</b> for eCQM Reporting</li></ul></li><li>Promoting Interoperability and Improvement Activities:<ul><li><b>"registry"</b> for non QRDA format</li><li><b>"electronicHealthRecord"</b> for QRDA</li></ul></li></ul>', notes: 'writable, required' },
334-
{ name: 'programName', value: 'string', description: 'The quality payment program under which the measurementSet should be scored. Acceptable values are: <li><b>"mips"</b> for Traditional MIPS Reporting<li><b>"app1"</b> for the APM Performance Pathway</li><li><b>"MVP ID"</b> more information on the IDs can be found at the <a href="https://qpp.cms.gov/mips/mips-value-pathways" rel="noopener noreferrer" target="_blank">QPP Resource Library</a></li><li><b>"pcf"</b> for PCF Program submissions</li> If not provided, the programName will be recorded as "mips".', notes: 'writable, optional' },
335-
{ name: 'practiceDetails', value: 'object', description: `This object contains the taxpayerIdentificationNumber and/or nationalProviderIdentifiers of the practice associated with the measurement set. Optional if programName is set to <b>"pcf"</b>. Must be omitted if programName is not set to <b>"pcf"</b>. More details <a href='measurement-sets#practice-details'>below</a>.`, notes: 'writeable, optional'},
330+
{ name: 'programName', value: 'string', description: 'The quality payment program under which the measurementSet should be scored. Acceptable values are: <li><b>"mips"</b> for Traditional MIPS Reporting</li><li><b>"app1"</b> for the legacy APM Performance Pathway</li><li><b>"appPlus"</b> for the APM Performance Pathway Plus Quality Measure Set</li><li><b>"MVP ID"</b> more information on the IDs can be found at the <a href="https://qpp.cms.gov/mips/mips-value-pathways" rel="noopener noreferrer" target="_blank">QPP Resource Library</a></li> If not provided, the programName will be recorded as "mips".', notes: 'writable, optional' },
336331
{ name: 'performanceStart', value: 'string', description: 'A date in RFC 3339 format with only the date part (for instance, "2013-01-15"). The first date when the measurement data is applicable.', notes: 'writable, required' },
337332
{ name: 'performanceEnd', value: 'string', description: 'A date in RFC 3339 format with only the date part (for instance, "2013-01-15"). The last date when the measurement data is applicable.', notes: 'writable, required' },
338333
{ name: 'measurements', value: 'Array(measurements)', description: 'Measurements associated with the measurement set.', notes: 'writable, optional' },
339334
],
340-
practiceDetails: [
341-
{ name: 'taxpayerIdentificationNumber', value: 'string', description: 'The 9-digit identifier of the practice associated with the measurementSet. ', notes: 'writeable, optional'},
342-
{ name: 'nationalProviderIdentifiers', value: 'string[]', description: 'An array of strings containing the 10-digit identifiers of the practice associated with the measurementSet, separated by commas.', notes: 'writeable, optional'},
343-
],
344335
};
345336

346337
export const measurementSetsTabs: ITabs = {
@@ -356,19 +347,9 @@ export const measurementSetsTabs: ITabs = {
356347
"cehrtId": string,
357348
"submissionMethod": string,
358349
"programName": string,
359-
"practiceDetails": object(<a href='measurement-sets#practice-details'>Practice Details</a>),
360350
"performanceStart": date,
361351
"performanceEnd": date,
362352
"measurements": array(<a href='measurements'>Measurements Resource</a>)
363-
}`,
364-
},
365-
],
366-
practiceDetails: [
367-
{
368-
tab: 'Sample JSON',
369-
code: `{
370-
"taxpayerIdentificationNumber": string,
371-
"nationalProviderIdentifiers": string[]
372353
}`,
373354
},
374355
],
@@ -428,8 +409,8 @@ export const benchmarksTabs: ITabs = {
428409
{
429410
tab: 'Sample JSON',
430411
code: `{
431-
"benchmarkYear": 2021,
432-
"performanceYear": 2024,
412+
"benchmarkYear": 2023,
413+
"performanceYear": 2025,
433414
"metricType": "singlePerformanceRate",
434415
"status": "historical",
435416
"isInverse": true,

src/app/components/references/error-codes.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1+
import envConfig from '../../../envConfig';
12
import { ExternalLink } from '../../../shared';
23
import { DocPageProps } from '../../../shared/types';
34

45
const ErrorCodes: React.FC<DocPageProps> = ({dataTestId}: DocPageProps) => {
56
return (
67
<div data-testid={dataTestId}>
7-
<p className='qpp-docs-page-updated'>Last Updated: 08/31/2022</p> {/* IMPORTANT: update this Last-Updated value if you have made any changes to this page's content. */}
8+
<p className='qpp-docs-page-updated'>Last Updated: 08/28/2025</p> {/* IMPORTANT: update this Last-Updated value if you have made any changes to this page's content. */}
89
<h2 className='ds-text-heading--2xl' style={{marginTop: 0}} id='references'>Error Codes</h2>
910

10-
<h3 className='ds-text-heading--lg'>The Submissions API Error Codes summary can be found in the <ExternalLink href={`https://cmsgov.github.io/qpp-developer-preview-docs/error-codes`} text='Developer Preview Documentation' /></h3>
11+
<h3 className='ds-text-heading--lg'>To review a list of response codes provided by the API, please visit the <ExternalLink href={`${envConfig.qppCmsPreviewUrl}/api/submissions/public/docs`} text='Interactive Docs' />.</h3>
1112
</div>
1213
);
1314
};

src/app/components/references/measurement-sets.tsx

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { ExternalLink, DataModelTable, CodeTab } from '../../../shared';
22
import envConfig from '../../../envConfig';
3-
import { measurementSetsFields, measurementSetsTabs, measurementSetPracticeDetails } from './data';
3+
import { measurementSetsFields, measurementSetsTabs } from './data';
44
import { DocPageProps } from '../../../shared/types';
55

66
const MeasurementSets: React.FC<DocPageProps> = ({dataTestId}: DocPageProps) => {
77
return (
88
<div data-testid={dataTestId}>
9-
<p className='qpp-docs-page-updated'>Last Updated: 07/06/2023</p> {/* IMPORTANT: update this Last-Updated value if you have made any changes to this page's content. */}
9+
<p className='qpp-docs-page-updated'>Last Updated: 08/28/2025</p> {/* IMPORTANT: update this Last-Updated value if you have made any changes to this page's content. */}
1010
<h2 className='ds-text-heading--2xl' style={{marginTop: 0}}>Measurement Sets</h2>
1111
<p className='ds-text-body--lg'>
1212
The MeasurementSets resource represents performance data for a specified category. Each Submission can have multiple MeasurementSets. Each MeasurementSet in a given Submission is uniquely identified by category, submission method, and programName. MeasurementSets contain Measurements, which can be accessed both via MeasurementSets methods and Measurements methods.
@@ -17,17 +17,6 @@ const MeasurementSets: React.FC<DocPageProps> = ({dataTestId}: DocPageProps) =>
1717

1818
<CodeTab data={measurementSetsTabs.fields} />
1919
<DataModelTable data={measurementSetsFields.fields} />
20-
<h2
21-
className='ds-text-heading--2xl'
22-
id={measurementSetPracticeDetails['Practice Details']}
23-
>
24-
Practice Details
25-
</h2>
26-
<p className='ds-text-body--lg'>
27-
The MeasurementSet property practiceDetails is an optional property only available when programName is set to "pcf".
28-
</p>
29-
<CodeTab data={measurementSetsTabs.practiceDetails} />
30-
<DataModelTable data={measurementSetsFields.practiceDetails} />
3120
</div>
3221
);
3322
};

src/app/components/references/references.tsx

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { DocPageProps } from '../../../shared/types';
55
const References: React.FC<DocPageProps> = ({dataTestId}: DocPageProps) => {
66
return (
77
<div data-testid={dataTestId}>
8-
<p className='qpp-docs-page-updated'>Last Updated: 05/12/2021</p> {/* IMPORTANT: update this Last-Updated value if you have made any changes to this page's content. */}
8+
<p className='qpp-docs-page-updated'>Last Updated: 08/28/2025</p> {/* IMPORTANT: update this Last-Updated value if you have made any changes to this page's content. */}
99
<h2 className='ds-text-heading--2xl' style={{marginTop: 0}} id='references'>References</h2>
1010

1111
<h3 className='ds-text-heading--xl'>General References</h3>
@@ -50,13 +50,6 @@ const References: React.FC<DocPageProps> = ({dataTestId}: DocPageProps) => {
5050
Interactive AUTH API Documentation: <ExternalLink href={`${envConfig.qppCmsUrl}/api/auth/docs`} />
5151
</li>
5252
</ul>
53-
54-
<h3 className='ds-text-heading--xl'>CMS Web Interface API</h3>
55-
<ul>
56-
<li>
57-
Interactive Web Interface Documentation: <ExternalLink href={`${envConfig.qppCmsUrl}/api/submissions/web-interface/docs`} />
58-
</li>
59-
</ul>
6053
</div>
6154
);
6255
};

0 commit comments

Comments
 (0)