Summary Table
Categories |
Total Count |
PII |
0 |
URL |
0 |
DNS |
1 |
EKL |
0 |
IP |
0 |
PORT |
0 |
VsID |
0 |
CF |
0 |
AI |
0 |
VPD |
0 |
PL |
0 |
Other |
0 |
File Content
/**
*
*/
package gov.va.med.ars.service.impl;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import gov.va.med.ars.constants.ErrorMessages;
import gov.va.med.ars.dao.ars.HccsCdRepository;
import gov.va.med.ars.dao.ars.ILoincTypeLookupRespository;
import gov.va.med.ars.dao.ars.IPayerInfoRepository;
import gov.va.med.ars.dao.ars.LoincCdRepository;
import gov.va.med.ars.dao.ars.LoincModCdRepository;
import gov.va.med.ars.exceptions.GenericException;
import gov.va.med.ars.model.request.CodeAndModifierRequest;
import gov.va.med.ars.model.request.GenericRequest;
import gov.va.med.ars.model.response.CodeAndModifierResponse;
import gov.va.med.ars.model.response.LoincCodeListResponse;
import gov.va.med.ars.service.ICodeAndModifierService;
import gov.va.med.domain.ars.HccsCd;
import gov.va.med.domain.ars.LoincCd;
import gov.va.med.domain.ars.LoincModCd;
import gov.va.med.domain.ars.LoincTypeLookup;
import gov.va.med.domain.fee.PayerInfo;
/**
* @author
DNS
*
*/
@Service
public class CodeAndModifierServiceImpl implements ICodeAndModifierService {
private static final String DATE_FORMAT_IS_NOT_AS_EXPECTED_MM_DD_YYYY = "Date format is not as expected MM/dd/yyyy";
private static final String TODAY_IS_BETWEEN_START_DATE_AND_END_DATE = "Today is between start Date and end Date";
private static final String LOINC_CD = "loinccd";
private static final String LOINC_MOD_CD = "loincmodcd";
private static final String HCCS_CD = "hccscd";
private static final Logger logger = LogManager.getLogger(CodeAndModifierServiceImpl.class);
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
@Autowired
LoincCdRepository loincCdRepository;
@Autowired
LoincModCdRepository loincModCdRepository;
@Autowired
HccsCdRepository hccsCdRepository;
@Autowired
ILoincTypeLookupRespository loincTypeLookupRepository;
/*
* (non-Javadoc)
*
* @see
* gov.va.med.ars.service.ICodeAndModifierService#getCodeAndModifier(java.
* lang.String)
*/
@Override
public List<?> getCodeAndModifier(String url, List<String> codesToProcess) throws GenericException {
List<?> responseList = null;
List<Character> enabledValuesToProcess = new ArrayList<>();
for (String str : codesToProcess) {
enabledValuesToProcess.add(str.charAt(0));
}
if (url.toLowerCase().contains("loincmod")) {
loincModCdRepository.updateIsActiveOnEndDate();
List<LoincModCd> loincMdList = loincModCdRepository.findByisactiveInAndIsarchive(enabledValuesToProcess,
'N');
responseList = mapCodesAndModifiers(loincMdList, LoincModCd.class);
} else if (url.toLowerCase().contains("loinc")) {
loincCdRepository.updateIsActiveOnEndDate();
List<LoincCd> loinCdList = loincCdRepository.findByisactiveInAndIsarchive(enabledValuesToProcess, 'N');
responseList = mapCodesAndModifiers(loinCdList, LoincCd.class);
responseList = seperateList(responseList);
} else if (url.toLowerCase().contains("hccs")) {
hccsCdRepository.updateIsActiveOnEndDate();
List<HccsCd> hccsCdList = hccsCdRepository.findByisactiveInAndIsarchive(enabledValuesToProcess, 'N');
responseList = mapCodesAndModifiers(hccsCdList, HccsCd.class);
} else {
throw new GenericException(ErrorMessages.NOT_FOUND, "URL not found", HttpStatus.NOT_FOUND);
}
return responseList;
}
private List<?> seperateList(List<?> responseList) {
List<LoincCodeListResponse> loincResponseList = new ArrayList<>();
LoincCodeListResponse response = new LoincCodeListResponse();
List<CodeAndModifierResponse> claimList = new ArrayList<>();
List<CodeAndModifierResponse> lineList = new ArrayList<>();
for (Object object : responseList) {
CodeAndModifierResponse loincd = (CodeAndModifierResponse) object;
if (loincd.getLevel().equalsIgnoreCase("Claim")) {
claimList.add(loincd);
} else if (loincd.getLevel().equalsIgnoreCase("Line")) {
lineList.add(loincd);
} else {
claimList.add(loincd);
lineList.add(loincd);
}
}
response.setClaimList(claimList);
response.setLineList(lineList);
loincResponseList.add(response);
return loincResponseList;
}
private void setDatesAndFlag(Date startDate, Date endDate, CodeAndModifierResponse response) {
DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
Date todayDate = null;
try {
todayDate = dateFormat.parse(dateFormat.format(new Date()));
if (startDate != null && endDate != null) {
// Set the active flag accordingly
response.setStartDate(formatter.format(startDate));
response.setEndDate(formatter.format(endDate));
if (todayDate != null && todayDate.compareTo(dateFormat.parse(dateFormat.format(startDate))) >= 0
&& todayDate.compareTo(dateFormat.parse(dateFormat.format(endDate))) <= 0
&& response.isFlag()) {
logger.info(TODAY_IS_BETWEEN_START_DATE_AND_END_DATE);
response.setFlag(true);
} else {
response.setFlag(false);
}
} else if (startDate != null) {
response.setStartDate(formatter.format(startDate));
if (todayDate != null && todayDate.compareTo(dateFormat.parse(dateFormat.format(startDate))) >= 0
&& response.isFlag()) {
response.setFlag(true);
} else {
response.setFlag(false);
}
} else if (endDate != null) {
response.setEndDate(formatter.format(endDate));
if (todayDate != null && todayDate.compareTo(dateFormat.parse(dateFormat.format(endDate))) <= 0
&& response.isFlag()) {
response.setFlag(true);
} else {
response.setFlag(false);
}
}
} catch (ParseException e1) {
logger.info("New Date cannot be parsed", e1);
}
}
private List<?> mapCodesAndModifiers(List<?> listToMap, Class<?> class1) throws GenericException {
List<CodeAndModifierResponse> codeAndModifierResponsesList = new ArrayList<>();
if (class1.getSimpleName().equalsIgnoreCase(LOINC_CD)) {
for (Object object : listToMap) {
LoincCd loincd = (LoincCd) object;
CodeAndModifierResponse response = new CodeAndModifierResponse();
response.setCd(loincd.getLoincId());
response.setStcCd(loincd.getStcloincCd());
response.setStcCdDesc(loincd.getStcloincCdDesc());
response.setFlag((loincd.getIsactive() == 'Y' ? true : false));
response.setLevel(loincd.getClaimLineBridge().getIdCd());
Date startDate = loincd.getStartdate();
Date endDate = loincd.getEnddate();
setDatesAndFlag(startDate, endDate, response);
codeAndModifierResponsesList.add(response);
}
} else if (class1.getSimpleName().equalsIgnoreCase(LOINC_MOD_CD)) {
for (Object object : listToMap) {
LoincModCd loinCdMd = (LoincModCd) object;
CodeAndModifierResponse response = new CodeAndModifierResponse();
response.setCd(loinCdMd.getLoincModId());
response.setStcCd(loinCdMd.getStcloincCdMod());
response.setStcCdDesc(loinCdMd.getStcloincCdModDesc());
response.setFlag((loinCdMd.getIsactive() == 'Y' ? true : false));
Date startDate = loinCdMd.getStartdate();
Date endDate = loinCdMd.getEnddate();
setDatesAndFlag(startDate, endDate, response);
codeAndModifierResponsesList.add(response);
}
} else if (class1.getSimpleName().equalsIgnoreCase(HCCS_CD)) {
for (Object object : listToMap) {
HccsCd hccdCd = (HccsCd) object;
CodeAndModifierResponse response = new CodeAndModifierResponse();
response.setCd(hccdCd.getHccsId());
response.setStcCd(hccdCd.getStchccstatuscatCd());
response.setStcCdDesc(hccdCd.getStchccstatuscatCdDesc());
response.setFlag((hccdCd.getIsactive() == 'Y' ? true : false));
Date startDate = hccdCd.getStartdate();
Date endDate = hccdCd.getEnddate();
setDatesAndFlag(startDate, endDate, response);
codeAndModifierResponsesList.add(response);
}
} else {
throw new GenericException(ErrorMessages.DATA_ACCESS_ERROR, "Internal Error occured",
HttpStatus.INTERNAL_SERVER_ERROR);
}
return codeAndModifierResponsesList;
}
@Override
public boolean addOrModifyCodeAndModifier(GenericRequest codeAndModifier) throws GenericException {
boolean response = false;
if (codeAndModifier.getLoincModList() != null && !codeAndModifier.getLoincModList().isEmpty()) {
response = saveCodesAndModifiers(codeAndModifier.getLoincModList(), LoincModCd.class);
}
if (codeAndModifier.getLoincList() != null && !codeAndModifier.getLoincList().isEmpty()) {
response = saveCodesAndModifiers(codeAndModifier.getLoincList(), LoincCd.class);
}
if (codeAndModifier.getHccList() != null && !codeAndModifier.getHccList().isEmpty()) {
response = saveCodesAndModifiers(codeAndModifier.getHccList(), HccsCd.class);
}
return response;
}
private boolean saveCodesAndModifiers(List<?> listToMap, Class<?> class1) {
LoincCd loincCdResponse = null;
LoincModCd loincModCdResponse = null;
Date todayDate = null;
HccsCd hccsCdResponse = null;
try {
todayDate = dateFormat.parse(dateFormat.format(new Date()));
List<LoincTypeLookup> loincTypeRepoResults = loincTypeLookupRepository.findAll();
if (class1.getSimpleName().equalsIgnoreCase(LOINC_CD)) {
for (Object object : listToMap) {
CodeAndModifierRequest codeAndModifier = (CodeAndModifierRequest) object;
LoincCd loincCodeDb = null;
LoincCd loincCd = new LoincCd();
loincCd.setStcloincCd(codeAndModifier.getStcCd());
loincCd.setStcloincCdDesc(codeAndModifier.getStcCdDesc());
loincCd.setDatemodified(new Date());
if (codeAndModifier.isFlag()) {
loincCd.setIsactive('Y');
} else {
loincCd.setIsactive('N');
}
for (LoincTypeLookup loinctype : loincTypeRepoResults) {
if (loinctype.getIdCd().equalsIgnoreCase(codeAndModifier.getLevel())) {
loincCd.setClaimLineBridge(loinctype);
break;
}
}
if (!codeAndModifier.isArchive()) {
loincCd.setIsarchive('N');
if (codeAndModifier.getStartDate() != null && !(codeAndModifier.getStartDate().isEmpty())
&& codeAndModifier.getEndDate() != null && !(codeAndModifier.getEndDate().isEmpty())) {
// Set the active flag accordingly
loincCd.setStartdate(dateFormat.parse(codeAndModifier.getStartDate()));
loincCd.setEnddate(dateFormat.parse(codeAndModifier.getEndDate()));
if (todayDate != null && codeAndModifier != null
&& todayDate.compareTo(dateFormat.parse(codeAndModifier.getStartDate())) >= 0
&& todayDate.compareTo(dateFormat.parse(codeAndModifier.getEndDate())) <= 0
&& codeAndModifier.isFlag()) {
logger.info(TODAY_IS_BETWEEN_START_DATE_AND_END_DATE);
loincCd.setIsactive('Y');
} else {
loincCd.setIsactive('N');
}
} else if (codeAndModifier.getStartDate() != null
&& !(codeAndModifier.getStartDate().isEmpty())) {
loincCd.setStartdate(dateFormat.parse(codeAndModifier.getStartDate()));
if (todayDate != null && codeAndModifier != null
&& todayDate.compareTo(dateFormat.parse(codeAndModifier.getStartDate())) >= 0
&& codeAndModifier.isFlag()) {
loincCd.setIsactive('Y');
} else {
loincCd.setIsactive('N');
}
} else if (codeAndModifier.getEndDate() != null && !(codeAndModifier.getEndDate().isEmpty())) {
loincCd.setEnddate(dateFormat.parse(codeAndModifier.getEndDate()));
if (todayDate != null && codeAndModifier != null
&& todayDate.compareTo(dateFormat.parse(codeAndModifier.getEndDate())) <= 0
&& codeAndModifier.isFlag()) {
loincCd.setIsactive('Y');
} else {
loincCd.setIsactive('N');
}
}
} else {
if (codeAndModifier.getStartDate() != null && !(codeAndModifier.getStartDate().isEmpty())
&& todayDate != null
&& todayDate.compareTo(dateFormat.parse(codeAndModifier.getStartDate())) >= 0) {
loincCd.setDatecreated(dateFormat.parse(codeAndModifier.getStartDate()));
} else {
loincCd.setDatecreated(new Date());
}
loincCd.setEnddate(new Date());
loincCd.setIsactive('N');
loincCd.setIsarchive('Y');
}
if (codeAndModifier.getCd() != null || !StringUtils.isEmpty(codeAndModifier.getCd())) {
loincCodeDb = loincCdRepository.findByloincId(codeAndModifier.getCd());
}
if (loincCodeDb == null) {
loincCd.setDatecreated(new Date());
loincCdResponse = loincCdRepository.save(loincCd);
} else {
loincCd.setLoincId(loincCodeDb.getLoincId());
loincCdResponse = loincCdRepository.save(loincCd);
}
}
}
if (class1.getSimpleName().equalsIgnoreCase(LOINC_MOD_CD)) {
for (Object object : listToMap) {
CodeAndModifierRequest codeAndModifier = (CodeAndModifierRequest) object;
LoincModCd loincCodeModDb = null;
LoincModCd loincModCd = new LoincModCd();
loincModCd.setStcloincCdMod(codeAndModifier.getStcCd());
loincModCd.setStcloincCdModDesc(codeAndModifier.getStcCdDesc());
loincModCd.setDatemodified(new Date());
if (codeAndModifier.isFlag()) {
loincModCd.setIsactive('Y');
} else {
loincModCd.setIsactive('N');
}
if (!codeAndModifier.isArchive()) {
loincModCd.setIsarchive('N');
if (codeAndModifier.getStartDate() != null && !(codeAndModifier.getStartDate().isEmpty())
&& codeAndModifier.getEndDate() != null && !(codeAndModifier.getEndDate().isEmpty())) {
// Set the active flag accordingly
loincModCd.setStartdate(dateFormat.parse(codeAndModifier.getStartDate()));
loincModCd.setEnddate(dateFormat.parse(codeAndModifier.getEndDate()));
if (todayDate != null
&& todayDate.compareTo(dateFormat.parse(codeAndModifier.getStartDate())) >= 0
&& todayDate.compareTo(dateFormat.parse(codeAndModifier.getEndDate())) <= 0
&& codeAndModifier.isFlag()) {
logger.info(TODAY_IS_BETWEEN_START_DATE_AND_END_DATE);
loincModCd.setIsactive('Y');
} else {
loincModCd.setIsactive('N');
}
} else if (codeAndModifier.getStartDate() != null && !(codeAndModifier.getStartDate().isEmpty())) {
loincModCd.setStartdate(dateFormat.parse(codeAndModifier.getStartDate()));
if (todayDate != null && codeAndModifier != null && todayDate.compareTo(dateFormat.parse(codeAndModifier.getStartDate())) >= 0
&& codeAndModifier.isFlag()) {
loincModCd.setIsactive('Y');
} else {
loincModCd.setIsactive('N');
}
} else if (codeAndModifier.getEndDate() != null && !(codeAndModifier.getEndDate().isEmpty())) {
loincModCd.setEnddate(dateFormat.parse(codeAndModifier.getEndDate()));
if (todayDate != null && codeAndModifier != null && todayDate.compareTo(dateFormat.parse(codeAndModifier.getEndDate())) <= 0
&& codeAndModifier.isFlag()) {
loincModCd.setIsactive('Y');
} else {
loincModCd.setIsactive('N');
}
}
} else {
if (todayDate != null && codeAndModifier != null && codeAndModifier.getStartDate() != null && !(codeAndModifier.getStartDate().isEmpty())
&& todayDate.compareTo(dateFormat.parse(codeAndModifier.getStartDate())) >= 0) {
loincModCd.setDatecreated(dateFormat.parse(codeAndModifier.getStartDate()));
} else {
loincModCd.setDatecreated(new Date());
}
loincModCd.setEnddate(new Date());
loincModCd.setIsactive('N');
loincModCd.setIsarchive('Y');
}
if (codeAndModifier.getCd() != null || !StringUtils.isEmpty(codeAndModifier.getCd())) {
loincCodeModDb = loincModCdRepository.findByloincModId(codeAndModifier.getCd());
}
if (loincCodeModDb == null) {
loincModCd.setDatecreated(new Date());
loincModCdResponse = loincModCdRepository.saveAndFlush(loincModCd);
} else {
loincModCd.setLoincModId(loincCodeModDb.getLoincModId());
loincModCdResponse = loincModCdRepository.save(loincModCd);
}
}
}
if (class1.getSimpleName().equalsIgnoreCase(HCCS_CD)) {
for (Object object : listToMap) {
CodeAndModifierRequest codeAndModifier = (CodeAndModifierRequest) object;
HccsCd hccsCodeDb = null;
HccsCd hccsCd = new HccsCd();
hccsCd.setStchccstatuscatCd(codeAndModifier.getStcCd());
hccsCd.setStchccstatuscatCdDesc(codeAndModifier.getStcCdDesc());
hccsCd.setDatemodified(new Date());
if (codeAndModifier.isFlag()) {
hccsCd.setIsactive('Y');
} else {
hccsCd.setIsactive('N');
}
if (!codeAndModifier.isArchive()) {
hccsCd.setIsarchive('N');
if (codeAndModifier.getStartDate() != null && !(codeAndModifier.getStartDate().isEmpty())
&& codeAndModifier.getEndDate() != null && !(codeAndModifier.getEndDate().isEmpty())) {
// Set the active flag accordingly
hccsCd.setStartdate(dateFormat.parse(codeAndModifier.getStartDate()));
hccsCd.setEnddate(dateFormat.parse(codeAndModifier.getEndDate()));
if (todayDate != null && todayDate.compareTo(dateFormat.parse(codeAndModifier.getStartDate())) >= 0
&& todayDate.compareTo(dateFormat.parse(codeAndModifier.getEndDate())) <= 0
&& codeAndModifier.isFlag()) {
logger.info(TODAY_IS_BETWEEN_START_DATE_AND_END_DATE);
hccsCd.setIsactive('Y');
} else {
hccsCd.setIsactive('N');
}
} else if (codeAndModifier.getStartDate() != null && !(codeAndModifier.getStartDate().isEmpty())) {
hccsCd.setStartdate(dateFormat.parse(codeAndModifier.getStartDate()));
if (todayDate != null && todayDate.compareTo(dateFormat.parse(codeAndModifier.getStartDate())) >= 0
&& codeAndModifier.isFlag()) {
hccsCd.setIsactive('Y');
} else {
hccsCd.setIsactive('N');
}
} else if (codeAndModifier.getEndDate() != null && !(codeAndModifier.getEndDate().isEmpty())) {
hccsCd.setEnddate(dateFormat.parse(codeAndModifier.getEndDate()));
if (todayDate != null && todayDate.compareTo(dateFormat.parse(codeAndModifier.getEndDate())) <= 0
&& codeAndModifier.isFlag()) {
hccsCd.setIsactive('Y');
} else {
hccsCd.setIsactive('N');
}
}
} else {
if (codeAndModifier.getStartDate() != null && !(codeAndModifier.getStartDate().isEmpty())
&& todayDate != null && todayDate.compareTo(dateFormat.parse(codeAndModifier.getStartDate())) >= 0) {
hccsCd.setDatecreated(dateFormat.parse(codeAndModifier.getStartDate()));
} else {
hccsCd.setDatecreated(new Date());
}
hccsCd.setEnddate(new Date());
hccsCd.setIsactive('N');
hccsCd.setIsarchive('Y');
}
if (codeAndModifier.getCd() != null || !StringUtils.isEmpty(codeAndModifier.getCd())) {
hccsCodeDb = hccsCdRepository.findByhccsId(codeAndModifier.getCd());
}
if (hccsCodeDb == null) {
hccsCd.setDatecreated(new Date());
logger.info("before saving");
hccsCdResponse = hccsCdRepository.saveAndFlush(hccsCd);
} else {
hccsCd.setHccsId(hccsCodeDb.getHccsId());
hccsCdResponse = hccsCdRepository.save(hccsCd);
}
}
}
} catch (ParseException e1) {
logger.info("New Date cannot be parsed", e1);
}
return loincCdResponse != null || loincModCdResponse != null || hccsCdResponse != null;
}
@Override
public List<String> checkSubmittedModificationsForDupes(GenericRequest codeAndModifierRequest) {
List<String> returnList = new LinkedList<>();
if (codeAndModifierRequest.getLoincModList() != null && !codeAndModifierRequest.getLoincModList().isEmpty()) {
returnList.addAll(checkCodesAndModifiers(codeAndModifierRequest.getLoincModList(), LoincModCd.class));
}
if (codeAndModifierRequest.getLoincList() != null && !codeAndModifierRequest.getLoincList().isEmpty()) {
returnList.addAll(checkCodesAndModifiers(codeAndModifierRequest.getLoincList(), LoincCd.class));
}
if (codeAndModifierRequest.getHccList() != null && !codeAndModifierRequest.getHccList().isEmpty()) {
returnList.addAll(checkCodesAndModifiers(codeAndModifierRequest.getHccList(), HccsCd.class));
}
return returnList;
}
private List<String> checkCodesAndModifiers(List<?> listToCheck, Class<?> class1) {
List<String> errorList = new LinkedList<>();
if (class1.getSimpleName().equalsIgnoreCase(HCCS_CD)) {
for (Object object : listToCheck) {
CodeAndModifierRequest codeAndModifier = (CodeAndModifierRequest) object;
if (codeAndModifier != null
&& (codeAndModifier.getCd() == null || StringUtils.isEmpty(codeAndModifier.getCd()))) {
HccsCd lookedUpHccsCd = hccsCdRepository.findOneByStchccstatuscatCd(codeAndModifier.getStcCd());
if (lookedUpHccsCd != null) {
logger.warn(String.format("Found an already existing item for request: %s",
codeAndModifier.toString()));
errorList.add(addDuplicateCodeError(codeAndModifier, class1));
}
}
}
}
if (class1.getSimpleName().equalsIgnoreCase(LOINC_CD)) {
for (Object object : listToCheck) {
CodeAndModifierRequest codeAndModifier = (CodeAndModifierRequest) object;
if (codeAndModifier != null
&& (codeAndModifier.getCd() == null || StringUtils.isEmpty(codeAndModifier.getCd()))) {
LoincCd lookedUpHccsCd = loincCdRepository.findOneByStcloincCd(codeAndModifier.getStcCd());
if (lookedUpHccsCd != null) {
errorList.add(addDuplicateCodeError(codeAndModifier, class1));
}
}
}
}
if (class1.getSimpleName().equalsIgnoreCase(LOINC_MOD_CD)) {
for (Object object : listToCheck) {
CodeAndModifierRequest codeAndModifier = (CodeAndModifierRequest) object;
if (codeAndModifier != null
&& (codeAndModifier.getCd() == null || StringUtils.isEmpty(codeAndModifier.getCd()))) {
LoincModCd lookedUpHccsCd = loincModCdRepository.findOneByStcloincCdMod(codeAndModifier.getStcCd());
if (lookedUpHccsCd != null) {
errorList.add(addDuplicateCodeError(codeAndModifier, class1));
}
}
}
}
return errorList;
}
private String addDuplicateCodeError(CodeAndModifierRequest codeAndModifier, Class<?> class1) {
String formalCodeName = null;
switch (class1.getSimpleName().toLowerCase(Locale.ENGLISH)) {
case HCCS_CD:
formalCodeName = "HCCS Code";
break;
case LOINC_CD:
formalCodeName = "LOINC Code";
break;
case LOINC_MOD_CD:
formalCodeName = "LOINC Modifier Code";
break;
default:
break;
}
return String.format("Duplicate Found: %s of type %s ", codeAndModifier.getStcCd(), formalCodeName);
}
@Override
public List<String> getArchivedCodes(GenericRequest codeAndModifierRequest) {
List<String> returnList = new LinkedList<>();
if (codeAndModifierRequest.getLoincModList() != null && !codeAndModifierRequest.getLoincModList().isEmpty()) {
returnList.addAll(
checkCodesAndModifiersToRemoveArchive(codeAndModifierRequest.getLoincModList(), LoincModCd.class));
}
if (codeAndModifierRequest.getLoincList() != null && !codeAndModifierRequest.getLoincList().isEmpty()) {
returnList.addAll(
checkCodesAndModifiersToRemoveArchive(codeAndModifierRequest.getLoincList(), LoincCd.class));
}
if (codeAndModifierRequest.getHccList() != null && !codeAndModifierRequest.getHccList().isEmpty()) {
returnList.addAll(checkCodesAndModifiersToRemoveArchive(codeAndModifierRequest.getHccList(), HccsCd.class));
}
return returnList;
}
private List<String> checkCodesAndModifiersToRemoveArchive(List<?> listToCheck, Class<?> class1) {
List<String> errorList = new LinkedList<>();
if (class1.getSimpleName().equalsIgnoreCase(HCCS_CD)) {
for (Object object : listToCheck) {
CodeAndModifierRequest codeAndModifier = (CodeAndModifierRequest) object;
if (codeAndModifier != null
&& !(codeAndModifier.getCd() == null || StringUtils.isEmpty(codeAndModifier.getCd()))) {
HccsCd lookedUpHccsCd = hccsCdRepository.findOneByStchccstatuscatCd(codeAndModifier.getStcCd());
if (lookedUpHccsCd != null && lookedUpHccsCd.getIsarchive() != null
&& lookedUpHccsCd.getIsarchive().equals('Y')) {
logger.warn(String.format("Found an already existing item for request: %s",
codeAndModifier.toString()));
errorList.add(addDuplicateCodeError(codeAndModifier, class1));
}
}
}
}
if (class1.getSimpleName().equalsIgnoreCase(LOINC_CD)) {
for (Object object : listToCheck) {
CodeAndModifierRequest codeAndModifier = (CodeAndModifierRequest) object;
if (codeAndModifier != null
&& !(codeAndModifier.getCd() == null || StringUtils.isEmpty(codeAndModifier.getCd()))) {
LoincCd lookedUpHccsCd = loincCdRepository.findOneByStcloincCd(codeAndModifier.getStcCd());
if (lookedUpHccsCd != null && lookedUpHccsCd.getIsarchive() != null
&& lookedUpHccsCd.getIsarchive().equals('Y')) {
errorList.add(addDuplicateCodeError(codeAndModifier, class1));
}
}
}
}
if (class1.getSimpleName().equalsIgnoreCase(LOINC_MOD_CD)) {
for (Object object : listToCheck) {
CodeAndModifierRequest codeAndModifier = (CodeAndModifierRequest) object;
if (codeAndModifier != null
&& !(codeAndModifier.getCd() == null || StringUtils.isEmpty(codeAndModifier.getCd()))) {
LoincModCd lookedUpHccsCd = loincModCdRepository.findOneByStcloincCdMod(codeAndModifier.getStcCd());
if (lookedUpHccsCd != null && lookedUpHccsCd.getIsarchive() != null
&& lookedUpHccsCd.getIsarchive().equals('Y')) {
errorList.add(addDuplicateCodeError(codeAndModifier, class1));
}
}
}
}
return errorList;
}
/*
* private String getClaimLineBridgeName(LoincTypeLookup claimLineBridge) {
* if (claimLineBridge.getId() == 1) { return "Claim"; } else if
* (claimLineBridge.getId() == 2) { return "Line"; } else if
* (claimLineBridge.getId() == 3) { return "Both"; } return null; }
*/
}