Skip to content

Commit

Permalink
Merge branch 'OCD-4834' into qa
Browse files Browse the repository at this point in the history
  • Loading branch information
kekey1 committed Mar 5, 2025
2 parents a4256f5 + b292de6 commit 289a964
Show file tree
Hide file tree
Showing 10 changed files with 449 additions and 630 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public class CertificationResultReviewer {
private TestStandardReviewer testStandardReviewer;
private OptionalStandardReviewer optionalStandardReviewer;
private SvapReviewer svapReviewer;
private SvapIcsReviewer svapIcsReviewer;
private UnattestedCriteriaWithDataReviewer unattestedCriteriaWithDataReviewer;
private SedG32015Reviewer sedG3Reviewer;
private CertificationResultRules certResultRules;
Expand All @@ -54,6 +55,7 @@ public CertificationResultReviewer(@Qualifier("listingUploadUnavailableCriteriaR
@Qualifier("listingUploadTestStandardReviewer") TestStandardReviewer testStandardReviewer,
@Qualifier("listingUploadOptionalStandardReviewer") OptionalStandardReviewer optionalStandardReviewer,
@Qualifier("listingUploadSvapReviewer") SvapReviewer svapReviewer,
@Qualifier("listingUploadSvapIcsReviewer") SvapIcsReviewer svapIcsReviewer,
@Qualifier("uploadedListingUnattestedCriteriaWithDataReviewer") UnattestedCriteriaWithDataReviewer unattestedCriteriaWithDataReviewer,
@Qualifier("sedG32015Reviewer") SedG32015Reviewer sedG3Reviewer,
CertificationResultRules certResultRules, ValidationUtils validationUtils, ErrorMessageUtil msgUtil) {
Expand All @@ -71,6 +73,7 @@ public CertificationResultReviewer(@Qualifier("listingUploadUnavailableCriteriaR
this.testStandardReviewer = testStandardReviewer;
this.optionalStandardReviewer = optionalStandardReviewer;
this.svapReviewer = svapReviewer;
this.svapIcsReviewer = svapIcsReviewer;
this.unattestedCriteriaWithDataReviewer = unattestedCriteriaWithDataReviewer;
this.sedG3Reviewer = sedG3Reviewer;
this.certResultRules = certResultRules;
Expand Down Expand Up @@ -110,6 +113,7 @@ public void review(CertifiedProductSearchDetails listing) {
testStandardReviewer.review(listing);
optionalStandardReviewer.review(listing);
svapReviewer.review(listing);
svapIcsReviewer.review(listing);
sedG3Reviewer.review(listing);
unattestedCriteriaWithDataReviewer.review(listing);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package gov.healthit.chpl.upload.listing.validation.reviewer;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import gov.healthit.chpl.domain.CertificationResult;
import gov.healthit.chpl.domain.CertifiedProductSearchDetails;
import gov.healthit.chpl.svap.domain.CertificationResultSvap;
import gov.healthit.chpl.util.CertificationResultRules;
import gov.healthit.chpl.util.ErrorMessageUtil;
import gov.healthit.chpl.util.ValidationUtils;
import lombok.extern.log4j.Log4j2;

//This reviewer is only relevant to new listings - there is a validation rule
//that newly created listings must have ICS if they are using any replaced SVAPs.
//The rules are different when editing a listing.
@Component("listingUploadSvapIcsReviewer")
@Log4j2
public class SvapIcsReviewer {
private CertificationResultRules certResultRules;
private ValidationUtils validationUtils;
private ErrorMessageUtil msgUtil;

@Autowired
public SvapIcsReviewer(CertificationResultRules certResultRules,
ValidationUtils validationUtils,
ErrorMessageUtil msgUtil) {
this.certResultRules = certResultRules;
this.validationUtils = validationUtils;
this.msgUtil = msgUtil;
}

public void review(CertifiedProductSearchDetails listing) {
listing.getCertificationResults().stream()
.filter(certResult -> validationUtils.isEligibleForErrors(certResult))
.filter(certResult -> certResultRules.hasCertOption(certResult.getCriterion().getId(), CertificationResultRules.SVAP))
.forEach(certResult -> reviewCertificationResult(listing, certResult));
}

private void reviewCertificationResult(CertifiedProductSearchDetails listing, CertificationResult certResult) {
if (!CollectionUtils.isEmpty(certResult.getSvaps())) {
certResult.getSvaps().stream()
.forEach(svap -> reviewSvapMarkedAsReplaced(listing, certResult, svap));
}
}

private void reviewSvapMarkedAsReplaced(CertifiedProductSearchDetails listing,
CertificationResult certResult, CertificationResultSvap svap) {
if (svap.getSvapId() != null
&& BooleanUtils.isTrue(svap.isReplaced())
&& !doesListingHaveIcs(listing)) {
listing.addDataErrorMessage(msgUtil.getMessage("listing.criteria.svap.replacedWithIcs",
svap.getRegulatoryTextCitation(), certResult.getCriterion().getNumber()));
}
}

private boolean doesListingHaveIcs(CertifiedProductSearchDetails listing) {
return listing.getIcs().getInherits();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import java.util.Iterator;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
Expand All @@ -15,11 +14,12 @@
import gov.healthit.chpl.util.ErrorMessageUtil;
import gov.healthit.chpl.util.Util;
import gov.healthit.chpl.util.ValidationUtils;
import gov.healthit.chpl.validation.listing.reviewer.Reviewer;
import lombok.extern.log4j.Log4j2;

@Component("listingUploadSvapReviewer")
@Log4j2
public class SvapReviewer {
public class SvapReviewer implements Reviewer {
private CertificationResultRules certResultRules;
private ValidationUtils validationUtils;
private ErrorMessageUtil msgUtil;
Expand Down Expand Up @@ -86,7 +86,6 @@ private void removeSvapsWithoutIds(CertifiedProductSearchDetails listing, Certif
private void reviewSvapFields(CertifiedProductSearchDetails listing,
CertificationResult certResult, CertificationResultSvap svap) {
reviewRegulatoryTextCitationRequired(listing, certResult, svap);
reviewSvapMarkedAsReplaced(listing, certResult, svap);
}

private void reviewRegulatoryTextCitationRequired(CertifiedProductSearchDetails listing,
Expand All @@ -97,18 +96,4 @@ private void reviewRegulatoryTextCitationRequired(CertifiedProductSearchDetails
Util.formatCriteriaNumber(certResult.getCriterion())));
}
}

private void reviewSvapMarkedAsReplaced(CertifiedProductSearchDetails listing,
CertificationResult certResult, CertificationResultSvap svap) {
if (svap.getSvapId() != null
&& BooleanUtils.isTrue(svap.isReplaced())
&& !doesListingHaveIcs(listing)) {
listing.addDataErrorMessage(msgUtil.getMessage("listing.criteria.svap.replacedWithIcs",
svap.getRegulatoryTextCitation(), certResult.getCriterion().getNumber()));
}
}

private boolean doesListingHaveIcs(CertifiedProductSearchDetails listing) {
return listing.getIcs().getInherits();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import gov.healthit.chpl.upload.listing.validation.reviewer.PrivacyAndSecurityFrameworkReviewer;
import gov.healthit.chpl.upload.listing.validation.reviewer.QmsStandardReviewer;
import gov.healthit.chpl.upload.listing.validation.reviewer.SedReviewer;
import gov.healthit.chpl.upload.listing.validation.reviewer.SvapReviewer;
import gov.healthit.chpl.upload.listing.validation.reviewer.TestToolReviewer;
import gov.healthit.chpl.upload.listing.validation.reviewer.UcdProcessReviewer;
import gov.healthit.chpl.validation.listing.reviewer.CertificationDateReviewer;
Expand All @@ -39,7 +40,6 @@
import gov.healthit.chpl.validation.listing.reviewer.Reviewer;
import gov.healthit.chpl.validation.listing.reviewer.StandardAsOfTodayReviewer;
import gov.healthit.chpl.validation.listing.reviewer.StandardRemovalReviewer;
import gov.healthit.chpl.validation.listing.reviewer.SvapReviewer;
import gov.healthit.chpl.validation.listing.reviewer.TestProcedureReviewer;
import gov.healthit.chpl.validation.listing.reviewer.TestStandardRemovalReviewer;
import gov.healthit.chpl.validation.listing.reviewer.TestStandardReviewer;
Expand All @@ -60,6 +60,7 @@
import gov.healthit.chpl.validation.listing.reviewer.edition2015.RequiredAndRelatedCriteriaReviewer;
import gov.healthit.chpl.validation.listing.reviewer.edition2015.RequiredData2015Reviewer;
import gov.healthit.chpl.validation.listing.reviewer.edition2015.SedG32015Reviewer;
import gov.healthit.chpl.validation.listing.reviewer.edition2015.SvapComparisonReviewer;
import gov.healthit.chpl.validation.listing.reviewer.edition2015.UnavailableCriteriaComparisonReviewer;
import gov.healthit.chpl.validation.listing.reviewer.edition2015.UnavailableCriteriaTestTaskComparisonReviewer;
import gov.healthit.chpl.validation.listing.reviewer.edition2015.UnavailableCriteriaUcdComparisonReviewer;
Expand Down Expand Up @@ -171,6 +172,10 @@ public class Edition2015ListingValidator extends Validator {
@Qualifier("measureComparisonReviewer")
private MeasureComparisonReviewer measureComparisonReviewer;

@Autowired
@Qualifier("svapComparisonReviewer")
private SvapComparisonReviewer svapComparisonReviewer;

@Autowired
@Qualifier("oldCriteriaWithoutIcsReviewer")
private OldCriteriaWithoutIcsReviewer oldCriteriaWithoutIcsReviewer;
Expand Down Expand Up @@ -211,7 +216,7 @@ public class Edition2015ListingValidator extends Validator {
private ListingStatusAndUserRoleReviewer listingStatusAndUserRoleReviewer;

@Autowired
@Qualifier("svapReviewer")
@Qualifier("listingUploadSvapReviewer")
private SvapReviewer svapReviewer;

@Autowired
Expand Down Expand Up @@ -312,6 +317,7 @@ public synchronized List<Reviewer> getReviewers() {
reviewers.add(icsCodeReviewer);
reviewers.add(additionalSoftwareCodeReviewer);
reviewers.add(codeSetReviewer);
reviewers.add(svapReviewer);
return reviewers;
}

Expand All @@ -321,12 +327,12 @@ public List<ComparisonReviewer> getComparisonReviewers() {
comparisonReviewers.add(chplNumberComparisonReviewer);
comparisonReviewers.add(devBanComparisonReviewer);
comparisonReviewers.add(measureComparisonReviewer);
comparisonReviewers.add(svapComparisonReviewer);
comparisonReviewers.add(unavailableCriteriaComparisonReviewer);
comparisonReviewers.add(unavailableCriteriaTestTaskComparisonReviewer);
comparisonReviewers.add(unavailableCriteriaUcdComparisonReviewer);
comparisonReviewers.add(functionalityTestedAllowedByRoleReviewer);
comparisonReviewers.add(listingStatusAndUserRoleReviewer);
comparisonReviewers.add(svapReviewer);
comparisonReviewers.add(inheritanceComparisonReviewer);
comparisonReviewers.add(deprecatedFieldReviewer);
comparisonReviewers.add(testingLabComparisonReviewer);
Expand Down

This file was deleted.

Loading

0 comments on commit 289a964

Please sign in to comment.