From de8af7c5027ebfc54949bd888b785abcaa6f77cd Mon Sep 17 00:00:00 2001 From: David Berry Date: Tue, 10 Mar 2026 16:06:04 -0400 Subject: [PATCH 1/9] feat: QPPA-11346 update to java 21 and begin bugfix --- .github/workflows/ci-build.yml | 4 +- .github/workflows/draft-new-release.yml | 4 +- DEVELOPER.md | 2 +- Dockerfile | 4 +- DockerfileTest | 4 +- README.md | 8 +- acceptance-tests/pom.xml | 2 +- .../conversion/util/EnvironmentHelper.java | 2 +- .../util/MeasuredInputStreamSupplier.java | 16 +- .../util/EnvironmentHelperTest.java | 6 +- .../decode/ClinicalDocumentDecoder.java | 76 +++---- .../conversion/decode/QrdaDecoderEngine.java | 5 +- .../decode/XmlInputFileException.java | 4 +- .../conversion/encode/EncodeException.java | 4 +- .../qpp/conversion/encode/JsonWrapper.java | 5 +- .../gov/cms/qpp/conversion/model/Node.java | 2 +- .../cms/qpp/conversion/model/Registry.java | 9 +- .../qpp/conversion/model/error/AllErrors.java | 3 +- .../qpp/conversion/model/error/Detail.java | 3 +- .../cms/qpp/conversion/model/error/Error.java | 4 +- .../qpp/conversion/model/error/Location.java | 3 +- .../cms/qpp/conversion/xml/XmlException.java | 4 +- .../test/java/gov/cms/qpp/CacheBuilder.java | 11 +- .../AciMeasurePerformedRoundTripTest.java | 2 +- .../AciNumeratorDenominatorRoundTripTest.java | 157 ++++++++------- ...umeratorDenominatorValueRoundTripTest.java | 2 +- ...AciProportionDenominatorRoundTripTest.java | 38 ++-- .../AciProportionNumeratorRoundTripTest.java | 36 ++-- .../ClinicalDocumentExtensionTest.java | 2 +- .../ClinicalDocumentRoundTripTest.java | 17 +- .../qpp/acceptance/ElementLocationTest.java | 2 +- .../IaSectionValidatorRoundTripTest.java | 6 +- .../acceptance/MeasureDataRoundTripTest.java | 12 +- .../acceptance/PiSectionRoundTripTest.java | 187 ++++++++++-------- .../QualityMeasureIdMultiRoundTripTest.java | 12 +- .../QualityMeasureIdRoundTripTest.java | 18 +- .../gov/cms/qpp/conversion/ConverterTest.java | 2 +- .../decode/AggregateCountDecoderTest.java | 85 ++++---- .../decode/ClinicalDocumentDecoderTest.java | 16 +- .../decode/IaSectionDecoderTest.java | 8 +- .../decode/MeasureDataDecoderTest.java | 2 +- .../decode/NullReturnDecoderTest.java | 13 +- .../PiMeasurePerformedRnRDecoderTest.java | 4 +- .../PiNumeratorDenominatorDecoderTest.java | 18 +- .../PiProportionDenominatorDecoderTest.java | 76 +++---- .../qpp/conversion/decode/QedDecoderTest.java | 15 +- .../decode/QrdaDecoderEngineTest.java | 2 +- .../encode/EncoderNegativeConditionsTest.java | 2 +- .../encode/IaSectionEncoderTest.java | 31 ++- .../encode/JsonOutputEncoderTest.java | 4 +- .../conversion/encode/JsonWrapperTest.java | 100 +++++++--- .../PiMeasurePerformedRnREncoderTest.java | 6 +- .../PiNumeratorDenominatorEncoderTest.java | 2 +- .../PiSectionEncoderMultiMeasureTest.java | 44 ++++- .../encode/PiSectionEncoderTest.java | 2 +- .../cms/qpp/conversion/model/NodeTest.java | 4 +- .../conversion/model/error/AllErrorsTest.java | 2 +- .../model/validation/MeasureConfigTest.java | 2 +- .../qpp/conversion/util/JsonHelperTest.java | 6 +- .../ClinicalDocumentValidatorTest.java | 2 +- .../validate/MeasureDataValidatorTest.java | 2 +- .../QualityMeasureSectionValidatorTest.java | 2 +- .../cms/qpp/conversion/xml/XmlUtilsTest.java | 2 +- .../java/gov/cms/qpp/model/CacheType.java | 2 +- generate-race-cpcplus/pom.xml | 2 +- generate/pom.xml | 2 +- pom.xml | 25 ++- qrda3-update-measures/pom.xml | 2 +- rest-api/pom.xml | 2 +- .../conversion/api/config/DynamoDbConfig.java | 2 +- .../api/security/JwtAuthorizationFilter.java | 4 +- .../controllers/v2/QrdaControllerV2Test.java | 8 +- .../api/controllers/v2/ZipControllerTest.java | 4 +- .../api/helper/AdvancedApmHelperTest.java | 2 +- .../internal/ValidationServiceImplTest.java | 6 +- .../cms/qpp/test/helper/HelperContract.java | 2 +- test-coverage/pom.xml | 2 +- 77 files changed, 663 insertions(+), 532 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index b059d32400..a9bc34c702 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -22,10 +22,10 @@ jobs: uses: zricethezav/gitleaks-action@6e41781c235feb424ecc3435610dce20ad349a70 # pin@master - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v4 with: - java-version: "17" + java-version: "21" distribution: "corretto" - name: Delete old dependencies (may trigger Snyk vulnerability otherwise) diff --git a/.github/workflows/draft-new-release.yml b/.github/workflows/draft-new-release.yml index de50a90440..d43523defc 100644 --- a/.github/workflows/draft-new-release.yml +++ b/.github/workflows/draft-new-release.yml @@ -35,10 +35,10 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.ACTIONS_NICHOLAS_PAT }} - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v4 with: - java-version: "17" + java-version: "21" distribution: "corretto" cache: 'maven' diff --git a/DEVELOPER.md b/DEVELOPER.md index a663a1c170..36c1a1cb07 100644 --- a/DEVELOPER.md +++ b/DEVELOPER.md @@ -17,7 +17,7 @@ if you'd like to contribute to qpp-conversion-tool. The additional prerequisites that were not already outlined in the [main README][readme] are... -- [Java Development Kit](http://www.oracle.com/technetwork/java/javase/downloads/index.html) (version `>= 17`). The Java Runtime +- [Java Development Kit](http://www.oracle.com/technetwork/java/javase/downloads/index.html) (version `>= 21`). The Java Runtime will not suffice. - [Maven](https://maven.apache.org). diff --git a/Dockerfile b/Dockerfile index 676b9f980b..bafdeebb56 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin:17 AS builder +FROM eclipse-temurin:21 AS builder ARG MAVEN_VERSION=3.9.6 ARG USER_HOME_DIR="/root" @@ -37,7 +37,7 @@ WORKDIR /usr/src/app/ RUN /usr/local/bin/mvn-entrypoint.sh mvn install -Dmaven.test.skip -Djacoco.skip=true -Dskip.generate=true > /dev/null # Final stage -FROM eclipse-temurin:17-jre +FROM eclipse-temurin:21-jre RUN mkdir -p /usr/src/run/ COPY --from=builder /usr/src/app/tools/docker/docker-artifacts /usr/src/run/ diff --git a/DockerfileTest b/DockerfileTest index fb111ff243..9f11d33bcc 100644 --- a/DockerfileTest +++ b/DockerfileTest @@ -1,4 +1,4 @@ -FROM maven:3.9.6-eclipse-temurin-17 AS builder +FROM maven:3.9.6-eclipse-temurin-21 AS builder COPY ./ /usr/src/app/ WORKDIR /usr/src/app/ @@ -6,7 +6,7 @@ WORKDIR /usr/src/app/ RUN mvn install -Dmaven.test.skip -Djacoco.skip=true > /dev/null # Final stage -FROM eclipse-temurin:17-jre +FROM eclipse-temurin:21-jre RUN apt-get update && apt-get install -y dos2unix && rm -rf /var/lib/apt/lists/* diff --git a/README.md b/README.md index ec583a273f..0303979880 100644 --- a/README.md +++ b/README.md @@ -16,19 +16,19 @@ Before you can use the qpp-conversion-tool application, you must install and con [GitHub's Guide to Installing Git](https://help.github.com/articles/set-up-git) is a good source of information. -* [Java Runtime](https://java.com/download) (version `17`). +* [Java Runtime](https://java.com/download) (version `21`). It is important that you have the right version of `java` on your path. ```shell - # When you run 'java -version', you should get 17. For example: + # When you run 'java -version', you should get 21. For example: java -version - java version "17" + java version "21" ... ``` Sometimes the Java Runtime installer doesn't update your path. So you must do it manually. Alternatively, download and install - the [Java Development Kit](http://www.oracle.com/technetwork/java/javase/downloads/index.html) (version `>= 17`). The JDK is + the [Java Development Kit](http://www.oracle.com/technetwork/java/javase/downloads/index.html) (version `>= 21`). The JDK is better at updating your path. * [Maven](https://maven.apache.org) (version `3.9.6`). diff --git a/acceptance-tests/pom.xml b/acceptance-tests/pom.xml index 13edbb302f..694762b824 100644 --- a/acceptance-tests/pom.xml +++ b/acceptance-tests/pom.xml @@ -7,7 +7,7 @@ conversion-tests jar - 17 + 21 UTF-8 4.2.5 diff --git a/commons/src/main/java/gov/cms/qpp/conversion/util/EnvironmentHelper.java b/commons/src/main/java/gov/cms/qpp/conversion/util/EnvironmentHelper.java index abd1f8a80c..98fe29a3d8 100644 --- a/commons/src/main/java/gov/cms/qpp/conversion/util/EnvironmentHelper.java +++ b/commons/src/main/java/gov/cms/qpp/conversion/util/EnvironmentHelper.java @@ -39,7 +39,7 @@ public static String get(String variable) { String value = getIfPresent(variable); if (value == null) { LOG.warn( - String.format(NOT_FOUND, variable)); + NOT_FOUND.formatted(variable)); } return value; } diff --git a/commons/src/main/java/gov/cms/qpp/conversion/util/MeasuredInputStreamSupplier.java b/commons/src/main/java/gov/cms/qpp/conversion/util/MeasuredInputStreamSupplier.java index 6a3f8829d5..56111dc535 100755 --- a/commons/src/main/java/gov/cms/qpp/conversion/util/MeasuredInputStreamSupplier.java +++ b/commons/src/main/java/gov/cms/qpp/conversion/util/MeasuredInputStreamSupplier.java @@ -18,13 +18,7 @@ public class MeasuredInputStreamSupplier implements Supplier { private final int size; // Oracle and Sonar recommend the constructor before any methods, even static methods - private MeasuredInputStreamSupplier(InputStream source) { - byte[] byteArray; - try { - byteArray = IOUtils.toByteArray(source); - } catch (IOException e) { - throw new UncheckedIOException(e); - } + private MeasuredInputStreamSupplier(byte[] byteArray) { delegate = () -> new ByteArrayInputStream(byteArray); this.size = byteArray.length; } @@ -37,8 +31,14 @@ private MeasuredInputStreamSupplier(InputStream source) { */ public static MeasuredInputStreamSupplier terminallyTransformInputStream(InputStream source) { Objects.requireNonNull(source, "source"); + byte[] byteArray; + try { + byteArray = IOUtils.toByteArray(source); + } catch (IOException e) { + throw new UncheckedIOException(e); + } - return new MeasuredInputStreamSupplier(source); + return new MeasuredInputStreamSupplier(byteArray); } /** diff --git a/commons/src/test/java/gov/cms/qpp/conversion/util/EnvironmentHelperTest.java b/commons/src/test/java/gov/cms/qpp/conversion/util/EnvironmentHelperTest.java index ef3e512358..412667d7b3 100644 --- a/commons/src/test/java/gov/cms/qpp/conversion/util/EnvironmentHelperTest.java +++ b/commons/src/test/java/gov/cms/qpp/conversion/util/EnvironmentHelperTest.java @@ -36,7 +36,7 @@ void testIsPresentOnRandomString() { @Test void testLogEntryForFailures() { String random = UUID.randomUUID().toString(); - String message = String.format(EnvironmentHelper.NOT_FOUND, random); + String message = EnvironmentHelper.NOT_FOUND.formatted(random); EnvironmentHelper.get(random); assertThat(getLogs()).contains(message); @@ -65,7 +65,7 @@ void testLogEntryForIsPresentFailureIsEmpty() { String someKey = UUID.randomUUID().toString(); String value = ""; System.setProperty(someKey, value); - String message = String.format(EnvironmentHelper.NOT_FOUND, someKey); + String message = EnvironmentHelper.NOT_FOUND.formatted(someKey); EnvironmentHelper.isPresent(someKey); assertThat(getLogs()).doesNotContain(message); @@ -100,7 +100,7 @@ void testGetWhenPresentNoWarning() { assertThat(result).isEqualTo(expectedValue); // Ensure warning log is not present - assertThat(getLogs()).doesNotContain(String.format(EnvironmentHelper.NOT_FOUND, key)); + assertThat(getLogs()).doesNotContain(EnvironmentHelper.NOT_FOUND.formatted(key)); } @Test 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 eb4b87cd2e..c1530f5af4 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 @@ -182,56 +182,30 @@ private void setMultipleTaxProviderTaxIdsOnNode(Element element, Node thisNode) * @return array of String program name, entity type */ private Pair getProgramNameEntityPair(String name) { - Pair pair; - switch (name.toUpperCase(Locale.ENGLISH)) { - case MIPS_INDIVIDUAL: - pair = new ImmutablePair<>(MIPS_PROGRAM_NAME, ENTITY_INDIVIDUAL); - break; - - case APP_INDIVIDUAL: - pair = new ImmutablePair<>(APP_PROGRAM_NAME, ENTITY_INDIVIDUAL); - break; - - case MIPS_GROUP: - pair = new ImmutablePair<>(MIPS_PROGRAM_NAME, ENTITY_GROUP); - break; - - case APP_GROUP: - pair = new ImmutablePair<>(APP_PROGRAM_NAME, ENTITY_GROUP); - break; - - case MIPS_VIRTUAL_GROUP: - pair = new ImmutablePair<>(MIPS_PROGRAM_NAME, ENTITY_VIRTUAL_GROUP); - break; - - case MIPS_APM: - pair = new ImmutablePair<>(MIPS_PROGRAM_NAME, ENTITY_APM); - break; - - case APP_APM: - pair = new ImmutablePair<>(APP_PROGRAM_NAME, ENTITY_APM); - break; - - case MIPS_SUBGROUP: - pair = new ImmutablePair<>(MIPS_PROGRAM_NAME, ENTITY_SUBGROUP); - break; - - case APP_PLUS_INDIVIDUAL: - pair = new ImmutablePair<>(APP_PLUS_PROGRAM_NAME, ENTITY_INDIVIDUAL); - break; - - case APP_PLUS_GROUP: - pair = new ImmutablePair<>(APP_PLUS_PROGRAM_NAME, ENTITY_GROUP); - break; - - case APP_PLUS_APM: - pair = new ImmutablePair<>(APP_PLUS_PROGRAM_NAME, ENTITY_APM); - break; - - default: - pair = new ImmutablePair<>(name.toLowerCase(Locale.ENGLISH), ENTITY_INDIVIDUAL); - break; - } - return pair; + return switch (name.toUpperCase(Locale.ENGLISH)) { + case MIPS_INDIVIDUAL -> new ImmutablePair<>(MIPS_PROGRAM_NAME, ENTITY_INDIVIDUAL); + + case APP_INDIVIDUAL -> new ImmutablePair<>(APP_PROGRAM_NAME, ENTITY_INDIVIDUAL); + + case MIPS_GROUP -> new ImmutablePair<>(MIPS_PROGRAM_NAME, ENTITY_GROUP); + + case APP_GROUP -> new ImmutablePair<>(APP_PROGRAM_NAME, ENTITY_GROUP); + + case MIPS_VIRTUAL_GROUP -> new ImmutablePair<>(MIPS_PROGRAM_NAME, ENTITY_VIRTUAL_GROUP); + + case MIPS_APM -> new ImmutablePair<>(MIPS_PROGRAM_NAME, ENTITY_APM); + + case APP_APM -> new ImmutablePair<>(APP_PROGRAM_NAME, ENTITY_APM); + + case MIPS_SUBGROUP -> new ImmutablePair<>(MIPS_PROGRAM_NAME, ENTITY_SUBGROUP); + + case APP_PLUS_INDIVIDUAL -> new ImmutablePair<>(APP_PLUS_PROGRAM_NAME, ENTITY_INDIVIDUAL); + + case APP_PLUS_GROUP -> new ImmutablePair<>(APP_PLUS_PROGRAM_NAME, ENTITY_GROUP); + + case APP_PLUS_APM -> new ImmutablePair<>(APP_PLUS_PROGRAM_NAME, ENTITY_APM); + + default -> new ImmutablePair<>(name.toLowerCase(Locale.ENGLISH), ENTITY_INDIVIDUAL); + }; } } diff --git a/converter/src/main/java/gov/cms/qpp/conversion/decode/QrdaDecoderEngine.java b/converter/src/main/java/gov/cms/qpp/conversion/decode/QrdaDecoderEngine.java index 03fd5d8281..94d94d2e93 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/decode/QrdaDecoderEngine.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/decode/QrdaDecoderEngine.java @@ -70,7 +70,7 @@ public Node decode(Element xmlDoc) { } if (rootDecoder != null) { - rootNode = this.decodeTree(rootElement, rootNode).getNode().getChildNodes().get(0); + rootNode = this.decodeTree(rootElement, rootNode).getNode().getChildNodes().getFirst(); } else { rootNode = this.decodeTree(rootElement, rootNode).getNode(); } @@ -314,8 +314,7 @@ private boolean containsClinicalDocumentTemplateId(Element rootElement) { } private void addLineAndColumnToNode(Element element, Node node) { - if (element instanceof Located) { - Located located = (Located) element; + if (element instanceof Located located) { node.setLine(located.getLine()); node.setColumn(located.getColumn()); } diff --git a/converter/src/main/java/gov/cms/qpp/conversion/decode/XmlInputFileException.java b/converter/src/main/java/gov/cms/qpp/conversion/decode/XmlInputFileException.java index be5ff72e0c..7aabaa0251 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/decode/XmlInputFileException.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/decode/XmlInputFileException.java @@ -1,11 +1,13 @@ package gov.cms.qpp.conversion.decode; +import java.io.Serial; + /** * This exception indicates a problem with the source XML document. */ public class XmlInputFileException extends RuntimeException { - private static final long serialVersionUID = 1L; + @Serial private static final long serialVersionUID = 1L; public XmlInputFileException(String message, Exception cause) { super(message, cause); diff --git a/converter/src/main/java/gov/cms/qpp/conversion/encode/EncodeException.java b/converter/src/main/java/gov/cms/qpp/conversion/encode/EncodeException.java index 8df61fee0f..d59c83fb1e 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/encode/EncodeException.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/encode/EncodeException.java @@ -1,11 +1,13 @@ package gov.cms.qpp.conversion.encode; +import java.io.Serial; + /** * This exception indicates an issue encountered during the encoding (json serialization) process. */ public class EncodeException extends RuntimeException { - private static final long serialVersionUID = 4L; + @Serial private static final long serialVersionUID = 4L; private final String templateId; /** diff --git a/converter/src/main/java/gov/cms/qpp/conversion/encode/JsonWrapper.java b/converter/src/main/java/gov/cms/qpp/conversion/encode/JsonWrapper.java index 0153faf366..1f546eb789 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/encode/JsonWrapper.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/encode/JsonWrapper.java @@ -39,7 +39,7 @@ public class JsonWrapper implements Serializable { public static enum Kind { - CONTAINER, VALUE, METADATA; + CONTAINER, VALUE, METADATA } public static enum Type { @@ -1011,8 +1011,7 @@ public Object toObject() { */ public Object stripWrapper(Object value) { // TODO only used in unit tests Object internalValue = value; - if (value instanceof JsonWrapper) { - JsonWrapper wrapper = (JsonWrapper) value; + if (value instanceof JsonWrapper wrapper) { internalValue = wrapper.toObject(); } return internalValue; diff --git a/converter/src/main/java/gov/cms/qpp/conversion/model/Node.java b/converter/src/main/java/gov/cms/qpp/conversion/model/Node.java index e57954c24d..58f2b330a0 100755 --- a/converter/src/main/java/gov/cms/qpp/conversion/model/Node.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/model/Node.java @@ -422,7 +422,7 @@ private List findNode(TemplateId templateId, Predicate> bail) { */ public Node findFirstNode(TemplateId templateId) { List nodes = this.findNode(templateId, Node::foundNode); - return nodes.isEmpty() ? null : nodes.get(0); + return nodes.isEmpty() ? null : nodes.getFirst(); } /** diff --git a/converter/src/main/java/gov/cms/qpp/conversion/model/Registry.java b/converter/src/main/java/gov/cms/qpp/conversion/model/Registry.java index 83560724eb..d66e936a1e 100755 --- a/converter/src/main/java/gov/cms/qpp/conversion/model/Registry.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/model/Registry.java @@ -84,16 +84,13 @@ Set getComponentKeys(Class annotatedClass) { Annotation annotation = annotatedClass.getAnnotation(annotationClass); Set values = new HashSet<>(); - if (annotation instanceof Decoder) { - Decoder decoder = (Decoder) annotation; + if (annotation instanceof Decoder decoder) { values.add(new ComponentKey(decoder.value(), decoder.program())); } - if (annotation instanceof Encoder) { - Encoder encoder = (Encoder) annotation; + if (annotation instanceof Encoder encoder) { values.add(new ComponentKey(encoder.value(), encoder.program())); } - if (annotation instanceof Validator) { - Validator validator = (Validator) annotation; + if (annotation instanceof Validator validator) { values.add(new ComponentKey(validator.value(), validator.program())); } return values; diff --git a/converter/src/main/java/gov/cms/qpp/conversion/model/error/AllErrors.java b/converter/src/main/java/gov/cms/qpp/conversion/model/error/AllErrors.java index a9e919e38c..6d9446c65a 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/model/error/AllErrors.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/model/error/AllErrors.java @@ -2,6 +2,7 @@ import com.google.common.base.MoreObjects; +import java.io.Serial; import java.io.Serializable; import java.util.ArrayList; import java.util.LinkedHashSet; @@ -12,7 +13,7 @@ * Contains a list of error errors. */ public class AllErrors implements Serializable { - private static final long serialVersionUID = -223805249639231357L; + @Serial private static final long serialVersionUID = -223805249639231357L; private List errors; /** diff --git a/converter/src/main/java/gov/cms/qpp/conversion/model/error/Detail.java b/converter/src/main/java/gov/cms/qpp/conversion/model/error/Detail.java index d9d90a0e68..b7dba68f08 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/model/error/Detail.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/model/error/Detail.java @@ -6,6 +6,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.EqualsBuilder; +import java.io.Serial; import java.io.Serializable; import java.util.Objects; @@ -18,7 +19,7 @@ */ @JsonIgnoreProperties(ignoreUnknown = true) public class Detail implements Serializable { - private static final long serialVersionUID = 8818544157552598922L; + @Serial private static final long serialVersionUID = 8818544157552598922L; private Integer errorCode; private String message; diff --git a/converter/src/main/java/gov/cms/qpp/conversion/model/error/Error.java b/converter/src/main/java/gov/cms/qpp/conversion/model/error/Error.java index eeba9cfeca..3c74e28ebb 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/model/error/Error.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/model/error/Error.java @@ -5,6 +5,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.MoreObjects; + +import java.io.Serial; import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -18,7 +20,7 @@ */ @JsonIgnoreProperties(ignoreUnknown = true) public class Error implements Serializable { - private static final long serialVersionUID = 1596644641404778774L; + @Serial private static final long serialVersionUID = 1596644641404778774L; private String sourceIdentifier; private String type; private String message; diff --git a/converter/src/main/java/gov/cms/qpp/conversion/model/error/Location.java b/converter/src/main/java/gov/cms/qpp/conversion/model/error/Location.java index 07ab4f0cc9..e01ad3c573 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/model/error/Location.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/model/error/Location.java @@ -1,5 +1,6 @@ package gov.cms.qpp.conversion.model.error; +import java.io.Serial; import java.io.Serializable; import java.util.Objects; @@ -12,7 +13,7 @@ */ public class Location implements Serializable { - private static final long serialVersionUID = 1812341767532590176L; + @Serial private static final long serialVersionUID = 1812341767532590176L; private String location; //NOSONAR location field is desired. private String path = ""; diff --git a/converter/src/main/java/gov/cms/qpp/conversion/xml/XmlException.java b/converter/src/main/java/gov/cms/qpp/conversion/xml/XmlException.java index cf02620806..443c1bd419 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/xml/XmlException.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/xml/XmlException.java @@ -1,11 +1,13 @@ package gov.cms.qpp.conversion.xml; +import java.io.Serial; + /** * Exception used during the JDom parsing. * */ public class XmlException extends RuntimeException { - private static final long serialVersionUID = 1L; + @Serial private static final long serialVersionUID = 1L; /** * Creates a named Exception diff --git a/converter/src/test/java/gov/cms/qpp/CacheBuilder.java b/converter/src/test/java/gov/cms/qpp/CacheBuilder.java index 8cc45fbf0f..88cbb7be01 100644 --- a/converter/src/test/java/gov/cms/qpp/CacheBuilder.java +++ b/converter/src/test/java/gov/cms/qpp/CacheBuilder.java @@ -22,12 +22,11 @@ public static void buildEntityIdsCache() { public static ApmEntityIds getEntityIds(CacheType value) { if (entityIdsCache == null) buildEntityIdsCache(); if (entityIdsCache.getIfPresent(value) == null) { - ApmEntityIds entityData = null; - switch(value) { - case ApmEntityId -> entityData = new ApmEntityIds("test_apm_entity_ids.json"); - case ApmEntityIds -> entityData = new ApmEntityIds("test_apm_entity_ids.json","test_apm_entity_ids.json"); - case ApmPcfEntityIds -> entityData = new ApmEntityIds("test_apm_entity_ids.json","test_pcf_apm_entity_ids.json"); - } + ApmEntityIds entityData = switch(value) { + case ApmEntityId -> new ApmEntityIds("test_apm_entity_ids.json"); + case ApmEntityIds -> new ApmEntityIds("test_apm_entity_ids.json","test_apm_entity_ids.json"); + case ApmPcfEntityIds -> new ApmEntityIds("test_apm_entity_ids.json","test_pcf_apm_entity_ids.json"); + }; entityIdsCache.put(value, entityData); } return entityIdsCache.getIfPresent(value); diff --git a/converter/src/test/java/gov/cms/qpp/acceptance/AciMeasurePerformedRoundTripTest.java b/converter/src/test/java/gov/cms/qpp/acceptance/AciMeasurePerformedRoundTripTest.java index 05d18dccc0..ef70f54aa6 100644 --- a/converter/src/test/java/gov/cms/qpp/acceptance/AciMeasurePerformedRoundTripTest.java +++ b/converter/src/test/java/gov/cms/qpp/acceptance/AciMeasurePerformedRoundTripTest.java @@ -29,7 +29,7 @@ void testGarbage() { assertThat(piMeasures) .hasSize(1); - assertThat((piMeasures.get(0).get("measureId"))) + assertThat((piMeasures.getFirst().get("measureId"))) .isEqualTo("TEST_MEASURE_ID"); } } diff --git a/converter/src/test/java/gov/cms/qpp/acceptance/AciNumeratorDenominatorRoundTripTest.java b/converter/src/test/java/gov/cms/qpp/acceptance/AciNumeratorDenominatorRoundTripTest.java index a9296a7655..41e99a961b 100644 --- a/converter/src/test/java/gov/cms/qpp/acceptance/AciNumeratorDenominatorRoundTripTest.java +++ b/converter/src/test/java/gov/cms/qpp/acceptance/AciNumeratorDenominatorRoundTripTest.java @@ -17,76 +17,91 @@ class AciNumeratorDenominatorRoundTripTest { @Test void parseAciNumeratorDenominatorAsNode() throws Exception { - String xmlFragment = "\n" - + "\n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" + " Patient Access\n" - + " \n" + " \n" + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" + " \n" - + " \n" + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" + " \n" - + " \n" + " \n" + " \n" - + " \n" + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" + " \n" - + " \n" + " \n" + " \n" - + " \n" + ""; + String xmlFragment = """ + + + + + + + + + + + + + + + + Patient Access + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + """; Context context = new Context(); Node numeratorDenominatorNode = new QrdaDecoderEngine(context).decode(XmlUtils.stringToDom(xmlFragment)); @@ -106,7 +121,7 @@ void parseAciNumeratorDenominatorAsNode() throws Exception { String jsonExpected = "{\n \"measureId\" : \"ACI-PEA-1\",\n \"value\" : {\n \"numerator\" : 600,\n \"denominator\" : 800\n }\n}"; assertWithMessage("The XPath of the numerator denominator node is incorrect") - .that(numeratorDenominatorNode.getChildNodes().get(0).getOrComputePath()) + .that(numeratorDenominatorNode.getChildNodes().getFirst().getOrComputePath()) .isEqualTo(xPathExpected); assertWithMessage("expected encoder to return a representation of a measure") diff --git a/converter/src/test/java/gov/cms/qpp/acceptance/AciNumeratorDenominatorValueRoundTripTest.java b/converter/src/test/java/gov/cms/qpp/acceptance/AciNumeratorDenominatorValueRoundTripTest.java index a6d2d0e898..a8bdedde74 100644 --- a/converter/src/test/java/gov/cms/qpp/acceptance/AciNumeratorDenominatorValueRoundTripTest.java +++ b/converter/src/test/java/gov/cms/qpp/acceptance/AciNumeratorDenominatorValueRoundTripTest.java @@ -35,7 +35,7 @@ void decodeAggregateCountAsNode() throws Exception { String xPathExpected = "/*[local-name() = 'root' and namespace-uri() = 'urn:hl7-org:v3']/*[local-name() = 'observation'" + " and namespace-uri() = 'urn:hl7-org:v3']"; assertWithMessage("The XPath of the aggregate count node is incorrect") - .that(numDenomNode.getChildNodes().get(0).getOrComputePath()) + .that(numDenomNode.getChildNodes().getFirst().getOrComputePath()) .isEqualTo(xPathExpected); QppOutputEncoder encoder = new QppOutputEncoder(context); diff --git a/converter/src/test/java/gov/cms/qpp/acceptance/AciProportionDenominatorRoundTripTest.java b/converter/src/test/java/gov/cms/qpp/acceptance/AciProportionDenominatorRoundTripTest.java index 33d041cdf0..21db815a48 100644 --- a/converter/src/test/java/gov/cms/qpp/acceptance/AciProportionDenominatorRoundTripTest.java +++ b/converter/src/test/java/gov/cms/qpp/acceptance/AciProportionDenominatorRoundTripTest.java @@ -17,23 +17,27 @@ class AciProportionDenominatorRoundTripTest { @Test void parseAciNumeratorDenominatorAsNode() throws Exception { - String xmlFragment = "\n" - + "\n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " " + " \n" + " \n" + ""; + String xmlFragment = """ + + + + + + + + + + + + + + + + + \ + + + """; Context context = new Context(); Node numDenomNode = new QrdaDecoderEngine(context).decode(XmlUtils.stringToDom(xmlFragment)); diff --git a/converter/src/test/java/gov/cms/qpp/acceptance/AciProportionNumeratorRoundTripTest.java b/converter/src/test/java/gov/cms/qpp/acceptance/AciProportionNumeratorRoundTripTest.java index 5ac8396a39..e09b466527 100644 --- a/converter/src/test/java/gov/cms/qpp/acceptance/AciProportionNumeratorRoundTripTest.java +++ b/converter/src/test/java/gov/cms/qpp/acceptance/AciProportionNumeratorRoundTripTest.java @@ -17,22 +17,26 @@ class AciProportionNumeratorRoundTripTest { @Test void parseAciNumeratorDenominatorAsNode() throws Exception { - String xmlFragment = "\n" - + "\n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" + " \n" + " \n" + ""; + String xmlFragment = """ + + + + + + + + + + + + + + + + + + + """; Context context = new Context(); Node numDenomNode = new QrdaDecoderEngine(context).decode(XmlUtils.stringToDom(xmlFragment)); diff --git a/converter/src/test/java/gov/cms/qpp/acceptance/ClinicalDocumentExtensionTest.java b/converter/src/test/java/gov/cms/qpp/acceptance/ClinicalDocumentExtensionTest.java index ebf60458b9..3cc7dfbcb6 100644 --- a/converter/src/test/java/gov/cms/qpp/acceptance/ClinicalDocumentExtensionTest.java +++ b/converter/src/test/java/gov/cms/qpp/acceptance/ClinicalDocumentExtensionTest.java @@ -58,7 +58,7 @@ void invalidMessage() throws IOException { try { convert(INVALID); } catch (TransformException ex) { - Detail detail = ex.getDetails().getErrors().get(0).getDetails().get(0); + Detail detail = ex.getDetails().getErrors().getFirst().getDetails().getFirst(); assertThat(detail.getMessage()).isEqualTo(ProblemCode.NOT_VALID_QRDA_DOCUMENT .format(Context.REPORTING_YEAR, DocumentationReference.CLINICAL_DOCUMENT).getMessage()); } diff --git a/converter/src/test/java/gov/cms/qpp/acceptance/ClinicalDocumentRoundTripTest.java b/converter/src/test/java/gov/cms/qpp/acceptance/ClinicalDocumentRoundTripTest.java index 63d4113d61..b7ace8f653 100644 --- a/converter/src/test/java/gov/cms/qpp/acceptance/ClinicalDocumentRoundTripTest.java +++ b/converter/src/test/java/gov/cms/qpp/acceptance/ClinicalDocumentRoundTripTest.java @@ -55,14 +55,15 @@ void parseClinicalDocument() throws Exception { @Test void checkCorrectClinicalDocumentTemplateIdWins() throws XmlException { - String similarClinicalDocumentBlob = "\n" - + "\t\n" - + "\t\n" - + "\t\n" - + "\t\n" - + ""; + String similarClinicalDocumentBlob = """ + + + + + + """; Node root = new QrdaDecoderEngine(new Context()).decode(XmlUtils.stringToDom(similarClinicalDocumentBlob)); diff --git a/converter/src/test/java/gov/cms/qpp/acceptance/ElementLocationTest.java b/converter/src/test/java/gov/cms/qpp/acceptance/ElementLocationTest.java index d4b4dd177a..97732aecc7 100644 --- a/converter/src/test/java/gov/cms/qpp/acceptance/ElementLocationTest.java +++ b/converter/src/test/java/gov/cms/qpp/acceptance/ElementLocationTest.java @@ -38,7 +38,7 @@ private void runTest(BiPredicate elementFinder) throws IOExceptio Element document = XmlUtils.stringToDom(qrda); Node someChildNode = new QrdaDecoderEngine(new Context()).decode(document).getChildNodes().get(2); XPathExpression xpathLocationOfSomeChildNode = XPathFactory.instance().compile(someChildNode.getOrComputePath()); - Element element = (Element) xpathLocationOfSomeChildNode.evaluate(document).get(0); + Element element = (Element) xpathLocationOfSomeChildNode.evaluate(document).getFirst(); Object elementOfNode = element.getChildren() .stream() .map(Located.class::cast) diff --git a/converter/src/test/java/gov/cms/qpp/acceptance/IaSectionValidatorRoundTripTest.java b/converter/src/test/java/gov/cms/qpp/acceptance/IaSectionValidatorRoundTripTest.java index 5a11876962..d088402578 100644 --- a/converter/src/test/java/gov/cms/qpp/acceptance/IaSectionValidatorRoundTripTest.java +++ b/converter/src/test/java/gov/cms/qpp/acceptance/IaSectionValidatorRoundTripTest.java @@ -29,7 +29,7 @@ void testIaSectionValidatorIncorrectChildren() { errors = exception.getDetails(); } - Integer error = errors.getErrors().get(0).getDetails().get(0).getErrorCode(); + Integer error = errors.getErrors().getFirst().getDetails().getFirst().getErrorCode(); assertThat(ProblemCode.getByCode(error)) .isEqualTo(ProblemCode.IA_SECTION_WRONG_CHILD); @@ -47,7 +47,7 @@ void testIaSectionValidatorMissingMeasures() { errors = exception.getDetails(); } - Integer error = errors.getErrors().get(0).getDetails().get(0).getErrorCode(); + Integer error = errors.getErrors().getFirst().getDetails().getFirst().getErrorCode(); assertThat(ProblemCode.getByCode(error)) .isEqualTo(ProblemCode.IA_SECTION_MISSING_IA_MEASURE); @@ -66,7 +66,7 @@ void testIaSectionValidatorMissingReportingParameters() { errors = exception.getDetails(); } - Integer error = errors.getErrors().get(0).getDetails().get(0).getErrorCode(); + Integer error = errors.getErrors().getFirst().getDetails().getFirst().getErrorCode(); assertThat(ProblemCode.getByCode(error)) .isEqualTo(ProblemCode.IA_SECTION_MISSING_REPORTING_PARAM); diff --git a/converter/src/test/java/gov/cms/qpp/acceptance/MeasureDataRoundTripTest.java b/converter/src/test/java/gov/cms/qpp/acceptance/MeasureDataRoundTripTest.java index a3ea968d1c..f0cd638df2 100644 --- a/converter/src/test/java/gov/cms/qpp/acceptance/MeasureDataRoundTripTest.java +++ b/converter/src/test/java/gov/cms/qpp/acceptance/MeasureDataRoundTripTest.java @@ -27,8 +27,14 @@ class MeasureDataRoundTripTest { private static final String EXPECTED = - "{\n \"eligiblePopulation\" : 950,\n \"performanceMet\" : 900,\n" + - " \"eligiblePopulationException\" : 50,\n \"eligiblePopulationExclusion\" : 50\n}"; + """ + { + "eligiblePopulation" : 950, + "performanceMet" : 900, + "eligiblePopulationException" : 50, + "eligiblePopulationExclusion" : 50 + }\ + """; private static String happy; @BeforeAll @@ -53,7 +59,7 @@ private void test(SubPopulationLabel type) throws Exception { //then assertThat(measure).isNotNull(); - assertThat(measure.getChildNodes().get(0).getType()) + assertThat(measure.getChildNodes().getFirst().getType()) .isEquivalentAccordingToCompareTo(TemplateId.PI_AGGREGATE_COUNT); assertThat(sw.toString()) .isEqualTo(EXPECTED); diff --git a/converter/src/test/java/gov/cms/qpp/acceptance/PiSectionRoundTripTest.java b/converter/src/test/java/gov/cms/qpp/acceptance/PiSectionRoundTripTest.java index dfb47c81a5..6d2fe2f5c6 100644 --- a/converter/src/test/java/gov/cms/qpp/acceptance/PiSectionRoundTripTest.java +++ b/converter/src/test/java/gov/cms/qpp/acceptance/PiSectionRoundTripTest.java @@ -45,33 +45,37 @@ class PiSectionRoundTripTest { @Test void parseSparsePiSectionAsNode() throws XmlException { //set-up - String xmlFragment = "\n" - + "\n" - + "
\n" + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " Measure Section\n" + " \n" + " \n" - + " \n" - + " \n" - + " \n" - + " " - + " \n" - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + "
\n" - + "
"; + String xmlFragment = """ + + +
+ + + + + + Measure Section + + + + + + \ + + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
+
"""; //execute Node parentNode = new QrdaDecoderEngine(new Context()).decode(XmlUtils.stringToDom(xmlFragment)); @@ -84,35 +88,39 @@ void parseSparsePiSectionAsNode() throws XmlException { @Test void parseGarbagePiSectionAsNode() throws XmlException { //set-up - String xmlFragment = "\n" - + "\n" - + "
\n" + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " Utter garbage! Buahahahahaha!\n" - + " Measure Section\n" + " \n" + " \n" - + " \n" - + " \n" - + " \n" - + " " - + " \n" - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + "
\n" - + "
"; + String xmlFragment = """ + + +
+ + + + + + + Utter garbage! Buahahahahaha! + Measure Section + + + + + + \ + + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
+
"""; //execute Node parentNode = new QrdaDecoderEngine(new Context()).decode(XmlUtils.stringToDom(xmlFragment)); @@ -124,32 +132,37 @@ void parseGarbagePiSectionAsNode() throws XmlException { @Test void parsePiSectionAsJson() throws EncodeException, XmlException { - String xmlFragment = "\n" - + "\n" - + "
\n" + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " Measure Section\n" + " \n" + " \n" + " \n" - + " \n" - + " \n" - + " " - + " \n" - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + "
\n" - + "
"; + String xmlFragment = """ + + +
+ + + + + + Measure Section + + + + + + \ + + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
+
"""; String expected = "{\n \"category\" : \"pi\",\n \"submissionMethod\" : \"electronicHealthRecord\",\n \"measurements\" : [ {\n \"measure\" : \"measure1\"\n } ],\n \"performanceStart\" : \"2017-01-01\",\n \"performanceEnd\" : \"2017-04-30\"\n}"; @@ -180,7 +193,7 @@ void testPiSectionRestrictedMeasures() { converter.transform(); } catch (TransformException exception) { AllErrors errors = exception.getDetails(); - details.addAll(errors.getErrors().get(0).getDetails()); + details.addAll(errors.getErrors().getFirst().getDetails()); } assertThat(details).comparingElementsUsing(DetailsErrorEquals.INSTANCE) .contains(ProblemCode.PI_RESTRICTED_MEASURES); @@ -206,7 +219,7 @@ void testAppApmCehrtIsEncoded() { assertThat(warnings).isNull(); List cehrtIdList = JsonHelper.readJsonAtJsonPath(qppWrapper.toString(), "$.measurementSets[?(@.category=='pi')].cehrtId", new TypeRef>() { }); - assertThat(cehrtIdList.get(0)).isEqualTo("XX15CXXXXXXXXXX"); + assertThat(cehrtIdList.getFirst()).isEqualTo("XX15CXXXXXXXXXX"); } @Test @@ -229,7 +242,7 @@ void testAppGroupCehrtIsEncoded() { assertThat(warnings).isNull(); List cehrtIdList = JsonHelper.readJsonAtJsonPath(qppWrapper.toString(), "$.measurementSets[?(@.category=='pi')].cehrtId", new TypeRef>() { }); - assertThat(cehrtIdList.get(0)).isEqualTo("XX15CXXXXXXXXXX"); + assertThat(cehrtIdList.getFirst()).isEqualTo("XX15CXXXXXXXXXX"); } @Test @@ -252,12 +265,12 @@ void testAppIndividualCehrtIsEncoded() { assertThat(warnings).isNull(); List cehrtIdList = JsonHelper.readJsonAtJsonPath(qppWrapper.toString(), "$.measurementSets[?(@.category=='pi')].cehrtId", new TypeRef>() { }); - assertThat(cehrtIdList.get(0)).isEqualTo("XX15CXXXXXXXXXX"); + assertThat(cehrtIdList.getFirst()).isEqualTo("XX15CXXXXXXXXXX"); } private void assertAciSectionHasSingleQedNode(Node aciSectionNode) { assertThat(aciSectionNode).isNotNull(); - assertThat(aciSectionNode.getChildNodes().get(0).getType()) + assertThat(aciSectionNode.getChildNodes().getFirst().getType()) .isEquivalentAccordingToCompareTo(TemplateId.QED); } } diff --git a/converter/src/test/java/gov/cms/qpp/acceptance/QualityMeasureIdMultiRoundTripTest.java b/converter/src/test/java/gov/cms/qpp/acceptance/QualityMeasureIdMultiRoundTripTest.java index f7ab28138b..f594cc23c7 100644 --- a/converter/src/test/java/gov/cms/qpp/acceptance/QualityMeasureIdMultiRoundTripTest.java +++ b/converter/src/test/java/gov/cms/qpp/acceptance/QualityMeasureIdMultiRoundTripTest.java @@ -84,7 +84,7 @@ void testRoundTripForQualityMeasureId() { "The measureId in the quality measure should still populate given the junk stuff in the measure."; assertWithMessage(message) - .that(qualityMeasures.get(0).get("measureId")) + .that(qualityMeasures.getFirst().get("measureId")) .isEqualTo("009"); assertFirstSubPopulation(subPopulation); @@ -160,7 +160,7 @@ void testRoundTripQualityMeasureIdWithDenomGreaterThanIpop() { converter.transform(); } catch (TransformException exception) { AllErrors errors = exception.getDetails(); - details.addAll(errors.getErrors().get(0).getDetails()); + details.addAll(errors.getErrors().getFirst().getDetails()); } assertThat(details).comparingElementsUsing(DetailsErrorEquals.INSTANCE) @@ -184,20 +184,20 @@ private List executeScenario(String path, boolean remove) { converter.transform(); } catch (TransformException exception) { AllErrors errors = exception.getDetails(); - details.addAll(errors.getErrors().get(0).getDetails()); + details.addAll(errors.getErrors().getFirst().getDetails()); } return details; } private void assertFirstSubPopulation(List> subPopulation) { assertWithMessage(REQUIRE_ELIGIBLE_POPULATION_TOTAL) - .that(subPopulation.get(0).get(ELIGIBLE_POPULATION)) + .that(subPopulation.getFirst().get(ELIGIBLE_POPULATION)) .isEqualTo(600); assertWithMessage(REQUIRE_PERFORMANCE_MET) - .that(subPopulation.get(0).get(PERFORMANCE_MET)) + .that(subPopulation.getFirst().get(PERFORMANCE_MET)) .isEqualTo(486); assertWithMessage(REQUIRE_ELIGIBLE_POPULATION_EXCLUSIONS) - .that(subPopulation.get(0).get(ELIGIBLE_POPULATION_EXCLUSION)) + .that(subPopulation.getFirst().get(ELIGIBLE_POPULATION_EXCLUSION)) .isEqualTo(35); } diff --git a/converter/src/test/java/gov/cms/qpp/acceptance/QualityMeasureIdRoundTripTest.java b/converter/src/test/java/gov/cms/qpp/acceptance/QualityMeasureIdRoundTripTest.java index 44ed901a48..e6357cb37c 100644 --- a/converter/src/test/java/gov/cms/qpp/acceptance/QualityMeasureIdRoundTripTest.java +++ b/converter/src/test/java/gov/cms/qpp/acceptance/QualityMeasureIdRoundTripTest.java @@ -67,7 +67,7 @@ void testRoundTripForQualityMeasureId() { assertThat(qualityMeasures).hasSize(1); assertWithMessage("The measureId in the quality measure should still populate given the junk stuff in the measure.") - .that(qualityMeasures.get(0).get("measureId")) + .that(qualityMeasures.getFirst().get("measureId")) .isEqualTo("236"); } @@ -80,7 +80,7 @@ void testMeasureCMS165DoesNotContainUnexpectedValue() { List measureId = JsonHelper.readJsonAtJsonPath(qpp.toString(), "$.measurementSets[?(@.category=='quality')].measurements[*].measureId", new TypeRef>() { }); - assertThat(measureId.get(0)).isEqualTo("236"); + assertThat(measureId.getFirst()).isEqualTo("236"); assertThat(containsUnwantedValueList).isEmpty(); } @@ -93,12 +93,12 @@ void testMeasureCMS68v8PerformanceRateUuid() { converter.transform(); } catch (TransformException exception) { AllErrors errors = exception.getDetails(); - details.addAll(errors.getErrors().get(0).getDetails()); + details.addAll(errors.getErrors().getFirst().getDetails()); } String measureId = "CMS68v8"; String correctId = MeasureConfigs.getConfigurationMap() - .get("40280382-5fa6-fe85-0160-0ea3e0012376").getSubPopulation().get(0).getNumeratorUuid(); + .get("40280382-5fa6-fe85-0160-0ea3e0012376").getSubPopulation().getFirst().getNumeratorUuid(); LocalizedProblem error = ProblemCode.QUALITY_MEASURE_ID_INCORRECT_UUID.format(measureId, PERFORMANCE_RATE_ID, correctId); @@ -116,7 +116,7 @@ void testMeasureCMS138v7PerformanceRateUuid() { converter.transform(); } catch (TransformException exception) { AllErrors errors = exception.getDetails(); - details.addAll(errors.getErrors().get(0).getDetails()); + details.addAll(errors.getErrors().getFirst().getDetails()); } assertThat(details).comparingElementsUsing(DetailsErrorEquals.INSTANCE) @@ -132,7 +132,7 @@ void testMeasureCMS52v5WithInsensitiveTextUuid() { converter.transform(); } catch (TransformException exception) { AllErrors errors = exception.getDetails(); - details.addAll(errors.getErrors().get(0).getDetails()); + details.addAll(errors.getErrors().getFirst().getDetails()); } assertThat(details).comparingElementsUsing(DetailsErrorEquals.INSTANCE) @@ -151,7 +151,7 @@ void testMeasureCMS52v5InsensitiveMeasureDataUuid() { converter.transform(); } catch (TransformException exception) { AllErrors errors = exception.getDetails(); - details.addAll(errors.getErrors().get(0).getDetails()); + details.addAll(errors.getErrors().getFirst().getDetails()); } assertThat(details).comparingElementsUsing(DetailsErrorEquals.INSTANCE) @@ -179,7 +179,7 @@ void testIncorrectMultiToSinglePerfMeasureExample() { converter.transform(); } catch (TransformException exception) { AllErrors errors = exception.getDetails(); - details.addAll(errors.getErrors().get(0).getDetails()); + details.addAll(errors.getErrors().getFirst().getDetails()); } assertThat(details.size()).isEqualTo(2); @@ -197,7 +197,7 @@ void testMissingPerfDenomAggregateCount() { converter.transform(); } catch (TransformException exception) { AllErrors errors = exception.getDetails(); - details.addAll(errors.getErrors().get(0).getDetails()); + details.addAll(errors.getErrors().getFirst().getDetails()); } String populationId = "F50E5334-415D-482F-A30D-0623C082B602"; diff --git a/converter/src/test/java/gov/cms/qpp/conversion/ConverterTest.java b/converter/src/test/java/gov/cms/qpp/conversion/ConverterTest.java index 1a84e3d092..73f3ca0b51 100755 --- a/converter/src/test/java/gov/cms/qpp/conversion/ConverterTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/ConverterTest.java @@ -153,7 +153,7 @@ private void checkup(TransformException exception, LocalizedProblem error) { List errors = allErrors.getErrors(); assertWithMessage("There must only be one error source.") .that(errors).hasSize(1); - List details = errors.get(0).getDetails(); + List details = errors.getFirst().getDetails(); assertWithMessage("There must be only one validation error.") .that(details).hasSize(1); assertWithMessage("The validation error was incorrect") diff --git a/converter/src/test/java/gov/cms/qpp/conversion/decode/AggregateCountDecoderTest.java b/converter/src/test/java/gov/cms/qpp/conversion/decode/AggregateCountDecoderTest.java index 3a964ad024..64748acdb4 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/decode/AggregateCountDecoderTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/decode/AggregateCountDecoderTest.java @@ -57,44 +57,45 @@ class AggregateCountDecoderTest { + " \n" + ""; - private static final String DUPLICATE_AGGREGATE_COUNT = "" - + "\n" - + "\n" - + "\n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + "\n" - + "\n" - + "" - + ""; + private static final String DUPLICATE_AGGREGATE_COUNT = """ + \ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ + """; @Test void testInternalDecode() { @@ -122,15 +123,15 @@ void testInternalDecode() { void testAggregateCountDecoderIgnoresInvalidElements() throws XmlException { Node root = new QrdaDecoderEngine(new Context()).decode(XmlUtils.stringToDom(XML_FRAGMENT)); - Node node = root.getChildNodes().get(0); + Node node = root.getChildNodes().getFirst(); assertThat(node.getChildNodes()).hasSize(1); - assertThat(node.getChildNodes().get(0).getValue("aggregateCount")) + assertThat(node.getChildNodes().getFirst().getValue("aggregateCount")) .isEqualTo("400"); assertWithMessage("Should have template id") - .that(node.getChildNodes().get(0).getType()) + .that(node.getChildNodes().getFirst().getType()) .isEqualTo(TemplateId.PI_AGGREGATE_COUNT); } @@ -150,6 +151,6 @@ void testAggregateCountDecoderIgnoresInvalidElementsPartTwo() throws XmlExceptio @Test void testDuplicateAggregateCountDecodesToDuplicateAggregateCount() throws XmlException { Node root = new QrdaDecoderEngine(new Context()).decode(XmlUtils.stringToDom(DUPLICATE_AGGREGATE_COUNT)); - assertThat(root.getChildNodes().get(0).getChildNodes(TemplateId.PI_AGGREGATE_COUNT).count()).isEqualTo(2); + assertThat(root.getChildNodes().getFirst().getChildNodes(TemplateId.PI_AGGREGATE_COUNT).count()).isEqualTo(2); } } diff --git a/converter/src/test/java/gov/cms/qpp/conversion/decode/ClinicalDocumentDecoderTest.java b/converter/src/test/java/gov/cms/qpp/conversion/decode/ClinicalDocumentDecoderTest.java index bf0492efd3..88fd199584 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/decode/ClinicalDocumentDecoderTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/decode/ClinicalDocumentDecoderTest.java @@ -82,28 +82,28 @@ void testRootMvpId() { @Test void testAciCategory() { - Node aciSectionNode = clinicalDocument.getChildNodes().get(0); + Node aciSectionNode = clinicalDocument.getChildNodes().getFirst(); assertThat(aciSectionNode.getValue("category")) .isEqualTo("pi"); } @Test void testAciPea1MeasureId() { - Node aciSectionNode = clinicalDocument.getChildNodes().get(0); - assertThat(aciSectionNode.getChildNodes().get(0).getValue("measureId")) + Node aciSectionNode = clinicalDocument.getChildNodes().getFirst(); + assertThat(aciSectionNode.getChildNodes().getFirst().getValue("measureId")) .isEqualTo("PI-PEA-1"); } @Test void testAciEp1MeasureId() { - Node aciSectionNode = clinicalDocument.getChildNodes().get(0); + Node aciSectionNode = clinicalDocument.getChildNodes().getFirst(); assertThat(aciSectionNode.getChildNodes().get(1).getValue("measureId")) .isEqualTo("PI_EP_1"); } @Test void testAciCctpe3MeasureId() { - Node aciSectionNode = clinicalDocument.getChildNodes().get(0); + Node aciSectionNode = clinicalDocument.getChildNodes().getFirst(); assertThat(aciSectionNode.getChildNodes().get(2).getValue("measureId")) .isEqualTo("PI_CCTPE_3"); } @@ -118,7 +118,7 @@ void testIaCategory() { @Test void testIaMeasureId() { Node iaSectionNode = clinicalDocument.getChildNodes().get(1); - Node iaMeasureNode = iaSectionNode.getChildNodes().get(0); + Node iaMeasureNode = iaSectionNode.getChildNodes().getFirst(); assertThat(iaMeasureNode.getValue("measureId")) .isEqualTo("IA_EPA_1"); } @@ -142,8 +142,8 @@ void testClinicalDocumentIgnoresGarbage() throws IOException, XmlException { @Test void testIaMeasurePerformed() { Node iaSectionNode = clinicalDocument.getChildNodes().get(1); - Node iaMeasureNode = iaSectionNode.getChildNodes().get(0); - Node iaMeasurePerformedNode = iaMeasureNode.getChildNodes().get(0); + Node iaMeasureNode = iaSectionNode.getChildNodes().getFirst(); + Node iaMeasurePerformedNode = iaMeasureNode.getChildNodes().getFirst(); assertThat(iaMeasurePerformedNode.getValue("measurePerformed")) .isEqualTo("Y"); } diff --git a/converter/src/test/java/gov/cms/qpp/conversion/decode/IaSectionDecoderTest.java b/converter/src/test/java/gov/cms/qpp/conversion/decode/IaSectionDecoderTest.java index 364dcb1e6c..0f6e7ace56 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/decode/IaSectionDecoderTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/decode/IaSectionDecoderTest.java @@ -35,8 +35,12 @@ void decodeAciSectionAsNode() throws XmlException { @Test void testDecodeIaSectionIgnoresGarbage() throws XmlException { xmlFragment = xmlFragment.replaceAll("Some extra stuff" + - "Unexpected stuff appears here\n\nSome extra stuff\ + Unexpected stuff appears here + + node.getValue(MEASURE_TYPE).equals(type)); assertThat(measure).isNotNull(); - assertThat(measure.getChildNodes().get(0).getType()).isEqualTo(TemplateId.PI_AGGREGATE_COUNT); + assertThat(measure.getChildNodes().getFirst().getType()).isEqualTo(TemplateId.PI_AGGREGATE_COUNT); } } diff --git a/converter/src/test/java/gov/cms/qpp/conversion/decode/NullReturnDecoderTest.java b/converter/src/test/java/gov/cms/qpp/conversion/decode/NullReturnDecoderTest.java index 666f807fa6..35c095b8cc 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/decode/NullReturnDecoderTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/decode/NullReturnDecoderTest.java @@ -12,12 +12,13 @@ class NullReturnDecoderTest { @Test void decodeReturnNullNode() throws Exception { - String xmlFragment = "\n" - + "\n" - + " \n" - + " \n" - + " " - + ""; + String xmlFragment = """ + + + + + \ + """; // Get the root wrapper node Node root = new QrdaDecoderEngine(new Context()).decode(XmlUtils.stringToDom(xmlFragment)); diff --git a/converter/src/test/java/gov/cms/qpp/conversion/decode/PiMeasurePerformedRnRDecoderTest.java b/converter/src/test/java/gov/cms/qpp/conversion/decode/PiMeasurePerformedRnRDecoderTest.java index bf91e3ddd1..fe79ade8a0 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/decode/PiMeasurePerformedRnRDecoderTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/decode/PiMeasurePerformedRnRDecoderTest.java @@ -56,9 +56,9 @@ void internalDecodeReturnsTreeContinue() { @Test void testUpperLevel() throws XmlException, IOException { String needsFormattingXml = TestHelper.getFixture("AciMeasurePerformedIsolated.xml"); - String xml = String.format(needsFormattingXml, MEASURE_ID); + String xml = needsFormattingXml.formatted(MEASURE_ID); Node wrapperNode = new QrdaDecoderEngine(new Context()).decode(XmlUtils.stringToDom(xml)); - Node piMeasurePerformedNode = wrapperNode.getChildNodes().get(0); + Node piMeasurePerformedNode = wrapperNode.getChildNodes().getFirst(); String actualMeasureId = piMeasurePerformedNode.getValue("measureId"); diff --git a/converter/src/test/java/gov/cms/qpp/conversion/decode/PiNumeratorDenominatorDecoderTest.java b/converter/src/test/java/gov/cms/qpp/conversion/decode/PiNumeratorDenominatorDecoderTest.java index dcae6f6e67..32d152205a 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/decode/PiNumeratorDenominatorDecoderTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/decode/PiNumeratorDenominatorDecoderTest.java @@ -33,7 +33,7 @@ void decodeAggregateCountAsNode() throws Exception { Node aggregateCountNode = new QrdaDecoderEngine(new Context()).decode(XmlUtils.stringToDom(xmlFragment)); - assertThat(aggregateCountNode.getChildNodes().get(0).getValue("aggregateCount")) + assertThat(aggregateCountNode.getChildNodes().getFirst().getValue("aggregateCount")) .isEqualTo("600"); } @@ -50,7 +50,7 @@ void decodePiNumeratorDenominatorNullValueAsNode() throws Exception { Node numDenomNode = new QrdaDecoderEngine(new Context()).decode(XmlUtils.stringToDom(xmlFragment)); assertWithMessage("pi numerator/denominator value should be null") - .that(numDenomNode.getChildNodes().get(0).getValue("aggregateCount")).isNull(); + .that(numDenomNode.getChildNodes().getFirst().getValue("aggregateCount")).isNull(); } @Test @@ -65,26 +65,26 @@ void decodeAciNumeratorDenominatorNullElementAsNode() throws Exception { Node numDenomNode = new QrdaDecoderEngine(new Context()).decode(XmlUtils.stringToDom(xmlFragment)); assertWithMessage("po numerator/denominator value should be null") - .that(numDenomNode.getChildNodes().get(0).getValue("aggregateCount")).isNull(); + .that(numDenomNode.getChildNodes().getFirst().getValue("aggregateCount")).isNull(); } @Test void decodeValidAciNumeratorDenominatorTest() throws XmlException { Node piMeasureNode = new QrdaDecoderEngine(new Context()).decode(XmlUtils.stringToDom(getValidXmlFragment())); - Node numeratorDenominatorNode = piMeasureNode.getChildNodes().get(0); + Node numeratorDenominatorNode = piMeasureNode.getChildNodes().getFirst(); int numberNodes = countNodes(piMeasureNode); List nodeList = piMeasureNode.findNode(TemplateId.PI_NUMERATOR); assertThat(numeratorDenominatorNode.getValue("measureId")) .isEqualTo(MEASURE_ID); - assertThat(numeratorDenominatorNode.getChildNodes().get(0).getType()) + assertThat(numeratorDenominatorNode.getChildNodes().getFirst().getType()) .isEqualTo(TemplateId.PI_NUMERATOR); assertThat(numeratorDenominatorNode.getChildNodes().get(1).getType()) .isEqualTo(TemplateId.PI_DENOMINATOR); - nodeList = nodeList.get(0).findNode(TemplateId.PI_AGGREGATE_COUNT); + nodeList = nodeList.getFirst().findNode(TemplateId.PI_AGGREGATE_COUNT); assertWithMessage("Decoded xml fragment %s should contain %s", TemplateId.PI_NUMERATOR.name(), TemplateId.PI_AGGREGATE_COUNT.name()) @@ -94,7 +94,7 @@ void decodeValidAciNumeratorDenominatorTest() throws XmlException { assertWithMessage("Decoded xml fragment should contain %s", TemplateId.PI_DENOMINATOR.name()) .that(nodeList).hasSize(1); - nodeList = nodeList.get(0).findNode(TemplateId.PI_AGGREGATE_COUNT); + nodeList = nodeList.getFirst().findNode(TemplateId.PI_AGGREGATE_COUNT); assertWithMessage("Decoded xml fragment %s should contain %s", TemplateId.PI_NUMERATOR.name(), TemplateId.PI_AGGREGATE_COUNT.name()) .that(nodeList).hasSize(1); @@ -122,7 +122,7 @@ void decodePiNumeratorDenominatorExtraneousXMLTest() throws XmlException { assertWithMessage("Decoded xml fragment should contain %s", TemplateId.PI_NUMERATOR.name()) .that(nodeList).hasSize(1); - nodeList = nodeList.get(0).findNode(TemplateId.PI_AGGREGATE_COUNT); + nodeList = nodeList.getFirst().findNode(TemplateId.PI_AGGREGATE_COUNT); assertWithMessage("Decoded xml fragment %s should contain %s", TemplateId.PI_NUMERATOR.name(), TemplateId.PI_AGGREGATE_COUNT.name()) .that(nodeList).hasSize(1); @@ -131,7 +131,7 @@ void decodePiNumeratorDenominatorExtraneousXMLTest() throws XmlException { assertWithMessage("Decoded xml fragment should contain %s", TemplateId.PI_DENOMINATOR.name()) .that(nodeList).hasSize(1); - nodeList = nodeList.get(0).findNode(TemplateId.PI_AGGREGATE_COUNT); + nodeList = nodeList.getFirst().findNode(TemplateId.PI_AGGREGATE_COUNT); assertWithMessage("Decoded xml fragment %s should contain %s", TemplateId.PI_NUMERATOR.name(), TemplateId.PI_AGGREGATE_COUNT.name()) .that(nodeList).hasSize(1); diff --git a/converter/src/test/java/gov/cms/qpp/conversion/decode/PiProportionDenominatorDecoderTest.java b/converter/src/test/java/gov/cms/qpp/conversion/decode/PiProportionDenominatorDecoderTest.java index e7f8d5c9f8..46df3c0262 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/decode/PiProportionDenominatorDecoderTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/decode/PiProportionDenominatorDecoderTest.java @@ -23,19 +23,20 @@ class PiProportionDenominatorDecoderTest { */ @Test void decodePIProportionDenominatorAsNode() throws Exception { - String xmlFragment = "\n" - + "\n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " " - + " \n" - + " \n" - + ""; + String xmlFragment = """ + + + + + + + + + + \ + + + """; Node root = new QrdaDecoderEngine(new Context()).decode(XmlUtils.stringToDom(xmlFragment)); // For all decoders this should be either a value or child node @@ -43,12 +44,12 @@ void decodePIProportionDenominatorAsNode() throws Exception { .hasSize(1); // This is the child node that is produced by the intended decoder - Node piProportionDenominatorNode = root.getChildNodes().get(0); + Node piProportionDenominatorNode = root.getChildNodes().getFirst(); // Should have a aggregate count node assertThat(piProportionDenominatorNode.getChildNodes()) .hasSize(1); // This is stubbed node with the test value - Node target = piProportionDenominatorNode.getChildNodes().get(0); + Node target = piProportionDenominatorNode.getChildNodes().getFirst(); // Get the test value assertThat(target.getValue("aggregateCount")) .isEqualTo("800"); @@ -56,36 +57,37 @@ void decodePIProportionDenominatorAsNode() throws Exception { @Test void decodeInvalidPIProportionDenominatorAsNode() throws Exception { - String xmlFragment = "\n" - + "\n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " " - + " \n" - + " \n" - + " " - + " " - + " " - + " " - + " " - + " " - + " " - + " "; + String xmlFragment = """ + + + + + + + + + + \ + + + \ + \ + \ + \ + \ + \ + \ + """; Node root = new QrdaDecoderEngine(new Context()).decode(XmlUtils.stringToDom(xmlFragment)); // For all decoders this should be either a value or child node assertThat(root.getChildNodes()).hasSize(2); // This is the child node that is produced by the intended decoder - Node piProportionDenominatorNode = root.getChildNodes().get(0); + Node piProportionDenominatorNode = root.getChildNodes().getFirst(); // Should have a aggregate count node assertThat(piProportionDenominatorNode.getChildNodes()).hasSize(1); // This is stubbed node with the test value - Node target = piProportionDenominatorNode.getChildNodes().get(0); + Node target = piProportionDenominatorNode.getChildNodes().getFirst(); // Get the test value assertThat(target.getValue("aggregateCount")) .isEqualTo("800"); diff --git a/converter/src/test/java/gov/cms/qpp/conversion/decode/QedDecoderTest.java b/converter/src/test/java/gov/cms/qpp/conversion/decode/QedDecoderTest.java index 693a7a220a..4431579af0 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/decode/QedDecoderTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/decode/QedDecoderTest.java @@ -11,18 +11,19 @@ class QedDecoderTest { @Test void decodeQEDAsNode() throws Exception { - String xmlFragment = "\n" - + "\n" - + " \n" - + " \n" - + " " - + ""; + String xmlFragment = """ + + + + + \ + """; // Get the root wrapper node Node root = new QrdaDecoderEngine(new Context()).decode(XmlUtils.stringToDom(xmlFragment)); assertThat(root.getChildNodes()).hasSize(1); - Node target = root.getChildNodes().get(0); + Node target = root.getChildNodes().getFirst(); assertThat(target.getValue("result")).isEqualTo("mytestvalue"); } diff --git a/converter/src/test/java/gov/cms/qpp/conversion/decode/QrdaDecoderEngineTest.java b/converter/src/test/java/gov/cms/qpp/conversion/decode/QrdaDecoderEngineTest.java index b8cc2ab208..698faa4786 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/decode/QrdaDecoderEngineTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/decode/QrdaDecoderEngineTest.java @@ -74,7 +74,7 @@ void topLevelNodeDoesntHaveTemplateId() { Node node = objectUnderTest.decode(testElement); assertThat(node.getType()).isEqualTo(TemplateId.PLACEHOLDER); - assertThat(node.getChildNodes().get(0).getType()).isEqualTo(TemplateId.IA_SECTION_V3); + assertThat(node.getChildNodes().getFirst().getType()).isEqualTo(TemplateId.IA_SECTION_V3); } @Test diff --git a/converter/src/test/java/gov/cms/qpp/conversion/encode/EncoderNegativeConditionsTest.java b/converter/src/test/java/gov/cms/qpp/conversion/encode/EncoderNegativeConditionsTest.java index 61fdef5e83..56af55852f 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/encode/EncoderNegativeConditionsTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/encode/EncoderNegativeConditionsTest.java @@ -63,7 +63,7 @@ void testExceptionAddsValidation() throws EncodeException { encoder.encode(new BufferedWriter(failWrite), true); assertThat(encoder.getErrors()).hasSize(1); - assertThat(encoder.getErrors().get(0).getMessage()) + assertThat(encoder.getErrors().getFirst().getMessage()) .isEqualTo("Fake IOException"); } } diff --git a/converter/src/test/java/gov/cms/qpp/conversion/encode/IaSectionEncoderTest.java b/converter/src/test/java/gov/cms/qpp/conversion/encode/IaSectionEncoderTest.java index 54dd53e882..25f85538e1 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/encode/IaSectionEncoderTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/encode/IaSectionEncoderTest.java @@ -19,14 +19,35 @@ class IaSectionEncoderTest { - private static final String EXPECTED = "{\n \"category\" : \"ia\",\n \"submissionMethod\" : \"electronicHealthRecord\",\n \"measurements\" : [ " - + "{\n \"measureId\" : \"IA_EPA_1\",\n \"value\" : true\n } ],\n \"performanceStart\" : \"2017-01-01\",\n \"performanceEnd\" : \"2017-12-31\"\n}"; + private static final String EXPECTED = """ + { + "category" : "ia", + "submissionMethod" : "electronicHealthRecord", + "measurements" : [ \ + { + "measureId" : "IA_EPA_1", + "value" : true + } ], + "performanceStart" : "2017-01-01", + "performanceEnd" : "2017-12-31" + }\ + """; private static final String EXPECTED_NO_MEASURE = "{\n \"category\" : \"ia\",\n \"submissionMethod\" : \"electronicHealthRecord\",\n \"performanceStart\" : \"2017-01-01\",\n \"performanceEnd\" : \"2017-12-31\"\n}"; - private static final String EXPECTED_NO_MEASURE_VALUE_1 = "{\n \"category\" : \"ia\",\n " - + "\"submissionMethod\" : \"electronicHealthRecord\",\n \"measurements\" : [ " - + "{\n \"measureId\" : \"IA_EPA_1\"\n } ],\n \"performanceStart\" : \"2017-01-01\",\n \"performanceEnd\" : \"2017-12-31\"\n}"; + private static final String EXPECTED_NO_MEASURE_VALUE_1 = """ + { + "category" : "ia", + \ + "submissionMethod" : "electronicHealthRecord", + "measurements" : [ \ + { + "measureId" : "IA_EPA_1" + } ], + "performanceStart" : "2017-01-01", + "performanceEnd" : "2017-12-31" + }\ + """; private Node iaSectionNode; private Node iaMeasureNode; diff --git a/converter/src/test/java/gov/cms/qpp/conversion/encode/JsonOutputEncoderTest.java b/converter/src/test/java/gov/cms/qpp/conversion/encode/JsonOutputEncoderTest.java index 76430d02ec..ee98c0a57a 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/encode/JsonOutputEncoderTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/encode/JsonOutputEncoderTest.java @@ -36,7 +36,7 @@ void testAddValidationAndGetValidations() { joe.addValidationError(detail2); List validations = joe.getErrors(); assertThat(validations).hasSize(2); - assertThat(validations.get(0).getMessage()).isEqualTo("error"); + assertThat(validations.getFirst().getMessage()).isEqualTo("error"); assertThat(validations.get(1).getMessage()).isEqualTo("another"); } @@ -52,7 +52,7 @@ void testAddValidationAndGetValidationById() { validations = joe.getErrors(); assertThat(validations).isNotNull(); assertThat(validations).hasSize(1); - assertThat(validations.get(0).getMessage()).isEqualTo("err"); + assertThat(validations.getFirst().getMessage()).isEqualTo("err"); } @Test diff --git a/converter/src/test/java/gov/cms/qpp/conversion/encode/JsonWrapperTest.java b/converter/src/test/java/gov/cms/qpp/conversion/encode/JsonWrapperTest.java index 21e33048fc..9ab24dc898 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/encode/JsonWrapperTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/encode/JsonWrapperTest.java @@ -277,9 +277,13 @@ void testJackson_objectWithArray() throws Exception { String json = ow.writeValueAsString(map); - String expect = "{\n \"name1\" : \"value1\",\n"+ - " \"name2\" : [ \"A\", \"B\", \"C\" ],\n" + - " \"name3\" : \"value3\"\n}"; + String expect = """ + { + "name1" : "value1", + "name2" : [ "A", "B", "C" ], + "name3" : "value3" + }\ + """; assertWithMessage("expect array to use [] rather than {} block") .that(json) .isEqualTo(expect); @@ -299,9 +303,13 @@ void testJackson_objectWithList() throws Exception { String json = ow.writeValueAsString(map); - String expect = "{\n \"name1\" : \"value1\",\n"+ - " \"name2\" : [ \"A\", \"B\", \"C\" ],\n" + - " \"name3\" : \"value3\"\n}"; + String expect = """ + { + "name1" : "value1", + "name2" : [ "A", "B", "C" ], + "name3" : "value3" + }\ + """; assertWithMessage("expect list to look like array") .that(json) .isEqualTo(expect); @@ -319,9 +327,16 @@ void testJackson_objectWithChild() throws Exception { String json = ow.writeValueAsString(map); - String expect = "{\n \"name1\" : \"value1\",\n"+ - " \"name2\" : {\n \"obj1\" : \"A\",\n \"obj2\" : \"B\"\n },\n" + - " \"name3\" : \"value3\"\n}"; + String expect = """ + { + "name1" : "value1", + "name2" : { + "obj1" : "A", + "obj2" : "B" + }, + "name3" : "value3" + }\ + """; assertWithMessage("expect comma after child and no comma after last value pair") .that(json) .isEqualTo(expect); @@ -339,9 +354,16 @@ void testJackson_objectWithChild_commaAndOrder() throws Exception { String json = ow.writeValueAsString(map); - String expect = "{\n \"name1\" : \"value1\",\n"+ - " \"name3\" : \"value3\",\n" + - " \"name2\" : {\n \"obj1\" : \"A\",\n \"obj2\" : \"B\"\n }\n}"; + String expect = """ + { + "name1" : "value1", + "name3" : "value3", + "name2" : { + "obj1" : "A", + "obj2" : "B" + } + }\ + """; assertWithMessage("expect no comma expected after the child and order as inserted") .that(json) .isEqualTo(expect); @@ -477,9 +499,13 @@ void testToString_objectWithArray() throws Exception { String json = objectObjWrapper.toString(); - String expect = "{\n \"name1\" : \"value1\",\n"+ - " \"name2\" : [ \"A\", \"B\", \"C\" ],\n" + - " \"name3\" : \"value3\"\n}"; + String expect = """ + { + "name1" : "value1", + "name2" : [ "A", "B", "C" ], + "name3" : "value3" + }\ + """; assertWithMessage("expect array to use [] rather than {} block") .that(json) .isEqualTo(expect); @@ -558,9 +584,13 @@ void testToString_objectWithList() throws Exception { objectObjWrapper.put("name3", "value3"); String actual = objectObjWrapper.toString(); - String expect = "{\n \"name1\" : \"value1\",\n"+ - " \"name2\" : [ \"A\", \"B\", \"C\" ],\n" + - " \"name3\" : \"value3\"\n}"; + String expect = """ + { + "name1" : "value1", + "name2" : [ "A", "B", "C" ], + "name3" : "value3" + }\ + """; assertWithMessage("expect list to look like array") .that(actual) .isEqualTo(expect); @@ -577,9 +607,16 @@ void testToString_objectWithChild() throws Exception { String json = objectObjWrapper.toString(); - String expect = "{\n \"name1\" : \"value1\",\n"+ - " \"name2\" : {\n \"obj1\" : \"A\",\n \"obj2\" : \"B\"\n },\n" + - " \"name3\" : \"value3\"\n}"; + String expect = """ + { + "name1" : "value1", + "name2" : { + "obj1" : "A", + "obj2" : "B" + }, + "name3" : "value3" + }\ + """; assertWithMessage("expect comma after child and no comma after last value pair") .that(json) .isEqualTo(expect); @@ -596,9 +633,16 @@ void testToString_objectWithChild_commaAndOrder() throws Exception { String json = objectObjWrapper.toString(); - String expect = "{\n \"name1\" : \"value1\",\n"+ - " \"name3\" : \"value3\",\n" + - " \"name2\" : {\n \"obj1\" : \"A\",\n \"obj2\" : \"B\"\n }\n}"; + String expect = """ + { + "name1" : "value1", + "name3" : "value3", + "name2" : { + "obj1" : "A", + "obj2" : "B" + } + }\ + """; assertWithMessage("expect no comma expected after the child and order as inserted") .that(json) .isEqualTo(expect); @@ -1057,7 +1101,7 @@ void metadataMap_withMetadata() throws Exception { JsonGenerator gen = mock(JsonGenerator.class); InOrder order = Mockito.inOrder(gen); - JsonWrapper value = new JsonWrapper().put("name","value").putMetadata("meta", "data");; + JsonWrapper value = new JsonWrapper().put("name","value").putMetadata("meta", "data"); Type.MAP.metadata(value, gen); @@ -1103,7 +1147,7 @@ void metadataList_withMetadata() throws Exception { JsonGenerator gen = mock(JsonGenerator.class); InOrder order = Mockito.inOrder(gen); - JsonWrapper value = new JsonWrapper().put("value").putMetadata("meta", "data");; + JsonWrapper value = new JsonWrapper().put("value").putMetadata("meta", "data"); JsonWrapper item1 = value.get(0); @@ -1505,7 +1549,7 @@ public JsonWrapper getByJsonPath(List jsonPath) { mockWrapper.get(jsonPath); // expect the same order as the path notation - Truth.assertThat(paths[0].get(0)).isEqualTo("a"); + Truth.assertThat(paths[0].getFirst()).isEqualTo("a"); Truth.assertThat(paths[0].get(1)).isEqualTo("b"); Truth.assertThat(paths[0].get(2)).isEqualTo("[0"); Truth.assertThat(paths[0].get(3)).isEqualTo("c"); @@ -1528,7 +1572,7 @@ public JsonWrapper getByJsonPath(List jsonPath) { mockWrapper.getByJsonPath(dotPath); // expect the same order as the path notation - Truth.assertThat(paths[0].get(0)).isEqualTo("a"); + Truth.assertThat(paths[0].getFirst()).isEqualTo("a"); Truth.assertThat(paths[0].get(1)).isEqualTo("b"); Truth.assertThat(paths[0].get(2)).isEqualTo("[0"); Truth.assertThat(paths[0].get(3)).isEqualTo("c"); diff --git a/converter/src/test/java/gov/cms/qpp/conversion/encode/PiMeasurePerformedRnREncoderTest.java b/converter/src/test/java/gov/cms/qpp/conversion/encode/PiMeasurePerformedRnREncoderTest.java index 40ff135b88..7bbf35528b 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/encode/PiMeasurePerformedRnREncoderTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/encode/PiMeasurePerformedRnREncoderTest.java @@ -101,7 +101,7 @@ void testInternalEncodeBooleanTrueValue() { //set-up JsonWrapper jsonWrapper = new JsonWrapper(); PiMeasurePerformedRnREncoder objectUnderTest = new PiMeasurePerformedRnREncoder(new Context()); - piMeasurePerformedRnR.getChildNodes().get(0).putValue("measurePerformed", "Y"); + piMeasurePerformedRnR.getChildNodes().getFirst().putValue("measurePerformed", "Y"); //execute objectUnderTest.internalEncode(jsonWrapper, piMeasurePerformedRnR); @@ -117,7 +117,7 @@ void testInternalEncodeBooleanFalseValue() { //set-up JsonWrapper jsonWrapper = new JsonWrapper(); PiMeasurePerformedRnREncoder objectUnderTest = new PiMeasurePerformedRnREncoder(new Context()); - piMeasurePerformedRnR.getChildNodes().get(0).putValue("measurePerformed","N"); + piMeasurePerformedRnR.getChildNodes().getFirst().putValue("measurePerformed","N"); //execute objectUnderTest.internalEncode(jsonWrapper, piMeasurePerformedRnR); @@ -134,7 +134,7 @@ void testInternalEncodeBooleanStringValue() { JsonWrapper jsonWrapper = new JsonWrapper(); PiMeasurePerformedRnREncoder objectUnderTest = new PiMeasurePerformedRnREncoder(new Context()); String unknownValue = "Some unknown value"; - piMeasurePerformedRnR.getChildNodes().get(0).putValue("measurePerformed",unknownValue); + piMeasurePerformedRnR.getChildNodes().getFirst().putValue("measurePerformed",unknownValue); //execute objectUnderTest.internalEncode(jsonWrapper, piMeasurePerformedRnR); diff --git a/converter/src/test/java/gov/cms/qpp/conversion/encode/PiNumeratorDenominatorEncoderTest.java b/converter/src/test/java/gov/cms/qpp/conversion/encode/PiNumeratorDenominatorEncoderTest.java index ecc10cb754..d2f483207b 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/encode/PiNumeratorDenominatorEncoderTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/encode/PiNumeratorDenominatorEncoderTest.java @@ -106,7 +106,7 @@ void testNoChildEncoder() throws EncodeException { assertThat(objectUnderTest.getErrors()) .hasSize(1); assertWithMessage("The validation error must be the inability to find an encoder") - .that(objectUnderTest.getErrors().get(0).getMessage()) + .that(objectUnderTest.getErrors().getFirst().getMessage()) .isEqualTo(ProblemCode.ENCODER_MISSING.getMessage()); } } diff --git a/converter/src/test/java/gov/cms/qpp/conversion/encode/PiSectionEncoderMultiMeasureTest.java b/converter/src/test/java/gov/cms/qpp/conversion/encode/PiSectionEncoderMultiMeasureTest.java index bff64db143..3ba8ef2513 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/encode/PiSectionEncoderMultiMeasureTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/encode/PiSectionEncoderMultiMeasureTest.java @@ -18,15 +18,41 @@ class PiSectionEncoderMultiMeasureTest { - private static final String EXPECTED = "{\n \"category\" : \"pi\",\n \"submissionMethod\" : \"electronicHealthRecord\",\n " - + "\"cehrtId\" : \"xxxxxxxxxx12345\",\n " - + "\"measurements\" : [ " - + "{\n \"measureId\" : \"PI-PEA-1\",\n \"value\" : {\n" - + " \"numerator\" : 400,\n \"denominator\" : 600\n }\n }, " - + "{\n \"measureId\" : \"PI_EP_1\",\n \"value\" : {\n" - + " \"numerator\" : 500,\n \"denominator\" : 700\n }\n }, " - + "{\n \"measureId\" : \"PI_CCTPE_3\",\n \"value\" : {\n" - + " \"numerator\" : 400,\n \"denominator\" : 600\n }\n }" + " ],\n \"programName\" : \"mips\",\n \"performanceStart\" : \"2017-01-01\",\n \"performanceEnd\" : \"2017-12-31\"\n}"; + private static final String EXPECTED = """ + { + "category" : "pi", + "submissionMethod" : "electronicHealthRecord", + \ + "cehrtId" : "xxxxxxxxxx12345", + \ + "measurements" : [ \ + { + "measureId" : "PI-PEA-1", + "value" : { + "numerator" : 400, + "denominator" : 600 + } + }, \ + { + "measureId" : "PI_EP_1", + "value" : { + "numerator" : 500, + "denominator" : 700 + } + }, \ + { + "measureId" : "PI_CCTPE_3", + "value" : { + "numerator" : 400, + "denominator" : 600 + } + }\ + ], + "programName" : "mips", + "performanceStart" : "2017-01-01", + "performanceEnd" : "2017-12-31" + }\ + """; private Node aciSectionNode; private Node reportingParametersNode; diff --git a/converter/src/test/java/gov/cms/qpp/conversion/encode/PiSectionEncoderTest.java b/converter/src/test/java/gov/cms/qpp/conversion/encode/PiSectionEncoderTest.java index 10a66dd281..fad6387c77 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/encode/PiSectionEncoderTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/encode/PiSectionEncoderTest.java @@ -121,7 +121,7 @@ void testInternalEncodeWithNoChildren() { piSectionEncoder.internalEncode(testWrapper, piSectionNode); assertThat(piSectionEncoder.getErrors()).isNotNull(); - assertThat(piSectionEncoder.getErrors().get(0).getMessage()) + assertThat(piSectionEncoder.getErrors().getFirst().getMessage()) .isEqualTo(ProblemCode.ENCODER_MISSING.getMessage()); } diff --git a/converter/src/test/java/gov/cms/qpp/conversion/model/NodeTest.java b/converter/src/test/java/gov/cms/qpp/conversion/model/NodeTest.java index b3030af1ff..9ff235f252 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/model/NodeTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/model/NodeTest.java @@ -51,7 +51,7 @@ void testChild() { node.addChildNode(childNode); assertWithMessage("Did not retrieve expected node") - .that(node.getChildNodes().get(0)).isSameInstanceAs(childNode); + .that(node.getChildNodes().getFirst()).isSameInstanceAs(childNode); } @Test @@ -149,7 +149,7 @@ void testFindNodeLoveThySelf() { assertWithMessage("should find first node that has the searched id") .that(results).hasSize(2); assertWithMessage("should search self first") - .that(results.get(0)).isSameInstanceAs(parent); + .that(results.getFirst()).isSameInstanceAs(parent); } @Test diff --git a/converter/src/test/java/gov/cms/qpp/conversion/model/error/AllErrorsTest.java b/converter/src/test/java/gov/cms/qpp/conversion/model/error/AllErrorsTest.java index 3d4c4a55e2..768c83f172 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/model/error/AllErrorsTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/model/error/AllErrorsTest.java @@ -76,6 +76,6 @@ void testGetErrorDuplicateDetails() { error.setDetails(details); objectUnderTest.addError(error); assertWithMessage("The error details should be one") - .that(objectUnderTest.getErrors().get(0).getDetails()).hasSize(1); + .that(objectUnderTest.getErrors().getFirst().getDetails()).hasSize(1); } } \ No newline at end of file diff --git a/converter/src/test/java/gov/cms/qpp/conversion/model/validation/MeasureConfigTest.java b/converter/src/test/java/gov/cms/qpp/conversion/model/validation/MeasureConfigTest.java index 4b1358957e..b49269f9f8 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/model/validation/MeasureConfigTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/model/validation/MeasureConfigTest.java @@ -34,7 +34,7 @@ static void setup() { throw new IllegalArgumentException("failure to correctly read measures config json", e); } - theConfig = measureConfigs.get(0); + theConfig = measureConfigs.getFirst(); } @Test diff --git a/converter/src/test/java/gov/cms/qpp/conversion/util/JsonHelperTest.java b/converter/src/test/java/gov/cms/qpp/conversion/util/JsonHelperTest.java index ef83007cde..645f188fad 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/util/JsonHelperTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/util/JsonHelperTest.java @@ -97,7 +97,7 @@ void readJsonFromInputStreamWithTypeReference() { InputStream is = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8)); List> result = JsonHelper.readJson(is, new TypeReference>>() {}); - assertWithMessage("Expect first element to have key=value").that(result.get(0).get("key")).isEqualTo("value"); + assertWithMessage("Expect first element to have key=value").that(result.getFirst().get("key")).isEqualTo("value"); } @Test @@ -106,7 +106,7 @@ void readJsonFromPathWithTypeReference() throws Exception { Files.writeString(tempFile, "[{\"key\":\"value\"}]"); List> result = JsonHelper.readJson(tempFile, new TypeReference>>() {}); - assertWithMessage("Expect first element to have key=value").that(result.get(0).get("key")).isEqualTo("value"); + assertWithMessage("Expect first element to have key=value").that(result.getFirst().get("key")).isEqualTo("value"); Files.deleteIfExists(tempFile); } @@ -125,7 +125,7 @@ void readJsonAtJsonPathFromString() { ); assertWithMessage("Should contain 2 measures").that(measures).hasSize(2); - assertWithMessage("First measure ID").that(measures.get(0).get("measureId")).isEqualTo("ACI_INFBLO_1"); + assertWithMessage("First measure ID").that(measures.getFirst().get("measureId")).isEqualTo("ACI_INFBLO_1"); } @Override diff --git a/converter/src/test/java/gov/cms/qpp/conversion/validate/ClinicalDocumentValidatorTest.java b/converter/src/test/java/gov/cms/qpp/conversion/validate/ClinicalDocumentValidatorTest.java index 2d41dd4da4..610a860b90 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/validate/ClinicalDocumentValidatorTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/validate/ClinicalDocumentValidatorTest.java @@ -282,7 +282,7 @@ void testSuccessVirtualGroupId() { private List getErrors(AllErrors content) { - return content.getErrors().get(0).getDetails(); + return content.getErrors().getFirst().getDetails(); } private Node createValidClinicalDocumentNode() { diff --git a/converter/src/test/java/gov/cms/qpp/conversion/validate/MeasureDataValidatorTest.java b/converter/src/test/java/gov/cms/qpp/conversion/validate/MeasureDataValidatorTest.java index b9553d11d3..813dac3852 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/validate/MeasureDataValidatorTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/validate/MeasureDataValidatorTest.java @@ -112,7 +112,7 @@ void multipleNegativeMeasureDataTest() { } private List getErrors(AllErrors content) { - return content.getErrors().get(0).getDetails(); + return content.getErrors().getFirst().getDetails(); } } \ No newline at end of file diff --git a/converter/src/test/java/gov/cms/qpp/conversion/validate/QualityMeasureSectionValidatorTest.java b/converter/src/test/java/gov/cms/qpp/conversion/validate/QualityMeasureSectionValidatorTest.java index 7cf1ae3dc0..2f09fcaf7e 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/validate/QualityMeasureSectionValidatorTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/validate/QualityMeasureSectionValidatorTest.java @@ -63,7 +63,7 @@ void testQualityMeasureSectionWithoutMeasure() { .that(errors).hasSize(1); assertWithMessage("Error must be " + ProblemCode.MEASURE_SECTION_MISSING_MEASURE) - .that(errors.get(0).getErrorCode()).isEqualTo(ProblemCode.MEASURE_SECTION_MISSING_MEASURE.getCode()); + .that(errors.getFirst().getErrorCode()).isEqualTo(ProblemCode.MEASURE_SECTION_MISSING_MEASURE.getCode()); } @Test diff --git a/converter/src/test/java/gov/cms/qpp/conversion/xml/XmlUtilsTest.java b/converter/src/test/java/gov/cms/qpp/conversion/xml/XmlUtilsTest.java index 9269742073..a79c3da494 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/xml/XmlUtilsTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/xml/XmlUtilsTest.java @@ -40,7 +40,7 @@ void stringToDomRootChild() throws Exception { void stringToDomOtherDescendants() throws Exception { Element dom = XmlUtils.stringToDom(xmlFragment); List childElement = dom.getChildren(); - List leafElements = childElement.get(0).getChildren(); + List leafElements = childElement.getFirst().getChildren(); assertWithMessage("test observation has five children") .that(leafElements).hasSize(5); diff --git a/converter/src/test/java/gov/cms/qpp/model/CacheType.java b/converter/src/test/java/gov/cms/qpp/model/CacheType.java index 04fef99a71..807e2734bb 100644 --- a/converter/src/test/java/gov/cms/qpp/model/CacheType.java +++ b/converter/src/test/java/gov/cms/qpp/model/CacheType.java @@ -3,5 +3,5 @@ public enum CacheType { ApmEntityId, ApmEntityIds, - ApmPcfEntityIds; + ApmPcfEntityIds } diff --git a/generate-race-cpcplus/pom.xml b/generate-race-cpcplus/pom.xml index 54be01e9f8..e99487fabd 100644 --- a/generate-race-cpcplus/pom.xml +++ b/generate-race-cpcplus/pom.xml @@ -11,7 +11,7 @@ jar - 17 + 21 UTF-8 ${java.version} ${java.version} diff --git a/generate/pom.xml b/generate/pom.xml index b360c7c103..e8c073d9e2 100644 --- a/generate/pom.xml +++ b/generate/pom.xml @@ -29,7 +29,7 @@ org.apache.maven.plugins maven-plugin-plugin - 3.8.1 + 3.15.0 true diff --git a/pom.xml b/pom.xml index a1868a14d9..2a55326954 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ QPP Conversion Tool - 17 + 21 1.12.787 5.8.1 0.10.7 @@ -47,11 +47,10 @@ org.apache.maven.plugins maven-compiler-plugin - 3.14.0 + 3.15.0 true - ${java.version} - ${java.version} + ${java.version} @@ -83,7 +82,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.7.3.6 + 4.9.8.2 Max Low @@ -176,7 +175,7 @@ org.jacoco jacoco-maven-plugin - 0.8.12 + 0.8.14 jacoco-initialize @@ -411,7 +410,7 @@ commons-codec commons-codec - 1.14 + 1.17.2 @@ -497,6 +496,14 @@ org.bouncycastle bcprov-jdk15on + + org.bouncycastle + bcprov-jdk15to18 + + + org.bouncycastle + bcprov-jdk18on + @@ -508,8 +515,8 @@ org.bouncycastle - bcprov-jdk15on - 1.69 + bcprov-jdk18on + 1.83 diff --git a/qrda3-update-measures/pom.xml b/qrda3-update-measures/pom.xml index 2bc2e94ece..3080aee6df 100644 --- a/qrda3-update-measures/pom.xml +++ b/qrda3-update-measures/pom.xml @@ -9,7 +9,7 @@ jar - 17 + 21 UTF-8 ${java.version} ${java.version} diff --git a/rest-api/pom.xml b/rest-api/pom.xml index f2dbd68eaf..5a0ce2e755 100644 --- a/rest-api/pom.xml +++ b/rest-api/pom.xml @@ -125,7 +125,7 @@ org.jacoco jacoco-maven-plugin - 0.8.12 + 0.8.14 jacoco-prepare-agent-rest diff --git a/rest-api/src/main/java/gov/cms/qpp/conversion/api/config/DynamoDbConfig.java b/rest-api/src/main/java/gov/cms/qpp/conversion/api/config/DynamoDbConfig.java index 644055a6b0..9f48fbd0f5 100644 --- a/rest-api/src/main/java/gov/cms/qpp/conversion/api/config/DynamoDbConfig.java +++ b/rest-api/src/main/java/gov/cms/qpp/conversion/api/config/DynamoDbConfig.java @@ -108,7 +108,7 @@ public DynamoDBMapper dynamoDbMapper(AmazonDynamoDB dynamoDbClient) { final Optional tableName = getOptionalProperty(Constants.DYNAMO_TABLE_NAME_ENV_VARIABLE); final Optional noAudit = getOptionalProperty(Constants.NO_AUDIT_ENV_VARIABLE); - if (!noAudit.isPresent()) { + if (noAudit.isEmpty()) { if (tableName.isPresent() && kmsKey.isPresent()) { API_LOG.info("Using DynamoDB table name {} and KMS key {}.", tableName, kmsKey); dynamoDbMapper = createDynamoDbMapper( diff --git a/rest-api/src/main/java/gov/cms/qpp/conversion/api/security/JwtAuthorizationFilter.java b/rest-api/src/main/java/gov/cms/qpp/conversion/api/security/JwtAuthorizationFilter.java index 5482f8f3cf..05c109f368 100644 --- a/rest-api/src/main/java/gov/cms/qpp/conversion/api/security/JwtAuthorizationFilter.java +++ b/rest-api/src/main/java/gov/cms/qpp/conversion/api/security/JwtAuthorizationFilter.java @@ -47,8 +47,8 @@ public JwtAuthorizationFilter(Set orgName) { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String tokenHeader = null; - if (request instanceof HttpServletRequest) { - tokenHeader = ((HttpServletRequest) request).getHeader(HEADER_STRING); + if (request instanceof HttpServletRequest servletRequest) { + tokenHeader = servletRequest.getHeader(HEADER_STRING); } if (tokenHeader != null) { diff --git a/rest-api/src/test/java/gov/cms/qpp/conversion/api/controllers/v2/QrdaControllerV2Test.java b/rest-api/src/test/java/gov/cms/qpp/conversion/api/controllers/v2/QrdaControllerV2Test.java index 6bc35e16ce..fe337bbbe0 100644 --- a/rest-api/src/test/java/gov/cms/qpp/conversion/api/controllers/v2/QrdaControllerV2Test.java +++ b/rest-api/src/test/java/gov/cms/qpp/conversion/api/controllers/v2/QrdaControllerV2Test.java @@ -98,9 +98,11 @@ void uploadQrdaFile() { verify(qrdaService, atLeastOnce()).convertQrda3ToQpp(any(Source.class)); assertThat(qppResponse.getBody().getQpp().toString()) - .isEqualTo("{\n" - + " \"key\" : \"Good Qpp\"\n" - + "}"); + .isEqualTo(""" + { + "key" : "Good Qpp" + }\ + """); } @Test diff --git a/rest-api/src/test/java/gov/cms/qpp/conversion/api/controllers/v2/ZipControllerTest.java b/rest-api/src/test/java/gov/cms/qpp/conversion/api/controllers/v2/ZipControllerTest.java index 7be5c52bc0..130889f973 100644 --- a/rest-api/src/test/java/gov/cms/qpp/conversion/api/controllers/v2/ZipControllerTest.java +++ b/rest-api/src/test/java/gov/cms/qpp/conversion/api/controllers/v2/ZipControllerTest.java @@ -79,7 +79,7 @@ void uploadQrdaFile_happyPath_returnsResponsesForFiles() throws Exception { objectUnderTest.uploadQrdaFile(multipartFile, null); assertThat(response.getBody()).hasSize(2); - assertThat(response.getBody().get(0).getQpp()).isNotNull(); + assertThat(response.getBody().getFirst().getQpp()).isNotNull(); verify(qrdaService, atLeastOnce()).convertQrda3ToQpp(any(Source.class)); } @@ -139,7 +139,7 @@ void uploadQrdaFile_whenAuditReturnsMetadata_setsLocation() throws Exception { objectUnderTest.uploadQrdaFile(multipartFile, null); assertThat(response.getBody()).hasSize(1); - assertThat(response.getBody().get(0).getLocation()).isEqualTo("uuid-123"); + assertThat(response.getBody().getFirst().getLocation()).isEqualTo("uuid-123"); } private static ZipSpec entry(String name, byte[] bytes) { diff --git a/rest-api/src/test/java/gov/cms/qpp/conversion/api/helper/AdvancedApmHelperTest.java b/rest-api/src/test/java/gov/cms/qpp/conversion/api/helper/AdvancedApmHelperTest.java index a0f0d55a19..cbd4720638 100644 --- a/rest-api/src/test/java/gov/cms/qpp/conversion/api/helper/AdvancedApmHelperTest.java +++ b/rest-api/src/test/java/gov/cms/qpp/conversion/api/helper/AdvancedApmHelperTest.java @@ -79,7 +79,7 @@ void transformMetaDataToUnprocessedFileData_mapsAllItems() { AdvancedApmHelper.transformMetaDataToUnprocessedFileData(Arrays.asList(m1, m2)); assertThat(result).hasSize(2); - assertThat(result.get(0)).isInstanceOf(UnprocessedFileData.class); + assertThat(result.getFirst()).isInstanceOf(UnprocessedFileData.class); assertThat(result.get(1)).isInstanceOf(UnprocessedFileData.class); } diff --git a/rest-api/src/test/java/gov/cms/qpp/conversion/api/services/internal/ValidationServiceImplTest.java b/rest-api/src/test/java/gov/cms/qpp/conversion/api/services/internal/ValidationServiceImplTest.java index 7db413a331..a4330759b6 100644 --- a/rest-api/src/test/java/gov/cms/qpp/conversion/api/services/internal/ValidationServiceImplTest.java +++ b/rest-api/src/test/java/gov/cms/qpp/conversion/api/services/internal/ValidationServiceImplTest.java @@ -192,14 +192,14 @@ void testJsonDesrializationDuplicateEntry() throws IOException { assertThat(convertedErrors.getErrors().size(), is(1)); - assertThat(convertedErrors.getErrors().get(0).getDetails().get(0).getMessage(), + assertThat(convertedErrors.getErrors().getFirst().getDetails().getFirst().getMessage(), startsWith(ValidationServiceImpl.SV_LABEL)); } @Test void testQppToQrdaErrorPathConversion() { - Detail detail = submissionError.getError().getDetails().get(0); - Detail mappedDetails = convertedErrors.getErrors().get(0).getDetails().get(0); + Detail detail = submissionError.getError().getDetails().getFirst(); + Detail mappedDetails = convertedErrors.getErrors().getFirst().getDetails().getFirst(); assertNotEquals(mappedDetails.getLocation().getPath(), detail.getLocation().getPath()); } diff --git a/test-commons/src/main/java/gov/cms/qpp/test/helper/HelperContract.java b/test-commons/src/main/java/gov/cms/qpp/test/helper/HelperContract.java index 9c14ac9cac..07fc900cd9 100644 --- a/test-commons/src/main/java/gov/cms/qpp/test/helper/HelperContract.java +++ b/test-commons/src/main/java/gov/cms/qpp/test/helper/HelperContract.java @@ -7,7 +7,7 @@ public interface HelperContract { @Test - default void testConstructorWorks() throws Exception { + default void testConstructorWorks() throws ReflectiveOperationException { Class type = getHelperClass(); Constructor constructor = type.getDeclaredConstructors()[0]; constructor.setAccessible(true); diff --git a/test-coverage/pom.xml b/test-coverage/pom.xml index 32a3949d24..314d3d6a88 100644 --- a/test-coverage/pom.xml +++ b/test-coverage/pom.xml @@ -52,7 +52,7 @@ org.jacoco jacoco-maven-plugin - 0.8.7 + 0.8.14 **/gov/cms/qpp/conversion/api/config/** From 01a4d49070ca4d8aad9b8574ca8715196e8fce4d Mon Sep 17 00:00:00 2001 From: David Berry Date: Tue, 10 Mar 2026 16:24:51 -0400 Subject: [PATCH 2/9] feat: QPPA-11346 integration tests passing --- .../java/gov/cms/qpp/conversion/Context.java | 1 - .../cms/qpp/conversion/ConversionReport.java | 1 - .../conversion/decode/XmlDecoderEngine.java | 4 ++ .../encode/ClinicalDocumentEncoder.java | 5 +- .../conversion/encode/JsonOutputEncoder.java | 2 +- .../qpp/conversion/encode/JsonWrapper.java | 53 ++++++++++++++----- .../gov/cms/qpp/conversion/model/Node.java | 7 ++- .../model/error/TransformException.java | 1 - .../cms/qpp/conversion/util/CloneHelper.java | 2 +- .../conversion/encode/JsonWrapperTest.java | 8 +-- .../controllers/HealthCheckController.java | 2 +- .../conversion/api/helper/MetadataHelper.java | 1 - 12 files changed, 58 insertions(+), 29 deletions(-) diff --git a/converter/src/main/java/gov/cms/qpp/conversion/Context.java b/converter/src/main/java/gov/cms/qpp/conversion/Context.java index e5451b0af7..ac833899f3 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/Context.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/Context.java @@ -128,7 +128,6 @@ public void setApmEntityIds(final ApmEntityIds apmEntityIds) { * {@link Registry} * @return The existing or new {@link Registry} */ - @SuppressFBWarnings("EI_EXPOSE_REP") @SuppressWarnings("unchecked") public Registry getRegistry(Class annotation) { return (Registry) registries.computeIfAbsent(annotation, key -> new Registry<>(this, key)); diff --git a/converter/src/main/java/gov/cms/qpp/conversion/ConversionReport.java b/converter/src/main/java/gov/cms/qpp/conversion/ConversionReport.java index 34d1a27f20..bcb41aa18b 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/ConversionReport.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/ConversionReport.java @@ -120,7 +120,6 @@ public void setRawValidationDetails(String details) { * * @return {@link Source} for the input. */ - @SuppressFBWarnings("EI_EXPOSE_REP") public Source getQrdaSource() { return source; } diff --git a/converter/src/main/java/gov/cms/qpp/conversion/decode/XmlDecoderEngine.java b/converter/src/main/java/gov/cms/qpp/conversion/decode/XmlDecoderEngine.java index 4931c7d15a..440f3e26bc 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/decode/XmlDecoderEngine.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/decode/XmlDecoderEngine.java @@ -15,6 +15,10 @@ public abstract class XmlDecoderEngine implements InputDecoderEngine { private static final Logger DEV_LOG = LoggerFactory.getLogger(XmlDecoderEngine.class); Namespace defaultNs; + protected XmlDecoderEngine() { + defaultNs = Namespace.NO_NAMESPACE; + } + /** * decodeXml Determines what formats of xml we accept and decode to * 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 9b557c9273..9a9eb1ba62 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 @@ -158,10 +158,9 @@ private JsonWrapper encodeMeasurementSets( measurementSetsWrapper.put(childWrapper); + } catch (EncodeException e) { + throw e; } catch (RuntimeException e) { - if (e instanceof EncodeException) { - throw e; - } // Wrap any unexpected runtime exception in EncodeException throw new EncodeException( "An unexpected error occurred for template " + childType, diff --git a/converter/src/main/java/gov/cms/qpp/conversion/encode/JsonOutputEncoder.java b/converter/src/main/java/gov/cms/qpp/conversion/encode/JsonOutputEncoder.java index 41823ca0a2..a90f179a95 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/encode/JsonOutputEncoder.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/encode/JsonOutputEncoder.java @@ -19,7 +19,7 @@ public abstract class JsonOutputEncoder implements OutputEncoder { private static final Logger DEV_LOG = LoggerFactory.getLogger(JsonOutputEncoder.class); - private List nodes; + private List nodes = Collections.emptyList(); private List errors = new ArrayList<>(); private List warnings = new ArrayList<>(); diff --git a/converter/src/main/java/gov/cms/qpp/conversion/encode/JsonWrapper.java b/converter/src/main/java/gov/cms/qpp/conversion/encode/JsonWrapper.java index 1f546eb789..82ce2e232c 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/encode/JsonWrapper.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/encode/JsonWrapper.java @@ -15,7 +15,6 @@ import gov.cms.qpp.conversion.InputStreamSupplierSource; import gov.cms.qpp.conversion.Source; import gov.cms.qpp.conversion.model.Node; -import gov.cms.qpp.conversion.util.CloneHelper; import gov.cms.qpp.conversion.util.FormatHelper; import java.io.ByteArrayInputStream; @@ -92,7 +91,7 @@ public void metadata(JsonWrapper value, JsonGenerator gen) throws IOException { try { gen.writeObjectField(entry.getKey(), entry); } catch (IOException e) { - throw new RuntimeException(e); + throw new EncodeException("Issue writing JSON metadata.", e); } }); gen.writeEndObject(); @@ -114,7 +113,7 @@ public void metadata(JsonWrapper value, JsonGenerator gen) throws IOException { try { gen.writeObject(entry); } catch (IOException e) { - throw new RuntimeException(e); + throw new EncodeException("Issue writing JSON metadata.", e); } }); gen.writeEndArray(); @@ -241,7 +240,12 @@ public JsonWrapper(Kind kind) { this.kind = kind; if (kind == Kind.VALUE) { - throw new UnsupportedOperationException("To use kind.VALUE, use the constructor JsonWrapper(String)"); + type = Type.UNKNOWN; + value = null; + childrenMap = null; + childrenList = null; + metadata = null; + return; } value = null; @@ -307,19 +311,48 @@ private JsonWrapper(JsonWrapper wrapper, boolean withMetadata) { type = wrapper.type; value = wrapper.value; - childrenMap = CloneHelper.deepClone(wrapper.childrenMap); - childrenList = CloneHelper.deepClone(wrapper.childrenList); + childrenMap = copyChildrenMap(wrapper.childrenMap, withMetadata); + childrenList = copyChildrenList(wrapper.childrenList, withMetadata); if (this.kind == Kind.METADATA) { metadata = null; - } else if (withMetadata) { - metadata = CloneHelper.deepClone(wrapper.metadata); + } else if (withMetadata && wrapper.metadata != null) { + metadata = new JsonWrapper(wrapper.metadata, true); } else { // instance allows for new metadata to be added metadata = new JsonWrapper(Kind.METADATA); } } + private static Map copyChildrenMap( + Map source, + boolean withMetadata + ) { + if (source == null) { + return null; + } + Map copy = new LinkedHashMap<>(source.size()); + source.forEach((key, value) -> copy.put( + key, + value == null ? null : new JsonWrapper(value, withMetadata) + )); + return copy; + } + + private static List copyChildrenList( + List source, + boolean withMetadata + ) { + if (source == null) { + return null; + } + List copy = new LinkedList<>(); + for (JsonWrapper value : source) { + copy.add(value == null ? null : new JsonWrapper(value, withMetadata)); + } + return copy; + } + /** * Used for casting to a type on value get actions. * @@ -958,7 +991,6 @@ public Stream stream() { * * @return JSON */ - @SuppressFBWarnings("EI_EXPOSE_REP") // toObject() returns internal List or Map @Override public String toString() { try { @@ -974,7 +1006,6 @@ public String toString() { * * @return JSON with metadata */ - @SuppressFBWarnings("EI_EXPOSE_REP") // writeValueAsString may expose internal structures public String toStringWithMetadata() { try { return withMetadataWriter.writeValueAsString(this); @@ -1197,7 +1228,6 @@ public JsonWrapper get(JsonPath jsonPath) { * @param name key for value * @return T retrieved keyed value */ - @SuppressFBWarnings("EI_EXPOSE_REP") public JsonWrapper get(String name) { return childrenMap.get(name); } @@ -1208,7 +1238,6 @@ public JsonWrapper get(String name) { * @param index integer element number starting with zero * @return the wrapper at given index or null */ - @SuppressFBWarnings("EI_EXPOSE_REP") public JsonWrapper get(int index) { if (index >= 0 && index < childrenList.size()) { return childrenList.get(index); diff --git a/converter/src/main/java/gov/cms/qpp/conversion/model/Node.java b/converter/src/main/java/gov/cms/qpp/conversion/model/Node.java index 58f2b330a0..747f1d2b82 100755 --- a/converter/src/main/java/gov/cms/qpp/conversion/model/Node.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/model/Node.java @@ -103,9 +103,9 @@ public String getValueOrDefault(String name, String defaultValue) { * @param name String key for the value * @return mapped duplicates of target value */ - @SuppressFBWarnings("EI_EXPOSE_REP") public List getDuplicateValues(String name) { - return duplicateData.get(name); + List values = duplicateData.get(name); + return values == null ? null : new ArrayList<>(values); } /** @@ -241,9 +241,8 @@ public boolean removeChildNode(Node childNode) { * * @return The keys the value's set on this Node. */ - @SuppressFBWarnings("EI_EXPOSE_REP") public Set getKeys() { - return data.keySet(); + return Collections.unmodifiableSet(data.keySet()); } /** diff --git a/converter/src/main/java/gov/cms/qpp/conversion/model/error/TransformException.java b/converter/src/main/java/gov/cms/qpp/conversion/model/error/TransformException.java index e910214047..f46f605b3a 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/model/error/TransformException.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/model/error/TransformException.java @@ -33,7 +33,6 @@ public ConversionReport getConversionReport() { /** * Exposing the internal AllErrors is intentional. */ - @SuppressFBWarnings("EI_EXPOSE_REP") public AllErrors getDetails() { return conversionReport.getReportDetails(); } diff --git a/converter/src/main/java/gov/cms/qpp/conversion/util/CloneHelper.java b/converter/src/main/java/gov/cms/qpp/conversion/util/CloneHelper.java index 0fcb456879..11216ef859 100644 --- a/converter/src/main/java/gov/cms/qpp/conversion/util/CloneHelper.java +++ b/converter/src/main/java/gov/cms/qpp/conversion/util/CloneHelper.java @@ -40,7 +40,7 @@ public static T deepClone(final T in) { throw new UncheckedIOException(ex); } catch(ClassNotFoundException ex) { DEV_LOG.error("Error cloning object - " + ex.getMessage(), ex); - throw new RuntimeException(ex); + throw new IllegalStateException("Error cloning object", ex); } return copy; } diff --git a/converter/src/test/java/gov/cms/qpp/conversion/encode/JsonWrapperTest.java b/converter/src/test/java/gov/cms/qpp/conversion/encode/JsonWrapperTest.java index 9ab24dc898..f698faf0ef 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/encode/JsonWrapperTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/encode/JsonWrapperTest.java @@ -1173,12 +1173,14 @@ void metadataList_throwsIOE() throws Exception { Mockito.doThrow(IOException.class).when(gen).writeObject(item1); - assertThrows(RuntimeException.class, () -> {Type.LIST.metadata(value, gen);}); + assertThrows(EncodeException.class, () -> {Type.LIST.metadata(value, gen);}); } @Test - void Constructor_throwsUnsupported() throws Exception { - assertThrows(UnsupportedOperationException.class, () -> {new JsonWrapper(Kind.VALUE);}); + void constructor_allowsValueKind() { + JsonWrapper wrapper = new JsonWrapper(Kind.VALUE); + assertThat(wrapper.getKind()).isEqualTo(Kind.VALUE); + assertThat(wrapper.isValue()).isTrue(); } @Test diff --git a/rest-api/src/main/java/gov/cms/qpp/conversion/api/controllers/HealthCheckController.java b/rest-api/src/main/java/gov/cms/qpp/conversion/api/controllers/HealthCheckController.java index 15e1e31ebd..109d1482f7 100644 --- a/rest-api/src/main/java/gov/cms/qpp/conversion/api/controllers/HealthCheckController.java +++ b/rest-api/src/main/java/gov/cms/qpp/conversion/api/controllers/HealthCheckController.java @@ -41,7 +41,7 @@ public HealthCheckController(VersionService version) { healthCheck.setValidationUrl(System.getenv("VALIDATION_URL")); healthCheck.setPcfClose(System.getenv("CPC_END_DATE") + " EST"); healthCheck.setValidationFile(System.getenv("CPC_PLUS_VALIDATION_FILE")); - healthCheck.setJavaVersion(System.getenv("JAVA_VERSION")); + healthCheck.setJavaVersion(System.getProperty("java.version")); healthCheck.setStatus(HttpStatus.OK); return healthCheck; diff --git a/rest-api/src/main/java/gov/cms/qpp/conversion/api/helper/MetadataHelper.java b/rest-api/src/main/java/gov/cms/qpp/conversion/api/helper/MetadataHelper.java index 2651b643e1..e1e3bc0c94 100644 --- a/rest-api/src/main/java/gov/cms/qpp/conversion/api/helper/MetadataHelper.java +++ b/rest-api/src/main/java/gov/cms/qpp/conversion/api/helper/MetadataHelper.java @@ -130,7 +130,6 @@ private static Node findPossibleChildNode(Node node, String key, TemplateId... p /** * Potential states of conversion outcomes. */ - @SuppressFBWarnings("MS_EXPOSE_REP") public enum Outcome { SUCCESS(true, true, true), CONVERSION_ERROR(false, false, false), From a886310ee070c4d338bfb4b94983fb72ce9aa32c Mon Sep 17 00:00:00 2001 From: David Berry Date: Wed, 11 Mar 2026 12:11:19 -0400 Subject: [PATCH 3/9] feat: QPPA-11346 Java 21 update review complete --- converter/pom.xml | 6 --- .../decode/IaSectionDecoderTest.java | 10 ++--- pom.xml | 45 +++++++++++++++++-- rest-api/pom.xml | 23 +++------- .../src/main/resources/application.properties | 4 +- 5 files changed, 55 insertions(+), 33 deletions(-) diff --git a/converter/pom.xml b/converter/pom.xml index a4b53f0a9d..66a616a28b 100644 --- a/converter/pom.xml +++ b/converter/pom.xml @@ -182,12 +182,6 @@ 2.12.2 test - - gov.cms.qpp.conversion - commons - 2026.02.27.01-RELEASE - compile - \ No newline at end of file diff --git a/converter/src/test/java/gov/cms/qpp/conversion/decode/IaSectionDecoderTest.java b/converter/src/test/java/gov/cms/qpp/conversion/decode/IaSectionDecoderTest.java index 0f6e7ace56..7e4835cc3c 100644 --- a/converter/src/test/java/gov/cms/qpp/conversion/decode/IaSectionDecoderTest.java +++ b/converter/src/test/java/gov/cms/qpp/conversion/decode/IaSectionDecoderTest.java @@ -34,13 +34,13 @@ void decodeAciSectionAsNode() throws XmlException { @Test void testDecodeIaSectionIgnoresGarbage() throws XmlException { - xmlFragment = xmlFragment.replaceAll("", """ - - Some extra stuff\ + + Some extra stuff Unexpected stuff appears here - - """); Node root = executeDecoderWithoutDefaults(); Node iaSectionNode = root.findFirstNode(TemplateId.IA_SECTION_V3); diff --git a/pom.xml b/pom.xml index 2a55326954..181a0392a9 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,8 @@ 21 1.12.787 - 5.8.1 + 5.11.4 + 1.11.4 0.10.7 0.90 @@ -320,7 +321,7 @@ org.junit.platform junit-platform-launcher - 1.5.2 + ${junit.platform.version} @@ -350,7 +351,7 @@ nl.jqno.equalsverifier equalsverifier - 3.6.1 + 4.4.1 @@ -510,7 +511,7 @@ org.springframework.security spring-security-web - 6.3.8 + 6.4.12 @@ -525,6 +526,12 @@ 2.18.6 + + jakarta.activation + jakarta.activation-api + 2.1.4 + + org.apache.tomcat.embed tomcat-embed-core @@ -601,6 +608,36 @@ 3.0.1 + + com.google.code.findbugs + jsr305 + 3.0.2 + + + + commons-logging + commons-logging + 1.2 + + + + org.hamcrest + hamcrest-core + 2.2 + + + + net.bytebuddy + byte-buddy + 1.15.11 + + + + net.bytebuddy + byte-buddy-agent + 1.15.11 + + commons-cli commons-cli diff --git a/rest-api/pom.xml b/rest-api/pom.xml index 5a0ce2e755..4e830110ce 100644 --- a/rest-api/pom.xml +++ b/rest-api/pom.xml @@ -34,10 +34,9 @@ 6.2.12 10.1.52 - - 5.10.3 - 1.10.3 + 5.11.4 + 1.11.4 5.5.2 4.0.28 2.2 @@ -45,7 +44,7 @@ 6.1.0 - 6.4.10 + 6.4.12 @@ -109,14 +108,14 @@ org.apache.maven.plugins maven-enforcer-plugin 3.5.0 + + + true + enforce-dep-convergence enforce - - - true - @@ -176,14 +175,6 @@ - - org.springframework - spring-framework-bom - 6.2.11 - pom - import - - org.springframework.security spring-security-bom diff --git a/rest-api/src/main/resources/application.properties b/rest-api/src/main/resources/application.properties index 535b366b18..52d3fee68b 100644 --- a/rest-api/src/main/resources/application.properties +++ b/rest-api/src/main/resources/application.properties @@ -4,8 +4,8 @@ spring.servlet.multipart.max-request-size=-1 sun.io.useCanonCaches=false security.user.password=not_used logging.level.gov.cms.qpp.conversion.api.config.CustomRequestLoggingFilter=TRACE -server.port=8443 -server.ssl.key-store-type=PKCS12 +# server.port=8443 +# server.ssl.key-store-type=PKCS12 #logging.level.org.springframework.security=DEBUG #org.springframework.security.config.annotation.web.builders.WebSecurity.debugEnabled=true logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n From c5d9b105d4eb2404fd4961af5f027fc684be13c3 Mon Sep 17 00:00:00 2001 From: John Manack Date: Wed, 25 Mar 2026 10:43:37 -0400 Subject: [PATCH 4/9] feat: QPPA-11346 minor updates for java 17 -> java 21 migration --- commons/src/main/resources/measures-data.json | 482 +++++++++++++++++- pom.xml | 2 +- .../conversion/api/config/SecurityConfig.java | 4 +- 3 files changed, 480 insertions(+), 8 deletions(-) diff --git a/commons/src/main/resources/measures-data.json b/commons/src/main/resources/measures-data.json index c49ddd8e02..32e57765de 100644 --- a/commons/src/main/resources/measures-data.json +++ b/commons/src/main/resources/measures-data.json @@ -4544,6 +4544,7 @@ "isHighPriority": true, "primarySteward": "National Committee for Quality Assurance", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -5136,6 +5137,7 @@ "isHighPriority": true, "primarySteward": "National Committee for Quality Assurance", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -5184,6 +5186,7 @@ "isHighPriority": false, "primarySteward": "American Heart Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -5245,6 +5248,7 @@ "isHighPriority": false, "primarySteward": "American Heart Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -5293,6 +5297,7 @@ "isHighPriority": false, "primarySteward": "American Heart Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -5363,6 +5368,7 @@ "isHighPriority": false, "primarySteward": "American Heart Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -5427,6 +5433,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -5496,6 +5503,7 @@ "isHighPriority": false, "primarySteward": "American Academy of Ophthalmology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -5552,6 +5560,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -5608,6 +5617,7 @@ "isHighPriority": true, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -13064,6 +13074,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -13558,6 +13569,7 @@ "isHighPriority": true, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -14102,6 +14114,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -14152,6 +14165,7 @@ "isHighPriority": true, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -14203,6 +14217,7 @@ "isHighPriority": false, "primarySteward": "American Thoracic Society", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -14258,6 +14273,7 @@ "isHighPriority": true, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -14326,6 +14342,7 @@ "isHighPriority": true, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -14393,6 +14410,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -14453,6 +14471,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -14740,6 +14759,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -14781,6 +14801,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -15071,6 +15092,7 @@ "isHighPriority": true, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -15121,6 +15143,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -15182,6 +15205,7 @@ "isHighPriority": false, "primarySteward": "American Heart Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -15228,6 +15252,7 @@ "isHighPriority": false, "primarySteward": "American Podiatric Medical Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -15276,6 +15301,7 @@ "isHighPriority": false, "primarySteward": "American Podiatric Medical Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -15321,6 +15347,7 @@ "isHighPriority": false, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -16426,6 +16453,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -16525,6 +16553,7 @@ "isHighPriority": false, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -17011,6 +17040,7 @@ "isHighPriority": false, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -17069,6 +17099,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -17485,6 +17516,7 @@ "isHighPriority": true, "primarySteward": "American Society of Clinical Oncology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -17553,6 +17585,7 @@ "isHighPriority": true, "primarySteward": "American Society of Clinical Oncology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -17598,6 +17631,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -20455,6 +20489,7 @@ "isHighPriority": true, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -20511,6 +20546,7 @@ "isHighPriority": true, "primarySteward": "Society of Thoracic Surgeons", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -20555,6 +20591,7 @@ "isHighPriority": true, "primarySteward": "Society of Thoracic Surgeons", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -20599,6 +20636,7 @@ "isHighPriority": true, "primarySteward": "Society of Thoracic Surgeons", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -20643,6 +20681,7 @@ "isHighPriority": false, "primarySteward": "American College of Rheumatology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -20692,6 +20731,7 @@ "isHighPriority": false, "primarySteward": "American College of Rheumatology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -20736,6 +20776,7 @@ "isHighPriority": false, "primarySteward": "American College of Rheumatology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -20781,6 +20822,7 @@ "isHighPriority": false, "primarySteward": "American College of Rheumatology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -20826,6 +20868,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -22406,6 +22449,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -22457,6 +22501,7 @@ "isHighPriority": true, "primarySteward": "American Gastroenterological Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -22501,6 +22546,7 @@ "isHighPriority": false, "primarySteward": "American Heart Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -22548,6 +22594,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -22606,6 +22653,7 @@ "isHighPriority": false, "primarySteward": "Health Resources and Services Administration", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -22663,6 +22711,7 @@ "isHighPriority": true, "primarySteward": "Focus on Therapeutic Outcomes, Inc.", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -22709,6 +22758,7 @@ "isHighPriority": true, "primarySteward": "Focus on Therapeutic Outcomes, Inc.", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -22755,6 +22805,7 @@ "isHighPriority": true, "primarySteward": "Focus on Therapeutic Outcomes, Inc.", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -22802,6 +22853,7 @@ "isHighPriority": true, "primarySteward": "Focus on Therapeutic Outcomes, Inc.", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -22848,6 +22900,7 @@ "isHighPriority": true, "primarySteward": "Focus on Therapeutic Outcomes, Inc.", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -22894,6 +22947,7 @@ "isHighPriority": true, "primarySteward": "Focus on Therapeutic Outcomes, Inc.", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -22942,6 +22996,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -24016,6 +24071,7 @@ "isHighPriority": true, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -24372,6 +24428,7 @@ "isHighPriority": true, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -24423,6 +24480,7 @@ "isHighPriority": true, "primarySteward": "National Committee for Quality Assurance", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -24516,6 +24574,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -24605,6 +24664,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -24661,6 +24721,7 @@ "isHighPriority": true, "primarySteward": "American Heart Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -24708,6 +24769,7 @@ "isHighPriority": false, "primarySteward": "College of American Pathologists", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -24825,6 +24887,7 @@ "isHighPriority": false, "primarySteward": "College of American Pathologists", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -24941,6 +25004,7 @@ "isHighPriority": true, "primarySteward": "Society for Vascular Surgery", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -24984,6 +25048,7 @@ "isHighPriority": true, "primarySteward": "Audiology Quality Consortium", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25216,6 +25281,7 @@ "isHighPriority": false, "primarySteward": "American Society of Breast Surgeons", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25260,6 +25326,7 @@ "isHighPriority": false, "primarySteward": "American Academy of Neurology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25304,6 +25371,7 @@ "isHighPriority": false, "primarySteward": "American Gastroenterological Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25348,6 +25416,7 @@ "isHighPriority": false, "primarySteward": "American Academy of Sleep Medicine", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25396,6 +25465,7 @@ "isHighPriority": false, "primarySteward": "American Academy of Sleep Medicine", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25444,6 +25514,7 @@ "isHighPriority": false, "primarySteward": "American Academy of Neurology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25503,6 +25574,7 @@ "isHighPriority": false, "primarySteward": "American Academy of Neurology/American Psychiatric Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25551,6 +25623,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Neurology/American Psychiatric Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25600,6 +25673,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Neurology/American Psychiatric Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25649,6 +25723,7 @@ "isHighPriority": false, "primarySteward": "American Academy of Neurology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25693,6 +25768,7 @@ "isHighPriority": false, "primarySteward": "American Academy of Neurology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25739,6 +25815,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Neurology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25783,6 +25860,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25827,6 +25905,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25873,6 +25952,7 @@ "isHighPriority": true, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -25955,6 +26035,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -26013,6 +26094,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -26075,6 +26157,7 @@ "isHighPriority": false, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27155,6 +27238,7 @@ "isHighPriority": true, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27218,6 +27302,7 @@ "isHighPriority": true, "primarySteward": "American Gastroenterological Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27350,6 +27435,7 @@ "isHighPriority": true, "primarySteward": "Agency for Healthcare Research & Quality", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27400,6 +27486,7 @@ "isHighPriority": true, "primarySteward": "American College of Cardiology Foundation", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27443,6 +27530,7 @@ "isHighPriority": false, "primarySteward": "American Heart Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27491,6 +27579,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Otolaryngology - Head and Neck Surgery Foundation", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27541,6 +27630,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Otolaryngology - Head and Neck Surgery Foundation", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27590,6 +27680,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27635,6 +27726,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27681,6 +27773,7 @@ "isHighPriority": true, "primarySteward": "Health Resources and Services Administration", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27741,6 +27834,7 @@ "isHighPriority": true, "primarySteward": "Health Resources and Services Administration", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27801,6 +27895,7 @@ "isHighPriority": true, "primarySteward": "Society for Vascular Surgery", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27850,6 +27945,7 @@ "isHighPriority": true, "primarySteward": "American Association of Hip and Knee Surgeons", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27894,6 +27990,7 @@ "isHighPriority": true, "primarySteward": "American Association of Hip and Knee Surgeons", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27938,6 +28035,7 @@ "isHighPriority": true, "primarySteward": "American College of Surgeons", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -27982,6 +28080,7 @@ "isHighPriority": true, "primarySteward": "American College of Surgeons", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28029,6 +28128,7 @@ "isHighPriority": true, "primarySteward": "American College of Surgeons", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28074,6 +28174,7 @@ "isHighPriority": true, "primarySteward": "American College of Surgeons", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28122,6 +28223,7 @@ "isHighPriority": true, "primarySteward": "American College of Surgeons", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28174,6 +28276,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28219,6 +28322,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28266,6 +28370,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28335,6 +28440,7 @@ "isHighPriority": true, "primarySteward": "Minnesota Community Measurement", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28407,6 +28513,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28487,6 +28594,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28543,6 +28651,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28600,6 +28709,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28655,6 +28765,7 @@ "isHighPriority": false, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28715,6 +28826,7 @@ "isHighPriority": true, "primarySteward": "Mathematica", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28771,6 +28883,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28818,6 +28931,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28862,6 +28976,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28906,6 +29021,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Neurology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28951,6 +29067,7 @@ "isHighPriority": false, "primarySteward": "American Gastroenterological Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -28997,11 +29114,14 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], - "isClinicalGuidelineChanged": false, - "clinicalGuidelineChanged": [], + "isClinicalGuidelineChanged": true, + "clinicalGuidelineChanged": [ + "registry" + ], "companionMeasureId": [], "allowedPrograms": [ "mips", @@ -29042,6 +29162,7 @@ "isHighPriority": true, "primarySteward": "American College of Cardiology Foundation", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -29108,6 +29229,7 @@ "isHighPriority": true, "primarySteward": "American College of Cardiology Foundation", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -29153,6 +29275,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -29216,6 +29339,7 @@ "isHighPriority": true, "primarySteward": "College of American Pathologists", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -29383,6 +29507,7 @@ "isHighPriority": true, "primarySteward": "College of American Pathologists", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -29505,6 +29630,7 @@ "isHighPriority": true, "primarySteward": "College of American Pathologists", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -29633,6 +29759,7 @@ "isHighPriority": true, "primarySteward": "Minnesota Community Measurement", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -29713,6 +29840,7 @@ "isHighPriority": false, "primarySteward": "American Gastroenterological Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -29771,6 +29899,7 @@ "isHighPriority": false, "primarySteward": "American Gastroenterological Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -29818,6 +29947,7 @@ "isHighPriority": true, "primarySteward": "American Society of Anesthesiologists", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -29862,6 +29992,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -30228,6 +30359,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -30627,6 +30759,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Dermatology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -30671,6 +30804,7 @@ "isHighPriority": true, "primarySteward": "Society of Interventional Radiology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -30716,6 +30850,7 @@ "isHighPriority": true, "primarySteward": "American College of Emergency Physicians", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -30760,6 +30895,7 @@ "isHighPriority": true, "primarySteward": "American College of Emergency Physicians", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -30804,6 +30940,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -38134,6 +38271,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Neurology", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -38178,6 +38316,7 @@ "isHighPriority": true, "primarySteward": "Society of Interventional Radiology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -38222,6 +38361,7 @@ "isHighPriority": false, "primarySteward": "Society of Interventional Radiology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -38265,6 +38405,7 @@ "isHighPriority": true, "primarySteward": "American Urogynecologic Society", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -38644,6 +38785,7 @@ "isHighPriority": true, "primarySteward": "American Society of Anesthesiologists", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -38690,6 +38832,7 @@ "isHighPriority": true, "primarySteward": "American Society of Anesthesiologists", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -38737,6 +38880,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -38813,6 +38957,7 @@ "isHighPriority": true, "primarySteward": "American Urogynecologic Society", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -38872,6 +39017,7 @@ "isHighPriority": false, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -38965,6 +39111,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Dermatology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39012,6 +39159,7 @@ "isHighPriority": true, "primarySteward": "Wisconsin Collaborative for Healthcare Quality", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39060,6 +39208,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39105,6 +39254,7 @@ "isHighPriority": true, "primarySteward": "Society of Thoracic Surgeons", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39149,6 +39299,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39193,6 +39344,7 @@ "isHighPriority": true, "primarySteward": "American Society of Clinical Oncology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39237,6 +39389,7 @@ "isHighPriority": false, "primarySteward": "American Society of Clinical Oncology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39281,6 +39434,7 @@ "isHighPriority": true, "primarySteward": "American Society of Clinical Oncology", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39326,6 +39480,7 @@ "isHighPriority": true, "primarySteward": "American Society of Clinical Oncology", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39372,6 +39527,7 @@ "isHighPriority": true, "primarySteward": "Minnesota Community Measurement", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39428,6 +39584,7 @@ "isHighPriority": true, "primarySteward": "Minnesota Community Measurement", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39484,6 +39641,7 @@ "isHighPriority": false, "primarySteward": "Oregon Urology Institute", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39542,6 +39700,7 @@ "isHighPriority": true, "primarySteward": "American Society of Anesthesiologists", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39588,6 +39747,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Otolaryngology - Head and Neck Surgery Foundation", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39634,6 +39794,7 @@ "isHighPriority": true, "primarySteward": "Society of Interventional Radiology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39677,6 +39838,7 @@ "isHighPriority": true, "primarySteward": "University of Southern California", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39724,6 +39886,7 @@ "isHighPriority": true, "primarySteward": "Minnesota Community Measurement", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39769,6 +39932,7 @@ "isHighPriority": true, "primarySteward": "Minnesota Community Measurement", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39825,6 +39989,7 @@ "isHighPriority": false, "primarySteward": "Centers for Disease Control and Prevention", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39889,6 +40054,7 @@ "isHighPriority": true, "primarySteward": "Large Urology Group Practice Association and Oregon Urology Institute", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39947,6 +40113,7 @@ "isHighPriority": true, "primarySteward": "American Society of Anesthesiologists", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -39993,6 +40160,7 @@ "isHighPriority": true, "primarySteward": "Focus on Therapeutic Outcomes, Inc.", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40039,6 +40207,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": true, + "dataDisplayFormat": "decimal", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40101,6 +40270,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": true, + "dataDisplayFormat": "decimal", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40144,6 +40314,7 @@ "isHighPriority": true, "primarySteward": "Oregon Urology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40200,6 +40371,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40244,6 +40416,7 @@ "isHighPriority": true, "primarySteward": "The American Board of Family Medicine", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40289,6 +40462,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40350,6 +40524,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Dermatology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40394,6 +40569,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Dermatology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40438,6 +40614,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40542,6 +40719,7 @@ "isHighPriority": false, "primarySteward": "National Kidney Foundation", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40606,6 +40784,7 @@ "isHighPriority": false, "primarySteward": "Renal Physicians Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40651,6 +40830,7 @@ "isHighPriority": false, "primarySteward": "Society for Immunotherapy of Cancer (SITC)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40695,6 +40875,7 @@ "isHighPriority": true, "primarySteward": "College of American Pathologists", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": true, "icdImpacted": [ @@ -40740,6 +40921,7 @@ "isHighPriority": true, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40780,6 +40962,7 @@ "isHighPriority": false, "primarySteward": "National Committee for Quality Assurance", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40861,11 +41044,14 @@ "isHighPriority": true, "primarySteward": "Alara Imaging, Inc. in collaboration with the University of California, San Francisco (UCSF)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], - "isClinicalGuidelineChanged": false, - "clinicalGuidelineChanged": [], + "isClinicalGuidelineChanged": true, + "clinicalGuidelineChanged": [ + "electronicHealthRecord" + ], "companionMeasureId": [], "allowedPrograms": [ "mips" @@ -40916,6 +41102,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Hospice and Palliative Medicine (AAHPM)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -40986,6 +41173,7 @@ "isHighPriority": false, "primarySteward": "University of California, Irvine", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41032,6 +41220,7 @@ "isHighPriority": false, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41110,6 +41299,7 @@ "isHighPriority": true, "primarySteward": "OCHIN", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41192,6 +41382,7 @@ "isHighPriority": false, "primarySteward": "American Society of Retina Specialists", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41236,6 +41427,7 @@ "isHighPriority": false, "primarySteward": "American Society of Retina Specialists", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41280,6 +41472,7 @@ "isHighPriority": false, "primarySteward": "American Society of Retina Specialists", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41324,6 +41517,7 @@ "isHighPriority": true, "primarySteward": "American Psychiatric Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41373,6 +41567,7 @@ "isHighPriority": true, "primarySteward": "Insignia Health, LLC, a wholly owned subsidiary of Phreesia", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41457,6 +41652,7 @@ "isHighPriority": true, "primarySteward": "American Psychiatric Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41517,6 +41713,7 @@ "isHighPriority": true, "primarySteward": "American Psychiatric Association", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41565,6 +41762,7 @@ "isHighPriority": true, "primarySteward": "Society for Immunotherapy of Cancer (SITC)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41609,6 +41807,7 @@ "isHighPriority": false, "primarySteward": "American Society of Clinical Oncology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41653,6 +41852,7 @@ "isHighPriority": false, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41712,6 +41912,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Dermatology", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41766,6 +41967,7 @@ "isHighPriority": false, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41811,6 +42013,7 @@ "isHighPriority": false, "primarySteward": "Centers for Medicare & Medicaid Services", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -41865,6 +42068,7 @@ "isHighPriority": true, "primarySteward": "AAD’s DataDerm™", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -41903,6 +42107,7 @@ "isHighPriority": true, "primarySteward": "AAD’s DataDerm™", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -41941,6 +42146,7 @@ "isHighPriority": true, "primarySteward": "AAD’s DataDerm™", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -41979,6 +42185,7 @@ "isHighPriority": false, "primarySteward": "AAD’s DataDerm™", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -42020,6 +42227,7 @@ "isHighPriority": true, "primarySteward": "AAD’s DataDerm™", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -42076,6 +42284,7 @@ "isHighPriority": true, "primarySteward": "AAD’s DataDerm™", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -42132,6 +42341,7 @@ "isHighPriority": true, "primarySteward": "AAD’s DataDerm™", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -42187,6 +42397,7 @@ "isHighPriority": true, "primarySteward": "AAD’s DataDerm™", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -42227,6 +42438,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Otolaryngology – Head and Neck Surgery Foundation (AAO-HNSF) Reg-entSM Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -42264,6 +42476,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Otolaryngology – Head and Neck Surgery Foundation (AAO-HNSF) Reg-entSM Registry", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -42301,6 +42514,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Otolaryngology – Head and Neck Surgery Foundation (AAO-HNSF) Reg-entSM Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -42338,6 +42552,7 @@ "isHighPriority": false, "primarySteward": "American Academy of Otolaryngology – Head and Neck Surgery Foundation (AAO-HNSF) Reg-entSM Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -42376,6 +42591,7 @@ "isHighPriority": false, "primarySteward": "American Academy of Otolaryngology – Head and Neck Surgery Foundation (AAO-HNSF) Reg-entSM Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -42414,6 +42630,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Otolaryngology – Head and Neck Surgery Foundation (AAO-HNSF) Reg-entSM Registry", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -42451,6 +42668,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Otolaryngology – Head and Neck Surgery Foundation (AAO-HNSF) Reg-entSM Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -42488,6 +42706,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Otolaryngology – Head and Neck Surgery Foundation (AAO-HNSF) Reg-entSM Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -42528,6 +42747,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Otolaryngology – Head and Neck Surgery Foundation (AAO-HNSF) Reg-entSM Registry", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -42568,6 +42788,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Otolaryngology – Head and Neck Surgery Foundation (AAO-HNSF) Reg-entSM Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -42608,6 +42829,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Otolaryngology – Head and Neck Surgery Foundation (AAO-HNSF) Reg-entSM Registry", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -42648,6 +42870,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Otolaryngology – Head and Neck Surgery Foundation (AAO-HNSF) Reg-entSM Registry", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -42688,6 +42911,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Otolaryngology – Head and Neck Surgery Foundation (AAO-HNSF) Reg-entSM Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -42728,6 +42952,7 @@ "isHighPriority": false, "primarySteward": "ABFM PRIME", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -42768,6 +42993,7 @@ "isHighPriority": true, "primarySteward": "ABFM PRIME", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -42808,6 +43034,7 @@ "isHighPriority": true, "primarySteward": "ABG QCDR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -42848,6 +43075,7 @@ "isHighPriority": true, "primarySteward": "ABG QCDR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -42894,6 +43122,7 @@ "isHighPriority": true, "primarySteward": "ABG QCDR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -42934,6 +43163,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -42972,6 +43202,7 @@ "isHighPriority": false, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -43010,6 +43241,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -43048,6 +43280,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -43085,6 +43318,7 @@ "isHighPriority": false, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -43123,6 +43357,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "allowedPrograms": [ @@ -43162,6 +43397,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "allowedPrograms": [ @@ -43200,6 +43436,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -43240,6 +43477,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -43277,6 +43515,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -43317,6 +43556,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -43354,6 +43594,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -43393,6 +43634,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -43432,6 +43674,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -43469,6 +43712,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -43507,6 +43751,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -43547,6 +43792,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -43589,6 +43835,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -43629,6 +43876,7 @@ "isHighPriority": false, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -43669,6 +43917,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -43711,6 +43960,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -43753,6 +44003,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -43793,6 +44044,7 @@ "isHighPriority": false, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -43833,6 +44085,7 @@ "isHighPriority": true, "primarySteward": "ACEP's Clinical Emergency Data Registry (CEDR)", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -43873,6 +44126,7 @@ "isHighPriority": true, "primarySteward": "Emergency and Acute Care Clinical Registry (EACCR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -43913,6 +44167,7 @@ "isHighPriority": true, "primarySteward": "RISE (Rheumatology Informatics System for Effectiveness)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -43950,6 +44205,7 @@ "isHighPriority": false, "primarySteward": "RISE (Rheumatology Informatics System for Effectiveness)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -43989,6 +44245,7 @@ "isHighPriority": true, "primarySteward": "RISE (Rheumatology Informatics System for Effectiveness)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -44028,6 +44285,7 @@ "isHighPriority": true, "primarySteward": "RISE (Rheumatology Informatics System for Effectiveness)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -44067,6 +44325,7 @@ "isHighPriority": true, "primarySteward": "RISE (Rheumatology Informatics System for Effectiveness)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "allowedPrograms": [ @@ -44104,6 +44363,7 @@ "isHighPriority": true, "primarySteward": "RISE (Rheumatology Informatics System for Effectiveness)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -44144,6 +44404,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology National Radiology Data Registry", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -44185,6 +44446,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology National Radiology Data Registry", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -44226,6 +44488,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology National Radiology Data Registry", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -44267,6 +44530,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology National Radiology Data Registry", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -44308,6 +44572,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology National Radiology Data Registry", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -44349,6 +44614,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology National Radiology Data Registry", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -44391,6 +44657,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology National Radiology Data Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -44442,6 +44709,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology National Radiology Data Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -44483,6 +44751,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology National Radiology Data Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -44522,6 +44791,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology National Radiology Data Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -44563,6 +44833,7 @@ "isHighPriority": true, "primarySteward": "American College of Radiology National Radiology Data Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -44604,6 +44875,7 @@ "isHighPriority": false, "primarySteward": "AAOS Orthopaedic Quality Resource Center", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -44656,6 +44928,7 @@ "isHighPriority": true, "primarySteward": "AAOS Orthopaedic Quality Resource Center", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "icdImpacted": [], @@ -44708,6 +44981,7 @@ "isHighPriority": false, "primarySteward": "AAOS Orthopaedic Quality Resource Center", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -44750,6 +45024,7 @@ "isHighPriority": true, "primarySteward": "AAOS Orthopaedic Quality Resource Center", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -44804,6 +45079,7 @@ "isHighPriority": true, "primarySteward": "AAOS Orthopaedic Quality Resource Center", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -44860,6 +45136,7 @@ "isHighPriority": true, "primarySteward": "AAOS Orthopaedic Quality Resource Center", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -44901,6 +45178,7 @@ "isHighPriority": true, "primarySteward": "AAOS Orthopaedic Quality Resource Center", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -44951,6 +45229,7 @@ "isHighPriority": true, "primarySteward": "Anesthesia Quality Institute (AQI) National Anesthesia Clinical Outcomes Registry (NACOR)", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -44993,6 +45272,7 @@ "isHighPriority": true, "primarySteward": "Anesthesia Quality Institute (AQI) National Anesthesia Clinical Outcomes Registry (NACOR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -45045,6 +45325,7 @@ "isHighPriority": false, "primarySteward": "Anesthesia Quality Institute (AQI) National Anesthesia Clinical Outcomes Registry (NACOR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -45087,6 +45368,7 @@ "isHighPriority": true, "primarySteward": "Anesthesia Quality Institute (AQI) National Anesthesia Clinical Outcomes Registry (NACOR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -45130,6 +45412,7 @@ "isHighPriority": false, "primarySteward": "Anesthesia Quality Institute (AQI) National Anesthesia Clinical Outcomes Registry (NACOR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -45193,6 +45476,7 @@ "isHighPriority": true, "primarySteward": "Anesthesia Quality Institute (AQI) National Anesthesia Clinical Outcomes Registry (NACOR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -45235,6 +45519,7 @@ "isHighPriority": true, "primarySteward": "Anesthesia Quality Institute (AQI) National Anesthesia Clinical Outcomes Registry (NACOR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -45277,6 +45562,7 @@ "isHighPriority": true, "primarySteward": "Anesthesia Quality Institute (AQI) National Anesthesia Clinical Outcomes Registry (NACOR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -45320,6 +45606,7 @@ "isHighPriority": true, "primarySteward": "Anesthesia Quality Institute (AQI) National Anesthesia Clinical Outcomes Registry (NACOR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -45373,6 +45660,7 @@ "isHighPriority": true, "primarySteward": "Anesthesia Quality Institute (AQI) National Anesthesia Clinical Outcomes Registry (NACOR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -45425,6 +45713,7 @@ "isHighPriority": true, "primarySteward": "Anesthesia Quality Institute (AQI) National Anesthesia Clinical Outcomes Registry (NACOR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -45467,6 +45756,7 @@ "isHighPriority": true, "primarySteward": "American Urological Association Quality (AQUA) Registry", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -45505,6 +45795,7 @@ "isHighPriority": true, "primarySteward": "American Urological Association Quality (AQUA) Registry", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -45543,6 +45834,7 @@ "isHighPriority": true, "primarySteward": "American Urological Association Quality (AQUA) Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -45581,6 +45873,7 @@ "isHighPriority": false, "primarySteward": "American Urological Association Quality (AQUA) Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -45619,6 +45912,7 @@ "isHighPriority": false, "primarySteward": "American Urological Association Quality (AQUA) Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -45659,6 +45953,7 @@ "isHighPriority": false, "primarySteward": "American Urological Association Quality (AQUA) Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -45700,6 +45995,7 @@ "isHighPriority": true, "primarySteward": "A Value-Based Care Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -45754,6 +46050,7 @@ "isHighPriority": true, "primarySteward": "A Value-Based Care Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -45794,6 +46091,7 @@ "isHighPriority": false, "primarySteward": "A Value-Based Care Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -45834,6 +46132,7 @@ "isHighPriority": true, "primarySteward": "Agency for Healthcare Research & Quality", "isInverse": false, + "dataDisplayFormat": "percentage", "isIcdImpacted": false, "companionMeasureId": [], "allowedPrograms": [ @@ -45874,6 +46173,7 @@ "isHighPriority": true, "primarySteward": "Agency for Healthcare Research & Quality", "isInverse": false, + "dataDisplayFormat": "percentage", "isIcdImpacted": false, "companionMeasureId": [], "allowedPrograms": [ @@ -45914,6 +46214,7 @@ "isHighPriority": true, "primarySteward": "Agency for Healthcare Research & Quality", "isInverse": false, + "dataDisplayFormat": "percentage", "isIcdImpacted": false, "companionMeasureId": [], "allowedPrograms": [ @@ -45954,6 +46255,7 @@ "isHighPriority": true, "primarySteward": "Agency for Healthcare Research & Quality", "isInverse": false, + "dataDisplayFormat": "percentage", "isIcdImpacted": false, "companionMeasureId": [], "allowedPrograms": [ @@ -45994,6 +46296,7 @@ "isHighPriority": true, "primarySteward": "Agency for Healthcare Research & Quality", "isInverse": false, + "dataDisplayFormat": "percentage", "isIcdImpacted": false, "companionMeasureId": [], "allowedPrograms": [ @@ -46034,6 +46337,7 @@ "isHighPriority": true, "primarySteward": "Agency for Healthcare Research & Quality", "isInverse": false, + "dataDisplayFormat": "percentage", "isIcdImpacted": false, "companionMeasureId": [], "allowedPrograms": [ @@ -46074,6 +46378,7 @@ "isHighPriority": true, "primarySteward": "Agency for Healthcare Research & Quality", "isInverse": false, + "dataDisplayFormat": "percentage", "isIcdImpacted": false, "companionMeasureId": [], "allowedPrograms": [ @@ -46114,6 +46419,7 @@ "isHighPriority": true, "primarySteward": "Agency for Healthcare Research & Quality", "isInverse": false, + "dataDisplayFormat": "percentage", "isIcdImpacted": false, "companionMeasureId": [], "allowedPrograms": [ @@ -46154,6 +46460,7 @@ "isHighPriority": true, "primarySteward": "Agency for Healthcare Research & Quality", "isInverse": false, + "dataDisplayFormat": "percentage", "isIcdImpacted": false, "companionMeasureId": [], "allowedPrograms": [ @@ -46194,6 +46501,7 @@ "isHighPriority": true, "primarySteward": "Agency for Healthcare Research & Quality", "isInverse": false, + "dataDisplayFormat": "percentage", "isIcdImpacted": false, "companionMeasureId": [], "allowedPrograms": [ @@ -46234,6 +46542,7 @@ "isHighPriority": true, "primarySteward": "Pathologists Quality Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -46271,6 +46580,7 @@ "isHighPriority": true, "primarySteward": "Pathologists Quality Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -46308,6 +46618,7 @@ "isHighPriority": true, "primarySteward": "Pathologists Quality Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -46345,6 +46656,7 @@ "isHighPriority": true, "primarySteward": "Pathologists Quality Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -46382,6 +46694,7 @@ "isHighPriority": true, "primarySteward": "Pathologists Quality Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -46422,6 +46735,7 @@ "isHighPriority": true, "primarySteward": "Pathologists Quality Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -46462,6 +46776,7 @@ "isHighPriority": true, "primarySteward": "Pathologists Quality Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -46502,6 +46817,7 @@ "isHighPriority": true, "primarySteward": "Emergency and Acute Care Clinical Registry (EACCR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -46542,6 +46858,7 @@ "isHighPriority": true, "primarySteward": "Emergency and Acute Care Clinical Registry (EACCR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -46582,6 +46899,7 @@ "isHighPriority": true, "primarySteward": "Emergency and Acute Care Clinical Registry (EACCR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -46622,6 +46940,7 @@ "isHighPriority": true, "primarySteward": "E-CPR (Emergency - Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -46664,6 +46983,7 @@ "isHighPriority": true, "primarySteward": "E-CPR (Emergency - Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -46702,6 +47022,7 @@ "isHighPriority": true, "primarySteward": "E-CPR (Emergency - Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -46742,6 +47063,7 @@ "isHighPriority": false, "primarySteward": "E-CPR (Emergency - Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -46780,6 +47102,7 @@ "isHighPriority": true, "primarySteward": "E-CPR (Emergency - Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -46818,6 +47141,7 @@ "isHighPriority": true, "primarySteward": "E-CPR (Emergency - Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -46857,6 +47181,7 @@ "isHighPriority": true, "primarySteward": "E-CPR (Emergency - Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -46898,6 +47223,7 @@ "isHighPriority": true, "primarySteward": "E-CPR (Emergency - Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -46939,6 +47265,7 @@ "isHighPriority": true, "primarySteward": "E-CPR (Emergency - Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -46981,6 +47308,7 @@ "isHighPriority": true, "primarySteward": "Anesthesia Quality Registry (AQR QCDR)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -47019,6 +47347,7 @@ "isHighPriority": true, "primarySteward": "Anesthesia Quality Registry (AQR QCDR)", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "allowedPrograms": [ @@ -47059,6 +47388,7 @@ "isHighPriority": true, "primarySteward": "FOTO QCDR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "allowedPrograms": [ @@ -47096,6 +47426,7 @@ "isHighPriority": true, "primarySteward": "FOTO QCDR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "allowedPrograms": [ @@ -47133,6 +47464,7 @@ "isHighPriority": true, "primarySteward": "FOTO QCDR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "allowedPrograms": [ @@ -47171,6 +47503,7 @@ "isHighPriority": true, "primarySteward": "GIQuIC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -47240,6 +47573,7 @@ "isHighPriority": true, "primarySteward": "GIQuIC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -47295,6 +47629,7 @@ "isHighPriority": true, "primarySteward": "H-CPR (Hospitalist –Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -47334,6 +47669,7 @@ "isHighPriority": true, "primarySteward": "H-CPR (Hospitalist –Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -47372,6 +47708,7 @@ "isHighPriority": true, "primarySteward": "H-CPR (Hospitalist –Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -47414,6 +47751,7 @@ "isHighPriority": true, "primarySteward": "H-CPR (Hospitalist –Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -47457,6 +47795,7 @@ "isHighPriority": true, "primarySteward": "H-CPR (Hospitalist –Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -47500,6 +47839,7 @@ "isHighPriority": false, "primarySteward": "The PQR; H-CPR (Hospitalist –Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -47543,6 +47883,7 @@ "isHighPriority": true, "primarySteward": "H-CPR (Hospitalist –Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -47585,6 +47926,7 @@ "isHighPriority": false, "primarySteward": "H-CPR (Hospitalist –Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -47627,6 +47969,7 @@ "isHighPriority": true, "primarySteward": "H-CPR (Hospitalist –Clinical Performance Registry)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -47670,6 +48013,7 @@ "isHighPriority": true, "primarySteward": "MIPSPRO ENTERPRISE", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -47728,6 +48072,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology IRIS® Registry (Intelligent Research in Sight)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -47765,6 +48110,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology IRIS® Registry (Intelligent Research in Sight)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -47803,6 +48149,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology IRIS® Registry (Intelligent Research in Sight)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -47841,6 +48188,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology IRIS® Registry (Intelligent Research in Sight)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -47878,6 +48226,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology IRIS® Registry (Intelligent Research in Sight)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -47915,6 +48264,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology IRIS® Registry (Intelligent Research in Sight)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -47952,6 +48302,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology IRIS® Registry (Intelligent Research in Sight)", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -47989,6 +48340,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology IRIS® Registry (Intelligent Research in Sight)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -48027,6 +48379,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology IRIS® Registry (Intelligent Research in Sight)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -48064,6 +48417,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology IRIS® Registry (Intelligent Research in Sight)", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -48102,6 +48456,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology IRIS® Registry (Intelligent Research in Sight)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -48141,6 +48496,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology IRIS® Registry (Intelligent Research in Sight)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -48195,6 +48551,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology IRIS® Registry (Intelligent Research in Sight)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -48237,6 +48594,7 @@ "isHighPriority": true, "primarySteward": "American Academy of Ophthalmology IRIS® Registry (Intelligent Research in Sight)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -48287,6 +48645,7 @@ "isHighPriority": false, "primarySteward": "MBHR Mental and Behavioral Health Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -48324,6 +48683,7 @@ "isHighPriority": true, "primarySteward": "MBHR Mental and Behavioral Health Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -48362,6 +48722,7 @@ "isHighPriority": true, "primarySteward": "MBHR Mental and Behavioral Health Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -48400,6 +48761,7 @@ "isHighPriority": true, "primarySteward": "MBHR Mental and Behavioral Health Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -48437,6 +48799,7 @@ "isHighPriority": false, "primarySteward": "MBHR Mental and Behavioral Health Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -48474,6 +48837,7 @@ "isHighPriority": false, "primarySteward": "MBHR Mental and Behavioral Health Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -48511,6 +48875,7 @@ "isHighPriority": true, "primarySteward": "MBHR Mental and Behavioral Health Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -48548,6 +48913,7 @@ "isHighPriority": true, "primarySteward": "MBHR Mental and Behavioral Health Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -48585,6 +48951,7 @@ "isHighPriority": true, "primarySteward": "MBHR Mental and Behavioral Health Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -48622,6 +48989,7 @@ "isHighPriority": true, "primarySteward": "MBHR Mental and Behavioral Health Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -48662,6 +49030,7 @@ "isHighPriority": true, "primarySteward": "MBHR Mental and Behavioral Health Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -48702,6 +49071,7 @@ "isHighPriority": false, "primarySteward": "MSN Healthcare Solutions, LLC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -48741,6 +49111,7 @@ "isHighPriority": true, "primarySteward": "Registry Clearinghouse", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -48778,6 +49149,7 @@ "isHighPriority": true, "primarySteward": "Advancing Musculoskeletal (MSK) Care and Rehabilitation QCDR; MSK and Rehabilitative Care Outcomes", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "icdImpacted": [], @@ -48822,6 +49194,7 @@ "isHighPriority": true, "primarySteward": "Advancing Musculoskeletal (MSK) Care and Rehabilitation QCDR; MSK and Rehabilitative Care Outcomes", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "icdImpacted": [], @@ -48866,6 +49239,7 @@ "isHighPriority": true, "primarySteward": "Advancing Musculoskeletal (MSK) Care and Rehabilitation QCDR; MSK and Rehabilitative Care Outcomes", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "icdImpacted": [], @@ -48910,6 +49284,7 @@ "isHighPriority": true, "primarySteward": "Advancing Musculoskeletal (MSK) Care and Rehabilitation QCDR; MSK and Rehabilitative Care Outcomes", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "icdImpacted": [], @@ -48954,6 +49329,7 @@ "isHighPriority": true, "primarySteward": "Advancing Musculoskeletal (MSK) Care and Rehabilitation QCDR; MSK and Rehabilitative Care Outcomes", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "icdImpacted": [], @@ -48998,6 +49374,7 @@ "isHighPriority": true, "primarySteward": "Advancing Musculoskeletal (MSK) Care and Rehabilitation QCDR; MSK and Rehabilitative Care Outcomes", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "icdImpacted": [], @@ -49043,6 +49420,7 @@ "isHighPriority": true, "primarySteward": "Advancing Musculoskeletal (MSK) Care and Rehabilitation QCDR; MSK and Rehabilitative Care Outcomes", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "icdImpacted": [], @@ -49088,6 +49466,7 @@ "isHighPriority": true, "primarySteward": "Advancing Musculoskeletal (MSK) Care and Rehabilitation QCDR; MSK and Rehabilitative Care Outcomes", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "icdImpacted": [], @@ -49133,6 +49512,7 @@ "isHighPriority": true, "primarySteward": "Advancing Musculoskeletal (MSK) Care and Rehabilitation QCDR; MSK and Rehabilitative Care Outcomes", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "icdImpacted": [], @@ -49178,6 +49558,7 @@ "isHighPriority": true, "primarySteward": "Advancing Musculoskeletal (MSK) Care and Rehabilitation QCDR; MSK and Rehabilitative Care Outcomes", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "icdImpacted": [], @@ -49222,6 +49603,7 @@ "isHighPriority": false, "primarySteward": "MSN Healthcare Solutions, LLC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -49262,6 +49644,7 @@ "isHighPriority": true, "primarySteward": "MSN Healthcare Solutions, LLC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -49302,6 +49685,7 @@ "isHighPriority": true, "primarySteward": "American Urological Association Quality (AQUA) Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -49340,6 +49724,7 @@ "isHighPriority": true, "primarySteward": "GIQuIC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -49378,6 +49763,7 @@ "isHighPriority": true, "primarySteward": "Practice Insights by McKesson - QCDR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -49415,6 +49801,7 @@ "isHighPriority": true, "primarySteward": "Practice Insights by McKesson - QCDR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -49452,6 +49839,7 @@ "isHighPriority": true, "primarySteward": "Practice Insights by McKesson - QCDR", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -49489,6 +49877,7 @@ "isHighPriority": true, "primarySteward": "Practice Insights by McKesson - QCDR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -49526,6 +49915,7 @@ "isHighPriority": true, "primarySteward": "Practice Insights by McKesson - QCDR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -49568,6 +49958,7 @@ "isHighPriority": true, "primarySteward": "Practice Insights by McKesson - QCDR", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -49609,6 +50000,7 @@ "isHighPriority": true, "primarySteward": "Practice Insights by McKesson - QCDR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -49650,6 +50042,7 @@ "isHighPriority": true, "primarySteward": "Practice Insights by McKesson - QCDR", "isInverse": true, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -49692,6 +50085,7 @@ "isHighPriority": true, "primarySteward": "Practice Insights by McKesson - QCDR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -49732,6 +50126,7 @@ "isHighPriority": true, "primarySteward": "The PQR-ANES", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -49770,6 +50165,7 @@ "isHighPriority": true, "primarySteward": "The PQR-ANES", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -49811,6 +50207,7 @@ "isHighPriority": true, "primarySteward": "The PQR-ANES", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -49852,6 +50249,7 @@ "isHighPriority": true, "primarySteward": "MSN Healthcare Solutions, LLC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -49892,6 +50290,7 @@ "isHighPriority": true, "primarySteward": "MSN Healthcare Solutions, LLC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -49932,6 +50331,7 @@ "isHighPriority": true, "primarySteward": "MSN Healthcare Solutions, LLC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -49972,6 +50372,7 @@ "isHighPriority": false, "primarySteward": "MSN Healthcare Solutions, LLC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -50012,6 +50413,7 @@ "isHighPriority": true, "primarySteward": "MSN Healthcare Solutions QCDR II", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -50050,6 +50452,7 @@ "isHighPriority": true, "primarySteward": "MSN Healthcare Solutions, LLC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50092,6 +50495,7 @@ "isHighPriority": true, "primarySteward": "MSN Healthcare Solutions, LLC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50134,6 +50538,7 @@ "isHighPriority": true, "primarySteward": "MSN Healthcare Solutions QCDR II", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50175,6 +50580,7 @@ "isHighPriority": true, "primarySteward": "MSN Healthcare Solutions, LLC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50218,6 +50624,7 @@ "isHighPriority": true, "primarySteward": "MSN Healthcare Solutions, LLC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50259,6 +50666,7 @@ "isHighPriority": false, "primarySteward": "MSN Healthcare Solutions, LLC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50300,6 +50708,7 @@ "isHighPriority": true, "primarySteward": "MSN Healthcare Solutions QCDR II", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50340,6 +50749,7 @@ "isHighPriority": true, "primarySteward": "MSN Healthcare Solutions QCDR II", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50381,6 +50791,7 @@ "isHighPriority": true, "primarySteward": "MSN Healthcare Solutions, LLC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50421,6 +50832,7 @@ "isHighPriority": false, "primarySteward": "MSN Healthcare Solutions, LLC", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50461,6 +50873,7 @@ "isHighPriority": true, "primarySteward": "MSN Healthcare Solutions QCDR II", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50501,6 +50914,7 @@ "isHighPriority": true, "primarySteward": "MSN Healthcare Solutions QCDR II", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50541,6 +50955,7 @@ "isHighPriority": true, "primarySteward": "Renal and Vascular Outcomes Improvement Program, powered by Forward Health Group", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -50578,6 +50993,7 @@ "isHighPriority": true, "primarySteward": "Renal and Vascular Outcomes Improvement Program, powered by Forward Health Group", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -50615,6 +51031,7 @@ "isHighPriority": true, "primarySteward": "Registry Clearinghouse", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -50652,6 +51069,7 @@ "isHighPriority": true, "primarySteward": "Registry Clearinghouse", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -50689,6 +51107,7 @@ "isHighPriority": true, "primarySteward": "Registry Clearinghouse", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -50726,6 +51145,7 @@ "isHighPriority": true, "primarySteward": "Registry Clearinghouse", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50766,6 +51186,7 @@ "isHighPriority": true, "primarySteward": "Renal and Vascular Outcomes Improvement Program, powered by Forward Health Group", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -50803,6 +51224,7 @@ "isHighPriority": true, "primarySteward": "Renal and Vascular Outcomes Improvement Program, powered by Forward Health Group", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -50840,6 +51262,7 @@ "isHighPriority": false, "primarySteward": "The PQR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50882,6 +51305,7 @@ "isHighPriority": true, "primarySteward": "The PQR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50924,6 +51348,7 @@ "isHighPriority": true, "primarySteward": "The PQR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -50966,6 +51391,7 @@ "isHighPriority": true, "primarySteward": "The PQR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -51007,6 +51433,7 @@ "isHighPriority": false, "primarySteward": "The PQR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -51048,6 +51475,7 @@ "isHighPriority": false, "primarySteward": "The PQR", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -51089,6 +51517,7 @@ "isHighPriority": true, "primarySteward": "UREQA (United Rheumatology Effectiveness and Quality Analytics)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -51127,6 +51556,7 @@ "isHighPriority": true, "primarySteward": "UREQA (United Rheumatology Effectiveness and Quality Analytics)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -51165,6 +51595,7 @@ "isHighPriority": false, "primarySteward": "UREQA (United Rheumatology Effectiveness and Quality Analytics)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -51203,6 +51634,7 @@ "isHighPriority": true, "primarySteward": "UREQA (United Rheumatology Effectiveness and Quality Analytics)", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -51244,6 +51676,7 @@ "isHighPriority": false, "primarySteward": "U.S. Wound Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -51281,6 +51714,7 @@ "isHighPriority": false, "primarySteward": "U.S. Wound Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -51318,6 +51752,7 @@ "isHighPriority": true, "primarySteward": "U.S. Wound Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "allowedPrograms": [ @@ -51355,6 +51790,7 @@ "isHighPriority": true, "primarySteward": "U.S. Wound Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "icdImpacted": [], @@ -51395,6 +51831,7 @@ "isHighPriority": true, "primarySteward": "U.S. Wound Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "icdImpacted": [], @@ -51435,6 +51872,7 @@ "isHighPriority": false, "primarySteward": "U.S. Wound Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": false, "isIcdImpacted": false, "icdImpacted": [], @@ -51475,6 +51913,7 @@ "isHighPriority": true, "primarySteward": "U.S. Wound Registry", "isInverse": false, + "dataDisplayFormat": "percentage", "isRiskAdjusted": true, "isIcdImpacted": false, "icdImpacted": [], @@ -51508,6 +51947,7 @@ "firstPerformanceYear": 2022, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51535,6 +51975,7 @@ "firstPerformanceYear": 2020, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51561,6 +52002,7 @@ "firstPerformanceYear": 2019, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51586,6 +52028,7 @@ "firstPerformanceYear": 2025, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51612,6 +52055,7 @@ "firstPerformanceYear": 2020, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51638,6 +52082,7 @@ "firstPerformanceYear": 2022, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51664,6 +52109,7 @@ "firstPerformanceYear": 2022, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51690,6 +52136,7 @@ "firstPerformanceYear": 2024, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51717,6 +52164,7 @@ "firstPerformanceYear": 2024, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51743,6 +52191,7 @@ "firstPerformanceYear": 2019, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51769,6 +52218,7 @@ "firstPerformanceYear": 2025, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51795,6 +52245,7 @@ "firstPerformanceYear": 2020, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51821,6 +52272,7 @@ "firstPerformanceYear": 2020, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51846,6 +52298,7 @@ "firstPerformanceYear": 2024, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51873,6 +52326,7 @@ "firstPerformanceYear": 2019, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51899,6 +52353,7 @@ "firstPerformanceYear": 2019, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51925,6 +52380,7 @@ "firstPerformanceYear": 2019, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51951,6 +52407,7 @@ "firstPerformanceYear": 2025, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -51977,6 +52434,7 @@ "firstPerformanceYear": 2024, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52003,6 +52461,7 @@ "firstPerformanceYear": 2020, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52028,6 +52487,7 @@ "firstPerformanceYear": 2020, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52054,6 +52514,7 @@ "firstPerformanceYear": 2020, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52080,6 +52541,7 @@ "firstPerformanceYear": 2022, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52106,6 +52568,7 @@ "firstPerformanceYear": 2020, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52132,6 +52595,7 @@ "firstPerformanceYear": 2025, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52159,6 +52623,7 @@ "firstPerformanceYear": 2020, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52185,6 +52650,7 @@ "firstPerformanceYear": 2024, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52211,6 +52677,7 @@ "firstPerformanceYear": 2025, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52237,6 +52704,7 @@ "firstPerformanceYear": 2025, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52262,6 +52730,7 @@ "firstPerformanceYear": 2020, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52288,6 +52757,7 @@ "firstPerformanceYear": 2022, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52313,6 +52783,7 @@ "firstPerformanceYear": 2019, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52339,6 +52810,7 @@ "firstPerformanceYear": 2019, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52365,6 +52837,7 @@ "firstPerformanceYear": 2017, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], @@ -52398,6 +52871,7 @@ "firstPerformanceYear": 2017, "lastPerformanceYear": null, "isInverse": true, + "dataDisplayFormat": "currency", "submissionMethods": [ "administrativeClaims" ], diff --git a/pom.xml b/pom.xml index 418498fd40..75e391dbc5 100644 --- a/pom.xml +++ b/pom.xml @@ -50,7 +50,7 @@ maven-compiler-plugin 3.15.0 - true + true ${java.version} diff --git a/rest-api/src/main/java/gov/cms/qpp/conversion/api/config/SecurityConfig.java b/rest-api/src/main/java/gov/cms/qpp/conversion/api/config/SecurityConfig.java index b0d1473903..51a2cb41eb 100644 --- a/rest-api/src/main/java/gov/cms/qpp/conversion/api/config/SecurityConfig.java +++ b/rest-api/src/main/java/gov/cms/qpp/conversion/api/config/SecurityConfig.java @@ -35,9 +35,7 @@ public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.securityMatcher(PCF_WILDCARD) - .authorizeRequests() - .anyRequest().authenticated() - .and() + .authorizeHttpRequests(auth -> auth.anyRequest().authenticated()) .csrf(csrf -> csrf.disable()) .addFilterAt(new JwtAuthorizationFilter(Set.of(orgName, rtiOrgName)), BasicAuthenticationFilter.class) .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) From c4cae873787b1227c5a098388a2cf26c4183589d Mon Sep 17 00:00:00 2001 From: John Manack Date: Mon, 30 Mar 2026 10:29:24 -0400 Subject: [PATCH 5/9] chore: QPPA-0000 uncomments server port and key-store-type in applicaiton.properties --- rest-api/src/main/resources/application.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rest-api/src/main/resources/application.properties b/rest-api/src/main/resources/application.properties index 52d3fee68b..535b366b18 100644 --- a/rest-api/src/main/resources/application.properties +++ b/rest-api/src/main/resources/application.properties @@ -4,8 +4,8 @@ spring.servlet.multipart.max-request-size=-1 sun.io.useCanonCaches=false security.user.password=not_used logging.level.gov.cms.qpp.conversion.api.config.CustomRequestLoggingFilter=TRACE -# server.port=8443 -# server.ssl.key-store-type=PKCS12 +server.port=8443 +server.ssl.key-store-type=PKCS12 #logging.level.org.springframework.security=DEBUG #org.springframework.security.config.annotation.web.builders.WebSecurity.debugEnabled=true logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n From e6c83bdf6b96619748d259f6d2eec0c3641a0529 Mon Sep 17 00:00:00 2001 From: John Manack Date: Tue, 31 Mar 2026 11:42:50 -0400 Subject: [PATCH 6/9] chore: QPPA-11541 remediate security vulns --- acceptance-tests/pom.xml | 2 +- pom.xml | 2 +- rest-api/pom.xml | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/acceptance-tests/pom.xml b/acceptance-tests/pom.xml index 56b1ac8bd4..c02eaddc0b 100644 --- a/acceptance-tests/pom.xml +++ b/acceptance-tests/pom.xml @@ -30,7 +30,7 @@ org.seleniumhq.selenium selenium-java - 4.1.2 + 4.14.0 diff --git a/pom.xml b/pom.xml index 75e391dbc5..f44fe32ed5 100644 --- a/pom.xml +++ b/pom.xml @@ -511,7 +511,7 @@ org.springframework.security spring-security-web - 6.4.12 + 6.5.9 diff --git a/rest-api/pom.xml b/rest-api/pom.xml index 3176696357..6b724e11cd 100644 --- a/rest-api/pom.xml +++ b/rest-api/pom.xml @@ -32,7 +32,7 @@ 0.90 - 6.2.12 + 6.2.17 10.1.52 5.11.4 @@ -43,8 +43,8 @@ 3.9.0 6.1.0 - - 6.4.12 + + 6.5.9 @@ -196,19 +196,19 @@ org.springframework spring-webmvc - 6.2.12 + 6.2.17 org.springframework spring-beans - 6.2.12 + 6.2.17 - + org.springframework spring-framework-bom - 6.2.12 + 6.2.17 pom import From 354a5fe4885d88fa203cd1d07c19a22c4e7d4449 Mon Sep 17 00:00:00 2001 From: John Manack Date: Tue, 31 Mar 2026 12:09:09 -0400 Subject: [PATCH 7/9] chore: QPPA-11541 resolves security vuln for springframework pkgs --- pom.xml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/pom.xml b/pom.xml index f44fe32ed5..383e089aa8 100644 --- a/pom.xml +++ b/pom.xml @@ -514,6 +514,26 @@ 6.5.9 + + org.springframework + spring-webmvc + 6.2.17 + + + + org.springframework + spring-web + 6.2.17 + + + + org.springframework + spring-framework-bom + 6.2.17 + pom + import + + org.bouncycastle bcprov-jdk18on From 010ae5b18f95867e76e3f86dd5192cdc6fc6c280 Mon Sep 17 00:00:00 2001 From: John Manack Date: Tue, 31 Mar 2026 12:39:48 -0400 Subject: [PATCH 8/9] chore: QPPA-11541 updates java version in .java-version file --- .java-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.java-version b/.java-version index 98d9bcb75a..aabe6ec390 100644 --- a/.java-version +++ b/.java-version @@ -1 +1 @@ -17 +21 From d99ca9442f1a3f05d718926a40270e9c53d30af4 Mon Sep 17 00:00:00 2001 From: GitHub actions Date: Tue, 31 Mar 2026 20:06:22 +0000 Subject: [PATCH 9/9] Prepare release v2026.03.31.01 --- acceptance-tests/pom.xml | 2 +- commandline/pom.xml | 2 +- commons/pom.xml | 2 +- converter/pom.xml | 2 +- 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, 11 insertions(+), 11 deletions(-) diff --git a/acceptance-tests/pom.xml b/acceptance-tests/pom.xml index c02eaddc0b..954308451e 100644 --- a/acceptance-tests/pom.xml +++ b/acceptance-tests/pom.xml @@ -3,7 +3,7 @@ 4.0.0 acceptance-tests gov.cms.qpp.conversion - 2026.03.13.01-RELEASE + 2026.03.31.01-RELEASE conversion-tests jar diff --git a/commandline/pom.xml b/commandline/pom.xml index 1787342d70..c2bd030b2e 100644 --- a/commandline/pom.xml +++ b/commandline/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2026.03.13.01-RELEASE + 2026.03.31.01-RELEASE ../pom.xml diff --git a/commons/pom.xml b/commons/pom.xml index 5ff5844be9..2c4a758b02 100644 --- a/commons/pom.xml +++ b/commons/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2026.03.13.01-RELEASE + 2026.03.31.01-RELEASE ../pom.xml diff --git a/converter/pom.xml b/converter/pom.xml index f04ece276d..f77422b48a 100644 --- a/converter/pom.xml +++ b/converter/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2026.03.13.01-RELEASE + 2026.03.31.01-RELEASE ../pom.xml diff --git a/generate-race-cpcplus/pom.xml b/generate-race-cpcplus/pom.xml index 376d31c110..cebc0a23b1 100644 --- a/generate-race-cpcplus/pom.xml +++ b/generate-race-cpcplus/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion generateRaceCpcPlus - 2026.03.13.01-RELEASE + 2026.03.31.01-RELEASE generate-race-cpcplus jar diff --git a/generate/pom.xml b/generate/pom.xml index 1fa7567cce..1f960c91ca 100644 --- a/generate/pom.xml +++ b/generate/pom.xml @@ -5,7 +5,7 @@ qpp-conversion-tool-parent gov.cms.qpp.conversion - 2026.03.13.01-RELEASE + 2026.03.31.01-RELEASE ../pom.xml 4.0.0 diff --git a/pom.xml b/pom.xml index 383e089aa8..48b8fc1362 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent pom - 2026.03.13.01-RELEASE + 2026.03.31.01-RELEASE QPP Conversion Tool diff --git a/qrda3-update-measures/pom.xml b/qrda3-update-measures/pom.xml index cdb0eda235..25631f9fd3 100644 --- a/qrda3-update-measures/pom.xml +++ b/qrda3-update-measures/pom.xml @@ -4,7 +4,7 @@ gov.cms.qpp.conversion qpp-update-measures - 2026.03.13.01-RELEASE + 2026.03.31.01-RELEASE qrda3-update-measures jar diff --git a/rest-api/pom.xml b/rest-api/pom.xml index 6b724e11cd..73a72ae906 100644 --- a/rest-api/pom.xml +++ b/rest-api/pom.xml @@ -19,7 +19,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2026.03.13.01-RELEASE + 2026.03.31.01-RELEASE ../pom.xml diff --git a/test-commons/pom.xml b/test-commons/pom.xml index b2f79385e5..7217666102 100644 --- a/test-commons/pom.xml +++ b/test-commons/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2026.03.13.01-RELEASE + 2026.03.31.01-RELEASE ../pom.xml diff --git a/test-coverage/pom.xml b/test-coverage/pom.xml index 6cb584ab08..05d3db3511 100644 --- a/test-coverage/pom.xml +++ b/test-coverage/pom.xml @@ -6,7 +6,7 @@ gov.cms.qpp.conversion qpp-conversion-tool-parent - 2026.03.13.01-RELEASE + 2026.03.31.01-RELEASE ../pom.xml