diff --git a/src/main/java/com/iemr/hwc/fhir/dto/historyDetails/pastHistory/PastHistoryDTO.java b/src/main/java/com/iemr/hwc/fhir/dto/historyDetails/pastHistory/PastHistoryDTO.java index 259bb6da..1fb78624 100644 --- a/src/main/java/com/iemr/hwc/fhir/dto/historyDetails/pastHistory/PastHistoryDTO.java +++ b/src/main/java/com/iemr/hwc/fhir/dto/historyDetails/pastHistory/PastHistoryDTO.java @@ -5,6 +5,7 @@ @Data public class PastHistoryDTO { + private Long id; private String beneficiaryRegID; private Integer providerServiceMapID; private String benVisitID; @@ -12,6 +13,8 @@ public class PastHistoryDTO { private String createdBy; private Integer vanID; private Integer parkingPlaceID; + private Long benFlowID; + private Long beneficiaryID; private List pastIllness; private List pastSurgery; } diff --git a/src/main/java/com/iemr/hwc/fhir/provider/observation/ObservationExtProvider.java b/src/main/java/com/iemr/hwc/fhir/provider/observation/ObservationExtProvider.java index 67697a87..35e666ee 100644 --- a/src/main/java/com/iemr/hwc/fhir/provider/observation/ObservationExtProvider.java +++ b/src/main/java/com/iemr/hwc/fhir/provider/observation/ObservationExtProvider.java @@ -1,16 +1,26 @@ package com.iemr.hwc.fhir.provider.observation; import ca.uhn.fhir.rest.annotation.Create; +import ca.uhn.fhir.rest.annotation.RequiredParam; import ca.uhn.fhir.rest.annotation.ResourceParam; +import ca.uhn.fhir.rest.annotation.Search; import ca.uhn.fhir.rest.api.MethodOutcome; +import ca.uhn.fhir.rest.param.DateParam; +import ca.uhn.fhir.rest.param.StringParam; import ca.uhn.fhir.rest.server.IResourceProvider; +import com.iemr.hwc.fhir.dto.historyDetails.pastHistory.PastHistoryDTO; +import com.iemr.hwc.fhir.dto.historyDetails.pastHistory.PastIllnessDTO; +import com.iemr.hwc.fhir.dto.historyDetails.pastHistory.PastSurgeryDTO; import com.iemr.hwc.fhir.model.observation.ObservationExt; import com.iemr.hwc.fhir.service.observation.ObservationService; import org.hl7.fhir.instance.model.api.IBaseResource; -import org.hl7.fhir.r4.model.OperationOutcome; +import org.hl7.fhir.r4.model.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; @Component public class ObservationExtProvider implements IResourceProvider { @@ -33,4 +43,105 @@ public MethodOutcome createObservation(HttpServletRequest theRequest, @ResourceP method.setResource(observationService.createObservation(theRequest,observationExt)); return method; } + + @Search() + public List findHistoryByLocationAndLastModifDate(@RequiredParam(name = "providerServiceMapId") StringParam providerServiceMapId, @RequiredParam(name = "vanID") StringParam vanID, + @RequiredParam(name = "lastModif") DateParam lastModifyDate) { + List listRes = new ArrayList<>(); + List ListHistoryDTO = observationService.getBenMedHistoryByLocationAndLastModifDate(Integer.parseInt(providerServiceMapId.getValue()), Integer.parseInt(vanID.getValue()), + new Timestamp(lastModifyDate.getValue().getTime())); + try { + for (int i = 0; i < ListHistoryDTO.size(); i++) { + PastHistoryDTO historyDTO = ListHistoryDTO.get(i); + ObservationExt historyObservation = new ObservationExt(); + historyObservation.setId(historyDTO.getId()+""); + historyObservation.setVanID(new StringType(historyDTO.getVanID()+"")); + historyObservation.setParkingPlaceID(new StringType(historyDTO.getParkingPlaceID()+"")); + historyObservation.setCreatedBy(new StringType(historyDTO.getCreatedBy())); + historyObservation.setProviderServiceMapId(new StringType(historyDTO.getProviderServiceMapID()+"")); + historyObservation.setBeneficiaryRegID(new StringType(historyDTO.getBeneficiaryRegID()+"")); + historyObservation.setBeneficiaryID(new StringType(historyDTO.getBeneficiaryID()+"")); + historyObservation.setBenFlowID(new StringType(historyDTO.getBenFlowID()+"")); + + List codeableConceptList1 = new ArrayList<>(); + CodeableConcept codeableConcept1 = new CodeableConcept(); + codeableConcept1.setText("History"); + List codingList1 = new ArrayList<>(); + Coding coding1 = new Coding(); + coding1.setSystem("http://terminology.hl7.org/CodeSystem/observation-category"); + coding1.setCode("social-history"); + coding1.setDisplay("Social History"); + codingList1.add(coding1); + codeableConcept1.setCoding(codingList1); + codeableConceptList1.add(codeableConcept1); + historyObservation.setCategory(codeableConceptList1); + + CodeableConcept codeableConcept2 = new CodeableConcept(); + codeableConcept2.setText("Past medical history"); + List codingList2 = new ArrayList<>(); + Coding coding2 = new Coding(); + coding2.setSystem("http://loinc.org/"); + coding2.setCode("11348-0"); + coding2.setDisplay("Past medical history"); + codingList2.add(coding2); + codeableConcept2.setCoding(codingList2); + historyObservation.setCode(codeableConcept2); + + + List listComponent = new ArrayList<>(); + List pastIllnessDTOList = historyDTO.getPastIllness(); + List pastSurgeryDTOList = historyDTO.getPastSurgery(); + if(pastIllnessDTOList!=null && !pastIllnessDTOList.isEmpty()){ + for (int j = 0; j < pastIllnessDTOList.size(); j++) { + Observation.ObservationComponentComponent observation1 = new Observation.ObservationComponentComponent(); + CodeableConcept codeableConcept3 = new CodeableConcept(); + List codingList3 = new ArrayList<>(); + Coding coding3 = new Coding(); + coding3.setCode(pastIllnessDTOList.get(j).getIllnessTypeID()); + coding3.setDisplay(pastIllnessDTOList.get(j).getIllnessType()); + codingList3.add(coding3); + codeableConcept3.setCoding(codingList3); + codeableConcept3.setText("pastIllness"); + observation1.setCode(codeableConcept3); + Type type = new Quantity(); + if(pastIllnessDTOList.get(j).getTimePeriodAgo() !=null && !pastIllnessDTOList.get(j).getTimePeriodAgo().equals("null")){ + type = new Quantity(Quantity.QuantityComparator.NULL, 0L, "", pastIllnessDTOList.get(j).getTimePeriodAgo(), pastIllnessDTOList.get(j).getTimePeriodUnit()); + } + observation1.setValue(type); + listComponent.add(observation1); + } + } + + if(pastSurgeryDTOList!=null && !pastSurgeryDTOList.isEmpty()){ + for (int j = 0; j < pastSurgeryDTOList.size(); j++) { + Observation.ObservationComponentComponent observation2 = new Observation.ObservationComponentComponent(); + CodeableConcept codeableConcept3 = new CodeableConcept(); + List codingList3 = new ArrayList<>(); + Coding coding3 = new Coding(); + coding3.setCode(pastSurgeryDTOList.get(j).getSurgeryID()); + coding3.setDisplay(pastSurgeryDTOList.get(j).getSurgeryType()); + codingList3.add(coding3); + codeableConcept3.setCoding(codingList3); + codeableConcept3.setText("pastSurgery"); + observation2.setCode(codeableConcept3); + Type type = new Quantity(); + if(pastSurgeryDTOList.get(j).getTimePeriodAgo() !=null && !pastSurgeryDTOList.get(j).getTimePeriodAgo().equals("null")){ + type = new Quantity(Quantity.QuantityComparator.NULL, 0L, "", pastSurgeryDTOList.get(j).getTimePeriodAgo(), pastSurgeryDTOList.get(j).getTimePeriodUnit()); + } + observation2.setValue(type); + listComponent.add(observation2); + } + } + + historyObservation.setComponent(listComponent); + + listRes.add(historyObservation); + } + } + catch (Exception e){ + + } + + return listRes; + } } diff --git a/src/main/java/com/iemr/hwc/fhir/service/observation/ObservationService.java b/src/main/java/com/iemr/hwc/fhir/service/observation/ObservationService.java index 269e6619..2e856fa4 100644 --- a/src/main/java/com/iemr/hwc/fhir/service/observation/ObservationService.java +++ b/src/main/java/com/iemr/hwc/fhir/service/observation/ObservationService.java @@ -1,8 +1,12 @@ package com.iemr.hwc.fhir.service.observation; +import com.iemr.hwc.fhir.dto.historyDetails.pastHistory.PastHistoryDTO; import com.iemr.hwc.fhir.model.observation.ObservationExt; import javax.servlet.http.HttpServletRequest; +import java.sql.Timestamp; +import java.util.List; public interface ObservationService { ObservationExt createObservation(HttpServletRequest theRequest, ObservationExt observationExt) throws Exception; + public List getBenMedHistoryByLocationAndLastModifDate(Integer providerServiceMapId, Integer vanID, Timestamp lastModifDate); } diff --git a/src/main/java/com/iemr/hwc/fhir/service/observation/ObservationServiceImpl.java b/src/main/java/com/iemr/hwc/fhir/service/observation/ObservationServiceImpl.java index 9eef415f..c650be88 100644 --- a/src/main/java/com/iemr/hwc/fhir/service/observation/ObservationServiceImpl.java +++ b/src/main/java/com/iemr/hwc/fhir/service/observation/ObservationServiceImpl.java @@ -9,6 +9,8 @@ import com.iemr.hwc.data.anc.BenMedHistory; import com.iemr.hwc.data.benFlowStatus.BeneficiaryFlowStatus; import com.iemr.hwc.fhir.dto.historyDetails.pastHistory.PastHistoryDTO; +import com.iemr.hwc.fhir.dto.historyDetails.pastHistory.PastIllnessDTO; +import com.iemr.hwc.fhir.dto.historyDetails.pastHistory.PastSurgeryDTO; import com.iemr.hwc.fhir.dto.mandatoryFieldsDTO.MandatoryFieldsDTO; import com.iemr.hwc.fhir.dto.vitalDetails.VitalDetailsDTO; import com.iemr.hwc.fhir.model.observation.ObservationExt; @@ -16,6 +18,8 @@ import com.iemr.hwc.fhir.utils.mapper.MapperUtils; import com.iemr.hwc.fhir.utils.validation.ObservationValidation; import com.iemr.hwc.repo.benFlowStatus.BeneficiaryFlowStatusRepo; +import com.iemr.hwc.repo.nurse.anc.BenMedHistoryRepo; +import com.iemr.hwc.service.anc.Utility; import com.iemr.hwc.service.common.transaction.CommonNurseServiceImpl; import com.iemr.hwc.service.generalOPD.GeneralOPDServiceImpl; import com.iemr.hwc.utils.exception.IEMRException; @@ -26,6 +30,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; @Service public class ObservationServiceImpl implements ObservationService{ @@ -46,6 +54,9 @@ public class ObservationServiceImpl implements ObservationService{ @Autowired private CommonNurseServiceImpl commonNurseService; + @Autowired + private BenMedHistoryRepo benMedHistoryRepo; + @Override public ObservationExt createObservation(HttpServletRequest theRequest, ObservationExt observationExt) throws Exception{ @@ -150,4 +161,58 @@ private ObservationExt createOrUpdateHistoryFromObservation(HttpServletRequest t return observationExt; } + + @Override + public List getBenMedHistoryByLocationAndLastModifDate(Integer providerServiceMapId, Integer vanID, Timestamp lastModifDate){ + List pastHistoryDTOList = new ArrayList<>(); + List listHistory = benMedHistoryRepo.getBenMedHistoryByLocationAndLastModDate(providerServiceMapId, vanID, lastModifDate); + System.out.println("listHistory size "+listHistory.size()); + if(listHistory != null && !listHistory.isEmpty()){ + for (int i = 0; i < listHistory.size(); i++) { + PastHistoryDTO pastHistoryDTO = new PastHistoryDTO(); + BenMedHistory benMedHistory = listHistory.get(i); + BeneficiaryFlowStatus beneficiaryFlowStatus = beneficiaryFlowStatusRepo.getBenFlowByVisitIDAndVisitCode(benMedHistory.getBenVisitID(), benMedHistory.getVisitCode()); + if(beneficiaryFlowStatus !=null){ + pastHistoryDTO.setBenFlowID(beneficiaryFlowStatus.getBenFlowID()); + pastHistoryDTO.setBeneficiaryID(beneficiaryFlowStatus.getBeneficiaryID()); + } + pastHistoryDTO.setId(benMedHistory.getBenMedHistoryID()); + pastHistoryDTO.setVanID(benMedHistory.getVanID()); + pastHistoryDTO.setParkingPlaceID(benMedHistory.getParkingPlaceID()); + pastHistoryDTO.setProviderServiceMapID(benMedHistory.getProviderServiceMapID()); + pastHistoryDTO.setCreatedBy(benMedHistory.getCreatedBy()); + pastHistoryDTO.setBeneficiaryRegID(benMedHistory.getBeneficiaryRegID()+""); + + List pastIllnessDTOList = new ArrayList<>(); + PastIllnessDTO illnessDTO = new PastIllnessDTO(); + illnessDTO.setIllnessTypeID(benMedHistory.getIllnessTypeID()+""); + illnessDTO.setIllnessType(benMedHistory.getIllnessType()); + illnessDTO.setOtherIllnessType(benMedHistory.getOtherIllnessType()); + Map timePeriodIllness = Utility.convertTimeToWords(benMedHistory.getYearofIllness(), benMedHistory.getCreatedDate()); + if(timePeriodIllness !=null){ + illnessDTO.setTimePeriodAgo(timePeriodIllness.get("timePeriodAgo") +""); + illnessDTO.setTimePeriodUnit(timePeriodIllness.get("timePeriodUnit")+""); + } + pastIllnessDTOList.add(illnessDTO); + pastHistoryDTO.setPastIllness(pastIllnessDTOList); + + List pastSurgeryDTOList = new ArrayList<>(); + PastSurgeryDTO surgeryDTO = new PastSurgeryDTO(); + surgeryDTO.setSurgeryID(benMedHistory.getSurgeryID()+""); + surgeryDTO.setSurgeryType(benMedHistory.getSurgeryType()); + surgeryDTO.setOtherSurgeryType(benMedHistory.getOtherSurgeryType()); + Map timePeriodSurgery = Utility.convertTimeToWords(benMedHistory.getYearofSurgery(), benMedHistory.getCreatedDate()); + if(timePeriodSurgery!=null){ + surgeryDTO.setTimePeriodAgo(timePeriodSurgery.get("timePeriodAgo")+""); + surgeryDTO.setTimePeriodUnit(timePeriodSurgery.get("timePeriodUnit")+""); + } + pastSurgeryDTOList.add(surgeryDTO); + pastHistoryDTO.setPastSurgery(pastSurgeryDTOList); + + pastHistoryDTOList.add(pastHistoryDTO); + } + } + + return pastHistoryDTOList; + } } diff --git a/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java b/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java index 139126e2..513a0a2b 100644 --- a/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java +++ b/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java @@ -451,4 +451,7 @@ public int updateLabTechnicianFlag(@Param("lab_technician_flag") Short lab_techn // get visit by location and modify_date @Query("SELECT t from BeneficiaryFlowStatus t WHERE t.villageID = :villageID AND t.modified_date > :lastModDate ORDER BY t.visitDate DESC ") public ArrayList getVisitByLocationAndLastModifDate(@Param("villageID") Integer villageID, @Param("lastModDate") Timestamp lastModDate); + + @Query("SELECT t FROM BeneficiaryFlowStatus t Where t.benVisitID = :benVisitID AND t.visitCode = :visitCode") + public BeneficiaryFlowStatus getBenFlowByVisitIDAndVisitCode(@Param("benVisitID") Long benVisitID, @Param("visitCode") Long visitCode); } diff --git a/src/main/java/com/iemr/hwc/repo/nurse/anc/BenMedHistoryRepo.java b/src/main/java/com/iemr/hwc/repo/nurse/anc/BenMedHistoryRepo.java index e24be40f..4ae29f69 100644 --- a/src/main/java/com/iemr/hwc/repo/nurse/anc/BenMedHistoryRepo.java +++ b/src/main/java/com/iemr/hwc/repo/nurse/anc/BenMedHistoryRepo.java @@ -21,7 +21,9 @@ */ package com.iemr.hwc.repo.nurse.anc; +import java.sql.Timestamp; import java.util.ArrayList; +import java.util.List; import javax.transaction.Transactional; @@ -62,4 +64,6 @@ public ArrayList getBenMedHistoryStatus(@Param("benRegID") Long benReg + " (illnessTypeID IN (11, 13, 15, 16, 17) OR surgeryID IN (5, 15, 16 )) AND deleted is false ") public ArrayList getHRPStatus(@Param("benRegID") Long benRegID); + @Query("select v from BenMedHistory v where (v.providerServiceMapID = :providerServiceMapId OR v.vanID = :vanID) AND v.lastModDate> :lastModDate ORDER BY v.lastModDate DESC") + public List getBenMedHistoryByLocationAndLastModDate(@Param("providerServiceMapId") Integer providerServiceMapId, @Param("vanID") Integer vanID, @Param("lastModDate") Timestamp lastModDate); }