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 extends Enum>> 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