From f36e2d8d85f090d078859bad9dcd90c72174fefa Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 14 Oct 2026 15:15:53 +0530 Subject: [PATCH 01/11] fix mda incentive logic --- .../flw/service/impl/CampaignServiceImpl.java | 32 ++++++- .../impl/DiseaseControlServiceImpl.java | 85 +++++++++++++------ 2 files changed, 88 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index a97898b1..ffacf0a3 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -459,7 +459,7 @@ private void checkMonthlyPulsePolioIncentive(Integer ashaId,LocalDate startDate, private void checkMonthlyFilariasisIncentive(Integer ashaId,LocalDate startDate,LocalDate endDate) { IncentiveActivity FILARIASIS_MEDICINE_DISTRIBUTION = incentivesRepo.findIncentiveMasterByNameAndGroup("FILARIASIS_MEDICINE_DISTRIBUTION", GroupName.ACTIVITY.getDisplayName()); if (FILARIASIS_MEDICINE_DISTRIBUTION != null) { - addAshaIncentiveRecord(FILARIASIS_MEDICINE_DISTRIBUTION, ashaId,startDate,endDate); + addAshaIncentiveRecordMda(FILARIASIS_MEDICINE_DISTRIBUTION, ashaId,startDate,endDate); } } @@ -502,5 +502,35 @@ record = new IncentiveActivityRecord(); } } + + private void addAshaIncentiveRecordMda(IncentiveActivity incentiveActivity, Integer ashaId,LocalDate startDate,LocalDate endDate) { + + Timestamp startOfMonth = Timestamp.valueOf(startDate.atStartOfDay()); + Timestamp endOfMonth = Timestamp.valueOf(endDate.atStartOfDay()); + + IncentiveActivityRecord record = recordRepo.findRecordByActivityIdCreatedDateBenId( + incentiveActivity.getId(), + endOfMonth, + 0L,ashaId + + ); + + + if (record == null) { + record = new IncentiveActivityRecord(); + record.setActivityId(incentiveActivity.getId()); + record.setCreatedDate(endOfMonth); + record.setCreatedBy(userServiceRoleRepo.getUserNamedByUserId(ashaId)); + record.setStartDate(endOfMonth); + record.setEndDate(endOfMonth); + record.setUpdatedDate(endOfMonth); + record.setUpdatedBy(userServiceRoleRepo.getUserNamedByUserId(ashaId)); + record.setBenId(0L); + record.setAshaId(ashaId); + record.setAmount(Long.valueOf(incentiveActivity.getRate())); + recordRepo.save(record); + } + } + } diff --git a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java index 08caccd0..4cbfeb87 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -48,6 +48,7 @@ import java.sql.Timestamp; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -352,41 +353,51 @@ private LeprosyFollowUp saveLeprosyFollowUpData(LeprosyFollowUpDTO data) { entity.setLastModDate( data.getLastModDate() != null ? data.getLastModDate() : new Timestamp(System.currentTimeMillis())); if(!leprosyFollowUpRepository.findByBenId(entity.getBenId()).isEmpty()){ - if(leprosyFollowUpRepository.findByBenId(entity.getBenId()).size()>=6 && leprosyFollowUpRepository.findByBenId(entity.getBenId()).size()<=12){ - Integer userId = userRepo.getUserIdByName(entity.getCreatedBy()); - IncentiveActivityRecord incentiveActivityRecord = - incentiveLogicService.incentiveForLeprosyPaucibacillaryConfirmed( - entity.getBenId(), - entity.getTreatmentEndDate(), - entity.getTreatmentEndDate(), - userId); - - if (incentiveActivityRecord != null) { - logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", - incentiveActivityRecord.getId()); - } else { - logger.info("Incentive not created"); + if(entity.getTypeOfLeprosy().equals("PB (Paucibacillary)")){ + if(leprosyFollowUpRepository.findByBenId(entity.getBenId()).size()>=6 && leprosyFollowUpRepository.findByBenId(entity.getBenId()).size()<=12){ + Integer userId = userRepo.getUserIdByName(entity.getCreatedBy()); + IncentiveActivityRecord incentiveActivityRecord = + incentiveLogicService.incentiveForLeprosyPaucibacillaryConfirmed( + entity.getBenId(), + entity.getTreatmentEndDate(), + entity.getTreatmentEndDate(), + userId); + + if (incentiveActivityRecord != null) { + logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", + incentiveActivityRecord.getId()); + } else { + logger.info("Incentive not created"); + } } } + } if(!leprosyFollowUpRepository.findByBenId(entity.getBenId()).isEmpty()){ - if(leprosyFollowUpRepository.findByBenId(entity.getBenId()).size()>=12){ - Integer userId = userRepo.getUserIdByName(entity.getCreatedBy()); - IncentiveActivityRecord incentiveActivityRecord = - incentiveLogicService.incentiveForLeprosyMultibacillaryConfirmed( - entity.getBenId(), - entity.getTreatmentEndDate(), - entity.getTreatmentEndDate(), - userId); - - if (incentiveActivityRecord != null) { - logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", - incentiveActivityRecord.getId()); - } else { - logger.info("Incentive not created"); + if(entity.getTypeOfLeprosy().equals("MB (Multibacillary)")) { + if (entity.getTreatmentStartDate() != null && entity.getTreatmentEndDate() != null) { + if (isEligibleForIncentive(entity.getTreatmentStartDate(), entity.getTreatmentEndDate())) { + Integer userId = userRepo.getUserIdByName(entity.getCreatedBy()); + IncentiveActivityRecord incentiveActivityRecord = + incentiveLogicService.incentiveForLeprosyMultibacillaryConfirmed( + entity.getBenId(), + entity.getTreatmentEndDate(), + entity.getTreatmentEndDate(), + userId); + + if (incentiveActivityRecord != null) { + logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", + incentiveActivityRecord.getId()); + } else { + logger.info("Incentive not created"); + } + } } } + + + } return entity; } @@ -401,6 +412,24 @@ public String saveLeprosyFollowUp(LeprosyFollowUpDTO dto) { } + public boolean isEligibleForIncentive(Date treatmentStartDate, Date endDate) { + + if (treatmentStartDate == null || endDate == null) { + return false; + } + + LocalDate start = treatmentStartDate.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + LocalDate end = endDate.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + return end.isAfter(start.plusMonths(12)) + || end.isEqual(start.plusMonths(12)); + } + @Override public List getAllLeprosyData(String createdBy) { logger.info("Fetching leprosy data for createdBy: " + createdBy); From 058ecafbad59e2bec12bf3702cb488e3e7c3a3e2 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Oct 2026 08:10:27 +0530 Subject: [PATCH 02/11] fix 10 hwc referal incentive issue --- .../flw/controller/IncentiveController.java | 10 +++- .../impl/TBConfirmedCaseServiceImpl.java | 47 ++++++++++++++++--- 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/IncentiveController.java b/src/main/java/com/iemr/flw/controller/IncentiveController.java index 32a5c16f..a251327d 100644 --- a/src/main/java/com/iemr/flw/controller/IncentiveController.java +++ b/src/main/java/com/iemr/flw/controller/IncentiveController.java @@ -1,5 +1,6 @@ package com.iemr.flw.controller; +import com.google.gson.Gson; import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.*; import com.iemr.flw.service.IncentiveService; @@ -31,6 +32,9 @@ public class IncentiveController { @Autowired IncentiveService incentiveService; + private static final Gson gson = new Gson(); + + @Autowired private JwtUtil jwtUtil; @@ -91,8 +95,10 @@ public String getAllIncentivesByUserId(@RequestBody GetBenRequestHandler request try { if (requestDTO != null) { - logger.info("request object with timestamp : " + new Timestamp(System.currentTimeMillis()) + " " - + requestDTO); + + logger.info("Request object with timestamp: {} | Request JSON: {}", + new Timestamp(System.currentTimeMillis()), + gson.toJson(requestDTO)); String s = incentiveService.getAllIncentivesByUserId(requestDTO); //logger.info("User Incentive:" + s); if (s != null) diff --git a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java index 1bbc5ec0..c9c4d1d6 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -25,6 +25,7 @@ import java.sql.Timestamp; import java.time.LocalDate; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -149,12 +150,28 @@ private void checkIncentive(TBConfirmedCase entity){ if (isDrTb) { - incentiveLogicService.incentiveForTbFollowUpIsDrTb( - entity.getBenId(), - Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), - Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), - entity.getUserId() - ); + if("Shorter Regimen (9–12 Months)".equalsIgnoreCase(regimen)){ + if(isEligibleForIncentive(entity.getTreatmentStartDate(),entity.getExpectedTreatmentCompletionDate(),9)){ + incentiveLogicService.incentiveForTbFollowUpIsDrTb( + entity.getBenId(), + Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), + Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), + entity.getUserId() + ); + } + + }else if("Longer Regimen (18–24 Months)".equalsIgnoreCase(regimen)){ + if(isEligibleForIncentive(entity.getTreatmentStartDate(),entity.getExpectedTreatmentCompletionDate(),9)) { + + incentiveLogicService.incentiveForTbFollowUpIsDrTb( + entity.getBenId(), + Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), + Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), + entity.getUserId() + ); + } + } + } else { incentiveLogicService.incentiveForTbFollowUp( entity.getBenId(), @@ -168,6 +185,24 @@ private void checkIncentive(TBConfirmedCase entity){ } } + public boolean isEligibleForIncentive(LocalDate treatmentStartDate, LocalDate endDate,Integer minMonth) { + + if (treatmentStartDate == null || endDate == null) { + return false; + } + + LocalDate start = treatmentStartDate.atStartOfDay() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + LocalDate end = endDate.atStartOfDay() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + return end.isAfter(start.plusMonths(minMonth)) + || end.isEqual(start.plusMonths(minMonth)); + } + @Override public String getByBenId(Long benId, String authorisation) throws Exception { OutputResponse response = new OutputResponse(); From 1f5976656f156d7b1331af27b9e7b111e468ad95 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Oct 2026 08:19:09 +0530 Subject: [PATCH 03/11] fix 10 hwc referal incentive issue --- .../service/impl/IncentiveServiceImpl.java | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index f8e72fdc..b89cb137 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -1,13 +1,11 @@ package com.iemr.flw.service.impl; -import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.iemr.flw.domain.iemr.*; import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.*; import com.iemr.flw.masterEnum.GroupName; -import com.iemr.flw.masterEnum.IncentiveApprovalStatus; import com.iemr.flw.masterEnum.StateCode; import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.iemr.*; @@ -16,7 +14,6 @@ import com.iemr.flw.service.NotificationService; import com.iemr.flw.service.UserService; import com.iemr.flw.utils.JwtUtil; -import jakarta.persistence.criteria.CriteriaBuilder; import org.modelmapper.ModelMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -227,7 +224,7 @@ public String getAllIncentivesByUserId(GetBenRequestHandler request) { try { addIncentiveForIronTablets(request.getAshaId()); - incentiveOfNcdReferal(request.getAshaId(), request.getVillageID()); + incentiveOfNcdReferal(request.getAshaId(), request.getVillageID(),request); } catch (Exception e) { logger.error("Error in incentiveOfNcdReferal: ", e); } @@ -945,7 +942,7 @@ public String updateClaimStatus(Integer ashaId, Integer month, Integer year, Boo } } - private void incentiveOfNcdReferal(Integer ashaId, Integer stateId) { + private void incentiveOfNcdReferal(Integer ashaId, Integer stateId, GetBenRequestHandler request) { try { String userName = userRepo.getUserNamedByUserId(ashaId); String groupName = resolveGroupName(stateId); @@ -980,21 +977,23 @@ private void incentiveOfNcdReferal(Integer ashaId, Integer stateId) { } if (hwcReferralEnumeration != null) { - logger.info("hwcReferralEnumeration :" + hwcReferralEnumeration.getDescription()); + logger.info("hwcReferralEnumeration: {}", hwcReferralEnumeration.getDescription()); logger.info("userName={}", userName); - LocalDate now = LocalDate.now(); + LocalDate requestDate = request.getFromDate() + .toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); Long referralCount = benReferDetailsRepo.countMonthlyReferrals( userName, - now.getMonthValue(), - now.getYear()); - - logger.info("referralCount :" + referralCount); + requestDate.getMonthValue(), + requestDate.getYear() + ); + logger.info("referralCount: {}", referralCount); if (referralCount >= 10) { - addHwcReferalAshaIncentiveRecord( hwcReferralEnumeration, ashaId, From 71dd24941265303f165e7bb6d20503b5b28f3fc3 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Oct 2026 12:36:08 +0530 Subject: [PATCH 04/11] fix 10 hwc referal incentive issue --- src/main/java/com/iemr/flw/repo/iemr/BenReferDetailsRepo.java | 4 ++-- .../com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/BenReferDetailsRepo.java b/src/main/java/com/iemr/flw/repo/iemr/BenReferDetailsRepo.java index 9cb35662..25a0b652 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/BenReferDetailsRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/BenReferDetailsRepo.java @@ -51,8 +51,8 @@ public interface BenReferDetailsRepo extends JpaRepository Date: Thu, 15 Oct 2026 15:41:30 +0530 Subject: [PATCH 05/11] fix 10 hwc referal incentive issue --- .../com/iemr/flw/service/impl/MaternalHealthServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index c4dab2c9..7cbab0af 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -795,7 +795,7 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { } } - if (ect.getPncPeriod() == 42) { + if (ect.getPncPeriod() == 42 && !ect.getMotherDeath()) { IncentiveActivity highRiskPostpartumHealthCareActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("HIGH_RISK_POSTPARTUM_HEALTH_CHECK", GroupName.ACTIVITY.getDisplayName()); From dee7015416e0efb1bb23d2f4e672b9fe49766d3b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Oct 2026 10:52:03 +0530 Subject: [PATCH 06/11] fix 10 hwc referal incentive issue --- .../iemr/flw/service/impl/MaternalHealthServiceImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index 7cbab0af..0e17c587 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -795,7 +795,12 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { } } - if (ect.getPncPeriod() == 42 && !ect.getMotherDeath()) { + if (ect.getPncPeriod() == 42 + && !ect.getMotherDeath() + && ancVisitRepo.findByBenId(ect.getBenId()) + .stream() + .filter(ancVisit -> Integer.valueOf(7).equals(ancVisit.getAncVisit())) + .anyMatch(ancVisit -> Boolean.TRUE.equals(ancVisit.getIsHrpConfirmed()))) { IncentiveActivity highRiskPostpartumHealthCareActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("HIGH_RISK_POSTPARTUM_HEALTH_CHECK", GroupName.ACTIVITY.getDisplayName()); From 9639032e39fcce8ea9a1d3a1233d9666cdc22b10 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Oct 2026 12:03:07 +0530 Subject: [PATCH 07/11] fix 10 hwc referal incentive issue --- .../impl/MaternalHealthServiceImpl.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index 0e17c587..c0ff4fcc 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -799,17 +799,21 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { && !ect.getMotherDeath() && ancVisitRepo.findByBenId(ect.getBenId()) .stream() - .filter(ancVisit -> Integer.valueOf(7).equals(ancVisit.getAncVisit())) - .anyMatch(ancVisit -> Boolean.TRUE.equals(ancVisit.getIsHrpConfirmed()))) { + .filter(ancVisit -> ancVisit.getAncVisit() != null + && ancVisit.getAncVisit() >= 1 + && ancVisit.getAncVisit() <= 7) + .anyMatch(ancVisit -> + Boolean.TRUE.equals(ancVisit.getIsHrpConfirmed()))) { + IncentiveActivity highRiskPostpartumHealthCareActivityCH = - incentivesRepo.findIncentiveMasterByNameAndGroup("HIGH_RISK_POSTPARTUM_HEALTH_CHECK", GroupName.ACTIVITY.getDisplayName()); + incentivesRepo.findIncentiveMasterByNameAndGroup( + "HIGH_RISK_POSTPARTUM_HEALTH_CHECK", + GroupName.ACTIVITY.getDisplayName()); if (highRiskPostpartumHealthCareActivityCH != null) { - addIncenticeRecord(ect, userId, highRiskPostpartumHealthCareActivityCH); - + addIncenticeRecord(ect, userId, + highRiskPostpartumHealthCareActivityCH); } - - } if (ect.getPncPeriod() == 1 || ect.getPncPeriod() == 3 || ect.getPncPeriod() == 7) { if(ect.getContraceptionMethod()!=null){ From cf8e3aa2eb95fd4b2cc1f4d4e7cbb0f9cb159e4b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Oct 2026 12:44:47 +0530 Subject: [PATCH 08/11] fix 10 hwc referal incentive issue --- .../iemr/flw/service/impl/MaternalHealthServiceImpl.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index c0ff4fcc..76f1ce31 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -786,14 +786,16 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { if (ect.getMotherDangerSign() != null && !ect.getMotherDangerSign().isEmpty() - && ect.getPncPeriod() == 42) { + && ect.getPncPeriod() != null + && ect.getPncPeriod() >= 1 + && ect.getPncPeriod() <= 42) { + IncentiveActivity highRiskPostpartumCareActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("HIGH_RISK_POSTPARTUM_CARE", GroupName.ACTIVITY.getDisplayName()); + if (highRiskPostpartumCareActivityCH != null) { addIncenticeRecord(ect, userId, highRiskPostpartumCareActivityCH); - } - } if (ect.getPncPeriod() == 42 && !ect.getMotherDeath() @@ -838,6 +840,7 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { } + @Transactional private void addIncenticeRecord(PNCVisit ect, Integer userId, IncentiveActivity antaraActivity) { From 8180cc812c9aafe1790238d4197a897fd599f298 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Oct 2026 14:55:07 +0530 Subject: [PATCH 09/11] pnc mother incentive --- .../service/impl/ChildCareServiceImpl.java | 102 +++++++++++++++++- .../impl/MaternalHealthServiceImpl.java | 66 ++++++------ 2 files changed, 133 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java index 16b38400..d3974f1e 100644 --- a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; +import com.iemr.flw.domain.identity.RMNCHBeneficiaryDetailsRmnch; import com.iemr.flw.domain.iemr.*; import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.*; @@ -16,6 +17,7 @@ import com.iemr.flw.service.UserService; import com.iemr.flw.utils.JwtUtil; import jakarta.persistence.EntityNotFoundException; +import jakarta.transaction.Transactional; import org.aspectj.weaver.ast.Or; import org.modelmapper.ModelMapper; import org.slf4j.Logger; @@ -36,6 +38,7 @@ import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @Service @@ -98,6 +101,7 @@ public class ChildCareServiceImpl implements ChildCareService { @Autowired private PNCVisitRepo pncVisitRepo; + private final ConcurrentHashMap lockMap = new ConcurrentHashMap<>(); @Override public String registerHBYC(List hbycDTOs) { @@ -1004,12 +1008,32 @@ private void checkAndAddHbncIncentives(List hbncVisits, Integer userI } if (stateCode.equals(StateCode.CG.getStateCode())) { - if (hbncVisit.getVisit_day().equals("42nd Day")) { - IncentiveActivity visitActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("HBNC_0_42_DAYS", GroupName.ACTIVITY.getDisplayName()); + if ("42nd Day".equals(hbncVisit.getVisit_day())) { + IncentiveActivity visitActivityCH = incentivesRepo + .findIncentiveMasterByNameAndGroup("HBNC_0_42_DAYS", GroupName.ACTIVITY.getDisplayName()); createIncentiveRecordforHbncVisit(hbncVisit, benId, visitActivityCH, "HBNC_0_42_DAYS"); + // 1. Child ka record + List childList = + beneficiaryRepo.findByBenficieryid(hbncVisit.getBeneficiaryId()); + + if (childList != null && !childList.isEmpty()) { + RMNCHBeneficiaryDetailsRmnch child = childList.get(childList.size() - 1); + + // 2. Same household se mother + RMNCHBeneficiaryDetailsRmnch mother = beneficiaryRepo + .findByHouseoldId(child.getHouseoldId()).stream() + .filter(b -> !"NewBorn".equalsIgnoreCase(b.getRegistrationType()) + && "Postnatal Mother".equalsIgnoreCase(b.getReproductiveStatus())) + .findFirst() + .orElse(null); + if (mother != null) { + generateHighRiskPostpartumIncentives(mother.getBenficieryid(), true, userId); + } + } } + } @@ -1019,6 +1043,80 @@ private void checkAndAddHbncIncentives(List hbncVisits, Integer userI } + private void generateHighRiskPostpartumIncentives(Long motherBenId, boolean childHbnc42Done, Integer userId) { + + if (!childHbnc42Done) return; + + List motherPnc = pncVisitRepo.findByBenId(motherBenId); + + PNCVisit visit42 = motherPnc.stream() + .filter(v -> Integer.valueOf(42).equals(v.getPncPeriod())) + .findFirst() + .orElse(null); + + if (visit42 == null) return; // mother ka PNC 42 abhi nahi hua + + boolean hasDangerSign = motherPnc.stream() + .anyMatch(v -> v.getMotherDangerSign() != null + && !v.getMotherDangerSign().isEmpty() + && v.getPncPeriod() != null + && v.getPncPeriod() >= 1 + && v.getPncPeriod() <= 42); + + if (hasDangerSign) { + IncentiveActivity act1 = incentivesRepo.findIncentiveMasterByNameAndGroup( + "HIGH_RISK_POSTPARTUM_CARE", GroupName.ACTIVITY.getDisplayName()); + if (act1 != null) { + addIncenticeRecord(visit42, userId, act1); // date 42 wale visit ki + } + } + + boolean motherAlive = !Boolean.TRUE.equals(visit42.getMotherDeath()); + + boolean hrpConfirmed = ancVisitRepo.findByBenId(motherBenId).stream() + .filter(a -> a.getAncVisit() != null && a.getAncVisit() >= 1 && a.getAncVisit() <= 7) + .anyMatch(a -> Boolean.TRUE.equals(a.getIsHrpConfirmed())); + + if (motherAlive && hrpConfirmed) { + IncentiveActivity act2 = incentivesRepo.findIncentiveMasterByNameAndGroup( + "HIGH_RISK_POSTPARTUM_HEALTH_CHECK", GroupName.ACTIVITY.getDisplayName()); + if (act2 != null) { + addIncenticeRecord(visit42, userId, act2); + } + } + } + + @Transactional + private void addIncenticeRecord(PNCVisit ect, Integer userId, IncentiveActivity antaraActivity) { + + String lockKey = antaraActivity.getId() + "_" + ect.getBenId() + "_" + ect.getPncDate(); + + Object lock = lockMap.computeIfAbsent(lockKey, k -> new Object()); + + synchronized (lock) { + IncentiveActivityRecord record = recordRepo + .findRecordByActivityIdCreatedDateBenId(antaraActivity.getId(), ect.getPncDate(), ect.getBenId(),userId); + + if (record == null) { + record = new IncentiveActivityRecord(); + record.setActivityId(antaraActivity.getId()); + record.setCreatedDate(ect.getPncDate()); + record.setCreatedBy(ect.getCreatedBy()); + record.setStartDate(ect.getPncDate()); + record.setEndDate(ect.getPncDate()); + record.setUpdatedDate(ect.getPncDate()); + record.setUpdatedBy(ect.getCreatedBy()); + record.setBenId(ect.getBenId()); + record.setAshaId(userId); + record.setAmount(Long.valueOf(antaraActivity.getRate())); + recordRepo.save(record); + } + } + + lockMap.remove(lockKey, lock); + } + + private void checkAndAddIncentives(List vaccinationList) { String createdBy = vaccinationList.get(0).getCreatedBy(); diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index 76f1ce31..62534f07 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -784,39 +784,39 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { } - if (ect.getMotherDangerSign() != null - && !ect.getMotherDangerSign().isEmpty() - && ect.getPncPeriod() != null - && ect.getPncPeriod() >= 1 - && ect.getPncPeriod() <= 42) { - - IncentiveActivity highRiskPostpartumCareActivityCH = - incentivesRepo.findIncentiveMasterByNameAndGroup("HIGH_RISK_POSTPARTUM_CARE", GroupName.ACTIVITY.getDisplayName()); - - if (highRiskPostpartumCareActivityCH != null) { - addIncenticeRecord(ect, userId, highRiskPostpartumCareActivityCH); - } - } - if (ect.getPncPeriod() == 42 - && !ect.getMotherDeath() - && ancVisitRepo.findByBenId(ect.getBenId()) - .stream() - .filter(ancVisit -> ancVisit.getAncVisit() != null - && ancVisit.getAncVisit() >= 1 - && ancVisit.getAncVisit() <= 7) - .anyMatch(ancVisit -> - Boolean.TRUE.equals(ancVisit.getIsHrpConfirmed()))) { - - IncentiveActivity highRiskPostpartumHealthCareActivityCH = - incentivesRepo.findIncentiveMasterByNameAndGroup( - "HIGH_RISK_POSTPARTUM_HEALTH_CHECK", - GroupName.ACTIVITY.getDisplayName()); - - if (highRiskPostpartumHealthCareActivityCH != null) { - addIncenticeRecord(ect, userId, - highRiskPostpartumHealthCareActivityCH); - } - } +// if (ect.getMotherDangerSign() != null +// && !ect.getMotherDangerSign().isEmpty() +// && ect.getPncPeriod() != null +// && ect.getPncPeriod() >= 1 +// && ect.getPncPeriod() <= 42) { +// IncentiveActivity highRiskPostpartumCareActivityCH = +// incentivesRepo.findIncentiveMasterByNameAndGroup("HIGH_RISK_POSTPARTUM_CARE", GroupName.ACTIVITY.getDisplayName()); +// +// if (highRiskPostpartumCareActivityCH != null ) { +// addIncenticeRecord(ect, userId, highRiskPostpartumCareActivityCH); +// } +// +// } +// if (ect.getPncPeriod() == 42 +// && !ect.getMotherDeath() +// && ancVisitRepo.findByBenId(ect.getBenId()) +// .stream() +// .filter(ancVisit -> ancVisit.getAncVisit() != null +// && ancVisit.getAncVisit() >= 1 +// && ancVisit.getAncVisit() <= 7) +// .anyMatch(ancVisit -> +// Boolean.TRUE.equals(ancVisit.getIsHrpConfirmed()))) { +// +// IncentiveActivity highRiskPostpartumHealthCareActivityCH = +// incentivesRepo.findIncentiveMasterByNameAndGroup( +// "HIGH_RISK_POSTPARTUM_HEALTH_CHECK", +// GroupName.ACTIVITY.getDisplayName()); +// +// if (highRiskPostpartumHealthCareActivityCH != null) { +// addIncenticeRecord(ect, userId, +// highRiskPostpartumHealthCareActivityCH); +// } +// } if (ect.getPncPeriod() == 1 || ect.getPncPeriod() == 3 || ect.getPncPeriod() == 7) { if(ect.getContraceptionMethod()!=null){ if ((ect.getContraceptionMethod().equals("POST PARTUM STERILIZATION (PPS)") From f04cdb534bc6a009a34f74b3ba4c353f25eba971 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Oct 2026 14:57:32 +0530 Subject: [PATCH 10/11] pnc mother incentive --- .../com/iemr/flw/service/impl/ChildCareServiceImpl.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java index d3974f1e..fffcdf3e 100644 --- a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java @@ -290,9 +290,16 @@ public List getHBNCDetails(GetBenRequestHandler dto) { responseDTO.setFields(fields); result.add(responseDTO); + } page++; + try { + checkAndAddHbncIncentives(hbncVisits, dto.getAshaId()); + } catch (Exception e) { + logger.error("HBNC incentive check failed for ashaId {}: ", dto.getAshaId(), e); + } + }while (visitPage.hasNext()); } catch (Exception e) { From 3542d0eaec793ae68ae2a25d3d15f00c2875efb3 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Oct 2026 15:52:08 +0530 Subject: [PATCH 11/11] pnc mother incentive --- .../com/iemr/flw/service/impl/ChildCareServiceImpl.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java index fffcdf3e..adf47563 100644 --- a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java @@ -294,12 +294,6 @@ public List getHBNCDetails(GetBenRequestHandler dto) { } page++; - try { - checkAndAddHbncIncentives(hbncVisits, dto.getAshaId()); - } catch (Exception e) { - logger.error("HBNC incentive check failed for ashaId {}: ", dto.getAshaId(), e); - } - }while (visitPage.hasNext()); } catch (Exception e) { @@ -1061,7 +1055,7 @@ private void generateHighRiskPostpartumIncentives(Long motherBenId, boolean chil .findFirst() .orElse(null); - if (visit42 == null) return; // mother ka PNC 42 abhi nahi hua + if (visit42 == null) return; boolean hasDangerSign = motherPnc.stream() .anyMatch(v -> v.getMotherDangerSign() != null