From 62b7641c8da94b4ff33482b5f5de1a13715cd0c6 Mon Sep 17 00:00:00 2001 From: Chetan Munegowda Date: Tue, 8 Jul 2025 17:57:55 -0400 Subject: [PATCH 1/6] QPPA-10470: support appPlus program submission --- .../decode/ClinicalDocumentDecoder.java | 6 +-- .../encode/ClinicalDocumentEncoder.java | 40 +++++++++++-------- .../gov/cms/qpp/conversion/model/Program.java | 11 +++++ .../validate/ClinicalDocumentValidator.java | 2 +- .../cms/qpp/conversion/model/ProgramTest.java | 21 ++++++++++ 5 files changed, 60 insertions(+), 20 deletions(-) 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 66e759358..e1e092bec 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 @@ -246,15 +246,15 @@ private Pair getProgramNameEntityPair(String name) { break; case APP_PLUS_INDIVIDUAL: - pair = new ImmutablePair<>(APP_PLUS_INDIVIDUAL, ENTITY_INDIVIDUAL); + pair = new ImmutablePair<>(APP_PLUS_PROGRAM_NAME, ENTITY_INDIVIDUAL); break; case APP_PLUS_GROUP: - pair = new ImmutablePair<>(APP_PLUS_GROUP, ENTITY_GROUP); + pair = new ImmutablePair<>(APP_PLUS_PROGRAM_NAME, ENTITY_GROUP); break; case APP_PLUS_APM: - pair = new ImmutablePair<>(APP_PLUS_APM, ENTITY_APM); + pair = new ImmutablePair<>(APP_PLUS_PROGRAM_NAME, ENTITY_APM); break; case SSP_PI_INDIVIDUAL: 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 34c85030e..53f202d3c 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 @@ -79,7 +79,7 @@ private void encodeToplevel(JsonWrapper wrapper, Node thisNode) { wrapper.put(ENTITY_ID, thisNode.getValue(ENTITY_ID)); } - if ((Program.isApp(thisNode) || Program.isMips(thisNode)) + if ((Program.isApp(thisNode) || Program.isMips(thisNode) || Program.isAppPlus(thisNode)) && ENTITY_APM.equalsIgnoreCase(entityType)) { wrapper.put(ENTITY_ID, thisNode.getValue(ENTITY_ID)); } @@ -118,7 +118,7 @@ private JsonWrapper encodeMeasurementSets( Node currentNode ) { JsonWrapper measurementSetsWrapper = new JsonWrapper(); - JsonWrapper childWrapper; + String measureRoot = TemplateId.MEASURE_SECTION_V5.getRoot(); for (Node child : childMapByTemplateId.values()) { if (child == null) { @@ -133,23 +133,31 @@ private JsonWrapper encodeMeasurementSets( } try { - childWrapper = new JsonWrapper(); + JsonWrapper childWrapper = new JsonWrapper(); sectionEncoder.encode(childWrapper, child); childWrapper.put("source", "qrda3"); - String mvpId = currentNode.getValue(MVP_ID); - if (TemplateId.MEASURE_SECTION_V5.getRoot().equalsIgnoreCase(childType.getRoot()) - && !StringUtils.isEmpty(mvpId)) { - childWrapper.put(PROGRAM_NAME, mvpId); - } - else if (TemplateId.MEASURE_SECTION_V5.getRoot().equalsIgnoreCase(childType.getRoot()) - && MIPS_APM.equalsIgnoreCase( - currentNode.getValue(RAW_PROGRAM_NAME))) { - childWrapper.put(PROGRAM_NAME, MIPS.toLowerCase(Locale.getDefault())); - } else if (TemplateId.MEASURE_SECTION_V5.getRoot().equalsIgnoreCase(childType.getRoot()) - && APP_APM.equalsIgnoreCase( - currentNode.getValue(RAW_PROGRAM_NAME))) { - childWrapper.put(PROGRAM_NAME, APP_PROGRAM_NAME.toLowerCase(Locale.getDefault())); + if (measureRoot.equalsIgnoreCase(childType.getRoot())) { + String mvpId = currentNode.getValue(MVP_ID); + if (!StringUtils.isEmpty(mvpId)) { + childWrapper.put(PROGRAM_NAME, mvpId); + } else { + String raw = currentNode.getValue(RAW_PROGRAM_NAME); + String key = (raw != null ? raw.toUpperCase(Locale.ROOT) : ""); + + switch (key) { + case MIPS_APM: + childWrapper.put(PROGRAM_NAME, + MIPS.toLowerCase(Locale.getDefault())); + break; + case APP_APM: + childWrapper.put(PROGRAM_NAME, + APP_PROGRAM_NAME.toLowerCase(Locale.getDefault())); + break; + default: + // no matching program + } + } } measurementSetsWrapper.put(childWrapper); 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 417a39aff..9989a1adf 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,6 +16,7 @@ public enum Program { MIPS("MIPS_GROUP", "MIPS_INDIV", "MIPS_VIRTUALGROUP", "MIPS", "MIPS_APMENTITY", "MIPS_SUBGROUP"), PCF("PCF"), APP("MIPS_APP1_INDIV", "MIPS_APP1_GROUP", "MIPS_APP1_APMENTITY"), + APP_PLUS("APP_PLUS_INDIV", "APP_PLUS_GROUP", "APP_PLUS_APMENTITY"), ALL; private final Set aliases; @@ -59,6 +60,16 @@ public static boolean isApp(Node node) { return extractProgram(node) == Program.APP; } + /** + * Checks if a node is using the appPlus program + * + * @param node + * @return + */ + public static boolean isAppPlus(Node node) { + return extractProgram(node) == Program.APP_PLUS; + } + /** * 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 592059cf9..7e973649d 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, PCF, APP_PROGRAM_NAME); + PROGRAM_NAME, MIPS_PROGRAM_NAME, PCF, 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/test/java/gov/cms/qpp/conversion/model/ProgramTest.java b/converter/src/test/java/gov/cms/qpp/conversion/model/ProgramTest.java index c6dce8dee..40a05705d 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 @@ -115,6 +115,27 @@ void testSetOfProgramNames() { assertThat(actual).containsAtLeastElementsIn(expected); } + @Test + void testIsAppPlusIndividualIsTrue() { + Node node = new Node(); + node.putValue(RAW_PROGRAM_NAME, "APP_PLUS_INDIV"); + assertThat(Program.isAppPlus(node)).isTrue(); + } + + @Test + void testIsAppPlusGroupIsTrue() { + Node node = new Node(); + node.putValue(RAW_PROGRAM_NAME, "APP_PLUS_GROUP"); + assertThat(Program.isAppPlus(node)).isTrue(); + } + + @Test + void testIsAppPlusAppEntityIsTrue() { + Node node = new Node(); + node.putValue(RAW_PROGRAM_NAME, "APP_PLUS_APMENTITY"); + assertThat(Program.isAppPlus(node)).isTrue(); + } + @Override public Class> getEnumType() { return Program.class; From 8a68905b88a7337f2b57996aae9566332d85815a Mon Sep 17 00:00:00 2001 From: John Manack Date: Tue, 15 Jul 2025 15:26:44 -0400 Subject: [PATCH 2/6] chore: QPPA-10618 updates spring security and spring framework --- rest-api/pom.xml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/rest-api/pom.xml b/rest-api/pom.xml index 9be22ba6c..615f6b177 100644 --- a/rest-api/pom.xml +++ b/rest-api/pom.xml @@ -30,7 +30,7 @@ org.springframework.boot spring-boot-maven-plugin - 3.3.7 + 3.3.9 @@ -63,7 +63,7 @@ org.springframework.boot spring-boot-dependencies - 3.3.7 + 3.3.9 pom import @@ -72,6 +72,11 @@ spring-webmvc 6.1.14 + + org.springframework.security + spring-security-crypto + 6.3.8 + @@ -122,12 +127,12 @@ org.springframework.boot spring-boot-starter-security - 3.3.7 + 3.3.9 org.springframework.boot spring-boot-starter-web - 3.3.7 + 3.3.9 org.springframework @@ -319,7 +324,7 @@ org.springframework.boot spring-boot-starter-test - 3.3.7 + 3.3.9 test From 24119ff2f9d9fa428773d1408b60f9ff7e74ec58 Mon Sep 17 00:00:00 2001 From: John Manack Date: Tue, 15 Jul 2025 15:46:13 -0400 Subject: [PATCH 3/6] chores: QPPA-10618 clears additional snyk vulnerabilities --- generate/pom.xml | 4 ++-- pom.xml | 6 +++--- rest-api/pom.xml | 16 ++++++++-------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/generate/pom.xml b/generate/pom.xml index 7ec211abc..0bb9864b3 100644 --- a/generate/pom.xml +++ b/generate/pom.xml @@ -49,7 +49,7 @@ org.apache.maven maven-plugin-api - 3.6.2 + 3.9.8 @@ -61,7 +61,7 @@ org.apache.maven maven-core - 3.8.1 + 3.9.8 org.apache.maven.shared diff --git a/pom.xml b/pom.xml index aae6989cf..0027f873d 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ 17 - 1.12.316 + 1.12.787 5.8.1 0.10.7 @@ -431,13 +431,13 @@ ch.qos.logback logback-classic - 1.5.12 + 1.5.13 ch.qos.logback logback-core - 1.5.12 + 1.5.13 diff --git a/rest-api/pom.xml b/rest-api/pom.xml index 615f6b177..a3f0d6c21 100644 --- a/rest-api/pom.xml +++ b/rest-api/pom.xml @@ -30,7 +30,7 @@ org.springframework.boot spring-boot-maven-plugin - 3.3.9 + 3.4.7 @@ -63,7 +63,7 @@ org.springframework.boot spring-boot-dependencies - 3.3.9 + 3.4.7 pom import @@ -127,17 +127,17 @@ org.springframework.boot spring-boot-starter-security - 3.3.9 + 3.4.7 org.springframework.boot spring-boot-starter-web - 3.3.9 + 3.4.7 org.springframework spring-web - 6.1.15 + 6.1.21 org.springframework.security @@ -183,7 +183,7 @@ org.springframework spring-test - 6.1.15 + 6.1.21 test @@ -220,7 +220,7 @@ org.springframework spring-beans - 6.1.15 + 6.1.21 @@ -324,7 +324,7 @@ org.springframework.boot spring-boot-starter-test - 3.3.9 + 3.4.7 test From 2dc8cbdff4303acf9de29d33e551c65d1b8d6c7b Mon Sep 17 00:00:00 2001 From: John Manack Date: Tue, 15 Jul 2025 15:58:20 -0400 Subject: [PATCH 4/6] chore: QPPA-10618 roll back spring-web update --- rest-api/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rest-api/pom.xml b/rest-api/pom.xml index a3f0d6c21..c4fa33b0f 100644 --- a/rest-api/pom.xml +++ b/rest-api/pom.xml @@ -137,7 +137,7 @@ org.springframework spring-web - 6.1.21 + 6.1.15 org.springframework.security @@ -183,7 +183,7 @@ org.springframework spring-test - 6.1.21 + 6.1.15 test @@ -220,7 +220,7 @@ org.springframework spring-beans - 6.1.21 + 6.1.15 From 4b6349ab2e5e23b0618dd44d046eada7753e473a Mon Sep 17 00:00:00 2001 From: John Manack Date: Wed, 16 Jul 2025 09:32:09 -0400 Subject: [PATCH 5/6] chore: QPPA-10618 final updates for version upgrades --- rest-api/pom.xml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/rest-api/pom.xml b/rest-api/pom.xml index c4fa33b0f..9c052c29b 100644 --- a/rest-api/pom.xml +++ b/rest-api/pom.xml @@ -137,7 +137,7 @@ org.springframework spring-web - 6.1.15 + 6.1.21 org.springframework.security @@ -183,7 +183,7 @@ org.springframework spring-test - 6.1.15 + 6.1.21 test @@ -216,13 +216,6 @@ - - - org.springframework - spring-beans - 6.1.15 - - org.springframework.boot spring-boot-test From 970c2f4709a4ab5f132baa9e7ae7c5361dda45d2 Mon Sep 17 00:00:00 2001 From: John Manack Date: Wed, 16 Jul 2025 14:43:08 -0400 Subject: [PATCH 6/6] chore: QPPA-10626 update the version number --- 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 73db1e674..16f18f5e5 100644 --- a/acceptance-tests/pom.xml +++ b/acceptance-tests/pom.xml @@ -3,7 +3,7 @@ 4.0.0 acceptance-tests gov.cms.qpp.conversion - 2024.2.14-RELEASE + 2025.07.16.01-RELEASE conversion-tests jar diff --git a/commandline/pom.xml b/commandline/pom.xml index 8cb86fe98..7cc9116f7 100644 --- a/commandline/pom.xml +++ b/commandline/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2024.2.14-RELEASE + 2025.07.16.01-RELEASE ../pom.xml diff --git a/commons/pom.xml b/commons/pom.xml index 94a483451..ef8478f31 100644 --- a/commons/pom.xml +++ b/commons/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2024.2.14-RELEASE + 2025.07.16.01-RELEASE ../pom.xml diff --git a/converter/pom.xml b/converter/pom.xml index 1d39107d1..dda9ab58e 100644 --- a/converter/pom.xml +++ b/converter/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2024.2.14-RELEASE + 2025.07.16.01-RELEASE ../pom.xml @@ -170,7 +170,7 @@ gov.cms.qpp.conversion commons - 2024.2.14-RELEASE + 2025.07.16.01-RELEASE compile diff --git a/generate-race-cpcplus/pom.xml b/generate-race-cpcplus/pom.xml index 447edfaa8..1b67406b5 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 - 2024.2.14-RELEASE + 2025.07.16.01-RELEASE ../ 4.0.0 diff --git a/generate/pom.xml b/generate/pom.xml index 0bb9864b3..895bf19f4 100644 --- a/generate/pom.xml +++ b/generate/pom.xml @@ -5,7 +5,7 @@ qpp-conversion-tool-parent gov.cms.qpp.conversion - 2024.2.14-RELEASE + 2025.07.16.01-RELEASE ../pom.xml 4.0.0 diff --git a/pom.xml b/pom.xml index 0027f873d..f11afd43e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent pom - 2024.2.14-RELEASE + 2025.07.16.01-RELEASE QPP Conversion Tool diff --git a/qrda3-update-measures/pom.xml b/qrda3-update-measures/pom.xml index 7f8b068e8..22611482d 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 - 2024.2.14-RELEASE + 2025.07.16.01-RELEASE ../ diff --git a/rest-api/pom.xml b/rest-api/pom.xml index 9c052c29b..9f43f757b 100644 --- a/rest-api/pom.xml +++ b/rest-api/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2024.2.14-RELEASE + 2025.07.16.01-RELEASE ../pom.xml diff --git a/test-commons/pom.xml b/test-commons/pom.xml index 91e65c20b..578a3a71b 100644 --- a/test-commons/pom.xml +++ b/test-commons/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2024.2.14-RELEASE + 2025.07.16.01-RELEASE ../pom.xml diff --git a/test-coverage/pom.xml b/test-coverage/pom.xml index 03dd7da89..1c73c213f 100644 --- a/test-coverage/pom.xml +++ b/test-coverage/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2024.2.14-RELEASE + 2025.07.16.01-RELEASE ../pom.xml