From b5794a77e5c4857d0474f0abc935f54c886f532c Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 1 Oct 2026 17:30:22 +0530 Subject: [PATCH 01/28] fix jsy incentive issue --- src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java | 3 +++ src/main/java/com/iemr/flw/dto/iemr/IncentiveRecordDTO.java | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java b/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java index 5e94697a1..e54553884 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java @@ -1,6 +1,7 @@ package com.iemr.flw.dto.iemr; import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.persistence.Column; import lombok.Data; import java.sql.Timestamp; @@ -30,4 +31,6 @@ public class DeliveryOutcomeDTO { private String createdBy; private Timestamp updatedDate; private String updatedBy; + private String syncedBy; + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/IncentiveRecordDTO.java b/src/main/java/com/iemr/flw/dto/iemr/IncentiveRecordDTO.java index e2a6787c1..5e775d702 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/IncentiveRecordDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/IncentiveRecordDTO.java @@ -62,6 +62,8 @@ public class IncentiveRecordDTO { private String supervisorRole; private Boolean isApproved; + private String syncedBy; + private Timestamp syncedDate; From 52c6c4eb069eeb360dffab8a3acdf6d04cb505ba Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 1 Oct 2026 17:34:24 +0530 Subject: [PATCH 02/28] fix vhnc incentive issue --- src/main/java/com/iemr/flw/domain/iemr/VhncForm.java | 7 ------- .../flw/service/impl/DeliveryOutcomeServiceImpl.java | 10 +++++----- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/VhncForm.java b/src/main/java/com/iemr/flw/domain/iemr/VhncForm.java index f4370d79c..858554daf 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/VhncForm.java +++ b/src/main/java/com/iemr/flw/domain/iemr/VhncForm.java @@ -66,11 +66,4 @@ public class VhncForm { @Column(name = "followup_previous") private Boolean followupPrevius; - @Column(name = "synced_by") - private String syncedBy; - - @org.hibernate.annotations.CreationTimestamp - @Column(name = "synced_date") - private Timestamp syncedDate; - } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java index efa1d29fe..6950a8425 100644 --- a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java @@ -139,7 +139,7 @@ public void checkAndAddJsyIncentive(List delOutList) { IncentiveActivity institutionalDeliveryActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("MH_MOTIVATE_INST_DEL", GroupName.MATERNAL_HEALTH.getDisplayName()); IncentiveActivity institutionalDeliveryActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("INST_DELIVERY_ESCORT", GroupName.ACTIVITY.getDisplayName()); if (deliveryOutcome.getPlaceOfDelivery() != null) { - String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); + String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery().toLowerCase(); if (placeOfDelivery != null && (!placeOfDelivery.equalsIgnoreCase("home") || @@ -170,7 +170,7 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getDeliveryOutcome() == 1) { createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY1); if (deliveryOutcome.getPlaceOfDelivery() != null) { - String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); + String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery().toLowerCase(); if(placeOfDelivery != null && (!placeOfDelivery.equalsIgnoreCase("home") || !placeOfDelivery.equalsIgnoreCase("in transit") || @@ -188,7 +188,7 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getDeliveryOutcome() == 2) { createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY2); if (deliveryOutcome.getPlaceOfDelivery() != null) { - String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); + String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery().toLowerCase(); if(placeOfDelivery != null && (!placeOfDelivery.equalsIgnoreCase("home") || !placeOfDelivery.equalsIgnoreCase("in transit") || @@ -206,7 +206,7 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getDeliveryOutcome() == 3) { createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY3); if (deliveryOutcome.getPlaceOfDelivery() != null) { - String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); + String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery().toLowerCase(); if(placeOfDelivery != null && (!placeOfDelivery.equalsIgnoreCase("home") || !placeOfDelivery.equalsIgnoreCase("in transit") || @@ -223,7 +223,7 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getDeliveryOutcome() == 4) { createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY4); if (deliveryOutcome.getPlaceOfDelivery() != null) { - String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); + String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery().toLowerCase(); if(placeOfDelivery != null && (!placeOfDelivery.equalsIgnoreCase("home") || !placeOfDelivery.equalsIgnoreCase("in transit") || From f588eee95a1a52eb8401e35f4bde2fec01b6f8a1 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 5 Oct 2026 17:00:08 +0530 Subject: [PATCH 03/28] fix dto issue --- .../java/com/iemr/flw/dto/iemr/ANCVisitDTO.java | 3 +++ .../iemr/flw/dto/iemr/AdolescentHealthDTO.java | 3 +++ .../iemr/flw/dto/iemr/AncCounsellingCareDTO.java | 3 +++ src/main/java/com/iemr/flw/dto/iemr/CdrDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/ChildRegisterDTO.java | 3 +++ .../iemr/flw/dto/iemr/ChildVaccinationDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/DewormingFormDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/DynamicFormDTO.java | 3 +++ .../flw/dto/iemr/EligibleCoupleTrackingDTO.java | 3 +++ .../iemr/flw/dto/iemr/FilariasisCampaignDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/FormResponseDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/FormSectionDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/FormVersionDTO.java | 3 +++ .../java/com/iemr/flw/dto/iemr/HbncPart1DTO.java | 3 +++ .../java/com/iemr/flw/dto/iemr/HbncPart2DTO.java | 3 +++ .../com/iemr/flw/dto/iemr/HbncVisitCardDTO.java | 3 +++ .../java/com/iemr/flw/dto/iemr/HbncVisitDTO.java | 3 +++ src/main/java/com/iemr/flw/dto/iemr/HbycDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/HighRiskAssessDTO.java | 3 +++ .../java/com/iemr/flw/dto/iemr/IRSRoundDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/IfaDistributionDTO.java | 3 +++ .../iemr/flw/dto/iemr/IncentiveActivityDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/LeprosyFollowUpDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/MalariaFollowUpDTO.java | 3 +++ src/main/java/com/iemr/flw/dto/iemr/MdsrDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/MicroBirthPlanDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/NotificationDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/OptionConditionDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/OrsDistributionDTO.java | 3 +++ .../java/com/iemr/flw/dto/iemr/PNCVisitDTO.java | 3 +++ src/main/java/com/iemr/flw/dto/iemr/PmsmaDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/QuestionOptionDTO.java | 3 +++ .../iemr/flw/dto/iemr/QuestionResponseDTO.java | 3 +++ .../iemr/flw/dto/iemr/QuestionValidationDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/SectionQuestionDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/SectionResponseDTO.java | 3 +++ .../iemr/flw/dto/iemr/StopTBRegistrationDto.java | 3 +++ .../com/iemr/flw/dto/iemr/TBScreeningDTO.java | 3 +++ .../com/iemr/flw/dto/iemr/TBSuspectedDTO.java | 3 +++ .../java/com/iemr/flw/dto/iemr/VHNDFormDTO.java | 3 +++ .../java/com/iemr/flw/dto/iemr/VaccineDTO.java | 3 +++ .../flw/service/impl/IncentiveServiceImpl.java | 9 --------- .../impl/SupervisorDashboardServiceImpl.java | 15 +++------------ 43 files changed, 126 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/iemr/flw/dto/iemr/ANCVisitDTO.java b/src/main/java/com/iemr/flw/dto/iemr/ANCVisitDTO.java index b4cf0033a..c82009cf1 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/ANCVisitDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/ANCVisitDTO.java @@ -9,6 +9,9 @@ @Data public class ANCVisitDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/AdolescentHealthDTO.java b/src/main/java/com/iemr/flw/dto/iemr/AdolescentHealthDTO.java index b59bb8eaf..e534fd252 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/AdolescentHealthDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/AdolescentHealthDTO.java @@ -8,6 +8,9 @@ import java.util.List; @Data public class AdolescentHealthDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + @NotNull(message = "User ID cannot be null") Integer userId; @NotNull(message = "Adolescent health records cannot be null") diff --git a/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareDTO.java b/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareDTO.java index b71086e0a..3f3011d3f 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareDTO.java @@ -4,6 +4,9 @@ @Data public class AncCounsellingCareDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private String formId; private Long id ; private Long beneficiaryId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/CdrDTO.java b/src/main/java/com/iemr/flw/dto/iemr/CdrDTO.java index e39f06412..0654b5e3f 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/CdrDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/CdrDTO.java @@ -9,6 +9,9 @@ @Data public class CdrDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/ChildRegisterDTO.java b/src/main/java/com/iemr/flw/dto/iemr/ChildRegisterDTO.java index bcc26ff3a..9633a4b2b 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/ChildRegisterDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/ChildRegisterDTO.java @@ -6,6 +6,9 @@ @Data public class ChildRegisterDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/ChildVaccinationDTO.java b/src/main/java/com/iemr/flw/dto/iemr/ChildVaccinationDTO.java index d1fb5501b..fab5bc4e7 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/ChildVaccinationDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/ChildVaccinationDTO.java @@ -8,6 +8,9 @@ @Data @JsonIgnoreProperties(ignoreUnknown = true) public class ChildVaccinationDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private long id; private Long beneficiaryRegId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/DewormingFormDTO.java b/src/main/java/com/iemr/flw/dto/iemr/DewormingFormDTO.java index bf77cd658..3c3feb613 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/DewormingFormDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/DewormingFormDTO.java @@ -4,6 +4,9 @@ @Data public class DewormingFormDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private int id = 0; private String dewormingDone; private String dewormingDate; diff --git a/src/main/java/com/iemr/flw/dto/iemr/DynamicFormDTO.java b/src/main/java/com/iemr/flw/dto/iemr/DynamicFormDTO.java index c9ecb63c4..9d755546a 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/DynamicFormDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/DynamicFormDTO.java @@ -39,6 +39,9 @@ @NoArgsConstructor @AllArgsConstructor public class DynamicFormDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long formId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleTrackingDTO.java b/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleTrackingDTO.java index 6d7a8a5d3..e3e88c1bd 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleTrackingDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleTrackingDTO.java @@ -7,6 +7,9 @@ @Data public class EligibleCoupleTrackingDTO implements Serializable { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; diff --git a/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignDTO.java b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignDTO.java index 2e53ee290..fda157d0d 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignDTO.java @@ -4,6 +4,9 @@ @Data public class FilariasisCampaignDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private String visitDate; private FilariasisCampaignListDTO fields; diff --git a/src/main/java/com/iemr/flw/dto/iemr/FormResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/FormResponseDTO.java index d53a5823a..efc74085b 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/FormResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/FormResponseDTO.java @@ -39,6 +39,9 @@ @AllArgsConstructor @Builder public class FormResponseDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long responseId; private Long beneficiaryId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/FormSectionDTO.java b/src/main/java/com/iemr/flw/dto/iemr/FormSectionDTO.java index 6bb107958..52cc7405d 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/FormSectionDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/FormSectionDTO.java @@ -39,6 +39,9 @@ @NoArgsConstructor @AllArgsConstructor public class FormSectionDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long sectionId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/FormVersionDTO.java b/src/main/java/com/iemr/flw/dto/iemr/FormVersionDTO.java index 742b0f7b1..b7a042e8b 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/FormVersionDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/FormVersionDTO.java @@ -32,6 +32,9 @@ @NoArgsConstructor @AllArgsConstructor public class FormVersionDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long versionId; private Integer versionNumber; diff --git a/src/main/java/com/iemr/flw/dto/iemr/HbncPart1DTO.java b/src/main/java/com/iemr/flw/dto/iemr/HbncPart1DTO.java index 05fcff99b..46891d740 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/HbncPart1DTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/HbncPart1DTO.java @@ -6,6 +6,9 @@ @Data public class HbncPart1DTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/HbncPart2DTO.java b/src/main/java/com/iemr/flw/dto/iemr/HbncPart2DTO.java index 9a1becc62..0b1a9a05a 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/HbncPart2DTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/HbncPart2DTO.java @@ -6,6 +6,9 @@ @Data public class HbncPart2DTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/HbncVisitCardDTO.java b/src/main/java/com/iemr/flw/dto/iemr/HbncVisitCardDTO.java index 6ebb7ef70..59ad402c0 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/HbncVisitCardDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/HbncVisitCardDTO.java @@ -6,6 +6,9 @@ @Data public class HbncVisitCardDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/HbncVisitDTO.java b/src/main/java/com/iemr/flw/dto/iemr/HbncVisitDTO.java index a5043b22c..2bbc345a1 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/HbncVisitDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/HbncVisitDTO.java @@ -9,6 +9,9 @@ @Data public class HbncVisitDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + @SerializedName("id") private Integer id; diff --git a/src/main/java/com/iemr/flw/dto/iemr/HbycDTO.java b/src/main/java/com/iemr/flw/dto/iemr/HbycDTO.java index 9a983b508..a3b814d92 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/HbycDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/HbycDTO.java @@ -21,6 +21,9 @@ @Data public class HbycDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + @SerializedName("visit_day") private String visit_day; // 3 Months, 6 Months, etc. diff --git a/src/main/java/com/iemr/flw/dto/iemr/HighRiskAssessDTO.java b/src/main/java/com/iemr/flw/dto/iemr/HighRiskAssessDTO.java index a2f32c607..5d0fed84a 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/HighRiskAssessDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/HighRiskAssessDTO.java @@ -6,6 +6,9 @@ @Data public class HighRiskAssessDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Integer userId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/IRSRoundDTO.java b/src/main/java/com/iemr/flw/dto/iemr/IRSRoundDTO.java index f2d487160..89ee050d8 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/IRSRoundDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/IRSRoundDTO.java @@ -14,6 +14,9 @@ @NoArgsConstructor @AllArgsConstructor public class IRSRoundDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; @NotNull(message = "Date cannot be null") private LocalDate date; diff --git a/src/main/java/com/iemr/flw/dto/iemr/IfaDistributionDTO.java b/src/main/java/com/iemr/flw/dto/iemr/IfaDistributionDTO.java index 321437537..d9b0004d5 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/IfaDistributionDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/IfaDistributionDTO.java @@ -5,6 +5,9 @@ @Data public class IfaDistributionDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + @SerializedName("beneficiaryId") private Long beneficiaryId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/IncentiveActivityDTO.java b/src/main/java/com/iemr/flw/dto/iemr/IncentiveActivityDTO.java index 7aa856463..b7d8b4578 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/IncentiveActivityDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/IncentiveActivityDTO.java @@ -8,6 +8,9 @@ @Data public class IncentiveActivityDTO implements Serializable { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; diff --git a/src/main/java/com/iemr/flw/dto/iemr/LeprosyFollowUpDTO.java b/src/main/java/com/iemr/flw/dto/iemr/LeprosyFollowUpDTO.java index aaf28a291..17686fced 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/LeprosyFollowUpDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/LeprosyFollowUpDTO.java @@ -6,6 +6,9 @@ @Data public class LeprosyFollowUpDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/MalariaFollowUpDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MalariaFollowUpDTO.java index f47da8ed8..b2b8054dd 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MalariaFollowUpDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MalariaFollowUpDTO.java @@ -29,6 +29,9 @@ import java.util.List; @Data public class MalariaFollowUpDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Integer userId; private List malariaFollowListUp; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/MdsrDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MdsrDTO.java index e59047aba..136ae9877 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MdsrDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MdsrDTO.java @@ -6,6 +6,9 @@ @Data public class MdsrDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/MicroBirthPlanDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MicroBirthPlanDTO.java index 882cee359..2a6711e2a 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MicroBirthPlanDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MicroBirthPlanDTO.java @@ -7,6 +7,9 @@ import java.util.List; @Data public class MicroBirthPlanDTO implements Serializable { + private String syncedBy; + private java.sql.Timestamp syncedDate; + Integer userId; List entries; diff --git a/src/main/java/com/iemr/flw/dto/iemr/NotificationDTO.java b/src/main/java/com/iemr/flw/dto/iemr/NotificationDTO.java index b20dd7155..cf6e48ee0 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/NotificationDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/NotificationDTO.java @@ -6,6 +6,9 @@ @Data public class NotificationDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private String title; private String body; private String token; diff --git a/src/main/java/com/iemr/flw/dto/iemr/OptionConditionDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OptionConditionDTO.java index d43167a78..6cd86e776 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/OptionConditionDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/OptionConditionDTO.java @@ -38,6 +38,9 @@ @NoArgsConstructor @AllArgsConstructor public class OptionConditionDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long conditionId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsDistributionDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsDistributionDTO.java index 7bdfd4fd2..0b4143b89 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/OrsDistributionDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsDistributionDTO.java @@ -4,6 +4,9 @@ @Data public class OrsDistributionDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long beneficiaryId; private Long houseHoldId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/PNCVisitDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PNCVisitDTO.java index 9bfc4fc74..8829cfd7d 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PNCVisitDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PNCVisitDTO.java @@ -6,6 +6,9 @@ @Data public class PNCVisitDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; // private Integer pncVisit; diff --git a/src/main/java/com/iemr/flw/dto/iemr/PmsmaDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PmsmaDTO.java index 5c0adfc93..f0b4f8f99 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PmsmaDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PmsmaDTO.java @@ -6,6 +6,9 @@ @Data public class PmsmaDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; private String rchNumber; diff --git a/src/main/java/com/iemr/flw/dto/iemr/QuestionOptionDTO.java b/src/main/java/com/iemr/flw/dto/iemr/QuestionOptionDTO.java index 6682404a0..3c2b14409 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/QuestionOptionDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/QuestionOptionDTO.java @@ -38,6 +38,9 @@ @NoArgsConstructor @AllArgsConstructor public class QuestionOptionDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long optionId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/QuestionResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/QuestionResponseDTO.java index 03f1622e1..1bcff9c96 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/QuestionResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/QuestionResponseDTO.java @@ -37,6 +37,9 @@ @AllArgsConstructor @Builder public class QuestionResponseDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long questionResponseId; private Long questionId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/QuestionValidationDTO.java b/src/main/java/com/iemr/flw/dto/iemr/QuestionValidationDTO.java index 72c144c53..594c8e6e1 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/QuestionValidationDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/QuestionValidationDTO.java @@ -36,6 +36,9 @@ @NoArgsConstructor @AllArgsConstructor public class QuestionValidationDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long validationId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/SectionQuestionDTO.java b/src/main/java/com/iemr/flw/dto/iemr/SectionQuestionDTO.java index 11a814303..720b4e266 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/SectionQuestionDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/SectionQuestionDTO.java @@ -40,6 +40,9 @@ @NoArgsConstructor @AllArgsConstructor public class SectionQuestionDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long questionId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/SectionResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/SectionResponseDTO.java index 78c918fe8..26b27324d 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/SectionResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/SectionResponseDTO.java @@ -39,6 +39,9 @@ @AllArgsConstructor @Builder public class SectionResponseDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long sectionResponseId; private Long sectionId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/StopTBRegistrationDto.java b/src/main/java/com/iemr/flw/dto/iemr/StopTBRegistrationDto.java index 64194ff1d..84984e2dd 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/StopTBRegistrationDto.java +++ b/src/main/java/com/iemr/flw/dto/iemr/StopTBRegistrationDto.java @@ -5,6 +5,9 @@ @Data public class StopTBRegistrationDto { + private String syncedBy; + private java.sql.Timestamp syncedDate; + // Standard beneficiary fields — forwarded to Common-API @JsonRawValue diff --git a/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java b/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java index b81ca1c1f..7ff3d94f2 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java @@ -7,6 +7,9 @@ @Data public class TBScreeningDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java b/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java index d09fa9bf8..23e568ef7 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java @@ -6,6 +6,9 @@ @Data public class TBSuspectedDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Timestamp updateDate; diff --git a/src/main/java/com/iemr/flw/dto/iemr/VHNDFormDTO.java b/src/main/java/com/iemr/flw/dto/iemr/VHNDFormDTO.java index bee7f2475..aa99186a1 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/VHNDFormDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/VHNDFormDTO.java @@ -29,6 +29,9 @@ @Data public class VHNDFormDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private String vhndDate; private String place; private Integer noOfBeneficiariesAttended; diff --git a/src/main/java/com/iemr/flw/dto/iemr/VaccineDTO.java b/src/main/java/com/iemr/flw/dto/iemr/VaccineDTO.java index a3019210b..5f91cdde6 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/VaccineDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/VaccineDTO.java @@ -6,6 +6,9 @@ @Data @JsonIgnoreProperties(ignoreUnknown = true) public class VaccineDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private short vaccineId; private String immunizationService; 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 4da29ff43..9e9e4b882 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -494,15 +494,6 @@ public String getAllIncentivesGroupedSummary(GetBenRequestHandler request,Intege .filter(record -> validActivityIds.contains(record.getActivityId()) ) - .filter(record -> - !Boolean.TRUE.equals( - record.getIsDefaultActivity() - ) - - || Boolean.TRUE.equals( - record.getIsApproved() - ) - ) .collect(Collectors.toList()); }else if(request.getApprovalStatus().equals(104)){ records = records.stream() diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index cc287117d..b5350da32 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -1235,13 +1235,6 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci incentiveActivityRecord = dbRecords.stream() - .filter(record -> - Objects.equals(record.getApprovalStatus(), 102) - || Objects.equals( - record.getApprovalStatus(), 105 - ) - ) - .peek(record -> { if (Objects.equals(record.getApprovalStatus(), 102) && Boolean.TRUE.equals( @@ -1264,11 +1257,9 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci .filter(record -> - !Boolean.TRUE.equals( - record.getIsDefaultActivity() - ) - || Boolean.TRUE.equals( - record.getIsApproved() + Objects.equals(record.getApprovalStatus(), 102) + || Objects.equals( + record.getApprovalStatus(), 105 ) ) .collect(Collectors.toList()); From 08677fec83115a3ab5dd8f73145dae691baffb31 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 5 Oct 2026 17:31:11 +0530 Subject: [PATCH 04/28] fix dto issue --- src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleDTO.java | 3 +++ src/main/java/com/iemr/flw/dto/iemr/PregnantWomanDTO.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleDTO.java b/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleDTO.java index 0ec1c876e..d2b004f40 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleDTO.java @@ -11,6 +11,9 @@ @Data public class EligibleCoupleDTO implements Serializable { + private String syncedBy; + private Timestamp syncedDate; + private Long id; diff --git a/src/main/java/com/iemr/flw/dto/iemr/PregnantWomanDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PregnantWomanDTO.java index 5240f6677..816db8ed7 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PregnantWomanDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PregnantWomanDTO.java @@ -6,6 +6,9 @@ @Data public class PregnantWomanDTO { + private String syncedBy; + private Timestamp syncedDate; + private Long id; private Long benId; From fded8f32097431172778cb9795b82a76c2b03e39 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 5 Oct 2026 18:23:57 +0530 Subject: [PATCH 05/28] tpt incentive logic --- .../iemr/flw/repo/iemr/TbTptFollowUpRepo.java | 3 + .../impl/DeliveryOutcomeServiceImpl.java | 20 +++---- .../impl/TBConfirmedCaseServiceImpl.java | 58 +++++++++++++++++++ 3 files changed, 71 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/TbTptFollowUpRepo.java b/src/main/java/com/iemr/flw/repo/iemr/TbTptFollowUpRepo.java index f444d47a4..7e398affb 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/TbTptFollowUpRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/TbTptFollowUpRepo.java @@ -5,9 +5,12 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.sql.Timestamp; import java.util.List; @Repository public interface TbTptFollowUpRepo extends JpaRepository { List findByUserId(Integer userId); + + List findByBenIdAndRegimenTypeAndTreatmentStartDate(Long benId, String regimenType, Timestamp treatmentStartDate); } diff --git a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java index 6950a8425..06b8c87f8 100644 --- a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java @@ -142,8 +142,8 @@ public void checkAndAddJsyIncentive(List delOutList) { String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery().toLowerCase(); if (placeOfDelivery != null && - (!placeOfDelivery.equalsIgnoreCase("home") || - !placeOfDelivery.equalsIgnoreCase("in transit") || + (!placeOfDelivery.equalsIgnoreCase("home") && + !placeOfDelivery.equalsIgnoreCase("in transit") && !placeOfDelivery.equalsIgnoreCase("other private hospital"))) { // Institutional delivery (eligible case) @@ -172,8 +172,8 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getPlaceOfDelivery() != null) { String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery().toLowerCase(); if(placeOfDelivery != null && - (!placeOfDelivery.equalsIgnoreCase("home") || - !placeOfDelivery.equalsIgnoreCase("in transit") || + (!placeOfDelivery.equalsIgnoreCase("home") && + !placeOfDelivery.equalsIgnoreCase("in transit") && !placeOfDelivery.equalsIgnoreCase("other private hospital"))){ createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY1); @@ -190,8 +190,8 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getPlaceOfDelivery() != null) { String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery().toLowerCase(); if(placeOfDelivery != null && - (!placeOfDelivery.equalsIgnoreCase("home") || - !placeOfDelivery.equalsIgnoreCase("in transit") || + (!placeOfDelivery.equalsIgnoreCase("home") && + !placeOfDelivery.equalsIgnoreCase("in transit") && !placeOfDelivery.equalsIgnoreCase("other private hospital"))){ createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY2); @@ -208,8 +208,8 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getPlaceOfDelivery() != null) { String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery().toLowerCase(); if(placeOfDelivery != null && - (!placeOfDelivery.equalsIgnoreCase("home") || - !placeOfDelivery.equalsIgnoreCase("in transit") || + (!placeOfDelivery.equalsIgnoreCase("home") && + !placeOfDelivery.equalsIgnoreCase("in transit") && !placeOfDelivery.equalsIgnoreCase("other private hospital"))){ createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY3); @@ -225,8 +225,8 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getPlaceOfDelivery() != null) { String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery().toLowerCase(); if(placeOfDelivery != null && - (!placeOfDelivery.equalsIgnoreCase("home") || - !placeOfDelivery.equalsIgnoreCase("in transit") || + (!placeOfDelivery.equalsIgnoreCase("home") && + !placeOfDelivery.equalsIgnoreCase("in transit") && !placeOfDelivery.equalsIgnoreCase("other private hospital"))){ createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY4); 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 3f2125331..d89d553bb 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -56,6 +56,9 @@ public class TBConfirmedCaseServiceImpl implements TBConfirmedCaseService { @Autowired private TbReferralFollowUpRepo tbReferralFollowUpRepo; + @Autowired + private IncentiveLogicImpl incentiveLogic; + @Autowired private TbTptFollowUpRepo tbTptFollowUpRepo; public TBConfirmedCaseServiceImpl(TBConfirmedTreatmentRepository repository, @@ -417,6 +420,8 @@ public String saveTptFollowUp(TbTptFollowUpDTO requestDTO, String token) { } tbTptFollowUpRepo.save(tbTptFollowUp); + + createTptIncentiveIfEligible(tbTptFollowUp); } response.setResponse("TPT follow up saved successfully"); @@ -431,6 +436,59 @@ public String saveTptFollowUp(TbTptFollowUpDTO requestDTO, String token) { } + private static final Map MIN_FOLLOW_UPS = Map.of( + "1HP", 1, + "3HP", 3, + "3RH", 3, + "4R", 4, + "6H", 6, + "6LFX", 6 + ); + + + private void createTptIncentiveIfEligible(TbTptFollowUp saved) { + + // 1. Basic conditions + if (!Boolean.TRUE.equals(saved.getTreatmentCompleted()) + || saved.getActualTreatmentCompletionDate() == null + || saved.getRegimenType() == null + || saved.getTreatmentStartDate() == null + || saved.getBenId() == null) { + return; + } + + // 2. Regimen ka minimum follow-up count + Integer minRequired = MIN_FOLLOW_UPS.get(saved.getRegimenType().trim().toUpperCase()); + if (minRequired == null) { + return; // unknown regimen + } + + // 3. Isi cycle ke saare follow-ups + List cycleRows = tbTptFollowUpRepo + .findByBenIdAndRegimenTypeAndTreatmentStartDate( + saved.getBenId(), + saved.getRegimenType(), + saved.getTreatmentStartDate()); + + long completedMonths = cycleRows.stream() + .map(TbTptFollowUp::getFollowUpMonth) + .filter(Objects::nonNull) + .map(String::trim) + .distinct() + .count(); + + if (completedMonths < minRequired) { + return; + } + Timestamp completionDate = saved.getActualTreatmentCompletionDate(); + + incentiveLogic.incentiveForTbPreventiveFollowUp( + saved.getBenId(), + completionDate, + completionDate, + saved.getUserId()); + } + @Override public String getTptFollowUp(String token) { From b525a5f07675e82658e56f439e162a7bf3be62a9 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 5 Oct 2026 18:59:51 +0530 Subject: [PATCH 06/28] tpt incentive logic --- src/main/java/com/iemr/flw/domain/iemr/TBScreening.java | 6 ++++++ .../iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java b/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java index c08f12775..01170cf91 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java @@ -213,4 +213,10 @@ public class TBScreening { @org.hibernate.annotations.CreationTimestamp @Column(name = "synced_date") private Timestamp syncedDate; + + @Column(name = "failure_to_gainWeight") + private Boolean failureToGainWeight; + + @Column(name = "decreased_activity_playfulness ") + private Boolean decreasedActivityOrPlayfulness ; } 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 d89d553bb..1bbc5ec00 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -463,7 +463,6 @@ private void createTptIncentiveIfEligible(TbTptFollowUp saved) { return; // unknown regimen } - // 3. Isi cycle ke saare follow-ups List cycleRows = tbTptFollowUpRepo .findByBenIdAndRegimenTypeAndTreatmentStartDate( saved.getBenId(), From 9e3dd3b13a7f3fad8dbc1623a0d87137837948a7 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 5 Oct 2026 19:21:19 +0530 Subject: [PATCH 07/28] tpt incentive logic --- src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java b/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java index 7ff3d94f2..4a1936d45 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java @@ -1,5 +1,6 @@ package com.iemr.flw.dto.iemr; +import jakarta.persistence.Column; import lombok.Data; import java.sql.Timestamp; @@ -90,5 +91,7 @@ public class TBScreeningDTO { private String hivStatus; private List keyPopulationRiskFactorIds; private List keyPopulationRiskFactors; + private Boolean failureToGainWeight; + private Boolean decreasedActivityOrPlayfulness ; } \ No newline at end of file From 4dc24594a2386e89deb1a11ed8e7aa8e0f12a91e Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Oct 2026 12:26:55 +0530 Subject: [PATCH 08/28] tpt incentive logic --- .../impl/SupervisorDashboardServiceImpl.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index b5350da32..e6248292e 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -864,7 +864,6 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci } logger.info("Other:" + rows); - long pending = 0, verified = 0, rejected = 0 , unclaimedCount = 0 , overDue = 0 ; long overallVerified = 0, overallRejected = 0, overallPending = 0 , overallUnclaimed=0 ,overallOverDue =0; @@ -881,6 +880,22 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci for (Object[] row : rows) { + long pending = 0; + long verified = 0; + long rejected = 0; + long unclaimedCount = 0; + long overDue = 0; + + if (verified > 0) overallVerified++; + if (rejected > 0) overallRejected++; + + if (pending > 0) { + overallPending++; + } + + if (unclaimedCount > 0) overallUnclaimed++; + if (overDue > 0) overallOverDue++; + Map asha = new HashMap<>(); Integer ashaId = ((Number) row[0]).intValue(); From 8350ac1ab29ab7d463523e80eb9ff2ec431eab08 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Oct 2026 12:27:39 +0530 Subject: [PATCH 09/28] tpt incentive logic --- .../flw/service/impl/SupervisorDashboardServiceImpl.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index e6248292e..b17359ad5 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -886,15 +886,6 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci long unclaimedCount = 0; long overDue = 0; - if (verified > 0) overallVerified++; - if (rejected > 0) overallRejected++; - - if (pending > 0) { - overallPending++; - } - - if (unclaimedCount > 0) overallUnclaimed++; - if (overDue > 0) overallOverDue++; Map asha = new HashMap<>(); From 6f364d27a3e3fc5f9e2b49a53f0d8a84c3944349 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Oct 2026 14:54:23 +0530 Subject: [PATCH 10/28] tpt incentive logic --- .../flw/repo/iemr/IncentiveRecordRepo.java | 15 ++- .../flw/service/impl/CoupleServiceImpl.java | 23 ++-- .../impl/SupervisorDashboardServiceImpl.java | 111 ++++++++++++++++-- 3 files changed, 127 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java b/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java index bc6587dea..fd338de98 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java @@ -588,4 +588,17 @@ int resetRejectedIncentivesForNewMonth( @Param("updatedDate") Timestamp updatedDate, @Param("updatedBy") String updatedBy ); -} + + @Query("SELECT r FROM IncentiveActivityRecord r " + + "WHERE r.ashaId = :ashaId " + + "AND r.approvalStatus = :status " + + "AND r.startDate >= :start AND r.startDate < :end " + + "AND (r.isEligible = true OR r.isEligible IS NULL) " + + "AND (r.isClaimed = false OR r.isClaimed IS NULL)") + List findApprovedForMonth( + @Param("ashaId") Integer ashaId, + @Param("status") Integer status, + @Param("start") Timestamp start, + @Param("end") Timestamp end);} + + diff --git a/src/main/java/com/iemr/flw/service/impl/CoupleServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CoupleServiceImpl.java index b650dd430..e12a1c87c 100644 --- a/src/main/java/com/iemr/flw/service/impl/CoupleServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CoupleServiceImpl.java @@ -335,20 +335,25 @@ private void checkIncentiveForChildGap(Integer stateId, String userName,List getAshasAtFacility(Integer supervisorId, Integer faci - if (verified > 0) overallVerified += 1; - if (rejected > 0) overallRejected += 1; + // totalAmount skip wale block aur "pending == 0 && ... continue" ke baad + if (verified > 0) overallVerified++; + if (rejected > 0) overallRejected++; if (pending > 0) { - if (isOverDue) { - overallOverDue++; - } else { - overallPending++; - } + if (isOverDue) overallOverDue++; else overallPending++; } + if (unclaimedCount > 0) overallUnclaimed++; if (unclaimedCount > 0) overallUnclaimed += 1; @@ -1525,6 +1526,7 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci approvalStatus.put("pending", overallPending); approvalStatus.put("rejected", overallRejected); approvalStatus.put("unClaimed", overallUnclaimed); + approvalStatus.put("overDue", overallOverDue); response.put("approvalStatus", approvalStatus); response.put("data", ashaList); @@ -1716,6 +1718,33 @@ public int updateApprovalStatus(Integer ashaId, ashaSupervisorUserId, ashaSupervisorDetails ); + + boolean isApproved = !approvalStatus.equals(IncentiveApprovalStatus.REJECTED.getCode()); + + // Final approval: AM mein supervisor/CHO, CG mein sirf ANM + // (CG mein ASHA Supervisor ka status 105 intermediate hai, uspar payment nahi) + boolean isFinalApprover = + ashaSupervisorDetails.getStateId().equals(StateCode.AM.getStateCode()) + || (ashaSupervisorDetails.getStateId().equals(StateCode.CG.getStateCode()) + && "ANM".equalsIgnoreCase(ashaSupervisorDetails.getRoleName())); + + if (isApproved && isFinalApprover) { + List approvedRecords; + + if (incentiveIds == null || incentiveIds.trim().isEmpty()) { + approvedRecords = incentiveRecordRepo + .findApprovedForMonth( + ashaId, approvalStatus, startDate, endDate); + } else { + List ids = Arrays.stream(incentiveIds.split(",")) + .map(String::trim).filter(v -> !v.isEmpty()) + .map(Long::valueOf).collect(Collectors.toList()); + approvedRecords = incentiveRecordRepo.findAllById(ids); + } + + triggerPayment(ashaId, month, year, approvedRecords, + ashaSupervisorDetails, ashaSupervisorUserId); + } } return updatedCount; @@ -1793,6 +1822,64 @@ private void sendApprovalNotification( } } + public void triggerPayment(Integer ashaId, Integer month, Integer year, + List approvedRecords, + UserServiceRoleDTO supervisor, Integer supervisorUserId) { + try { + if (approvedRecords == null || approvedRecords.isEmpty()) { + logger.info("No approved records, payment not triggered for asha {}", ashaId); + return; + } + + LocalDate first = LocalDate.of(year, month, 1); + Period period = new Period(); + period.setStart(first.toString()); // 2026-01-01 + period.setEnd(first.withDayOfMonth(first.lengthOfMonth()).toString()); // 2026-01-31 + + VerifiedBy verifiedBy = new VerifiedBy(); + verifiedBy.setEmployeeId(String.valueOf(supervisorUserId)); + verifiedBy.setName(supervisor.getUserName()); + + // activity wise group: count + total amount + Map> byActivity = approvedRecords.stream() + .collect(Collectors.groupingBy(IncentiveActivityRecord::getActivityId)); + + List items = new ArrayList<>(); + byActivity.forEach((activityId, recs) -> { + long count = recs.size(); + long total = recs.stream() + .mapToLong(r -> r.getAmount() == null ? 0L : r.getAmount()) + .sum(); + + PaymentItem item = new PaymentItem(); + item.setActivityCode(String.valueOf(activityId)); // ya activity ka code field + item.setCount(String.valueOf(count)); + item.setIncentiveAmount(String.valueOf(total)); + items.add(item); + }); + + String timestamp = OffsetDateTime.now(ZoneId.of("Asia/Kolkata")) + .truncatedTo(ChronoUnit.SECONDS) + .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); // 2026-02-01T02:00:00+05:30 + + PaymentRequest paymentRequest = new PaymentRequest( + UUID.randomUUID().toString(), + "AMRIT", + period, + String.valueOf(ashaId), + timestamp, + verifiedBy, + items + ); + + logger.info("PAYMENT REQUEST Payload: {}", new Gson().toJson(paymentRequest)); + paymentService.sendPaymentRequest(paymentRequest); + + } catch (Exception e) { + // payment fail hone par approval rollback nahi hona chahiye + logger.error("Payment request failed for asha {}: {}", ashaId, e.getMessage(), e); + } + } private JSONObject buildEmptyIncentiveSummary() { JSONObject summary = new JSONObject(); summary.put("verified", 0); From 85176ee7ccba4d1cfa6fdeb342be24832dc28933 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Oct 2026 14:56:13 +0530 Subject: [PATCH 11/28] tpt incentive logic --- .../flw/service/impl/SupervisorDashboardServiceImpl.java | 8 ++++++-- .../com/iemr/flw/service/impl/UTPReronaPaymentJob.java | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index 0ff9fa4fc..1551c1296 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -1464,7 +1464,6 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci - // totalAmount skip wale block aur "pending == 0 && ... continue" ke baad if (verified > 0) overallVerified++; if (rejected > 0) overallRejected++; if (pending > 0) { @@ -1825,6 +1824,12 @@ private void sendApprovalNotification( public void triggerPayment(Integer ashaId, Integer month, Integer year, List approvedRecords, UserServiceRoleDTO supervisor, Integer supervisorUserId) { + + logger.info("========================================"); + + logger.info("SSD Request Send to portal"); + + logger.info("========================================"); try { if (approvedRecords == null || approvedRecords.isEmpty()) { logger.info("No approved records, payment not triggered for asha {}", ashaId); @@ -1876,7 +1881,6 @@ public void triggerPayment(Integer ashaId, Integer month, Integer year, paymentService.sendPaymentRequest(paymentRequest); } catch (Exception e) { - // payment fail hone par approval rollback nahi hona chahiye logger.error("Payment request failed for asha {}: {}", ashaId, e.getMessage(), e); } } diff --git a/src/main/java/com/iemr/flw/service/impl/UTPReronaPaymentJob.java b/src/main/java/com/iemr/flw/service/impl/UTPReronaPaymentJob.java index 30a791020..3edb88456 100644 --- a/src/main/java/com/iemr/flw/service/impl/UTPReronaPaymentJob.java +++ b/src/main/java/com/iemr/flw/service/impl/UTPReronaPaymentJob.java @@ -49,7 +49,7 @@ public void run(String... args) { log.info("FLW application started successfully and is now running."); log.info("========================================"); - triggerStaticPayment(); + // triggerStaticPayment(); } // ✅ Separate method — call this for immediate testing From 22ea14d0b8802ad209ba72935fde8c0086110b30 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Oct 2026 15:29:54 +0530 Subject: [PATCH 12/28] tpt incentive logic --- .../flw/service/impl/SupervisorDashboardServiceImpl.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index 1551c1296..4b23a0a9a 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -1265,9 +1265,7 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci }) - .filter(record -> - Objects.equals(record.getApprovalStatus(), 102) - || Objects.equals( + .filter(record -> Objects.equals( record.getApprovalStatus(), 105 ) ) @@ -1842,7 +1840,7 @@ public void triggerPayment(Integer ashaId, Integer month, Integer year, period.setEnd(first.withDayOfMonth(first.lengthOfMonth()).toString()); // 2026-01-31 VerifiedBy verifiedBy = new VerifiedBy(); - verifiedBy.setEmployeeId(String.valueOf(supervisorUserId)); + verifiedBy.setEmployeeId("NRHM-"+supervisorUserId); verifiedBy.setName(supervisor.getUserName()); // activity wise group: count + total amount From 9a381e7a0f445703d1f044487c2e25f737d8c906 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Oct 2026 15:42:18 +0530 Subject: [PATCH 13/28] fix approval staus issue --- .../impl/SupervisorDashboardServiceImpl.java | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index 4b23a0a9a..74f5df80f 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -1243,34 +1243,29 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci if (Objects.equals(approvalStatusID, 102)) { incentiveActivityRecord = dbRecords.stream() - .peek(record -> { if (Objects.equals(record.getApprovalStatus(), 102) - && Boolean.TRUE.equals( - record.getIsDefaultActivity() - ) - && Boolean.TRUE.equals( - record.getIsApproved() - )) { + && Boolean.TRUE.equals(record.getIsDefaultActivity()) + && Boolean.TRUE.equals(record.getIsApproved())) { - logger.info( - "Changing record status 102 to 105: " + - "id={}, activityId={}", - record.getId(), - record.getActivityId() - ); + logger.info("Changing record status 102 to 105: id={}, activityId={}", + record.getId(), record.getActivityId()); record.setApprovalStatus(105); } }) + .filter(record -> { + boolean isDefault = Boolean.TRUE.equals(record.getIsDefaultActivity()); + Integer status = record.getApprovalStatus(); + // non-default aur 102 + boolean nonDefault102 = !isDefault && Objects.equals(status, 102); - .filter(record -> Objects.equals( - record.getApprovalStatus(), 105 - ) - ) - .collect(Collectors.toList()); + boolean is105 = Objects.equals(status, 105); + return nonDefault102 || is105; + }) + .collect(Collectors.toList()); totalAmount = incentiveActivityRecord.stream() .map(IncentiveActivityRecord::getAmount) .filter(Objects::nonNull) From ad11dd78f4d3c399980310f059e72c4c986e9927 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Oct 2026 16:17:51 +0530 Subject: [PATCH 14/28] fix approval staus issue --- .../iemr/flw/service/impl/SupervisorDashboardServiceImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index 74f5df80f..81e7a3c7c 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -1256,14 +1256,16 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci }) .filter(record -> { boolean isDefault = Boolean.TRUE.equals(record.getIsDefaultActivity()); + boolean isClaimed = Boolean.TRUE.equals(record.getIsClaimed()); Integer status = record.getApprovalStatus(); // non-default aur 102 boolean nonDefault102 = !isDefault && Objects.equals(status, 102); + // 105 (peek se badle hue default approved records bhi yahin aayenge) boolean is105 = Objects.equals(status, 105); - return nonDefault102 || is105; + return isClaimed && (nonDefault102 || is105); }) .collect(Collectors.toList()); totalAmount = incentiveActivityRecord.stream() From 3b4cc2b93c64209f2ce9299095c60036b3e08bb9 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Oct 2026 16:27:26 +0530 Subject: [PATCH 15/28] fix approval staus issue --- .../service/impl/IncentiveServiceImpl.java | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 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 9e9e4b882..e140fc7e2 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -489,11 +489,38 @@ public String getAllIncentivesGroupedSummary(GetBenRequestHandler request,Intege } }else if ("ANM".equalsIgnoreCase(roleName) || "CHO".equalsIgnoreCase(roleName)) { - if(request.getApprovalStatus().equals(102) || request.getApprovalStatus().equals(105)){ + Integer status = request.getApprovalStatus(); + + if (Integer.valueOf(102).equals(status) + || Integer.valueOf(105).equals(status)) { + records = records.stream() - .filter(record -> - validActivityIds.contains(record.getActivityId()) - ) + .filter(record -> validActivityIds.contains(record.getActivityId())) + + // 2. default + approved + 102 -> 105 + .peek(record -> { + if (Objects.equals(record.getApprovalStatus(), 102) + && Boolean.TRUE.equals(record.getIsDefaultActivity()) + && Boolean.TRUE.equals(record.getIsApproved())) { + + logger.info("Changing record status 102 to 105: id={}, activityId={}", + record.getId(), record.getActivityId()); + + record.setApprovalStatus(105); + } + }) + + // 3. final visibility + .filter(record -> { + boolean isDefault = Boolean.TRUE.equals(record.getIsDefaultActivity()); + boolean isClaimed = Boolean.TRUE.equals(record.getIsClaimed()); + Integer recStatus = record.getApprovalStatus(); + + boolean nonDefault102 = !isDefault && Objects.equals(recStatus, 102); + boolean is105 = Objects.equals(recStatus, 105); + + return isClaimed && (nonDefault102 || is105); + }) .collect(Collectors.toList()); }else if(request.getApprovalStatus().equals(104)){ records = records.stream() From 77fd3bbf077cfb4aa891f64b57065f50dc6cce7f Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Oct 2026 16:37:31 +0530 Subject: [PATCH 16/28] fix approval staus issue --- .../iemr/flw/service/impl/IncentiveServiceImpl.java | 1 + .../service/impl/SupervisorDashboardServiceImpl.java | 11 ++++++----- 2 files changed, 7 insertions(+), 5 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 e140fc7e2..47e20bc12 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -204,6 +204,7 @@ public String getIncentiveMaster(IncentiveRequestDTO incentiveRequestDTO) { } @Override public String getAllIncentivesByUserId(GetBenRequestHandler request) { + int page = 0; int size = 200; // bumped from 20 — fewer round trips for large histories Page pageResult; diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index 81e7a3c7c..8b147970e 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -1258,14 +1258,15 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci boolean isDefault = Boolean.TRUE.equals(record.getIsDefaultActivity()); boolean isClaimed = Boolean.TRUE.equals(record.getIsClaimed()); Integer status = record.getApprovalStatus(); + boolean default105 = isDefault && Objects.equals(status, 105); - // non-default aur 102 - boolean nonDefault102 = !isDefault && Objects.equals(status, 102); - // 105 (peek se badle hue default approved records bhi yahin aayenge) - boolean is105 = Objects.equals(status, 105); + boolean nonDefault102Claimed = !isDefault && Objects.equals(status, 102) && isClaimed; + + boolean other105 = !isDefault && Objects.equals(status, 105); + + return nonDefault102Claimed || default105 || other105; - return isClaimed && (nonDefault102 || is105); }) .collect(Collectors.toList()); totalAmount = incentiveActivityRecord.stream() From 29e8a914181aace2cf8d85324b991a1985f11966 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Oct 2026 16:38:40 +0530 Subject: [PATCH 17/28] fix approval staus issue --- .../com/iemr/flw/service/impl/IncentiveServiceImpl.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 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 47e20bc12..3e0dd7e83 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -204,7 +204,6 @@ public String getIncentiveMaster(IncentiveRequestDTO incentiveRequestDTO) { } @Override public String getAllIncentivesByUserId(GetBenRequestHandler request) { - int page = 0; int size = 200; // bumped from 20 — fewer round trips for large histories Page pageResult; @@ -517,10 +516,14 @@ public String getAllIncentivesGroupedSummary(GetBenRequestHandler request,Intege boolean isClaimed = Boolean.TRUE.equals(record.getIsClaimed()); Integer recStatus = record.getApprovalStatus(); - boolean nonDefault102 = !isDefault && Objects.equals(recStatus, 102); + // non-default, 102 aur claimed + boolean nonDefault102Claimed = + !isDefault && Objects.equals(recStatus, 102) && isClaimed; + + // koi bhi 105 (default ho ya non-default, claimed ho ya na ho) boolean is105 = Objects.equals(recStatus, 105); - return isClaimed && (nonDefault102 || is105); + return nonDefault102Claimed || is105; }) .collect(Collectors.toList()); }else if(request.getApprovalStatus().equals(104)){ From ebea387d1b8eb5f182964f23017b0d04dbefae02 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Oct 2026 16:59:49 +0530 Subject: [PATCH 18/28] fix approval staus issue --- .../service/impl/IncentiveServiceImpl.java | 13 +++----- .../impl/SupervisorDashboardServiceImpl.java | 32 ++++++++++++------- 2 files changed, 26 insertions(+), 19 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 3e0dd7e83..bdeae9e5c 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -497,7 +497,6 @@ public String getAllIncentivesGroupedSummary(GetBenRequestHandler request,Intege records = records.stream() .filter(record -> validActivityIds.contains(record.getActivityId())) - // 2. default + approved + 102 -> 105 .peek(record -> { if (Objects.equals(record.getApprovalStatus(), 102) && Boolean.TRUE.equals(record.getIsDefaultActivity()) @@ -514,16 +513,14 @@ public String getAllIncentivesGroupedSummary(GetBenRequestHandler request,Intege .filter(record -> { boolean isDefault = Boolean.TRUE.equals(record.getIsDefaultActivity()); boolean isClaimed = Boolean.TRUE.equals(record.getIsClaimed()); - Integer recStatus = record.getApprovalStatus(); + boolean default105 = isDefault && Objects.equals(status, 105); - // non-default, 102 aur claimed - boolean nonDefault102Claimed = - !isDefault && Objects.equals(recStatus, 102) && isClaimed; - // koi bhi 105 (default ho ya non-default, claimed ho ya na ho) - boolean is105 = Objects.equals(recStatus, 105); + boolean nonDefault102Claimed = !isDefault && Objects.equals(status, 102) && isClaimed; - return nonDefault102Claimed || is105; + boolean other105 = !isDefault && Objects.equals(status, 105); + + return nonDefault102Claimed || default105 || other105; }) .collect(Collectors.toList()); }else if(request.getApprovalStatus().equals(104)){ diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index 8b147970e..f79744eb3 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -51,6 +51,9 @@ public class SupervisorDashboardServiceImpl implements SupervisorDashboardServic @Autowired private UserService userService; + @Autowired + EmployeeMasterRepo employeeMasterRepo; + @Autowired private NotificationService notificationService; @@ -1862,19 +1865,26 @@ public void triggerPayment(Integer ashaId, Integer month, Integer year, String timestamp = OffsetDateTime.now(ZoneId.of("Asia/Kolkata")) .truncatedTo(ChronoUnit.SECONDS) .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); // 2026-02-01T02:00:00+05:30 + if(employeeMasterRepo.findUserByUserID(ashaId)!=null){ + String empId = employeeMasterRepo.findUserByUserID(ashaId).getEmployeeID(); + if(empId!=null){ + PaymentRequest paymentRequest = new PaymentRequest( + UUID.randomUUID().toString(), + "AMRIT", + period, + String.valueOf(empId), + timestamp, + verifiedBy, + items + ); + logger.info("PAYMENT REQUEST Payload: {}", new Gson().toJson(paymentRequest)); + paymentService.sendPaymentRequest(paymentRequest); + } + + } + - PaymentRequest paymentRequest = new PaymentRequest( - UUID.randomUUID().toString(), - "AMRIT", - period, - String.valueOf(ashaId), - timestamp, - verifiedBy, - items - ); - logger.info("PAYMENT REQUEST Payload: {}", new Gson().toJson(paymentRequest)); - paymentService.sendPaymentRequest(paymentRequest); } catch (Exception e) { logger.error("Payment request failed for asha {}: {}", ashaId, e.getMessage(), e); From 4cf82054a93fb811ffb7f6afa0400dfebf4d040d Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Oct 2026 17:10:35 +0530 Subject: [PATCH 19/28] fix approval staus issue --- .../service/impl/IncentiveServiceImpl.java | 320 +++++++----------- 1 file changed, 114 insertions(+), 206 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 bdeae9e5c..8ffa4f5da 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -360,297 +360,205 @@ public void resetRejectedIncentivesForPreviousMonths() { ); } // ================= GROUPED SUMMARY ================= - @Override - public String getAllIncentivesGroupedSummary(GetBenRequestHandler request,Integer userId) { - String roleName = userService.getUserDetail(userId).getRoleName(); - LocalDate start = LocalDate.of(request.getYear(), request.getMonth(), 1); - LocalDate end = start.withDayOfMonth(start.lengthOfMonth()); - + @Transactional(readOnly = true) + public String getAllIncentivesGroupedSummary(GetBenRequestHandler request, Integer userId) { - LocalDate monthStart = LocalDate.of( - request.getYear(), - request.getMonth(), - 1 - ); + String roleName = userService.getUserDetail(userId).getRoleName(); + Integer reqStatus = request.getApprovalStatus(); - Timestamp startTs = - Timestamp.valueOf(monthStart.atStartOfDay()); + Integer stateId = userRepo.getUserRole(request.getUserId()).get(0).getStateId(); + boolean isCG = stateId != null && stateId.intValue() == StateCode.CG.getStateCode(); - Timestamp nextMonthTs = - Timestamp.valueOf(monthStart.plusMonths(1).atStartOfDay()); + logger.info("Request getAllIncentivesGroupedSummary: {}", reqStatus); - Integer villageID = userRepo.getUserRole(request.getUserId()).get(0).getStateId(); - boolean isCG = villageID != null && villageID.intValue() == StateCode.CG.getStateCode(); - logger.info("Request getAllIncentivesGroupedSummary: "+request.getApprovalStatus()); List records = recordRepo.findRecordsByAsha(request.getUserId()) .stream() - .filter(r -> - r.getCreatedDate() != null - - // Month filter using createdDate - && r.getCreatedDate() - .toLocalDateTime() - .getMonthValue() - == request.getMonth() - - && r.getCreatedDate() - .toLocalDateTime() - .getYear() - == request.getYear() - - && Boolean.TRUE.equals(r.getIsClaimed()) - - && ( - // Overdue: 102, 104 or 105 - ( - Objects.equals( - request.getApprovalStatus(), - 104 - ) - && ( - Objects.equals( - r.getApprovalStatus(), - 102 - ) - || Objects.equals( - r.getApprovalStatus(), - 104 - ) - || Objects.equals( - r.getApprovalStatus(), - 105 - ) - ) - ) - - || - - // Verified: 101 or 105 - ( - Objects.equals( - request.getApprovalStatus(), - 105 - ) - && ( - Objects.equals( - r.getApprovalStatus(), - 101 - ) - || Objects.equals( - r.getApprovalStatus(), - 105 - ) - ) - ) - - || - - // Other statuses - ( - !Objects.equals( - request.getApprovalStatus(), - 104 - ) - && !Objects.equals( - request.getApprovalStatus(), - 105 - ) - && Objects.equals( - r.getApprovalStatus(), - request.getApprovalStatus() - ) - ) - ) - ) + .filter(r -> r.getCreatedDate() != null) + .filter(r -> { + LocalDateTime created = r.getCreatedDate().toLocalDateTime(); + return created.getMonthValue() == request.getMonth() + && created.getYear() == request.getYear(); + }) + .filter(r -> Boolean.TRUE.equals(r.getIsClaimed())) + .filter(r -> matchesRequestedStatus(r.getApprovalStatus(), reqStatus)) .collect(Collectors.toList()); - - // Bulk fetch valid activity IDs — state wise List activityIds = records.stream() .map(IncentiveActivityRecord::getActivityId) .collect(Collectors.toList()); - Set validActivityIds = isCG - ? incentivesRepo.findValidActivityIds(activityIds, true) - : incentivesRepo.findValidActivityIds(activityIds, false); + Set validActivityIds = incentivesRepo.findValidActivityIds(activityIds, isCG); + if (validActivityIds == null) { + validActivityIds = Collections.emptySet(); + } + final Set validIds = validActivityIds; + + if (isCG) { + + if ("ASHA Supervisor".equalsIgnoreCase(roleName)) { - // Filter records based on valid activity IDs - if(isCG){ - if("ASHA Supervisor".equalsIgnoreCase(roleName)){ - if(request.getApprovalStatus().equals(104)){ + if (Integer.valueOf(104).equals(reqStatus)) { records = records.stream() - .filter(r -> validActivityIds.contains(r.getActivityId()) && r.getIsDefaultActivity() && r.getApprovalStatus().equals(102)) + .filter(r -> validIds.contains(r.getActivityId()) + && Boolean.TRUE.equals(r.getIsDefaultActivity()) + && Objects.equals(r.getApprovalStatus(), 102)) .collect(Collectors.toList()); - }else { + } else { records = records.stream() - .filter(r -> validActivityIds.contains(r.getActivityId()) && r.getIsDefaultActivity()) + .filter(r -> validIds.contains(r.getActivityId()) + && Boolean.TRUE.equals(r.getIsDefaultActivity())) .collect(Collectors.toList()); } - }else if ("ANM".equalsIgnoreCase(roleName) || "CHO".equalsIgnoreCase(roleName)) { - Integer status = request.getApprovalStatus(); + } else if ("ANM".equalsIgnoreCase(roleName) || "CHO".equalsIgnoreCase(roleName)) { - if (Integer.valueOf(102).equals(status) - || Integer.valueOf(105).equals(status)) { + if (Integer.valueOf(102).equals(reqStatus) || Integer.valueOf(105).equals(reqStatus)) { records = records.stream() - .filter(record -> validActivityIds.contains(record.getActivityId())) + .filter(r -> validIds.contains(r.getActivityId())) - .peek(record -> { - if (Objects.equals(record.getApprovalStatus(), 102) - && Boolean.TRUE.equals(record.getIsDefaultActivity()) - && Boolean.TRUE.equals(record.getIsApproved())) { + // default + approved + 102 -> 105 + .peek(r -> { + if (Objects.equals(r.getApprovalStatus(), 102) + && Boolean.TRUE.equals(r.getIsDefaultActivity()) + && Boolean.TRUE.equals(r.getIsApproved())) { logger.info("Changing record status 102 to 105: id={}, activityId={}", - record.getId(), record.getActivityId()); - - record.setApprovalStatus(105); + r.getId(), r.getActivityId()); + r.setApprovalStatus(105); } }) - // 3. final visibility - .filter(record -> { - boolean isDefault = Boolean.TRUE.equals(record.getIsDefaultActivity()); - boolean isClaimed = Boolean.TRUE.equals(record.getIsClaimed()); - boolean default105 = isDefault && Objects.equals(status, 105); - - - boolean nonDefault102Claimed = !isDefault && Objects.equals(status, 102) && isClaimed; + .filter(r -> { + boolean isDefault = Boolean.TRUE.equals(r.getIsDefaultActivity()); + boolean isClaimed = Boolean.TRUE.equals(r.getIsClaimed()); + Integer recStatus = r.getApprovalStatus(); - boolean other105 = !isDefault && Objects.equals(status, 105); + if (Integer.valueOf(102).equals(reqStatus)) { + return (!isDefault && Objects.equals(recStatus, 102) && isClaimed) + || Objects.equals(recStatus, 105); + } - return nonDefault102Claimed || default105 || other105; + return Objects.equals(recStatus, 101) + || Objects.equals(recStatus, 105); }) .collect(Collectors.toList()); - }else if(request.getApprovalStatus().equals(104)){ - records = records.stream() - .filter(r -> validActivityIds.contains(r.getActivityId())) - .filter(r -> { - if (Objects.equals(request.getApprovalStatus(), 104)) { - boolean isDefault = - Boolean.TRUE.equals(r.getIsDefaultActivity()); + } else if (Integer.valueOf(104).equals(reqStatus)) { - boolean isApproved = - Boolean.TRUE.equals(r.getIsApproved()); + records = records.stream() + .filter(r -> validIds.contains(r.getActivityId())) + .filter(r -> { + boolean isDefault = Boolean.TRUE.equals(r.getIsDefaultActivity()); + boolean isApproved = Boolean.TRUE.equals(r.getIsApproved()); - // All non-default 102 records, - // and approved default 102 records - boolean status102 = - Objects.equals(r.getApprovalStatus(), 102) - && (!isDefault || isApproved); + boolean status102 = Objects.equals(r.getApprovalStatus(), 102) + && (!isDefault || isApproved); - // Default 105 records, regardless of isApproved - boolean status105 = - Objects.equals(r.getApprovalStatus(), 105) - && isDefault; + boolean status105 = Objects.equals(r.getApprovalStatus(), 105) + && isDefault; - // Existing overdue records - boolean status104 = - Objects.equals(r.getApprovalStatus(), 104); - - return status102 || status105 || status104; - } + boolean status104 = Objects.equals(r.getApprovalStatus(), 104); - return Objects.equals( - r.getApprovalStatus(), - request.getApprovalStatus() - ); + return status102 || status105 || status104; }) .collect(Collectors.toList()); - }else { + + } else { records = records.stream() - .filter(r -> validActivityIds.contains(r.getActivityId())) + .filter(r -> validIds.contains(r.getActivityId())) .collect(Collectors.toList()); } - - - - logger.info( - "ANM/CHO records after default activity filter: {}", - records.size() - ); + logger.info("ANM/CHO records after default activity filter: {}", records.size()); } - }else { + } else { records = records.stream() - .filter(r -> validActivityIds.contains(r.getActivityId())) + .filter(r -> validIds.contains(r.getActivityId())) .collect(Collectors.toList()); } - Map> grouped = records.stream().collect(Collectors.groupingBy(IncentiveActivityRecord::getActivityId)); List> result = new ArrayList<>(); - for (var entry : grouped.entrySet()) { + for (Map.Entry> entry : grouped.entrySet()) { Long activityId = entry.getKey(); List list = entry.getValue(); - IncentiveActivity activity = - incentivesRepo.findById(activityId).orElse(null); - - Integer approvalStatus = list.stream() - .max(Comparator.comparing(IncentiveActivityRecord::getCreatedDate)) - .map(IncentiveActivityRecord::getApprovalStatus) - .orElse(0); + IncentiveActivity activity = incentivesRepo.findById(activityId).orElse(null); + if (activity == null) continue; - boolean isApproved = list.stream() - .max(Comparator.comparing(IncentiveActivityRecord::getCreatedDate)) - .map(IncentiveActivityRecord::getIsApproved) - .orElse(false); - Long incentiveId = list.stream() + IncentiveActivityRecord latest = list.stream() .max(Comparator.comparing(IncentiveActivityRecord::getCreatedDate)) - .map(IncentiveActivityRecord::getId) .orElse(null); + if (latest == null) continue; - if (activity == null) continue; + Integer approvalStatus = latest.getApprovalStatus() != null ? latest.getApprovalStatus() : 0; + boolean isApproved = Boolean.TRUE.equals(latest.getIsApproved()); + Long incentiveId = latest.getId(); long total = list.stream() .mapToLong(r -> r.getAmount() != null ? r.getAmount() : 0) .sum(); Map map = new HashMap<>(); - if(isCG){ - map.put("activityId", activityId); - map.put("incentiveId",incentiveId); - map.put("activityDec", activity.getDescription()); - if(activity.getGroupCategoryName()!=null && !activity.getGroupCategoryName().isEmpty()){ + map.put("activityId", activityId); + map.put("incentiveId", incentiveId); + map.put("activityDec", activity.getDescription()); + map.put("claimCount", list.size()); + map.put("totalAmount", total); + map.put("amount", activity.getRate()); + + if (isCG) { + if (activity.getGroupCategoryName() != null && !activity.getGroupCategoryName().isEmpty()) { map.put("groupName", activity.getGroupCategoryName()); - - }else { + } else { map.put("groupName", activity.getGroup()); - } map.put("isDefault", activity.getIsDefaultActivity()); map.put("approvalStatus", approvalStatus); map.put("isApproved", isApproved); - map.put("claimCount", list.size()); - map.put("totalAmount", total); - map.put("amount", activity.getRate()); - - }else { - map.put("activityId", activityId); - map.put("incentiveId",incentiveId); - map.put("activityDec", activity.getDescription()); + } else { map.put("groupName", activity.getGroup()); - map.put("claimCount", list.size()); - map.put("totalAmount", total); - map.put("amount", activity.getRate()); - } result.add(map); + } + return new Gson().toJson(result); + } + /** + * Request ke status ke hisaab se kaunse DB status allow hain. + */ + private boolean matchesRequestedStatus(Integer recStatus, Integer reqStatus) { + if (Integer.valueOf(104).equals(reqStatus)) { + // Overdue tab: 102, 104, 105 + return Objects.equals(recStatus, 102) + || Objects.equals(recStatus, 104) + || Objects.equals(recStatus, 105); } - return new Gson().toJson(result); + if (Integer.valueOf(105).equals(reqStatus)) { + // Verified tab: 101, 105 + return Objects.equals(recStatus, 101) + || Objects.equals(recStatus, 105); + } + + if (Integer.valueOf(102).equals(reqStatus)) { + // Pending tab: 102, aur 105 (default approved records bhi yahin dikhte hain) + return Objects.equals(recStatus, 102) + || Objects.equals(recStatus, 105); + } + + // Baaki tabs (103 waghera): exact match + return Objects.equals(recStatus, reqStatus); } private boolean isAfter24Hours(Timestamp claimedDate) { From 86fdd55679f32e8259c5e64291d38f487a238e20 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Oct 2026 17:17:24 +0530 Subject: [PATCH 20/28] fix approval staus issue --- .../iemr/flw/service/impl/IncentiveServiceImpl.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 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 8ffa4f5da..5fb04d0bc 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -404,7 +404,14 @@ public String getAllIncentivesGroupedSummary(GetBenRequestHandler request, Integ && Boolean.TRUE.equals(r.getIsDefaultActivity()) && Objects.equals(r.getApprovalStatus(), 102)) .collect(Collectors.toList()); - } else { + } else if (Integer.valueOf(102).equals(reqStatus)) { + records = records.stream() + .filter(r -> validIds.contains(r.getActivityId()) + && Boolean.TRUE.equals(r.getIsDefaultActivity()) + && Objects.equals(r.getApprovalStatus(), 102)) + .collect(Collectors.toList()); + + }else { records = records.stream() .filter(r -> validIds.contains(r.getActivityId()) && Boolean.TRUE.equals(r.getIsDefaultActivity())) @@ -552,12 +559,10 @@ private boolean matchesRequestedStatus(Integer recStatus, Integer reqStatus) { } if (Integer.valueOf(102).equals(reqStatus)) { - // Pending tab: 102, aur 105 (default approved records bhi yahin dikhte hain) return Objects.equals(recStatus, 102) || Objects.equals(recStatus, 105); } - // Baaki tabs (103 waghera): exact match return Objects.equals(recStatus, reqStatus); } From d8edd9a8bcb7d082bc3b587114155a3a09dbad40 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Oct 2026 17:40:54 +0530 Subject: [PATCH 21/28] fix approval staus issue --- .../impl/SupervisorDashboardServiceImpl.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index f79744eb3..c18d2cc64 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -9,6 +9,7 @@ import java.util.stream.Collectors; import com.google.gson.Gson; +import com.iemr.flw.domain.iemr.IncentiveActivity; import com.iemr.flw.domain.iemr.IncentiveActivityRecord; import com.iemr.flw.dto.iemr.*; import com.iemr.flw.dto.iemr.Period; @@ -45,6 +46,9 @@ public class SupervisorDashboardServiceImpl implements SupervisorDashboardServic @Autowired private IncentiveRecordRepo incentiveRecordRepo; + @Autowired + private IncentivesRepo incentivesRepo; + @Autowired private JwtUtil jwtUtil; @@ -1844,7 +1848,6 @@ public void triggerPayment(Integer ashaId, Integer month, Integer year, verifiedBy.setEmployeeId("NRHM-"+supervisorUserId); verifiedBy.setName(supervisor.getUserName()); - // activity wise group: count + total amount Map> byActivity = approvedRecords.stream() .collect(Collectors.groupingBy(IncentiveActivityRecord::getActivityId)); @@ -1856,8 +1859,12 @@ public void triggerPayment(Integer ashaId, Integer month, Integer year, .sum(); PaymentItem item = new PaymentItem(); - item.setActivityCode(String.valueOf(activityId)); // ya activity ka code field - item.setCount(String.valueOf(count)); + item.setActivityCode( + incentivesRepo.findById(activityId) + .map(activity -> String.valueOf(activity.getStateActivityCode())) + .orElse(null) + ); item.setCount(String.valueOf(count)); + item.setIncentiveAmount(String.valueOf(total)); items.add(item); }); @@ -1872,7 +1879,7 @@ public void triggerPayment(Integer ashaId, Integer month, Integer year, UUID.randomUUID().toString(), "AMRIT", period, - String.valueOf(empId), + String.valueOf(1857708), timestamp, verifiedBy, items From bc779a02bd334632c22e49ee510937b90fe97701 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Oct 2026 18:01:32 +0530 Subject: [PATCH 22/28] fix approval staus issue --- .../iemr/flw/service/impl/SupervisorDashboardServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index c18d2cc64..2affddc01 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -1845,7 +1845,7 @@ public void triggerPayment(Integer ashaId, Integer month, Integer year, period.setEnd(first.withDayOfMonth(first.lengthOfMonth()).toString()); // 2026-01-31 VerifiedBy verifiedBy = new VerifiedBy(); - verifiedBy.setEmployeeId("NRHM-"+supervisorUserId); + verifiedBy.setEmployeeId("NRHM-"+54374); verifiedBy.setName(supervisor.getUserName()); Map> byActivity = approvedRecords.stream() From 6e4177175f04412d16433b90fd4e8ad334d48dd6 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 7 Oct 2026 11:36:08 +0530 Subject: [PATCH 23/28] fix approval staus issue --- .../flw/repo/iemr/IncentiveRecordRepo.java | 311 +++++++++--------- .../impl/SupervisorDashboardServiceImpl.java | 2 +- 2 files changed, 155 insertions(+), 158 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java b/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java index fd338de98..74acfa5f8 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java @@ -100,18 +100,18 @@ List getStatusCountByAshaIdANM( @Param("endDate") Timestamp endDate); @Query(""" -SELECT - SUM(CASE WHEN record.approvalStatus = 101 THEN 1 ELSE 0 END), - SUM(CASE WHEN record.approvalStatus = 102 THEN 1 ELSE 0 END), - SUM(CASE WHEN record.approvalStatus = 103 THEN 1 ELSE 0 END), - SUM(CASE WHEN record.approvalStatus IN (101,105) THEN 1 ELSE 0 END) -FROM IncentiveActivityRecord record -WHERE record.ashaId = :ashaId -AND record.isClaimed = true -AND record.isDefaultActivity = true -AND record.createdDate >= :startDate -AND record.createdDate < :endDate -""") + SELECT + SUM(CASE WHEN record.approvalStatus = 101 THEN 1 ELSE 0 END), + SUM(CASE WHEN record.approvalStatus = 102 THEN 1 ELSE 0 END), + SUM(CASE WHEN record.approvalStatus = 103 THEN 1 ELSE 0 END), + SUM(CASE WHEN record.approvalStatus IN (101,105) THEN 1 ELSE 0 END) + FROM IncentiveActivityRecord record + WHERE record.ashaId = :ashaId + AND record.isClaimed = true + AND record.isDefaultActivity = true + AND record.createdDate >= :startDate + AND record.createdDate < :endDate + """) List getStatusCountByAshaIdOfDefaultActivity( @Param("ashaId") Integer ashaId, @Param("startDate") Timestamp startDate, @@ -119,24 +119,23 @@ List getStatusCountByAshaIdOfDefaultActivity( @Query(""" -SELECT - SUM(CASE WHEN record.approvalStatus = 101 THEN 1 ELSE 0 END), - SUM(CASE WHEN record.approvalStatus = 102 THEN 1 ELSE 0 END), - SUM(CASE WHEN record.approvalStatus = 103 THEN 1 ELSE 0 END), - SUM(CASE WHEN record.approvalStatus IN (101,105) THEN 1 ELSE 0 END) -FROM IncentiveActivityRecord record -WHERE record.ashaId = :ashaId -AND record.isClaimed = false -AND record.createdDate >= :startDate -AND record.createdDate < :endDate -""") + SELECT + SUM(CASE WHEN record.approvalStatus = 101 THEN 1 ELSE 0 END), + SUM(CASE WHEN record.approvalStatus = 102 THEN 1 ELSE 0 END), + SUM(CASE WHEN record.approvalStatus = 103 THEN 1 ELSE 0 END), + SUM(CASE WHEN record.approvalStatus IN (101,105) THEN 1 ELSE 0 END) + FROM IncentiveActivityRecord record + WHERE record.ashaId = :ashaId + AND record.isClaimed = false + AND record.createdDate >= :startDate + AND record.createdDate < :endDate + """) List getStatusUnclaimedCountByAshaId( @Param("ashaId") Integer ashaId, @Param("startDate") Timestamp startDate, @Param("endDate") Timestamp endDate); - @Query("SELECT COALESCE(SUM(record.amount), 0) " + "FROM IncentiveActivityRecord record " + "JOIN IncentiveActivity master ON record.activityId = master.id " + @@ -155,26 +154,26 @@ Long getTotalAmountByAsha( @Query(""" - SELECT COALESCE(SUM(record.amount), 0) - FROM IncentiveActivityRecord record - JOIN IncentiveActivity master ON record.activityId = master.id - WHERE record.ashaId = :ashaId - AND master.state = :stateCode - AND record.isClaimed = true - AND record.startDate >= :fromDate - AND record.endDate <= :toDate - AND ( - :approvalStatus = 0 - OR ( - :approvalStatus = 102 - AND record.approvalStatus IN (102, 105) - ) - OR ( - :approvalStatus <> 102 - AND record.approvalStatus = :approvalStatus - ) - ) -""") + SELECT COALESCE(SUM(record.amount), 0) + FROM IncentiveActivityRecord record + JOIN IncentiveActivity master ON record.activityId = master.id + WHERE record.ashaId = :ashaId + AND master.state = :stateCode + AND record.isClaimed = true + AND record.startDate >= :fromDate + AND record.endDate <= :toDate + AND ( + :approvalStatus = 0 + OR ( + :approvalStatus = 102 + AND record.approvalStatus IN (102, 105) + ) + OR ( + :approvalStatus <> 102 + AND record.approvalStatus = :approvalStatus + ) + ) + """) Long getTotalAmountByAshaANM( @Param("ashaId") Integer ashaId, @Param("fromDate") Timestamp fromDate, @@ -184,27 +183,27 @@ Long getTotalAmountByAshaANM( ); @Query(""" - SELECT COALESCE(SUM(record.amount), 0) - FROM IncentiveActivityRecord record - JOIN IncentiveActivity master ON record.activityId = master.id - WHERE record.ashaId = :ashaId - AND master.state = :stateCode - AND record.isClaimed = true - AND record.isDefaultActivity = false - AND record.startDate >= :fromDate - AND record.endDate <= :toDate - AND ( - :approvalStatus = 0 - OR ( - :approvalStatus = 102 - AND record.approvalStatus IN (102, 105) - ) - OR ( - :approvalStatus <> 102 - AND record.approvalStatus = :approvalStatus - ) - ) -""") + SELECT COALESCE(SUM(record.amount), 0) + FROM IncentiveActivityRecord record + JOIN IncentiveActivity master ON record.activityId = master.id + WHERE record.ashaId = :ashaId + AND master.state = :stateCode + AND record.isClaimed = true + AND record.isDefaultActivity = false + AND record.startDate >= :fromDate + AND record.endDate <= :toDate + AND ( + :approvalStatus = 0 + OR ( + :approvalStatus = 102 + AND record.approvalStatus IN (102, 105) + ) + OR ( + :approvalStatus <> 102 + AND record.approvalStatus = :approvalStatus + ) + ) + """) Long getTotalAmountByAshaANMbeforeClaimedHour( @Param("ashaId") Integer ashaId, @Param("fromDate") Timestamp fromDate, @@ -304,17 +303,17 @@ int updateApprovalStatusByIncentiveId( @Modifying @Transactional @Query(""" - UPDATE IncentiveActivityRecord iar - SET iar.approvalStatus = :approvalStatus, - iar.verifiedByUserId = :ashaSupervisorUserId, - iar.reason = NULL, - iar.otherReason = NULL, - iar.approvalDate = :approvalDate, - iar.verifiedByUserName = :ashaSupervisorUserName - WHERE iar.id IN :incentiveIds - AND iar.ashaId = :ashaId - AND iar.isClaimed = true - """) + UPDATE IncentiveActivityRecord iar + SET iar.approvalStatus = :approvalStatus, + iar.verifiedByUserId = :ashaSupervisorUserId, + iar.reason = NULL, + iar.otherReason = NULL, + iar.approvalDate = :approvalDate, + iar.verifiedByUserName = :ashaSupervisorUserName + WHERE iar.id IN :incentiveIds + AND iar.ashaId = :ashaId + AND iar.isClaimed = true + """) int updateApprovalStatusByIncentiveIds( @Param("incentiveIds") List incentiveIds, @Param("ashaId") Integer ashaId, @@ -328,19 +327,19 @@ int updateApprovalStatusByIncentiveIds( @Modifying @Transactional @Query(""" -UPDATE IncentiveActivityRecord iar -SET - iar.approvalStatus = :approvalStatus, - iar.verifiedByUserId = :ashaSupervisorUserId, - iar.verifiedByUserName = :ashaSupervisorUserName, - iar.approvalDate = :approvalDate, - iar.reason = NULL, - iar.otherReason = NULL -WHERE iar.ashaId = :ashaId -AND iar.isClaimed = true -AND iar.createdDate >= :startDate -AND iar.createdDate < :endDate -""") + UPDATE IncentiveActivityRecord iar + SET + iar.approvalStatus = :approvalStatus, + iar.verifiedByUserId = :ashaSupervisorUserId, + iar.verifiedByUserName = :ashaSupervisorUserName, + iar.approvalDate = :approvalDate, + iar.reason = NULL, + iar.otherReason = NULL + WHERE iar.ashaId = :ashaId + AND iar.isClaimed = true + AND iar.createdDate >= :startDate + AND iar.createdDate < :endDate + """) int updateApprovalStatusByAshaAndDateRangeForDefaultActivity( @Param("ashaId") Integer ashaId, @Param("approvalStatus") Integer approvalStatus, @@ -354,18 +353,18 @@ int updateApprovalStatusByAshaAndDateRangeForDefaultActivity( @Modifying @Transactional @Query(""" -UPDATE IncentiveActivityRecord iar -SET - iar.approvalStatus = :approvalStatus, - iar.verifiedByUserId = :ashaSupervisorUserId, - iar.verifiedByUserName = :ashaSupervisorUserName, - iar.approvalDate = :approvalDate, - iar.reason = NULL, - iar.otherReason = NULL -WHERE iar.id = :incentiveId -AND iar.ashaId = :ashaId -AND iar.isClaimed = true -""") + UPDATE IncentiveActivityRecord iar + SET + iar.approvalStatus = :approvalStatus, + iar.verifiedByUserId = :ashaSupervisorUserId, + iar.verifiedByUserName = :ashaSupervisorUserName, + iar.approvalDate = :approvalDate, + iar.reason = NULL, + iar.otherReason = NULL + WHERE iar.id = :incentiveId + AND iar.ashaId = :ashaId + AND iar.isClaimed = true + """) int updateApprovalStatusByIncentiveIdForDefaultActivity( @Param("incentiveId") Long incentiveId, @Param("ashaId") Integer ashaId, @@ -378,18 +377,18 @@ int updateApprovalStatusByIncentiveIdForDefaultActivity( @Modifying @Transactional @Query(""" - UPDATE IncentiveActivityRecord iar - SET iar.approvalStatus = :approvalStatus, - iar.verifiedByUserId = :ashaSupervisorUserId, - iar.verifiedByUserName = :ashaSupervisorUserName, - iar.approvalDate = :approvalDate, - iar.reason = NULL, - iar.otherReason = NULL - WHERE iar.id IN :incentiveIds - AND iar.ashaId = :ashaId - AND iar.isClaimed = true - AND iar.isDefaultActivity = true - """) + UPDATE IncentiveActivityRecord iar + SET iar.approvalStatus = :approvalStatus, + iar.verifiedByUserId = :ashaSupervisorUserId, + iar.verifiedByUserName = :ashaSupervisorUserName, + iar.approvalDate = :approvalDate, + iar.reason = NULL, + iar.otherReason = NULL + WHERE iar.id IN :incentiveIds + AND iar.ashaId = :ashaId + AND iar.isClaimed = true + AND iar.isDefaultActivity = true + """) int updateApprovalStatusByIncentiveIdsForDefaultActivity( @Param("incentiveIds") List incentiveIds, @Param("ashaId") Integer ashaId, @@ -403,17 +402,17 @@ int updateApprovalStatusByIncentiveIdsForDefaultActivity( @Modifying @Transactional @Query(""" - UPDATE IncentiveActivityRecord iar - SET iar.approvalStatus = :approvalStatus, - iar.verifiedByUserId = :ashaSupervisorUserId, - iar.verifiedByUserName = :ashaSupervisorUserName, - iar.approvalDate = :approvalDate, - iar.reason = NULL, - iar.otherReason = NULL - WHERE iar.id IN :incentiveIds - AND iar.ashaId = :ashaId - AND iar.isClaimed = true - """) + UPDATE IncentiveActivityRecord iar + SET iar.approvalStatus = :approvalStatus, + iar.verifiedByUserId = :ashaSupervisorUserId, + iar.verifiedByUserName = :ashaSupervisorUserName, + iar.approvalDate = :approvalDate, + iar.reason = NULL, + iar.otherReason = NULL + WHERE iar.id IN :incentiveIds + AND iar.ashaId = :ashaId + AND iar.isClaimed = true + """) int updateApprovalStatusByIncentiveIdsForDefaultActivityForAnm( @Param("incentiveIds") List incentiveIds, @Param("ashaId") Integer ashaId, @@ -422,6 +421,7 @@ int updateApprovalStatusByIncentiveIdsForDefaultActivityForAnm( @Param("ashaSupervisorUserId") Integer ashaSupervisorUserId, @Param("ashaSupervisorUserName") String ashaSupervisorUserName ); + @Modifying @Transactional @Query("UPDATE IncentiveActivityRecord iar " @@ -470,17 +470,17 @@ int updateApprovalStatusByIdAndIncentiveId( @Modifying @Transactional @Query(""" - UPDATE IncentiveActivityRecord iar - SET iar.approvalStatus = :status, - iar.verifiedByUserId = :ashaSupervisorUserId, - iar.verifiedByUserName = :ashaSupervisorUserName, - iar.reason = :reason, - iar.otherReason = :otherReason, - iar.approvalDate = :approvalDate - WHERE iar.id IN :incentiveIds - AND iar.ashaId = :ashaId - AND iar.isClaimed = true - """) + UPDATE IncentiveActivityRecord iar + SET iar.approvalStatus = :status, + iar.verifiedByUserId = :ashaSupervisorUserId, + iar.verifiedByUserName = :ashaSupervisorUserName, + iar.reason = :reason, + iar.otherReason = :otherReason, + iar.approvalDate = :approvalDate + WHERE iar.id IN :incentiveIds + AND iar.ashaId = :ashaId + AND iar.isClaimed = true + """) int updateApprovalStatusByIdsAndIncentiveIds( @Param("status") Integer status, @Param("ashaId") Integer ashaId, @@ -550,6 +550,7 @@ List getRecordsBySuperVisor( @Param("startDate") Timestamp startDate, @Param("endDate") Timestamp endDate, @Param("approvalStatus") Integer approvalStatus); + @Modifying @Transactional @Query("UPDATE IncentiveActivityRecord iar " @@ -568,21 +569,21 @@ int updateClaimStatusByAshaAndIncentiveIds( @Modifying(clearAutomatically = true, flushAutomatically = true) @Transactional @Query(""" - UPDATE IncentiveActivityRecord iar - SET iar.approvalStatus = 102, - iar.isClaimed = false, - iar.calimedDate = NULL, - iar.approvalDate = NULL, - iar.reason = NULL, - iar.otherReason = NULL, - iar.verifiedByUserId = NULL, - iar.verifiedByUserName = NULL, - iar.updatedDate = :updatedDate, - iar.updatedBy = :updatedBy - WHERE iar.approvalStatus = 103 - AND iar.isClaimed = true - AND iar.endDate < :currentMonthStart -""") + UPDATE IncentiveActivityRecord iar + SET iar.approvalStatus = 102, + iar.isClaimed = false, + iar.calimedDate = NULL, + iar.approvalDate = NULL, + iar.reason = NULL, + iar.otherReason = NULL, + iar.verifiedByUserId = NULL, + iar.verifiedByUserName = NULL, + iar.updatedDate = :updatedDate, + iar.updatedBy = :updatedBy + WHERE iar.approvalStatus = 103 + AND iar.isClaimed = true + AND iar.endDate < :currentMonthStart + """) int resetRejectedIncentivesForNewMonth( @Param("currentMonthStart") Timestamp currentMonthStart, @Param("updatedDate") Timestamp updatedDate, @@ -591,14 +592,10 @@ int resetRejectedIncentivesForNewMonth( @Query("SELECT r FROM IncentiveActivityRecord r " + "WHERE r.ashaId = :ashaId " + - "AND r.approvalStatus = :status " + - "AND r.startDate >= :start AND r.startDate < :end " + - "AND (r.isEligible = true OR r.isEligible IS NULL) " + - "AND (r.isClaimed = false OR r.isClaimed IS NULL)") + "AND r.approvalStatus = :status") List findApprovedForMonth( @Param("ashaId") Integer ashaId, - @Param("status") Integer status, - @Param("start") Timestamp start, - @Param("end") Timestamp end);} + @Param("status") Integer status); +} diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index 2affddc01..2480f1faa 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -1736,7 +1736,7 @@ public int updateApprovalStatus(Integer ashaId, if (incentiveIds == null || incentiveIds.trim().isEmpty()) { approvedRecords = incentiveRecordRepo .findApprovedForMonth( - ashaId, approvalStatus, startDate, endDate); + ashaId, approvalStatus); } else { List ids = Arrays.stream(incentiveIds.split(",")) .map(String::trim).filter(v -> !v.isEmpty()) From 6b317c8d47e5c79a14285605fc5bf9981535880b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 7 Oct 2026 11:45:42 +0530 Subject: [PATCH 24/28] fix approval staus issue --- .../impl/SupervisorDashboardServiceImpl.java | 108 +++++++++++++----- 1 file changed, 79 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index 2480f1faa..90d108ea5 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -1829,10 +1829,9 @@ public void triggerPayment(Integer ashaId, Integer month, Integer year, UserServiceRoleDTO supervisor, Integer supervisorUserId) { logger.info("========================================"); - logger.info("SSD Request Send to portal"); - logger.info("========================================"); + try { if (approvedRecords == null || approvedRecords.isEmpty()) { logger.info("No approved records, payment not triggered for asha {}", ashaId); @@ -1840,61 +1839,112 @@ public void triggerPayment(Integer ashaId, Integer month, Integer year, } LocalDate first = LocalDate.of(year, month, 1); + Period period = new Period(); - period.setStart(first.toString()); // 2026-01-01 - period.setEnd(first.withDayOfMonth(first.lengthOfMonth()).toString()); // 2026-01-31 + period.setStart(first.toString()); + period.setEnd(first.withDayOfMonth(first.lengthOfMonth()).toString()); VerifiedBy verifiedBy = new VerifiedBy(); - verifiedBy.setEmployeeId("NRHM-"+54374); + verifiedBy.setEmployeeId("NRHM-" + 54374); verifiedBy.setName(supervisor.getUserName()); - Map> byActivity = approvedRecords.stream() - .collect(Collectors.groupingBy(IncentiveActivityRecord::getActivityId)); + Map> byActivity = + approvedRecords.stream() + .collect(Collectors.groupingBy( + IncentiveActivityRecord::getActivityId + )); List items = new ArrayList<>(); + byActivity.forEach((activityId, recs) -> { + + var activityOpt = incentivesRepo.findById(activityId); + + // Activity not found -> skip + if (activityOpt.isEmpty()) { + logger.warn( + "Activity not found, skipping payment item. activityId={}", + activityId + ); + return; + } + + var activity = activityOpt.get(); + + // State Activity Code null -> skip + if (activity.getStateActivityCode() == null) { + logger.warn( + "State Activity Code is null, skipping payment item. activityId={}", + activityId + ); + return; + } + long count = recs.size(); + long total = recs.stream() .mapToLong(r -> r.getAmount() == null ? 0L : r.getAmount()) .sum(); PaymentItem item = new PaymentItem(); + item.setActivityCode( - incentivesRepo.findById(activityId) - .map(activity -> String.valueOf(activity.getStateActivityCode())) - .orElse(null) - ); item.setCount(String.valueOf(count)); + String.valueOf(activity.getStateActivityCode()) + ); + item.setCount(String.valueOf(count)); item.setIncentiveAmount(String.valueOf(total)); + items.add(item); }); + // Agar saare records ka activity code null tha + if (items.isEmpty()) { + logger.info( + "No valid payment items found for asha {}, payment not triggered", + ashaId + ); + return; + } + String timestamp = OffsetDateTime.now(ZoneId.of("Asia/Kolkata")) .truncatedTo(ChronoUnit.SECONDS) - .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); // 2026-02-01T02:00:00+05:30 - if(employeeMasterRepo.findUserByUserID(ashaId)!=null){ - String empId = employeeMasterRepo.findUserByUserID(ashaId).getEmployeeID(); - if(empId!=null){ - PaymentRequest paymentRequest = new PaymentRequest( - UUID.randomUUID().toString(), - "AMRIT", - period, - String.valueOf(1857708), - timestamp, - verifiedBy, - items - ); - logger.info("PAYMENT REQUEST Payload: {}", new Gson().toJson(paymentRequest)); - paymentService.sendPaymentRequest(paymentRequest); - } + .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); - } + if (employeeMasterRepo.findUserByUserID(ashaId) != null) { + String empId = employeeMasterRepo + .findUserByUserID(ashaId) + .getEmployeeID(); + if (empId != null) { + PaymentRequest paymentRequest = new PaymentRequest( + UUID.randomUUID().toString(), + "AMRIT", + period, + String.valueOf(1857708), + timestamp, + verifiedBy, + items + ); + + logger.info( + "PAYMENT REQUEST Payload: {}", + new Gson().toJson(paymentRequest) + ); + + paymentService.sendPaymentRequest(paymentRequest); + } + } } catch (Exception e) { - logger.error("Payment request failed for asha {}: {}", ashaId, e.getMessage(), e); + logger.error( + "Payment request failed for asha {}: {}", + ashaId, + e.getMessage(), + e + ); } } private JSONObject buildEmptyIncentiveSummary() { From d4ec10dd36346979b4c682b0a24281b8388f61fd Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 7 Oct 2026 12:56:40 +0530 Subject: [PATCH 25/28] fix incentive activity code maping --- .../iemr/flw/service/impl/SupervisorDashboardServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index 90d108ea5..d4f3e6b91 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -1845,7 +1845,7 @@ public void triggerPayment(Integer ashaId, Integer month, Integer year, period.setEnd(first.withDayOfMonth(first.lengthOfMonth()).toString()); VerifiedBy verifiedBy = new VerifiedBy(); - verifiedBy.setEmployeeId("NRHM-" + 54374); + verifiedBy.setEmployeeId("NRHM-22547"); verifiedBy.setName(supervisor.getUserName()); Map> byActivity = From 0d85ac3b47748050a71ba9c07889118e7e8749b8 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 7 Oct 2026 13:10:50 +0530 Subject: [PATCH 26/28] fix mappping of asha with anm --- .../iemr/flw/service/impl/SupervisorDashboardServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index d4f3e6b91..11ab7f88e 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -1923,7 +1923,7 @@ public void triggerPayment(Integer ashaId, Integer month, Integer year, UUID.randomUUID().toString(), "AMRIT", period, - String.valueOf(1857708), + String.valueOf(30638), timestamp, verifiedBy, items From 72d60155ab932c78743c775c5dcdc1ea07b86442 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 9 Oct 2026 14:58:05 +0530 Subject: [PATCH 27/28] fix child vaccination get all data issue --- .../java/com/iemr/flw/repo/iemr/ChildVaccinationRepo.java | 5 ++--- .../java/com/iemr/flw/service/impl/ChildCareServiceImpl.java | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/ChildVaccinationRepo.java b/src/main/java/com/iemr/flw/repo/iemr/ChildVaccinationRepo.java index 99487cc2b..125f04d76 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/ChildVaccinationRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/ChildVaccinationRepo.java @@ -12,9 +12,8 @@ @Repository public interface ChildVaccinationRepo extends JpaRepository { - @Query(value = "SELECT cv FROM ChildVaccination cv WHERE cv.createdBy = :userId and cv.createdDate >= :fromDate and cv.createdDate <= :toDate") - List getChildVaccinationDetails(@Param("userId") String userId, - @Param("fromDate") Timestamp fromDate, @Param("toDate") Timestamp toDate); + @Query(value = "SELECT cv FROM ChildVaccination cv WHERE cv.createdBy = :userId") + List getChildVaccinationDetails(@Param("userId") String userId); ChildVaccination findChildVaccinationByBeneficiaryRegIdAndCreatedDateAndVaccineName(Long benRegId, Timestamp createdDate, String vaccine); 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 46fac5ef3..ad944aa47 100644 --- a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java @@ -418,7 +418,7 @@ public List getChildVaccinationDetails(GetBenRequestHandler try { String user = beneficiaryRepo.getUserName(dto.getAshaId()); List vaccinationDetails = - childVaccinationRepo.getChildVaccinationDetails(user, dto.getFromDate(), dto.getToDate()); + childVaccinationRepo.getChildVaccinationDetails(user); if (vaccinationDetails.isEmpty()) { return new ArrayList<>(); From 7b1e85549216ccfc9f948b74ffaacdf5d2079765 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 9 Oct 2026 15:20:28 +0530 Subject: [PATCH 28/28] fix child vaccination get all data issue --- .../impl/VillageLevelFormServiceImpl.java | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java index c21cc9a5e..ff1482e08 100644 --- a/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java @@ -149,8 +149,15 @@ private Boolean saveVhncFormData(VhncFormDTO vhncFormDTO, Integer userID) { vhncForm.setFormType("VHNC"); vhncFormRepo.save(vhncForm); + if(vhncFormDTO.getVhncDate()!=null && !vhncFormDTO.getVhncDate().isEmpty()){ - checkVhncIncentive(vhncForm.getCreatedDate(),Math.toIntExact(vhncForm.getUserId())); + Timestamp timestamp = Timestamp.valueOf( + LocalDate.parse(vhncForm.getVhncDate(), DateTimeFormatter.ofPattern("dd-MM-yyyy")) + .atStartOfDay() + ); + + checkVhncIncentive(timestamp,Math.toIntExact(vhncForm.getUserId())); + } return true; } @@ -170,8 +177,17 @@ private Boolean savePhcForm(PhcReviewMeetingFormDTO dto, Integer userID) { phcReviewForm.setImage2(dto.getImage2()); phcReviewForm.setFormType("PHC"); phcReviewFormRepo.save(phcReviewForm); + if(dto.getPhcReviewDate()!=null && !dto.getPhcReviewDate().isEmpty()){ + + Timestamp timestamp = Timestamp.valueOf( + LocalDate.parse(phcReviewForm.getPhcReviewDate(), DateTimeFormatter.ofPattern("dd-MM-yyyy")) + .atStartOfDay() + ); + + checkPhcMeetingIncentive(timestamp,Math.toIntExact(phcReviewForm.getUserId())); + } + - checkPhcMeetingIncentive(phcReviewForm.getCreatedDate(),Math.toIntExact(phcReviewForm.getUserId())); return true; } @@ -278,8 +294,18 @@ private Boolean saveVhndFormData(VHNDFormDTO vhndFormDTO, Integer userID) { vhndForm.setFormType("VHND"); vhndRepo.save(vhndForm); + if (vhndFormDTO.getVhndDate() != null + && !vhndFormDTO.getVhndDate().isEmpty()) { - checkVhndIncentive(vhndForm.getCreatedDate(),vhndForm.getUserId()); + Timestamp timestamp = Timestamp.valueOf( + LocalDate.parse( + vhndFormDTO.getVhndDate(), + DateTimeFormatter.ofPattern("dd-MM-yyyy") + ).atStartOfDay() + ); + + checkVhndIncentive(timestamp, vhndForm.getUserId()); + } return true;