Summary Table
Categories |
Total Count |
PII |
0 |
URL |
0 |
DNS |
0 |
EKL |
0 |
IP |
0 |
PORT |
0 |
VsID |
0 |
CF |
0 |
AI |
0 |
VPD |
0 |
PL |
0 |
Other |
0 |
File Content
package gov.va.med.ewv.service.impl;
import java.util.ArrayList;
import java.util.List;
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 gov.va.med.ars.dao.ewv.IEwvClaimRepository;
import gov.va.med.ars.dao.ewv.IEwvLinkedPdisRepository;
import gov.va.med.ars.exceptions.GenericException;
import gov.va.med.domain.ewv.EwvClaims;
import gov.va.med.domain.ewv.EwvLinkedPdis;
import gov.va.med.ewv.bean.LinkedPdis;
import gov.va.med.ewv.model.response.EwvClaimDetailResponse;
import gov.va.med.ewv.model.response.PatientHeaderInfo;
import gov.va.med.ewv.service.IEwvAmbulanceAndServiceLinesInfoService;
import gov.va.med.ewv.service.IEwvBillingMiscInfoService;
import gov.va.med.ewv.service.IEwvClaimService;
import gov.va.med.ewv.service.IEwvDiagnosisCodesInfoService;
import gov.va.med.ewv.service.IEwvE_CodesInfoService;
import gov.va.med.ewv.service.IEwvHealthCareInfoService;
import gov.va.med.ewv.service.IEwvOhiService;
import gov.va.med.ewv.service.IEwvPatientAndVendorInfoService;
import gov.va.med.ewv.service.IEwvProcedureCodesInfoService;
import gov.va.med.ewv.util.ClaimType;
import gov.va.med.ewv.util.PdiFilterUtil;
import gov.va.med.ewv.util.ServiceLine;
/**
* Service class used to obtain an EWV Claim from the EWV Database.
*/
@Service
public class EwvClaimServiceImpl implements IEwvClaimService {
private static final Logger logger = LogManager.getLogger(EwvClaimServiceImpl.class);
@Autowired
IEwvClaimRepository ewvClaimRepository;
@Autowired
IEwvLinkedPdisRepository ewvLinkedPdisRepository;
@Autowired
IEwvPatientAndVendorInfoService ewvPatientAndVendorInfoService;
@Autowired
IEwvBillingMiscInfoService ewvBillingMiscInfoService;
@Autowired
IEwvAmbulanceAndServiceLinesInfoService ewvBillingAndServiceLinesInfoService;
@Autowired
IEwvDiagnosisCodesInfoService ewvDiagnosisCodesInfoService;
@Autowired
IEwvHealthCareInfoService ewvHealthCareInfoService;
@Autowired
IEwvProcedureCodesInfoService ewvProcedureCodesInfoService;
@Autowired
IEwvAmbulanceAndServiceLinesInfoService ewvAmbulanceAndServiceLinesInfoService;
@Autowired
IEwvOhiService ewvOhiService;
@Autowired
IEwvE_CodesInfoService ewvE_CodesInfoService;
/**
* Gets an EWV Claim that in the EWV Database that has the given PDI Number.
*
* @param unfilteredPdiNumber - the PDI Number of the EWV Claim of interest
*
* @return - instance of EwvClaimDetailResponse Java class that contains information pertaining
* to the EWV Claim of interest
*
* @throws GenericException - if some error occurs
*/
@Override
public EwvClaimDetailResponse getEwvClaim(String unfilteredPdiNumber) throws GenericException {
EwvClaimDetailResponse ewvClaimDetailResponse = new EwvClaimDetailResponse();
List<EwvLinkedPdis> originalPdis = new ArrayList <EwvLinkedPdis> ();
List<EwvLinkedPdis> currentPdis = new ArrayList <EwvLinkedPdis> ();
PatientHeaderInfo patientHeaderInfo = new PatientHeaderInfo();
PdiFilterUtil ewvFilterUtil = new PdiFilterUtil();
String pdiNumber = ewvFilterUtil.filterPdiNumber(unfilteredPdiNumber);
logger.debug("Invoking ewvClaimRepository.getEwvClaimByPdiNumber for pdiNumber : " + pdiNumber);
EwvClaims claim = ewvClaimRepository.getEwvClaimByPdiNumber(pdiNumber);
if(claim == null) {
String errorDescription = "PDI number " + unfilteredPdiNumber + " cannot be found.";
logger.info(errorDescription);
throw new GenericException("ERROR", errorDescription, HttpStatus.NOT_FOUND);
} else {
try {
ClaimType claimType = ClaimType.typeOf(claim.getClaimType());
// construct the claim detail response
ewvClaimDetailResponse.setPatientHeaderInfo(ewvPatientAndVendorInfoService.populatePatientHeaderInfo(claim));
ewvClaimDetailResponse.setPatientInfo(ewvPatientAndVendorInfoService.populatePatientInfo(claim));
ewvClaimDetailResponse.setServiceLocationInfo(ewvPatientAndVendorInfoService.populateServiceLocationInfo(claim));
ewvClaimDetailResponse.setBillingProviderInfo(ewvPatientAndVendorInfoService.populateBillingProviderInfo(claim));
ewvClaimDetailResponse.setBillingMiscellanous(ewvBillingMiscInfoService.populateBillingAndAdmissionInfo(claimType, claim));
ewvClaimDetailResponse.setDiagnosisCodesInfo(ewvDiagnosisCodesInfoService.populateDiagnosisCodes(claim));
ewvClaimDetailResponse.setProcedureCodesInfo(ewvProcedureCodesInfoService.populateProcedureCodesContainer(claim));
ewvClaimDetailResponse.setE_CodesInfo(ewvE_CodesInfoService.populateECodesContainer(claim));
ewvClaimDetailResponse.setHealthCareInfo(ewvHealthCareInfoService.populateHealthCareInfoResponse(claim));
ewvClaimDetailResponse.setServiceLinesInfo(ewvAmbulanceAndServiceLinesInfoService.populateServiceLines(claim));
ewvClaimDetailResponse.setClaimLevelAmbulanceInfo(ewvAmbulanceAndServiceLinesInfoService.populateClaimLevelAmbulanceInfo(claim));
ewvClaimDetailResponse.setOhiInfo(ewvOhiService.getOhiData(claim));
if (ewvClaimDetailResponse != null) {
patientHeaderInfo = ewvClaimDetailResponse.getPatientHeaderInfo();
}
originalPdis = ewvLinkedPdisRepository.findByOriginalPdi(pdiNumber);
currentPdis = ewvLinkedPdisRepository.findByCurrentPdi(pdiNumber);
LinkedPdis linkedPdis = null;
if (originalPdis != null && originalPdis.size() > 0) {
for (EwvLinkedPdis ewvLinkedPdis : originalPdis) {
/*
* Loop through the result set returned using
* originalpdis
*/
/*
* If the PDI being requested is in the Original Column,
* it's an original PDI. Submit the Current_PDI returned
* from the lookup*/
if( patientHeaderInfo != null)
{
linkedPdis = new LinkedPdis();
logger.debug("ewvLinkedPdis.getOriginalPdi() = " + ewvLinkedPdis.getOriginalPdi());
logger.debug("ewvLinkedPdis.getCurrentPdi() = " + ewvLinkedPdis.getCurrentPdi());
linkedPdis.setOriginalPdi(ewvLinkedPdis.getOriginalPdi());
linkedPdis.setCurrentPdi(ewvLinkedPdis.getCurrentPdi());
}
break;
}
}
if (currentPdis != null && currentPdis.size() > 0) {
for (EwvLinkedPdis ewvLinkedPdis : currentPdis) {
/*
* Loop through the result set returned using current
* pdis
*/
/*
* If the PDI being requested is in the Current_PDI
* Column, it's an Current PDI. Submit the Original PDI
* returned from the lookup
*/
if (patientHeaderInfo != null) {
if (linkedPdis == null) {
linkedPdis = new LinkedPdis();
}
logger.debug("ewvLinkedPdis.getOriginalPdi() = " + ewvLinkedPdis.getOriginalPdi());
logger.debug("ewvLinkedPdis.getCurrentPdi() = " + ewvLinkedPdis.getCurrentPdi());
linkedPdis.setOriginalPdi(ewvLinkedPdis.getOriginalPdi());
linkedPdis.setCurrentPdi(ewvLinkedPdis.getCurrentPdi());
}
break;
}
}
if (linkedPdis != null) {
if (patientHeaderInfo != null) {
patientHeaderInfo.setLinkedPdis(linkedPdis);
}
}
if (ewvClaimDetailResponse != null) {
ewvClaimDetailResponse.setPatientHeaderInfo(patientHeaderInfo);
}
} catch (Throwable e) {
// e.printStackTrace();
String errorDescription = "Claim retrieval for pdiNumber " + unfilteredPdiNumber + " failed with exception : " + e;
logger.error(errorDescription);
e.printStackTrace();
throw new GenericException("ERROR", errorDescription, HttpStatus.BAD_REQUEST);
}
}
logger.debug(" Returning the ewvClaimDetailResponse " + ewvClaimDetailResponse);
return ewvClaimDetailResponse;
}
}