Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/sonarqube.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ on:
types: [opened, synchronize, reopened]
branches:
- develop
push:
branches:
- develop

env:
PROJECT_NAME: qppa-repos-sonarqube-analysis
Expand Down
1 change: 0 additions & 1 deletion ERROR_MESSAGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,3 @@ Any text in the following format `(Example)` are considered variables to be fill
* 53 : CT - The QRDA III file must contain one Category Section v5 with the extension 2020-12-01
* 54 : CT - The APM to TIN/NPI Combination file is missing.
* 55 : CT - The Promoting Interoperability section cannot contain PI_HIE_5 with PI_HIE_1, PI_LVOTC_1, PI_HIE_4, or PI_LVITC_2
* 56 : CT - Review the Clinical Document for program `(program name)`. Only the Promoting Interoperability (PI) measure category is permitted; found `(provided category)`.
2 changes: 1 addition & 1 deletion acceptance-tests/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>acceptance-tests</artifactId>
<groupId>gov.cms.qpp.conversion</groupId>
<version>2025.11.19.01-RELEASE</version>
<version>2025.12.16.01-RELEASE</version>
<name>conversion-tests</name>
<packaging>jar</packaging>
<properties>
Expand Down
2 changes: 1 addition & 1 deletion commandline/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>gov.cms.qpp.conversion</groupId>
<artifactId>qpp-conversion-tool-parent</artifactId>
<version>2025.11.19.01-RELEASE</version>
<version>2025.12.16.01-RELEASE</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion commons/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>gov.cms.qpp.conversion</groupId>
<artifactId>qpp-conversion-tool-parent</artifactId>
<version>2025.11.19.01-RELEASE</version>
<version>2025.12.16.01-RELEASE</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,7 @@ public enum ProblemCode implements LocalizedProblem {
MEASURE_SECTION_V5_REQUIRES_CATEGORY_SECTION(95, "The QRDA III file must contain one Category Section v5 with the extension 2020-12-01"),
MISSING_API_TIN_NPI_FILE(96, "The APM to TIN/NPI Combination file is missing."),
PI_RESTRICTED_MEASURES(102, "The Promoting Interoperability section cannot contain "
+ "PI_HIE_5 with PI_HIE_1, PI_LVOTC_1, PI_HIE_4, or PI_LVITC_2", false),
SSP_PI_ONLY_MEASURE_CATEGORY(109, "Review the Clinical Document for program `(program name)`. "
+ "Only the Promoting Interoperability (PI) measure category is permitted; "
+ "found `(provided category)`.", true);
+ "PI_HIE_5 with PI_HIE_1, PI_LVOTC_1, PI_HIE_4, or PI_LVITC_2", false);

private static final Map<Integer, ProblemCode> CODE_TO_VALUE = Arrays.stream(values())
.collect(Collectors.toMap(ProblemCode::getCode, Function.identity()));
Expand Down
20 changes: 12 additions & 8 deletions commons/src/main/resources/measures-data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2547,7 +2547,7 @@
"isBonus": false,
"reportingCategory": "required",
"measureSpecification": {
"default": "https://qpp.cms.gov/docs/pi_specifications/Measure Specifications/2025-MIPS-Promoting-Interoperability-Measure-Query-of-PDMP.pdf"
"default": "https://qpp.cms.gov/docs/pi_specifications/Measure%20Specifications/2025-MIPS-Promoting-Interoperability-Measure-Query-of-PDMP-Updated-Oct2025.pdf"
},
"measureSets": [],
"exclusion": [
Expand Down Expand Up @@ -2606,7 +2606,9 @@
},
"measureSets": [],
"exclusion": null,
"substitutes": [],
"substitutes": [
"PI_EP_2_EX_2"
],
"allowedPrograms": [
"mips",
"app1",
Expand Down Expand Up @@ -2658,7 +2660,9 @@
},
"measureSets": [],
"exclusion": null,
"substitutes": [],
"substitutes": [
"PI_EP_2_EX_1"
],
"allowedPrograms": [
"mips",
"app1",
Expand Down Expand Up @@ -2706,7 +2710,7 @@
"isBonus": false,
"reportingCategory": "required",
"measureSpecification": {
"default": "https://qpp.cms.gov/docs/pi_specifications/Measure Specifications/2025-MIPS-Promoting Interoperability-Measure-Electronic-Referral-Loops-by-Sending-Health-Info.pdf"
"default": "https://qpp.cms.gov/docs/pi_specifications/Measure%20Specifications/2025-MIPS-Promoting-Interoperability-Measure-Electronic-Referral-Loops-by-Sending-Health-Info-Updated-Oct2025.pdf"
},
"measureSets": [],
"exclusion": [
Expand Down Expand Up @@ -2876,7 +2880,7 @@
"isBonus": false,
"reportingCategory": "required",
"measureSpecification": {
"default": "https://qpp.cms.gov/docs/pi_specifications/Measure Specifications/2025-MIPS-Promoting-Interoperability-Measure-Enabling-Exchange-Under-TEFCA.pdf"
"default": "https://qpp.cms.gov/docs/pi_specifications/Measure%20Specifications/2025-MIPS-Promoting-Interoperability-Measure-Enabling-Exchange-Under-TEFCA-Updated-Oct2025.pdf"
},
"measureSets": [],
"exclusion": null,
Expand Down Expand Up @@ -3771,7 +3775,7 @@
"category": "pi",
"measureId": "PI_PHCDRR_3",
"title": "Electronic Case Reporting",
"description": "The MIPS eligible clinician is in active engagement with a public health agency to electronically submit case reporting of reportable conditions.",
"description": "UPDATE: This measure has been suppressed for the CY 2025 performance period but is still required to be reported. To receive full credit for this measure, you’ll need to attest “Yes” or “No,” or claim an applicable exclusion. (The 25 points for this objective won’t be redistributed to another objective.)\nThe MIPS eligible clinician is in active engagement with a public health agency to electronically submit case reporting of reportable conditions.",
"metricType": "boolean",
"firstPerformanceYear": 2017,
"lastPerformanceYear": null,
Expand All @@ -3780,7 +3784,7 @@
"isBonus": false,
"reportingCategory": "required",
"measureSpecification": {
"default": "https://qpp.cms.gov/docs/pi_specifications/Measure%20Specifications/2025-MIPS-Promoting-Interoperability-Measure-Electronic-Case-Reporting-Updated-April-2025.pdf"
"default": "https://qpp.cms.gov/docs/pi_specifications/Measure%20Specifications/2025-MIPS-Promoting-Interoperability-Measure-Electronic-Case-Reporting-Updated-Oct2025.pdf"
},
"measureSets": [],
"exclusion": [
Expand Down Expand Up @@ -15130,7 +15134,7 @@
"nephrology"
],
"measureSpecification": {
"registry": "https://qpp.cms.gov/docs/QPP_quality_measure_specifications/CQM-Measures/2025_Measure_510_MIPSCQM.pdf"
"registry": "https://qpp.cms.gov/docs/QPP_quality_measure_specifications/CQM-Measures/2025_Measure_510_MIPSCQM_Addendum.pdf"
},
"isSevenPointCapRemoved": false,
"sevenPointCapRemoved": [],
Expand Down
4 changes: 2 additions & 2 deletions converter/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>gov.cms.qpp.conversion</groupId>
<artifactId>qpp-conversion-tool-parent</artifactId>
<version>2025.11.19.01-RELEASE</version>
<version>2025.12.16.01-RELEASE</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down Expand Up @@ -185,7 +185,7 @@
<dependency>
<groupId>gov.cms.qpp.conversion</groupId>
<artifactId>commons</artifactId>
<version>2025.11.19.01-RELEASE</version>
<version>2025.12.16.01-RELEASE</version>
<scope>compile</scope>
</dependency>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,18 +228,6 @@ private Pair<String, String> getProgramNameEntityPair(String name) {
pair = new ImmutablePair<>(APP_PLUS_PROGRAM_NAME, ENTITY_APM);
break;

case SSP_PI_INDIVIDUAL:
pair = new ImmutablePair<>(SSP_PROGRAM_NAME, ENTITY_INDIVIDUAL);
break;

case SSP_PI_GROUP:
pair = new ImmutablePair<>(SSP_PROGRAM_NAME, ENTITY_GROUP);
break;

case SSP_PI_APM:
pair = new ImmutablePair<>(SSP_PROGRAM_NAME, ENTITY_APM);
break;

default:
pair = new ImmutablePair<>(name.toLowerCase(Locale.ENGLISH), ENTITY_INDIVIDUAL);
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ private void encodeToplevel(JsonWrapper wrapper, Node thisNode) {
wrapper.put(ENTITY_ID, thisNode.getValue(ENTITY_ID));
}

if ((Program.isApp(thisNode) || Program.isMips(thisNode) || Program.isAppPlus(thisNode) || Program.isSsp(thisNode))
if ((Program.isApp(thisNode) || Program.isMips(thisNode) || Program.isAppPlus(thisNode))
&& ENTITY_APM.equalsIgnoreCase(entityType)) {
wrapper.put(ENTITY_ID, thisNode.getValue(ENTITY_ID));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ private void encodeTopLevelValues(JsonWrapper wrapper, Node node) {
wrapper.put(SUBMISSION_METHOD, "electronicHealthRecord");
Node topLevelParent = node.getParent();
if ((TemplateId.PI_SECTION_V3 == node.getType() || TemplateId.MEASURE_SECTION_V5 == node.getType())
&& (Program.isMips(topLevelParent) || Program.isApp(topLevelParent) || Program.isAppPlus(topLevelParent) || Program.isSsp(topLevelParent))) {
&& (Program.isMips(topLevelParent) || Program.isApp(topLevelParent) || Program.isAppPlus(topLevelParent))) {
wrapper.put(CEHRT, topLevelParent.getValue(CEHRT));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ public class Constants {
public static final String ENTITY_VIRTUAL_GROUP = "virtualGroup";
public static final String APP_PROGRAM_NAME = "app1";
public static final String APP_PLUS_PROGRAM_NAME = "appPlus";
public static final String SSP_PROGRAM_NAME = "ssp";
public static final String MIPS = "MIPS";
public static final Set<String> MVP_ENTITIES = Set.of(ENTITY_INDIVIDUAL, ENTITY_GROUP, ENTITY_SUBGROUP, ENTITY_APM);

Expand All @@ -84,9 +83,6 @@ public class Constants {
public static final String APP_PLUS_INDIVIDUAL = "APP_PLUS_INDIV";
public static final String APP_PLUS_GROUP = "APP_PLUS_GROUP";
public static final String APP_PLUS_APM = "APP_PLUS_APMENTITY";
public static final String SSP_PI_INDIVIDUAL = "SSP_PI_INDIV";
public static final String SSP_PI_GROUP = "SSP_PI_GROUP";
public static final String SSP_PI_APM = "SSP_PI_APMENTITY";

// Library utility class so the constructor is private and empty.
private Constants() {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ public enum Program {
MIPS("MIPS_GROUP", "MIPS_INDIV", "MIPS_VIRTUALGROUP", "MIPS", "MIPS_APMENTITY", "MIPS_SUBGROUP"),
APP("MIPS_APP1_INDIV", "MIPS_APP1_GROUP", "MIPS_APP1_APMENTITY"),
APP_PLUS("APP_PLUS_INDIV", "APP_PLUS_GROUP", "APP_PLUS_APMENTITY"),
SSP("SSP_PI_INDIV", "SSP_PI_GROUP", "SSP_PI_APMENTITY"),
ALL;

private final Set<String> aliases;
Expand Down Expand Up @@ -60,16 +59,6 @@ public static boolean isAppPlus(Node node) {
return extractProgram(node) == Program.APP_PLUS;
}

/**
* Checks if a node is using the ssp program
*
* @param node
* @return
*/
public static boolean isSsp(Node node) {
return extractProgram(node) == Program.SSP;
}

/**
* Extracts a program type from a node
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ protected void performValidation(final Node node) {
String entityType = Optional.ofNullable(node.getValue(ENTITY_TYPE)).orElse("<missing>");

forceCheckErrors(node).valueIn(ProblemCode.CLINICAL_DOCUMENT_INCORRECT_PROGRAM_NAME.format(VALID_PROGRAM_NAMES, programName),
PROGRAM_NAME, MIPS_PROGRAM_NAME, APP_PROGRAM_NAME, APP_PLUS_PROGRAM_NAME, SSP_PROGRAM_NAME);
PROGRAM_NAME, MIPS_PROGRAM_NAME, APP_PROGRAM_NAME, APP_PLUS_PROGRAM_NAME);

if (ENTITY_VIRTUAL_GROUP.equals(entityType)) {
forceCheckErrors(node).value(ProblemCode.VIRTUAL_GROUP_ID_REQUIRED, ENTITY_ID);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -109,41 +109,6 @@ void testIsAppPlusAppEntityIsTrue() {
assertThat(Program.isAppPlus(node)).isTrue();
}

@Test
void testIsSspIndividualIsTrue() {
Node node = new Node();
node.putValue(RAW_PROGRAM_NAME, "SSP_PI_INDIV");
assertThat(Program.isSsp(node)).isTrue();
}

@Test
void testIsSspGroupIsTrue() {
Node node = new Node();
node.putValue(RAW_PROGRAM_NAME, "SSP_PI_GROUP");
assertThat(Program.isSsp(node)).isTrue();
}

@Test
void testIsSspAppEntityIsTrue() {
Node node = new Node();
node.putValue(RAW_PROGRAM_NAME, "SSP_PI_APMENTITY");
assertThat(Program.isSsp(node)).isTrue();
}

@Test
void testIsSspReturnsFalseForMips() {
Node node = new Node();
node.putValue(RAW_PROGRAM_NAME, "MIPS_INDIV");
assertThat(Program.isSsp(node)).isFalse();
}

@Test
void testIsSspReturnsFalseForNullValue() {
Node node = new Node();
node.putValue(RAW_PROGRAM_NAME, null);
assertThat(Program.isSsp(node)).isFalse();
}

@Override
public Class<? extends Enum<?>> getEnumType() {
return Program.class;
Expand Down

This file was deleted.

Loading
Loading