Skip to content

Commit

Permalink
feat: when confirming a listing, add all required baseline Standards
Browse files Browse the repository at this point in the history
OCD-4408
  • Loading branch information
tmy1313 committed Dec 12, 2023
1 parent 88ee9ce commit 705e231
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,12 @@
import gov.healthit.chpl.manager.ActivityManager;
import gov.healthit.chpl.manager.SchedulerManager;
import gov.healthit.chpl.scheduler.job.ListingUploadValidationJob;
import gov.healthit.chpl.standard.StandardDAO;
import gov.healthit.chpl.upload.listing.handler.CertificationDateHandler;
import gov.healthit.chpl.upload.listing.handler.ListingDetailsUploadHandler;
import gov.healthit.chpl.upload.listing.normalizer.ListingDetailsNormalizer;
import gov.healthit.chpl.upload.listing.validation.ListingUploadValidator;
import gov.healthit.chpl.upload.listing.validation.reviewer.BaselineStandardNormalizer;
import gov.healthit.chpl.util.AuthUtil;
import gov.healthit.chpl.util.ChplProductNumberUtil;
import gov.healthit.chpl.util.ErrorMessageUtil;
Expand All @@ -75,6 +77,7 @@ public class ListingUploadManager {
private ListingUploadValidator listingUploadValidator;
private CertificationBodyDAO acbDao;
private UserDAO userDao;
private StandardDAO standardDAO;
private ListingConfirmationManager listingConfirmationManager;
private SchedulerManager schedulerManager;
private ActivityManager activityManager;
Expand All @@ -88,7 +91,7 @@ public ListingUploadManager(ListingDetailsUploadHandler listingDetailsHandler,
ListingUploadValidator listingUploadValidator,
ListingUploadHandlerUtil uploadUtil, ChplProductNumberUtil chplProductNumberUtil,
ListingUploadDao listingUploadDao, CertificationBodyDAO acbDao, UserDAO userDao,
ListingConfirmationManager listingConfirmationManager,
StandardDAO standardDAO, ListingConfirmationManager listingConfirmationManager,
SchedulerManager schedulerManager,
ActivityManager activityManager, ErrorMessageUtil msgUtil) {
this.listingDetailsHandler = listingDetailsHandler;
Expand All @@ -100,6 +103,7 @@ public ListingUploadManager(ListingDetailsUploadHandler listingDetailsHandler,
this.listingUploadDao = listingUploadDao;
this.acbDao = acbDao;
this.userDao = userDao;
this.standardDAO = standardDAO;
this.listingConfirmationManager = listingConfirmationManager;
this.schedulerManager = schedulerManager;
this.activityManager = activityManager;
Expand Down Expand Up @@ -191,7 +195,7 @@ public CertifiedProductSearchDetails getDetailsById(Long id) throws ValidationEx
CertifiedProductSearchDetails listing = listingDetailsHandler.parseAsListing(headingRecord, allListingRecords);
listing.setId(id);
LOGGER.debug("Converted listing upload with ID " + id + " into CertifiedProductSearchDetails object");
listingNormalizer.normalize(listing);
listingNormalizer.normalize(listing, List.of(new BaselineStandardNormalizer(standardDAO)));
LOGGER.debug("Normalized listing upload with ID " + id);
listingUploadValidator.review(listingUpload, listing);
LOGGER.debug("Validated listing upload with ID " + id);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package gov.healthit.chpl.upload.listing.normalizer;

import gov.healthit.chpl.domain.CertifiedProductSearchDetails;

public interface CertificationResultLevelNormalizer {
void normalize(CertifiedProductSearchDetails listing);
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public CertificationResultNormalizer(CertificationCriterionNormalizer criterionN
this.msgUtil = msgUtil;
}

public void normalize(CertifiedProductSearchDetails listing) {
public void normalize(CertifiedProductSearchDetails listing, List<CertificationResultLevelNormalizer> additionalNormalizers) {
removeCertificationResultsWithNullCriterion(listing);
removeCertificationResultsForDuplicateCriteria(listing);

Expand All @@ -74,10 +74,19 @@ public void normalize(CertifiedProductSearchDetails listing) {
this.svapNormalizer.normalize(listing);
this.standardNormalizer.normalize(listing);

if (additionalNormalizers != null && additionalNormalizers.size() > 0) {
additionalNormalizers.forEach(normalizer -> normalizer.normalize(listing));
}

setSedTrueIfApplicableToCriteria(listing);
listing.getCertificationResults().sort(new CertificationResultComparator());
}


public void normalize(CertifiedProductSearchDetails listing) {
normalize(listing, null);
}

private void removeCertificationResultsWithNullCriterion(CertifiedProductSearchDetails listing) {
//this can happen if an upload file has a made-up criterion column like CRITERIA_170_315_B_20__C
Iterator<CertificationResult> certResultIter = listing.getCertificationResults().iterator();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package gov.healthit.chpl.upload.listing.normalizer;

import java.util.List;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.ff4j.FF4j;
Expand Down Expand Up @@ -58,7 +60,7 @@ public ListingDetailsNormalizer(CertificationEditionNormalizer editionNormalizer
this.ff4j = ff4j;
}

public void normalize(CertifiedProductSearchDetails listing) {
public void normalize(CertifiedProductSearchDetails listing, List<CertificationResultLevelNormalizer> additionalNormalizers) {
if (!listing.getErrorMessages().isEmpty()) {
listing.clearAllErrorMessages();
}
Expand All @@ -78,10 +80,19 @@ public void normalize(CertifiedProductSearchDetails listing) {
this.accessibilityStandardNormalizer.normalize(listing);
this.qmsNormalizer.normalize(listing);
this.targetedUserNormalizer.normalize(listing);
this.certResultNormalizer.normalize(listing);
if (additionalNormalizers != null && additionalNormalizers.size() > 0) {
this.certResultNormalizer.normalize(listing, additionalNormalizers);
} else {
this.certResultNormalizer.normalize(listing);
}
this.cqmNormalizer.normalize(listing);
this.measureNormalizer.normalize(listing);
this.sedNormalizer.normalize(listing);

}

public void normalize(CertifiedProductSearchDetails listing) {
normalize(listing, null);
}

private void setEmptyStringFieldsToNull(CertifiedProductSearchDetails listing) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
import java.util.Optional;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import gov.healthit.chpl.certificationCriteria.CertificationCriterion;
import gov.healthit.chpl.domain.CertificationResult;
Expand All @@ -17,18 +15,18 @@
import gov.healthit.chpl.standard.Standard;
import gov.healthit.chpl.standard.StandardCriteriaMap;
import gov.healthit.chpl.standard.StandardDAO;
import gov.healthit.chpl.upload.listing.normalizer.CertificationResultLevelNormalizer;
import lombok.extern.log4j.Log4j2;

@Log4j2
@Component
public class BaselineStandardNormalizer {
public class BaselineStandardNormalizer implements CertificationResultLevelNormalizer {
private StandardDAO standardDao;

@Autowired
public BaselineStandardNormalizer(StandardDAO standardDao) {
this.standardDao = standardDao;
}

@Override
public void normalize(CertifiedProductSearchDetails listing) {
if (listing.getCertificationResults() != null && listing.getCertificationResults().size() > 0) {
listing.getCertificationResults().stream()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,18 @@
import java.time.LocalDate;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

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

import gov.healthit.chpl.certificationCriteria.CertificationCriterion;
import gov.healthit.chpl.domain.CertificationResult;
import gov.healthit.chpl.domain.CertifiedProductSearchDetails;
import gov.healthit.chpl.exception.EntityRetrievalException;
import gov.healthit.chpl.standard.CertificationResultStandard;
import gov.healthit.chpl.standard.Standard;
import gov.healthit.chpl.standard.StandardDAO;
Expand Down Expand Up @@ -51,7 +54,7 @@ private void review(CertifiedProductSearchDetails listing, CertificationResult c
reviewCriteriaCanHaveStandard(listing, certResult);
removeStandardsWithoutIds(listing, certResult);
removeStandardMismatchedToCriteria(listing, certResult);
//reviewStandardExistForEachGroup(listing, certResult);
reviewStandardExistForEachGroup(listing, certResult);
if (certResult.getStandards() != null && certResult.getStandards().size() > 0) {
certResult.getStandards().stream()
.forEach(standard -> reviewStandardFields(listing, certResult, standard));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,17 @@
import gov.healthit.chpl.dao.CertificationBodyDAO;
import gov.healthit.chpl.dao.auth.UserDAO;
import gov.healthit.chpl.domain.Address;
import gov.healthit.chpl.domain.CertificationBody;
import gov.healthit.chpl.domain.CertifiedProductSearchDetails;
import gov.healthit.chpl.domain.ConfirmListingRequest;
import gov.healthit.chpl.domain.ListingUpload;
import gov.healthit.chpl.domain.CertificationBody;
import gov.healthit.chpl.exception.EntityCreationException;
import gov.healthit.chpl.exception.EntityRetrievalException;
import gov.healthit.chpl.exception.InvalidArgumentsException;
import gov.healthit.chpl.exception.ValidationException;
import gov.healthit.chpl.manager.ActivityManager;
import gov.healthit.chpl.manager.SchedulerManager;
import gov.healthit.chpl.standard.StandardDAO;
import gov.healthit.chpl.upload.listing.handler.CertificationDateHandler;
import gov.healthit.chpl.upload.listing.handler.ListingDetailsUploadHandler;
import gov.healthit.chpl.upload.listing.normalizer.ListingDetailsNormalizer;
Expand Down Expand Up @@ -91,6 +92,7 @@ public void setup() throws InvalidArgumentsException, JsonProcessingException,
listingUploadValidator,
uploadUtil, chplProductNumberUtil, listingUploadDao, acbDao,
Mockito.mock(UserDAO.class),
Mockito.mock(StandardDAO.class),
listingConfirmationManager,
Mockito.mock(SchedulerManager.class),
Mockito.mock(ActivityManager.class), msgUtil);
Expand Down

0 comments on commit 705e231

Please sign in to comment.