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/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; 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 7ec211abc..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 @@ -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..f11afd43e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,12 +6,12 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent pom - 2024.2.14-RELEASE + 2025.07.16.01-RELEASE QPP Conversion Tool 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/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 9be22ba6c..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 @@ -30,7 +30,7 @@ org.springframework.boot spring-boot-maven-plugin - 3.3.7 + 3.4.7 @@ -63,7 +63,7 @@ org.springframework.boot spring-boot-dependencies - 3.3.7 + 3.4.7 pom import @@ -72,6 +72,11 @@ spring-webmvc 6.1.14 + + org.springframework.security + spring-security-crypto + 6.3.8 + @@ -122,17 +127,17 @@ org.springframework.boot spring-boot-starter-security - 3.3.7 + 3.4.7 org.springframework.boot spring-boot-starter-web - 3.3.7 + 3.4.7 org.springframework spring-web - 6.1.15 + 6.1.21 org.springframework.security @@ -178,7 +183,7 @@ org.springframework spring-test - 6.1.15 + 6.1.21 test @@ -211,13 +216,6 @@ - - - org.springframework - spring-beans - 6.1.15 - - org.springframework.boot spring-boot-test @@ -319,7 +317,7 @@ org.springframework.boot spring-boot-starter-test - 3.3.7 + 3.4.7 test 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