From 1b9ac448e070523f88597d0101c1a24eb3ccfe11 Mon Sep 17 00:00:00 2001 From: ckawell-sb Date: Thu, 20 Nov 2025 11:16:01 -0600 Subject: [PATCH 1/3] feat: QPPA-11035 add sonarqube scanning for default branch --- .github/workflows/sonarqube.yml | 3 ++ commons/src/main/resources/measures-data.json | 38 ------------------- 2 files changed, 3 insertions(+), 38 deletions(-) diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml index 66470ed6f..dc9432c2b 100644 --- a/.github/workflows/sonarqube.yml +++ b/.github/workflows/sonarqube.yml @@ -5,6 +5,9 @@ on: types: [opened, synchronize, reopened] branches: - develop + push: + branches: + - develop env: PROJECT_NAME: qppa-repos-sonarqube-analysis diff --git a/commons/src/main/resources/measures-data.json b/commons/src/main/resources/measures-data.json index 509958dce..9e5f934ab 100644 --- a/commons/src/main/resources/measures-data.json +++ b/commons/src/main/resources/measures-data.json @@ -2501,7 +2501,6 @@ ], "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -2557,7 +2556,6 @@ ], "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -2610,7 +2608,6 @@ "exclusion": null, "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -2663,7 +2660,6 @@ "exclusion": null, "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -2721,7 +2717,6 @@ "PI_HIE_6" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -2779,7 +2774,6 @@ "PI_HIE_6" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -2836,7 +2830,6 @@ "PI_HIE_6" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -2893,7 +2886,6 @@ "PI_HIE_5" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -2944,7 +2936,6 @@ "exclusion": null, "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -2997,7 +2988,6 @@ "exclusion": null, "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3050,7 +3040,6 @@ "exclusion": null, "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3103,7 +3092,6 @@ "exclusion": null, "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3153,7 +3141,6 @@ "exclusion": null, "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3204,7 +3191,6 @@ "exclusion": null, "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3257,7 +3243,6 @@ "exclusion": null, "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3314,7 +3299,6 @@ ], "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3373,7 +3357,6 @@ "PI_PHCDRR_1_EX_3" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3429,7 +3412,6 @@ "PI_PHCDRR_1_EX_3" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3485,7 +3467,6 @@ "PI_PHCDRR_1_EX_2" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3540,7 +3521,6 @@ "PI_PHCDRR_1_PROD" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3594,7 +3574,6 @@ "PI_PHCDRR_1_PRE" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3646,7 +3625,6 @@ "exclusion": null, "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3704,7 +3682,6 @@ "PI_PHCDRR_2_PROD" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3758,7 +3735,6 @@ "PI_PHCDRR_2_PRE" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3814,7 +3790,6 @@ ], "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3873,7 +3848,6 @@ "PI_PHCDRR_3_EX_3" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3929,7 +3903,6 @@ "PI_PHCDRR_3_EX_3" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -3985,7 +3958,6 @@ "PI_PHCDRR_3_EX_2" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -4040,7 +4012,6 @@ "PI_PHCDRR_3_PROD" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -4094,7 +4065,6 @@ "PI_PHCDRR_3_PRE" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -4146,7 +4116,6 @@ "exclusion": null, "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -4204,7 +4173,6 @@ "PI_PHCDRR_4_PROD" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -4258,7 +4226,6 @@ "PI_PHCDRR_4_PRE" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -4310,7 +4277,6 @@ "exclusion": null, "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -4368,7 +4334,6 @@ "PI_PHCDRR_5_PROD" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -4422,7 +4387,6 @@ "PI_PHCDRR_5_PRE" ], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -4474,7 +4438,6 @@ "exclusion": null, "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", @@ -4527,7 +4490,6 @@ "exclusion": null, "substitutes": [], "allowedPrograms": [ - "ssp", "mips", "app1", "appPlus", From c4a16934cc1eb8380e0fd23b8c202f166c786875 Mon Sep 17 00:00:00 2001 From: Chetan Munegowda Date: Mon, 1 Dec 2025 16:59:56 -0500 Subject: [PATCH 2/3] QPPA-11011: revert ssp work --- ERROR_MESSAGES.md | 1 - .../conversion/model/error/ProblemCode.java | 5 +- commons/src/main/resources/measures-data.json | 20 +- .../decode/ClinicalDocumentDecoder.java | 12 - .../encode/ClinicalDocumentEncoder.java | 2 +- .../conversion/encode/PiSectionEncoder.java | 2 +- .../cms/qpp/conversion/model/Constants.java | 4 - .../gov/cms/qpp/conversion/model/Program.java | 11 - .../validate/ClinicalDocumentValidator.java | 2 +- .../SspClinicalDocumentValidator.java | 35 -- .../cms/qpp/conversion/model/ProgramTest.java | 35 -- .../SspClinicalDocumentValidatorTest.java | 72 ---- .../ssp/2025/ssp-ApmEntity-Qrda-III.xml | 382 ----------------- .../resources/ssp/2025/ssp-Group-QRDA-III.xml | 395 ------------------ .../resources/ssp/2025/ssp-Indv-QRDA-III.xml | 395 ------------------ 15 files changed, 16 insertions(+), 1357 deletions(-) delete mode 100644 converter/src/main/java/gov/cms/qpp/conversion/validate/SspClinicalDocumentValidator.java delete mode 100644 converter/src/test/java/gov/cms/qpp/conversion/validate/SspClinicalDocumentValidatorTest.java delete mode 100644 converter/src/test/resources/ssp/2025/ssp-ApmEntity-Qrda-III.xml delete mode 100644 converter/src/test/resources/ssp/2025/ssp-Group-QRDA-III.xml delete mode 100644 converter/src/test/resources/ssp/2025/ssp-Indv-QRDA-III.xml diff --git a/ERROR_MESSAGES.md b/ERROR_MESSAGES.md index 98c6915cf..9c6fb15d1 100644 --- a/ERROR_MESSAGES.md +++ b/ERROR_MESSAGES.md @@ -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)`. diff --git a/commons/src/main/java/gov/cms/qpp/conversion/model/error/ProblemCode.java b/commons/src/main/java/gov/cms/qpp/conversion/model/error/ProblemCode.java index 62fa4b675..7212efc1b 100644 --- a/commons/src/main/java/gov/cms/qpp/conversion/model/error/ProblemCode.java +++ b/commons/src/main/java/gov/cms/qpp/conversion/model/error/ProblemCode.java @@ -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 CODE_TO_VALUE = Arrays.stream(values()) .collect(Collectors.toMap(ProblemCode::getCode, Function.identity())); diff --git a/commons/src/main/resources/measures-data.json b/commons/src/main/resources/measures-data.json index 9e5f934ab..ab9242cce 100644 --- a/commons/src/main/resources/measures-data.json +++ b/commons/src/main/resources/measures-data.json @@ -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": [ @@ -2606,7 +2606,9 @@ }, "measureSets": [], "exclusion": null, - "substitutes": [], + "substitutes": [ + "PI_EP_2_EX_2" + ], "allowedPrograms": [ "mips", "app1", @@ -2658,7 +2660,9 @@ }, "measureSets": [], "exclusion": null, - "substitutes": [], + "substitutes": [ + "PI_EP_2_EX_1" + ], "allowedPrograms": [ "mips", "app1", @@ -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": [ @@ -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, @@ -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, @@ -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": [ @@ -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": [], diff --git a/converter/src/main/java/gov/cms/qpp/conversion/decode/ClinicalDocumentDecoder.java b/converter/src/main/java/gov/cms/qpp/conversion/decode/ClinicalDocumentDecoder.java index 57f7195f7..eb4b87cd2 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/decode/ClinicalDocumentDecoder.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/decode/ClinicalDocumentDecoder.java @@ -228,18 +228,6 @@ private Pair 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; diff --git a/converter/src/main/java/gov/cms/qpp/conversion/encode/ClinicalDocumentEncoder.java b/converter/src/main/java/gov/cms/qpp/conversion/encode/ClinicalDocumentEncoder.java index 5816140fd..9b557c927 100755 --- a/converter/src/main/java/gov/cms/qpp/conversion/encode/ClinicalDocumentEncoder.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/encode/ClinicalDocumentEncoder.java @@ -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)); } diff --git a/converter/src/main/java/gov/cms/qpp/conversion/encode/PiSectionEncoder.java b/converter/src/main/java/gov/cms/qpp/conversion/encode/PiSectionEncoder.java index e24025e5a..ad6cff25f 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/encode/PiSectionEncoder.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/encode/PiSectionEncoder.java @@ -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)); } } diff --git a/converter/src/main/java/gov/cms/qpp/conversion/model/Constants.java b/converter/src/main/java/gov/cms/qpp/conversion/model/Constants.java index fb8274d8e..81743f80f 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/model/Constants.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/model/Constants.java @@ -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 MVP_ENTITIES = Set.of(ENTITY_INDIVIDUAL, ENTITY_GROUP, ENTITY_SUBGROUP, ENTITY_APM); @@ -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() {} diff --git a/converter/src/main/java/gov/cms/qpp/conversion/model/Program.java b/converter/src/main/java/gov/cms/qpp/conversion/model/Program.java index cf3935c04..2e316afe5 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/model/Program.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/model/Program.java @@ -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 aliases; @@ -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 * diff --git a/converter/src/main/java/gov/cms/qpp/conversion/validate/ClinicalDocumentValidator.java b/converter/src/main/java/gov/cms/qpp/conversion/validate/ClinicalDocumentValidator.java index 7232660f7..f69e04066 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/validate/ClinicalDocumentValidator.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/validate/ClinicalDocumentValidator.java @@ -53,7 +53,7 @@ protected void performValidation(final Node node) { String entityType = Optional.ofNullable(node.getValue(ENTITY_TYPE)).orElse(""); 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); diff --git a/converter/src/main/java/gov/cms/qpp/conversion/validate/SspClinicalDocumentValidator.java b/converter/src/main/java/gov/cms/qpp/conversion/validate/SspClinicalDocumentValidator.java deleted file mode 100644 index 662a2e60a..000000000 --- a/converter/src/main/java/gov/cms/qpp/conversion/validate/SspClinicalDocumentValidator.java +++ /dev/null @@ -1,35 +0,0 @@ -package gov.cms.qpp.conversion.validate; - -import gov.cms.qpp.conversion.model.Node; -import gov.cms.qpp.conversion.model.Program; -import gov.cms.qpp.conversion.model.TemplateId; -import gov.cms.qpp.conversion.model.Validator; -import gov.cms.qpp.conversion.model.error.LocalizedProblem; -import gov.cms.qpp.conversion.model.error.ProblemCode; - -import java.util.Locale; - -import static gov.cms.qpp.conversion.model.Constants.CATEGORY; -import static gov.cms.qpp.conversion.model.Constants.PROGRAM_NAME; - -@Validator(value = TemplateId.CLINICAL_DOCUMENT, program = Program.SSP) -public class SspClinicalDocumentValidator extends NodeValidator { - private static final String ALLOWED_CATEGORY = "pi"; - - @Override - protected void performValidation(Node clinicalDocument) { - String programName = clinicalDocument.getValue(PROGRAM_NAME).toUpperCase(Locale.ROOT); - clinicalDocument - .getChildNodes(TemplateId.MEASURE_SECTION_V5) - .forEach(sectionNode -> { - String category = sectionNode.getValue(CATEGORY); - System.out.println("category: " + category); - if (category == null || !ALLOWED_CATEGORY.equalsIgnoreCase(category)) { - LocalizedProblem error = ProblemCode.SSP_PI_ONLY_MEASURE_CATEGORY - .format(programName, category == null ? "none" : category); - checkErrors(sectionNode) - .valueIn(error, CATEGORY, ALLOWED_CATEGORY); - } - }); - } -} \ No newline at end of file diff --git a/converter/src/test/java/gov/cms/qpp/conversion/model/ProgramTest.java b/converter/src/test/java/gov/cms/qpp/conversion/model/ProgramTest.java index ab9d41006..b5e5a27c3 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/model/ProgramTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/model/ProgramTest.java @@ -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> getEnumType() { return Program.class; diff --git a/converter/src/test/java/gov/cms/qpp/conversion/validate/SspClinicalDocumentValidatorTest.java b/converter/src/test/java/gov/cms/qpp/conversion/validate/SspClinicalDocumentValidatorTest.java deleted file mode 100644 index 920453d98..000000000 --- a/converter/src/test/java/gov/cms/qpp/conversion/validate/SspClinicalDocumentValidatorTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package gov.cms.qpp.conversion.validate; - -import static com.google.common.truth.Truth.assertWithMessage; - -import java.util.List; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import gov.cms.qpp.conversion.model.Node; -import gov.cms.qpp.conversion.model.TemplateId; -import gov.cms.qpp.conversion.model.error.Detail; -import gov.cms.qpp.conversion.model.error.ProblemCode; -import gov.cms.qpp.conversion.model.error.correspondence.DetailsErrorEquals; - -class SspClinicalDocumentValidatorTest { - - private Node clinicalDocumentNode; - private Node measureSectionNode; - - @BeforeEach - void setUp() { - clinicalDocumentNode = new Node(TemplateId.CLINICAL_DOCUMENT); - clinicalDocumentNode.putValue("programName", "SSP"); - - measureSectionNode = new Node(TemplateId.MEASURE_SECTION_V5); - } - - @Test - void testValidCategory_NoErrors() { - measureSectionNode.putValue("category", "pi"); - clinicalDocumentNode.addChildNode(measureSectionNode); - - SspClinicalDocumentValidator validator = new SspClinicalDocumentValidator(); - List errors = validator.validateSingleNode(clinicalDocumentNode).getErrors(); - - assertWithMessage("There should be no errors for category 'pi'") - .that(errors).isEmpty(); - } - - @Test - void testNullCategory_ShouldError() { - // category is not set - clinicalDocumentNode.addChildNode(measureSectionNode); - - SspClinicalDocumentValidator validator = new SspClinicalDocumentValidator(); - List errors = validator.validateSingleNode(clinicalDocumentNode).getErrors(); - - assertWithMessage("Must report SSP_PI_ONLY_MEASURE_CATEGORY when category is null") - .that(errors) - .comparingElementsUsing(DetailsErrorEquals.INSTANCE) - .containsExactly( - ProblemCode.SSP_PI_ONLY_MEASURE_CATEGORY.format("SSP", "none") - ); - } - - @Test - void testInvalidCategory_ShouldError() { - measureSectionNode.putValue("category", "invalid"); - clinicalDocumentNode.addChildNode(measureSectionNode); - - SspClinicalDocumentValidator validator = new SspClinicalDocumentValidator(); - List errors = validator.validateSingleNode(clinicalDocumentNode).getErrors(); - - assertWithMessage("Must report SSP_PI_ONLY_MEASURE_CATEGORY when category is invalid") - .that(errors) - .comparingElementsUsing(DetailsErrorEquals.INSTANCE) - .containsExactly( - ProblemCode.SSP_PI_ONLY_MEASURE_CATEGORY.format("SSP", "invalid") - ); - } -} diff --git a/converter/src/test/resources/ssp/2025/ssp-ApmEntity-Qrda-III.xml b/converter/src/test/resources/ssp/2025/ssp-ApmEntity-Qrda-III.xml deleted file mode 100644 index 00c7d9233..000000000 --- a/converter/src/test/resources/ssp/2025/ssp-ApmEntity-Qrda-III.xml +++ /dev/null @@ -1,382 +0,0 @@ - - - - - - - - - - - 2017 Eligible Clinicians (EC) and Eligible Professionals (EP) Sample QRDA-III - - - - - - - - - - - - - - - - - - - Good Health Clinic - - - - - - - - - - - - - - - - - - - - - - - - - - - - Good Health Clinic - - - - - - - - - - - - - - - - - -
- - - - - - Measure Section - - - - - - - -
Reporting Period: January 01, 2023 - December 31, 2023
- - - - - - - - - - - - - -
PI Measure TitleMeasure Identifier
Query of the Prescription Drug Monitoring Program (PDMP)PI_EP_2
- - - Measure Answer (Yes/No): Yes - - - - - - - - - - - - - - -
PI Measure TitleMeasure Identifier
e-PrescribingPI_EP_1
- - - Denominator: 800 - - Numerator: 750 - - - - - - - - - - - - - - -
PI Measure TitleMeasure Identifier
Provide Patients Electronic Access to their Health InformationPI_PEA_1
- - - Denominator: 800 - - Numerator: 600 - -
- - - - - - - - - - - - - - - - Query of the Prescription Drug Monitoring Program (PDMP) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - e-Prescribing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provide Patients Electronic Access to their Health - Information - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
diff --git a/converter/src/test/resources/ssp/2025/ssp-Group-QRDA-III.xml b/converter/src/test/resources/ssp/2025/ssp-Group-QRDA-III.xml deleted file mode 100644 index 9abb8fd14..000000000 --- a/converter/src/test/resources/ssp/2025/ssp-Group-QRDA-III.xml +++ /dev/null @@ -1,395 +0,0 @@ - - - - - - - - - - - 2017 Eligible Clinicians (EC) and Eligible Professionals (EP) Sample QRDA-III - - - - - - - - - - - - - - - - - - - Good Health Clinic - - - - - - - - - - - - - - - - - - - - - - - - - - - - Good Health Clinic - - - - - - - - - - Good Healthcare Practice - - - - - - - - - - - - - - - - - -
- - - - - - Measure Section - - - - - - - -
Reporting Period: January 01, 2023 - December 31, 2023
- - - - - - - - - - - - - -
PI Measure TitleMeasure Identifier
Query of the Prescription Drug Monitoring Program (PDMP)PI_EP_2
- - - Measure Answer (Yes/No): Yes - - - - - - - - - - - - - - -
PI Measure TitleMeasure Identifier
e-PrescribingPI_EP_1
- - - Denominator: 800 - - Numerator: 750 - - - - - - - - - - - - - - -
PI Measure TitleMeasure Identifier
Provide Patients Electronic Access to their Health InformationPI_PEA_1
- - - Denominator: 800 - - Numerator: 600 - -
- - - - - - - - - - - - - - - - Query of the Prescription Drug Monitoring Program (PDMP) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - e-Prescribing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provide Patients Electronic Access to their Health - Information - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
diff --git a/converter/src/test/resources/ssp/2025/ssp-Indv-QRDA-III.xml b/converter/src/test/resources/ssp/2025/ssp-Indv-QRDA-III.xml deleted file mode 100644 index b0ef4e2bd..000000000 --- a/converter/src/test/resources/ssp/2025/ssp-Indv-QRDA-III.xml +++ /dev/null @@ -1,395 +0,0 @@ - - - - - - - - - - - 2017 Eligible Clinicians (EC) and Eligible Professionals (EP) Sample QRDA-III - - - - - - - - - - - - - - - - - - - Good Health Clinic - - - - - - - - - - - - - - - - - - - - - - - - - - - - Good Health Clinic - - - - - - - - - - Good Healthcare Practice - - - - - - - - - - - - - - - - - -
- - - - - - Measure Section - - - - - - - -
Reporting Period: January 01, 2023 - December 31, 2023
- - - - - - - - - - - - - -
PI Measure TitleMeasure Identifier
Query of the Prescription Drug Monitoring Program (PDMP)PI_EP_2
- - - Measure Answer (Yes/No): Yes - - - - - - - - - - - - - - -
PI Measure TitleMeasure Identifier
e-PrescribingPI_EP_1
- - - Denominator: 800 - - Numerator: 750 - - - - - - - - - - - - - - -
PI Measure TitleMeasure Identifier
Provide Patients Electronic Access to their Health InformationPI_PEA_1
- - - Denominator: 800 - - Numerator: 600 - -
- - - - - - - - - - - - - - - - Query of the Prescription Drug Monitoring Program (PDMP) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - e-Prescribing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provide Patients Electronic Access to their Health - Information - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
From 4a5e5912de5190899dd13bf1e081c0a24a9c4404 Mon Sep 17 00:00:00 2001 From: Chetan Munegowda Date: Tue, 16 Dec 2025 15:42:11 -0500 Subject: [PATCH 3/3] QPPA-11073: update version --- acceptance-tests/pom.xml | 2 +- commandline/pom.xml | 2 +- commons/pom.xml | 2 +- converter/pom.xml | 4 ++-- generate-race-cpcplus/pom.xml | 2 +- generate/pom.xml | 2 +- pom.xml | 2 +- qrda3-update-measures/pom.xml | 2 +- rest-api/pom.xml | 2 +- test-commons/pom.xml | 2 +- test-coverage/pom.xml | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/acceptance-tests/pom.xml b/acceptance-tests/pom.xml index 8c11e7568..d8c560825 100644 --- a/acceptance-tests/pom.xml +++ b/acceptance-tests/pom.xml @@ -3,7 +3,7 @@ 4.0.0 acceptance-tests gov.cms.qpp.conversion - 2025.09.03.01-RELEASE + 2025.12.16.01-RELEASE conversion-tests jar diff --git a/commandline/pom.xml b/commandline/pom.xml index db8e91193..2412d2485 100644 --- a/commandline/pom.xml +++ b/commandline/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2025.09.03.01-RELEASE + 2025.12.16.01-RELEASE ../pom.xml diff --git a/commons/pom.xml b/commons/pom.xml index 4e589827a..ad6b8289c 100644 --- a/commons/pom.xml +++ b/commons/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2025.09.03.01-RELEASE + 2025.12.16.01-RELEASE ../pom.xml diff --git a/converter/pom.xml b/converter/pom.xml index d4a2afd87..3a3fc1804 100644 --- a/converter/pom.xml +++ b/converter/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2025.09.03.01-RELEASE + 2025.12.16.01-RELEASE ../pom.xml @@ -185,7 +185,7 @@ gov.cms.qpp.conversion commons - 2025.09.03.01-RELEASE + 2025.12.16.01-RELEASE compile diff --git a/generate-race-cpcplus/pom.xml b/generate-race-cpcplus/pom.xml index 35ce8f4d9..8af379ca9 100644 --- a/generate-race-cpcplus/pom.xml +++ b/generate-race-cpcplus/pom.xml @@ -5,7 +5,7 @@ qpp-conversion-tool-parent gov.cms.qpp.conversion - 2025.09.03.01-RELEASE + 2025.12.16.01-RELEASE ../ 4.0.0 diff --git a/generate/pom.xml b/generate/pom.xml index 76f25acac..7438084e5 100644 --- a/generate/pom.xml +++ b/generate/pom.xml @@ -5,7 +5,7 @@ qpp-conversion-tool-parent gov.cms.qpp.conversion - 2025.09.03.01-RELEASE + 2025.12.16.01-RELEASE ../pom.xml 4.0.0 diff --git a/pom.xml b/pom.xml index c1303a977..628e45729 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent pom - 2025.09.03.01-RELEASE + 2025.12.16.01-RELEASE QPP Conversion Tool diff --git a/qrda3-update-measures/pom.xml b/qrda3-update-measures/pom.xml index 2dfa7f3d2..c3bdb0d3a 100644 --- a/qrda3-update-measures/pom.xml +++ b/qrda3-update-measures/pom.xml @@ -3,7 +3,7 @@ qpp-conversion-tool-parent gov.cms.qpp.conversion - 2025.09.03.01-RELEASE + 2025.12.16.01-RELEASE ../ diff --git a/rest-api/pom.xml b/rest-api/pom.xml index b8418a197..775fbf03f 100644 --- a/rest-api/pom.xml +++ b/rest-api/pom.xml @@ -19,7 +19,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2025.09.03.01-RELEASE + 2025.12.16.01-RELEASE ../pom.xml diff --git a/test-commons/pom.xml b/test-commons/pom.xml index 36cf984af..dd0ae2372 100644 --- a/test-commons/pom.xml +++ b/test-commons/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2025.09.03.01-RELEASE + 2025.12.16.01-RELEASE ../pom.xml diff --git a/test-coverage/pom.xml b/test-coverage/pom.xml index 19957db4f..2c5689734 100644 --- a/test-coverage/pom.xml +++ b/test-coverage/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2025.09.03.01-RELEASE + 2025.12.16.01-RELEASE ../pom.xml