From a46784f1b8e1ae4f5def5135e05a4e25c777d962 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 28 Sep 2026 12:13:48 +0530 Subject: [PATCH 01/73] tb screen api changes --- .../com/iemr/flw/domain/iemr/TBScreening.java | 12 ++++ .../com/iemr/flw/dto/iemr/TBScreeningDTO.java | 63 ++++++++++++++++--- 2 files changed, 65 insertions(+), 10 deletions(-) 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 06e36309c..6867dd885 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java @@ -194,4 +194,16 @@ public class TBScreening { @Column(name = "createdDate") private java.sql.Timestamp createdDate; + + @Column(name = "risk_factor", columnDefinition = "TEXT") + private String riskFactor; + + @Column(name = "fatigue") + private Boolean fatigue; + + @Column(name = "chest_pain") + private Boolean chestPain; + + @Column(name = "short_breath") + private Boolean shortBreath; } 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 36f48dfc5..b27060a89 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java @@ -8,27 +8,20 @@ public class TBScreeningDTO { private Long id; - private Long benId; + private Long benRegId; + private Long visitCode; private Timestamp visitDate; private Boolean coughMoreThan2Weeks; - private Boolean bloodInSputum; - private Boolean feverMoreThan2Weeks; - private Boolean lossOfWeight; - private Boolean nightSweats; - private Boolean historyOfTb; - private Boolean takingAntiTBDrugs; - private Boolean familySufferingFromTB; - private Boolean riseOfFever; private Boolean lossOfAppetite; private Boolean age; @@ -37,7 +30,57 @@ public class TBScreeningDTO { private Boolean bmi; private Boolean contactWithTBPatient; private Boolean historyOfTBInLastFiveYrs; + + // Additional screening fields + private String riskFactor; + private Boolean hivStatus; + private Boolean fatigue; + private Boolean chestPain; + private Boolean shortBreath; + + // Screening option IDs + private Integer bloodCheckId; + private Integer coughCheckId; + private Integer familyCheckId; + private Integer feverCheckId; + private Integer historyCheckId; + private Integer weightCheckId; + private Integer sweatsCheckId; + private Integer drugsCheckId; + private Integer lossOfAppetiteId; + private Integer riseOfFeverId; + private String sympotomatic; private String asymptomatic; private String recommandateTest; -} + + // Recommended tests and referrals + private String recommendedForLiquidCulture; + private Integer recommendedForLiquidCultureId; + + private String recommendedForTruenat; + private Integer recommendedForTruenatId; + + private String referredForDigitalChestXray; + private Integer referredForDigitalChestXrayId; + + private String referredForSputumCollection; + private Integer referredForSputumCollectionId; + + private String sputumSampleSubmittedAt; + private String testDenialReasons; + + // Audit fields + private String createdBy; + private Timestamp createdDate; + private Boolean deleted; + private Timestamp lastModDate; + private String modifiedBy; + private String processed; + + // Service and location details + private Integer parkingPlaceID; + private Integer providerServiceMapId; + private Integer vanID; + private Long vanSerialNo; +} \ No newline at end of file From 59adb7dd031e28f46aa929dc6108a1b34440233a Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 28 Sep 2026 12:38:12 +0530 Subject: [PATCH 02/73] tb screen api changes --- .../com/iemr/flw/dto/iemr/TBScreeningDTO.java | 7 +- .../service/impl/TBScreeningServiceImpl.java | 153 +++++++++++++++--- 2 files changed, 139 insertions(+), 21 deletions(-) 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 b27060a89..b81ca1c1f 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java @@ -3,6 +3,7 @@ import lombok.Data; import java.sql.Timestamp; +import java.util.List; @Data public class TBScreeningDTO { @@ -33,7 +34,6 @@ public class TBScreeningDTO { // Additional screening fields private String riskFactor; - private Boolean hivStatus; private Boolean fatigue; private Boolean chestPain; private Boolean shortBreath; @@ -83,4 +83,9 @@ public class TBScreeningDTO { private Integer providerServiceMapId; private Integer vanID; private Long vanSerialNo; + private Integer hivStatusId; + private String hivStatus; + private List keyPopulationRiskFactorIds; + private List keyPopulationRiskFactors; + } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java index 2f84c4622..5cff0bd0c 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java @@ -9,7 +9,9 @@ import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.iemr.TBScreeningRepo; import com.iemr.flw.service.TBScreeningService; +import jakarta.annotation.PostConstruct; import org.modelmapper.ModelMapper; +import org.modelmapper.TypeMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -17,7 +19,9 @@ import java.sql.Timestamp; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; @Service public class TBScreeningServiceImpl implements TBScreeningService { @@ -36,37 +40,55 @@ public String getByBenId(Long benId, String authorisation) throws Exception { @Override public String save(TBScreeningRequestDTO requestDTO) throws Exception { - requestDTO.getTbScreeningList().forEach(tbScreeningDTO -> - { + if (requestDTO == null || requestDTO.getTbScreeningList() == null) { + throw new IllegalArgumentException("TB screening list is required"); + } + + for (TBScreeningDTO dto : requestDTO.getTbScreeningList()) { TBScreening tbScreening = - tbScreeningRepo.getByUserIdAndBenId(tbScreeningDTO.getBenId(), requestDTO.getUserId()); + tbScreeningRepo.getByUserIdAndBenId( + dto.getBenId(), requestDTO.getUserId()); boolean isNew = tbScreening == null; + if (isNew) { tbScreening = new TBScreening(); - modelMapper.map(tbScreeningDTO, tbScreening); - tbScreening.setId(null); - } else { - Long id = tbScreening.getId(); - modelMapper.map(tbScreeningDTO, tbScreening); - tbScreening.setId(id); } + modelMapper.map(dto, tbScreening); + + // List -> comma-separated String + tbScreening.setKeyPopulationRiskFactorIds( + toRiskFactorIdsCsv(dto.getKeyPopulationRiskFactorIds())); + + // List -> comma-separated String + tbScreening.setKeyPopulationRiskFactors( + toRiskFactorsCsv(dto.getKeyPopulationRiskFactors())); + tbScreening.setUserId(requestDTO.getUserId()); - // Stop TB / Nikshay reporting — same gap this ASHA-flow save path had as the nurse - // flow's saveNurseTBScreening(): benRegID was never persisted here at all. - tbScreening.setBenRegID(beneficiaryRepo.getRegIDFromBenId(tbScreeningDTO.getBenId())); - // created_date/created_by — gated on isNew so a later re-save doesn't overwrite the - // true creation time/author. No device-supplied created timestamp on this DTO, so - // visitDate (closest real proxy) is preferred, server time as last-resort fallback. + + tbScreening.setBenRegID( + beneficiaryRepo.getRegIDFromBenId(dto.getBenId())); + if (isNew) { - tbScreening.setCreatedDate(tbScreening.getVisitDate() != null - ? tbScreening.getVisitDate() : new Timestamp(System.currentTimeMillis())); - tbScreening.setCreatedBy(requestDTO.getUserId() != null ? requestDTO.getUserId().toString() : null); + tbScreening.setId(null); + + tbScreening.setCreatedDate( + tbScreening.getVisitDate() != null + ? tbScreening.getVisitDate() + : new Timestamp(System.currentTimeMillis())); + + tbScreening.setCreatedBy( + requestDTO.getUserId() != null + ? requestDTO.getUserId().toString() + : null); } + tbScreeningRepo.save(tbScreening); - }); - return "no of tb screening items saved: " + requestDTO.getTbScreeningList().size(); + } + + return "no of tb screening items saved: " + + requestDTO.getTbScreeningList().size(); } @Override @@ -88,4 +110,95 @@ public String getByUserId(GetBenRequestHandler request) { return null; } + @PostConstruct + public void configureTBScreeningMappings() { + TypeMap saveMapping = + modelMapper.getTypeMap(TBScreeningDTO.class, TBScreening.class); + + if (saveMapping == null) { + saveMapping = modelMapper.createTypeMap( + TBScreeningDTO.class, TBScreening.class); + } + + saveMapping.addMappings(mapper -> { + mapper.skip(TBScreening::setKeyPopulationRiskFactorIds); + mapper.skip(TBScreening::setKeyPopulationRiskFactors); + + // Managed by the service; preserve these on updates. + mapper.skip(TBScreening::setId); + mapper.skip(TBScreening::setCreatedDate); + mapper.skip(TBScreening::setCreatedBy); + }); + + TypeMap responseMapping = + modelMapper.getTypeMap(TBScreening.class, TBScreeningDTO.class); + + if (responseMapping == null) { + responseMapping = modelMapper.createTypeMap( + TBScreening.class, TBScreeningDTO.class); + } + + responseMapping.addMappings(mapper -> { + mapper.skip(TBScreeningDTO::setKeyPopulationRiskFactorIds); + mapper.skip(TBScreeningDTO::setKeyPopulationRiskFactors); + }); + } + + private String toRiskFactorIdsCsv(List ids) { + if (ids == null) { + return null; + } + + if (ids.stream().anyMatch(id -> id == null)) { + throw new IllegalArgumentException( + "Risk factor IDs cannot contain null values"); + } + + return ids.stream() + .map(String::valueOf) + .collect(Collectors.joining(",")); + } + + private String toRiskFactorsCsv(List riskFactors) { + if (riskFactors == null) { + return null; + } + + for (String riskFactor : riskFactors) { + if (riskFactor == null + || riskFactor.isBlank() + || riskFactor.contains(",")) { + throw new IllegalArgumentException( + "Risk factor codes cannot be null, blank, or contain commas"); + } + } + + return riskFactors.stream() + .map(String::trim) + .collect(Collectors.joining(",")); + } + + private List fromRiskFactorIdsCsv(String value) { + if (value == null || value.isBlank()) { + return new ArrayList<>(); + } + + return Arrays.stream(value.split(",")) + .map(String::trim) + .filter(item -> !item.isEmpty()) + .map(Integer::valueOf) + .collect(Collectors.toList()); + } + + private List fromRiskFactorsCsv(String value) { + if (value == null || value.isBlank()) { + return new ArrayList<>(); + } + + return Arrays.stream(value.split(",")) + .map(String::trim) + .filter(item -> !item.isEmpty()) + .collect(Collectors.toList()); + } + } From 5272ef774a6e135121e2edd8ced74b40911c8b66 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 28 Sep 2026 12:47:27 +0530 Subject: [PATCH 03/73] tb screen api changes --- .../service/impl/TBScreeningServiceImpl.java | 43 ++++++++++++++----- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java index 5cff0bd0c..60ae88a40 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java @@ -95,19 +95,42 @@ public String save(TBScreeningRequestDTO requestDTO) throws Exception { public String getByUserId(GetBenRequestHandler request) { try { List dtos = new ArrayList<>(); - List tbScreeningList = tbScreeningRepo.getByUserId(request.getAshaId()); - tbScreeningList.forEach(tbScreening -> dtos.add(modelMapper.map(tbScreening, TBScreeningDTO.class))); - TBScreeningRequestDTO tbScreeningRequestDTO = new TBScreeningRequestDTO(); - tbScreeningRequestDTO.setTbScreeningList(dtos); - tbScreeningRequestDTO.setUserId(request.getAshaId()); + + List tbScreeningList = + tbScreeningRepo.getByUserId(request.getAshaId()); + + for (TBScreening tbScreening : tbScreeningList) { + TBScreeningDTO dto = + modelMapper.map(tbScreening, TBScreeningDTO.class); + + // Comma-separated String -> List + dto.setKeyPopulationRiskFactorIds( + fromRiskFactorIdsCsv( + tbScreening.getKeyPopulationRiskFactorIds())); + + // Comma-separated String -> List + dto.setKeyPopulationRiskFactors( + fromRiskFactorsCsv( + tbScreening.getKeyPopulationRiskFactors())); + + dtos.add(dto); + } + + TBScreeningRequestDTO response = new TBScreeningRequestDTO(); + response.setTbScreeningList(dtos); + response.setUserId(request.getAshaId()); + Gson gson = new GsonBuilder() - .setDateFormat("MMM dd, yyyy h:mm:ss a") // Set the desired date format + .setDateFormat("MMM dd, yyyy h:mm:ss a") .create(); - return gson.toJson(tbScreeningRequestDTO); - }catch (Exception e){ - logger.error("TBScreening Exception:"+e.getMessage()); + + return gson.toJson(response); + + } catch (Exception e) { + logger.error("Failed to retrieve TB screening details", e); + throw new IllegalStateException( + "Failed to retrieve TB screening details", e); } - return null; } @PostConstruct From a96c9888fd862130440225fbaa1b0f56c1accd8b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 28 Sep 2026 17:20:02 +0530 Subject: [PATCH 04/73] tb screen api changes --- .../com/iemr/flw/service/impl/TBScreeningServiceImpl.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java index 60ae88a40..adf3e0d1b 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBScreeningServiceImpl.java @@ -124,6 +124,13 @@ public String getByUserId(GetBenRequestHandler request) { .setDateFormat("MMM dd, yyyy h:mm:ss a") .create(); + + + String responseJson = gson.toJson(response); + + // Print complete response + logger.info("TB Screening COMPLETE RESPONSE: {}", responseJson); + return gson.toJson(response); } catch (Exception e) { From 6220f276e66aa2b0268b64df370d067d38227b68 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 29 Sep 2026 15:25:57 +0530 Subject: [PATCH 05/73] new api for tb referral follow up feature --- .../com/iemr/flw/controller/TBController.java | 67 ++++++++++ .../flw/domain/iemr/TbReferralFollowUp.java | 50 ++++++++ .../flw/dto/iemr/TBConfirmedRequestDTO.java | 1 + .../flw/dto/iemr/TbReferralFollowUpDTO.java | 13 ++ .../dto/iemr/TbReferralFollowUpListDTO.java | 14 ++ .../flw/repo/iemr/TbReferralFollowUpRepo.java | 15 +++ .../flw/service/TBConfirmedCaseService.java | 5 + .../impl/TBConfirmedCaseServiceImpl.java | 120 ++++++++++++++++-- 8 files changed, 275 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/TbReferralFollowUpDTO.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/TbReferralFollowUpListDTO.java create mode 100644 src/main/java/com/iemr/flw/repo/iemr/TbReferralFollowUpRepo.java diff --git a/src/main/java/com/iemr/flw/controller/TBController.java b/src/main/java/com/iemr/flw/controller/TBController.java index becc387a9..3d1abdefe 100644 --- a/src/main/java/com/iemr/flw/controller/TBController.java +++ b/src/main/java/com/iemr/flw/controller/TBController.java @@ -5,6 +5,7 @@ import com.iemr.flw.dto.iemr.TBConfirmedRequestDTO; import com.iemr.flw.dto.iemr.TBScreeningRequestDTO; import com.iemr.flw.dto.iemr.TBSuspectedRequestDTO; +import com.iemr.flw.dto.iemr.TbReferralFollowUpDTO; import com.iemr.flw.service.TBConfirmedCaseService; import com.iemr.flw.service.TBScreeningService; import com.iemr.flw.service.TBSuspectedService; @@ -192,6 +193,72 @@ public String getConfirmedByBenId( return response.toString(); } + @Operation(summary = "save tb referral follow up") + @RequestMapping(value = { "/referralFollowUp/save" }, method = { RequestMethod.POST }) + public String saveReferralFollowUp( + @RequestBody TbReferralFollowUpDTO requestDTO, + @RequestHeader(value = "jwtToken") String token) { + + OutputResponse response = new OutputResponse(); + + try { + if (requestDTO != null) { + + logger.info("request object with timestamp : " + + new Timestamp(System.currentTimeMillis()) + " " + + requestDTO); + + String result = tbConfirmedCaseService.saveReferralFollowUp(requestDTO, token); + + if (result != null) + response.setResponse(result); + else + response.setError(500, "No record saved"); + + } else { + response.setError(500, "Invalid/NULL request obj"); + } + } catch (Exception e) { + logger.error("Error in save tb referral follow up details : ", e); + response.setError(500, "Error in save referral follow up details : " + e.getMessage()); + } + + return response.toString(); + } + + + @Operation(summary = "save tb referral follow up") + @RequestMapping(value = { "/referralFollowUp/getAll" }, method = { RequestMethod.POST }) + public String getReferralFollowUp( + @RequestHeader(value = "jwtToken") String token) { + + OutputResponse response = new OutputResponse(); + + try { + if (token != null) { + + logger.info("request object with timestamp : " + + new Timestamp(System.currentTimeMillis()) + " " + + token); + + String result = tbConfirmedCaseService.getReferralFollowUp(token); + + if (result != null) + response.setResponse(result); + else + response.setError(500, "No record saved"); + + } else { + response.setError(500, "Invalid/NULL request obj"); + } + } catch (Exception e) { + logger.error("Error in save tb referral follow up details : ", e); + response.setError(500, "Error in save referral follow up details : " + e.getMessage()); + } + + return response.toString(); + } + } diff --git a/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java b/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java new file mode 100644 index 000000000..5adb2f88e --- /dev/null +++ b/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java @@ -0,0 +1,50 @@ +package com.iemr.flw.domain.iemr; + +import jakarta.persistence.*; +import lombok.Data; +import org.checkerframework.checker.units.qual.C; + +import java.lang.reflect.Type; +import java.sql.Timestamp; + +@Data +@Table(schema = "tb_referral_follow_up") +public class TbReferralFollowUp { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "ben_id") + private Long benId; + + @Column(name = "household_id") + private Long houseHoldId; + + @Column(name = "referred_on_date") + private Timestamp referredOnDate; + + @Column(name = "follow_up_date") + private Timestamp followUpDate; + + @Column(name = "follow_up_status") + private String followUpStatus; + + @Column(name = "created_date") + private Timestamp createdDate; + + @Column(name = "created_date") + private Timestamp updatedDate; + + @Column(name = "created_by") + private String createdBy; + + @Column(name = "updated_by") + private String updatedBy; + + @Column(name = "synced_by") + private String syncedBy; + + @Column(name = "user_id") + private Integer userId; + +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/TBConfirmedRequestDTO.java b/src/main/java/com/iemr/flw/dto/iemr/TBConfirmedRequestDTO.java index d3e76a4a7..9d3dab172 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBConfirmedRequestDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBConfirmedRequestDTO.java @@ -10,4 +10,5 @@ public class TBConfirmedRequestDTO { private Long userId; private List tbConfirmedList; + } diff --git a/src/main/java/com/iemr/flw/dto/iemr/TbReferralFollowUpDTO.java b/src/main/java/com/iemr/flw/dto/iemr/TbReferralFollowUpDTO.java new file mode 100644 index 000000000..ccd86e3e7 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/TbReferralFollowUpDTO.java @@ -0,0 +1,13 @@ +package com.iemr.flw.dto.iemr; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class TbReferralFollowUpDTO { + private Long benId; + private Long houseHoldId; + TbReferralFollowUpListDTO fields; +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/TbReferralFollowUpListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/TbReferralFollowUpListDTO.java new file mode 100644 index 000000000..a9f3e07ea --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/TbReferralFollowUpListDTO.java @@ -0,0 +1,14 @@ +package com.iemr.flw.dto.iemr; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class TbReferralFollowUpListDTO { + @JsonProperty("referred_on_date") + private String referredOnDate; + @JsonProperty("follow_up_date") + private String followUpDate; + @JsonProperty("follow_up_status") + private String followUpStatus; +} diff --git a/src/main/java/com/iemr/flw/repo/iemr/TbReferralFollowUpRepo.java b/src/main/java/com/iemr/flw/repo/iemr/TbReferralFollowUpRepo.java new file mode 100644 index 000000000..e41bb6b8f --- /dev/null +++ b/src/main/java/com/iemr/flw/repo/iemr/TbReferralFollowUpRepo.java @@ -0,0 +1,15 @@ +package com.iemr.flw.repo.iemr; + +import com.iemr.flw.domain.iemr.TbReferralFollowUp; +import io.swagger.v3.oas.annotations.info.License; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import javax.swing.*; +import java.util.List; + +@Repository +public interface TbReferralFollowUpRepo extends JpaRepository { + List findByUserId(Integer userId); +} diff --git a/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java b/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java index 6471f7996..36fbebffa 100644 --- a/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java +++ b/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java @@ -1,6 +1,7 @@ package com.iemr.flw.service; import com.iemr.flw.domain.iemr.TBConfirmedCaseDTO; +import com.iemr.flw.dto.iemr.TbReferralFollowUpDTO; import org.springframework.stereotype.Service; import java.util.List; @@ -15,4 +16,8 @@ public interface TBConfirmedCaseService { String getByUserId(String authorisation) throws Exception; String getByProviderServiceMapId(Integer providerServiceMapID, Integer villageID) throws Exception; + + String saveReferralFollowUp(TbReferralFollowUpDTO requestDTO, String token); + + String getReferralFollowUp(String token); } 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 836d853ac..a3ab25859 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -2,14 +2,13 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.iemr.flw.domain.iemr.DynamicForm; -import com.iemr.flw.domain.iemr.TBConfirmedCaseDTO; -import com.iemr.flw.domain.iemr.TBConfirmedCase; -import com.iemr.flw.domain.iemr.BenVisitDetail; +import com.iemr.flw.domain.iemr.*; +import com.iemr.flw.dto.iemr.TbReferralFollowUpDTO; import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.iemr.DynamicFormRepo; import com.iemr.flw.repo.iemr.FormResponseRepo; import com.iemr.flw.repo.iemr.TBConfirmedTreatmentRepository; +import com.iemr.flw.repo.iemr.TbReferralFollowUpRepo; import com.iemr.flw.seeder.TbCounsellingV2FormSeeder; import com.iemr.flw.service.IncentiveLogicService; import com.iemr.flw.service.CampConfigService; @@ -25,12 +24,8 @@ import java.sql.Timestamp; import java.time.LocalDate; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; +import java.time.format.DateTimeFormatter; +import java.util.*; import java.util.stream.Collectors; @Service @@ -57,6 +52,9 @@ public class TBConfirmedCaseServiceImpl implements TBConfirmedCaseService { @Autowired private BeneficiaryRepo beneficiaryRepo; + @Autowired + private TbReferralFollowUpRepo tbReferralFollowUpRepo; + public TBConfirmedCaseServiceImpl(TBConfirmedTreatmentRepository repository, FormResponseRepo formResponseRepo, DynamicFormRepo dynamicFormRepo) { @@ -204,6 +202,108 @@ public String getByProviderServiceMapId(Integer providerServiceMapID, Integer vi return buildTbConfirmedCasesResponse(null, list); } + @Override + public String saveReferralFollowUp(TbReferralFollowUpDTO requestDTO, String token) { + OutputResponse response = new OutputResponse(); + + try { + + TbReferralFollowUp tbReferralFollowUp = new TbReferralFollowUp(); + + if(!token.isEmpty() && token!=null && requestDTO!=null){ + String userName = jwtUtil.extractUsername(token); + Integer userId = jwtUtil.extractUserId(token); + tbReferralFollowUp.setBenId(requestDTO.getBenId()); + tbReferralFollowUp.setHouseHoldId(requestDTO.getHouseHoldId()); + tbReferralFollowUp.setSyncedBy(userName); + tbReferralFollowUp.setCreatedBy(userName); + tbReferralFollowUp.setUserId(userId); + if(requestDTO.getFields().getReferredOnDate()!=null && !requestDTO.getFields().getFollowUpDate().isEmpty()){ + Timestamp referOnDate = Timestamp.valueOf(requestDTO.getFields().getReferredOnDate()); + tbReferralFollowUp.setFollowUpDate(referOnDate); + + } + + if(requestDTO.getFields().getFollowUpDate()!=null && !requestDTO.getFields().getFollowUpDate().isEmpty()){ + Timestamp followUpDate = Timestamp.valueOf(requestDTO.getFields().getFollowUpDate()); + tbReferralFollowUp.setFollowUpDate(followUpDate); + + } + tbReferralFollowUp.setFollowUpStatus(requestDTO.getFields().getFollowUpStatus()); + } + + tbReferralFollowUpRepo.save(tbReferralFollowUp); + response.setResponse("TB Referral follow up saved successfully"); + + + + }catch (Exception e){ + response.setError(500,e.getMessage()); + return response.toString(); + } + + + return response.toString(); + } + + @Override + public String getReferralFollowUp(String token) { + OutputResponse response = new OutputResponse(); + + try { + + List tbReferralFollowUpDTOS = new ArrayList<>(); + + if (token != null && !token.isEmpty()) { + + Integer userId = jwtUtil.extractUserId(token); + + List tbReferralFollowUps = + tbReferralFollowUpRepo.findByUserId(userId); + + DateTimeFormatter formatter = + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + for (TbReferralFollowUp referral : tbReferralFollowUps) { + + TbReferralFollowUpDTO dto = new TbReferralFollowUpDTO(); + + dto.setBenId(referral.getBenId()); + dto.setHouseHoldId(referral.getHouseHoldId()); + + if (referral.getReferredOnDate() != null) { + dto.getFields().setReferredOnDate( + referral.getReferredOnDate() + .toLocalDateTime() + .format(formatter) + ); + } + + if (referral.getFollowUpDate() != null) { + dto.getFields().setFollowUpDate( + referral.getFollowUpDate() + .toLocalDateTime() + .format(formatter) + ); + } + + dto.getFields().setFollowUpStatus(referral.getFollowUpStatus()); + + tbReferralFollowUpDTOS.add(dto); + } + + response.setResponse(tbReferralFollowUpDTOS.toString()); + + } + + } catch (Exception e) { + response.setError(500,e.getMessage()); + return response.toString(); + } + + return response.toString(); + } + private String buildTbConfirmedCasesResponse(Integer userId, List list) { List dtoList = list.stream().map(this::toDTO).collect(Collectors.toList()); From cd1af6b7a3ba06e7f74df5335be222bd55abde87 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 29 Sep 2026 15:27:11 +0530 Subject: [PATCH 06/73] new api for tb referral follow up feature --- src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java b/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java index 5adb2f88e..bf204885c 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java @@ -8,7 +8,7 @@ import java.sql.Timestamp; @Data -@Table(schema = "tb_referral_follow_up") +@Table(name = "tb_referral_follow_up",schema = "db_iemr") public class TbReferralFollowUp { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) From 4963ba8c4c56a7082e0d37e6ba793446756f9ba5 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 29 Sep 2026 15:30:38 +0530 Subject: [PATCH 07/73] new api for tb referral follow up feature --- .../flw/dto/iemr/TbReferralFollowUpDTO.java | 1 + .../impl/TBConfirmedCaseServiceImpl.java | 78 +++++++++++-------- 2 files changed, 46 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/iemr/flw/dto/iemr/TbReferralFollowUpDTO.java b/src/main/java/com/iemr/flw/dto/iemr/TbReferralFollowUpDTO.java index ccd86e3e7..a0a3bcee7 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TbReferralFollowUpDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TbReferralFollowUpDTO.java @@ -8,6 +8,7 @@ @Data public class TbReferralFollowUpDTO { private Long benId; + private Integer userId; private Long houseHoldId; TbReferralFollowUpListDTO fields; } 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 a3ab25859..7fbbfce87 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -1,9 +1,11 @@ package com.iemr.flw.service.impl; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.iemr.flw.domain.iemr.*; import com.iemr.flw.dto.iemr.TbReferralFollowUpDTO; +import com.iemr.flw.dto.iemr.TbReferralFollowUpListDTO; import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.iemr.DynamicFormRepo; import com.iemr.flw.repo.iemr.FormResponseRepo; @@ -251,54 +253,64 @@ public String getReferralFollowUp(String token) { OutputResponse response = new OutputResponse(); try { + if (token == null || token.trim().isEmpty()) { + response.setError(400, "Token is required"); + return response.toString(); + } - List tbReferralFollowUpDTOS = new ArrayList<>(); - - if (token != null && !token.isEmpty()) { - - Integer userId = jwtUtil.extractUserId(token); - - List tbReferralFollowUps = - tbReferralFollowUpRepo.findByUserId(userId); + Integer userId = jwtUtil.extractUserId(token); - DateTimeFormatter formatter = - DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + List referrals = + tbReferralFollowUpRepo.findByUserId(userId); - for (TbReferralFollowUp referral : tbReferralFollowUps) { + List referralDTOs = new ArrayList<>(); - TbReferralFollowUpDTO dto = new TbReferralFollowUpDTO(); + DateTimeFormatter formatter = + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - dto.setBenId(referral.getBenId()); - dto.setHouseHoldId(referral.getHouseHoldId()); + for (TbReferralFollowUp referral : referrals) { - if (referral.getReferredOnDate() != null) { - dto.getFields().setReferredOnDate( - referral.getReferredOnDate() - .toLocalDateTime() - .format(formatter) - ); - } + TbReferralFollowUpDTO dto = new TbReferralFollowUpDTO(); + dto.setBenId(referral.getBenId()); + dto.setUserId(referral.getUserId()); + dto.setHouseHoldId(referral.getHouseHoldId()); - if (referral.getFollowUpDate() != null) { - dto.getFields().setFollowUpDate( - referral.getFollowUpDate() - .toLocalDateTime() - .format(formatter) - ); - } + // Initialize nested DTO before setting fields + TbReferralFollowUpListDTO fields = + new TbReferralFollowUpListDTO(); - dto.getFields().setFollowUpStatus(referral.getFollowUpStatus()); + if (referral.getReferredOnDate() != null) { + fields.setReferredOnDate( + referral.getReferredOnDate() + .toLocalDateTime() + .format(formatter) + ); + } - tbReferralFollowUpDTOS.add(dto); + if (referral.getFollowUpDate() != null) { + fields.setFollowUpDate( + referral.getFollowUpDate() + .toLocalDateTime() + .format(formatter) + ); } - response.setResponse(tbReferralFollowUpDTOS.toString()); + fields.setFollowUpStatus(referral.getFollowUpStatus()); + dto.setFields(fields); + referralDTOs.add(dto); } + ObjectMapper objectMapper = new ObjectMapper(); + + response.setResponse( + objectMapper.writeValueAsString(referralDTOs) + ); + } catch (Exception e) { - response.setError(500,e.getMessage()); - return response.toString(); + // Replace with your project's logger if available + e.printStackTrace(); + response.setError(500, "Failed to fetch referral follow-up: " + e.getMessage()); } return response.toString(); From 5db08538098d5cb08fe8722b0bf766155e13d003 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 29 Sep 2026 15:40:48 +0530 Subject: [PATCH 08/73] new api for tb referral follow up feature --- src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java b/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java index bf204885c..ecd78adb4 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java @@ -8,6 +8,7 @@ import java.sql.Timestamp; @Data +@Entity @Table(name = "tb_referral_follow_up",schema = "db_iemr") public class TbReferralFollowUp { @Id From 14a7cf7a470e8ac56c03ef157eec1e0ae9ce2a7e Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 29 Sep 2026 15:45:44 +0530 Subject: [PATCH 09/73] new api for tb referral follow up feature --- src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java b/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java index ecd78adb4..6d642dbb8 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java @@ -33,7 +33,7 @@ public class TbReferralFollowUp { @Column(name = "created_date") private Timestamp createdDate; - @Column(name = "created_date") + @Column(name = "updated_date") private Timestamp updatedDate; @Column(name = "created_by") From 5be34a83f8bc3cc920d15428188b24af9c39a762 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 29 Sep 2026 18:04:30 +0530 Subject: [PATCH 10/73] add sync date and sync by column in every table --- src/main/java/com/iemr/flw/domain/iemr/AHDForm.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/ANCVisit.java | 5 +++++ .../java/com/iemr/flw/domain/iemr/AdolescentHealth.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/AncCare.java | 4 ++++ .../com/iemr/flw/domain/iemr/AncCounsellingCare.java | 8 ++++++++ .../com/iemr/flw/domain/iemr/AshaSupervisorMapping.java | 9 +++++++++ src/main/java/com/iemr/flw/domain/iemr/AshaWorker.java | 8 ++++++++ .../com/iemr/flw/domain/iemr/BenAnthropometryDetail.java | 2 ++ .../java/com/iemr/flw/domain/iemr/BenChiefComplaint.java | 1 + .../java/com/iemr/flw/domain/iemr/BenFlowStatus.java | 7 +++++++ .../com/iemr/flw/domain/iemr/BenPhysicalVitalDetail.java | 1 + .../java/com/iemr/flw/domain/iemr/BenReferDetails.java | 1 + src/main/java/com/iemr/flw/domain/iemr/CDR.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java | 8 ++++++++ .../java/com/iemr/flw/domain/iemr/CbacDetailsImer.java | 1 + .../java/com/iemr/flw/domain/iemr/ChildRegister.java | 7 +++++++ .../iemr/flw/domain/iemr/ChronicDiseaseVisitEntity.java | 9 +++++++++ .../java/com/iemr/flw/domain/iemr/DeliveryOutcome.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/DewormingForm.java | 7 +++++++ .../com/iemr/flw/domain/iemr/DiagnosticDocument.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/DiagnosticOrder.java | 7 +++++++ .../iemr/flw/domain/iemr/DiagnosticProviderToken.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/DiagnosticResult.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/DynamicForm.java | 1 + .../com/iemr/flw/domain/iemr/EligibleCoupleRegister.java | 7 +++++++ .../com/iemr/flw/domain/iemr/EligibleCoupleTracking.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/EyeCheckupVisit.java | 8 ++++++++ .../com/iemr/flw/domain/iemr/FilariasisCampaign.java | 8 ++++++++ src/main/java/com/iemr/flw/domain/iemr/FormResponse.java | 2 ++ src/main/java/com/iemr/flw/domain/iemr/FormSection.java | 1 + src/main/java/com/iemr/flw/domain/iemr/FormVersion.java | 1 + .../java/com/iemr/flw/domain/iemr/GeneralOpdData.java | 6 ++++++ .../java/com/iemr/flw/domain/iemr/GeneralOpdEntry.java | 9 +++++++++ src/main/java/com/iemr/flw/domain/iemr/HBYC.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/HbncPart1.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/HbncPart2.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/HbncVisit.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/HbncVisitCard.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/HbycChildVisit.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/HighRiskAssess.java | 6 ++++++ .../com/iemr/flw/domain/iemr/IFAFormSubmissionData.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/IRSRound.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/IfaDistribution.java | 8 ++++++++ .../java/com/iemr/flw/domain/iemr/IncentiveActivity.java | 6 +++++- .../flw/domain/iemr/IncentiveActivityLangMapping.java | 5 +++++ .../iemr/flw/domain/iemr/IncentiveActivityRecord.java | 7 +++++++ .../iemr/flw/domain/iemr/IncentivePendingActivity.java | 8 ++++++++ .../java/com/iemr/flw/domain/iemr/InfantRegister.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/LeprosyFollowUp.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/MDSR.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/MalariaFollowUp.java | 7 +++++++ .../com/iemr/flw/domain/iemr/MdaDistributionData.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/MicroBirthPlan.java | 8 +++++++- .../java/com/iemr/flw/domain/iemr/MosquitoNetEntity.java | 6 ++++++ .../flw/domain/iemr/NonPregnantWomanHighRiskAssess.java | 6 ++++++ .../flw/domain/iemr/NonPregnantWomanHighRiskTrack.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/Notification.java | 8 ++++++++ .../java/com/iemr/flw/domain/iemr/OptionCondition.java | 1 + .../java/com/iemr/flw/domain/iemr/OrsDistribution.java | 6 ++++++ .../java/com/iemr/flw/domain/iemr/OtpBeneficiary.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/PHCReviewForm.java | 6 ++++++ src/main/java/com/iemr/flw/domain/iemr/PMSMA.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/PNCVisit.java | 7 +++++++ .../com/iemr/flw/domain/iemr/PhyGeneralExamination.java | 1 + .../flw/domain/iemr/PregnantWomanHighRiskAssess.java | 7 +++++++ .../iemr/flw/domain/iemr/PregnantWomanHighRiskTrack.java | 6 ++++++ .../com/iemr/flw/domain/iemr/PregnantWomanRegister.java | 8 +++++++- .../com/iemr/flw/domain/iemr/PrescribedDrugDetail.java | 1 + .../com/iemr/flw/domain/iemr/PrescriptionDetail.java | 1 + .../com/iemr/flw/domain/iemr/PulsePolioCampaign.java | 6 ++++++ .../java/com/iemr/flw/domain/iemr/QuestionOption.java | 1 + .../java/com/iemr/flw/domain/iemr/QuestionResponse.java | 1 + .../com/iemr/flw/domain/iemr/QuestionValidation.java | 1 + src/main/java/com/iemr/flw/domain/iemr/SamVisit.java | 7 +++++++ .../com/iemr/flw/domain/iemr/SammelanAttachment.java | 8 ++++++++ .../java/com/iemr/flw/domain/iemr/SammelanRecord.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/ScreeningAesje.java | 8 ++++++++ .../com/iemr/flw/domain/iemr/ScreeningFilariasis.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/ScreeningKalaAzar.java | 8 ++++++++ .../java/com/iemr/flw/domain/iemr/ScreeningLeprosy.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/ScreeningMalaria.java | 6 ++++++ .../java/com/iemr/flw/domain/iemr/SectionQuestion.java | 1 + .../java/com/iemr/flw/domain/iemr/SectionResponse.java | 1 + .../java/com/iemr/flw/domain/iemr/StopTBDiagnostics.java | 7 +++++++ .../iemr/flw/domain/iemr/StopTBGeneralExamination.java | 7 +++++++ .../java/com/iemr/flw/domain/iemr/StopTBGeneralOpd.java | 7 +++++++ .../com/iemr/flw/domain/iemr/StopTBRegistration.java | 6 ++++++ .../java/com/iemr/flw/domain/iemr/TBConfirmedCase.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/TBScreening.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java | 7 +++++++ .../com/iemr/flw/domain/iemr/TbReferralFollowUp.java | 2 +- .../java/com/iemr/flw/domain/iemr/UserFcmTokenData.java | 9 ++++++++- src/main/java/com/iemr/flw/domain/iemr/UwinSession.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/VHNDForm.java | 6 ++++++ src/main/java/com/iemr/flw/domain/iemr/Vaccine.java | 7 +++++++ src/main/java/com/iemr/flw/domain/iemr/VhncForm.java | 7 +++++++ 97 files changed, 565 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/AHDForm.java b/src/main/java/com/iemr/flw/domain/iemr/AHDForm.java index a9a20dfb6..808ba7827 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/AHDForm.java +++ b/src/main/java/com/iemr/flw/domain/iemr/AHDForm.java @@ -44,4 +44,11 @@ public class AHDForm { @Column(name = "form_type") private String formType; + + @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/domain/iemr/ANCVisit.java b/src/main/java/com/iemr/flw/domain/iemr/ANCVisit.java index 4128f0826..c39047f73 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/ANCVisit.java +++ b/src/main/java/com/iemr/flw/domain/iemr/ANCVisit.java @@ -173,7 +173,12 @@ public class ANCVisit { @Column(name = "place_of_ancId") private Integer placeOfAncId; + @Column(name = "synced_by") + private String syncedBy; + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; diff --git a/src/main/java/com/iemr/flw/domain/iemr/AdolescentHealth.java b/src/main/java/com/iemr/flw/domain/iemr/AdolescentHealth.java index 140087069..3aa0ac4b7 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/AdolescentHealth.java +++ b/src/main/java/com/iemr/flw/domain/iemr/AdolescentHealth.java @@ -68,5 +68,12 @@ public class AdolescentHealth { @Column(name = "created_by") private String createdBy; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; + } diff --git a/src/main/java/com/iemr/flw/domain/iemr/AncCare.java b/src/main/java/com/iemr/flw/domain/iemr/AncCare.java index 6b1d5c752..63da1f0f2 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/AncCare.java +++ b/src/main/java/com/iemr/flw/domain/iemr/AncCare.java @@ -1,10 +1,13 @@ package com.iemr.flw.domain.iemr; import jakarta.persistence.*; +import lombok.Data; + import java.sql.Timestamp; import java.util.Objects; @Entity +@Data @Table(name = "t_anccare", schema = "db_iemr") public class AncCare { private long id; @@ -41,6 +44,7 @@ public class AncCare { private Timestamp syncedDate; private String reservedForChange; + @Id @Column(name = "ID") public long getId() { diff --git a/src/main/java/com/iemr/flw/domain/iemr/AncCounsellingCare.java b/src/main/java/com/iemr/flw/domain/iemr/AncCounsellingCare.java index 18a3f7ad4..e80fb13a5 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/AncCounsellingCare.java +++ b/src/main/java/com/iemr/flw/domain/iemr/AncCounsellingCare.java @@ -3,6 +3,7 @@ import jakarta.persistence.*; import lombok.Data; +import java.sql.Timestamp; import java.time.LocalDate; import java.time.LocalDateTime; @@ -112,6 +113,13 @@ public class AncCounsellingCare { @Column(name = "malpresentation") private Boolean malpresentation = false; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; + /* ---------- Lifecycle Hooks ---------- */ @PrePersist diff --git a/src/main/java/com/iemr/flw/domain/iemr/AshaSupervisorMapping.java b/src/main/java/com/iemr/flw/domain/iemr/AshaSupervisorMapping.java index ee641db8b..1817d8dee 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/AshaSupervisorMapping.java +++ b/src/main/java/com/iemr/flw/domain/iemr/AshaSupervisorMapping.java @@ -9,6 +9,8 @@ import lombok.Data; import lombok.NoArgsConstructor; +import java.sql.Timestamp; + @Entity @Table(name = "asha_supervisor_mapping") @Data @@ -31,4 +33,11 @@ public class AshaSupervisorMapping { @Column(name = "deleted", insertable = false, updatable = true) private Boolean deleted; + + @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/domain/iemr/AshaWorker.java b/src/main/java/com/iemr/flw/domain/iemr/AshaWorker.java index 2df2bf43c..0c3e3b928 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/AshaWorker.java +++ b/src/main/java/com/iemr/flw/domain/iemr/AshaWorker.java @@ -4,6 +4,7 @@ import jakarta.validation.constraints.*; import lombok.*; +import java.sql.Timestamp; import java.time.LocalDate; @@ -109,4 +110,11 @@ public class AshaWorker { @Column(name = "supervisorMobile") private String supervisorMobile; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; + } diff --git a/src/main/java/com/iemr/flw/domain/iemr/BenAnthropometryDetail.java b/src/main/java/com/iemr/flw/domain/iemr/BenAnthropometryDetail.java index 777e80118..f4e23e6d8 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/BenAnthropometryDetail.java +++ b/src/main/java/com/iemr/flw/domain/iemr/BenAnthropometryDetail.java @@ -65,6 +65,8 @@ public class BenAnthropometryDetail { @Column(name = "SyncedBy") private String syncedBy; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; + } diff --git a/src/main/java/com/iemr/flw/domain/iemr/BenChiefComplaint.java b/src/main/java/com/iemr/flw/domain/iemr/BenChiefComplaint.java index 3b016c5fc..964f73c3c 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/BenChiefComplaint.java +++ b/src/main/java/com/iemr/flw/domain/iemr/BenChiefComplaint.java @@ -68,6 +68,7 @@ public class BenChiefComplaint { @Column(name = "SyncedBy") private String syncedBy; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/BenFlowStatus.java b/src/main/java/com/iemr/flw/domain/iemr/BenFlowStatus.java index b4600e265..3451414a7 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/BenFlowStatus.java +++ b/src/main/java/com/iemr/flw/domain/iemr/BenFlowStatus.java @@ -79,4 +79,11 @@ public class BenFlowStatus { @Column(name = "deleted", insertable = false) private Boolean deleted; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/BenPhysicalVitalDetail.java b/src/main/java/com/iemr/flw/domain/iemr/BenPhysicalVitalDetail.java index 15b03aee4..328877a01 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/BenPhysicalVitalDetail.java +++ b/src/main/java/com/iemr/flw/domain/iemr/BenPhysicalVitalDetail.java @@ -71,6 +71,7 @@ public class BenPhysicalVitalDetail { @Column(name = "SyncedBy") private String syncedBy; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/BenReferDetails.java b/src/main/java/com/iemr/flw/domain/iemr/BenReferDetails.java index 2112f3110..061aa9d9f 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/BenReferDetails.java +++ b/src/main/java/com/iemr/flw/domain/iemr/BenReferDetails.java @@ -126,6 +126,7 @@ public class BenReferDetails { private String syncedBy; @Expose + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; diff --git a/src/main/java/com/iemr/flw/domain/iemr/CDR.java b/src/main/java/com/iemr/flw/domain/iemr/CDR.java index 89744928c..e3e028dee 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/CDR.java +++ b/src/main/java/com/iemr/flw/domain/iemr/CDR.java @@ -93,4 +93,11 @@ public class CDR { @Column(name = "updated_by") private String updatedBy; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; + } diff --git a/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java b/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java index e33e15439..ec032f84a 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java +++ b/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java @@ -3,6 +3,7 @@ import jakarta.persistence.*; import lombok.Data; +import java.sql.Timestamp; import java.time.LocalDate; import java.time.LocalDateTime; @@ -42,6 +43,13 @@ public class CampaignOrs { @Column(name = "updated_date") private LocalDateTime updatedDate; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; + /* ---------- Auto timestamps ---------- */ @PrePersist diff --git a/src/main/java/com/iemr/flw/domain/iemr/CbacDetailsImer.java b/src/main/java/com/iemr/flw/domain/iemr/CbacDetailsImer.java index 989ed1d1c..d46335ef9 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/CbacDetailsImer.java +++ b/src/main/java/com/iemr/flw/domain/iemr/CbacDetailsImer.java @@ -262,6 +262,7 @@ public class CbacDetailsImer { @Column(name = "SyncedBy") private String syncedBy; @Expose + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; diff --git a/src/main/java/com/iemr/flw/domain/iemr/ChildRegister.java b/src/main/java/com/iemr/flw/domain/iemr/ChildRegister.java index 4b4ca99aa..c4cbef8d4 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/ChildRegister.java +++ b/src/main/java/com/iemr/flw/domain/iemr/ChildRegister.java @@ -75,4 +75,11 @@ public class ChildRegister { @Column(name = "updated_by") private String updatedBy; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/ChronicDiseaseVisitEntity.java b/src/main/java/com/iemr/flw/domain/iemr/ChronicDiseaseVisitEntity.java index 10689cff3..f6b42581c 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/ChronicDiseaseVisitEntity.java +++ b/src/main/java/com/iemr/flw/domain/iemr/ChronicDiseaseVisitEntity.java @@ -2,6 +2,8 @@ import jakarta.persistence.*; import lombok.Data; + +import java.sql.Timestamp; import java.time.LocalDate; import java.time.LocalDateTime; @@ -59,6 +61,13 @@ public class ChronicDiseaseVisitEntity { @Column(name = "updated_date") private LocalDateTime updatedDate; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; + // 🔹 Auto timestamps @PrePersist protected void onCreate() { diff --git a/src/main/java/com/iemr/flw/domain/iemr/DeliveryOutcome.java b/src/main/java/com/iemr/flw/domain/iemr/DeliveryOutcome.java index d3a1b56ce..d6e6868b1 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/DeliveryOutcome.java +++ b/src/main/java/com/iemr/flw/domain/iemr/DeliveryOutcome.java @@ -77,4 +77,11 @@ public class DeliveryOutcome { @Column(name = "updated_date") private Timestamp updatedDate; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; + } diff --git a/src/main/java/com/iemr/flw/domain/iemr/DewormingForm.java b/src/main/java/com/iemr/flw/domain/iemr/DewormingForm.java index 631dbfd51..1638e52e5 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/DewormingForm.java +++ b/src/main/java/com/iemr/flw/domain/iemr/DewormingForm.java @@ -47,4 +47,11 @@ public class DewormingForm { @Column(name = "form_type") private String formType; + + @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/domain/iemr/DiagnosticDocument.java b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticDocument.java index d4e78747f..508617747 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/DiagnosticDocument.java +++ b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticDocument.java @@ -86,4 +86,11 @@ public class DiagnosticDocument { @Column(name = "vanSerialNo") private Long vanSerialNo; + + @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/domain/iemr/DiagnosticOrder.java b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java index 197999fe2..e9369e76f 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java +++ b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java @@ -103,4 +103,11 @@ public class DiagnosticOrder { @Column(name = "vanSerialNo") private Long vanSerialNo; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/DiagnosticProviderToken.java b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticProviderToken.java index 8ef233060..6ee5ea126 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/DiagnosticProviderToken.java +++ b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticProviderToken.java @@ -48,4 +48,11 @@ public class DiagnosticProviderToken { @Column(name = "vanSerialNo") private Long vanSerialNo; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/DiagnosticResult.java b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticResult.java index 6cb9fba6b..734e98e98 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/DiagnosticResult.java +++ b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticResult.java @@ -72,4 +72,11 @@ public class DiagnosticResult { @Column(name = "vanSerialNo") private Long vanSerialNo; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/DynamicForm.java b/src/main/java/com/iemr/flw/domain/iemr/DynamicForm.java index af183d66c..1c9a30530 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/DynamicForm.java +++ b/src/main/java/com/iemr/flw/domain/iemr/DynamicForm.java @@ -106,6 +106,7 @@ public class DynamicForm { @Column(name = "vanSerialNo") private Long vanSerialNo; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; diff --git a/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleRegister.java b/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleRegister.java index 4a6226b44..b6299f903 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleRegister.java +++ b/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleRegister.java @@ -179,5 +179,12 @@ public class EligibleCoupleRegister { @Column(name = "kit_photo2", columnDefinition = "LONGTEXT") private String kitPhoto2; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleTracking.java b/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleTracking.java index 99b8b5115..929fc93bf 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleTracking.java +++ b/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleTracking.java @@ -72,4 +72,11 @@ public class EligibleCoupleTracking { @Column(name = "discharge_summary2") private String dischargeSummary2; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/EyeCheckupVisit.java b/src/main/java/com/iemr/flw/domain/iemr/EyeCheckupVisit.java index c15e84101..945fdeb48 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/EyeCheckupVisit.java +++ b/src/main/java/com/iemr/flw/domain/iemr/EyeCheckupVisit.java @@ -3,6 +3,7 @@ import jakarta.persistence.*; import lombok.Data; +import java.sql.Timestamp; import java.time.LocalDate; import java.time.LocalDateTime; @Data @@ -51,4 +52,11 @@ public class EyeCheckupVisit { @Column(name = "updated_date") private LocalDateTime updatedDate = LocalDateTime.now(); + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/FilariasisCampaign.java b/src/main/java/com/iemr/flw/domain/iemr/FilariasisCampaign.java index 2f0c12ad1..d2cd218a7 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/FilariasisCampaign.java +++ b/src/main/java/com/iemr/flw/domain/iemr/FilariasisCampaign.java @@ -3,6 +3,7 @@ import jakarta.persistence.*; import lombok.Data; +import java.sql.Timestamp; import java.time.LocalDate; import java.time.LocalDateTime; @@ -49,6 +50,13 @@ public class FilariasisCampaign { @Column(name = "updated_date") private LocalDateTime updatedDate; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; + /* ---------- Auto timestamps ---------- */ @PrePersist diff --git a/src/main/java/com/iemr/flw/domain/iemr/FormResponse.java b/src/main/java/com/iemr/flw/domain/iemr/FormResponse.java index 8b338ee54..c6c160082 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/FormResponse.java +++ b/src/main/java/com/iemr/flw/domain/iemr/FormResponse.java @@ -112,6 +112,7 @@ public class FormResponse { @Column(name = "vanSerialNo") private Long vanSerialNo; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; @@ -121,6 +122,7 @@ public class FormResponse { @Column(name = "SyncFailureReason") private String syncFailureReason; + @PrePersist protected void onCreate() { createdAt = new Timestamp(System.currentTimeMillis()); diff --git a/src/main/java/com/iemr/flw/domain/iemr/FormSection.java b/src/main/java/com/iemr/flw/domain/iemr/FormSection.java index 28f50859b..b06ce48e7 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/FormSection.java +++ b/src/main/java/com/iemr/flw/domain/iemr/FormSection.java @@ -112,6 +112,7 @@ public class FormSection { @Column(name = "vanSerialNo") private Long vanSerialNo; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; diff --git a/src/main/java/com/iemr/flw/domain/iemr/FormVersion.java b/src/main/java/com/iemr/flw/domain/iemr/FormVersion.java index 5902aa218..397fc22f6 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/FormVersion.java +++ b/src/main/java/com/iemr/flw/domain/iemr/FormVersion.java @@ -99,6 +99,7 @@ public class FormVersion { @Column(name = "vanSerialNo") private Long vanSerialNo; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; diff --git a/src/main/java/com/iemr/flw/domain/iemr/GeneralOpdData.java b/src/main/java/com/iemr/flw/domain/iemr/GeneralOpdData.java index f2d81f185..b2b0f2d02 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/GeneralOpdData.java +++ b/src/main/java/com/iemr/flw/domain/iemr/GeneralOpdData.java @@ -220,5 +220,11 @@ public class GeneralOpdData { @Column(name = "village") private String village; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/GeneralOpdEntry.java b/src/main/java/com/iemr/flw/domain/iemr/GeneralOpdEntry.java index 2e68c9fe9..9254dab88 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/GeneralOpdEntry.java +++ b/src/main/java/com/iemr/flw/domain/iemr/GeneralOpdEntry.java @@ -3,6 +3,8 @@ import jakarta.persistence.*; import lombok.Data; +import java.sql.Timestamp; + @Entity @Data @Table(name = "general_opd_entry") // Updated table name @@ -42,4 +44,11 @@ public class GeneralOpdEntry { @Column(name = "follow_up_date") private String followUpDate; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/HBYC.java b/src/main/java/com/iemr/flw/domain/iemr/HBYC.java index 2b5b1a08c..a52852a27 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/HBYC.java +++ b/src/main/java/com/iemr/flw/domain/iemr/HBYC.java @@ -102,4 +102,11 @@ public class HBYC { @Column(name = "updated_by") private String updatedBy; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/HbncPart1.java b/src/main/java/com/iemr/flw/domain/iemr/HbncPart1.java index f4ff6a5cd..02cb6736d 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/HbncPart1.java +++ b/src/main/java/com/iemr/flw/domain/iemr/HbncPart1.java @@ -97,4 +97,11 @@ public class HbncPart1 { @Column(name = "updated_by") private String updatedBy; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/HbncPart2.java b/src/main/java/com/iemr/flw/domain/iemr/HbncPart2.java index b7828719f..7139086c5 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/HbncPart2.java +++ b/src/main/java/com/iemr/flw/domain/iemr/HbncPart2.java @@ -82,4 +82,11 @@ public class HbncPart2 { @Column(name = "updated_by") private String updatedBy; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/HbncVisit.java b/src/main/java/com/iemr/flw/domain/iemr/HbncVisit.java index fa35c41e3..aa797a12c 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/HbncVisit.java +++ b/src/main/java/com/iemr/flw/domain/iemr/HbncVisit.java @@ -110,4 +110,11 @@ public class HbncVisit { @Column(name = "is_admitted_in_sncu") private Boolean is_admitted_in_sncu; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; }; diff --git a/src/main/java/com/iemr/flw/domain/iemr/HbncVisitCard.java b/src/main/java/com/iemr/flw/domain/iemr/HbncVisitCard.java index 8008d07d5..c01d445f8 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/HbncVisitCard.java +++ b/src/main/java/com/iemr/flw/domain/iemr/HbncVisitCard.java @@ -79,4 +79,11 @@ public class HbncVisitCard { @Column(name = "updated_by") private String updatedBy; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/HbycChildVisit.java b/src/main/java/com/iemr/flw/domain/iemr/HbycChildVisit.java index 205716cc9..03b92da4f 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/HbycChildVisit.java +++ b/src/main/java/com/iemr/flw/domain/iemr/HbycChildVisit.java @@ -130,5 +130,12 @@ public class HbycChildVisit { @Column(name = "is_complementary_feeding") private Boolean complementary_feeding; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private java.sql.Timestamp syncedDate; + // Getters and Setters } diff --git a/src/main/java/com/iemr/flw/domain/iemr/HighRiskAssess.java b/src/main/java/com/iemr/flw/domain/iemr/HighRiskAssess.java index 4089e77c8..aac6f2df6 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/HighRiskAssess.java +++ b/src/main/java/com/iemr/flw/domain/iemr/HighRiskAssess.java @@ -45,4 +45,10 @@ public class HighRiskAssess { @Column(name = "updated_by") private String updatedBy; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/IFAFormSubmissionData.java b/src/main/java/com/iemr/flw/domain/iemr/IFAFormSubmissionData.java index 428269028..cf8e9e10d 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/IFAFormSubmissionData.java +++ b/src/main/java/com/iemr/flw/domain/iemr/IFAFormSubmissionData.java @@ -62,4 +62,11 @@ public void onUpdate() { this.updatedAt = LocalDateTime.now(); } + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private java.sql.Timestamp syncedDate; + } diff --git a/src/main/java/com/iemr/flw/domain/iemr/IRSRound.java b/src/main/java/com/iemr/flw/domain/iemr/IRSRound.java index 6f3143e05..2574e26aa 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/IRSRound.java +++ b/src/main/java/com/iemr/flw/domain/iemr/IRSRound.java @@ -7,6 +7,7 @@ import java.math.BigInteger; import java.sql.Date; +import java.sql.Timestamp; import java.time.LocalDate; @Entity @@ -34,4 +35,10 @@ public class IRSRound { @Column(name = "user_id") private Integer userId; + @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/domain/iemr/IfaDistribution.java b/src/main/java/com/iemr/flw/domain/iemr/IfaDistribution.java index c6b613549..9cbe52062 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/IfaDistribution.java +++ b/src/main/java/com/iemr/flw/domain/iemr/IfaDistribution.java @@ -5,6 +5,7 @@ import lombok.Data; import org.checkerframework.checker.units.qual.C; +import java.sql.Timestamp; import java.time.LocalDate; @Entity @@ -39,4 +40,11 @@ public class IfaDistribution { @Column(name = "ifa_bottle_count") private String ifaBottleCount; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivity.java b/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivity.java index 6402d9208..ce8ebc02e 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivity.java +++ b/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivity.java @@ -66,6 +66,10 @@ public class IncentiveActivity { @Column(name = "group_category_name") private String groupCategoryName; + @Column(name = "synced_by") + private String syncedBy; - + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivityLangMapping.java b/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivityLangMapping.java index 0c81338c1..f3ce1c2a7 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivityLangMapping.java +++ b/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivityLangMapping.java @@ -43,5 +43,10 @@ public class IncentiveActivityLangMapping { @Column(name = "hindi_activity_description") private String hindiActivityDescription; + @Column(name = "synced_by") + private String syncedBy; + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivityRecord.java b/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivityRecord.java index 4a84055f0..c9b16da46 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivityRecord.java +++ b/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivityRecord.java @@ -100,4 +100,11 @@ private void applyDefaults() { isApproved = false; } } + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/IncentivePendingActivity.java b/src/main/java/com/iemr/flw/domain/iemr/IncentivePendingActivity.java index 3f35dc599..b302b37b1 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/IncentivePendingActivity.java +++ b/src/main/java/com/iemr/flw/domain/iemr/IncentivePendingActivity.java @@ -1,5 +1,6 @@ package com.iemr.flw.domain.iemr; +import java.sql.Timestamp; import java.util.Date; import jakarta.persistence.*; @@ -36,4 +37,11 @@ public class IncentivePendingActivity { @Column(name = "updated_date") private Date updatedDate; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/InfantRegister.java b/src/main/java/com/iemr/flw/domain/iemr/InfantRegister.java index aee846efc..9c09c3472 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/InfantRegister.java +++ b/src/main/java/com/iemr/flw/domain/iemr/InfantRegister.java @@ -103,4 +103,11 @@ public class InfantRegister { @Column(name = "is_Referred_higher_facility") private Boolean isReferredHigherFacility; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/LeprosyFollowUp.java b/src/main/java/com/iemr/flw/domain/iemr/LeprosyFollowUp.java index 5e0d78f06..5decbe777 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/LeprosyFollowUp.java +++ b/src/main/java/com/iemr/flw/domain/iemr/LeprosyFollowUp.java @@ -87,4 +87,11 @@ public class LeprosyFollowUp { @Column(name = "last_mod_date") private Timestamp lastModDate; + + @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/domain/iemr/MDSR.java b/src/main/java/com/iemr/flw/domain/iemr/MDSR.java index 301fdd915..cace87f8c 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/MDSR.java +++ b/src/main/java/com/iemr/flw/domain/iemr/MDSR.java @@ -63,4 +63,11 @@ public class MDSR { @Column(name = "mdsr_death_cert_file") private String mdsrDeathCertFile; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java b/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java index 0e8437141..3381d59d8 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java +++ b/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java @@ -54,4 +54,11 @@ public class MaaMeeting { @Column(name = "created_by") private String createdBy; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/MalariaFollowUp.java b/src/main/java/com/iemr/flw/domain/iemr/MalariaFollowUp.java index bc30e7dd4..115c371e8 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/MalariaFollowUp.java +++ b/src/main/java/com/iemr/flw/domain/iemr/MalariaFollowUp.java @@ -56,4 +56,11 @@ public class MalariaFollowUp { @UpdateTimestamp @Column(name = "last_mod_date") private Timestamp lastModDate; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/MdaDistributionData.java b/src/main/java/com/iemr/flw/domain/iemr/MdaDistributionData.java index 7985393a7..b59164e3d 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/MdaDistributionData.java +++ b/src/main/java/com/iemr/flw/domain/iemr/MdaDistributionData.java @@ -60,4 +60,11 @@ public class MdaDistributionData { @Column(name = "AshaId") private Integer ashaId; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/MicroBirthPlan.java b/src/main/java/com/iemr/flw/domain/iemr/MicroBirthPlan.java index 9b1458994..f5a89eccf 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/MicroBirthPlan.java +++ b/src/main/java/com/iemr/flw/domain/iemr/MicroBirthPlan.java @@ -66,4 +66,10 @@ public class MicroBirthPlan { private String modeOfTransportation; // Mode of transport -} \ No newline at end of file + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private java.sql.Timestamp syncedDate; +} diff --git a/src/main/java/com/iemr/flw/domain/iemr/MosquitoNetEntity.java b/src/main/java/com/iemr/flw/domain/iemr/MosquitoNetEntity.java index 1f57d23ae..e75a3b0e6 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/MosquitoNetEntity.java +++ b/src/main/java/com/iemr/flw/domain/iemr/MosquitoNetEntity.java @@ -31,4 +31,10 @@ public class MosquitoNetEntity { @Column(name = "is_net_distributed") private String isNetDistributed; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private java.sql.Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/NonPregnantWomanHighRiskAssess.java b/src/main/java/com/iemr/flw/domain/iemr/NonPregnantWomanHighRiskAssess.java index 2b901a6d3..863358b6d 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/NonPregnantWomanHighRiskAssess.java +++ b/src/main/java/com/iemr/flw/domain/iemr/NonPregnantWomanHighRiskAssess.java @@ -50,4 +50,10 @@ public class NonPregnantWomanHighRiskAssess { @Column(name = "visit_date") private Timestamp visitDate; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/NonPregnantWomanHighRiskTrack.java b/src/main/java/com/iemr/flw/domain/iemr/NonPregnantWomanHighRiskTrack.java index 6a3374d02..9f506a9cd 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/NonPregnantWomanHighRiskTrack.java +++ b/src/main/java/com/iemr/flw/domain/iemr/NonPregnantWomanHighRiskTrack.java @@ -77,4 +77,11 @@ public class NonPregnantWomanHighRiskTrack { @Column(name = "is_deleted") private Boolean isDeleted; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/Notification.java b/src/main/java/com/iemr/flw/domain/iemr/Notification.java index b2f4ba718..27da0402f 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/Notification.java +++ b/src/main/java/com/iemr/flw/domain/iemr/Notification.java @@ -64,4 +64,12 @@ protected void onCreate() { this.readDate = null; } } + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "synced_date") + private Date syncedDate; } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/domain/iemr/OptionCondition.java b/src/main/java/com/iemr/flw/domain/iemr/OptionCondition.java index 50af2b382..975a23ad2 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/OptionCondition.java +++ b/src/main/java/com/iemr/flw/domain/iemr/OptionCondition.java @@ -92,6 +92,7 @@ public class OptionCondition { @Column(name = "vanSerialNo") private Long vanSerialNo; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; diff --git a/src/main/java/com/iemr/flw/domain/iemr/OrsDistribution.java b/src/main/java/com/iemr/flw/domain/iemr/OrsDistribution.java index e5603deef..4e633303b 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/OrsDistribution.java +++ b/src/main/java/com/iemr/flw/domain/iemr/OrsDistribution.java @@ -39,4 +39,10 @@ public class OrsDistribution { @Column(name = "updated_at", insertable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP") private java.sql.Timestamp updatedAt; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private java.sql.Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/OtpBeneficiary.java b/src/main/java/com/iemr/flw/domain/iemr/OtpBeneficiary.java index 15a87bd0e..be82820b8 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/OtpBeneficiary.java +++ b/src/main/java/com/iemr/flw/domain/iemr/OtpBeneficiary.java @@ -30,4 +30,11 @@ public class OtpBeneficiary { @Column(name = "createdAt", updatable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP") private Timestamp createdAt; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/PHCReviewForm.java b/src/main/java/com/iemr/flw/domain/iemr/PHCReviewForm.java index 4dea0ce7c..42665c94c 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/PHCReviewForm.java +++ b/src/main/java/com/iemr/flw/domain/iemr/PHCReviewForm.java @@ -57,4 +57,10 @@ public class PHCReviewForm { @Column(name = "form_type") private String formType; + @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/domain/iemr/PMSMA.java b/src/main/java/com/iemr/flw/domain/iemr/PMSMA.java index f1320fee9..65b5c1607 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/PMSMA.java +++ b/src/main/java/com/iemr/flw/domain/iemr/PMSMA.java @@ -141,4 +141,11 @@ public class PMSMA { @Column(name = "anyOtherHighRiskCondition") private String anyOtherHighRiskCondition; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/PNCVisit.java b/src/main/java/com/iemr/flw/domain/iemr/PNCVisit.java index 04eb6f4a8..64bd2cbc8 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/PNCVisit.java +++ b/src/main/java/com/iemr/flw/domain/iemr/PNCVisit.java @@ -94,4 +94,11 @@ public class PNCVisit { @Column(name = "delivery_discharge_summary_image4") private String deliveryDischargeSummary4; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/PhyGeneralExamination.java b/src/main/java/com/iemr/flw/domain/iemr/PhyGeneralExamination.java index b99fd804b..466845c1d 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/PhyGeneralExamination.java +++ b/src/main/java/com/iemr/flw/domain/iemr/PhyGeneralExamination.java @@ -74,6 +74,7 @@ public class PhyGeneralExamination { @Column(name = "SyncedBy") private String syncedBy; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/PregnantWomanHighRiskAssess.java b/src/main/java/com/iemr/flw/domain/iemr/PregnantWomanHighRiskAssess.java index 8e61655f4..b070ea61a 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/PregnantWomanHighRiskAssess.java +++ b/src/main/java/com/iemr/flw/domain/iemr/PregnantWomanHighRiskAssess.java @@ -55,4 +55,11 @@ public class PregnantWomanHighRiskAssess { @Column(name = "is_high_risk") private Boolean isHighRisk; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/PregnantWomanHighRiskTrack.java b/src/main/java/com/iemr/flw/domain/iemr/PregnantWomanHighRiskTrack.java index 516cabfa1..f4c64623d 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/PregnantWomanHighRiskTrack.java +++ b/src/main/java/com/iemr/flw/domain/iemr/PregnantWomanHighRiskTrack.java @@ -98,4 +98,10 @@ public class PregnantWomanHighRiskTrack { @Column(name = "is_deleted") private Boolean isDeleted; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/PregnantWomanRegister.java b/src/main/java/com/iemr/flw/domain/iemr/PregnantWomanRegister.java index 736f3afe3..9dba97dd7 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/PregnantWomanRegister.java +++ b/src/main/java/com/iemr/flw/domain/iemr/PregnantWomanRegister.java @@ -116,5 +116,11 @@ public class PregnantWomanRegister { @Column(name = "updated_by") private String updatedBy; -} + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; +} diff --git a/src/main/java/com/iemr/flw/domain/iemr/PrescribedDrugDetail.java b/src/main/java/com/iemr/flw/domain/iemr/PrescribedDrugDetail.java index 9a0a1502c..bbf63f08c 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/PrescribedDrugDetail.java +++ b/src/main/java/com/iemr/flw/domain/iemr/PrescribedDrugDetail.java @@ -77,6 +77,7 @@ public class PrescribedDrugDetail { @Column(name = "SyncedBy") private String syncedBy; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/PrescriptionDetail.java b/src/main/java/com/iemr/flw/domain/iemr/PrescriptionDetail.java index 5bc5295d6..a0dd33a29 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/PrescriptionDetail.java +++ b/src/main/java/com/iemr/flw/domain/iemr/PrescriptionDetail.java @@ -65,6 +65,7 @@ public class PrescriptionDetail { @Column(name = "SyncedBy") private String syncedBy; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java b/src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java index ddf7b8b60..af0bd0914 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java +++ b/src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java @@ -3,6 +3,7 @@ import jakarta.persistence.*; import lombok.Data; +import java.sql.Timestamp; import java.time.LocalDate; import java.time.LocalDateTime; @@ -56,5 +57,10 @@ protected void onUpdate() { this.updatedDate = LocalDateTime.now(); } + @Column(name = "synced_by") + private String syncedBy; + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/QuestionOption.java b/src/main/java/com/iemr/flw/domain/iemr/QuestionOption.java index 124ea6faf..c732045a0 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/QuestionOption.java +++ b/src/main/java/com/iemr/flw/domain/iemr/QuestionOption.java @@ -98,6 +98,7 @@ public class QuestionOption { @Column(name = "vanSerialNo") private Long vanSerialNo; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; diff --git a/src/main/java/com/iemr/flw/domain/iemr/QuestionResponse.java b/src/main/java/com/iemr/flw/domain/iemr/QuestionResponse.java index d743ad2dc..0c1821856 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/QuestionResponse.java +++ b/src/main/java/com/iemr/flw/domain/iemr/QuestionResponse.java @@ -92,6 +92,7 @@ public class QuestionResponse { @Column(name = "vanSerialNo") private Long vanSerialNo; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; diff --git a/src/main/java/com/iemr/flw/domain/iemr/QuestionValidation.java b/src/main/java/com/iemr/flw/domain/iemr/QuestionValidation.java index b7d41dc16..300853c53 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/QuestionValidation.java +++ b/src/main/java/com/iemr/flw/domain/iemr/QuestionValidation.java @@ -90,6 +90,7 @@ public class QuestionValidation { @Column(name = "vanSerialNo") private Long vanSerialNo; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; diff --git a/src/main/java/com/iemr/flw/domain/iemr/SamVisit.java b/src/main/java/com/iemr/flw/domain/iemr/SamVisit.java index 568226095..57957847d 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/SamVisit.java +++ b/src/main/java/com/iemr/flw/domain/iemr/SamVisit.java @@ -70,4 +70,11 @@ public class SamVisit { @Column(name = "updated_date") private LocalDateTime updatedDate = LocalDateTime.now(); + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private java.sql.Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/SammelanAttachment.java b/src/main/java/com/iemr/flw/domain/iemr/SammelanAttachment.java index e94dd2bc5..e98e84d10 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/SammelanAttachment.java +++ b/src/main/java/com/iemr/flw/domain/iemr/SammelanAttachment.java @@ -1,5 +1,6 @@ package com.iemr.flw.domain.iemr; +import java.sql.Timestamp; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Data; @@ -25,4 +26,11 @@ public class SammelanAttachment { private String fileType; @Lob private byte[] fileData; + + @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/domain/iemr/SammelanRecord.java b/src/main/java/com/iemr/flw/domain/iemr/SammelanRecord.java index 1ccc5bbd6..edef292e5 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/SammelanRecord.java +++ b/src/main/java/com/iemr/flw/domain/iemr/SammelanRecord.java @@ -51,4 +51,11 @@ public class SammelanRecord { @Lob @Column(columnDefinition = "LONGTEXT",name = "attachments") private String attachments; + + @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/domain/iemr/ScreeningAesje.java b/src/main/java/com/iemr/flw/domain/iemr/ScreeningAesje.java index 372908f99..2814c1e9e 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/ScreeningAesje.java +++ b/src/main/java/com/iemr/flw/domain/iemr/ScreeningAesje.java @@ -101,5 +101,13 @@ public class ScreeningAesje { @Column(name = "beneficiary_status_id") private Integer beneficiaryStatusId; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "synced_date") + private Date syncedDate; + // Getters and Setters } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/domain/iemr/ScreeningFilariasis.java b/src/main/java/com/iemr/flw/domain/iemr/ScreeningFilariasis.java index e75cb046c..79bcc3992 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/ScreeningFilariasis.java +++ b/src/main/java/com/iemr/flw/domain/iemr/ScreeningFilariasis.java @@ -83,4 +83,11 @@ public class ScreeningFilariasis { @Column(name = "user_id") private Integer userId; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "synced_date") + private Date syncedDate; } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/domain/iemr/ScreeningKalaAzar.java b/src/main/java/com/iemr/flw/domain/iemr/ScreeningKalaAzar.java index d6bcd7b6c..5e62152f7 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/ScreeningKalaAzar.java +++ b/src/main/java/com/iemr/flw/domain/iemr/ScreeningKalaAzar.java @@ -108,4 +108,12 @@ public class ScreeningKalaAzar { @Column(name = "beneficiary_status") private String beneficiaryStatus; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "synced_date") + private Date syncedDate; } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/domain/iemr/ScreeningLeprosy.java b/src/main/java/com/iemr/flw/domain/iemr/ScreeningLeprosy.java index 6a485eef7..22adb1f17 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/ScreeningLeprosy.java +++ b/src/main/java/com/iemr/flw/domain/iemr/ScreeningLeprosy.java @@ -225,4 +225,11 @@ public class ScreeningLeprosy { @Column(name = "LastModDate") private Timestamp lastModDate; + + @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/domain/iemr/ScreeningMalaria.java b/src/main/java/com/iemr/flw/domain/iemr/ScreeningMalaria.java index a310acb56..9d8ae1f3f 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/ScreeningMalaria.java +++ b/src/main/java/com/iemr/flw/domain/iemr/ScreeningMalaria.java @@ -139,5 +139,11 @@ public class ScreeningMalaria { @Column(name = "visit_date") private Date visitDate; + @Column(name = "synced_by") + private String syncedBy; + @org.hibernate.annotations.CreationTimestamp + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "synced_date") + private Date syncedDate; } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/domain/iemr/SectionQuestion.java b/src/main/java/com/iemr/flw/domain/iemr/SectionQuestion.java index 1aa324cb5..67fc109f6 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/SectionQuestion.java +++ b/src/main/java/com/iemr/flw/domain/iemr/SectionQuestion.java @@ -124,6 +124,7 @@ public class SectionQuestion { @Column(name = "vanSerialNo") private Long vanSerialNo; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; diff --git a/src/main/java/com/iemr/flw/domain/iemr/SectionResponse.java b/src/main/java/com/iemr/flw/domain/iemr/SectionResponse.java index d8877a50c..b75ac79a6 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/SectionResponse.java +++ b/src/main/java/com/iemr/flw/domain/iemr/SectionResponse.java @@ -85,6 +85,7 @@ public class SectionResponse { @Column(name = "vanSerialNo") private Long vanSerialNo; + @org.hibernate.annotations.CreationTimestamp @Column(name = "SyncedDate") private Timestamp syncedDate; diff --git a/src/main/java/com/iemr/flw/domain/iemr/StopTBDiagnostics.java b/src/main/java/com/iemr/flw/domain/iemr/StopTBDiagnostics.java index f9abde570..400074a06 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/StopTBDiagnostics.java +++ b/src/main/java/com/iemr/flw/domain/iemr/StopTBDiagnostics.java @@ -137,4 +137,11 @@ public class StopTBDiagnostics { @Column(name = "vanSerialNo") private Long vanSerialNo; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/StopTBGeneralExamination.java b/src/main/java/com/iemr/flw/domain/iemr/StopTBGeneralExamination.java index 9972d916d..6cfeaa28e 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/StopTBGeneralExamination.java +++ b/src/main/java/com/iemr/flw/domain/iemr/StopTBGeneralExamination.java @@ -130,4 +130,11 @@ public class StopTBGeneralExamination { @Column(name = "ben_id") private Long benId; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/StopTBGeneralOpd.java b/src/main/java/com/iemr/flw/domain/iemr/StopTBGeneralOpd.java index 4cfbb912a..a688b27d6 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/StopTBGeneralOpd.java +++ b/src/main/java/com/iemr/flw/domain/iemr/StopTBGeneralOpd.java @@ -78,4 +78,11 @@ public class StopTBGeneralOpd { @Column(name = "benVisitID") private Long benVisitID; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/StopTBRegistration.java b/src/main/java/com/iemr/flw/domain/iemr/StopTBRegistration.java index 4ce54a0db..551a37370 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/StopTBRegistration.java +++ b/src/main/java/com/iemr/flw/domain/iemr/StopTBRegistration.java @@ -76,4 +76,10 @@ public class StopTBRegistration { @Column(name = "deleted") private Boolean deleted; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java b/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java index c2c51a6fb..23347cf98 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java @@ -102,4 +102,11 @@ public class TBConfirmedCase { @Column(name = "visitCode") private Long visitCode; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private java.sql.Timestamp syncedDate; } 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 6867dd885..c08f12775 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java @@ -206,4 +206,11 @@ public class TBScreening { @Column(name = "short_breath") private Boolean shortBreath; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java b/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java index 8aa015ec1..be27aaa57 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java @@ -122,4 +122,11 @@ public class TBSuspected { @Column(name = "visitCode") private Long visitCode; + + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java b/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java index 6d642dbb8..24e00774c 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java @@ -48,4 +48,4 @@ public class TbReferralFollowUp { @Column(name = "user_id") private Integer userId; -} +} \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/domain/iemr/UserFcmTokenData.java b/src/main/java/com/iemr/flw/domain/iemr/UserFcmTokenData.java index dd56c5b28..7005ba1e6 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/UserFcmTokenData.java +++ b/src/main/java/com/iemr/flw/domain/iemr/UserFcmTokenData.java @@ -15,9 +15,16 @@ public class UserFcmTokenData { @GeneratedValue(strategy = IDENTITY) private int id; @Column(name = "user_id") - private Integer userId; + private Integer userId; @Column(name = "token") private String token; @Column(name = "updated_at") private Timestamp updatedAt; + @Column(name = "synced_by") + private String syncedBy; + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; } + + diff --git a/src/main/java/com/iemr/flw/domain/iemr/UwinSession.java b/src/main/java/com/iemr/flw/domain/iemr/UwinSession.java index 9ab6d5cb3..f87ed3177 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/UwinSession.java +++ b/src/main/java/com/iemr/flw/domain/iemr/UwinSession.java @@ -39,5 +39,12 @@ public class UwinSession { @Column(name = "created_by") private String createdBy; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; + } diff --git a/src/main/java/com/iemr/flw/domain/iemr/VHNDForm.java b/src/main/java/com/iemr/flw/domain/iemr/VHNDForm.java index 758cc449a..2de5f6062 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/VHNDForm.java +++ b/src/main/java/com/iemr/flw/domain/iemr/VHNDForm.java @@ -77,5 +77,11 @@ public class VHNDForm { @Column(name = "created_date", updatable = false) private Timestamp createdDate; + @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/domain/iemr/Vaccine.java b/src/main/java/com/iemr/flw/domain/iemr/Vaccine.java index 0a03d259e..6975d7a8f 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/Vaccine.java +++ b/src/main/java/com/iemr/flw/domain/iemr/Vaccine.java @@ -70,4 +70,11 @@ public class Vaccine { @Column(name = "LastModDate") private Timestamp lastModDate; + @Column(name = "synced_by") + private String syncedBy; + + @org.hibernate.annotations.CreationTimestamp + @Column(name = "synced_date") + private Timestamp syncedDate; + } 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 858554daf..f4370d79c 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/VhncForm.java +++ b/src/main/java/com/iemr/flw/domain/iemr/VhncForm.java @@ -66,4 +66,11 @@ 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 From 1fc4688c2fb434f212286be62f8f8fd1e959928d Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 30 Sep 2026 18:08:55 +0530 Subject: [PATCH 11/73] new feature for tb tpt follow up --- .../com/iemr/flw/controller/TBController.java | 73 ++++- .../flw/domain/iemr/TbReferralFollowUp.java | 5 +- .../iemr/flw/domain/iemr/TbTptFollowUp.java | 82 ++++++ .../iemr/flw/dto/iemr/TbTptFollowUpDTO.java | 11 + .../flw/dto/iemr/TbTptFollowUpListDTO.java | 46 +++ .../iemr/flw/repo/iemr/TbTptFollowUpRepo.java | 13 + .../flw/service/TBConfirmedCaseService.java | 5 + .../impl/TBConfirmedCaseServiceImpl.java | 278 +++++++++++++++++- 8 files changed, 504 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/iemr/flw/domain/iemr/TbTptFollowUp.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/TbTptFollowUpDTO.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/TbTptFollowUpListDTO.java create mode 100644 src/main/java/com/iemr/flw/repo/iemr/TbTptFollowUpRepo.java diff --git a/src/main/java/com/iemr/flw/controller/TBController.java b/src/main/java/com/iemr/flw/controller/TBController.java index 3d1abdefe..214f0e54b 100644 --- a/src/main/java/com/iemr/flw/controller/TBController.java +++ b/src/main/java/com/iemr/flw/controller/TBController.java @@ -2,10 +2,7 @@ import com.iemr.flw.domain.iemr.TBConfirmedCaseDTO; import com.iemr.flw.dto.identity.GetBenRequestHandler; -import com.iemr.flw.dto.iemr.TBConfirmedRequestDTO; -import com.iemr.flw.dto.iemr.TBScreeningRequestDTO; -import com.iemr.flw.dto.iemr.TBSuspectedRequestDTO; -import com.iemr.flw.dto.iemr.TbReferralFollowUpDTO; +import com.iemr.flw.dto.iemr.*; import com.iemr.flw.service.TBConfirmedCaseService; import com.iemr.flw.service.TBScreeningService; import com.iemr.flw.service.TBSuspectedService; @@ -261,4 +258,72 @@ public String getReferralFollowUp( + @Operation(summary = "save tb referral follow up") + @RequestMapping(value = { "/tptFollowUp/save" }, method = { RequestMethod.POST }) + public String savTptFollowUp( + @RequestBody TbTptFollowUpDTO requestDTO, + @RequestHeader(value = "jwtToken") String token) { + + OutputResponse response = new OutputResponse(); + + try { + if (requestDTO != null) { + + logger.info("request object with timestamp : " + + new Timestamp(System.currentTimeMillis()) + " " + + requestDTO); + + String result = tbConfirmedCaseService.saveTptFollowUp(requestDTO, token); + + if (result != null) + response.setResponse(result); + else + response.setError(500, "No record saved"); + + } else { + response.setError(500, "Invalid/NULL request obj"); + } + } catch (Exception e) { + logger.error("Error in save tb referral follow up details : ", e); + response.setError(500, "Error in save referral follow up details : " + e.getMessage()); + } + + return response.toString(); + } + + + @Operation(summary = "save tb referral follow up") + @RequestMapping(value = { "/tptFollowUp/getAll" }, method = { RequestMethod.POST }) + public String getTptFollowUp( + @RequestHeader(value = "jwtToken") String token) { + + OutputResponse response = new OutputResponse(); + + try { + if (token != null) { + + logger.info("request object with timestamp : " + + new Timestamp(System.currentTimeMillis()) + " " + + token); + + String result = tbConfirmedCaseService.getTptFollowUp(token); + + if (result != null) + response.setResponse(result); + else + response.setError(500, "No record saved"); + + } else { + response.setError(500, "Invalid/NULL request obj"); + } + } catch (Exception e) { + logger.error("Error in save tb referral follow up details : ", e); + response.setError(500, "Error in save referral follow up details : " + e.getMessage()); + } + + return response.toString(); + } + + + } diff --git a/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java b/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java index 24e00774c..206984dfc 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TbReferralFollowUp.java @@ -2,7 +2,8 @@ import jakarta.persistence.*; import lombok.Data; -import org.checkerframework.checker.units.qual.C; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.UpdateTimestamp; import java.lang.reflect.Type; import java.sql.Timestamp; @@ -30,9 +31,11 @@ public class TbReferralFollowUp { @Column(name = "follow_up_status") private String followUpStatus; + @CreationTimestamp @Column(name = "created_date") private Timestamp createdDate; + @UpdateTimestamp @Column(name = "updated_date") private Timestamp updatedDate; diff --git a/src/main/java/com/iemr/flw/domain/iemr/TbTptFollowUp.java b/src/main/java/com/iemr/flw/domain/iemr/TbTptFollowUp.java new file mode 100644 index 000000000..15900272c --- /dev/null +++ b/src/main/java/com/iemr/flw/domain/iemr/TbTptFollowUp.java @@ -0,0 +1,82 @@ +package com.iemr.flw.domain.iemr; + +import jakarta.persistence.*; +import lombok.Data; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.UpdateTimestamp; + +import java.sql.Timestamp; + +@Data +@Entity +@Table(name = "tb_tpt_follow_up",schema = "db_iemr") +public class TbTptFollowUp { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "ben_id") + private Long benId; + + @Column(name = "household_id") + private Long houseHoldId; + @Column(name = "regimen_type") + private String regimenType; + + @Column(name = "treatment_start_date") + private Timestamp treatmentStartDate; + + @Column(name = "expected_treatment_completion_date") + private Timestamp expectedTreatmentCompletionDate; + + @Column(name = "follow_up_date") + private Timestamp followUpDate; + + @Column(name = "follow_up_month") + private String followUpMonth; + + @Column(name = "adherence_to_medicines") + private String adherenceToMedicines; + + @Column(name = "any_discomfort") + private Boolean anyDiscomfort; + + @Column(name = "treatment_completed") + private Boolean treatmentCompleted; + + @Column(name = "actual_treatment_completion_date") + private Timestamp actualTreatmentCompletionDate; + + @Column(name = "tpt_outcome") + private String tptOutcome; + + @Column(name = "date_of_death") + private Timestamp dateOfDeath; + + @Column(name = "place_of_death") + private String placeOfDeath; + + @Column(name = "reason_for_death") + private String reasonForDeath; + + @CreationTimestamp + @Column(name = "created_date") + private Timestamp createdDate; + + @UpdateTimestamp + @Column(name = "updated_date") + private Timestamp updatedDate; + + @Column(name = "created_by") + private String createdBy; + + @Column(name = "updated_by") + private String updatedBy; + + @Column(name = "synced_by") + private String syncedBy; + + @Column(name = "user_id") + private Integer userId; + +} \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/dto/iemr/TbTptFollowUpDTO.java b/src/main/java/com/iemr/flw/dto/iemr/TbTptFollowUpDTO.java new file mode 100644 index 000000000..8a0c2ca35 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/TbTptFollowUpDTO.java @@ -0,0 +1,11 @@ +package com.iemr.flw.dto.iemr; + +import lombok.Data; + +@Data +public class TbTptFollowUpDTO { + private Long benId; + private Integer userId; + private Long houseHoldId; + TbTptFollowUpListDTO fields; +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/TbTptFollowUpListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/TbTptFollowUpListDTO.java new file mode 100644 index 000000000..92b5cb026 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/TbTptFollowUpListDTO.java @@ -0,0 +1,46 @@ +package com.iemr.flw.dto.iemr; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class TbTptFollowUpListDTO { + @JsonProperty("regimen_type") + private String regimenType; + + @JsonProperty("treatment_start_date") + private String treatmentStartDate; + + @JsonProperty("expected_treatment_completion_date") + private String expectedTreatmentCompletionDate; + + @JsonProperty("follow_up_date") + private String followUpDate; + + @JsonProperty("monthly_follow_up") + private String monthlyFollowUp; + + @JsonProperty("medicine_adherence") + private String medicineAdherence; + + @JsonProperty("any_discomfort") + private String anyDiscomfort; + + @JsonProperty("treatment_completed") + private String treatmentCompleted; + + @JsonProperty("actual_completion_date") + private String actualCompletionDate; + + @JsonProperty("tpt_outcome") + private String tptOutcome; + + @JsonProperty("date_of_death") + private String dateOfDeath; + + @JsonProperty("place_of_death") + private String placeOfDeath; + + @JsonProperty("reason_for_death") + private String reasonForDeath; +} diff --git a/src/main/java/com/iemr/flw/repo/iemr/TbTptFollowUpRepo.java b/src/main/java/com/iemr/flw/repo/iemr/TbTptFollowUpRepo.java new file mode 100644 index 000000000..f444d47a4 --- /dev/null +++ b/src/main/java/com/iemr/flw/repo/iemr/TbTptFollowUpRepo.java @@ -0,0 +1,13 @@ +package com.iemr.flw.repo.iemr; + +import com.iemr.flw.domain.iemr.TbReferralFollowUp; +import com.iemr.flw.domain.iemr.TbTptFollowUp; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface TbTptFollowUpRepo extends JpaRepository { + List findByUserId(Integer userId); +} diff --git a/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java b/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java index 36fbebffa..23871f1b2 100644 --- a/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java +++ b/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java @@ -2,6 +2,7 @@ import com.iemr.flw.domain.iemr.TBConfirmedCaseDTO; import com.iemr.flw.dto.iemr.TbReferralFollowUpDTO; +import com.iemr.flw.dto.iemr.TbTptFollowUpDTO; import org.springframework.stereotype.Service; import java.util.List; @@ -20,4 +21,8 @@ public interface TBConfirmedCaseService { String saveReferralFollowUp(TbReferralFollowUpDTO requestDTO, String token); String getReferralFollowUp(String token); + + String saveTptFollowUp(TbTptFollowUpDTO requestDTO, String token); + + String getTptFollowUp(String token); } 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 7fbbfce87..3f2125331 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -6,11 +6,10 @@ import com.iemr.flw.domain.iemr.*; import com.iemr.flw.dto.iemr.TbReferralFollowUpDTO; import com.iemr.flw.dto.iemr.TbReferralFollowUpListDTO; +import com.iemr.flw.dto.iemr.TbTptFollowUpDTO; +import com.iemr.flw.dto.iemr.TbTptFollowUpListDTO; import com.iemr.flw.repo.identity.BeneficiaryRepo; -import com.iemr.flw.repo.iemr.DynamicFormRepo; -import com.iemr.flw.repo.iemr.FormResponseRepo; -import com.iemr.flw.repo.iemr.TBConfirmedTreatmentRepository; -import com.iemr.flw.repo.iemr.TbReferralFollowUpRepo; +import com.iemr.flw.repo.iemr.*; import com.iemr.flw.seeder.TbCounsellingV2FormSeeder; import com.iemr.flw.service.IncentiveLogicService; import com.iemr.flw.service.CampConfigService; @@ -57,6 +56,8 @@ public class TBConfirmedCaseServiceImpl implements TBConfirmedCaseService { @Autowired private TbReferralFollowUpRepo tbReferralFollowUpRepo; + @Autowired + private TbTptFollowUpRepo tbTptFollowUpRepo; public TBConfirmedCaseServiceImpl(TBConfirmedTreatmentRepository repository, FormResponseRepo formResponseRepo, DynamicFormRepo dynamicFormRepo) { @@ -218,6 +219,7 @@ public String saveReferralFollowUp(TbReferralFollowUpDTO requestDTO, String toke tbReferralFollowUp.setBenId(requestDTO.getBenId()); tbReferralFollowUp.setHouseHoldId(requestDTO.getHouseHoldId()); tbReferralFollowUp.setSyncedBy(userName); + tbReferralFollowUp.setUpdatedBy(userName); tbReferralFollowUp.setCreatedBy(userName); tbReferralFollowUp.setUserId(userId); if(requestDTO.getFields().getReferredOnDate()!=null && !requestDTO.getFields().getFollowUpDate().isEmpty()){ @@ -316,6 +318,261 @@ public String getReferralFollowUp(String token) { return response.toString(); } + @Override + public String saveTptFollowUp(TbTptFollowUpDTO requestDTO, String token) { + + OutputResponse response = new OutputResponse(); + + try { + + TbTptFollowUp tbTptFollowUp = new TbTptFollowUp(); + + if (token != null && !token.isEmpty() && requestDTO != null) { + + String userName = jwtUtil.extractUsername(token); + Integer userId = jwtUtil.extractUserId(token); + + tbTptFollowUp.setBenId(requestDTO.getBenId()); + tbTptFollowUp.setUserId(userId); + + tbTptFollowUp.setCreatedBy(userName); + tbTptFollowUp.setUpdatedBy(userName); + + if (requestDTO.getFields() != null) { + + TbTptFollowUpListDTO fields = requestDTO.getFields(); + + tbTptFollowUp.setRegimenType(fields.getRegimenType()); + + if (fields.getTreatmentStartDate() != null + && !fields.getTreatmentStartDate().isEmpty()) { + + tbTptFollowUp.setTreatmentStartDate( + Timestamp.valueOf(fields.getTreatmentStartDate()) + ); + } + + if (fields.getExpectedTreatmentCompletionDate() != null + && !fields.getExpectedTreatmentCompletionDate().isEmpty()) { + + tbTptFollowUp.setExpectedTreatmentCompletionDate( + Timestamp.valueOf(fields.getExpectedTreatmentCompletionDate()) + ); + } + + if (fields.getFollowUpDate() != null + && !fields.getFollowUpDate().isEmpty()) { + + tbTptFollowUp.setFollowUpDate( + Timestamp.valueOf(fields.getFollowUpDate()) + ); + } + + tbTptFollowUp.setFollowUpMonth( + fields.getMonthlyFollowUp() + ); + + tbTptFollowUp.setAdherenceToMedicines( + fields.getMedicineAdherence() + ); + + tbTptFollowUp.setAnyDiscomfort( + convertBollen(fields.getAnyDiscomfort()) + ); + + tbTptFollowUp.setTreatmentCompleted( + convertBollen(fields.getTreatmentCompleted()) + ); + + if (fields.getActualCompletionDate() != null + && !fields.getActualCompletionDate().isEmpty()) { + + tbTptFollowUp.setActualTreatmentCompletionDate( + Timestamp.valueOf(fields.getActualCompletionDate()) + ); + } + + tbTptFollowUp.setTptOutcome( + fields.getTptOutcome() + ); + + if ("Death".equalsIgnoreCase(fields.getTptOutcome())) { + + if (fields.getDateOfDeath() != null + && !fields.getDateOfDeath().isEmpty()) { + + tbTptFollowUp.setDateOfDeath( + Timestamp.valueOf(fields.getDateOfDeath()) + ); + } + + tbTptFollowUp.setPlaceOfDeath( + fields.getPlaceOfDeath() + ); + + tbTptFollowUp.setReasonForDeath( + fields.getReasonForDeath() + ); + } + } + + tbTptFollowUpRepo.save(tbTptFollowUp); + } + + response.setResponse("TPT follow up saved successfully"); + + } catch (Exception e) { + + response.setError(500, e.getMessage()); + return response.toString(); + } + + return response.toString(); + } + + + @Override + public String getTptFollowUp(String token) { + + OutputResponse response = new OutputResponse(); + + try { + + if (token == null || token.trim().isEmpty()) { + response.setError(400, "Token is required"); + return response.toString(); + } + + Integer userId = jwtUtil.extractUserId(token); + + List tptFollowUps = + tbTptFollowUpRepo.findByUserId(userId); + + List tptFollowUpDTOs = + new ArrayList<>(); + + DateTimeFormatter formatter = + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + for (TbTptFollowUp tptFollowUp : tptFollowUps) { + + TbTptFollowUpDTO dto = new TbTptFollowUpDTO(); + + dto.setBenId(tptFollowUp.getBenId()); + dto.setUserId(tptFollowUp.getUserId()); + + TbTptFollowUpListDTO fields = + new TbTptFollowUpListDTO(); + + // Regimen Type + fields.setRegimenType( + tptFollowUp.getRegimenType() + ); + + // Treatment Start Date + if (tptFollowUp.getTreatmentStartDate() != null) { + fields.setTreatmentStartDate( + tptFollowUp.getTreatmentStartDate() + .toLocalDateTime() + .format(formatter) + ); + } + + // Expected Treatment Completion Date + if (tptFollowUp.getExpectedTreatmentCompletionDate() != null) { + fields.setExpectedTreatmentCompletionDate( + tptFollowUp.getExpectedTreatmentCompletionDate() + .toLocalDateTime() + .format(formatter) + ); + } + + // Follow Up Date + if (tptFollowUp.getFollowUpDate() != null) { + fields.setFollowUpDate( + tptFollowUp.getFollowUpDate() + .toLocalDateTime() + .format(formatter) + ); + } + + // Monthly Follow Up + fields.setMonthlyFollowUp( + tptFollowUp.getFollowUpMonth() + ); + + // Medicine Adherence + fields.setMedicineAdherence( + tptFollowUp.getAdherenceToMedicines() + ); + + // Any Discomfort + fields.setAnyDiscomfort( + convert(tptFollowUp.getAnyDiscomfort()) + ); + + // Treatment Completed + fields.setTreatmentCompleted( + convert(tptFollowUp.getTreatmentCompleted()) + ); + + // Actual Completion Date + if (tptFollowUp.getActualTreatmentCompletionDate() != null) { + fields.setActualCompletionDate( + tptFollowUp.getActualTreatmentCompletionDate() + .toLocalDateTime() + .format(formatter) + ); + } + + // TPT Outcome + fields.setTptOutcome( + tptFollowUp.getTptOutcome() + ); + + // Date of Death + if (tptFollowUp.getDateOfDeath() != null) { + fields.setDateOfDeath( + tptFollowUp.getDateOfDeath() + .toLocalDateTime() + .format(formatter) + ); + } + + // Place of Death + fields.setPlaceOfDeath( + tptFollowUp.getPlaceOfDeath() + ); + + // Reason for Death + fields.setReasonForDeath( + tptFollowUp.getReasonForDeath() + ); + + dto.setFields(fields); + + tptFollowUpDTOs.add(dto); + } + + ObjectMapper objectMapper = new ObjectMapper(); + + response.setResponse( + objectMapper.writeValueAsString(tptFollowUpDTOs) + ); + + } catch (Exception e) { + + e.printStackTrace(); + + response.setError( + 500, + "Failed to fetch TPT follow-up: " + e.getMessage() + ); + } + + return response.toString(); + } + private String buildTbConfirmedCasesResponse(Integer userId, List list) { List dtoList = list.stream().map(this::toDTO).collect(Collectors.toList()); @@ -366,4 +623,17 @@ private TBConfirmedCaseDTO toDTO(TBConfirmedCase entity) { return dto; } + + private String convert(Boolean value) { + if (value == null) return null; + return value ? "Yes" : "No"; + } + + private Boolean convertBollen(String value) { + if (value != null && !value.isEmpty()) { + return value.equalsIgnoreCase("Yes"); + } else { + return false; + } + } } From 01d5c3f762ac0764c1e86084aae3b195fe723f5f Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 30 Sep 2026 18:09:27 +0530 Subject: [PATCH 12/73] new feature for tb tpt follow up --- src/main/java/com/iemr/flw/controller/TBController.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/TBController.java b/src/main/java/com/iemr/flw/controller/TBController.java index 214f0e54b..6dae41132 100644 --- a/src/main/java/com/iemr/flw/controller/TBController.java +++ b/src/main/java/com/iemr/flw/controller/TBController.java @@ -258,7 +258,7 @@ public String getReferralFollowUp( - @Operation(summary = "save tb referral follow up") + @Operation(summary = "save tb tpt follow up") @RequestMapping(value = { "/tptFollowUp/save" }, method = { RequestMethod.POST }) public String savTptFollowUp( @RequestBody TbTptFollowUpDTO requestDTO, @@ -284,7 +284,7 @@ public String savTptFollowUp( response.setError(500, "Invalid/NULL request obj"); } } catch (Exception e) { - logger.error("Error in save tb referral follow up details : ", e); + logger.error("Error in save tb tpt follow up details : ", e); response.setError(500, "Error in save referral follow up details : " + e.getMessage()); } @@ -292,7 +292,7 @@ public String savTptFollowUp( } - @Operation(summary = "save tb referral follow up") + @Operation(summary = "save tb tpt follow up") @RequestMapping(value = { "/tptFollowUp/getAll" }, method = { RequestMethod.POST }) public String getTptFollowUp( @RequestHeader(value = "jwtToken") String token) { @@ -317,7 +317,7 @@ public String getTptFollowUp( response.setError(500, "Invalid/NULL request obj"); } } catch (Exception e) { - logger.error("Error in save tb referral follow up details : ", e); + logger.error("Error in save tb tpt follow up details : ", e); response.setError(500, "Error in save referral follow up details : " + e.getMessage()); } From 4c26b1f81a6eb19de7b321bab792d5724181772b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 30 Sep 2026 18:09:43 +0530 Subject: [PATCH 13/73] new feature for tb tpt follow up --- src/main/java/com/iemr/flw/controller/TBController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/TBController.java b/src/main/java/com/iemr/flw/controller/TBController.java index 6dae41132..9ec9f73a0 100644 --- a/src/main/java/com/iemr/flw/controller/TBController.java +++ b/src/main/java/com/iemr/flw/controller/TBController.java @@ -285,7 +285,7 @@ public String savTptFollowUp( } } catch (Exception e) { logger.error("Error in save tb tpt follow up details : ", e); - response.setError(500, "Error in save referral follow up details : " + e.getMessage()); + response.setError(500, "Error in save tpt follow up details : " + e.getMessage()); } return response.toString(); @@ -318,7 +318,7 @@ public String getTptFollowUp( } } catch (Exception e) { logger.error("Error in save tb tpt follow up details : ", e); - response.setError(500, "Error in save referral follow up details : " + e.getMessage()); + response.setError(500, "Error in save tpt follow up details : " + e.getMessage()); } return response.toString(); From 1fd54ab1e8d3b9f3f9c895f8c2658b028995fadf Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 30 Sep 2026 18:19:59 +0530 Subject: [PATCH 14/73] new feature for tb tpt follow up --- src/main/java/com/iemr/flw/domain/iemr/IRSRound.java | 2 +- .../com/iemr/flw/service/impl/IRSRoundServiceImpl.java | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/IRSRound.java b/src/main/java/com/iemr/flw/domain/iemr/IRSRound.java index 2574e26aa..c964765ee 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/IRSRound.java +++ b/src/main/java/com/iemr/flw/domain/iemr/IRSRound.java @@ -40,5 +40,5 @@ public class IRSRound { @org.hibernate.annotations.CreationTimestamp @Column(name = "synced_date") - private Timestamp syncedDate; + private Timestamp syncedDate = null; } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/service/impl/IRSRoundServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IRSRoundServiceImpl.java index 26a5c1c74..5e8853a5b 100644 --- a/src/main/java/com/iemr/flw/service/impl/IRSRoundServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IRSRoundServiceImpl.java @@ -7,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -26,7 +27,7 @@ public List addRounds(List dtos,Integer userId,String use } return irsRoundRepository.saveAll( dtos.stream() - .map(dto -> new IRSRound(null, dto.getDate(), dto.getRounds(), dto.getHouseholdId(),userName,userId)) + .map(dto -> new IRSRound(null, dto.getDate(), dto.getRounds(), dto.getHouseholdId(),userName,userId ,userName,getCurrentTimestamp())) .collect(Collectors.toList()) ); } @@ -35,4 +36,8 @@ public List addRounds(List dtos,Integer userId,String use public List getRounds(Long householdId) { return irsRoundRepository.findByHouseholdId(householdId); } + + private Timestamp getCurrentTimestamp() { + return new Timestamp(System.currentTimeMillis()); + } } From 7c7d2eab7b968f2131e1de3dfd6f827d1427bbc2 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 30 Sep 2026 22:45:12 +0530 Subject: [PATCH 15/73] new feature for tb tpt follow up --- src/main/java/com/iemr/flw/dto/iemr/TbTptFollowUpDTO.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/iemr/flw/dto/iemr/TbTptFollowUpDTO.java b/src/main/java/com/iemr/flw/dto/iemr/TbTptFollowUpDTO.java index 8a0c2ca35..370da8eb6 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TbTptFollowUpDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TbTptFollowUpDTO.java @@ -1,11 +1,15 @@ package com.iemr.flw.dto.iemr; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; @Data public class TbTptFollowUpDTO { + @JsonProperty("ben_id") private Long benId; + @JsonProperty("user_id") private Integer userId; + @JsonProperty("house_hold_id") private Long houseHoldId; TbTptFollowUpListDTO fields; } From 537520b918056ea46ffd64830c4757e6003a9ec4 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 1 Oct 2026 15:02:14 +0530 Subject: [PATCH 16/73] new feature for tb tpt follow up --- .../flw/service/impl/DeliveryOutcomeServiceImpl.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 3170deba0..3881904b9 100644 --- a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java @@ -170,7 +170,15 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getDeliveryOutcome() == 1) { createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY1); if (deliveryOutcome.getPlaceOfDelivery() != null) { - createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY1); + String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); + + if(placeOfDelivery != null && + (!placeOfDelivery.equalsIgnoreCase("home") || + !placeOfDelivery.equalsIgnoreCase("in transit") || + !placeOfDelivery.equalsIgnoreCase("other private hospital"))){ + createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY1); + + } } } } From d0f7bc419a663a5877ce8fecc0a9f4d5a4df20ef Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 1 Oct 2026 15:36:26 +0530 Subject: [PATCH 17/73] fix jsy incentive issue --- .../identity/RMNCHHouseHoldDetails.java | 8 ++++++ .../impl/DeliveryOutcomeServiceImpl.java | 28 ++++++++++++++++--- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java b/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java index 49f4d5a61..311abc7a6 100644 --- a/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java +++ b/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java @@ -353,4 +353,12 @@ public class RMNCHHouseHoldDetails { @Column(name = "registeredAtCampSiteId") private Integer registeredAtCampSiteId; + @Expose + @Column(name = "placeOfCurrentLiving") + private String placeOfCurrentLiving; + + @Expose + @Column(name = "nameOfInstitution") + private String nameOfInstitution; + } 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 3881904b9..efa1d29fe 100644 --- a/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DeliveryOutcomeServiceImpl.java @@ -171,7 +171,6 @@ public void checkAndAddJsyIncentive(List delOutList) { createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY1); if (deliveryOutcome.getPlaceOfDelivery() != null) { String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); - if(placeOfDelivery != null && (!placeOfDelivery.equalsIgnoreCase("home") || !placeOfDelivery.equalsIgnoreCase("in transit") || @@ -189,8 +188,15 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getDeliveryOutcome() == 2) { createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY2); if (deliveryOutcome.getPlaceOfDelivery() != null) { + String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); + if(placeOfDelivery != null && + (!placeOfDelivery.equalsIgnoreCase("home") || + !placeOfDelivery.equalsIgnoreCase("in transit") || + !placeOfDelivery.equalsIgnoreCase("other private hospital"))){ + createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY2); + + } - createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY2); } } } @@ -200,7 +206,14 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getDeliveryOutcome() == 3) { createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY3); if (deliveryOutcome.getPlaceOfDelivery() != null) { - createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY3); + String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); + if(placeOfDelivery != null && + (!placeOfDelivery.equalsIgnoreCase("home") || + !placeOfDelivery.equalsIgnoreCase("in transit") || + !placeOfDelivery.equalsIgnoreCase("other private hospital"))){ + createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY3); + + } } } } @@ -210,7 +223,14 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getDeliveryOutcome() == 4) { createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY4); if (deliveryOutcome.getPlaceOfDelivery() != null) { - createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY4); + String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); + if(placeOfDelivery != null && + (!placeOfDelivery.equalsIgnoreCase("home") || + !placeOfDelivery.equalsIgnoreCase("in transit") || + !placeOfDelivery.equalsIgnoreCase("other private hospital"))){ + createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY4); + + } } } From 4f431752a04708329a32e25c4a5bdf58c4c4c5f4 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 1 Oct 2026 16:58:10 +0530 Subject: [PATCH 18/73] fix jsy incentive issue --- .../java/com/iemr/flw/dto/iemr/EligibleCoupleTrackingDTO.java | 1 + src/main/java/com/iemr/flw/dto/iemr/InfantRegisterDTO.java | 2 ++ 2 files changed, 3 insertions(+) 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 415fd1b19..6d7a8a5d3 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleTrackingDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleTrackingDTO.java @@ -47,4 +47,5 @@ public class EligibleCoupleTrackingDTO implements Serializable { private String dischargeSummary1; private String dischargeSummary2; + } diff --git a/src/main/java/com/iemr/flw/dto/iemr/InfantRegisterDTO.java b/src/main/java/com/iemr/flw/dto/iemr/InfantRegisterDTO.java index d3cc280bf..50834c5a2 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/InfantRegisterDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/InfantRegisterDTO.java @@ -38,5 +38,7 @@ public class InfantRegisterDTO { private String deliveryDischargeSummary4; private String isSNCU; private Boolean isReferredHigherFacility; + private String syncedBy; + private Timestamp syncedDate; } From b5794a77e5c4857d0474f0abc935f54c886f532c Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 1 Oct 2026 17:30:22 +0530 Subject: [PATCH 19/73] 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 20/73] 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 21/73] 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 22/73] 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 23/73] 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 24/73] 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 25/73] 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 26/73] 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 27/73] 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 28/73] 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 29/73] 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 30/73] 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 31/73] 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 32/73] 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 33/73] 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 34/73] 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 35/73] 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 36/73] 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 37/73] 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 38/73] 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 39/73] 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 40/73] 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 41/73] 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 42/73] 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 43/73] 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 44/73] 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 45/73] 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 46/73] 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; From 43c1b501203ddc80ec1e3864181f785cedbf2fff Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Sun, 11 Oct 2026 15:08:05 +0530 Subject: [PATCH 47/73] fix sam visit sync issue --- .../java/com/iemr/flw/service/impl/ChildCareServiceImpl.java | 1 + 1 file changed, 1 insertion(+) 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 ad944aa47..16b384002 100644 --- a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java @@ -583,6 +583,7 @@ public String saveSamDetails(List samRequest, Integer userId, String use samVisit.setVisitLabel(samDTO.getFields().getVisit_label()); samVisit.setWeightForHeightStatus(samDTO.getFields().getWeight_for_height_status()); samVisit.setIsChildReferredNrc(samDTO.getFields().getIs_child_referred_nrc()); + samVisit.setIsChildAdmittedNrc(samDTO.getFields().getIs_child_admitted_nrc()); samVisit.setNrcAdmissionDate(samDTO.getFields().getNrc_admission_date()); samVisit.setIsChildDischargedNrc(samDTO.getFields().getIs_child_discharged_nrc()); samVisit.setNrcDischargeDate(samDTO.getFields().getNrc_discharge_date()); From 158e6ea077ee35bf3c15a0a772647324e1e65044 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 12 Oct 2026 16:18:26 +0530 Subject: [PATCH 48/73] fix ors distrubution backdate issue --- .../com/iemr/flw/service/impl/CampaignServiceImpl.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index f9c076327..a97898b15 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -473,7 +473,6 @@ private void checkMonthlyPulseOrsDistribution(Integer ashaId,LocalDate startDate } private void addAshaIncentiveRecord(IncentiveActivity incentiveActivity, Integer ashaId,LocalDate startDate,LocalDate endDate) { - Timestamp timestamp = Timestamp.valueOf(LocalDateTime.now()); Timestamp startOfMonth = Timestamp.valueOf(startDate.atStartOfDay()); Timestamp endOfMonth = Timestamp.valueOf(endDate.atStartOfDay()); @@ -490,11 +489,11 @@ private void addAshaIncentiveRecord(IncentiveActivity incentiveActivity, Integer if (record == null) { record = new IncentiveActivityRecord(); record.setActivityId(incentiveActivity.getId()); - record.setCreatedDate(timestamp); + record.setCreatedDate(endOfMonth); record.setCreatedBy(userServiceRoleRepo.getUserNamedByUserId(ashaId)); - record.setStartDate(timestamp); - record.setEndDate(timestamp); - record.setUpdatedDate(timestamp); + record.setStartDate(endOfMonth); + record.setEndDate(endOfMonth); + record.setUpdatedDate(endOfMonth); record.setUpdatedBy(userServiceRoleRepo.getUserNamedByUserId(ashaId)); record.setBenId(0L); record.setAshaId(ashaId); From d432b1c06bce642bbc3fc8e83b03bbf27349a595 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 13 Oct 2026 15:02:22 +0530 Subject: [PATCH 49/73] ben id incentive fix issue --- .../service/impl/IncentiveServiceImpl.java | 52 ++++++++++++++++++- 1 file changed, 50 insertions(+), 2 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 5fb04d0bc..3653f559b 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -267,16 +267,64 @@ public String getAllIncentivesByUserId(GetBenRequestHandler request) { .collect(Collectors.toList()); Map benIdToNameMap = new HashMap<>(); + if (!benIdsToFetch.isEmpty()) { - List benDetails = beneficiaryRepo.findBenNamesByBenIds(benIdsToFetch); + + // Step 1: Fetch names using BeneficiaryId + List benDetails = + beneficiaryRepo.findBenNamesByBenIds(benIdsToFetch); + + Set foundBenIds = new HashSet<>(); + for (Object[] row : benDetails) { Long benId = ((Number) row[0]).longValue(); + String first = row[1] != null ? (String) row[1] : ""; String last = row[2] != null ? (String) row[2] : ""; + benIdToNameMap.put(benId, (first + " " + last).trim()); + foundBenIds.add(benId); } - } + // Step 2: Identify IDs for which names were not found + List unresolvedIds = benIdsToFetch.stream() + .filter(id -> !foundBenIds.contains(id)) + .distinct() + .toList(); + + if (!unresolvedIds.isEmpty()) { + + // Step 3: Resolve unresolved IDs as BenRegId + List mappings = + beneficiaryRepo.getBenIdsFromRegIds(unresolvedIds); + + Set resolvedBenIds = new HashSet<>(); + + for (Object[] row : mappings) { + if (row[1] != null) { + resolvedBenIds.add(((Number) row[1]).longValue()); + } + } + + // Step 4: Fetch names using resolved BeneficiaryIds + if (!resolvedBenIds.isEmpty()) { + + List resolvedDetails = + beneficiaryRepo.findBenNamesByBenIds( + new ArrayList<>(resolvedBenIds)); + + for (Object[] row : resolvedDetails) { + Long benId = ((Number) row[0]).longValue(); + + String first = row[1] != null ? (String) row[1] : ""; + String last = row[2] != null ? (String) row[2] : ""; + + benIdToNameMap.put( + benId, (first + " " + last).trim()); + } + } + } + } // NEW: Bulk fetch verifier (supervisor) roles — replaces N+1 userRepo.getUserRole() calls // Bulk fetch verifier (supervisor) roles — replaces N+1 userRepo.getUserRole() calls List verifierIds = entities.stream() From 51f30f535b6f809d7d84b46189aa5b89ddd11883 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 13 Oct 2026 15:37:44 +0530 Subject: [PATCH 50/73] ben id incentive fix issue --- .../service/impl/IncentiveServiceImpl.java | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 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 3653f559b..8e5ba07d1 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -267,10 +267,11 @@ public String getAllIncentivesByUserId(GetBenRequestHandler request) { .collect(Collectors.toList()); Map benIdToNameMap = new HashMap<>(); + Map regIdToBenIdMap = new HashMap<>(); - if (!benIdsToFetch.isEmpty()) { + if (benIdsToFetch != null && !benIdsToFetch.isEmpty()) { - // Step 1: Fetch names using BeneficiaryId + // First, fetch names using BeneficiaryId List benDetails = beneficiaryRepo.findBenNamesByBenIds(benIdsToFetch); @@ -279,36 +280,38 @@ public String getAllIncentivesByUserId(GetBenRequestHandler request) { for (Object[] row : benDetails) { Long benId = ((Number) row[0]).longValue(); - String first = row[1] != null ? (String) row[1] : ""; - String last = row[2] != null ? (String) row[2] : ""; + String first = row[1] != null ? row[1].toString() : ""; + String last = row[2] != null ? row[2].toString() : ""; benIdToNameMap.put(benId, (first + " " + last).trim()); foundBenIds.add(benId); } - // Step 2: Identify IDs for which names were not found + // IDs not found as BeneficiaryId List unresolvedIds = benIdsToFetch.stream() + .filter(Objects::nonNull) .filter(id -> !foundBenIds.contains(id)) .distinct() .toList(); if (!unresolvedIds.isEmpty()) { - // Step 3: Resolve unresolved IDs as BenRegId + // Resolve BenRegId -> BeneficiaryId List mappings = beneficiaryRepo.getBenIdsFromRegIds(unresolvedIds); Set resolvedBenIds = new HashSet<>(); for (Object[] row : mappings) { - if (row[1] != null) { - resolvedBenIds.add(((Number) row[1]).longValue()); - } + Long regId = ((Number) row[0]).longValue(); + Long benId = ((Number) row[1]).longValue(); + + regIdToBenIdMap.put(regId, benId); + resolvedBenIds.add(benId); } - // Step 4: Fetch names using resolved BeneficiaryIds + // Fetch names for resolved BeneficiaryIds if (!resolvedBenIds.isEmpty()) { - List resolvedDetails = beneficiaryRepo.findBenNamesByBenIds( new ArrayList<>(resolvedBenIds)); @@ -316,11 +319,10 @@ public String getAllIncentivesByUserId(GetBenRequestHandler request) { for (Object[] row : resolvedDetails) { Long benId = ((Number) row[0]).longValue(); - String first = row[1] != null ? (String) row[1] : ""; - String last = row[2] != null ? (String) row[2] : ""; + String first = row[1] != null ? row[1].toString() : ""; + String last = row[2] != null ? row[2].toString() : ""; - benIdToNameMap.put( - benId, (first + " " + last).trim()); + benIdToNameMap.put(benId, (first + " " + last).trim()); } } } From 0d7c1e2d2ce830c8cd6bfc1e5a8106f88b3236e5 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 13 Oct 2026 15:51:08 +0530 Subject: [PATCH 51/73] ben id incentive fix issue --- .../flw/service/impl/IncentiveServiceImpl.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 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 8e5ba07d1..f8e72fdcf 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -346,12 +346,22 @@ public String getAllIncentivesByUserId(GetBenRequestHandler request) { // Map entities to DTOs List dtos = entities.stream().map(entry -> { if (entry.getName() == null) { - if (entry.getBenId() != null && entry.getBenId() > 0) { - String name = benIdToNameMap.getOrDefault(entry.getBenId(), ""); + Long originalId = entry.getBenId(); + + if (originalId != null && originalId > 0) { + + Long actualBenId = regIdToBenIdMap.getOrDefault( + originalId, originalId); + + String name = benIdToNameMap.getOrDefault(actualBenId, ""); + + entry.setBenId(actualBenId); entry.setName(name); + if (isCG) { entry.setIsEligible(true); } + } else { entry.setName(""); } From 42e88b8ebcef1ad09f85c005fa6916c3970bf418 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 14 Oct 2026 11:30:40 +0530 Subject: [PATCH 52/73] drop column --- .../flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java | 6 ------ src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java b/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java index fa5f435fc..8354670ee 100644 --- a/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java +++ b/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java @@ -102,12 +102,6 @@ public class RMNCHBeneficiaryDetailsRmnch { @Column(name = "longitude") private BigDecimal longitude; - @Column(name = "gpsLatitude") - private Double gpsLatitude; - - @Column(name = "gpsLongitude") - private Double gpsLongitude; - @Expose @Column(name = "digipin") private String digipin; diff --git a/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java index e9369e76f..9353bcc1e 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java +++ b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java @@ -53,7 +53,7 @@ public class DiagnosticOrder { @Column(name = "error_message", columnDefinition = "TEXT") private String errorMessage; - @Column(name = "reason_for_refusal", columnDefinition = "TEXT") + @Column(name = "reason_to_close", columnDefinition = "TEXT") private String reasonForRefusal; @Column(name = "push_response_json", columnDefinition = "LONGTEXT") From eed530fa7e751a6bf07eb0c9b038d6b4699270cf Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 14 Oct 2026 11:31:25 +0530 Subject: [PATCH 53/73] drop column --- .../com/iemr/flw/service/impl/BeneficiaryServiceImpl.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java index 396c79a2d..596517b78 100644 --- a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java @@ -363,12 +363,6 @@ private String getMappingsForAddressIDs(List addressLi if (benAddressOBJ.getPermPinCode() != null) benDetailsRMNCH_OBJ.setPinCode(benAddressOBJ.getPermPinCode()); - // Map GPS double fields to the exposed latitude/longitude BigDecimal fields for response - if (benDetailsRMNCH_OBJ.getGpsLatitude() != null) - benDetailsRMNCH_OBJ.setLatitude(BigDecimal.valueOf(benDetailsRMNCH_OBJ.getGpsLatitude())); - if (benDetailsRMNCH_OBJ.getGpsLongitude() != null) - benDetailsRMNCH_OBJ.setLongitude(BigDecimal.valueOf(benDetailsRMNCH_OBJ.getGpsLongitude())); - // ----------------------------------------------------------------------------- // related benids From ca58b5bca5dd99dec54090a5388ee3f507e0467f Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 14 Oct 2026 12:26:37 +0530 Subject: [PATCH 54/73] drop column --- .../flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java | 5 ----- .../iemr/flw/domain/identity/RMNCHHouseHoldDetails.java | 7 ------- .../com/iemr/flw/service/impl/BeneficiaryServiceImpl.java | 5 ----- 3 files changed, 17 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java b/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java index fa5f435fc..d4da36816 100644 --- a/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java +++ b/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java @@ -102,11 +102,6 @@ public class RMNCHBeneficiaryDetailsRmnch { @Column(name = "longitude") private BigDecimal longitude; - @Column(name = "gpsLatitude") - private Double gpsLatitude; - - @Column(name = "gpsLongitude") - private Double gpsLongitude; @Expose @Column(name = "digipin") diff --git a/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java b/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java index 311abc7a6..c5cfa8524 100644 --- a/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java +++ b/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java @@ -329,13 +329,6 @@ public class RMNCHHouseHoldDetails { @Column(name = "isDeactivate") private Boolean isDeactivate; - @Expose - @Column(name = "gpsLatitude") - private Double gpsLatitude; - - @Expose - @Column(name = "gpsLongitude") - private Double gpsLongitude; @Expose @Column(name = "address") diff --git a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java index 396c79a2d..dda2bb9d1 100644 --- a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java @@ -363,11 +363,6 @@ private String getMappingsForAddressIDs(List addressLi if (benAddressOBJ.getPermPinCode() != null) benDetailsRMNCH_OBJ.setPinCode(benAddressOBJ.getPermPinCode()); - // Map GPS double fields to the exposed latitude/longitude BigDecimal fields for response - if (benDetailsRMNCH_OBJ.getGpsLatitude() != null) - benDetailsRMNCH_OBJ.setLatitude(BigDecimal.valueOf(benDetailsRMNCH_OBJ.getGpsLatitude())); - if (benDetailsRMNCH_OBJ.getGpsLongitude() != null) - benDetailsRMNCH_OBJ.setLongitude(BigDecimal.valueOf(benDetailsRMNCH_OBJ.getGpsLongitude())); // ----------------------------------------------------------------------------- From b57fe04bae9079b535673910f88355cb7fa76995 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 14 Oct 2026 12:36:22 +0530 Subject: [PATCH 55/73] drop column --- .../iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java | 3 --- src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java b/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java index d4da36816..d96ee5abc 100644 --- a/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java +++ b/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java @@ -107,9 +107,6 @@ public class RMNCHBeneficiaryDetailsRmnch { @Column(name = "digipin") private String digipin; - @Expose - @Column(name = "gpsTimestamp") - private Timestamp gpsTimestamp; @Expose @Column(name = "isGpsUnavailable", nullable = false, columnDefinition = "TINYINT(1) DEFAULT 0") diff --git a/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java index e9369e76f..0be952bff 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java +++ b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java @@ -53,7 +53,7 @@ public class DiagnosticOrder { @Column(name = "error_message", columnDefinition = "TEXT") private String errorMessage; - @Column(name = "reason_for_refusal", columnDefinition = "TEXT") + @Column(name = "reason_for_close", columnDefinition = "TEXT") private String reasonForRefusal; @Column(name = "push_response_json", columnDefinition = "LONGTEXT") From a405caa35e32a79ee0150cbec9ce0099e96e21f7 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 14 Oct 2026 12:58:27 +0530 Subject: [PATCH 56/73] drop column --- src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java index 0be952bff..ae7dc52db 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java +++ b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java @@ -53,8 +53,8 @@ public class DiagnosticOrder { @Column(name = "error_message", columnDefinition = "TEXT") private String errorMessage; - @Column(name = "reason_for_close", columnDefinition = "TEXT") - private String reasonForRefusal; + @Column(name = "reason_to_close", columnDefinition = "TEXT") + private String reasonToClose; @Column(name = "push_response_json", columnDefinition = "LONGTEXT") private String pushResponseJson; From 0d8f317541d6db46c5145949c84fcbddc5cfbbea Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 14 Oct 2026 12:59:53 +0530 Subject: [PATCH 57/73] drop column --- .../iemr/flw/service/impl/DiagnosticOrderServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/DiagnosticOrderServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiagnosticOrderServiceImpl.java index 3e5ca60d6..1485843e6 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiagnosticOrderServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiagnosticOrderServiceImpl.java @@ -203,7 +203,7 @@ private DiagnosticOrder saveRefusedOrder(Long beneficiaryId, Long visitCode, Dia order.setPatientSex(patientSex); } order.setStatus(DiagnosticOrderStatus.REFUSED.name()); - order.setReasonForRefusal(reasonForRefusal); + order.setReasonToClose(reasonForRefusal); order.setErrorMessage(null); try { @@ -273,7 +273,7 @@ public DiagnosticOrderResultDto processResult(DiagnosticOrder order, DiagnosticP dto.setOrderType(order.getOrderType()); dto.setStatus(order.getStatus()); dto.setErrorMessage(order.getErrorMessage()); - dto.setReasonForRefusal(order.getReasonForRefusal()); + dto.setReasonForRefusal(order.getReasonToClose()); dto.setProviderStatus(result.getProviderStatus()); dto.setResultSummary(result.getResultSummary()); dto.setTbPresence(result.getTbPresence()); @@ -434,7 +434,7 @@ public DiagnosticOrderResultDto getOrderResult(Long beneficiaryId, String orderT dto.setExternalOrderId(order.getExternalOrderId()); dto.setStatus(order.getStatus()); dto.setErrorMessage(order.getErrorMessage()); - dto.setReasonForRefusal(order.getReasonForRefusal()); + dto.setReasonForRefusal(order.getReasonToClose()); diagnosticResultRepo.findByExternalOrderIdAndDeletedFalse(order.getExternalOrderId()).ifPresent(result -> { dto.setProviderStatus(result.getProviderStatus()); From f36e2d8d85f090d078859bad9dcd90c72174fefa Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 14 Oct 2026 15:15:53 +0530 Subject: [PATCH 58/73] fix mda incentive logic --- .../flw/service/impl/CampaignServiceImpl.java | 32 ++++++- .../impl/DiseaseControlServiceImpl.java | 85 +++++++++++++------ 2 files changed, 88 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index a97898b15..ffacf0a35 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -459,7 +459,7 @@ private void checkMonthlyPulsePolioIncentive(Integer ashaId,LocalDate startDate, private void checkMonthlyFilariasisIncentive(Integer ashaId,LocalDate startDate,LocalDate endDate) { IncentiveActivity FILARIASIS_MEDICINE_DISTRIBUTION = incentivesRepo.findIncentiveMasterByNameAndGroup("FILARIASIS_MEDICINE_DISTRIBUTION", GroupName.ACTIVITY.getDisplayName()); if (FILARIASIS_MEDICINE_DISTRIBUTION != null) { - addAshaIncentiveRecord(FILARIASIS_MEDICINE_DISTRIBUTION, ashaId,startDate,endDate); + addAshaIncentiveRecordMda(FILARIASIS_MEDICINE_DISTRIBUTION, ashaId,startDate,endDate); } } @@ -502,5 +502,35 @@ record = new IncentiveActivityRecord(); } } + + private void addAshaIncentiveRecordMda(IncentiveActivity incentiveActivity, Integer ashaId,LocalDate startDate,LocalDate endDate) { + + Timestamp startOfMonth = Timestamp.valueOf(startDate.atStartOfDay()); + Timestamp endOfMonth = Timestamp.valueOf(endDate.atStartOfDay()); + + IncentiveActivityRecord record = recordRepo.findRecordByActivityIdCreatedDateBenId( + incentiveActivity.getId(), + endOfMonth, + 0L,ashaId + + ); + + + if (record == null) { + record = new IncentiveActivityRecord(); + record.setActivityId(incentiveActivity.getId()); + record.setCreatedDate(endOfMonth); + record.setCreatedBy(userServiceRoleRepo.getUserNamedByUserId(ashaId)); + record.setStartDate(endOfMonth); + record.setEndDate(endOfMonth); + record.setUpdatedDate(endOfMonth); + record.setUpdatedBy(userServiceRoleRepo.getUserNamedByUserId(ashaId)); + record.setBenId(0L); + record.setAshaId(ashaId); + record.setAmount(Long.valueOf(incentiveActivity.getRate())); + recordRepo.save(record); + } + } + } diff --git a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java index 08caccd03..4cbfeb874 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -48,6 +48,7 @@ import java.sql.Timestamp; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -352,41 +353,51 @@ private LeprosyFollowUp saveLeprosyFollowUpData(LeprosyFollowUpDTO data) { entity.setLastModDate( data.getLastModDate() != null ? data.getLastModDate() : new Timestamp(System.currentTimeMillis())); if(!leprosyFollowUpRepository.findByBenId(entity.getBenId()).isEmpty()){ - if(leprosyFollowUpRepository.findByBenId(entity.getBenId()).size()>=6 && leprosyFollowUpRepository.findByBenId(entity.getBenId()).size()<=12){ - Integer userId = userRepo.getUserIdByName(entity.getCreatedBy()); - IncentiveActivityRecord incentiveActivityRecord = - incentiveLogicService.incentiveForLeprosyPaucibacillaryConfirmed( - entity.getBenId(), - entity.getTreatmentEndDate(), - entity.getTreatmentEndDate(), - userId); - - if (incentiveActivityRecord != null) { - logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", - incentiveActivityRecord.getId()); - } else { - logger.info("Incentive not created"); + if(entity.getTypeOfLeprosy().equals("PB (Paucibacillary)")){ + if(leprosyFollowUpRepository.findByBenId(entity.getBenId()).size()>=6 && leprosyFollowUpRepository.findByBenId(entity.getBenId()).size()<=12){ + Integer userId = userRepo.getUserIdByName(entity.getCreatedBy()); + IncentiveActivityRecord incentiveActivityRecord = + incentiveLogicService.incentiveForLeprosyPaucibacillaryConfirmed( + entity.getBenId(), + entity.getTreatmentEndDate(), + entity.getTreatmentEndDate(), + userId); + + if (incentiveActivityRecord != null) { + logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", + incentiveActivityRecord.getId()); + } else { + logger.info("Incentive not created"); + } } } + } if(!leprosyFollowUpRepository.findByBenId(entity.getBenId()).isEmpty()){ - if(leprosyFollowUpRepository.findByBenId(entity.getBenId()).size()>=12){ - Integer userId = userRepo.getUserIdByName(entity.getCreatedBy()); - IncentiveActivityRecord incentiveActivityRecord = - incentiveLogicService.incentiveForLeprosyMultibacillaryConfirmed( - entity.getBenId(), - entity.getTreatmentEndDate(), - entity.getTreatmentEndDate(), - userId); - - if (incentiveActivityRecord != null) { - logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", - incentiveActivityRecord.getId()); - } else { - logger.info("Incentive not created"); + if(entity.getTypeOfLeprosy().equals("MB (Multibacillary)")) { + if (entity.getTreatmentStartDate() != null && entity.getTreatmentEndDate() != null) { + if (isEligibleForIncentive(entity.getTreatmentStartDate(), entity.getTreatmentEndDate())) { + Integer userId = userRepo.getUserIdByName(entity.getCreatedBy()); + IncentiveActivityRecord incentiveActivityRecord = + incentiveLogicService.incentiveForLeprosyMultibacillaryConfirmed( + entity.getBenId(), + entity.getTreatmentEndDate(), + entity.getTreatmentEndDate(), + userId); + + if (incentiveActivityRecord != null) { + logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", + incentiveActivityRecord.getId()); + } else { + logger.info("Incentive not created"); + } + } } } + + + } return entity; } @@ -401,6 +412,24 @@ public String saveLeprosyFollowUp(LeprosyFollowUpDTO dto) { } + public boolean isEligibleForIncentive(Date treatmentStartDate, Date endDate) { + + if (treatmentStartDate == null || endDate == null) { + return false; + } + + LocalDate start = treatmentStartDate.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + LocalDate end = endDate.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + return end.isAfter(start.plusMonths(12)) + || end.isEqual(start.plusMonths(12)); + } + @Override public List getAllLeprosyData(String createdBy) { logger.info("Fetching leprosy data for createdBy: " + createdBy); From 058ecafbad59e2bec12bf3702cb488e3e7c3a3e2 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Oct 2026 08:10:27 +0530 Subject: [PATCH 59/73] fix 10 hwc referal incentive issue --- .../flw/controller/IncentiveController.java | 10 +++- .../impl/TBConfirmedCaseServiceImpl.java | 47 ++++++++++++++++--- 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/IncentiveController.java b/src/main/java/com/iemr/flw/controller/IncentiveController.java index 32a5c16fa..a251327d2 100644 --- a/src/main/java/com/iemr/flw/controller/IncentiveController.java +++ b/src/main/java/com/iemr/flw/controller/IncentiveController.java @@ -1,5 +1,6 @@ package com.iemr.flw.controller; +import com.google.gson.Gson; import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.*; import com.iemr.flw.service.IncentiveService; @@ -31,6 +32,9 @@ public class IncentiveController { @Autowired IncentiveService incentiveService; + private static final Gson gson = new Gson(); + + @Autowired private JwtUtil jwtUtil; @@ -91,8 +95,10 @@ public String getAllIncentivesByUserId(@RequestBody GetBenRequestHandler request try { if (requestDTO != null) { - logger.info("request object with timestamp : " + new Timestamp(System.currentTimeMillis()) + " " - + requestDTO); + + logger.info("Request object with timestamp: {} | Request JSON: {}", + new Timestamp(System.currentTimeMillis()), + gson.toJson(requestDTO)); String s = incentiveService.getAllIncentivesByUserId(requestDTO); //logger.info("User Incentive:" + s); if (s != null) diff --git a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java index 1bbc5ec00..c9c4d1d6f 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -25,6 +25,7 @@ import java.sql.Timestamp; import java.time.LocalDate; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -149,12 +150,28 @@ private void checkIncentive(TBConfirmedCase entity){ if (isDrTb) { - incentiveLogicService.incentiveForTbFollowUpIsDrTb( - entity.getBenId(), - Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), - Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), - entity.getUserId() - ); + if("Shorter Regimen (9–12 Months)".equalsIgnoreCase(regimen)){ + if(isEligibleForIncentive(entity.getTreatmentStartDate(),entity.getExpectedTreatmentCompletionDate(),9)){ + incentiveLogicService.incentiveForTbFollowUpIsDrTb( + entity.getBenId(), + Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), + Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), + entity.getUserId() + ); + } + + }else if("Longer Regimen (18–24 Months)".equalsIgnoreCase(regimen)){ + if(isEligibleForIncentive(entity.getTreatmentStartDate(),entity.getExpectedTreatmentCompletionDate(),9)) { + + incentiveLogicService.incentiveForTbFollowUpIsDrTb( + entity.getBenId(), + Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), + Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), + entity.getUserId() + ); + } + } + } else { incentiveLogicService.incentiveForTbFollowUp( entity.getBenId(), @@ -168,6 +185,24 @@ private void checkIncentive(TBConfirmedCase entity){ } } + public boolean isEligibleForIncentive(LocalDate treatmentStartDate, LocalDate endDate,Integer minMonth) { + + if (treatmentStartDate == null || endDate == null) { + return false; + } + + LocalDate start = treatmentStartDate.atStartOfDay() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + LocalDate end = endDate.atStartOfDay() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + return end.isAfter(start.plusMonths(minMonth)) + || end.isEqual(start.plusMonths(minMonth)); + } + @Override public String getByBenId(Long benId, String authorisation) throws Exception { OutputResponse response = new OutputResponse(); From 1f5976656f156d7b1331af27b9e7b111e468ad95 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Oct 2026 08:19:09 +0530 Subject: [PATCH 60/73] fix 10 hwc referal incentive issue --- .../service/impl/IncentiveServiceImpl.java | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index f8e72fdcf..b89cb137f 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -1,13 +1,11 @@ package com.iemr.flw.service.impl; -import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.iemr.flw.domain.iemr.*; import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.*; import com.iemr.flw.masterEnum.GroupName; -import com.iemr.flw.masterEnum.IncentiveApprovalStatus; import com.iemr.flw.masterEnum.StateCode; import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.iemr.*; @@ -16,7 +14,6 @@ import com.iemr.flw.service.NotificationService; import com.iemr.flw.service.UserService; import com.iemr.flw.utils.JwtUtil; -import jakarta.persistence.criteria.CriteriaBuilder; import org.modelmapper.ModelMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -227,7 +224,7 @@ public String getAllIncentivesByUserId(GetBenRequestHandler request) { try { addIncentiveForIronTablets(request.getAshaId()); - incentiveOfNcdReferal(request.getAshaId(), request.getVillageID()); + incentiveOfNcdReferal(request.getAshaId(), request.getVillageID(),request); } catch (Exception e) { logger.error("Error in incentiveOfNcdReferal: ", e); } @@ -945,7 +942,7 @@ public String updateClaimStatus(Integer ashaId, Integer month, Integer year, Boo } } - private void incentiveOfNcdReferal(Integer ashaId, Integer stateId) { + private void incentiveOfNcdReferal(Integer ashaId, Integer stateId, GetBenRequestHandler request) { try { String userName = userRepo.getUserNamedByUserId(ashaId); String groupName = resolveGroupName(stateId); @@ -980,21 +977,23 @@ private void incentiveOfNcdReferal(Integer ashaId, Integer stateId) { } if (hwcReferralEnumeration != null) { - logger.info("hwcReferralEnumeration :" + hwcReferralEnumeration.getDescription()); + logger.info("hwcReferralEnumeration: {}", hwcReferralEnumeration.getDescription()); logger.info("userName={}", userName); - LocalDate now = LocalDate.now(); + LocalDate requestDate = request.getFromDate() + .toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); Long referralCount = benReferDetailsRepo.countMonthlyReferrals( userName, - now.getMonthValue(), - now.getYear()); - - logger.info("referralCount :" + referralCount); + requestDate.getMonthValue(), + requestDate.getYear() + ); + logger.info("referralCount: {}", referralCount); if (referralCount >= 10) { - addHwcReferalAshaIncentiveRecord( hwcReferralEnumeration, ashaId, From 71dd24941265303f165e7bb6d20503b5b28f3fc3 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Oct 2026 12:36:08 +0530 Subject: [PATCH 61/73] fix 10 hwc referal incentive issue --- src/main/java/com/iemr/flw/repo/iemr/BenReferDetailsRepo.java | 4 ++-- .../com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/BenReferDetailsRepo.java b/src/main/java/com/iemr/flw/repo/iemr/BenReferDetailsRepo.java index 9cb356626..25a0b652a 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/BenReferDetailsRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/BenReferDetailsRepo.java @@ -51,8 +51,8 @@ public interface BenReferDetailsRepo extends JpaRepository Date: Thu, 15 Oct 2026 15:41:30 +0530 Subject: [PATCH 62/73] fix 10 hwc referal incentive issue --- .../com/iemr/flw/service/impl/MaternalHealthServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index c4dab2c9b..7cbab0af7 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -795,7 +795,7 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { } } - if (ect.getPncPeriod() == 42) { + if (ect.getPncPeriod() == 42 && !ect.getMotherDeath()) { IncentiveActivity highRiskPostpartumHealthCareActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("HIGH_RISK_POSTPARTUM_HEALTH_CHECK", GroupName.ACTIVITY.getDisplayName()); From dee7015416e0efb1bb23d2f4e672b9fe49766d3b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Oct 2026 10:52:03 +0530 Subject: [PATCH 63/73] fix 10 hwc referal incentive issue --- .../iemr/flw/service/impl/MaternalHealthServiceImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index 7cbab0af7..0e17c587e 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -795,7 +795,12 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { } } - if (ect.getPncPeriod() == 42 && !ect.getMotherDeath()) { + if (ect.getPncPeriod() == 42 + && !ect.getMotherDeath() + && ancVisitRepo.findByBenId(ect.getBenId()) + .stream() + .filter(ancVisit -> Integer.valueOf(7).equals(ancVisit.getAncVisit())) + .anyMatch(ancVisit -> Boolean.TRUE.equals(ancVisit.getIsHrpConfirmed()))) { IncentiveActivity highRiskPostpartumHealthCareActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("HIGH_RISK_POSTPARTUM_HEALTH_CHECK", GroupName.ACTIVITY.getDisplayName()); From 9639032e39fcce8ea9a1d3a1233d9666cdc22b10 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Oct 2026 12:03:07 +0530 Subject: [PATCH 64/73] fix 10 hwc referal incentive issue --- .../impl/MaternalHealthServiceImpl.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index 0e17c587e..c0ff4fcc1 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -799,17 +799,21 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { && !ect.getMotherDeath() && ancVisitRepo.findByBenId(ect.getBenId()) .stream() - .filter(ancVisit -> Integer.valueOf(7).equals(ancVisit.getAncVisit())) - .anyMatch(ancVisit -> Boolean.TRUE.equals(ancVisit.getIsHrpConfirmed()))) { + .filter(ancVisit -> ancVisit.getAncVisit() != null + && ancVisit.getAncVisit() >= 1 + && ancVisit.getAncVisit() <= 7) + .anyMatch(ancVisit -> + Boolean.TRUE.equals(ancVisit.getIsHrpConfirmed()))) { + IncentiveActivity highRiskPostpartumHealthCareActivityCH = - incentivesRepo.findIncentiveMasterByNameAndGroup("HIGH_RISK_POSTPARTUM_HEALTH_CHECK", GroupName.ACTIVITY.getDisplayName()); + incentivesRepo.findIncentiveMasterByNameAndGroup( + "HIGH_RISK_POSTPARTUM_HEALTH_CHECK", + GroupName.ACTIVITY.getDisplayName()); if (highRiskPostpartumHealthCareActivityCH != null) { - addIncenticeRecord(ect, userId, highRiskPostpartumHealthCareActivityCH); - + addIncenticeRecord(ect, userId, + highRiskPostpartumHealthCareActivityCH); } - - } if (ect.getPncPeriod() == 1 || ect.getPncPeriod() == 3 || ect.getPncPeriod() == 7) { if(ect.getContraceptionMethod()!=null){ From cf8e3aa2eb95fd4b2cc1f4d4e7cbb0f9cb159e4b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Oct 2026 12:44:47 +0530 Subject: [PATCH 65/73] fix 10 hwc referal incentive issue --- .../iemr/flw/service/impl/MaternalHealthServiceImpl.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index c0ff4fcc1..76f1ce31d 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -786,14 +786,16 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { if (ect.getMotherDangerSign() != null && !ect.getMotherDangerSign().isEmpty() - && ect.getPncPeriod() == 42) { + && ect.getPncPeriod() != null + && ect.getPncPeriod() >= 1 + && ect.getPncPeriod() <= 42) { + IncentiveActivity highRiskPostpartumCareActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("HIGH_RISK_POSTPARTUM_CARE", GroupName.ACTIVITY.getDisplayName()); + if (highRiskPostpartumCareActivityCH != null) { addIncenticeRecord(ect, userId, highRiskPostpartumCareActivityCH); - } - } if (ect.getPncPeriod() == 42 && !ect.getMotherDeath() @@ -838,6 +840,7 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { } + @Transactional private void addIncenticeRecord(PNCVisit ect, Integer userId, IncentiveActivity antaraActivity) { From 8180cc812c9aafe1790238d4197a897fd599f298 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Oct 2026 14:55:07 +0530 Subject: [PATCH 66/73] pnc mother incentive --- .../service/impl/ChildCareServiceImpl.java | 102 +++++++++++++++++- .../impl/MaternalHealthServiceImpl.java | 66 ++++++------ 2 files changed, 133 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java index 16b384002..d3974f1e4 100644 --- a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; +import com.iemr.flw.domain.identity.RMNCHBeneficiaryDetailsRmnch; import com.iemr.flw.domain.iemr.*; import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.*; @@ -16,6 +17,7 @@ import com.iemr.flw.service.UserService; import com.iemr.flw.utils.JwtUtil; import jakarta.persistence.EntityNotFoundException; +import jakarta.transaction.Transactional; import org.aspectj.weaver.ast.Or; import org.modelmapper.ModelMapper; import org.slf4j.Logger; @@ -36,6 +38,7 @@ import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @Service @@ -98,6 +101,7 @@ public class ChildCareServiceImpl implements ChildCareService { @Autowired private PNCVisitRepo pncVisitRepo; + private final ConcurrentHashMap lockMap = new ConcurrentHashMap<>(); @Override public String registerHBYC(List hbycDTOs) { @@ -1004,12 +1008,32 @@ private void checkAndAddHbncIncentives(List hbncVisits, Integer userI } if (stateCode.equals(StateCode.CG.getStateCode())) { - if (hbncVisit.getVisit_day().equals("42nd Day")) { - IncentiveActivity visitActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("HBNC_0_42_DAYS", GroupName.ACTIVITY.getDisplayName()); + if ("42nd Day".equals(hbncVisit.getVisit_day())) { + IncentiveActivity visitActivityCH = incentivesRepo + .findIncentiveMasterByNameAndGroup("HBNC_0_42_DAYS", GroupName.ACTIVITY.getDisplayName()); createIncentiveRecordforHbncVisit(hbncVisit, benId, visitActivityCH, "HBNC_0_42_DAYS"); + // 1. Child ka record + List childList = + beneficiaryRepo.findByBenficieryid(hbncVisit.getBeneficiaryId()); + + if (childList != null && !childList.isEmpty()) { + RMNCHBeneficiaryDetailsRmnch child = childList.get(childList.size() - 1); + + // 2. Same household se mother + RMNCHBeneficiaryDetailsRmnch mother = beneficiaryRepo + .findByHouseoldId(child.getHouseoldId()).stream() + .filter(b -> !"NewBorn".equalsIgnoreCase(b.getRegistrationType()) + && "Postnatal Mother".equalsIgnoreCase(b.getReproductiveStatus())) + .findFirst() + .orElse(null); + if (mother != null) { + generateHighRiskPostpartumIncentives(mother.getBenficieryid(), true, userId); + } + } } + } @@ -1019,6 +1043,80 @@ private void checkAndAddHbncIncentives(List hbncVisits, Integer userI } + private void generateHighRiskPostpartumIncentives(Long motherBenId, boolean childHbnc42Done, Integer userId) { + + if (!childHbnc42Done) return; + + List motherPnc = pncVisitRepo.findByBenId(motherBenId); + + PNCVisit visit42 = motherPnc.stream() + .filter(v -> Integer.valueOf(42).equals(v.getPncPeriod())) + .findFirst() + .orElse(null); + + if (visit42 == null) return; // mother ka PNC 42 abhi nahi hua + + boolean hasDangerSign = motherPnc.stream() + .anyMatch(v -> v.getMotherDangerSign() != null + && !v.getMotherDangerSign().isEmpty() + && v.getPncPeriod() != null + && v.getPncPeriod() >= 1 + && v.getPncPeriod() <= 42); + + if (hasDangerSign) { + IncentiveActivity act1 = incentivesRepo.findIncentiveMasterByNameAndGroup( + "HIGH_RISK_POSTPARTUM_CARE", GroupName.ACTIVITY.getDisplayName()); + if (act1 != null) { + addIncenticeRecord(visit42, userId, act1); // date 42 wale visit ki + } + } + + boolean motherAlive = !Boolean.TRUE.equals(visit42.getMotherDeath()); + + boolean hrpConfirmed = ancVisitRepo.findByBenId(motherBenId).stream() + .filter(a -> a.getAncVisit() != null && a.getAncVisit() >= 1 && a.getAncVisit() <= 7) + .anyMatch(a -> Boolean.TRUE.equals(a.getIsHrpConfirmed())); + + if (motherAlive && hrpConfirmed) { + IncentiveActivity act2 = incentivesRepo.findIncentiveMasterByNameAndGroup( + "HIGH_RISK_POSTPARTUM_HEALTH_CHECK", GroupName.ACTIVITY.getDisplayName()); + if (act2 != null) { + addIncenticeRecord(visit42, userId, act2); + } + } + } + + @Transactional + private void addIncenticeRecord(PNCVisit ect, Integer userId, IncentiveActivity antaraActivity) { + + String lockKey = antaraActivity.getId() + "_" + ect.getBenId() + "_" + ect.getPncDate(); + + Object lock = lockMap.computeIfAbsent(lockKey, k -> new Object()); + + synchronized (lock) { + IncentiveActivityRecord record = recordRepo + .findRecordByActivityIdCreatedDateBenId(antaraActivity.getId(), ect.getPncDate(), ect.getBenId(),userId); + + if (record == null) { + record = new IncentiveActivityRecord(); + record.setActivityId(antaraActivity.getId()); + record.setCreatedDate(ect.getPncDate()); + record.setCreatedBy(ect.getCreatedBy()); + record.setStartDate(ect.getPncDate()); + record.setEndDate(ect.getPncDate()); + record.setUpdatedDate(ect.getPncDate()); + record.setUpdatedBy(ect.getCreatedBy()); + record.setBenId(ect.getBenId()); + record.setAshaId(userId); + record.setAmount(Long.valueOf(antaraActivity.getRate())); + recordRepo.save(record); + } + } + + lockMap.remove(lockKey, lock); + } + + private void checkAndAddIncentives(List vaccinationList) { String createdBy = vaccinationList.get(0).getCreatedBy(); diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index 76f1ce31d..62534f071 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -784,39 +784,39 @@ private void checkAndAddAntaraIncentive(PNCVisit ect) { } - if (ect.getMotherDangerSign() != null - && !ect.getMotherDangerSign().isEmpty() - && ect.getPncPeriod() != null - && ect.getPncPeriod() >= 1 - && ect.getPncPeriod() <= 42) { - - IncentiveActivity highRiskPostpartumCareActivityCH = - incentivesRepo.findIncentiveMasterByNameAndGroup("HIGH_RISK_POSTPARTUM_CARE", GroupName.ACTIVITY.getDisplayName()); - - if (highRiskPostpartumCareActivityCH != null) { - addIncenticeRecord(ect, userId, highRiskPostpartumCareActivityCH); - } - } - if (ect.getPncPeriod() == 42 - && !ect.getMotherDeath() - && ancVisitRepo.findByBenId(ect.getBenId()) - .stream() - .filter(ancVisit -> ancVisit.getAncVisit() != null - && ancVisit.getAncVisit() >= 1 - && ancVisit.getAncVisit() <= 7) - .anyMatch(ancVisit -> - Boolean.TRUE.equals(ancVisit.getIsHrpConfirmed()))) { - - IncentiveActivity highRiskPostpartumHealthCareActivityCH = - incentivesRepo.findIncentiveMasterByNameAndGroup( - "HIGH_RISK_POSTPARTUM_HEALTH_CHECK", - GroupName.ACTIVITY.getDisplayName()); - - if (highRiskPostpartumHealthCareActivityCH != null) { - addIncenticeRecord(ect, userId, - highRiskPostpartumHealthCareActivityCH); - } - } +// if (ect.getMotherDangerSign() != null +// && !ect.getMotherDangerSign().isEmpty() +// && ect.getPncPeriod() != null +// && ect.getPncPeriod() >= 1 +// && ect.getPncPeriod() <= 42) { +// IncentiveActivity highRiskPostpartumCareActivityCH = +// incentivesRepo.findIncentiveMasterByNameAndGroup("HIGH_RISK_POSTPARTUM_CARE", GroupName.ACTIVITY.getDisplayName()); +// +// if (highRiskPostpartumCareActivityCH != null ) { +// addIncenticeRecord(ect, userId, highRiskPostpartumCareActivityCH); +// } +// +// } +// if (ect.getPncPeriod() == 42 +// && !ect.getMotherDeath() +// && ancVisitRepo.findByBenId(ect.getBenId()) +// .stream() +// .filter(ancVisit -> ancVisit.getAncVisit() != null +// && ancVisit.getAncVisit() >= 1 +// && ancVisit.getAncVisit() <= 7) +// .anyMatch(ancVisit -> +// Boolean.TRUE.equals(ancVisit.getIsHrpConfirmed()))) { +// +// IncentiveActivity highRiskPostpartumHealthCareActivityCH = +// incentivesRepo.findIncentiveMasterByNameAndGroup( +// "HIGH_RISK_POSTPARTUM_HEALTH_CHECK", +// GroupName.ACTIVITY.getDisplayName()); +// +// if (highRiskPostpartumHealthCareActivityCH != null) { +// addIncenticeRecord(ect, userId, +// highRiskPostpartumHealthCareActivityCH); +// } +// } if (ect.getPncPeriod() == 1 || ect.getPncPeriod() == 3 || ect.getPncPeriod() == 7) { if(ect.getContraceptionMethod()!=null){ if ((ect.getContraceptionMethod().equals("POST PARTUM STERILIZATION (PPS)") From f04cdb534bc6a009a34f74b3ba4c353f25eba971 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Oct 2026 14:57:32 +0530 Subject: [PATCH 67/73] pnc mother incentive --- .../com/iemr/flw/service/impl/ChildCareServiceImpl.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java index d3974f1e4..fffcdf3e0 100644 --- a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java @@ -290,9 +290,16 @@ public List getHBNCDetails(GetBenRequestHandler dto) { responseDTO.setFields(fields); result.add(responseDTO); + } page++; + try { + checkAndAddHbncIncentives(hbncVisits, dto.getAshaId()); + } catch (Exception e) { + logger.error("HBNC incentive check failed for ashaId {}: ", dto.getAshaId(), e); + } + }while (visitPage.hasNext()); } catch (Exception e) { From 3542d0eaec793ae68ae2a25d3d15f00c2875efb3 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Oct 2026 15:52:08 +0530 Subject: [PATCH 68/73] pnc mother incentive --- .../com/iemr/flw/service/impl/ChildCareServiceImpl.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java index fffcdf3e0..adf47563a 100644 --- a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java @@ -294,12 +294,6 @@ public List getHBNCDetails(GetBenRequestHandler dto) { } page++; - try { - checkAndAddHbncIncentives(hbncVisits, dto.getAshaId()); - } catch (Exception e) { - logger.error("HBNC incentive check failed for ashaId {}: ", dto.getAshaId(), e); - } - }while (visitPage.hasNext()); } catch (Exception e) { @@ -1061,7 +1055,7 @@ private void generateHighRiskPostpartumIncentives(Long motherBenId, boolean chil .findFirst() .orElse(null); - if (visit42 == null) return; // mother ka PNC 42 abhi nahi hua + if (visit42 == null) return; boolean hasDangerSign = motherPnc.stream() .anyMatch(v -> v.getMotherDangerSign() != null From 68b637fe883cf57728c484972e6be5e37a6ea3e4 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Thu, 22 Oct 2026 19:38:11 +0530 Subject: [PATCH 69/73] add DIAGNOSTIC_DOCUMENTS_STORAGE_ROOT in ci (#385) --- src/main/environment/common_ci.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index f2f3e0202..1bc41a0ea 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -79,4 +79,6 @@ diagnostic.emrlite.truenat.password=@env.DIAGNOSTIC_EMRLITE_TRUENAT_PASSWORD@ diagnostic.emrlite.token-ttl-seconds=@env.DIAGNOSTIC_EMRLITE_TOKEN_TTL_SECONDS@ diagnostic.emrlite.refresh-ttl-seconds=@env.DIAGNOSTIC_EMRLITE_REFRESH_TTL_SECONDS@ +diagnostic.documents.storage-root=@env.DIAGNOSTIC_DOCUMENTS_STORAGE_ROOT@ + From ab9e6a4bc33d0ab2e5d4a33e6bd59f96f3d91b67 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Thu, 22 Oct 2026 19:42:57 +0530 Subject: [PATCH 70/73] update ci proprties (#386) --- src/main/environment/common_ci.properties | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index 1bc41a0ea..2b3b04a03 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -80,5 +80,9 @@ diagnostic.emrlite.truenat.password=@env.DIAGNOSTIC_EMRLITE_TRUENAT_PASSWORD@ diagnostic.emrlite.token-ttl-seconds=@env.DIAGNOSTIC_EMRLITE_TOKEN_TTL_SECONDS@ diagnostic.emrlite.refresh-ttl-seconds=@env.DIAGNOSTIC_EMRLITE_REFRESH_TTL_SECONDS@ diagnostic.documents.storage-root=@env.DIAGNOSTIC_DOCUMENTS_STORAGE_ROOT@ +diagnostic.poll.xray.tick-ms=@env.DIAGNOSTIC_POLL_XRAY_TICK_MS@ +diagnostic.poll.truenat.tick-ms=@env.DIAGNOSTIC_POLL_TRUENAT_TICK_MS@ +# Daily cutoff (cron expression) after which all outstanding PENDING/IN_PROGRESS orders are marked EXPIRED +diagnostic.poll.expiry-cron=@env.DIAGNOSTIC_POLL_EXPIRY_CRON@ From e0c21c3f05f4a975df500b10553e7725565f6894 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Thu, 22 Oct 2026 19:52:34 +0530 Subject: [PATCH 71/73] update ci proprties (#387) * update ci proprties * update ci proprties --- src/main/environment/common_ci.properties | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index 2b3b04a03..862e4c314 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -85,4 +85,8 @@ diagnostic.poll.truenat.tick-ms=@env.DIAGNOSTIC_POLL_TRUENAT_TICK_MS@ # Daily cutoff (cron expression) after which all outstanding PENDING/IN_PROGRESS orders are marked EXPIRED diagnostic.poll.expiry-cron=@env.DIAGNOSTIC_POLL_EXPIRY_CRON@ +stoptb.enforce.vanid=@env.STOPTB_ENFORCE_VANID@ +# Stop TB: this deployment's van/camp ID, replacing the old Redis camp:vanID lookup +stoptb.van.id=@env.STOPTB_VAN_ID@ + From 06ef2ec23e07073d32e83d5530a6a3040602f1c3 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 23 Oct 2026 17:12:49 +0530 Subject: [PATCH 72/73] fix pre prod issue in release 3.11.0 --- .../impl/TBConfirmedCaseServiceImpl.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) 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 2dc71c088..faf95f2fd 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -146,27 +146,27 @@ private void checkIncentive(TBConfirmedCase entity){ || "Longer Regimen (18–24 Months)".equalsIgnoreCase(regimen); if (Boolean.TRUE.equals(entity.getTreatmentCompleted()) - && entity.getExpectedTreatmentCompletionDate() != null) { + && entity.getFollowUpDate() != null) { if (isDrTb) { if("Shorter Regimen (9–12 Months)".equalsIgnoreCase(regimen)){ - if(isEligibleForIncentive(entity.getTreatmentStartDate(),entity.getExpectedTreatmentCompletionDate(),9)){ + if ("cured".equalsIgnoreCase(entity.getTreatmentOutcome())) { incentiveLogicService.incentiveForTbFollowUpIsDrTb( entity.getBenId(), - Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), - Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), + Timestamp.valueOf(entity.getFollowUpDate().atStartOfDay()), + Timestamp.valueOf(entity.getFollowUpDate().atStartOfDay()), entity.getUserId() ); } }else if("Longer Regimen (18–24 Months)".equalsIgnoreCase(regimen)){ - if(isEligibleForIncentive(entity.getTreatmentStartDate(),entity.getExpectedTreatmentCompletionDate(),18)) { + if ("cured".equalsIgnoreCase(entity.getTreatmentOutcome())) { incentiveLogicService.incentiveForTbFollowUpIsDrTb( entity.getBenId(), - Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), - Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), + Timestamp.valueOf(entity.getFollowUpDate().atStartOfDay()), + Timestamp.valueOf(entity.getFollowUpDate().atStartOfDay()), entity.getUserId() ); } @@ -175,8 +175,8 @@ private void checkIncentive(TBConfirmedCase entity){ } else { incentiveLogicService.incentiveForTbFollowUp( entity.getBenId(), - Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), - Timestamp.valueOf(entity.getExpectedTreatmentCompletionDate().atStartOfDay()), + Timestamp.valueOf(entity.getFollowUpDate().atStartOfDay()), + Timestamp.valueOf(entity.getFollowUpDate().atStartOfDay()), entity.getUserId() ); From 35a3d7faf10e45d8ad3e5ca4c84f4023a536bdac Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 23 Oct 2026 17:15:41 +0530 Subject: [PATCH 73/73] fix pre prod issue in release 3.11.0 --- src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java index ae7dc52db..c6bf2695a 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java +++ b/src/main/java/com/iemr/flw/domain/iemr/DiagnosticOrder.java @@ -53,7 +53,7 @@ public class DiagnosticOrder { @Column(name = "error_message", columnDefinition = "TEXT") private String errorMessage; - @Column(name = "reason_to_close", columnDefinition = "TEXT") + @Column(name = "reason_for_refusal", columnDefinition = "TEXT") private String reasonToClose; @Column(name = "push_response_json", columnDefinition = "LONGTEXT")