From 0089542f388e78a7ee6693af4024f0de7e29edbd Mon Sep 17 00:00:00 2001 From: vishwab1 Date: Fri, 11 Sep 2026 15:23:22 +0530 Subject: [PATCH] fix: count genuinely claimable BenIDs, not just non-provisioned ones checkBenIDAvailabilityLocal() previously counted Provisioned=false rows only, which overstates what's actually available - it also counts rows claimed (Reserved=true) by an in-flight registration that was later abandoned or crashed before completing. Those rows are stuck (the claim query requires Reserved=false) and were never really available. Adds countByProvisionedAndReserved and switches the check to exclude Reserved=true rows, so callers (including MMU-API's new BenID pool auto top-up scheduler) get an accurate count. Co-Authored-By: Claude Sonnet 5 --- .../iemr/common/identity/repo/BenRegIdMappingRepo.java | 8 ++++++++ .../com/iemr/common/identity/service/IdentityService.java | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/common/identity/repo/BenRegIdMappingRepo.java b/src/main/java/com/iemr/common/identity/repo/BenRegIdMappingRepo.java index 866b2137..d296b231 100644 --- a/src/main/java/com/iemr/common/identity/repo/BenRegIdMappingRepo.java +++ b/src/main/java/com/iemr/common/identity/repo/BenRegIdMappingRepo.java @@ -60,6 +60,14 @@ MBeneficiaryregidmapping findFirstByProviderServiceMapIDAndVehicalNoOrderByBenRe Long countByProvisioned(Boolean isProvisioned); + /** + * Count of BenRegIds that are genuinely claimable right now — i.e. not + * provisioned AND not reserved. countByProvisioned(false) alone overstates + * availability because it also counts rows claimed (Reserved=true) by an + * in-flight registration that was later abandoned/crashed before completing. + */ + Long countByProvisionedAndReserved(Boolean isProvisioned, Boolean isReserved); + @Transactional @Modifying @Query("update MBeneficiaryregidmapping set providerServiceMapID = null , vehicalNo = null " diff --git a/src/main/java/com/iemr/common/identity/service/IdentityService.java b/src/main/java/com/iemr/common/identity/service/IdentityService.java index 0d965dd5..7f4989d4 100644 --- a/src/main/java/com/iemr/common/identity/service/IdentityService.java +++ b/src/main/java/com/iemr/common/identity/service/IdentityService.java @@ -2201,7 +2201,10 @@ public int importBenIdToLocalServer(List benIdImportDTOList) { } public Long checkBenIDAvailabilityLocal() { - return regIdRepo.countByProvisioned(false); + // Provisioned=false alone also counts rows claimed (Reserved=true) by an + // abandoned/crashed registration attempt that never completed. Those are + // not actually available to a new registration, so exclude them here. + return regIdRepo.countByProvisionedAndReserved(false, false); }