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); }