From a20e55be424e7b5b87875ef743f006a40116f75a Mon Sep 17 00:00:00 2001 From: 5Amogh Date: Tue, 18 Nov 2025 17:10:22 +0530 Subject: [PATCH 1/7] fix: amm-1927 res headers based on allowed origins --- .../com/wipro/fhir/config/CorsConfig.java | 5 +- .../fhir/utils/JwtUserIdValidationFilter.java | 64 +++++++++++++++---- .../utils/http/HTTPRequestInterceptor.java | 31 ++++++++- 3 files changed, 85 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/wipro/fhir/config/CorsConfig.java b/src/main/java/com/wipro/fhir/config/CorsConfig.java index 81527b3..a0b8df8 100644 --- a/src/main/java/com/wipro/fhir/config/CorsConfig.java +++ b/src/main/java/com/wipro/fhir/config/CorsConfig.java @@ -19,8 +19,9 @@ public void addCorsMappings(CorsRegistry registry) { Arrays.stream(allowedOrigins.split(",")) .map(String::trim) .toArray(String[]::new)) - .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") - .allowedHeaders("Content-Type", "Authorization") + .allowedMethods("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS") + .allowedHeaders("Authorization", "Content-Type", "Accept", "Jwttoken", + "serverAuthorization", "ServerAuthorization", "serverauthorization", "Serverauthorization") .exposedHeaders("Authorization") .allowCredentials(true) .maxAge(3600); diff --git a/src/main/java/com/wipro/fhir/utils/JwtUserIdValidationFilter.java b/src/main/java/com/wipro/fhir/utils/JwtUserIdValidationFilter.java index b415fc3..a924837 100644 --- a/src/main/java/com/wipro/fhir/utils/JwtUserIdValidationFilter.java +++ b/src/main/java/com/wipro/fhir/utils/JwtUserIdValidationFilter.java @@ -42,24 +42,55 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo logger.debug("Incoming Origin: {}", origin); logger.debug("Allowed Origins Configured: {}", allowedOrigins); + String method = request.getMethod(); + String uri = request.getRequestURI(); + + logger.debug("Incoming Origin: {}", origin); + logger.debug("Request Method: {}", method); + logger.debug("Request URI: {}", uri); + logger.debug("Allowed Origins Configured: {}", allowedOrigins); + + if ("OPTIONS".equalsIgnoreCase(method)) { + if (origin == null) { + logger.warn("BLOCKED - OPTIONS request without Origin header | Method: {} | URI: {}", method, uri); + response.sendError(HttpServletResponse.SC_FORBIDDEN, "OPTIONS request requires Origin header"); + return; + } + if (!isOriginAllowed(origin)) { + logger.warn("BLOCKED - Unauthorized Origin | Origin: {} | Method: {} | URI: {}", origin, method, uri); + response.sendError(HttpServletResponse.SC_FORBIDDEN, "Origin not allowed"); + return; + } + } else { + // For non-OPTIONS requests, validate origin if present + if (origin != null && !isOriginAllowed(origin)) { + logger.warn("BLOCKED - Unauthorized Origin | Origin: {} | Method: {} | URI: {}", origin, method, uri); + response.sendError(HttpServletResponse.SC_FORBIDDEN, "Origin not allowed"); + return; + } + } + + String path = request.getRequestURI(); + String contextPath = request.getContextPath(); + if (origin != null && isOriginAllowed(origin)) { - response.setHeader("Access-Control-Allow-Origin", origin); - response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); - response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, Accept, Jwttoken"); - response.setHeader("Vary", "Origin"); - response.setHeader("Access-Control-Allow-Credentials", "true"); + addCorsHeaders(response, origin); + logger.info("Origin Validated | Origin: {} | Method: {} | URI: {}", origin, method, uri); + + if ("OPTIONS".equalsIgnoreCase(method)) { + // OPTIONS (preflight) - respond with full allowed methods + response.setStatus(HttpServletResponse.SC_OK); + return; + } } else { logger.warn("Origin [{}] is NOT allowed. CORS headers NOT added.", origin); - } - if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { - logger.info("OPTIONS request - skipping JWT validation"); - response.setStatus(HttpServletResponse.SC_OK); - return; + if ("OPTIONS".equalsIgnoreCase(method)) { + response.sendError(HttpServletResponse.SC_FORBIDDEN, "Origin not allowed for OPTIONS request"); + return; + } } - String path = request.getRequestURI(); - String contextPath = request.getContextPath(); logger.info("JwtUserIdValidationFilter invoked for path: " + path); // Log cookies for debugging @@ -183,4 +214,13 @@ private void clearUserIdCookie(HttpServletResponse response) { cookie.setMaxAge(0); // Invalidate the cookie response.addCookie(cookie); } + + private void addCorsHeaders(HttpServletResponse response, String origin) { + response.setHeader("Access-Control-Allow-Origin", origin); // Never use wildcard + response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS"); + response.setHeader("Access-Control-Allow-Headers", + "Authorization, Content-Type, Accept, Jwttoken, serverAuthorization, ServerAuthorization, serverauthorization, Serverauthorization"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Max-Age", "3600"); + } } diff --git a/src/main/java/com/wipro/fhir/utils/http/HTTPRequestInterceptor.java b/src/main/java/com/wipro/fhir/utils/http/HTTPRequestInterceptor.java index 9c83a73..da825d9 100644 --- a/src/main/java/com/wipro/fhir/utils/http/HTTPRequestInterceptor.java +++ b/src/main/java/com/wipro/fhir/utils/http/HTTPRequestInterceptor.java @@ -23,11 +23,15 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; + +import java.util.Arrays; + import javax.ws.rs.core.MediaType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; @@ -42,6 +46,9 @@ public class HTTPRequestInterceptor implements HandlerInterceptor { Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); + @Value("${cors.allowed-origins}") + private String allowedOrigins; + @Autowired public void setValidator(Validator validator) { this.validator = validator; @@ -105,7 +112,13 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons response.setContentType(MediaType.APPLICATION_JSON); response.setContentLength(output.toString().length()); - response.setHeader("Access-Control-Allow-Origin", "*"); + String origin = request.getHeader("Origin"); + if (origin != null && isOriginAllowed(origin)) { + response.setHeader("Access-Control-Allow-Origin", origin); + response.setHeader("Access-Control-Allow-Credentials", "true"); + } else if (origin != null) { + logger.warn("CORS headers NOT added for error response | Unauthorized origin: {}", origin); + } response.getOutputStream().print(output.toString()); status = false; @@ -135,4 +148,20 @@ public void afterCompletion(HttpServletRequest request, HttpServletResponse resp logger.debug("In afterCompletion Request Completed"); } + private boolean isOriginAllowed(String origin) { + if (origin == null || allowedOrigins == null || allowedOrigins.trim().isEmpty()) { + return false; + } + + return Arrays.stream(allowedOrigins.split(",")) + .map(String::trim) + .anyMatch(pattern -> { + String regex = pattern + .replace(".", "\\.") + .replace("*", ".*") + .replace("http://localhost:.*", "http://localhost:\\d+"); + return origin.matches(regex); + }); + } + } From 998b5abc2d2b06e6b5db07f8a1abb35f06e70aeb Mon Sep 17 00:00:00 2001 From: Amoghavarsh <93114621+5Amogh@users.noreply.github.com> Date: Thu, 4 Dec 2025 18:01:35 +0530 Subject: [PATCH 2/7] Update version from 3.1.0 to 3.6.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f9aea27..e1f2944 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ com.wipro.fhir.r4 fhir-api - 3.1.0 + 3.6.0 war FHIR-API FHIR_NDHM standard integration in AMRIT From c2cd7204d7a7f5847eda6290cb9f61d9d1903ac0 Mon Sep 17 00:00:00 2001 From: Helen Grace Karyamsetty <133211481+helenKaryamsetty@users.noreply.github.com> Date: Tue, 30 Dec 2025 15:49:36 +0530 Subject: [PATCH 3/7] Abdm v3 (#128) * Abdm v3 (#112) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * Update pom.xml * mongo query change fetch to linktoken (#113) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * Abdm v3 (#114) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * ABDM Abdm HiTypes addition in linktoken (#115) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: corrected spelling mistake Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: modified repo queries Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Minor fixes (#116) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * response correction (#117) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * generate token logic change (#120) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * hiType correction and modification in error message format (#121) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * Fix display setting for patient care context --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * Modified error message display (#122) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * modified error message --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * M2 FHIR bundles creation (#123) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * modified error message * feat: new standard FHIR bundles creation * Fix environment variable for systemUrl * Fix formatting of systemUrl property * fix: taken coderabbitai comments and minor changes --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * added missed variable change (#124) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * modified error message * feat: new standard FHIR bundles creation * Fix environment variable for systemUrl * Fix formatting of systemUrl property * fix: taken coderabbitai comments and minor changes * fix: changed missed variable --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * Modified the constructor for better handling (#125) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * modified error message * feat: new standard FHIR bundles creation * Fix environment variable for systemUrl * Fix formatting of systemUrl property * fix: taken coderabbitai comments and minor changes * fix: changed missed variable * fix: modified the constructor * Change exception message for Organization resource * Fix typo in exception message for PractitionerDataModel --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * medication statement correction (#126) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * modified error message * feat: new standard FHIR bundles creation * Fix environment variable for systemUrl * Fix formatting of systemUrl property * fix: taken coderabbitai comments and minor changes * fix: changed missed variable * fix: modified the constructor * Change exception message for Organization resource * Fix typo in exception message for PractitionerDataModel * fix: corrected type error --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * Bundle model fixes (#127) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * modified error message * feat: new standard FHIR bundles creation * Fix environment variable for systemUrl * Fix formatting of systemUrl property * fix: taken coderabbitai comments and minor changes * fix: changed missed variable * fix: modified the constructor * Change exception message for Organization resource * Fix typo in exception message for PractitionerDataModel * fix: corrected type error * fix: correct medication histoory model class --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * Update jboss-web.xml * Update common_docker.properties * Delete src/main/environment/common_test.properties * Delete src/main/environment/common_dev.properties * taken coderabbit comments (#129) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * modified error message * feat: new standard FHIR bundles creation * Fix environment variable for systemUrl * Fix formatting of systemUrl property * fix: taken coderabbitai comments and minor changes * fix: changed missed variable * fix: modified the constructor * Change exception message for Organization resource * Fix typo in exception message for PractitionerDataModel * fix: corrected type error * fix: correct medication histoory model class * fix: taken coderabbitai comments --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * Update CareContextRepo.java --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .factorypath | 2 +- pom.xml | 54 ++- src/main/environment/common_ci.properties | 6 + src/main/environment/common_docker.properties | 9 +- .../environment/common_example.properties | 8 +- .../ResourceRequestGateway.java | 18 +- .../com/wipro/fhir/controller/test/Test.java | 8 +- .../v3/abha/CreateAbhaV3Controller.java | 4 +- .../CareContextLinkingController.java | 63 +++ .../GenerateTokenAbdmResponses.java | 39 ++ .../resource_model/ImmunizationDataModel.java | 59 +++ .../MedicalHistoryDataModel.java | 63 +++ .../resource_model/OrganizationDataModel.java | 88 ++++ .../resource_model/PractitionerDataModel.java | 83 ++++ .../v3/careContext/AddCareContextRequest.java | 20 + .../CareContextLinkTokenRequest.java | 15 + .../data/v3/careContext/CareContexts.java | 11 + .../GenerateCareContextTokenRequest.java | 14 + .../careContext/LinkCareContextRequest.java | 14 + .../v3/careContext/PatientCareContext.java | 16 + ...atientEligibleForResourceCreationRepo.java | 15 + .../GenerateTokenAbdmResponsesRepo.java | 17 + .../repo/v3/careContext/CareContextRepo.java | 25 + .../bundle_creation/BundleValidator.java | 59 +++ .../DiagnosticRecordResourceBundle.java | 27 ++ .../DiagnosticRecordResourceBundleImpl.java | 253 ++++++++++ .../DischargeSummaryResourceBundle.java | 36 ++ .../DischargeSummaryResourceBundleImpl.java | 444 ++++++++++++++++++ .../ImmunizationRecordResourceBundle.java | 26 + .../ImmunizationRecordResourceBundleImpl.java | 236 ++++++++++ .../OPConsultResourceBundle.java | 31 ++ .../OPConsultResourceBundleImpl.java | 340 ++++++++++++++ .../PrescriptionResourceBundle.java | 27 ++ .../PrescriptionResourceBundleImpl.java | 228 +++++++++ .../WellnessRecordResourceBundle.java | 27 ++ .../WellnessRecordResourceBundleImpl.java | 257 ++++++++++ .../service/common/CommonServiceImpl.java | 100 +++- .../fhir/service/ndhm/Common_NDHMService.java | 2 + .../service/ndhm/Common_NDHMServiceImpl.java | 23 + .../ndhm/LinkCareContext_NDHMServiceImpl.java | 1 + .../DiagnosticReportRecord.java | 36 -- .../DiagnosticReportRecordImpl.java | 260 ---------- .../OPConsultRecordBundle.java | 41 -- .../OPConsultRecordBundleImpl.java | 297 ------------ .../PrescriptionRecordBundle.java | 34 -- .../PrescriptionRecordBundleImpl.java | 238 ---------- .../DiagnosticReportResource.java | 1 - .../resource_model/EncounterResource.java | 10 +- .../resource_model/ImmunizationResource.java | 103 ++++ .../MedicalHistoryResource.java | 73 +++ .../MedicationRequestResource.java | 7 +- .../resource_model/ObservationResource.java | 3 +- .../resource_model/OrganizationResource.java | 131 +++--- .../resource_model/PatientResource.java | 1 - .../resource_model/PractitionerResource.java | 142 ++++-- .../v3/abha/CreateAbhaV3ServiceImpl.java | 1 - .../CareContextLinkingService.java | 11 + .../CareContextLinkingServiceImpl.java | 400 ++++++++++++++++ 58 files changed, 3496 insertions(+), 1061 deletions(-) create mode 100644 src/main/java/com/wipro/fhir/controller/v3/careContext/CareContextLinkingController.java create mode 100644 src/main/java/com/wipro/fhir/data/mongo/care_context/GenerateTokenAbdmResponses.java create mode 100644 src/main/java/com/wipro/fhir/data/resource_model/ImmunizationDataModel.java create mode 100644 src/main/java/com/wipro/fhir/data/resource_model/MedicalHistoryDataModel.java create mode 100644 src/main/java/com/wipro/fhir/data/resource_model/OrganizationDataModel.java create mode 100644 src/main/java/com/wipro/fhir/data/resource_model/PractitionerDataModel.java create mode 100644 src/main/java/com/wipro/fhir/data/v3/careContext/AddCareContextRequest.java create mode 100644 src/main/java/com/wipro/fhir/data/v3/careContext/CareContextLinkTokenRequest.java create mode 100644 src/main/java/com/wipro/fhir/data/v3/careContext/CareContexts.java create mode 100644 src/main/java/com/wipro/fhir/data/v3/careContext/GenerateCareContextTokenRequest.java create mode 100644 src/main/java/com/wipro/fhir/data/v3/careContext/LinkCareContextRequest.java create mode 100644 src/main/java/com/wipro/fhir/data/v3/careContext/PatientCareContext.java create mode 100644 src/main/java/com/wipro/fhir/repo/mongo/generateToken_response/GenerateTokenAbdmResponsesRepo.java create mode 100644 src/main/java/com/wipro/fhir/repo/v3/careContext/CareContextRepo.java create mode 100644 src/main/java/com/wipro/fhir/service/bundle_creation/BundleValidator.java create mode 100644 src/main/java/com/wipro/fhir/service/bundle_creation/DiagnosticRecordResourceBundle.java create mode 100644 src/main/java/com/wipro/fhir/service/bundle_creation/DiagnosticRecordResourceBundleImpl.java create mode 100644 src/main/java/com/wipro/fhir/service/bundle_creation/DischargeSummaryResourceBundle.java create mode 100644 src/main/java/com/wipro/fhir/service/bundle_creation/DischargeSummaryResourceBundleImpl.java create mode 100644 src/main/java/com/wipro/fhir/service/bundle_creation/ImmunizationRecordResourceBundle.java create mode 100644 src/main/java/com/wipro/fhir/service/bundle_creation/ImmunizationRecordResourceBundleImpl.java create mode 100644 src/main/java/com/wipro/fhir/service/bundle_creation/OPConsultResourceBundle.java create mode 100644 src/main/java/com/wipro/fhir/service/bundle_creation/OPConsultResourceBundleImpl.java create mode 100644 src/main/java/com/wipro/fhir/service/bundle_creation/PrescriptionResourceBundle.java create mode 100644 src/main/java/com/wipro/fhir/service/bundle_creation/PrescriptionResourceBundleImpl.java create mode 100644 src/main/java/com/wipro/fhir/service/bundle_creation/WellnessRecordResourceBundle.java create mode 100644 src/main/java/com/wipro/fhir/service/bundle_creation/WellnessRecordResourceBundleImpl.java delete mode 100644 src/main/java/com/wipro/fhir/service/resource_gateway/DiagnosticReportRecord.java delete mode 100644 src/main/java/com/wipro/fhir/service/resource_gateway/DiagnosticReportRecordImpl.java delete mode 100644 src/main/java/com/wipro/fhir/service/resource_gateway/OPConsultRecordBundle.java delete mode 100644 src/main/java/com/wipro/fhir/service/resource_gateway/OPConsultRecordBundleImpl.java delete mode 100644 src/main/java/com/wipro/fhir/service/resource_gateway/PrescriptionRecordBundle.java delete mode 100644 src/main/java/com/wipro/fhir/service/resource_gateway/PrescriptionRecordBundleImpl.java create mode 100644 src/main/java/com/wipro/fhir/service/resource_model/ImmunizationResource.java create mode 100644 src/main/java/com/wipro/fhir/service/resource_model/MedicalHistoryResource.java create mode 100644 src/main/java/com/wipro/fhir/service/v3/careContext/CareContextLinkingService.java create mode 100644 src/main/java/com/wipro/fhir/service/v3/careContext/CareContextLinkingServiceImpl.java diff --git a/.factorypath b/.factorypath index cdf2ab4..71f998d 100644 --- a/.factorypath +++ b/.factorypath @@ -1,4 +1,4 @@ - + diff --git a/pom.xml b/pom.xml index e1f2944..2909c01 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ com.wipro.fhir.r4 fhir-api - 3.6.0 + 3.6.1 war FHIR-API FHIR_NDHM standard integration in AMRIT @@ -186,39 +186,74 @@ com.fasterxml.jackson.core jackson-core - 2.14.2 + 2.15.2 com.fasterxml.jackson.core jackson-databind - 2.14.2 + 2.15.2 com.fasterxml.jackson.core jackson-annotations - 2.14.2 + 2.15.2 - + ca.uhn.hapi.fhir hapi-fhir-structures-r4 - 6.10.0 + 8.4.0 - + + + + ca.uhn.hapi.fhir + hapi-fhir-validation + 8.4.0 + + + + + ca.uhn.hapi.fhir + hapi-fhir-structures-r4 + 8.4.0 + + + + + + ca.uhn.hapi.fhir + hapi-fhir-caching-caffeine + 8.4.0 + + + ca.uhn.hapi hapi-base 2.6.0 - + ca.uhn.hapi.fhir org.hl7.fhir.utilities 6.5.18 + + + ca.uhn.hapi.fhir + hapi-fhir-validation-resources-r4 + 8.4.0 + + org.projectlombok @@ -363,7 +398,8 @@ ${target-properties} and ${source-properties} - diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index d1a7ec3..cda0a73 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -98,6 +98,10 @@ webLoginAbhaRequestOtp = @env.ABDM_PHR_URL@/login/abha/request/otp webLoginAbhaVerify = @env.ABDM_PHR_URL@/login/abha/verify webLoginPhrCard = @env.ABDM_PHR_URL@/login/profile/abha/phr-card +## ABDM V3 M2 APIs +generateTokenForLinkCareContext = @env.ABDM_HIECM_BASE_URL@/api/hiecm/v3/token/generate-token +linkCareContext = @env.ABDM_HIECM_BASE_URL@/api/hiecm/hip/v3/link/carecontext + x-CM-ID=@env.X_CM_ID@ abhaMode=@env.ABHA_MODE@ @@ -120,3 +124,5 @@ springdoc.swagger-ui.enabled=@env.SWAGGER_DOC_ENABLED@ spring.redis.host=@env.REDIS_HOST@ cors.allowed-origins=@env.CORS_ALLOWED_ORIGINS@ + +hipSystemUrl= @env.HIP_SYSTEM_URL@ diff --git a/src/main/environment/common_docker.properties b/src/main/environment/common_docker.properties index 82239d6..496239d 100644 --- a/src/main/environment/common_docker.properties +++ b/src/main/environment/common_docker.properties @@ -98,6 +98,10 @@ webLoginAbhaRequestOtp = ${ABDM_PHR_URL}/login/abha/request/otp webLoginAbhaVerify = ${ABDM_PHR_URL}/login/abha/verify webLoginPhrCard = ${ABDM_PHR_URL}/login/profile/abha/phr-card +## ABDM V3 M2 APIs +generateTokenForLinkCareContext = @env.ABDM_HIECM_BASE_URL@/api/hiecm/v3/token/generate-token +linkCareContext = @env.ABDM_HIECM_BASE_URL@/api/hiecm/hip/v3/link/carecontext + x-CM-ID=${X_CM_ID} abhaMode=${ABHA_MODE} @@ -117,4 +121,7 @@ springdoc.api-docs.enabled=${SWAGGER_DOC_ENABLED} springdoc.swagger-ui.enabled=${SWAGGER_DOC_ENABLED} # Redis IP -spring.redis.host=${REDIS_HOST} \ No newline at end of file +spring.redis.host=${REDIS_HOST} + + +hipSystemUrl= ${HIP_SYSTEM_URL} diff --git a/src/main/environment/common_example.properties b/src/main/environment/common_example.properties index b54379b..4e99ca7 100644 --- a/src/main/environment/common_example.properties +++ b/src/main/environment/common_example.properties @@ -100,6 +100,10 @@ requestAuthByAbdm = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/auth/byAb webLoginAbhaVerify = https://abhasbx.abdm.gov.in/abha/api/v3/phr/web/login/abha/verify webLoginPhrCard = https://abhasbx.abdm.gov.in/abha/api/v3/phr/web/login/profile/abha/phr-card +## ABDM V3 M2 APIs +generateTokenForLinkCareContext = https://dev.abdm.gov.in/api/hiecm/v3/token/generate-token +linkCareContext = https://dev.abdm.gov.in/api/hiecm/hip/v3/link/carecontext + x-CM-ID= sbx abhaMode=sbx @@ -113,4 +117,6 @@ jwt.secret=my-32-character-ultra-secure-and-ultra-long-secret logging.path=logs/ logging.file.name=logs/fhir-api.log -cors.allowed-origins=http://localhost:* \ No newline at end of file +cors.allowed-origins=http://localhost:* + +hipSystemUrl= \ No newline at end of file diff --git a/src/main/java/com/wipro/fhir/controller/generateresource/ResourceRequestGateway.java b/src/main/java/com/wipro/fhir/controller/generateresource/ResourceRequestGateway.java index 78ba1a5..c888027 100644 --- a/src/main/java/com/wipro/fhir/controller/generateresource/ResourceRequestGateway.java +++ b/src/main/java/com/wipro/fhir/controller/generateresource/ResourceRequestGateway.java @@ -33,9 +33,9 @@ import org.springframework.web.bind.annotation.RestController; import com.wipro.fhir.data.request_handler.ResourceRequestHandler; -import com.wipro.fhir.service.resource_gateway.DiagnosticReportRecord; -import com.wipro.fhir.service.resource_gateway.OPConsultRecordBundle; -import com.wipro.fhir.service.resource_gateway.PrescriptionRecordBundle; +import com.wipro.fhir.service.bundle_creation.DiagnosticRecordResourceBundle; +import com.wipro.fhir.service.bundle_creation.OPConsultResourceBundle; +import com.wipro.fhir.service.bundle_creation.PrescriptionResourceBundle; import com.wipro.fhir.utils.exception.FHIRException; import com.wipro.fhir.utils.response.OutputResponse; @@ -55,11 +55,11 @@ public class ResourceRequestGateway { private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); @Autowired - private OPConsultRecordBundle opConsultRecordBundle; + private OPConsultResourceBundle opConsultRecordBundle; @Autowired - private PrescriptionRecordBundle prescriptionRecordBundle; + private PrescriptionResourceBundle prescriptionRecordBundle; @Autowired - private DiagnosticReportRecord diagnosticReportRecord; + private DiagnosticRecordResourceBundle diagnosticReportRecord; /*** * @@ -78,7 +78,7 @@ public String getPatientResource(@RequestBody ResourceRequestHandler patientReso OutputResponse response = new OutputResponse(); try { - String s = opConsultRecordBundle.getOPConsultRecordBundle(patientResourceRequest, null); + String s = opConsultRecordBundle.populateOPConsultRecordResourceBundle(patientResourceRequest, null); response.setResponse(s); } catch (FHIRException e) { @@ -104,7 +104,7 @@ public String getDiagnosticReportRecord(@RequestBody ResourceRequestHandler pati OutputResponse response = new OutputResponse(); try { - String s = diagnosticReportRecord.getDiagnosticReportRecordBundle(patientResourceRequest, null); + String s = diagnosticReportRecord.populateDiagnosticReportResourceBundle(patientResourceRequest, null); response.setResponse(s); } catch (FHIRException e) { @@ -129,7 +129,7 @@ public String getPrescriptionRecord(@RequestBody ResourceRequestHandler patientR OutputResponse response = new OutputResponse(); try { - String s = prescriptionRecordBundle.getPrescriptionRecordBundle(patientResourceRequest, null); + String s = prescriptionRecordBundle.populatePrescriptionResourceBundle(patientResourceRequest, null); response.setResponse(s); } catch (FHIRException e) { diff --git a/src/main/java/com/wipro/fhir/controller/test/Test.java b/src/main/java/com/wipro/fhir/controller/test/Test.java index 719047c..138db28 100644 --- a/src/main/java/com/wipro/fhir/controller/test/Test.java +++ b/src/main/java/com/wipro/fhir/controller/test/Test.java @@ -34,9 +34,7 @@ import com.wipro.fhir.data.request_handler.ResourceRequestHandler; import com.wipro.fhir.service.atoms.feed.bahmni.ClinicalFeedWorker; -import com.wipro.fhir.service.resource_gateway.OPConsultRecordBundle; -import com.wipro.fhir.service.resource_gateway.OPConsultRecordBundleImpl; -import com.wipro.fhir.service.resource_gateway.PrescriptionRecordBundleImpl; +import com.wipro.fhir.service.bundle_creation.OPConsultResourceBundleImpl; import com.wipro.fhir.utils.http.HttpUtils; import com.wipro.fhir.utils.response.OutputResponse; @@ -50,7 +48,7 @@ public class Test { private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); @Autowired - private OPConsultRecordBundleImpl oPConsultRecordBundleImpl; + private OPConsultResourceBundleImpl oPConsultRecordBundleImpl; @Operation(summary = "Test parse ATOM Feeds") @PostMapping(value = { "/parse/feed/ATOM" }) @@ -59,7 +57,7 @@ public String parseFeeds(@RequestBody ResourceRequestHandler resourceRequestHand OutputResponse response = new OutputResponse(); String s = null; try { - s = oPConsultRecordBundleImpl.getOPConsultRecordBundle(resourceRequestHandler, null); + s = oPConsultRecordBundleImpl.populateOPConsultRecordResourceBundle(resourceRequestHandler, null); response.setResponse(s); } catch (Exception e) { logger.error("Unexpected error:" , e); diff --git a/src/main/java/com/wipro/fhir/controller/v3/abha/CreateAbhaV3Controller.java b/src/main/java/com/wipro/fhir/controller/v3/abha/CreateAbhaV3Controller.java index 4d95154..3c08ece 100644 --- a/src/main/java/com/wipro/fhir/controller/v3/abha/CreateAbhaV3Controller.java +++ b/src/main/java/com/wipro/fhir/controller/v3/abha/CreateAbhaV3Controller.java @@ -3,7 +3,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; - +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -60,6 +60,8 @@ public String abhaEnrollmentByAadhaar(@RequestBody String request) { logger.info("NDHM_FHIR generate OTP for ABHA card API response " + response.toString()); return response.toString(); } + + @CrossOrigin @Operation(summary = "Verify Auth By ABDM for ABHA enrollment") @PostMapping(value = { "/verifyAuthByAbdm" }) public String verifyMobileForAuth(@RequestBody String request) { diff --git a/src/main/java/com/wipro/fhir/controller/v3/careContext/CareContextLinkingController.java b/src/main/java/com/wipro/fhir/controller/v3/careContext/CareContextLinkingController.java new file mode 100644 index 0000000..8e9a827 --- /dev/null +++ b/src/main/java/com/wipro/fhir/controller/v3/careContext/CareContextLinkingController.java @@ -0,0 +1,63 @@ +package com.wipro.fhir.controller.v3.careContext; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.wipro.fhir.service.v3.careContext.CareContextLinkingService; +import com.wipro.fhir.utils.exception.FHIRException; +import com.wipro.fhir.utils.response.OutputResponse; + +import io.swagger.v3.oas.annotations.Operation; + +@RestController +@RequestMapping(value = "/careContext", headers = "Authorization") +public class CareContextLinkingController { + + @Autowired + private CareContextLinkingService careContextLinkingService; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + @Operation(summary = "Generate token for care context linking") + @PostMapping(value = { "/generateCareContextToken" }) + public String requestOtpForEnrollment(@RequestBody String request) { + logger.info("Generate token for care context API request " + request); + OutputResponse response = new OutputResponse(); + try { + if (request != null) { + String s = careContextLinkingService.generateTokenForCareContext(request); + response.setResponse(s); + } else + throw new FHIRException("NDHM_FHIR Empty request object"); + } catch (FHIRException e) { + response.setError(5000, e.getMessage()); + logger.error(e.toString()); + } + logger.info("NDHM_FHIR generate token for care context API response " + response.toString()); + return response.toString(); + } + + @Operation(summary = "link care context") + @PostMapping(value = { "/linkCareContext" }) + public String add(@RequestBody String request) { + logger.info("link care context API request " + request); + OutputResponse response = new OutputResponse(); + try { + if (request != null) { + String s = careContextLinkingService.linkCareContext(request); + response.setResponse(s); + } else + throw new FHIRException("NDHM_FHIR Empty request object"); + } catch (FHIRException e) { + response.setError(5000, e.getMessage()); + logger.error(e.toString()); + } + logger.info("link care context API response " + response.toString()); + return response.toString(); + } +} diff --git a/src/main/java/com/wipro/fhir/data/mongo/care_context/GenerateTokenAbdmResponses.java b/src/main/java/com/wipro/fhir/data/mongo/care_context/GenerateTokenAbdmResponses.java new file mode 100644 index 0000000..153d393 --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/mongo/care_context/GenerateTokenAbdmResponses.java @@ -0,0 +1,39 @@ +package com.wipro.fhir.data.mongo.care_context; + +import java.time.LocalDateTime; +import java.util.Date; + +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Field; + +import com.google.gson.annotations.Expose; + +import lombok.Data; + +@Data +@Document(collection = "GenerateTokenAbdmResponses") +public class GenerateTokenAbdmResponses { + + @Id + @Expose + @Field(value = "id") + private String id; + + @Expose + @Field(value = "abhaAddress") + private String abhaAddress; + + @Expose + @Field(value = "requestId") + private String requestId; + + @Expose + @Field(value = "response") + private String response; + + @Expose + @Field(value = "createdDate") + private Date createdDate; + +} diff --git a/src/main/java/com/wipro/fhir/data/resource_model/ImmunizationDataModel.java b/src/main/java/com/wipro/fhir/data/resource_model/ImmunizationDataModel.java new file mode 100644 index 0000000..e82fcbd --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/resource_model/ImmunizationDataModel.java @@ -0,0 +1,59 @@ +package com.wipro.fhir.data.resource_model; + +import java.math.BigInteger; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; + +import org.springframework.stereotype.Component; + +import lombok.Data; + +@Data +@Component +public class ImmunizationDataModel { + + private BigInteger id; + private BigInteger beneficiaryRegID; + private BigInteger visitCode; + private Integer providerServiceMapID; + private Integer vanID; + private String defaultReceivingAge; + private String vaccineName; + private Timestamp receivedDate; + private String receivedFacilityName; + private String sctcode; + private String sctTerm; + private Timestamp createdDate; + private String createdBy; + + public ImmunizationDataModel() { + } + + public ImmunizationDataModel(Object[] objArr) { + this.id = objArr[0] != null ? BigInteger.valueOf(((Number) objArr[0]).longValue()) : null; + this.beneficiaryRegID = objArr[1] != null ? BigInteger.valueOf(((Number) objArr[1]).longValue()) : null; + this.visitCode = objArr[2] != null ? BigInteger.valueOf(((Number) objArr[2]).longValue()) : null; + this.providerServiceMapID = objArr[3] != null ? ((Number) objArr[3]).intValue() : null; + this.vanID = objArr[4] != null ? ((Number) objArr[4]).intValue() : null; + this.defaultReceivingAge = objArr[5] != null ? (String) objArr[5] : null; + this.vaccineName = objArr[6] != null ? (String) objArr[6] : null; + this.receivedDate = objArr[7] != null ? (Timestamp) objArr[7] : null; + this.receivedFacilityName = objArr[8] != null ? (String) objArr[8] : null; + this.sctcode = objArr[9] != null ? (String) objArr[9] : null; + this.sctTerm = objArr[10] != null ? (String) objArr[10] : null; + this.createdDate = objArr[11] != null ? (Timestamp) objArr[11] : null; + this.createdBy = objArr[12] != null ? (String) objArr[12] : null; + } + + public List getImmunizationList(List resultSetList) { + List out = new ArrayList<>(); + if (resultSetList != null && !resultSetList.isEmpty()) { + for (Object[] objArr : resultSetList) { + out.add(new ImmunizationDataModel(objArr)); + } + } + return out; + } + +} diff --git a/src/main/java/com/wipro/fhir/data/resource_model/MedicalHistoryDataModel.java b/src/main/java/com/wipro/fhir/data/resource_model/MedicalHistoryDataModel.java new file mode 100644 index 0000000..dc1aba7 --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/resource_model/MedicalHistoryDataModel.java @@ -0,0 +1,63 @@ +package com.wipro.fhir.data.resource_model; + +import java.io.Serializable; +import java.math.BigInteger; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; + +import org.springframework.stereotype.Component; + +import lombok.Data; + + +@Data +@Component +public class MedicalHistoryDataModel implements Serializable { + + private static final long serialVersionUID = 1L; + + + private BigInteger id; + private BigInteger providerServiceMapID; + private String currentMedication; + private Timestamp currentMedYear; + private String createdBy; + private Timestamp createdDate; + public MedicalHistoryDataModel() { + } + + public MedicalHistoryDataModel(Object[] objArr) throws Exception { + try { + + this.id = objArr[0] != null ? BigInteger.valueOf(Long.parseLong(objArr[0].toString())) : null; + + this.providerServiceMapID = objArr[1] != null ? BigInteger.valueOf(Long.parseLong(objArr[1].toString())) : null; + + this.currentMedication = objArr[2] != null ? objArr[2].toString() : null; + + this.currentMedYear = objArr[3] instanceof Timestamp ? (Timestamp) objArr[3] : null; + + this.createdBy = objArr[4] != null ? objArr[4].toString() : null; + + this.createdDate = objArr[5] instanceof Timestamp ? (Timestamp) objArr[5] : null; + + } catch (Exception e) { + throw new Exception("Medical History resource model failed with error - " + e.getMessage()); + } + + } + + public List getMedicalList(List resultSetList) throws Exception { + MedicalHistoryDataModel medHistoryObj; + List medHistoryList = new ArrayList(); + if (resultSetList != null && resultSetList.size() > 0) { + for (Object[] objArr : resultSetList) { + medHistoryObj = new MedicalHistoryDataModel(objArr); + medHistoryList.add(medHistoryObj); + } + } + return medHistoryList; + } + +} diff --git a/src/main/java/com/wipro/fhir/data/resource_model/OrganizationDataModel.java b/src/main/java/com/wipro/fhir/data/resource_model/OrganizationDataModel.java new file mode 100644 index 0000000..21bc063 --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/resource_model/OrganizationDataModel.java @@ -0,0 +1,88 @@ +package com.wipro.fhir.data.resource_model; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.stereotype.Component; + +import com.wipro.fhir.utils.exception.FHIRException; + +import lombok.Data; + +@Component +@Data +public class OrganizationDataModel { + + private Long benVisitID; + private Short serviceProviderID; + private String serviceProviderName; + + private Integer stateID; + private String stateName; + + private Integer districtID; + private String districtName; + + private String locationName; + private String address; + + private Short serviceID; + private String serviceName; + + private Boolean isNational; + + private String abdmFacilityId; + private String abdmFacilityName; + + private Integer psAddMapID; + private Integer providerServiceMapID; + + public OrganizationDataModel() { + } + + public OrganizationDataModel(Object[] objArr) throws FHIRException { + + try { + + this.benVisitID = objArr[0] != null ? Long.parseLong(objArr[0].toString()) : null; + this.serviceProviderID = objArr[1] != null ? Short.parseShort(objArr[1].toString()) : null; + this.serviceProviderName = objArr[2] != null ? objArr[2].toString() : null; + + this.stateID = objArr[3] != null ? Integer.parseInt(objArr[3].toString()) : null; + this.stateName = objArr[4] != null ? objArr[4].toString() : null; + + this.districtID = objArr[5] != null ? Integer.parseInt(objArr[5].toString()) : null; + this.districtName = objArr[6] != null ? objArr[6].toString() : null; + + this.locationName = objArr[7] != null ? objArr[7].toString() : null; + this.address = objArr[8] != null ? objArr[8].toString() : null; + + this.serviceID = objArr[9] != null ? Short.parseShort(objArr[9].toString()) : null; + this.serviceName = objArr[10] != null ? objArr[10].toString() : null; + + this.isNational = objArr[11] != null + ? objArr[11].toString().equalsIgnoreCase("true") || objArr[11].toString().equals("1") + : null; + + this.abdmFacilityId = objArr[12] != null ? objArr[12].toString() : null; + this.abdmFacilityName = objArr[13] != null ? objArr[13].toString() : null; + + this.psAddMapID = objArr[14] != null ? Integer.parseInt(objArr[14].toString()) : null; + this.providerServiceMapID = objArr[15] != null ? Integer.parseInt(objArr[15].toString()) : null; + + } catch (Exception e) { + throw new FHIRException("Organization resource failed with error - " + e.getMessage()); + } + + } + + + public OrganizationDataModel getOrganization(Object[] resultSet) throws FHIRException { + + if (resultSet == null || resultSet.length == 0) { + return null; + } + + return new OrganizationDataModel(resultSet); + } +} diff --git a/src/main/java/com/wipro/fhir/data/resource_model/PractitionerDataModel.java b/src/main/java/com/wipro/fhir/data/resource_model/PractitionerDataModel.java new file mode 100644 index 0000000..085abf6 --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/resource_model/PractitionerDataModel.java @@ -0,0 +1,83 @@ +package com.wipro.fhir.data.resource_model; + +import java.sql.Timestamp; +import java.util.Date; + +import org.springframework.stereotype.Component; + +import com.wipro.fhir.utils.exception.FHIRException; + +import lombok.Data; + +@Data +@Component +public class PractitionerDataModel { + + private static final long serialVersionUID = 1L; + + private Integer benVisitID; + private Integer userID; + private String fullName; + private Date dob; + + private String employeeID; + private String contactNo; + private String emailID; + + private String qualificationName; + private String designationName; + + private String genderName; + private Integer genderID; + + private Integer serviceProviderID; + private Long visitCode; + + private String createdBy; + private Timestamp createdDate; + + public PractitionerDataModel() { + } + + public PractitionerDataModel(Object[] objArr) throws FHIRException { + + try { + + this.benVisitID = objArr[0] != null ? Integer.parseInt(objArr[0].toString()) : null; + this.userID = objArr[1] != null ? Integer.parseInt(objArr[1].toString()) : null; + + this.fullName = objArr[2] != null ? objArr[2].toString() : null; + + this.dob = objArr[3] != null ? (objArr[3] instanceof Date ? (Date) objArr[3] : null) : null; + + this.employeeID = objArr[4] != null ? objArr[4].toString() : null; + this.contactNo = objArr[5] != null ? objArr[5].toString() : null; + this.emailID = objArr[6] != null ? objArr[6].toString() : null; + this.qualificationName = objArr[7] != null ? objArr[7].toString() : null; + this.designationName = objArr[8] != null ? objArr[8].toString() : null; + this.genderName = objArr[9] != null ? objArr[9].toString() : null; + + this.genderID = objArr[10] != null ? Integer.parseInt(objArr[10].toString()) : null; + this.serviceProviderID = objArr[11] != null ? Integer.parseInt(objArr[11].toString()) : null; + + this.visitCode = objArr[12] != null ? Long.parseLong(objArr[12].toString()) : null; + + this.createdBy = objArr[13] != null ? objArr[13].toString() : null; + + this.createdDate = objArr[14] != null ? (objArr[14] instanceof Timestamp ? (Timestamp) objArr[14] : null) + : null; + } catch (Exception e) { + throw new FHIRException("Practitioner resource failed with error - " + e.getMessage()); + } + + } + + + public PractitionerDataModel getPractitioner(Object[] resultSet) throws FHIRException { + if (resultSet == null || resultSet.length == 0) { + return null; + } + return new PractitionerDataModel(resultSet); + } + +} diff --git a/src/main/java/com/wipro/fhir/data/v3/careContext/AddCareContextRequest.java b/src/main/java/com/wipro/fhir/data/v3/careContext/AddCareContextRequest.java new file mode 100644 index 0000000..bf42f71 --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/v3/careContext/AddCareContextRequest.java @@ -0,0 +1,20 @@ +package com.wipro.fhir.data.v3.careContext; + +import lombok.Data; + +@Data +public class AddCareContextRequest { + + private long beneficiaryID; + private String abhaAddress; + private String abhaNumber; + private String linkToken; + private String requestId; + private String visitCategory; + private String visitCode; + private String abdmFacilityId; + private String abdmFacilityName; + private String hiType; + private String display; + +} diff --git a/src/main/java/com/wipro/fhir/data/v3/careContext/CareContextLinkTokenRequest.java b/src/main/java/com/wipro/fhir/data/v3/careContext/CareContextLinkTokenRequest.java new file mode 100644 index 0000000..83d7b36 --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/v3/careContext/CareContextLinkTokenRequest.java @@ -0,0 +1,15 @@ +package com.wipro.fhir.data.v3.careContext; + +import lombok.Data; + +@Data +public class CareContextLinkTokenRequest { + + private String abhaNumber; + private String abhaAddress; + private String name; + private String gender; + private int yearOfBirth; + private String abdmFacilityId; + +} diff --git a/src/main/java/com/wipro/fhir/data/v3/careContext/CareContexts.java b/src/main/java/com/wipro/fhir/data/v3/careContext/CareContexts.java new file mode 100644 index 0000000..112b244 --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/v3/careContext/CareContexts.java @@ -0,0 +1,11 @@ +package com.wipro.fhir.data.v3.careContext; + +import lombok.Data; + +@Data +public class CareContexts { + + private String referenceNumber; + private String display; + +} diff --git a/src/main/java/com/wipro/fhir/data/v3/careContext/GenerateCareContextTokenRequest.java b/src/main/java/com/wipro/fhir/data/v3/careContext/GenerateCareContextTokenRequest.java new file mode 100644 index 0000000..6dcac58 --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/v3/careContext/GenerateCareContextTokenRequest.java @@ -0,0 +1,14 @@ +package com.wipro.fhir.data.v3.careContext; + +import lombok.Data; + +@Data +public class GenerateCareContextTokenRequest { + + private String abhaNumber; + private String abhaAddress; + private String name; + private String gender; + private int yearOfBirth; + +} diff --git a/src/main/java/com/wipro/fhir/data/v3/careContext/LinkCareContextRequest.java b/src/main/java/com/wipro/fhir/data/v3/careContext/LinkCareContextRequest.java new file mode 100644 index 0000000..162cabc --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/v3/careContext/LinkCareContextRequest.java @@ -0,0 +1,14 @@ +package com.wipro.fhir.data.v3.careContext; + +import java.util.List; +import lombok.Data; + +@Data +public class LinkCareContextRequest { + + private String abhaNumber; + private String abhaAddress; + private List patient; + + +} diff --git a/src/main/java/com/wipro/fhir/data/v3/careContext/PatientCareContext.java b/src/main/java/com/wipro/fhir/data/v3/careContext/PatientCareContext.java new file mode 100644 index 0000000..2603562 --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/v3/careContext/PatientCareContext.java @@ -0,0 +1,16 @@ +package com.wipro.fhir.data.v3.careContext; + +import java.util.List; +import lombok.Data; + +@Data +public class PatientCareContext { + + private String referenceNumber; + private String display; + private List careContexts; + private String hiType; + private int count; + + +} diff --git a/src/main/java/com/wipro/fhir/repo/common/PatientEligibleForResourceCreationRepo.java b/src/main/java/com/wipro/fhir/repo/common/PatientEligibleForResourceCreationRepo.java index 931315a..17cbc85 100644 --- a/src/main/java/com/wipro/fhir/repo/common/PatientEligibleForResourceCreationRepo.java +++ b/src/main/java/com/wipro/fhir/repo/common/PatientEligibleForResourceCreationRepo.java @@ -115,4 +115,19 @@ List callMedicationRequestSP(@Param("beneficiaryRegID_IN") BigInteger @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_PatientDemographic(:beneficiaryRegID_IN, " + " @0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12,@13, @14, @15, @16, @17 );") List callPatientDemographicSP(@Param("beneficiaryRegID_IN") BigInteger beneficiaryRegID_IN); + + //medicalHistory + @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_MedicalHistoryDetails(:visitCode_IN)") + List callMedicalHistorySp(@Param("visitCode_IN") BigInteger visitCode_IN); + + //Immunization record + @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_Immunization(:beneficiaryRegID_IN, :visitCode_IN)") + List callImmunizationSP(@Param("beneficiaryRegID_IN") BigInteger beneficiaryRegID_IN, @Param("visitCode_IN") BigInteger visitCode_IN); + + @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_OrganizationDetails(:visitCode_IN)") + List callOrganizationSp(@Param("visitCode_IN") BigInteger visitCode_IN); + + @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_Practitioner(:visitCode_IN)") + List callPractitionerSP(@Param("visitCode_IN") BigInteger visitCode_IN); + } diff --git a/src/main/java/com/wipro/fhir/repo/mongo/generateToken_response/GenerateTokenAbdmResponsesRepo.java b/src/main/java/com/wipro/fhir/repo/mongo/generateToken_response/GenerateTokenAbdmResponsesRepo.java new file mode 100644 index 0000000..70db7ac --- /dev/null +++ b/src/main/java/com/wipro/fhir/repo/mongo/generateToken_response/GenerateTokenAbdmResponsesRepo.java @@ -0,0 +1,17 @@ +package com.wipro.fhir.repo.mongo.generateToken_response; + +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.rest.core.annotation.RestResource; +import org.springframework.stereotype.Repository; + +import com.wipro.fhir.data.mongo.care_context.GenerateTokenAbdmResponses; + +@Repository +@RestResource(exported = false) +public interface GenerateTokenAbdmResponsesRepo extends MongoRepository { + + GenerateTokenAbdmResponses findByAbhaAddress(String abhaAddress); + + GenerateTokenAbdmResponses findByRequestId(String requestId); + +} diff --git a/src/main/java/com/wipro/fhir/repo/v3/careContext/CareContextRepo.java b/src/main/java/com/wipro/fhir/repo/v3/careContext/CareContextRepo.java new file mode 100644 index 0000000..26696b1 --- /dev/null +++ b/src/main/java/com/wipro/fhir/repo/v3/careContext/CareContextRepo.java @@ -0,0 +1,25 @@ +package com.wipro.fhir.repo.v3.careContext; + +import java.math.BigInteger; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; + +import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; + +public interface CareContextRepo extends CrudRepository { + + @Query(value="SELECT COUNT(*) FROM t_phy_vitals WHERE VisitCode = :visitCode", nativeQuery = true) + public int hasPhyVitals(@Param("visitCode") String visitCode); + + @Query(value="SELECT COUNT(*) FROM t_prescribeddrug WHERE VisitCode = :visitCode", nativeQuery = true) + public int hasPrescribedDrugs(@Param("visitCode") String visitCode); + + @Query(value="SELECT COUNT(*) FROM t_lab_testorder WHERE VisitCode = :visitCode", nativeQuery = true) + public int hasLabtestsDone(@Param("visitCode") String visitCode); + + @Query(value="SELECT COUNT(*) FROM t_childvaccinedetail1 WHERE VisitCode = :visitCode", nativeQuery = true) + public int hasVaccineDetails(@Param("visitCode") String visitCode); + +} diff --git a/src/main/java/com/wipro/fhir/service/bundle_creation/BundleValidator.java b/src/main/java/com/wipro/fhir/service/bundle_creation/BundleValidator.java new file mode 100644 index 0000000..64bf2f1 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/bundle_creation/BundleValidator.java @@ -0,0 +1,59 @@ +package com.wipro.fhir.service.bundle_creation; + +import java.io.IOException; + +import org.hl7.fhir.common.hapi.validation.support.CommonCodeSystemsTerminologyService; +import org.hl7.fhir.common.hapi.validation.support.InMemoryTerminologyServerValidationSupport; +import org.hl7.fhir.common.hapi.validation.support.NpmPackageValidationSupport; +import org.hl7.fhir.common.hapi.validation.support.SnapshotGeneratingValidationSupport; +import org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain; +import org.hl7.fhir.common.hapi.validation.validator.FhirInstanceValidator; + +import com.wipro.fhir.utils.exception.FHIRException; + +import ca.uhn.fhir.context.FhirContext; +import ca.uhn.fhir.context.support.DefaultProfileValidationSupport; +import ca.uhn.fhir.validation.FhirValidator; +import ca.uhn.fhir.validation.SingleValidationMessage; +import ca.uhn.fhir.validation.ValidationResult; + +// This is a one time validator to validate fhir bundles +public class BundleValidator { + + static FhirContext ctx = FhirContext.forR4(); + + public static void main(String[] args) throws FHIRException { + try { + NpmPackageValidationSupport npmPackageValidationSupport = new NpmPackageValidationSupport(ctx); + npmPackageValidationSupport.loadPackageFromClasspath(" "); // download the package from ABDM and add in resources + + //create a validation support chain + ValidationSupportChain validationSupportChain = new ValidationSupportChain( + npmPackageValidationSupport, + new DefaultProfileValidationSupport(ctx), + new CommonCodeSystemsTerminologyService(ctx), + new InMemoryTerminologyServerValidationSupport(ctx), + new SnapshotGeneratingValidationSupport(ctx) + + ); + + FhirValidator validator = ctx.newValidator(); + FhirInstanceValidator instanceValidator = new FhirInstanceValidator(validationSupportChain); + validator.registerValidatorModule(instanceValidator); + + String bundleJson = ""; // add bundle json here + + ValidationResult outCome = validator.validateWithResult(bundleJson); + + for(SingleValidationMessage next : outCome.getMessages()) { + System.out.print("Error - " + next.getSeverity() + " - " + next.getLocationString() + " - " + next.getMessage()); + } + + } catch (IOException e) { + throw new FHIRException("Issue in validating the bundle - " + e.getMessage()); + } + + } + + +} diff --git a/src/main/java/com/wipro/fhir/service/bundle_creation/DiagnosticRecordResourceBundle.java b/src/main/java/com/wipro/fhir/service/bundle_creation/DiagnosticRecordResourceBundle.java new file mode 100644 index 0000000..61c2bd4 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/bundle_creation/DiagnosticRecordResourceBundle.java @@ -0,0 +1,27 @@ +package com.wipro.fhir.service.bundle_creation; + +import java.util.List; + +import org.hl7.fhir.r4.model.Composition; +import org.hl7.fhir.r4.model.DiagnosticReport; +import org.hl7.fhir.r4.model.Organization; +import org.hl7.fhir.r4.model.Practitioner; + +import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.utils.exception.FHIRException; + +public interface DiagnosticRecordResourceBundle { + + + int processDiagnosticReportRecordBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException; + + Composition populateDiagnosticReportComposition(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p, List diagnosticReports, Practitioner practitioner, + Organization organization); + + String populateDiagnosticReportResourceBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException; + +} diff --git a/src/main/java/com/wipro/fhir/service/bundle_creation/DiagnosticRecordResourceBundleImpl.java b/src/main/java/com/wipro/fhir/service/bundle_creation/DiagnosticRecordResourceBundleImpl.java new file mode 100644 index 0000000..71d4f0c --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/bundle_creation/DiagnosticRecordResourceBundleImpl.java @@ -0,0 +1,253 @@ +package com.wipro.fhir.service.bundle_creation; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import org.hl7.fhir.r4.model.Bundle; +import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent; +import org.hl7.fhir.r4.model.CodeableConcept; +import org.hl7.fhir.r4.model.Coding; +import org.hl7.fhir.r4.model.Composition; +import org.hl7.fhir.r4.model.DiagnosticReport; +import org.hl7.fhir.r4.model.Encounter; +import org.hl7.fhir.r4.model.Identifier; +import org.hl7.fhir.r4.model.Meta; +import org.hl7.fhir.r4.model.Observation; +import org.hl7.fhir.r4.model.Organization; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.Practitioner; +import org.hl7.fhir.r4.model.Reference; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import com.wipro.fhir.data.mongo.amrit_resource.AMRIT_ResourceMongo; +import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; +import com.wipro.fhir.service.common.CommonService; +import com.wipro.fhir.service.resource_model.DiagnosticReportResource; +import com.wipro.fhir.service.resource_model.ObservationResource; +import com.wipro.fhir.service.resource_model.OrganizationResource; +import com.wipro.fhir.service.resource_model.PatientResource; +import com.wipro.fhir.service.resource_model.PractitionerResource; +import com.wipro.fhir.utils.exception.FHIRException; + +import ca.uhn.fhir.context.FhirContext; +import ca.uhn.fhir.parser.IParser; + +@Service +public class DiagnosticRecordResourceBundleImpl implements DiagnosticRecordResourceBundle { + + @Autowired + private PractitionerResource practitionerResource; + + @Autowired + private OrganizationResource organizationResource; + + @Autowired + private PatientResource patientResource; + + @Autowired + private ObservationResource observationResource; + + @Autowired + private DiagnosticReportResource diagnosticReportResource; + + @Autowired + private CommonService commonService; + + @Autowired + private BenHealthIDMappingRepo benHealthIDMappingRepo; + + @Value("${hipSystemUrl}") + private String systemUrl; + + @Override + public int processDiagnosticReportRecordBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException { + int i = 0; + // call method to generate Prescription resource + String diagnosticReportRecordBundle = populateDiagnosticReportResourceBundle(resourceRequestHandler, p); + + // call private method to create mongo object with resource data + AMRIT_ResourceMongo aMRIT_ResourceMongo = createDiagnosticReportRecordBundleMongo(p, + diagnosticReportRecordBundle); + // if resource data is not null, save to mongo + if (aMRIT_ResourceMongo != null) { + i = commonService.saveResourceToMongo(aMRIT_ResourceMongo); + + } else + throw new FHIRException("TODO - exception - later will implement"); + + return i; + + } + + @Override + public String populateDiagnosticReportResourceBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException { + + Bundle diagReportBundle = new Bundle(); + String serializeBundle; + + try { + String id = resourceRequestHandler.getVisitCode() + ":" + commonService.getUUID(); + diagReportBundle.setId(id); + diagReportBundle.setType(Bundle.BundleType.DOCUMENT); + diagReportBundle.setTimestamp(new Timestamp(System.currentTimeMillis())); + + Meta meta = new Meta(); + meta.setVersionId("1"); + meta.setLastUpdated(new Timestamp(System.currentTimeMillis())); + meta.addProfile("https://nrces.in/ndhm/fhir/r4/StructureDefinition/DocumentBundle"); + meta.addSecurity(new Coding("http://terminology.hl7.org/CodeSystem/v3-Confidentiality", "R", "restricted")); + diagReportBundle.setMeta(meta); + + Identifier identifier = new Identifier(); + identifier.setSystem(systemUrl); + identifier.setValue(diagReportBundle.getId()); + diagReportBundle.setIdentifier(identifier); + + // practitioner resource + Practitioner practitioner = practitionerResource.getPractitionerResource(resourceRequestHandler); + + // Organization resource + Organization organization = organizationResource.getOrganizationResource(resourceRequestHandler); + + // Patient resource + Patient patient = patientResource.getPatientResource(resourceRequestHandler); + + // Observation- Physical Examination - vitals + Map> observationMap = observationResource.getObservationLab(patient, + resourceRequestHandler); + + // diagnostic report + List diagnosticResourceList = diagnosticReportResource.getDiagnosticReport(patient, + new Encounter(), resourceRequestHandler, observationMap); + + Composition composition = populateDiagnosticReportComposition(resourceRequestHandler, p, + diagnosticResourceList, practitioner, organization); + + List bundleEntries = new ArrayList<>(); + + BundleEntryComponent entryComposition = new BundleEntryComponent(); + entryComposition.setFullUrl(composition.getIdElement().getValue()); + entryComposition.setResource(composition); + bundleEntries.add(entryComposition); + + BundleEntryComponent entryPractitioner = new BundleEntryComponent(); + entryPractitioner.setFullUrl(practitioner.getIdElement().getValue()); + entryPractitioner.setResource(practitioner); + bundleEntries.add(entryPractitioner); + + BundleEntryComponent entryOrganization = new BundleEntryComponent(); + entryOrganization.setFullUrl(organization.getIdElement().getValue()); + entryOrganization.setResource(organization); + bundleEntries.add(entryOrganization); + + BundleEntryComponent entryPatient = new BundleEntryComponent(); + entryPatient.setFullUrl(patient.getIdElement().getValue()); + entryPatient.setResource(patient); + bundleEntries.add(entryPatient); + + + for (DiagnosticReport dr : diagnosticResourceList) { + BundleEntryComponent entryDR = new BundleEntryComponent(); + entryDR.setFullUrl(dr.getIdElement().getValue()); + entryDR.setResource(dr); + + bundleEntries.add(entryDR); + } + + + if (observationMap != null && !observationMap.isEmpty()) { + for (Map.Entry> e : observationMap.entrySet()) { + List obsList = e.getValue(); + if (obsList == null) + continue; + + for (Observation obs : obsList) { + BundleEntryComponent entryObs = new BundleEntryComponent(); + entryObs.setFullUrl(obs.getIdElement().getValue()); + entryObs.setResource(obs); + bundleEntries.add(entryObs); + } + } + } + + diagReportBundle.setEntry(bundleEntries); + + FhirContext ctx = FhirContext.forR4(); + IParser parser = ctx.newJsonParser(); + serializeBundle = parser.encodeResourceToString(diagReportBundle); + + } catch (Exception e) { + throw new FHIRException("Diagnostic Report FHIR Resource Bundle failed with error - " + e); + } + + return serializeBundle; + } + + @Override + public Composition populateDiagnosticReportComposition(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p, List diagnosticReports, Practitioner practitioner, Organization organization) { + + Composition composition = new Composition(); + composition.setId("Composition/" + commonService.getUUID()); + + Meta meta = new Meta(); + meta.setVersionId("1"); + meta.addProfile("https://nrces.in/ndhm/fhir/r4/StructureDefinition/DiagnosticReportRecord"); + composition.setMeta(meta); + + composition.setStatus(Composition.CompositionStatus.FINAL); + + composition.setType(new CodeableConcept() + .addCoding(new Coding("http://snomed.info/sct", "721981007", "Diagnostic studies report"))); + + composition.setSubject(new Reference("Patient/" + p.getBeneficiaryId().toString())); + composition.setDate(new Date()); + composition.addAuthor(new Reference(practitioner.getIdElement().getValue())); + composition.setCustodian(new Reference(organization.getIdElement().getValue())); + composition.setTitle("Diagnostic Report Record"); + + Composition.SectionComponent section = new Composition.SectionComponent(); + + section.setCode(new CodeableConcept() + .addCoding(new Coding("http://snomed.info/sct", "721981007", "Diagnostic studies report"))); + + for (DiagnosticReport dr : diagnosticReports) { + Reference drRef = new Reference(dr.getIdElement().getValue()); + drRef.setType("DiagnosticReport"); + section.addEntry(drRef); + } + + composition.addSection(section); + return composition; + } + + private AMRIT_ResourceMongo createDiagnosticReportRecordBundleMongo(PatientEligibleForResourceCreation p, + String diagnosticReportRecordBundle) { + AMRIT_ResourceMongo aMRIT_ResourceMongo = new AMRIT_ResourceMongo(); + aMRIT_ResourceMongo.setBeneficiaryID(p.getBeneficiaryId()); + aMRIT_ResourceMongo.setBeneficiaryRegID(p.getBeneficiaryRegID()); + // get ABHA from table "m_benhealthmapping" for this visit(visit code) + if (p.getVisitCode() != null) { + aMRIT_ResourceMongo.setVisitCode(p.getVisitCode()); + List objArrResultSet = benHealthIDMappingRepo.getLinkedHealthIDForVisit(p.getVisitCode()); + if (objArrResultSet != null && objArrResultSet.size() > 0) { + aMRIT_ResourceMongo.setNationalHealthID(objArrResultSet.get(0)); + } + } + + aMRIT_ResourceMongo.setResourceJson(diagnosticReportRecordBundle); + aMRIT_ResourceMongo.setResourceType("DiagnosticReport"); + + return aMRIT_ResourceMongo; + } + +} diff --git a/src/main/java/com/wipro/fhir/service/bundle_creation/DischargeSummaryResourceBundle.java b/src/main/java/com/wipro/fhir/service/bundle_creation/DischargeSummaryResourceBundle.java new file mode 100644 index 0000000..e06bdf5 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/bundle_creation/DischargeSummaryResourceBundle.java @@ -0,0 +1,36 @@ +package com.wipro.fhir.service.bundle_creation; + +import java.util.List; + +import org.hl7.fhir.r4.model.AllergyIntolerance; +import org.hl7.fhir.r4.model.Composition; +import org.hl7.fhir.r4.model.Condition; +import org.hl7.fhir.r4.model.DiagnosticReport; +import org.hl7.fhir.r4.model.Encounter; +import org.hl7.fhir.r4.model.FamilyMemberHistory; +import org.hl7.fhir.r4.model.MedicationRequest; +import org.hl7.fhir.r4.model.MedicationStatement; +import org.hl7.fhir.r4.model.Organization; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.Practitioner; + +import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.utils.exception.FHIRException; + +public interface DischargeSummaryResourceBundle { + + int processDischargeSummaryRecordBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException; + + Composition populateDischargeSummaryComposition(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p, Practitioner practitioner, Organization organization, Patient patient, + Encounter encounter, List chiefComplaints, List physicalExam, + List allergyList, FamilyMemberHistory familyMemberHistory, + List pastMedicalHistoryConditions, List medicationRequests, + List procedures); + + String populateDischargeSummaryResourceBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException; + +} diff --git a/src/main/java/com/wipro/fhir/service/bundle_creation/DischargeSummaryResourceBundleImpl.java b/src/main/java/com/wipro/fhir/service/bundle_creation/DischargeSummaryResourceBundleImpl.java new file mode 100644 index 0000000..db6c76b --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/bundle_creation/DischargeSummaryResourceBundleImpl.java @@ -0,0 +1,444 @@ +package com.wipro.fhir.service.bundle_creation; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import org.hl7.fhir.r4.model.AllergyIntolerance; +import org.hl7.fhir.r4.model.Bundle; +import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent; +import org.hl7.fhir.r4.model.Bundle.BundleType; +import org.hl7.fhir.r4.model.CodeableConcept; +import org.hl7.fhir.r4.model.Coding; +import org.hl7.fhir.r4.model.Composition; +import org.hl7.fhir.r4.model.Composition.CompositionStatus; +import org.hl7.fhir.r4.model.Composition.SectionComponent; +import org.hl7.fhir.r4.model.Condition; +import org.hl7.fhir.r4.model.DiagnosticReport; +import org.hl7.fhir.r4.model.Encounter; +import org.hl7.fhir.r4.model.FamilyMemberHistory; +import org.hl7.fhir.r4.model.Identifier; +import org.hl7.fhir.r4.model.MedicationRequest; +import org.hl7.fhir.r4.model.MedicationStatement; +import org.hl7.fhir.r4.model.Meta; +import org.hl7.fhir.r4.model.Observation; +import org.hl7.fhir.r4.model.Organization; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.Practitioner; +import org.hl7.fhir.r4.model.Reference; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import com.wipro.fhir.data.mongo.amrit_resource.AMRIT_ResourceMongo; +import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; +import com.wipro.fhir.service.common.CommonService; +import com.wipro.fhir.service.resource_model.AllergyIntoleranceResource; +import com.wipro.fhir.service.resource_model.ConditionResource; +import com.wipro.fhir.service.resource_model.DiagnosticReportResource; +import com.wipro.fhir.service.resource_model.EncounterResource; +import com.wipro.fhir.service.resource_model.FamilyMemberHistoryResource; +import com.wipro.fhir.service.resource_model.MedicalHistoryResource; +import com.wipro.fhir.service.resource_model.MedicationRequestResource; +import com.wipro.fhir.service.resource_model.ObservationResource; +import com.wipro.fhir.service.resource_model.OrganizationResource; +import com.wipro.fhir.service.resource_model.PatientResource; +import com.wipro.fhir.service.resource_model.PractitionerResource; +import com.wipro.fhir.utils.exception.FHIRException; + +import ca.uhn.fhir.context.FhirContext; +import ca.uhn.fhir.parser.IParser; + +@Service +public class DischargeSummaryResourceBundleImpl implements DischargeSummaryResourceBundle { + + @Autowired + private CommonService commonService; + + @Autowired + private PractitionerResource practitionerResource; + + @Autowired + private OrganizationResource organizationResource; + + @Autowired + private PatientResource patientResource; + + @Autowired + private ConditionResource conditionResource; + + @Autowired + private EncounterResource encounterResource; + + @Autowired + private AllergyIntoleranceResource allergyIntoleranceResource; + + @Autowired + private FamilyMemberHistoryResource familyMemberHistoryResource; + + @Autowired + private MedicalHistoryResource medicalHistoryResource; + + @Autowired + private ObservationResource observationResource; + + @Autowired + private DiagnosticReportResource diagnosticReportResource; + + @Autowired + private MedicationRequestResource medicationRequestResource; + + @Autowired + private BenHealthIDMappingRepo benHealthIDMappingRepo; + + @Value("${hipSystemUrl}") + private String systemUrl; + + @Override + public int processDischargeSummaryRecordBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException { + int i = 0; + // call method to generate Prescription resource + String dischargeSummaryBundle = populateDischargeSummaryResourceBundle(resourceRequestHandler, p); + + // call private method to create mongo object with resource data + AMRIT_ResourceMongo aMRIT_ResourceMongo = createDischargeSummaryBundleMongo(p, + dischargeSummaryBundle); + // if resource data is not null, save to mongo + if (aMRIT_ResourceMongo != null) { + i = commonService.saveResourceToMongo(aMRIT_ResourceMongo); + + } else + throw new FHIRException("Issue in processing the bundle"); + + return i; + + } + + + @Override + public String populateDischargeSummaryResourceBundle(ResourceRequestHandler resourceRequestHandler, PatientEligibleForResourceCreation p) throws FHIRException { + + Bundle dischargeSummaryBundle = new Bundle(); + String serializeBundle = null; + + + try { + String id = resourceRequestHandler.getVisitCode()+ ":" + commonService.getUUID(); + dischargeSummaryBundle.setId(id); + dischargeSummaryBundle.setType(BundleType.DOCUMENT); + dischargeSummaryBundle.setTimestamp(new Timestamp(System.currentTimeMillis())); + + Meta meta = new Meta(); + meta.setVersionId("1"); + meta.setLastUpdated(new Timestamp(System.currentTimeMillis())); + meta.addProfile("https://nrces.in/ndhm/fhir/r4/StructureDefinition/DocumentBundle"); + meta.addSecurity(new Coding("http://terminology.hl7.org/CodeSystem/v3-Confidentiality", "restricted", "R")); + dischargeSummaryBundle.setMeta(meta); + + Identifier identifier = new Identifier(); + identifier.setSystem(systemUrl); + identifier.setValue(dischargeSummaryBundle.getId()); + dischargeSummaryBundle.setIdentifier(identifier); + + // practitioner + Practitioner practitioner = practitionerResource.getPractitionerResource(resourceRequestHandler); + // organization + Organization organization = organizationResource.getOrganizationResource(resourceRequestHandler); + // Patient Resource + Patient patient = patientResource.getPatientResource(resourceRequestHandler); + + //Chief complaints + List conditionListChiefComplaints = conditionResource.getCondition(patient, resourceRequestHandler, + "chiefcomplaints"); + + // diagnosis + List conditionListDiagnosis = conditionResource.getCondition(patient, resourceRequestHandler, + "diagnosis"); + + Encounter encounter = encounterResource.getEncounterResource(patient, resourceRequestHandler, + conditionListChiefComplaints, conditionListDiagnosis); + + // AllergyIntolerance resource + List allergyList = allergyIntoleranceResource.getAllergyIntolerance(patient, encounter, + resourceRequestHandler, practitioner); + + // FamilyMemberHistory resource + FamilyMemberHistory familyMemberHistory = familyMemberHistoryResource.getFamilyMemberHistory(patient, + resourceRequestHandler); + + List medicationStatement = medicalHistoryResource.getMedicalHistory(patient, resourceRequestHandler); + + // Medication request + List medicationRequest = medicationRequestResource.getMedicationRequest(patient, + resourceRequestHandler, practitioner, null); + + // Observation- Physical Examination + Map> observationMap = observationResource.getObservationLab(patient, + resourceRequestHandler); + + List diagnosticResourceList = diagnosticReportResource.getDiagnosticReport(patient, + new Encounter(), resourceRequestHandler, observationMap); + + // composition + Composition composition = populateDischargeSummaryComposition(resourceRequestHandler, p, practitioner, organization, patient, encounter, conditionListChiefComplaints, + conditionListDiagnosis, allergyList, familyMemberHistory, medicationStatement, medicationRequest, diagnosticResourceList); + + List bundleEnteries = new ArrayList<>(); + + BundleEntryComponent bundleEntry1 = new BundleEntryComponent(); + bundleEntry1.setFullUrl(composition.getIdElement().getValue()); + bundleEntry1.setResource(composition); + + BundleEntryComponent bundleEntry2 = new BundleEntryComponent(); + bundleEntry2.setFullUrl(practitioner.getIdElement().getValue()); + bundleEntry2.setResource(practitioner); + + BundleEntryComponent bundleEntry3 = new BundleEntryComponent(); + bundleEntry3.setFullUrl(organization.getIdElement().getValue()); + bundleEntry3.setResource(organization); + + BundleEntryComponent bundleEntry4 = new BundleEntryComponent(); + bundleEntry4.setFullUrl(patient.getIdElement().getValue()); + bundleEntry4.setResource(patient); + + bundleEnteries.add(bundleEntry1); + bundleEnteries.add(bundleEntry2); + bundleEnteries.add(bundleEntry3); + bundleEnteries.add(bundleEntry4); + + for (Condition conditionCheifComplaints : conditionListChiefComplaints) { + BundleEntryComponent bundleEntry5 = new BundleEntryComponent(); + bundleEntry5.setFullUrl(conditionCheifComplaints.getIdElement().getValue()); + bundleEntry5.setResource(conditionCheifComplaints); + + bundleEnteries.add(bundleEntry5); + } + + for (Condition conditionDiagnosis : conditionListDiagnosis) { + BundleEntryComponent bundleEntry6 = new BundleEntryComponent(); + bundleEntry6.setFullUrl(conditionDiagnosis.getIdElement().getValue()); + bundleEntry6.setResource(conditionDiagnosis); + + bundleEnteries.add(bundleEntry6); + } + + for (AllergyIntolerance allergy : allergyList) { + BundleEntryComponent bundleEntry7 = new BundleEntryComponent(); + bundleEntry7.setFullUrl(allergy.getIdElement().getValue()); + bundleEntry7.setResource(allergy); + + bundleEnteries.add(bundleEntry7); + } + + if(familyMemberHistory.getId() != null) { + BundleEntryComponent bundleEntry8 = new BundleEntryComponent(); + bundleEntry8.setFullUrl(familyMemberHistory.getIdElement().getValue()); + bundleEntry8.setResource(familyMemberHistory); + bundleEnteries.add(bundleEntry8); + } + + for(MedicationStatement medStatement: medicationStatement) { + BundleEntryComponent bundleEntry9 = new BundleEntryComponent(); + bundleEntry9.setFullUrl(medStatement.getIdElement().getValue()); + bundleEntry9.setResource(medStatement); + + bundleEnteries.add(bundleEntry9); + } + + for (DiagnosticReport dr : diagnosticResourceList) { + BundleEntryComponent entryDR = new BundleEntryComponent(); + entryDR.setFullUrl(dr.getIdElement().getValue()); + entryDR.setResource(dr); + + bundleEnteries.add(entryDR); + } + + + if (observationMap != null && !observationMap.isEmpty()) { + for (Map.Entry> e : observationMap.entrySet()) { + List obsList = e.getValue(); + if (obsList == null) + continue; + + for (Observation obs : obsList) { + BundleEntryComponent entryObs = new BundleEntryComponent(); + entryObs.setFullUrl(obs.getIdElement().getValue()); + entryObs.setResource(obs); + bundleEnteries.add(entryObs); + } + } + } + + dischargeSummaryBundle.setEntry(bundleEnteries); + + FhirContext ctx = FhirContext.forR4(); + IParser parser = ctx.newJsonParser(); + serializeBundle = parser.encodeResourceToString(dischargeSummaryBundle); + + } catch (Exception e) { + throw new FHIRException("Discharge summary FHIR Resource Bundle failed with error - " + e); + } + + return serializeBundle; + + } + + @Override + + public Composition populateDischargeSummaryComposition( + ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p, + Practitioner practitioner, + Organization organization, + Patient patient, + Encounter encounter, + List chiefComplaints, + List physicalExam, + List allergyList, + FamilyMemberHistory familyMemberHistory, + List pastMedicalHistoryConditions, + List medicationRequests, + List procedures + ) { + Composition composition = new Composition(); + composition.setId("Composition/" + commonService.getUUID()); + + Meta meta = new Meta(); + meta.setVersionId("1"); + meta.addProfile("https://nrces.in/ndhm/fhir/r4/StructureDefinition/DischargeSummaryRecord"); + composition.setMeta(meta); + + composition.setStatus(CompositionStatus.FINAL); + + composition.setType(new CodeableConcept() + .addCoding(new Coding("http://snomed.info/sct", "373942005", "Discharge summary"))); + + composition.setSubject(new Reference("Patient/"+ p.getBeneficiaryId().toString())); + + composition.setDate(new Date()); + composition.addAuthor(new Reference(practitioner.getIdElement().getValue())); + composition.setCustodian(new Reference(organization.getIdElement().getValue())); + + composition.setTitle("Discharge Summary"); + + List sectionList = new ArrayList<>(); + + // 1) Chief complaints (Condition) – SNOMED 422843007 + if (chiefComplaints != null) { + for (Condition condition : chiefComplaints) { + SectionComponent s = new SectionComponent(); + s.setTitle("Chief complaints"); + s.setCode(new CodeableConcept().addCoding( + new Coding("http://snomed.info/sct", "422843007", "Chief complaint section"))); + s.addEntry(new Reference(condition.getIdElement().getValue())); + sectionList.add(s); + } + } + + // 2) Physical examination (Observation) – SNOMED 425044008 + if (physicalExam != null) { + for (Condition obs : physicalExam) { + SectionComponent s = new SectionComponent(); + s.setTitle("Physical examination"); + s.setCode(new CodeableConcept().addCoding( + new Coding("http://snomed.info/sct", "425044008", "Physical exam section"))); + s.addEntry(new Reference(obs.getIdElement().getValue())); + sectionList.add(s); + } + } + + // 3) Allergies (AllergyIntolerance) – SNOMED 722446000 + if (allergyList != null) { + for (AllergyIntolerance allergy : allergyList) { + SectionComponent s = new SectionComponent(); + s.setTitle("Allergies"); + s.setCode(new CodeableConcept().addCoding( + new Coding("http://snomed.info/sct", "722446000", "Allergy record"))); + s.addEntry(new Reference(allergy.getIdElement().getValue())); + sectionList.add(s); + } + } + + // 4) Past medical history (Condition|Procedure) – SNOMED 1003642006 + boolean hasPMH = (pastMedicalHistoryConditions != null && !pastMedicalHistoryConditions.isEmpty()); + if (hasPMH) { + SectionComponent s = new SectionComponent(); + s.setTitle("Past Medical History"); + s.setCode(new CodeableConcept().addCoding( + new Coding("http://snomed.info/sct", "1003642006", "Past medical history section"))); + if (pastMedicalHistoryConditions != null) { + for (MedicationStatement c : pastMedicalHistoryConditions) { + s.addEntry(new Reference(c.getIdElement().getValue())); + } + } + sectionList.add(s); + } + + // 5) Family history (FamilyMemberHistory) – SNOMED 422432008 + if (familyMemberHistory != null && familyMemberHistory.getId() != null) { + SectionComponent s = new SectionComponent(); + s.setTitle("Family history"); + s.setCode(new CodeableConcept().addCoding( + new Coding("http://snomed.info/sct", "422432008", "Family history section"))); + s.addEntry(new Reference(familyMemberHistory.getIdElement().getValue())); + sectionList.add(s); + } + + // 6) Investigations (Diagnostic studies report) – SNOMED 721981007 (Lab + Imaging) + boolean hasInvestigations = (procedures != null && !procedures.isEmpty()); + if (hasInvestigations) { + SectionComponent s = new SectionComponent(); + s.setTitle("Investigations"); + s.setCode(new CodeableConcept().addCoding( + new Coding("http://snomed.info/sct", "721981007", "Diagnostic studies report"))); + if (procedures != null) { + for (DiagnosticReport dr : procedures) { + s.addEntry(new Reference(dr.getIdElement().getValue())); + } + } + sectionList.add(s); + } + + // 7) Medications (MedicationRequest) – SNOMED 1003606003 + if (medicationRequests != null) { + for (MedicationRequest mr : medicationRequests) { + SectionComponent s = new SectionComponent(); + s.setTitle("Medications"); + s.setCode(new CodeableConcept().addCoding( + new Coding("http://snomed.info/sct", "1003606003", "Medication history section"))); + s.addEntry(new Reference(mr.getIdElement().getValue())); + sectionList.add(s); + } + } + + + composition.setSection(sectionList); + return composition; + } + + private AMRIT_ResourceMongo createDischargeSummaryBundleMongo(PatientEligibleForResourceCreation p, + String dischargeRecordBundle) { + AMRIT_ResourceMongo aMRIT_ResourceMongo = new AMRIT_ResourceMongo(); + aMRIT_ResourceMongo.setBeneficiaryID(p.getBeneficiaryId()); + aMRIT_ResourceMongo.setBeneficiaryRegID(p.getBeneficiaryRegID()); + // get ABHA from table "m_benhealthmapping" for this visit(visit code) + if (p.getVisitCode() != null) { + aMRIT_ResourceMongo.setVisitCode(p.getVisitCode()); + List objArrResultSet = benHealthIDMappingRepo.getLinkedHealthIDForVisit(p.getVisitCode()); + if (objArrResultSet != null && objArrResultSet.size() > 0) { + aMRIT_ResourceMongo.setNationalHealthID(objArrResultSet.get(0)); + } + } + + aMRIT_ResourceMongo.setResourceJson(dischargeRecordBundle); + aMRIT_ResourceMongo.setResourceType("DischargeSummary"); + + return aMRIT_ResourceMongo; + } + +} diff --git a/src/main/java/com/wipro/fhir/service/bundle_creation/ImmunizationRecordResourceBundle.java b/src/main/java/com/wipro/fhir/service/bundle_creation/ImmunizationRecordResourceBundle.java new file mode 100644 index 0000000..5174c2a --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/bundle_creation/ImmunizationRecordResourceBundle.java @@ -0,0 +1,26 @@ +package com.wipro.fhir.service.bundle_creation; + +import java.util.List; + +import org.hl7.fhir.r4.model.Composition; +import org.hl7.fhir.r4.model.Immunization; +import org.hl7.fhir.r4.model.Organization; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.Practitioner; + +import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.utils.exception.FHIRException; + +public interface ImmunizationRecordResourceBundle { + + Composition populateImmunizationComposition(Patient patient, Practitioner practitioner, Organization organization, + List immunizations); + + String populateImmunizationResourceBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException; + + int processImmunizationRecordBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException; + +} diff --git a/src/main/java/com/wipro/fhir/service/bundle_creation/ImmunizationRecordResourceBundleImpl.java b/src/main/java/com/wipro/fhir/service/bundle_creation/ImmunizationRecordResourceBundleImpl.java new file mode 100644 index 0000000..95c8849 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/bundle_creation/ImmunizationRecordResourceBundleImpl.java @@ -0,0 +1,236 @@ +package com.wipro.fhir.service.bundle_creation; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; + +import org.hl7.fhir.r4.model.Bundle; +import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent; +import org.hl7.fhir.r4.model.CodeableConcept; +import org.hl7.fhir.r4.model.Coding; +import org.hl7.fhir.r4.model.Composition; +import org.hl7.fhir.r4.model.Composition.SectionComponent; +import org.hl7.fhir.r4.model.Identifier; +import org.hl7.fhir.r4.model.Immunization; +import org.hl7.fhir.r4.model.Meta; +import org.hl7.fhir.r4.model.Organization; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.Practitioner; +import org.hl7.fhir.r4.model.Reference; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import com.wipro.fhir.data.mongo.amrit_resource.AMRIT_ResourceMongo; +import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; +import com.wipro.fhir.service.common.CommonService; +import com.wipro.fhir.service.resource_model.ImmunizationResource; +import com.wipro.fhir.service.resource_model.OrganizationResource; +import com.wipro.fhir.service.resource_model.PatientResource; +import com.wipro.fhir.service.resource_model.PractitionerResource; +import com.wipro.fhir.utils.exception.FHIRException; + +import ca.uhn.fhir.context.FhirContext; +import ca.uhn.fhir.parser.IParser; + +@Service +public class ImmunizationRecordResourceBundleImpl implements ImmunizationRecordResourceBundle { + + @Autowired + private PractitionerResource practitionerResource; + + @Autowired + private OrganizationResource organizationResource; + + @Autowired + private PatientResource patientResource; + + @Autowired + private CommonService commonService; + + @Autowired + private ImmunizationResource immunizationResource; + + @Autowired + private BenHealthIDMappingRepo benHealthIDMappingRepo; + + @Value("${hipSystemUrl}") + private String systemUrl; + + @Override + public int processImmunizationRecordBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException { + int i = 0; + // call method to generate Prescription resource + String immunizationBundle = populateImmunizationResourceBundle(resourceRequestHandler, p); + + // call private method to create mongo object with resource data + AMRIT_ResourceMongo aMRIT_ResourceMongo = createImmunizationBundleMongo(p, + immunizationBundle); + // if resource data is not null, save to mongo + if (aMRIT_ResourceMongo != null) { + i = commonService.saveResourceToMongo(aMRIT_ResourceMongo); + + } else + throw new FHIRException("Issue in processing the bundle"); + + return i; + + } + + @Override + public String populateImmunizationResourceBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException { + + Bundle diagReportBundle = new Bundle(); + String serializeBundle = null; + + try { + String id = resourceRequestHandler.getVisitCode() + ":" + commonService.getUUID(); + diagReportBundle.setId(id); + diagReportBundle.setType(Bundle.BundleType.DOCUMENT); + diagReportBundle.setTimestamp(new Timestamp(System.currentTimeMillis())); + + Meta meta = new Meta(); + meta.setVersionId("1"); + meta.setLastUpdated(new Timestamp(System.currentTimeMillis())); + meta.addProfile("https://nrces.in/ndhm/fhir/r4/StructureDefinition/DocumentBundle"); + meta.addSecurity(new Coding("http://terminology.hl7.org/CodeSystem/v3-Confidentiality", "R", "restricted")); + diagReportBundle.setMeta(meta); + + Identifier identifier = new Identifier(); + identifier.setSystem(systemUrl); + identifier.setValue(diagReportBundle.getId()); + diagReportBundle.setIdentifier(identifier); + + // practitioner resource + Practitioner practitioner = practitionerResource.getPractitionerResource(resourceRequestHandler); + + // Organization resource + Organization organization = organizationResource.getOrganizationResource(resourceRequestHandler); + + // Patient resource + Patient patient = patientResource.getPatientResource(resourceRequestHandler); + + List immunizationList = immunizationResource.getImmunizations(patient, resourceRequestHandler); + + Composition composition = populateImmunizationComposition(patient, practitioner, organization, immunizationList); + + List bundleEntries = new ArrayList<>(); + + BundleEntryComponent entryComposition = new BundleEntryComponent(); + entryComposition.setFullUrl(composition.getIdElement().getValue()); + entryComposition.setResource(composition); + bundleEntries.add(entryComposition); + + BundleEntryComponent entryPractitioner = new BundleEntryComponent(); + entryPractitioner.setFullUrl(practitioner.getIdElement().getValue()); + entryPractitioner.setResource(practitioner); + bundleEntries.add(entryPractitioner); + + BundleEntryComponent entryOrganization = new BundleEntryComponent(); + entryOrganization.setFullUrl(organization.getIdElement().getValue()); + entryOrganization.setResource(organization); + bundleEntries.add(entryOrganization); + + BundleEntryComponent entryPatient = new BundleEntryComponent(); + entryPatient.setFullUrl(patient.getIdElement().getValue()); + entryPatient.setResource(patient); + bundleEntries.add(entryPatient); + + + for (Immunization imm : immunizationList) { + Bundle.BundleEntryComponent beImm = new Bundle.BundleEntryComponent(); + beImm.setFullUrl(imm.getIdElement().getValue()); + beImm.setResource(imm); + bundleEntries.add(beImm); + } + + diagReportBundle.setEntry(bundleEntries); + + FhirContext ctx = FhirContext.forR4(); + IParser parser = ctx.newJsonParser(); + serializeBundle = parser.encodeResourceToString(diagReportBundle); + + + } catch (Exception e) { + throw new FHIRException("Immunization FHIR Resource Bundle failed with error - " + e); + } + + return serializeBundle; + } + + @Override + +public Composition populateImmunizationComposition(Patient patient, + Practitioner practitioner, + Organization organization, + List immunizations) { + + Composition composition = new Composition(); + composition.setId("Composition/" + commonService.getUUID()); + + // NRCeS ImmunizationRecord profile on Composition + Meta meta = new Meta(); + meta.setVersionId("1"); + meta.addProfile("https://nrces.in/ndhm/fhir/r4/StructureDefinition/ImmunizationRecord"); + composition.setMeta(meta); + + composition.setStatus(Composition.CompositionStatus.FINAL); + + composition.setType(new CodeableConcept() + .addCoding(new Coding("http://snomed.info/sct", "41000179103", "Immunization record")) + .setText("Immunization Record")); + + composition.setSubject(new Reference(patient.getIdElement().getValue())); + composition.setDate(new java.util.Date()); + composition.addAuthor(new Reference(practitioner.getIdElement().getValue())); + composition.setCustodian(new Reference(organization.getIdElement().getValue())); + composition.setTitle("Immunization Record"); + + if (organization != null) { + composition.setCustodian(new Reference(organization.getIdElement().getValue())); + } + + // --- Sections --- + SectionComponent immunizationSection = new SectionComponent(); + immunizationSection.setTitle("Administered Immunizations"); + immunizationSection.setCode(new CodeableConcept().addCoding( + new Coding("http://snomed.info/sct", "41000179103", "Immunization record") + )); + + for (Immunization imm : immunizations) { + Reference ref = new Reference(imm.getIdElement().getValue()); + ref.setType("Immunization"); + immunizationSection.addEntry(ref); + } + + composition.addSection(immunizationSection); + + return composition; +} + + private AMRIT_ResourceMongo createImmunizationBundleMongo(PatientEligibleForResourceCreation p, + String immunizationBundle) { + AMRIT_ResourceMongo aMRIT_ResourceMongo = new AMRIT_ResourceMongo(); + aMRIT_ResourceMongo.setBeneficiaryID(p.getBeneficiaryId()); + aMRIT_ResourceMongo.setBeneficiaryRegID(p.getBeneficiaryRegID()); + // get ABHA from table "m_benhealthmapping" for this visit(visit code) + if (p.getVisitCode() != null) { + aMRIT_ResourceMongo.setVisitCode(p.getVisitCode()); + List objArrResultSet = benHealthIDMappingRepo.getLinkedHealthIDForVisit(p.getVisitCode()); + if (objArrResultSet != null && objArrResultSet.size() > 0) { + aMRIT_ResourceMongo.setNationalHealthID(objArrResultSet.get(0)); + } + } + + aMRIT_ResourceMongo.setResourceJson(immunizationBundle); + aMRIT_ResourceMongo.setResourceType("ImmunizationRecord"); + + return aMRIT_ResourceMongo; + } + + +} diff --git a/src/main/java/com/wipro/fhir/service/bundle_creation/OPConsultResourceBundle.java b/src/main/java/com/wipro/fhir/service/bundle_creation/OPConsultResourceBundle.java new file mode 100644 index 0000000..10a3ff1 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/bundle_creation/OPConsultResourceBundle.java @@ -0,0 +1,31 @@ +package com.wipro.fhir.service.bundle_creation; + +import java.util.List; + +import org.hl7.fhir.r4.model.AllergyIntolerance; +import org.hl7.fhir.r4.model.Composition; +import org.hl7.fhir.r4.model.Condition; +import org.hl7.fhir.r4.model.FamilyMemberHistory; +import org.hl7.fhir.r4.model.MedicationStatement; +import org.hl7.fhir.r4.model.Organization; +import org.hl7.fhir.r4.model.Practitioner; + +import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.utils.exception.FHIRException; + +public interface OPConsultResourceBundle { + + Composition populateOpConsultComposition(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p, Practitioner practitioner, Organization organization, + List conditionListChiefComplaints, List conditionListDiagnosis, + List allergyList, FamilyMemberHistory familyMemberHistory, + List medicationStatement); + + int processOpConsultRecordBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException; + + String populateOPConsultRecordResourceBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException; + +} diff --git a/src/main/java/com/wipro/fhir/service/bundle_creation/OPConsultResourceBundleImpl.java b/src/main/java/com/wipro/fhir/service/bundle_creation/OPConsultResourceBundleImpl.java new file mode 100644 index 0000000..08322a1 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/bundle_creation/OPConsultResourceBundleImpl.java @@ -0,0 +1,340 @@ +package com.wipro.fhir.service.bundle_creation; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.hl7.fhir.r4.model.AllergyIntolerance; +import org.hl7.fhir.r4.model.Bundle; +import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent; +import org.hl7.fhir.r4.model.Bundle.BundleType; +import org.hl7.fhir.r4.model.CodeableConcept; +import org.hl7.fhir.r4.model.Coding; +import org.hl7.fhir.r4.model.Composition; +import org.hl7.fhir.r4.model.Composition.CompositionStatus; +import org.hl7.fhir.r4.model.Composition.SectionComponent; +import org.hl7.fhir.r4.model.Condition; +import org.hl7.fhir.r4.model.Encounter; +import org.hl7.fhir.r4.model.FamilyMemberHistory; +import org.hl7.fhir.r4.model.Identifier; +import org.hl7.fhir.r4.model.MedicationStatement; +import org.hl7.fhir.r4.model.Meta; +import org.hl7.fhir.r4.model.Organization; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.Practitioner; +import org.hl7.fhir.r4.model.Reference; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import com.wipro.fhir.data.mongo.amrit_resource.AMRIT_ResourceMongo; +import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; +import com.wipro.fhir.service.common.CommonService; +import com.wipro.fhir.service.resource_model.AllergyIntoleranceResource; +import com.wipro.fhir.service.resource_model.ConditionResource; +import com.wipro.fhir.service.resource_model.EncounterResource; +import com.wipro.fhir.service.resource_model.FamilyMemberHistoryResource; +import com.wipro.fhir.service.resource_model.MedicalHistoryResource; +import com.wipro.fhir.service.resource_model.OrganizationResource; +import com.wipro.fhir.service.resource_model.PatientResource; +import com.wipro.fhir.service.resource_model.PractitionerResource; +import com.wipro.fhir.utils.exception.FHIRException; + +import ca.uhn.fhir.context.FhirContext; +import ca.uhn.fhir.parser.IParser; + +@Service +public class OPConsultResourceBundleImpl implements OPConsultResourceBundle { + + @Autowired + private CommonService commonService; + + @Autowired + private PractitionerResource practitionerResource; + + @Autowired + private OrganizationResource organizationResource; + + @Autowired + private PatientResource patientResource; + + @Autowired + private ConditionResource conditionResource; + + @Autowired + private EncounterResource encounterResource; + + @Autowired + private AllergyIntoleranceResource allergyIntoleranceResource; + + @Autowired + private FamilyMemberHistoryResource familyMemberHistoryResource; + + @Autowired + private MedicalHistoryResource medicalHistoryResource; + + @Autowired + private BenHealthIDMappingRepo benHealthIDMappingRepo; + + @Value("${hipSystemUrl}") + private String systemUrl; + + @Override + public int processOpConsultRecordBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException { + int i = 0; + // call method to generate Prescription resource + String opConsultBundle = populateOPConsultRecordResourceBundle(resourceRequestHandler, p); + + // call private method to create mongo object with resource data + AMRIT_ResourceMongo aMRIT_ResourceMongo = createOpConsultBundleMongo(p, + opConsultBundle); + // if resource data is not null, save to mongo + if (aMRIT_ResourceMongo != null) { + i = commonService.saveResourceToMongo(aMRIT_ResourceMongo); + + } else + throw new FHIRException("Issue in processing the bundle"); + + return i; + + } + + + @Override + public String populateOPConsultRecordResourceBundle(ResourceRequestHandler resourceRequestHandler, PatientEligibleForResourceCreation p) throws FHIRException { + + Bundle opConsultBundle = new Bundle(); + String serializeBundle = null; + + try { + String id = resourceRequestHandler.getVisitCode()+ ":" + commonService.getUUID(); + opConsultBundle.setId(id); + opConsultBundle.setType(BundleType.DOCUMENT); + opConsultBundle.setTimestamp(new Timestamp(System.currentTimeMillis())); + + Meta meta = new Meta(); + meta.setVersionId("1"); + meta.setLastUpdated(new Timestamp(System.currentTimeMillis())); + meta.addProfile("https://nrces.in/ndhm/fhir/r4/StructureDefinition/DocumentBundle"); + meta.addSecurity(new Coding("http://terminology.hl7.org/CodeSystem/v3-Confidentiality", "restricted", "R")); + opConsultBundle.setMeta(meta); + + Identifier identifier = new Identifier(); + identifier.setSystem(systemUrl); + identifier.setValue(opConsultBundle.getId()); + opConsultBundle.setIdentifier(identifier); + + // practitioner + Practitioner practitioner = practitionerResource.getPractitionerResource(resourceRequestHandler); + // organization + Organization organization = organizationResource.getOrganizationResource(resourceRequestHandler); + // Patient Resource + Patient patient = patientResource.getPatientResource(resourceRequestHandler); + + // chiefcomplaints + List conditionListChiefComplaints = conditionResource.getCondition(patient, resourceRequestHandler, + "chiefcomplaints"); + + // diagnosis + List conditionListDiagnosis = conditionResource.getCondition(patient, resourceRequestHandler, + "diagnosis"); + + Encounter encounter = encounterResource.getEncounterResource(patient, resourceRequestHandler, + conditionListChiefComplaints, conditionListDiagnosis); + + // AllergyIntolerance resource + List allergyList = allergyIntoleranceResource.getAllergyIntolerance(patient, encounter, + resourceRequestHandler, practitioner); + + // FamilyMemberHistory resource + FamilyMemberHistory familyMemberHistory = familyMemberHistoryResource.getFamilyMemberHistory(patient, + resourceRequestHandler); + + List medicationStatement = medicalHistoryResource.getMedicalHistory(patient, resourceRequestHandler); + + // composition + Composition composition = populateOpConsultComposition(resourceRequestHandler, p, practitioner, organization, conditionListChiefComplaints, + conditionListDiagnosis, allergyList,familyMemberHistory, medicationStatement); + + List bundleEnteries = new ArrayList<>(); + + BundleEntryComponent bundleEntry1 = new BundleEntryComponent(); + bundleEntry1.setFullUrl(composition.getIdElement().getValue()); + bundleEntry1.setResource(composition); + + BundleEntryComponent bundleEntry2 = new BundleEntryComponent(); + bundleEntry2.setFullUrl(practitioner.getIdElement().getValue()); + bundleEntry2.setResource(practitioner); + + BundleEntryComponent bundleEntry3 = new BundleEntryComponent(); + bundleEntry3.setFullUrl(organization.getIdElement().getValue()); + bundleEntry3.setResource(organization); + + BundleEntryComponent bundleEntry4 = new BundleEntryComponent(); + bundleEntry4.setFullUrl(patient.getIdElement().getValue()); + bundleEntry4.setResource(patient); + + bundleEnteries.add(bundleEntry1); + bundleEnteries.add(bundleEntry2); + bundleEnteries.add(bundleEntry3); + bundleEnteries.add(bundleEntry4); + + for (Condition conditionCheifComplaints : conditionListChiefComplaints) { + BundleEntryComponent bundleEntry5 = new BundleEntryComponent(); + bundleEntry5.setFullUrl(conditionCheifComplaints.getIdElement().getValue()); + bundleEntry5.setResource(conditionCheifComplaints); + + bundleEnteries.add(bundleEntry5); + } + + for (Condition conditionDiagnosis : conditionListDiagnosis) { + BundleEntryComponent bundleEntry6 = new BundleEntryComponent(); + bundleEntry6.setFullUrl(conditionDiagnosis.getIdElement().getValue()); + bundleEntry6.setResource(conditionDiagnosis); + + bundleEnteries.add(bundleEntry6); + } + + for (AllergyIntolerance allergy : allergyList) { + BundleEntryComponent bundleEntry7 = new BundleEntryComponent(); + bundleEntry7.setFullUrl(allergy.getIdElement().getValue()); + bundleEntry7.setResource(allergy); + + bundleEnteries.add(bundleEntry7); + } + + if(familyMemberHistory.getId() != null) { + BundleEntryComponent bundleEntry8 = new BundleEntryComponent(); + bundleEntry8.setFullUrl(familyMemberHistory.getIdElement().getValue()); + bundleEntry8.setResource(familyMemberHistory); + bundleEnteries.add(bundleEntry8); + } + + for(MedicationStatement medStatement: medicationStatement) { + BundleEntryComponent bundleEntry9 = new BundleEntryComponent(); + bundleEntry9.setFullUrl(medStatement.getIdElement().getValue()); + bundleEntry9.setResource(medStatement); + + bundleEnteries.add(bundleEntry9); + } + + opConsultBundle.setEntry(bundleEnteries); + + FhirContext ctx = FhirContext.forR4(); + IParser parser = ctx.newJsonParser(); + serializeBundle = parser.encodeResourceToString(opConsultBundle); + + + } catch (Exception e) { + throw new FHIRException("Op Consult FHIR Resource Bundle failed with error - " + e); + } + + return serializeBundle; + + } + + @Override + public Composition populateOpConsultComposition(ResourceRequestHandler resourceRequestHandler,PatientEligibleForResourceCreation p, + Practitioner practitioner, Organization organization, List conditionListChiefComplaints, List conditionListDiagnosis, + List allergyList, FamilyMemberHistory familyMemberHistory, List medicationStatement) { + + Composition composition = new Composition(); + composition.setId("Composition/" + commonService.getUUID()); + + Meta meta = new Meta(); + meta.setVersionId("1"); + meta.addProfile("https://nrces.in/ndhm/fhir/r4/StructureDefinition/OPConsultRecord"); + composition.setMeta(meta); + + composition.setStatus(CompositionStatus.FINAL); + composition + .setType(new CodeableConcept(new Coding("http://snomed.info/sct", "371530004", "Clinical consultation report`"))); + + composition.setSubject(new Reference("Patient/"+ p.getBeneficiaryId().toString())); + composition.setDate(new Date()); + composition.addAuthor(new Reference(practitioner.getIdElement().getValue())); + composition.setCustodian(new Reference(organization.getIdElement().getValue())); + composition.setTitle("Consultation Report"); + + List sectionList = new ArrayList(); + + for(Condition condition: conditionListChiefComplaints) { + SectionComponent section1 = new SectionComponent(); + section1.setTitle("Chief complaints"); + section1.setCode(new CodeableConcept(new Coding("http://snomed.info/sct", "422843007", "Chief complaint section"))) + .addEntry(new Reference().setReference(condition.getIdElement().getValue())); + + sectionList.add(section1); + } + + for(Condition diagnosis: conditionListDiagnosis) { + SectionComponent section2 = new SectionComponent(); + section2.setTitle("Physical diagnosis"); + section2.setCode(new CodeableConcept(new Coding("http://snomed.info/sct", "425044008", "Physical exam section"))) + .addEntry(new Reference().setReference(diagnosis.getIdElement().getValue())); + + sectionList.add(section2); + } + + for(AllergyIntolerance allergy: allergyList) { + SectionComponent section3 = new SectionComponent(); + section3.setTitle("Allergies"); + section3.setCode(new CodeableConcept(new Coding("http://snomed.info/sct", "722446000", "Allergy record"))) + .addEntry(new Reference().setReference(allergy.getIdElement().getValue())); + + sectionList.add(section3); + } + + for(MedicationStatement medStatement: medicationStatement) { + SectionComponent section4 = new SectionComponent(); + section4.setTitle("Medical History"); + section4.setCode( + new CodeableConcept(new Coding("http://snomed.info/sct", "371529009", "History and physical report"))) + .addEntry(new Reference().setReference(medStatement.getIdElement().getValue())); + + sectionList.add(section4); + } + + + if(familyMemberHistory.getId() != null) { + SectionComponent section5 = new SectionComponent(); + section5.setTitle("Family history"); + section5.setCode( + new CodeableConcept(new Coding("http://snomed.info/sct", "422432008", "Family history section"))) + .addEntry(new Reference().setReference(familyMemberHistory.getIdElement().getValue())); + + sectionList.add(section5); + } + + composition.setSection(sectionList); + + return composition; + + } + + private AMRIT_ResourceMongo createOpConsultBundleMongo(PatientEligibleForResourceCreation p, + String opConsultBundle) { + AMRIT_ResourceMongo aMRIT_ResourceMongo = new AMRIT_ResourceMongo(); + aMRIT_ResourceMongo.setBeneficiaryID(p.getBeneficiaryId()); + aMRIT_ResourceMongo.setBeneficiaryRegID(p.getBeneficiaryRegID()); + // get ABHA from table "m_benhealthmapping" for this visit(visit code) + if (p.getVisitCode() != null) { + aMRIT_ResourceMongo.setVisitCode(p.getVisitCode()); + List objArrResultSet = benHealthIDMappingRepo.getLinkedHealthIDForVisit(p.getVisitCode()); + if (objArrResultSet != null && objArrResultSet.size() > 0) { + aMRIT_ResourceMongo.setNationalHealthID(objArrResultSet.get(0)); + } + } + + aMRIT_ResourceMongo.setResourceJson(opConsultBundle); + aMRIT_ResourceMongo.setResourceType("OPConsultation"); + + return aMRIT_ResourceMongo; + } + + +} diff --git a/src/main/java/com/wipro/fhir/service/bundle_creation/PrescriptionResourceBundle.java b/src/main/java/com/wipro/fhir/service/bundle_creation/PrescriptionResourceBundle.java new file mode 100644 index 0000000..c68fcc7 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/bundle_creation/PrescriptionResourceBundle.java @@ -0,0 +1,27 @@ +package com.wipro.fhir.service.bundle_creation; + +import java.util.List; + +import org.hl7.fhir.r4.model.Composition; +import org.hl7.fhir.r4.model.MedicationRequest; +import org.hl7.fhir.r4.model.Organization; +import org.hl7.fhir.r4.model.Practitioner; + +import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.utils.exception.FHIRException; + +public interface PrescriptionResourceBundle { + + String populatePrescriptionResourceBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException; + + Composition populatePrescriptionComposition(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p, List medicationRequest, Practitioner practitioner, + Organization organization); + + int processPrescriptionRecordBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException; + + +} diff --git a/src/main/java/com/wipro/fhir/service/bundle_creation/PrescriptionResourceBundleImpl.java b/src/main/java/com/wipro/fhir/service/bundle_creation/PrescriptionResourceBundleImpl.java new file mode 100644 index 0000000..b82cfd7 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/bundle_creation/PrescriptionResourceBundleImpl.java @@ -0,0 +1,228 @@ +package com.wipro.fhir.service.bundle_creation; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.hl7.fhir.r4.model.Bundle; +import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent; +import org.hl7.fhir.r4.model.Bundle.BundleType; +import org.hl7.fhir.r4.model.CodeableConcept; +import org.hl7.fhir.r4.model.Coding; +import org.hl7.fhir.r4.model.Composition; +import org.hl7.fhir.r4.model.Composition.CompositionStatus; +import org.hl7.fhir.r4.model.Composition.SectionComponent; +import org.hl7.fhir.r4.model.Identifier; +import org.hl7.fhir.r4.model.MedicationRequest; +import org.hl7.fhir.r4.model.Meta; +import org.hl7.fhir.r4.model.Organization; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.Practitioner; +import org.hl7.fhir.r4.model.Reference; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import com.wipro.fhir.data.mongo.amrit_resource.AMRIT_ResourceMongo; +import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; +import com.wipro.fhir.service.common.CommonService; +import com.wipro.fhir.service.resource_model.MedicationRequestResource; +import com.wipro.fhir.service.resource_model.OrganizationResource; +import com.wipro.fhir.service.resource_model.PatientResource; +import com.wipro.fhir.service.resource_model.PractitionerResource; +import com.wipro.fhir.utils.exception.FHIRException; + +import ca.uhn.fhir.context.FhirContext; +import ca.uhn.fhir.parser.IParser; + +@Service +public class PrescriptionResourceBundleImpl implements PrescriptionResourceBundle { + + @Autowired + private CommonService commonService; + @Autowired + private PractitionerResource practitionerResource; + @Autowired + private PatientResource patientResource; + @Autowired + private MedicationRequestResource medicationRequestResource; + @Autowired + private OrganizationResource organizationResource; + @Autowired + private BenHealthIDMappingRepo benHealthIDMappingRepo; + + @Value("${hipSystemUrl}") + private String systemUrl; + + Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + + @Override + public int processPrescriptionRecordBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException { + int i = 0; + // call method to generate Prescription resource + String prescriptionBundle = populatePrescriptionResourceBundle(resourceRequestHandler, p); + + // call private method to create mongo object with resource data + AMRIT_ResourceMongo aMRIT_ResourceMongo = createPrescriptionBundleMongo(p, + prescriptionBundle); + // if resource data is not null, save to mongo + if (aMRIT_ResourceMongo != null) { + i = commonService.saveResourceToMongo(aMRIT_ResourceMongo); + + } else + throw new FHIRException("Issue in processing the bundle"); + + return i; + + } + + @Override + public String populatePrescriptionResourceBundle(ResourceRequestHandler resourceRequestHandler, PatientEligibleForResourceCreation p) throws FHIRException { + + Bundle prescriptionBundle = new Bundle(); + String serializeBundle = null; + + try { + String id = resourceRequestHandler.getVisitCode()+ ":" + commonService.getUUID(); + prescriptionBundle.setId(id); + prescriptionBundle.setType(BundleType.DOCUMENT); + prescriptionBundle.setTimestamp(new Timestamp(System.currentTimeMillis())); + + Meta meta = new Meta(); + meta.setVersionId("1"); + meta.setLastUpdated(new Timestamp(System.currentTimeMillis())); + meta.addProfile("https://nrces.in/ndhm/fhir/r4/StructureDefinition/DocumentBundle"); + meta.addSecurity(new Coding("http://terminology.hl7.org/CodeSystem/v3-Confidentiality", "restricted", "R")); + prescriptionBundle.setMeta(meta); + + Identifier identifier = new Identifier(); + identifier.setSystem(systemUrl); + identifier.setValue(prescriptionBundle.getId()); + prescriptionBundle.setIdentifier(identifier); + + // practitioner + Practitioner practitioner = practitionerResource.getPractitionerResource(resourceRequestHandler); + // organization + Organization organization = organizationResource.getOrganizationResource(resourceRequestHandler); + // 1. Patient Resource + Patient patient = patientResource.getPatientResource(resourceRequestHandler); + // Medication request + List medicationRequest = medicationRequestResource.getMedicationRequest(patient, + resourceRequestHandler, practitioner, null); + // composition + Composition composition = populatePrescriptionComposition(resourceRequestHandler, p, medicationRequest, practitioner, organization); + + List bundleEnteries = new ArrayList<>(); + + BundleEntryComponent bundleEntry1 = new BundleEntryComponent(); + bundleEntry1.setFullUrl(composition.getIdElement().getValue()); + bundleEntry1.setResource(composition); + + BundleEntryComponent bundleEntry2 = new BundleEntryComponent(); + bundleEntry2.setFullUrl(practitioner.getIdElement().getValue()); + bundleEntry2.setResource(practitioner); + + BundleEntryComponent bundleEntry3 = new BundleEntryComponent(); + bundleEntry3.setFullUrl(organization.getIdElement().getValue()); + bundleEntry3.setResource(organization); + + BundleEntryComponent bundleEntry4 = new BundleEntryComponent(); + bundleEntry4.setFullUrl(patient.getIdElement().getValue()); + bundleEntry4.setResource(patient); + + bundleEnteries.add(bundleEntry1); + bundleEnteries.add(bundleEntry2); + bundleEnteries.add(bundleEntry3); + bundleEnteries.add(bundleEntry4); + + for (MedicationRequest medRequest : medicationRequest) { + BundleEntryComponent bundleEntry5 = new BundleEntryComponent(); + bundleEntry5.setFullUrl(medRequest.getIdElement().getValue()); + bundleEntry5.setResource(medRequest); + + bundleEnteries.add(bundleEntry5); + } + + prescriptionBundle.setEntry(bundleEnteries); + + FhirContext ctx = FhirContext.forR4(); + IParser parser = ctx.newJsonParser(); + serializeBundle = parser.encodeResourceToString(prescriptionBundle); + + + } catch (Exception e) { + throw new FHIRException("Prescription FHIR Resource Bundle failed with error - " + e); + } + + return serializeBundle; + + } + + @Override + public Composition populatePrescriptionComposition(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p, List medicationRequest, Practitioner practitioner, Organization organization) { + + Composition composition = new Composition(); + composition.setId("Composition/" + commonService.getUUID()); + + Meta meta = new Meta(); + meta.setVersionId("1"); + meta.addProfile("https://nrces.in/ndhm/fhir/r4/StructureDefinition/PrescriptionRecord"); + composition.setMeta(meta); + + composition.setStatus(CompositionStatus.FINAL); + composition + .setType(new CodeableConcept(new Coding("http://snomed.info/sct", "440545006", "Prescription record"))); + + composition.setSubject(new Reference("Patient/"+ p.getBeneficiaryId().toString())); + composition.setDate(new Date()); + composition.addAuthor(new Reference(practitioner.getIdElement().getValue())); + composition.setCustodian(new Reference(organization.getIdElement().getValue())); + composition.setTitle("Prescription Record"); + + SectionComponent section = new SectionComponent(); + section.setCode(new CodeableConcept(new Coding("http://snomed.info/sct", "440545006", "Prescription record"))); + + for (MedicationRequest med : medicationRequest) { + Reference reference = new Reference(); + reference.setReference(med.getIdElement().getValue()); + reference.setType("MedicationRequest"); + + section.addEntry(reference); + + } + + composition.addSection(section); + + return composition; + + } + + private AMRIT_ResourceMongo createPrescriptionBundleMongo(PatientEligibleForResourceCreation p, + String prescriptionBundle) { + AMRIT_ResourceMongo aMRIT_ResourceMongo = new AMRIT_ResourceMongo(); + aMRIT_ResourceMongo.setBeneficiaryID(p.getBeneficiaryId()); + aMRIT_ResourceMongo.setBeneficiaryRegID(p.getBeneficiaryRegID()); + // get ABHA from table "m_benhealthmapping" for this visit(visit code) + if (p.getVisitCode() != null) { + aMRIT_ResourceMongo.setVisitCode(p.getVisitCode()); + List objArrResultSet = benHealthIDMappingRepo.getLinkedHealthIDForVisit(p.getVisitCode()); + if (objArrResultSet != null && objArrResultSet.size() > 0) { + aMRIT_ResourceMongo.setNationalHealthID(objArrResultSet.get(0)); + } + } + + aMRIT_ResourceMongo.setResourceJson(prescriptionBundle); + aMRIT_ResourceMongo.setResourceType("Prescription"); + + return aMRIT_ResourceMongo; + } + +} diff --git a/src/main/java/com/wipro/fhir/service/bundle_creation/WellnessRecordResourceBundle.java b/src/main/java/com/wipro/fhir/service/bundle_creation/WellnessRecordResourceBundle.java new file mode 100644 index 0000000..bdb1fd3 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/bundle_creation/WellnessRecordResourceBundle.java @@ -0,0 +1,27 @@ +package com.wipro.fhir.service.bundle_creation; + +import java.util.List; + +import org.hl7.fhir.r4.model.Composition; +import org.hl7.fhir.r4.model.Observation; +import org.hl7.fhir.r4.model.Organization; +import org.hl7.fhir.r4.model.Practitioner; + +import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.utils.exception.FHIRException; + +public interface WellnessRecordResourceBundle { + + String populateWellnessRecordResourceBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException; + + Composition populateWellnessRecordComposition(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p, Practitioner practitioner, Organization organization, + List observationVitalList); + + int processWellnessRecordBundle(ResourceRequestHandler resourceRequestHandler, PatientEligibleForResourceCreation p) + throws org.hl7.fhir.exceptions.FHIRException, Exception; + + +} diff --git a/src/main/java/com/wipro/fhir/service/bundle_creation/WellnessRecordResourceBundleImpl.java b/src/main/java/com/wipro/fhir/service/bundle_creation/WellnessRecordResourceBundleImpl.java new file mode 100644 index 0000000..90114e7 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/bundle_creation/WellnessRecordResourceBundleImpl.java @@ -0,0 +1,257 @@ +package com.wipro.fhir.service.bundle_creation; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.hl7.fhir.exceptions.FHIRException; +import org.hl7.fhir.r4.model.Bundle; +import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent; +import org.hl7.fhir.r4.model.CodeableConcept; +import org.hl7.fhir.r4.model.Coding; +import org.hl7.fhir.r4.model.Composition; +import org.hl7.fhir.r4.model.Identifier; +import org.hl7.fhir.r4.model.Meta; +import org.hl7.fhir.r4.model.Observation; +import org.hl7.fhir.r4.model.Organization; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.Practitioner; +import org.hl7.fhir.r4.model.Reference; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import com.wipro.fhir.data.mongo.amrit_resource.AMRIT_ResourceMongo; +import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; +import com.wipro.fhir.service.common.CommonService; +import com.wipro.fhir.service.resource_model.ObservationResource; +import com.wipro.fhir.service.resource_model.OrganizationResource; +import com.wipro.fhir.service.resource_model.PatientResource; +import com.wipro.fhir.service.resource_model.PractitionerResource; + +import ca.uhn.fhir.context.FhirContext; +import ca.uhn.fhir.parser.IParser; + +@Service +public class WellnessRecordResourceBundleImpl implements WellnessRecordResourceBundle { + + @Autowired + private CommonService commonService; + + @Autowired + private PractitionerResource practitionerResource; + + @Autowired + private PatientResource patientResource; + + @Autowired + private OrganizationResource organizationResource; + + @Autowired + private ObservationResource observationResource; + + @Autowired + private BenHealthIDMappingRepo benHealthIDMappingRepo; + + @Value("${hipSystemUrl}") + private String systemUrl; + + @Override + public int processWellnessRecordBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException, Exception { + int i = 0; + // call method to generate Prescription resource + String wellnessBundle = populateWellnessRecordResourceBundle(resourceRequestHandler, p); + + // call private method to create mongo object with resource data + AMRIT_ResourceMongo aMRIT_ResourceMongo = createPrescriptionBundleMongo(p, wellnessBundle); + // if resource data is not null, save to mongo + if (aMRIT_ResourceMongo != null) { + i = commonService.saveResourceToMongo(aMRIT_ResourceMongo); + + } else + throw new FHIRException("Issue in processing the bundle"); + return i; + } + + @Override + public String populateWellnessRecordResourceBundle(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p) throws FHIRException { + Bundle wellnessBundle = new Bundle(); + String serializeBundle = null; + + try { + + String id = resourceRequestHandler.getVisitCode() + ":" + commonService.getUUID(); + wellnessBundle.setId(id); + wellnessBundle.setType(Bundle.BundleType.DOCUMENT); + wellnessBundle.setTimestamp(new Timestamp(System.currentTimeMillis())); + + Meta meta = new Meta(); + meta.setVersionId("1"); + meta.setLastUpdated(new Timestamp(System.currentTimeMillis())); + meta.addProfile("https://nrces.in/ndhm/fhir/r4/StructureDefinition/DocumentBundle"); + meta.addSecurity(new Coding("http://terminology.hl7.org/CodeSystem/v3-Confidentiality", "restricted", "R")); + wellnessBundle.setMeta(meta); + + Identifier identifier = new Identifier(); + identifier.setSystem(systemUrl); + identifier.setValue(wellnessBundle.getId()); + wellnessBundle.setIdentifier(identifier); + + Practitioner practitioner = practitionerResource.getPractitionerResource(resourceRequestHandler); + Organization organization = organizationResource.getOrganizationResource(resourceRequestHandler); + Patient patient = patientResource.getPatientResource(resourceRequestHandler); + + List observationVitalList = observationResource.getObservationVitals(patient, + resourceRequestHandler); + + // Composition + Composition composition = populateWellnessRecordComposition(resourceRequestHandler, p, practitioner, + organization, observationVitalList); + + List bundleEnteries = new ArrayList<>(); + + BundleEntryComponent bundleEntry1 = new BundleEntryComponent(); + bundleEntry1.setFullUrl(composition.getIdElement().getValue()); + bundleEntry1.setResource(composition); + + BundleEntryComponent bundleEntry2 = new BundleEntryComponent(); + bundleEntry2.setFullUrl(practitioner.getIdElement().getValue()); + bundleEntry2.setResource(practitioner); + + BundleEntryComponent bundleEntry3 = new BundleEntryComponent(); + bundleEntry3.setFullUrl(organization.getIdElement().getValue()); + bundleEntry3.setResource(organization); + + BundleEntryComponent bundleEntry4 = new BundleEntryComponent(); + bundleEntry4.setFullUrl(patient.getIdElement().getValue()); + bundleEntry4.setResource(patient); + + bundleEnteries.add(bundleEntry1); + bundleEnteries.add(bundleEntry2); + bundleEnteries.add(bundleEntry3); + bundleEnteries.add(bundleEntry4); + + for (Observation obsVital : observationVitalList) { + BundleEntryComponent bundleEntry5 = new BundleEntryComponent(); + bundleEntry5.setFullUrl(obsVital.getIdElement().getValue()); + bundleEntry5.setResource(obsVital); + + bundleEnteries.add(bundleEntry5); + } + + wellnessBundle.setEntry(bundleEnteries); + + FhirContext ctx = FhirContext.forR4(); + IParser parser = ctx.newJsonParser(); + serializeBundle = parser.encodeResourceToString(wellnessBundle); + + } catch (Exception e) { + throw new FHIRException("Wellness FHIR Resource Bundle failed with error - " + e); + } + + return serializeBundle; + } + + @Override + public Composition populateWellnessRecordComposition(ResourceRequestHandler resourceRequestHandler, + PatientEligibleForResourceCreation p, Practitioner practitioner, Organization organization, + List observationVitalList) { + Composition comp = new Composition(); + comp.setId("Composition/" + commonService.getUUID()); + + // Composition.meta – bind WellnessRecord profile + Meta meta = new Meta(); + meta.setVersionId("1"); + meta.addProfile("https://nrces.in/ndhm/fhir/r4/StructureDefinition/WellnessRecord"); + comp.setMeta(meta); + + comp.setStatus(Composition.CompositionStatus.FINAL); + + CodeableConcept type = new CodeableConcept(); + type.setText("Wellness Record"); + comp.setType(type); + + comp.setSubject(new Reference("Patient/" + p.getBeneficiaryId().toString())); + comp.setDate(new Date()); + + comp.addAuthor(new Reference(practitioner.getIdElement().getValue())); + comp.setCustodian(new Reference(organization.getIdElement().getValue())); + comp.setTitle("Wellness Record"); + + Composition.SectionComponent vitalSignsSection = new Composition.SectionComponent(); + vitalSignsSection.setTitle("Vital Signs"); + + Composition.SectionComponent bodyMeasurementSection = new Composition.SectionComponent(); + bodyMeasurementSection.setTitle("Body Measurement"); + + if (observationVitalList.size() > 0) { + for (Observation obs : observationVitalList) { + String label = (obs.getCode() != null) ? obs.getCode().getText() : null; + + // Create reference for bundle entry + Reference ref = new Reference(); + ref.setReference(obs.getIdElement().getValue()); + ref.setType("Observation"); + + if (isVitalSignLabel(label)) { + vitalSignsSection.addEntry(ref); + } else if (isBodyMeasurementLabel(label)) { + bodyMeasurementSection.addEntry(ref); + } else { + vitalSignsSection.addEntry(ref); + } + } + } + + // Add sections only if they have entries + if (vitalSignsSection.hasEntry()) { + comp.addSection(vitalSignsSection); + } + if (bodyMeasurementSection.hasEntry()) { + comp.addSection(bodyMeasurementSection); + } + + return comp; + } + + private boolean isVitalSignLabel(String label) { + if (label == null) + return false; + String s = label.trim().toLowerCase(); + return s.equals("body temperature") || s.equals("pulse rate") || s.equals("respiratory rate") + || s.equals("systolic blood pressure") || s.equals("diastolic blood pressure"); + } + + private boolean isBodyMeasurementLabel(String label) { + if (label == null) + return false; + String s = label.trim().toLowerCase(); + return s.equals("body height") || s.equals("body weight") || s.equals("body mass index"); + } + + private AMRIT_ResourceMongo createPrescriptionBundleMongo(PatientEligibleForResourceCreation p, + String wellnessBundle) { + AMRIT_ResourceMongo aMRIT_ResourceMongo = new AMRIT_ResourceMongo(); + aMRIT_ResourceMongo.setBeneficiaryID(p.getBeneficiaryId()); + aMRIT_ResourceMongo.setBeneficiaryRegID(p.getBeneficiaryRegID()); + // get ABHA from table "m_benhealthmapping" for this visit(visit code) + if (p.getVisitCode() != null) { + aMRIT_ResourceMongo.setVisitCode(p.getVisitCode()); + List objArrResultSet = benHealthIDMappingRepo.getLinkedHealthIDForVisit(p.getVisitCode()); + if (objArrResultSet != null && objArrResultSet.size() > 0) { + aMRIT_ResourceMongo.setNationalHealthID(objArrResultSet.get(0)); + } + } + + aMRIT_ResourceMongo.setResourceJson(wellnessBundle); + aMRIT_ResourceMongo.setResourceType("WellnessRecord"); + + return aMRIT_ResourceMongo; + } + +} diff --git a/src/main/java/com/wipro/fhir/service/common/CommonServiceImpl.java b/src/main/java/com/wipro/fhir/service/common/CommonServiceImpl.java index c0b23dc..2ddbc36 100644 --- a/src/main/java/com/wipro/fhir/service/common/CommonServiceImpl.java +++ b/src/main/java/com/wipro/fhir/service/common/CommonServiceImpl.java @@ -64,7 +64,6 @@ import com.wipro.fhir.data.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile; import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; import com.wipro.fhir.data.request_handler.ResourceRequestHandler; -import com.wipro.fhir.data.users.User; import com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; import com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; import com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; @@ -72,13 +71,17 @@ import com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; import com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; import com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; +import com.wipro.fhir.repo.v3.careContext.CareContextRepo; import com.wipro.fhir.service.api_channel.APIChannel; +import com.wipro.fhir.service.bundle_creation.DiagnosticRecordResourceBundle; +import com.wipro.fhir.service.bundle_creation.DischargeSummaryResourceBundle; +import com.wipro.fhir.service.bundle_creation.ImmunizationRecordResourceBundle; +import com.wipro.fhir.service.bundle_creation.OPConsultResourceBundle; +import com.wipro.fhir.service.bundle_creation.PrescriptionResourceBundleImpl; +import com.wipro.fhir.service.bundle_creation.WellnessRecordResourceBundle; import com.wipro.fhir.service.ndhm.Common_NDHMService; import com.wipro.fhir.service.ndhm.GenerateSession_NDHMService; import com.wipro.fhir.service.patient_data_handler.PatientDataGatewayService; -import com.wipro.fhir.service.resource_gateway.DiagnosticReportRecord; -import com.wipro.fhir.service.resource_gateway.OPConsultRecordBundle; -import com.wipro.fhir.service.resource_gateway.PrescriptionRecordBundle; import com.wipro.fhir.utils.exception.FHIRException; import com.wipro.fhir.utils.http.HttpUtils; @@ -133,13 +136,6 @@ public class CommonServiceImpl implements CommonService { @Autowired private PatientCareContextsMongoRepo patientCareContextsMongoRepo; - @Autowired - private OPConsultRecordBundle oPConsultRecordBundle; - @Autowired - private PrescriptionRecordBundle prescriptionBundle; - @Autowired - private DiagnosticReportRecord diagnosticReportRecordBundle; - @Autowired private TempCollectionRepo tempCollectionRepo; @Autowired @@ -163,6 +159,27 @@ public class CommonServiceImpl implements CommonService { @Autowired private BenHealthIDMappingRepo benHealthIDMappingRepo; + + @Autowired + private PrescriptionResourceBundleImpl prescriptionResourceBundle; + + @Autowired + private OPConsultResourceBundle oPConsultResourceBundle; + + @Autowired + private DiagnosticRecordResourceBundle diagnosticReportResourceBundle; + + @Autowired + private WellnessRecordResourceBundle wellnessRecordResourceBundle; + + @Autowired + private ImmunizationRecordResourceBundle immunizationRecordResourceBundle; + + @Autowired + private DischargeSummaryResourceBundle dischargeSummaryResourceBundle; + + @Autowired + private CareContextRepo careContextRepo; @Override public String processResourceOperation() throws FHIRException { @@ -209,17 +226,66 @@ public String processResourceOperation() throws FHIRException { } // ---------------------------------------------------------------------------------------------- + + boolean processed = true; + // 1. OP consult resource bundle - int i = oPConsultRecordBundle.processOPConsultRecordBundle(resourceRequestHandler, p); - // 2. diagnostic report record budle - int j = diagnosticReportRecordBundle.processDiagnosticReportRecordBundle(resourceRequestHandler, p); + if (p.getVisitCategory().equalsIgnoreCase("General OPD") + || p.getVisitCategory().equalsIgnoreCase("General OPD (QC)")) { + int opConsult = oPConsultResourceBundle.processOpConsultRecordBundle(resourceRequestHandler, p); + if (opConsult <= 0) + processed = false; + logger.info(" The value of opConsult proceesed: " + processed); + } + + // 2. diagnostic report record bundle + int hasLabTests = careContextRepo.hasLabtestsDone(p.getVisitCode().toString()); + if (hasLabTests > 0) { + int diagReport = diagnosticReportResourceBundle + .processDiagnosticReportRecordBundle(resourceRequestHandler, p); + if (diagReport <= 0) + processed = false; + logger.info(" The value of diagReport proceesed: " + processed); + } + // 3. prescription Bundle - int k = prescriptionBundle.processPrescriptionRecordBundle(resourceRequestHandler, p); + int hasPrescription = careContextRepo.hasPrescribedDrugs(p.getVisitCode().toString()); + if (hasPrescription > 0) { + int presp = prescriptionResourceBundle.processPrescriptionRecordBundle(resourceRequestHandler, p); + if (presp <= 0) + processed = false; + logger.info(" The value of presp proceesed: " + processed); + } + + // 4. wellness Bundle + int hasPhyVitals = careContextRepo.hasPhyVitals(p.getVisitCode().toString()); + if (hasPhyVitals > 0) { + int wellness = wellnessRecordResourceBundle.processWellnessRecordBundle(resourceRequestHandler, p); + if (wellness <= 0) + processed = false; + logger.info(" The value of wellness proceesed: " + processed); + } + + // 5. Immunization record + int hasVaccineDetails = careContextRepo.hasVaccineDetails(p.getVisitCode().toString()); + if (hasVaccineDetails > 0) { + int immunization = immunizationRecordResourceBundle + .processImmunizationRecordBundle(resourceRequestHandler, p); + if (immunization <= 0) + processed = false; + logger.info(" The value of immunization proceesed: " + processed); + } - logger.info("The value of i: " + i + " The value of j: " + j + " The value of k: " + k); + // 6. Discharge Summary + int dischargeSummary = dischargeSummaryResourceBundle + .processDischargeSummaryRecordBundle(resourceRequestHandler, p); + if (dischargeSummary <= 0) + processed = false; + logger.info(" The value of dischargeSummary proceesed: " + processed); - if (i > 0 && j > 0 && k > 0) { + logger.info(" The value of final proceesed: " + processed); + if (processed) { // update the processed flag in trigger table p.setProcessed(true); PatientEligibleForResourceCreation resultSet = patientEligibleForResourceCreationRepo.save(p); diff --git a/src/main/java/com/wipro/fhir/service/ndhm/Common_NDHMService.java b/src/main/java/com/wipro/fhir/service/ndhm/Common_NDHMService.java index a20245a..45fc15e 100644 --- a/src/main/java/com/wipro/fhir/service/ndhm/Common_NDHMService.java +++ b/src/main/java/com/wipro/fhir/service/ndhm/Common_NDHMService.java @@ -24,6 +24,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; +import com.wipro.fhir.data.mongo.care_context.GenerateTokenAbdmResponses; import com.wipro.fhir.data.mongo.care_context.NDHMRequest; import com.wipro.fhir.utils.exception.FHIRException; @@ -36,4 +37,5 @@ public interface Common_NDHMService { public String getStatusCode(ResponseEntity res) throws FHIRException; public HttpHeaders getHeadersWithXtoken(String ndhmAuthToken,String X_Token); public HttpHeaders getHeadersWithAadhaarBioXtoken(String ndhmAuthToken, String X_Token); + public GenerateTokenAbdmResponses getLinkToken(String requestId) throws FHIRException; } diff --git a/src/main/java/com/wipro/fhir/service/ndhm/Common_NDHMServiceImpl.java b/src/main/java/com/wipro/fhir/service/ndhm/Common_NDHMServiceImpl.java index 752e9d6..a7cdae6 100644 --- a/src/main/java/com/wipro/fhir/service/ndhm/Common_NDHMServiceImpl.java +++ b/src/main/java/com/wipro/fhir/service/ndhm/Common_NDHMServiceImpl.java @@ -27,14 +27,18 @@ import java.util.TimeZone; import java.util.UUID; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import com.wipro.fhir.data.mongo.care_context.GenerateTokenAbdmResponses; import com.wipro.fhir.data.mongo.care_context.NDHMRequest; import com.wipro.fhir.data.mongo.care_context.NDHMResponse; +import com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; import com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; import com.wipro.fhir.utils.exception.FHIRException; @@ -43,6 +47,11 @@ public class Common_NDHMServiceImpl implements Common_NDHMService { @Autowired private NDHMResponseRepo nDHMResponseRepo; + @Autowired + private GenerateTokenAbdmResponsesRepo generateTokenAbdmResponsesRepo; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + /*** * @author SH20094090 * @return headers for the NDHM API's @@ -149,6 +158,20 @@ NDHMResponse getResponseMongo(String reqID) { } else return null; } + + @Override + public GenerateTokenAbdmResponses getLinkToken(String requestId) throws FHIRException { + GenerateTokenAbdmResponses res = generateTokenAbdmResponsesRepo.findByRequestId(requestId); + logger.info("Mongo response returned " + res); + if(res != null) { + return res; + } else { + return null; + } + + } + + @Override public String getBody(ResponseEntity res) throws FHIRException { diff --git a/src/main/java/com/wipro/fhir/service/ndhm/LinkCareContext_NDHMServiceImpl.java b/src/main/java/com/wipro/fhir/service/ndhm/LinkCareContext_NDHMServiceImpl.java index 86ceeec..f20f083 100644 --- a/src/main/java/com/wipro/fhir/service/ndhm/LinkCareContext_NDHMServiceImpl.java +++ b/src/main/java/com/wipro/fhir/service/ndhm/LinkCareContext_NDHMServiceImpl.java @@ -119,6 +119,7 @@ public String generateOTPForCareContext(String request) throws FHIRException { HttpHeaders headers = common_NDHMService.getHeaders(ndhmAuthToken, abhaMode); ResponseEntity responseEntity = httpUtils.postWithResponseEntity(generateOTPForCareContext, requestOBJ, headers); + logger.info("NDHM_FHIR Carecontext generateOTP API response - " + responseEntity); String responseStrLogin = common_NDHMService.getStatusCode(responseEntity); String numericStatusCodeStr = responseStrLogin.split(" ")[0]; // Extracts "202" from "202 ACCEPTED" int numericStatusCode = Integer.parseInt(numericStatusCodeStr); diff --git a/src/main/java/com/wipro/fhir/service/resource_gateway/DiagnosticReportRecord.java b/src/main/java/com/wipro/fhir/service/resource_gateway/DiagnosticReportRecord.java deleted file mode 100644 index 01a79bd..0000000 --- a/src/main/java/com/wipro/fhir/service/resource_gateway/DiagnosticReportRecord.java +++ /dev/null @@ -1,36 +0,0 @@ -/* -* AMRIT – Accessible Medical Records via Integrated Technology -* Integrated EHR (Electronic Health Records) Solution -* -* Copyright (C) "Piramal Swasthya Management and Research Institute" -* -* This file is part of AMRIT. -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see https://www.gnu.org/licenses/. -*/ -package com.wipro.fhir.service.resource_gateway; - -import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; -import com.wipro.fhir.data.request_handler.ResourceRequestHandler; -import com.wipro.fhir.utils.exception.FHIRException; - -public interface DiagnosticReportRecord { - - public int processDiagnosticReportRecordBundle(ResourceRequestHandler resourceRequestHandler, - PatientEligibleForResourceCreation p) throws FHIRException; - - public String getDiagnosticReportRecordBundle( ResourceRequestHandler resourceRequestHandler, - PatientEligibleForResourceCreation p) throws FHIRException; - -} diff --git a/src/main/java/com/wipro/fhir/service/resource_gateway/DiagnosticReportRecordImpl.java b/src/main/java/com/wipro/fhir/service/resource_gateway/DiagnosticReportRecordImpl.java deleted file mode 100644 index 32b90b0..0000000 --- a/src/main/java/com/wipro/fhir/service/resource_gateway/DiagnosticReportRecordImpl.java +++ /dev/null @@ -1,260 +0,0 @@ -/* -* AMRIT – Accessible Medical Records via Integrated Technology -* Integrated EHR (Electronic Health Records) Solution -* -* Copyright (C) "Piramal Swasthya Management and Research Institute" -* -* This file is part of AMRIT. -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see https://www.gnu.org/licenses/. -*/ -package com.wipro.fhir.service.resource_gateway; - -import java.sql.Date; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.hl7.fhir.r4.model.Bundle; -import org.hl7.fhir.r4.model.CodeableConcept; -import org.hl7.fhir.r4.model.Coding; -import org.hl7.fhir.r4.model.Composition; -import org.hl7.fhir.r4.model.Composition.CompositionStatus; -import org.hl7.fhir.r4.model.Composition.SectionComponent; -import org.hl7.fhir.r4.model.DiagnosticReport; -import org.hl7.fhir.r4.model.Encounter; -import org.hl7.fhir.r4.model.Identifier; -import org.hl7.fhir.r4.model.Meta; -import org.hl7.fhir.r4.model.Observation; -import org.hl7.fhir.r4.model.Organization; -import org.hl7.fhir.r4.model.Patient; -import org.hl7.fhir.r4.model.Practitioner; -import org.hl7.fhir.r4.model.Reference; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.wipro.fhir.data.mongo.amrit_resource.AMRIT_ResourceMongo; -import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; -import com.wipro.fhir.data.request_handler.ResourceRequestHandler; -import com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; -import com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; -import com.wipro.fhir.service.common.CommonService; -import com.wipro.fhir.service.resource_model.AppointmentResource; -import com.wipro.fhir.service.resource_model.ConditionResource; -import com.wipro.fhir.service.resource_model.DiagnosticReportResource; -import com.wipro.fhir.service.resource_model.EncounterResource; -import com.wipro.fhir.service.resource_model.ObservationResource; -import com.wipro.fhir.service.resource_model.OrganizationResource; -import com.wipro.fhir.service.resource_model.PatientResource; -import com.wipro.fhir.service.resource_model.PractitionerResource; -import com.wipro.fhir.utils.exception.FHIRException; - -import ca.uhn.fhir.context.FhirContext; - -@Service -public class DiagnosticReportRecordImpl implements DiagnosticReportRecord { - - @Autowired - private CommonService commonService; - @Autowired - private PatientEligibleForResourceCreationRepo patientEligibleForResourceCreationRepo; - @Autowired - private PatientResource patientResource; - @Autowired - private EncounterResource encounterResource; - @Autowired - private AppointmentResource appointmentResource; - @Autowired - private ConditionResource conditionResource; - @Autowired - private BenHealthIDMappingRepo benHealthIDMappingRepo; - @Autowired - private DiagnosticReportResource diagnosticReportResource; - @Autowired - private ObservationResource observationResource; - - @Override - public int processDiagnosticReportRecordBundle(ResourceRequestHandler resourceRequestHandler, - PatientEligibleForResourceCreation p) throws FHIRException { - int i = 0; - // call method to generate Prescription resource - String diagnosticReportRecordBundle = getDiagnosticReportRecordBundle(resourceRequestHandler, p); - - // call private method to create mongo object with resource data - AMRIT_ResourceMongo aMRIT_ResourceMongo = createDiagnosticReportRecordBundleMongo(p, - diagnosticReportRecordBundle); - // if resource data is not null, save to mongo - if (aMRIT_ResourceMongo != null) { - i = commonService.saveResourceToMongo(aMRIT_ResourceMongo); - - } else - throw new FHIRException("TODO - exception - later will implement"); - - return i; - - } - - @Autowired - PractitionerResource practitionerResource; - @Autowired - OrganizationResource organizationResource; - - @Override - public String getDiagnosticReportRecordBundle(ResourceRequestHandler resourceRequestHandler, - PatientEligibleForResourceCreation p) throws FHIRException { - - Bundle bundle = new Bundle(); - bundle.setType(Bundle.BundleType.DOCUMENT); - bundle.setId(commonService.getUUID()); - // bundle identifier - Identifier identifier = new Identifier(); - identifier.setSystem("https://www.max.in/bundle"); - identifier.setValue(bundle.getId()); - - bundle.setIdentifier(identifier); - bundle.setTimestamp(new Timestamp(System.currentTimeMillis())); - bundle.setMeta(new Meta().setLastUpdated(new Date(System.currentTimeMillis()))); - FhirContext fhirContext = FhirContext.forR4(); - - // practitioner resource - Practitioner practitioner = practitionerResource.getPractitioner(); - - // Organization resource - Organization organization = organizationResource.getOrganization(); - - // Patient resource - Patient patient = patientResource.getPatientResource(resourceRequestHandler); - - // Observation- Physical Examination - vitals - Map> observationMap = observationResource.getObservationLab(patient, - resourceRequestHandler); - - // diagnostic report - List diagnosticResourceList = diagnosticReportResource.getDiagnosticReport(patient, - new Encounter(), resourceRequestHandler, observationMap); - - // composition - Composition composition = getCompositionResourceDiagnosticReport(patient, practitioner, diagnosticResourceList); - - /*** - * bundle addition - */ - - - bundle.addEntry().setFullUrl(composition.getIdElement().getValue()).setResource(composition).getRequest() - .setUrl("composition").setMethod(Bundle.HTTPVerb.POST); - - bundle.addEntry().setFullUrl(practitioner.getIdElement().getValue()).setResource(practitioner).getRequest() - .setUrl("practitioner").setMethod(Bundle.HTTPVerb.POST); - - bundle.addEntry().setFullUrl(organization.getIdElement().getValue()).setResource(organization).getRequest() - .setUrl("organization").setMethod(Bundle.HTTPVerb.POST); - - bundle.addEntry().setFullUrl(patient.getIdElement().getValue()).setResource(patient).getRequest() - .setUrl("Patient").setMethod(Bundle.HTTPVerb.POST); - - for (DiagnosticReport dr : diagnosticResourceList) { - bundle.addEntry().setFullUrl(dr.getIdElement().getValue()).setResource(dr).getRequest() - .setUrl("DiagnosticReport").setMethod(Bundle.HTTPVerb.POST); - } - - List tempList = new ArrayList<>(); - if (observationMap != null && observationMap.size() > 0) { - for (Entry> entry : observationMap.entrySet()) { - for (Observation observation : entry.getValue()) { - tempList.add(observation); - - bundle.addEntry().setFullUrl(observation.getIdElement().getValue()).setResource(observation) - .getRequest().setUrl("DiagnosticReport").setMethod(Bundle.HTTPVerb.POST); - } - } - - } - - return fhirContext.newJsonParser().setPrettyPrint(true).encodeResourceToString(bundle); - } - - private Composition getCompositionResourceDiagnosticReport(Patient patient, Practitioner practitioner, - List diagnosticReportList) { - - Composition composition = new Composition(); - composition.setId("Composition/" + commonService.getUUID()); - composition.setStatus(CompositionStatus.FINAL); - composition.setSubject(new Reference(patient.getId())); - composition.setDate(new Date(System.currentTimeMillis())); - composition.setTitle("Diagnostic Report- Lab"); - // bundle identifier - Identifier identifier = new Identifier(); - identifier.setSystem("https://ndhm.in/phr"); - identifier.setValue(composition.getId()); - composition.setIdentifier(identifier); - - CodeableConcept cc = new CodeableConcept(); - Coding c = new Coding(); - c.setCode("721981007"); - c.setDisplay("Diagnostic studies report"); - c.setSystem("http://snomed.info/sct"); - cc.addCoding(c); - composition.setType(cc); - - composition.addAuthor(new Reference(practitioner.getIdElement().getValue())); - - List scList = new ArrayList<>(); - - // section - // rescription record - SectionComponent sc = new SectionComponent(); - sc.setTitle("Lab Test report"); - CodeableConcept cc1 = new CodeableConcept(); - Coding c1 = new Coding(); - c1.setCode("118246004"); - c1.setDisplay("Laboratory test result"); - c1.setSystem("http://snomed.info/sct"); - cc1.addCoding(c1); - sc.setCode(cc1); - for (DiagnosticReport dr : diagnosticReportList) { - sc.addEntry(new Reference(dr.getId())); - } - - scList.add(sc); - - composition.setSection(scList); - - return composition; - } - - // method to create object to save to mongo DB - private AMRIT_ResourceMongo createDiagnosticReportRecordBundleMongo(PatientEligibleForResourceCreation p, - String diagnosticReportRecordBundle) { - AMRIT_ResourceMongo aMRIT_ResourceMongo = new AMRIT_ResourceMongo(); - aMRIT_ResourceMongo.setBeneficiaryID(p.getBeneficiaryId()); - aMRIT_ResourceMongo.setBeneficiaryRegID(p.getBeneficiaryRegID()); - // get ABHA from table "m_benhealthmapping" for this visit(visit code) - if (p.getVisitCode() != null) { - aMRIT_ResourceMongo.setVisitCode(p.getVisitCode()); - List objArrResultSet = benHealthIDMappingRepo.getLinkedHealthIDForVisit(p.getVisitCode()); - if (objArrResultSet != null && objArrResultSet.size() > 0) { - aMRIT_ResourceMongo.setNationalHealthID(objArrResultSet.get(0)); - } - } - - aMRIT_ResourceMongo.setResourceJson(diagnosticReportRecordBundle); - aMRIT_ResourceMongo.setResourceType("DiagnosticReport"); - - return aMRIT_ResourceMongo; - } - -} diff --git a/src/main/java/com/wipro/fhir/service/resource_gateway/OPConsultRecordBundle.java b/src/main/java/com/wipro/fhir/service/resource_gateway/OPConsultRecordBundle.java deleted file mode 100644 index 12cde47..0000000 --- a/src/main/java/com/wipro/fhir/service/resource_gateway/OPConsultRecordBundle.java +++ /dev/null @@ -1,41 +0,0 @@ -/* -* AMRIT – Accessible Medical Records via Integrated Technology -* Integrated EHR (Electronic Health Records) Solution -* -* Copyright (C) "Piramal Swasthya Management and Research Institute" -* -* This file is part of AMRIT. -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see https://www.gnu.org/licenses/. -*/ -package com.wipro.fhir.service.resource_gateway; - -import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; -import com.wipro.fhir.data.request_handler.ResourceRequestHandler; -import com.wipro.fhir.utils.exception.FHIRException; - -/*** - * - * @author NE298657 - * - */ - -public interface OPConsultRecordBundle { - - public String getOPConsultRecordBundle(ResourceRequestHandler resourceRequestHandler, - PatientEligibleForResourceCreation p) throws FHIRException; - - public int processOPConsultRecordBundle(ResourceRequestHandler resourceRequestHandler, - PatientEligibleForResourceCreation p) throws FHIRException; -} diff --git a/src/main/java/com/wipro/fhir/service/resource_gateway/OPConsultRecordBundleImpl.java b/src/main/java/com/wipro/fhir/service/resource_gateway/OPConsultRecordBundleImpl.java deleted file mode 100644 index 81eb7e9..0000000 --- a/src/main/java/com/wipro/fhir/service/resource_gateway/OPConsultRecordBundleImpl.java +++ /dev/null @@ -1,297 +0,0 @@ -/* -* AMRIT – Accessible Medical Records via Integrated Technology -* Integrated EHR (Electronic Health Records) Solution -* -* Copyright (C) "Piramal Swasthya Management and Research Institute" -* -* This file is part of AMRIT. -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see https://www.gnu.org/licenses/. -*/ -package com.wipro.fhir.service.resource_gateway; - -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.hl7.fhir.r4.model.AllergyIntolerance; -import org.hl7.fhir.r4.model.Appointment; -import org.hl7.fhir.r4.model.Bundle; -import org.hl7.fhir.r4.model.Composition; -import org.hl7.fhir.r4.model.Condition; -import org.hl7.fhir.r4.model.Encounter; -import org.hl7.fhir.r4.model.Identifier; -import org.hl7.fhir.r4.model.Meta; -import org.hl7.fhir.r4.model.Observation; -import org.hl7.fhir.r4.model.Organization; -import org.hl7.fhir.r4.model.Patient; -import org.hl7.fhir.r4.model.Practitioner; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.wipro.fhir.data.mongo.amrit_resource.AMRIT_ResourceMongo; -import com.wipro.fhir.data.mongo.amrit_resource.TempCollection; -import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; -import com.wipro.fhir.data.request_handler.ResourceRequestHandler; -import com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; -import com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; -import com.wipro.fhir.service.common.CommonService; -import com.wipro.fhir.service.resource_model.AllergyIntoleranceResource; -import com.wipro.fhir.service.resource_model.AppointmentResource; -import com.wipro.fhir.service.resource_model.CompositionResource; -import com.wipro.fhir.service.resource_model.ConditionResource; -import com.wipro.fhir.service.resource_model.EncounterResource; -import com.wipro.fhir.service.resource_model.FamilyMemberHistoryResource; -import com.wipro.fhir.service.resource_model.ObservationResource; -import com.wipro.fhir.service.resource_model.OrganizationResource; -import com.wipro.fhir.service.resource_model.PatientResource; -import com.wipro.fhir.service.resource_model.PractitionerResource; -import com.wipro.fhir.utils.exception.FHIRException; - -import ca.uhn.fhir.context.FhirContext; - -/*** - * - * @author NE298657 - * - */ - -@Service -public class OPConsultRecordBundleImpl implements OPConsultRecordBundle { - - Logger logger = LoggerFactory.getLogger(this.getClass().getName()); - - @Autowired - private CommonService commonService; - @Autowired - private PatientResource patientResource; - @Autowired - private AllergyIntoleranceResource allergyIntoleranceResource; - @Autowired - private AppointmentResource appointmentResource; - @Autowired - private ConditionResource conditionResource; - @Autowired - private EncounterResource encounterResource; - @Autowired - private FamilyMemberHistoryResource familyMemberHistoryResource; - @Autowired - private BenHealthIDMappingRepo benHealthIDMappingRepo; - @Autowired - private PatientEligibleForResourceCreationRepo patientEligibleForResourceCreationRepo; - @Autowired - private ObservationResource observationResource; - @Autowired - private PractitionerResource practitionerResource; - @Autowired - private OrganizationResource organizationResource; - @Autowired - private CompositionResource compositionResource; - - @Override - public int processOPConsultRecordBundle(ResourceRequestHandler resourceRequestHandler, - PatientEligibleForResourceCreation p) throws FHIRException { - int i = 0; - // call method to generate OP_consult resource - String opConsultRecordBundle = getOPConsultRecordBundle(resourceRequestHandler, p); - - // call private method to create mongo object with resource data - AMRIT_ResourceMongo aMRIT_ResourceMongo = createOPConsultRecordBundleMongo(p, opConsultRecordBundle); - // if resource data is not null, save to mongo - if (aMRIT_ResourceMongo != null) { - - i = commonService.saveResourceToMongo(aMRIT_ResourceMongo); - - } else - throw new FHIRException("TODO - exception - later will implement"); - - return i; - - } - - @Override - public String getOPConsultRecordBundle(ResourceRequestHandler resourceRequestHandler, - PatientEligibleForResourceCreation p) throws FHIRException { - Bundle bundle = new Bundle(); - - // bundle type - document - bundle.setType(Bundle.BundleType.DOCUMENT); - // bundle id - bundle.setId(commonService.getUUID()); - - // bundle identifier - Identifier identifier = new Identifier(); - identifier.setSystem("https://www.max.in/bundle"); - identifier.setValue(bundle.getId()); - - bundle.setIdentifier(identifier); - - // timestamp - bundle.setTimestamp(new Timestamp(System.currentTimeMillis())); - bundle.setMeta(new Meta().setLastUpdated(new Date(System.currentTimeMillis()))); - - FhirContext fhirContext = FhirContext.forR4(); - - // practitioner resource - Practitioner practitioner = practitionerResource.getPractitioner(); - - // Organization resource - Organization organization = organizationResource.getOrganization(); - - // Patient resource - Patient patient = patientResource.getPatientResource(resourceRequestHandler); - - // Appointment resource - Appointment appointment = appointmentResource.getAppointmentResource(resourceRequestHandler, practitioner); - - // Condition resource, chiefcomplaints - List conditionListChiefComplaints = conditionResource.getCondition(patient, resourceRequestHandler, - "chiefcomplaints"); - - // Condition resource, diagnosis - List conditionListDiagnosis = conditionResource.getCondition(patient, resourceRequestHandler, - "diagnosis"); - - // FamilyMemberHistory resource -/// FamilyMemberHistory familyMemberHistory = familyMemberHistoryResource.getFamilyMemberHistory(patient, -/// resourceRequestHandler); - - // Encounter resource - Encounter encounter = encounterResource.getEncounterResource(patient, appointment, resourceRequestHandler, - conditionListChiefComplaints, conditionListDiagnosis); - - // AllergyIntolerance resource - List allergyList = allergyIntoleranceResource.getAllergyIntolerance(patient, encounter, - resourceRequestHandler, practitioner); - - // Observation- Physical Examination - vitals - List observationVitalList = observationResource.getObservationVitals(patient, encounter, - resourceRequestHandler); - - - - // Composition resource - Composition composition = compositionResource.getComposition(patient, encounter, allergyList, appointment, - conditionListChiefComplaints, conditionListDiagnosis, observationVitalList); - - /*** - * add resource to bundle - */ - - // composition - bundle.addEntry().setFullUrl(composition.getIdElement().getValue()).setResource(composition).getRequest() - .setUrl("Composition").setMethod(Bundle.HTTPVerb.POST); - - // practitioner - bundle.addEntry().setFullUrl(practitioner.getIdElement().getValue()).setResource(practitioner).getRequest() - .setUrl("Practitioner").setMethod(Bundle.HTTPVerb.POST); - - // organization - bundle.addEntry().setFullUrl(organization.getIdElement().getValue()).setResource(organization).getRequest() - .setUrl("Organization").setMethod(Bundle.HTTPVerb.POST); - - // patient - bundle.addEntry().setFullUrl(patient.getIdElement().getValue()).setResource(patient).getRequest() - .setUrl("Patient").setMethod(Bundle.HTTPVerb.POST); - - // appointment - bundle.addEntry().setFullUrl(appointment.getIdElement().getValue()).setResource(appointment).getRequest() - .setUrl("appointmentResource").setMethod(Bundle.HTTPVerb.POST); - - // condition - chief complaints - for (Condition condition : conditionListChiefComplaints) { - bundle.addEntry().setFullUrl(condition.getIdElement().getValue()).setResource(condition).getRequest() - .setUrl("Condition").setMethod(Bundle.HTTPVerb.POST); - } - - // condition - diagnosis - for (Condition condition : conditionListDiagnosis) { - bundle.addEntry().setFullUrl(condition.getIdElement().getValue()).setResource(condition).getRequest() - .setUrl("Condition").setMethod(Bundle.HTTPVerb.POST); - } - - // observation - for (Observation obsr : observationVitalList) { - bundle.addEntry().setFullUrl(obsr.getIdElement().getValue()).setResource(obsr).getRequest() - .setUrl("Observation").setMethod(Bundle.HTTPVerb.POST); - } - - // allergy - for (AllergyIntolerance allergyResource : allergyList) { - bundle.addEntry().setFullUrl(allergyResource.getIdElement().getValue()).setResource(allergyResource) - .getRequest().setUrl("AllergyIntolerance").setMethod(Bundle.HTTPVerb.POST); - } - - - bundle.addEntry().setFullUrl(encounter.getIdElement().getValue()).setResource(encounter).getRequest() - .setUrl("Encounter").setMethod(Bundle.HTTPVerb.POST); - - return fhirContext.newJsonParser().setPrettyPrint(true).encodeResourceToString(bundle); - } - - // method to create object to save to mongo DB - private AMRIT_ResourceMongo createOPConsultRecordBundleMongo(PatientEligibleForResourceCreation p, - String opConsultRecordBundle) { - AMRIT_ResourceMongo aMRIT_ResourceMongo = new AMRIT_ResourceMongo(); - aMRIT_ResourceMongo.setBeneficiaryID(p.getBeneficiaryId()); - aMRIT_ResourceMongo.setBeneficiaryRegID(p.getBeneficiaryRegID()); - // get ABHA from table "m_benhealthmapping" for this visit(visit code) - if (p.getVisitCode() != null) { - aMRIT_ResourceMongo.setVisitCode(p.getVisitCode()); - List objArrResultSet = benHealthIDMappingRepo.getLinkedHealthIDForVisit(p.getVisitCode()); - if (objArrResultSet != null && objArrResultSet.size() > 0) { - aMRIT_ResourceMongo.setNationalHealthID(objArrResultSet.get(0)); - } - } - - aMRIT_ResourceMongo.setResourceJson(opConsultRecordBundle); - aMRIT_ResourceMongo.setResourceType("OPConsultation"); - - return aMRIT_ResourceMongo; - } - - @Deprecated - private TempCollection createTempCollectionOBJ(Map> observationMap, - ResourceRequestHandler rrh) { - - Map> tempMap = new HashMap>(); - List tempList; - - TempCollection tempCollection = new TempCollection(); - tempCollection.setBeneficiaryRegID(rrh.getBeneficiaryRegID()); - tempCollection.setVisitCode(rrh.getVisitCode()); - tempCollection.setDataType("observationResourceMap"); - - for (Map.Entry> entry : observationMap.entrySet()) { - if (entry.getValue().size() > 0) { - tempList = new ArrayList<>(); - for (Observation o : entry.getValue()) { - tempList.add(o.getId()); - } - tempMap.put(entry.getKey(), tempList); - } - } - - tempCollection.setDataJson(tempMap); - tempCollection.setCreateDate(new Date(System.currentTimeMillis())); - tempCollection.setCreateBy("default"); - return tempCollection; - } - -} diff --git a/src/main/java/com/wipro/fhir/service/resource_gateway/PrescriptionRecordBundle.java b/src/main/java/com/wipro/fhir/service/resource_gateway/PrescriptionRecordBundle.java deleted file mode 100644 index 97163a2..0000000 --- a/src/main/java/com/wipro/fhir/service/resource_gateway/PrescriptionRecordBundle.java +++ /dev/null @@ -1,34 +0,0 @@ -/* -* AMRIT – Accessible Medical Records via Integrated Technology -* Integrated EHR (Electronic Health Records) Solution -* -* Copyright (C) "Piramal Swasthya Management and Research Institute" -* -* This file is part of AMRIT. -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see https://www.gnu.org/licenses/. -*/ -package com.wipro.fhir.service.resource_gateway; - -import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; -import com.wipro.fhir.data.request_handler.ResourceRequestHandler; -import com.wipro.fhir.utils.exception.FHIRException; - -public interface PrescriptionRecordBundle { - public int processPrescriptionRecordBundle(ResourceRequestHandler resourceRequestHandler, - PatientEligibleForResourceCreation p) throws FHIRException; - - public String getPrescriptionRecordBundle(ResourceRequestHandler resourceRequestHandler, - PatientEligibleForResourceCreation p) throws FHIRException; -} diff --git a/src/main/java/com/wipro/fhir/service/resource_gateway/PrescriptionRecordBundleImpl.java b/src/main/java/com/wipro/fhir/service/resource_gateway/PrescriptionRecordBundleImpl.java deleted file mode 100644 index 4ac9ea4..0000000 --- a/src/main/java/com/wipro/fhir/service/resource_gateway/PrescriptionRecordBundleImpl.java +++ /dev/null @@ -1,238 +0,0 @@ -/* -* AMRIT – Accessible Medical Records via Integrated Technology -* Integrated EHR (Electronic Health Records) Solution -* -* Copyright (C) "Piramal Swasthya Management and Research Institute" -* -* This file is part of AMRIT. -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see https://www.gnu.org/licenses/. -*/ -package com.wipro.fhir.service.resource_gateway; - -import java.sql.Date; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; - -import org.hl7.fhir.r4.model.Bundle; -import org.hl7.fhir.r4.model.CodeableConcept; -import org.hl7.fhir.r4.model.Coding; -import org.hl7.fhir.r4.model.Composition; -import org.hl7.fhir.r4.model.Composition.CompositionStatus; -import org.hl7.fhir.r4.model.Composition.SectionComponent; -import org.hl7.fhir.r4.model.Condition; -import org.hl7.fhir.r4.model.Identifier; -import org.hl7.fhir.r4.model.MedicationRequest; -import org.hl7.fhir.r4.model.Meta; -import org.hl7.fhir.r4.model.Organization; -import org.hl7.fhir.r4.model.Patient; -import org.hl7.fhir.r4.model.Practitioner; -import org.hl7.fhir.r4.model.Reference; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.wipro.fhir.data.mongo.amrit_resource.AMRIT_ResourceMongo; -import com.wipro.fhir.data.request_handler.PatientEligibleForResourceCreation; -import com.wipro.fhir.data.request_handler.ResourceRequestHandler; -import com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; -import com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; -import com.wipro.fhir.service.common.CommonService; -import com.wipro.fhir.service.resource_model.AppointmentResource; -import com.wipro.fhir.service.resource_model.ConditionResource; -import com.wipro.fhir.service.resource_model.EncounterResource; -import com.wipro.fhir.service.resource_model.MedicationRequestResource; -import com.wipro.fhir.service.resource_model.OrganizationResource; -import com.wipro.fhir.service.resource_model.PatientResource; -import com.wipro.fhir.service.resource_model.PractitionerResource; -import com.wipro.fhir.utils.exception.FHIRException; - -import ca.uhn.fhir.context.FhirContext; - -@Service -public class PrescriptionRecordBundleImpl implements PrescriptionRecordBundle { - @Autowired - private PatientResource patientResource; - @Autowired - private EncounterResource encounterResource; - @Autowired - private AppointmentResource appointmentResource; - @Autowired - private ConditionResource conditionResource; - @Autowired - private CommonService commonService; - @Autowired - private PatientEligibleForResourceCreationRepo patientEligibleForResourceCreationRepo; - @Autowired - private BenHealthIDMappingRepo benHealthIDMappingRepo; - @Autowired - private MedicationRequestResource medicationRequestResource; - @Autowired - private PractitionerResource practitionerResource; - @Autowired - private OrganizationResource organizationResource; - - @Override - public int processPrescriptionRecordBundle(ResourceRequestHandler resourceRequestHandler, - PatientEligibleForResourceCreation p) throws FHIRException { - int i = 0; - // call method to generate Prescription resource - String prescriptionRecordBundle = getPrescriptionRecordBundle(resourceRequestHandler, p); - - // call private method to create mongo object with resource data - AMRIT_ResourceMongo aMRIT_ResourceMongo = createPrescriptionRecordBundleMongo(p, prescriptionRecordBundle); - // if resource data is not null, save to mongo - if (aMRIT_ResourceMongo != null) { - i = commonService.saveResourceToMongo(aMRIT_ResourceMongo); - - } else - throw new FHIRException("TODO - exception - later will implement"); - - return i; - - } - - public String getPrescriptionRecordBundle(ResourceRequestHandler resourceRequestHandler, - PatientEligibleForResourceCreation p) throws FHIRException { - - Bundle bundle = new Bundle(); - bundle.setType(Bundle.BundleType.DOCUMENT); - // bundle id - bundle.setId(commonService.getUUID()); - - // bundle identifier - Identifier identifier = new Identifier(); - identifier.setSystem("https://www.max.in/bundle"); - identifier.setValue(bundle.getId()); - - bundle.setIdentifier(identifier); - - // timestamp - bundle.setTimestamp(new Timestamp(System.currentTimeMillis())); - bundle.setMeta(new Meta().setLastUpdated(new Date(System.currentTimeMillis()))); - FhirContext fhirContext = FhirContext.forR4(); - // practitioner - Practitioner practitioner = practitionerResource.getPractitioner(); - // organization - Organization organization = organizationResource.getOrganization(); - // 1. Patient Resource - Patient patient = patientResource.getPatientResource(resourceRequestHandler); - // 3. Condition resource - List condition = conditionResource.getCondition(patient, resourceRequestHandler, "diagnosis"); - // Medication request - List medicationRequest = medicationRequestResource.getMedicationRequest(patient, - resourceRequestHandler, practitioner, condition); - // composition - Composition composition = getCompositionResourcePrescription(patient, medicationRequest, practitioner); - - /*** - * adding into bundle - */ - - // composition - bundle.addEntry().setFullUrl(composition.getIdElement().getValue()).setResource(composition).getRequest() - .setUrl("Composition").setMethod(Bundle.HTTPVerb.POST); - // practitioner - bundle.addEntry().setFullUrl(organization.getIdElement().getValue()).setResource(organization).getRequest() - .setUrl("Practitioner").setMethod(Bundle.HTTPVerb.POST); - // organization - bundle.addEntry().setFullUrl(practitioner.getIdElement().getValue()).setResource(practitioner).getRequest() - .setUrl("Organization").setMethod(Bundle.HTTPVerb.POST); - // patient - bundle.addEntry().setFullUrl(patient.getIdElement().getValue()).setResource(patient).getRequest() - .setUrl("Patient").setMethod(Bundle.HTTPVerb.POST); - // medication request - for (MedicationRequest med : medicationRequest) { - bundle.addEntry().setFullUrl(med.getIdElement().getValue()).setResource(med).getRequest() - .setUrl("MedicationRequest").setMethod(Bundle.HTTPVerb.POST); - } - - // condition - for (Condition cond : condition) { - bundle.addEntry().setFullUrl(cond.getIdElement().getValue()).setResource(cond).getRequest() - .setUrl("Condition").setMethod(Bundle.HTTPVerb.POST); - } - - return fhirContext.newJsonParser().setPrettyPrint(true).encodeResourceToString(bundle); - } - - // method to create object to save to mongo DB - private AMRIT_ResourceMongo createPrescriptionRecordBundleMongo(PatientEligibleForResourceCreation p, - String prescriptionRecordBundle) { - AMRIT_ResourceMongo aMRIT_ResourceMongo = new AMRIT_ResourceMongo(); - aMRIT_ResourceMongo.setBeneficiaryID(p.getBeneficiaryId()); - aMRIT_ResourceMongo.setBeneficiaryRegID(p.getBeneficiaryRegID()); - // get ABHA from table "m_benhealthmapping" for this visit(visit code) - if (p.getVisitCode() != null) { - aMRIT_ResourceMongo.setVisitCode(p.getVisitCode()); - List objArrResultSet = benHealthIDMappingRepo.getLinkedHealthIDForVisit(p.getVisitCode()); - if (objArrResultSet != null && objArrResultSet.size() > 0) { - aMRIT_ResourceMongo.setNationalHealthID(objArrResultSet.get(0)); - } - } - - aMRIT_ResourceMongo.setResourceJson(prescriptionRecordBundle); - aMRIT_ResourceMongo.setResourceType("Prescription"); - - return aMRIT_ResourceMongo; - } - - private Composition getCompositionResourcePrescription(Patient patient, List medication, - Practitioner practitioner) { - Composition composition = new Composition(); - composition.setId("Composition/" + commonService.getUUID()); - composition.setStatus(CompositionStatus.FINAL); - composition.setSubject(new Reference(patient.getId())); - composition.setDate(new Date(System.currentTimeMillis())); - composition.setTitle("Prescription Document"); - // bundle identifier - Identifier identifier = new Identifier(); - identifier.setSystem("https://ndhm.in/phr"); - identifier.setValue(composition.getId()); - composition.setIdentifier(identifier); - - CodeableConcept cc = new CodeableConcept(); - Coding c = new Coding(); - c.setCode("440545006"); - c.setDisplay("Prescription record"); - c.setSystem("http://snomed.info/sct"); - cc.addCoding(c); - composition.setType(cc); - - composition.addAuthor(new Reference(practitioner.getIdElement().getValue())); - - List scList = new ArrayList<>(); - - // section - // rescription record - SectionComponent sc = new SectionComponent(); - sc.setTitle("Prescription record"); - CodeableConcept cc1 = new CodeableConcept(); - Coding c1 = new Coding(); - c1.setCode("440545006"); - c1.setDisplay("Prescription record"); - c1.setSystem("http://snomed.info/sct"); - cc1.addCoding(c1); - sc.setCode(cc1); - for (MedicationRequest med : medication) { - sc.addEntry(new Reference(med.getId())); - } - - scList.add(sc); - - composition.setSection(scList); - - return composition; - } -} diff --git a/src/main/java/com/wipro/fhir/service/resource_model/DiagnosticReportResource.java b/src/main/java/com/wipro/fhir/service/resource_model/DiagnosticReportResource.java index 14e2e82..e3dbbed 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/DiagnosticReportResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/DiagnosticReportResource.java @@ -21,7 +21,6 @@ */ package com.wipro.fhir.service.resource_model; -import java.math.BigInteger; import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/src/main/java/com/wipro/fhir/service/resource_model/EncounterResource.java b/src/main/java/com/wipro/fhir/service/resource_model/EncounterResource.java index d0f5aa4..645f553 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/EncounterResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/EncounterResource.java @@ -62,20 +62,20 @@ public class EncounterResource { private Encounter encounter; - public Encounter getEncounterResource(Patient patient, Appointment appointment, - ResourceRequestHandler resourceRequestHandler, List conditionListChiefComplaints, + public Encounter getEncounterResource(Patient patient, ResourceRequestHandler resourceRequestHandler, + List conditionListChiefComplaints, List conditionListDiagnosis) { List rsObjList = patientEligibleForResourceCreationRepo .callEncounterSP(resourceRequestHandler.getBeneficiaryRegID(), resourceRequestHandler.getVisitCode()); List encounterList = encounterDataModel.getEncounterList(rsObjList); - return generateEncounterResource(patient, appointment, encounterList, conditionListChiefComplaints, + return generateEncounterResource(patient, encounterList, conditionListChiefComplaints, conditionListDiagnosis); } - private Encounter generateEncounterResource(Patient patient, Appointment appointment, - List encounterList, List conditionListChiefComplaints, + private Encounter generateEncounterResource(Patient patient, List encounterList, + List conditionListChiefComplaints, List conditionListDiagnosis) { encounter = new Encounter(); diff --git a/src/main/java/com/wipro/fhir/service/resource_model/ImmunizationResource.java b/src/main/java/com/wipro/fhir/service/resource_model/ImmunizationResource.java new file mode 100644 index 0000000..bc551d0 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/resource_model/ImmunizationResource.java @@ -0,0 +1,103 @@ +package com.wipro.fhir.service.resource_model; + +import java.util.ArrayList; +import java.util.List; + +import org.hl7.fhir.r4.model.Annotation; +import org.hl7.fhir.r4.model.CodeableConcept; +import org.hl7.fhir.r4.model.Coding; +import org.hl7.fhir.r4.model.DateTimeType; +import org.hl7.fhir.r4.model.Immunization; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.Reference; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.data.resource_model.ImmunizationDataModel; +import com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; +import com.wipro.fhir.service.common.CommonService; +import com.wipro.fhir.utils.exception.FHIRException; + +@Service +public class ImmunizationResource { + + @Autowired + private CommonService commonService; + + @Autowired + private ImmunizationDataModel immunizationDataModel; + + @Autowired + private PatientEligibleForResourceCreationRepo patientEligibleForResourceCreationRepo; + + public List getImmunizations(Patient patient, ResourceRequestHandler resourceRequestHandler) + throws FHIRException { + + List rsObjList = patientEligibleForResourceCreationRepo.callImmunizationSP( + resourceRequestHandler.getBeneficiaryRegID(), resourceRequestHandler.getVisitCode()); + + List immunizationList = immunizationDataModel.getImmunizationList(rsObjList); + + // Build FHIR Immunization resources + return generateImmunizationResource(patient, immunizationList); + } + + private List generateImmunizationResource(Patient patient, List imList) { + + List immResourceList = new ArrayList<>(); + + int index = 0; + for (ImmunizationDataModel im : imList) { + index++; + + Immunization immune = new Immunization(); + + // Id style similar to your MedicationStatement example + immune.setId("Immunization-" + index + "/" + commonService.getUUID()); + + // Subject (patient) + immune.setPatient(new Reference(patient.getIdElement().getValue())); + + // NRCeS Immunization profile + immune.getMeta().addProfile("https://nrces.in/ndhm/fhir/r4/StructureDefinition/Immunization"); + + // Status (completed if we have a receivedDate, otherwise not-done) + if (im.getReceivedDate() != null) { + immune.setStatus(Immunization.ImmunizationStatus.COMPLETED); + immune.setOccurrence(new DateTimeType(im.getReceivedDate())); + } else { + // If you prefer to exclude not-done, comment the next line and add a + // `continue;` + immune.setStatus(Immunization.ImmunizationStatus.NOTDONE); + } + + // Vaccine code: prefer SNOMED if provided, else text fallback + CodeableConcept vaccineCC = new CodeableConcept(); + if (im.getSctcode() != null && !im.getSctcode().isEmpty()) { + vaccineCC.addCoding(new Coding().setSystem("http://snomed.info/sct").setCode(im.getSctcode()) + .setDisplay(im.getSctTerm() != null ? im.getSctTerm() : im.getVaccineName())); + } + // Always set text for human readability + vaccineCC.setText(im.getVaccineName()); + immune.setVaccineCode(vaccineCC); + + if (im.getCreatedDate() != null) { + immune.setRecorded(im.getCreatedDate()); + } + + // Optional free-text notes for age schedule and facility + if (im.getDefaultReceivingAge() != null && !im.getDefaultReceivingAge().isEmpty()) { + immune.addNote(new Annotation().setText("Schedule: " + im.getDefaultReceivingAge())); + } + if (im.getReceivedFacilityName() != null && !im.getReceivedFacilityName().isEmpty()) { + immune.addNote(new Annotation().setText("Facility: " + im.getReceivedFacilityName())); + } + + immResourceList.add(immune); + } + + return immResourceList; + } + +} diff --git a/src/main/java/com/wipro/fhir/service/resource_model/MedicalHistoryResource.java b/src/main/java/com/wipro/fhir/service/resource_model/MedicalHistoryResource.java new file mode 100644 index 0000000..6e3a5c5 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/resource_model/MedicalHistoryResource.java @@ -0,0 +1,73 @@ +package com.wipro.fhir.service.resource_model; + +import java.util.ArrayList; +import java.util.List; + +import org.hl7.fhir.r4.model.CodeableConcept; +import org.hl7.fhir.r4.model.Coding; +import org.hl7.fhir.r4.model.MedicationStatement; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.Reference; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.data.resource_model.MedicalHistoryDataModel; +import com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; +import com.wipro.fhir.service.common.CommonService; + +@Service +public class MedicalHistoryResource { + + @Autowired + private CommonService commonService; + @Autowired + private MedicalHistoryDataModel medicalHistoryDataModel; + + @Autowired + private PatientEligibleForResourceCreationRepo patientEligibleForResourceCreationRepo; + + public List getMedicalHistory(Patient patient, ResourceRequestHandler resourceRequestHandler) throws Exception { + + List rsObjList = patientEligibleForResourceCreationRepo.callMedicalHistorySp(resourceRequestHandler.getVisitCode()); + + List medicalList = medicalHistoryDataModel.getMedicalList(rsObjList); + + return generateMedicalHistoryResource(patient, medicalList); + + } + + private List generateMedicalHistoryResource(Patient patient, List msList) { + + List msResourceList = new ArrayList<>(); + + // For every medication entry, create a new MedicationStatement and add to list + int index = 0; + for(MedicalHistoryDataModel med: msList) { + index++; + + MedicationStatement ms = new MedicationStatement(); + + ms.setId("MedicationRequest-" + index + "/" + commonService.getUUID()); + ms.setSubject(new Reference(patient.getIdElement().getValue())); + + ms.getMeta().addProfile("https://nrces.in/ndhm/fhir/r4/StructureDefinition/MedicationStatement"); + ms.setStatus(MedicationStatement.MedicationStatementStatus.COMPLETED); + + CodeableConcept medCC = new CodeableConcept(); + medCC.addCoding(new Coding() + .setSystem("http://snomed.info/sct") + .setCode(" ") + .setDisplay(med.getCurrentMedication())); // scts code so kept only the name + + medCC.setText(med.getCurrentMedication()); + ms.setMedication(medCC); + ms.setDateAsserted(med.getCreatedDate()); + + msResourceList.add(ms); + } + + return msResourceList; + } + +} diff --git a/src/main/java/com/wipro/fhir/service/resource_model/MedicationRequestResource.java b/src/main/java/com/wipro/fhir/service/resource_model/MedicationRequestResource.java index 26e79e1..beeeda1 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/MedicationRequestResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/MedicationRequestResource.java @@ -21,7 +21,6 @@ */ package com.wipro.fhir.service.resource_model; -import java.math.BigInteger; import java.sql.Time; import java.util.ArrayList; import java.util.List; @@ -91,14 +90,16 @@ private List generateMedicationRequestResource(Patient patien List conceptList; List ref; + int index = 0; for (MedicationRequestDataModel obj : medicationRequestList) { + index++; medicationRequest = new MedicationRequest(); codeableConcept = new CodeableConcept(); c = new Coding(); cList = new ArrayList<>(); - medicationRequest.setId("MedicationRequest/" + commonService.getUUID()); + medicationRequest.setId("MedicationRequest-" + index + "/" + commonService.getUUID()); medicationRequest.setStatus(MedicationRequestStatus.ACTIVE); medicationRequest.setIntent(MedicationRequestIntent.ORDER); @@ -148,10 +149,12 @@ private List generateMedicationRequestResource(Patient patien // reason conceptList = new ArrayList(); ref = new ArrayList(); + if(conditionDiagnosis != null && conditionDiagnosis.size() > 0) { for (Condition cond : conditionDiagnosis) { ref.add(new Reference(cond.getId())); conceptList.add(cond.getCode()); } + } medicationRequest.setReasonCode(conceptList); medicationRequest.setReasonReference(ref); diff --git a/src/main/java/com/wipro/fhir/service/resource_model/ObservationResource.java b/src/main/java/com/wipro/fhir/service/resource_model/ObservationResource.java index 3bbc7a8..3f8446e 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/ObservationResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/ObservationResource.java @@ -63,8 +63,7 @@ public class ObservationResource { @Autowired private VitalsAnthropometryModel vitalsAnthropometryModel; - public List getObservationVitals(Patient patient, Encounter encounter, - ResourceRequestHandler resourceRequestHandler) { + public List getObservationVitals(Patient patient, ResourceRequestHandler resourceRequestHandler) { List vitals = patientEligibleForResourceCreationRepo.callVitals_AnthropometrySP( resourceRequestHandler.getBeneficiaryRegID(), resourceRequestHandler.getVisitCode()); diff --git a/src/main/java/com/wipro/fhir/service/resource_model/OrganizationResource.java b/src/main/java/com/wipro/fhir/service/resource_model/OrganizationResource.java index 59c7daa..6d6501c 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/OrganizationResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/OrganizationResource.java @@ -21,77 +21,90 @@ */ package com.wipro.fhir.service.resource_model; -import java.util.ArrayList; import java.util.List; import org.hl7.fhir.r4.model.Address; -import org.hl7.fhir.r4.model.ContactPoint; -import org.hl7.fhir.r4.model.ContactPoint.ContactPointSystem; import org.hl7.fhir.r4.model.Identifier; import org.hl7.fhir.r4.model.Organization; -import org.hl7.fhir.r4.model.Reference; -import org.hl7.fhir.r4.model.StringType; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.data.resource_model.OrganizationDataModel; +import com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; +import com.wipro.fhir.utils.exception.FHIRException; + @Service public class OrganizationResource { - private Organization organization; + + @Autowired + private PatientEligibleForResourceCreationRepo patientEligibleForResourceCreationRepo; + + @Autowired + private OrganizationDataModel organizationDataModel; + + public Organization getOrganizationResource(ResourceRequestHandler resourceRequestHandler) throws FHIRException { - public Organization getOrganization() { - return generateOrganizationResource(); + List rsObj = patientEligibleForResourceCreationRepo + .callOrganizationSp(resourceRequestHandler.getVisitCode()); + if (rsObj != null && !rsObj.isEmpty()) { + OrganizationDataModel orgData = organizationDataModel.getOrganization(rsObj.get(0)); + if (orgData != null) { + return generateOrganizationResource(orgData); + } else { + throw new FHIRException("Organization data not found"); + } + } else { + throw new FHIRException("Organization not found"); + } } - // generating dummy Practitioner resource - private Organization generateOrganizationResource() { - organization = new Organization(); - - organization.setId("Organization/MaxSaket01"); - organization.setName("Max Super Speciality Hospital, Saket"); - - List aliasList = new ArrayList<>(); - StringType alias = new StringType(); - alias.setValue("Max"); - aliasList.add(alias); - organization.setAlias(aliasList); - - List iList = new ArrayList<>(); - Identifier i = new Identifier(); - i.setSystem("https://facilitysbx.ndhm.gov.in"); - i.setValue("IN0410000183"); - iList.add(i); - organization.setIdentifier(iList); - - List cpList = new ArrayList<>(); - ContactPoint contactPoint = new ContactPoint(); - contactPoint.setSystem(ContactPointSystem.PHONE); - contactPoint.setValue("(+91) 011-2651-5050"); - cpList.add(contactPoint); - - organization.setTelecom(cpList); - - List
addressList = new ArrayList<>(); - Address address = new Address(); - address.setCity("New Delhi"); - address.setState("New Delhi"); - address.setPostalCode("New Delhi"); - address.setCountry("India"); - List addressLineList = new ArrayList<>(); - StringType addLine = new StringType(); - addLine.setValue("1, 2, Press Enclave Marg, Saket Institutional Area, Saket"); - addressLineList.add(addLine); - address.setLine(addressLineList); - addressList.add(address); - - organization.setAddress(addressList); - - List rlist = new ArrayList<>(); - Reference r = new Reference(); - r.setReference("https://www.max.in/hospital-network/max-super-speciality-hospital-saket"); - r.setDisplay("Website"); - rlist.add(r); - organization.setEndpoint(rlist); - - return organization; +private Organization generateOrganizationResource(OrganizationDataModel orgData) { + + Organization organization = new Organization(); + + organization.setId("Organization/" + orgData.getServiceProviderID()); + + if (orgData.getServiceProviderName() != null) { + organization.setName(orgData.getServiceProviderName()); + } + + // Alias + if (orgData.getLocationName() != null) { + organization.addAlias(orgData.getLocationName()); + } + + // Identifier (ABDM Facility ID) + if (orgData.getAbdmFacilityId() != null) { + Identifier identifier = new Identifier(); + identifier.setSystem("https://facilitysbx.ndhm.gov.in"); + identifier.setValue(orgData.getAbdmFacilityId()); + organization.addIdentifier(identifier); + } + + // Address + Address address = new Address(); + + if (orgData.getAddress() != null) { + address.addLine(orgData.getAddress()); + } + + if (orgData.getDistrictName() != null) { + address.setDistrict(orgData.getDistrictName()); + } + + if (orgData.getStateName() != null) { + address.setState(orgData.getStateName()); + } + + address.setCountry("India"); + + organization.addAddress(address); + + + return organization; } + + } diff --git a/src/main/java/com/wipro/fhir/service/resource_model/PatientResource.java b/src/main/java/com/wipro/fhir/service/resource_model/PatientResource.java index 3731a6e..7309f42 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/PatientResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/PatientResource.java @@ -21,7 +21,6 @@ */ package com.wipro.fhir.service.resource_model; -import java.math.BigInteger; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/wipro/fhir/service/resource_model/PractitionerResource.java b/src/main/java/com/wipro/fhir/service/resource_model/PractitionerResource.java index 2f71094..5d353e0 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/PractitionerResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/PractitionerResource.java @@ -24,57 +24,119 @@ import java.util.ArrayList; import java.util.List; +import org.hl7.fhir.r4.model.ContactPoint; +import org.hl7.fhir.r4.model.ContactPoint.ContactPointSystem; +import org.hl7.fhir.r4.model.Enumerations.AdministrativeGender; import org.hl7.fhir.r4.model.HumanName; import org.hl7.fhir.r4.model.Identifier; import org.hl7.fhir.r4.model.Practitioner; import org.hl7.fhir.r4.model.StringType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.data.resource_model.PractitionerDataModel; +import com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; +import com.wipro.fhir.utils.exception.FHIRException; + @Service public class PractitionerResource { - - private Practitioner practitioner; - - public Practitioner getPractitioner() { - return generatePractitionerResource(); - + @Autowired + private PatientEligibleForResourceCreationRepo patientEligibleForResourceCreationRepo; + + @Autowired + private PractitionerDataModel practitionerDataModel; + + @Value("${hipSystemUrl}") + private String systemUrl; + + public Practitioner getPractitionerResource(ResourceRequestHandler resourceRequestHandler) + throws FHIRException { + + List rsObj = patientEligibleForResourceCreationRepo.callPractitionerSP(resourceRequestHandler.getVisitCode()); + + if (rsObj == null || rsObj.isEmpty()) { + throw new FHIRException("invalid practitioner data"); + } + + PractitionerDataModel practitionerData = practitionerDataModel.getPractitioner(rsObj.get(0)); + return generatePractitionerResource(practitionerData); } - - // generating dummy Practitioner resource - private Practitioner generatePractitionerResource() { - practitioner = new Practitioner(); - - practitioner.setId("Practitioner/MAX1456"); - - List iList = new ArrayList<>(); - Identifier i = new Identifier(); - i.setSystem("https://www.mciindia.in/doctor"); - i.setValue("MAX1456"); - iList.add(i); - practitioner.setIdentifier(iList); - - List pNameList = new ArrayList<>(); - HumanName hName = new HumanName(); - - hName.setText("Harsh Dhave"); - - List stList = new ArrayList<>(); - StringType st = new StringType(); - st.setValue("Dr"); - stList.add(st); - hName.setPrefix(stList); - - List stList1 = new ArrayList<>(); - StringType st1 = new StringType(); - st.setValue("MBBS"); - stList1.add(st1); - hName.setSuffix(stList1); - - pNameList.add(hName); - - practitioner.setName(pNameList); + + private Practitioner generatePractitionerResource(PractitionerDataModel practitionerData) { + + Practitioner practitioner = new Practitioner(); + + // ID + practitioner.setId("Practitioner/" + practitionerData.getUserID()); + + // Identifier (Employee / Registration ID) + if (practitionerData.getEmployeeID() != null) { + Identifier identifier = new Identifier(); + identifier.setSystem(systemUrl); + identifier.setValue(practitionerData.getEmployeeID()); + practitioner.addIdentifier(identifier); + } + + // Name + HumanName name = new HumanName(); + + if (practitionerData.getFullName() != null) { + name.setText(practitionerData.getFullName()); + } + + // Prefix (Designation) + if (practitionerData.getDesignationName() != null) { + name.addPrefix(practitionerData.getDesignationName()); + } + + // Suffix (Qualification) + if (practitionerData.getQualificationName() != null) { + name.addSuffix(practitionerData.getQualificationName()); + } + + practitioner.addName(name); + + // Gender + if (practitionerData.getGenderName() != null) { + switch (practitionerData.getGenderName()) { + case "Male": + practitioner.setGender(AdministrativeGender.MALE); + break; + case "Female": + practitioner.setGender(AdministrativeGender.FEMALE); + break; + default: + practitioner.setGender(AdministrativeGender.UNKNOWN); + break; + } + } + + // DOB + if (practitionerData.getDob() != null) { + practitioner.setBirthDate(practitionerData.getDob()); + } + + // Telecom - Phone + if (practitionerData.getContactNo() != null) { + ContactPoint phone = new ContactPoint(); + phone.setSystem(ContactPointSystem.PHONE); + phone.setValue(practitionerData.getContactNo()); + practitioner.addTelecom(phone); + } + + // Telecom - Email + if (practitionerData.getEmailID() != null) { + ContactPoint email = new ContactPoint(); + email.setSystem(ContactPointSystem.EMAIL); + email.setValue(practitionerData.getEmailID()); + practitioner.addTelecom(email); + } return practitioner; } + + } diff --git a/src/main/java/com/wipro/fhir/service/v3/abha/CreateAbhaV3ServiceImpl.java b/src/main/java/com/wipro/fhir/service/v3/abha/CreateAbhaV3ServiceImpl.java index e25211d..2e27d8e 100644 --- a/src/main/java/com/wipro/fhir/service/v3/abha/CreateAbhaV3ServiceImpl.java +++ b/src/main/java/com/wipro/fhir/service/v3/abha/CreateAbhaV3ServiceImpl.java @@ -280,7 +280,6 @@ public String verifyAuthByAbdm(String request) throws FHIRException { DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; String formattedTimestamp = now.format(formatter); otp.setTimestamp(formattedTimestamp); - otp.setTxnId(loginMethod.getTxnId()); otp.setOtpValue(encryptedLoginId); diff --git a/src/main/java/com/wipro/fhir/service/v3/careContext/CareContextLinkingService.java b/src/main/java/com/wipro/fhir/service/v3/careContext/CareContextLinkingService.java new file mode 100644 index 0000000..1740739 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/v3/careContext/CareContextLinkingService.java @@ -0,0 +1,11 @@ +package com.wipro.fhir.service.v3.careContext; + +import com.wipro.fhir.utils.exception.FHIRException; + +public interface CareContextLinkingService { + + String generateTokenForCareContext(String request) throws FHIRException; + + String linkCareContext(String request) throws FHIRException; + +} diff --git a/src/main/java/com/wipro/fhir/service/v3/careContext/CareContextLinkingServiceImpl.java b/src/main/java/com/wipro/fhir/service/v3/careContext/CareContextLinkingServiceImpl.java new file mode 100644 index 0000000..5079ffc --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/v3/careContext/CareContextLinkingServiceImpl.java @@ -0,0 +1,400 @@ +package com.wipro.fhir.service.v3.careContext; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.TimeZone; +import java.util.UUID; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; + +import org.joda.time.DateTime; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatusCode; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.wipro.fhir.data.mongo.care_context.GenerateTokenAbdmResponses; +import com.wipro.fhir.data.v3.abhaCard.LoginMethod; +import com.wipro.fhir.data.v3.abhaCard.RequestOTPEnrollment; +import com.wipro.fhir.data.v3.careContext.CareContextLinkTokenRequest; +import com.wipro.fhir.data.v3.careContext.CareContexts; +import com.wipro.fhir.data.v3.careContext.GenerateCareContextTokenRequest; +import com.wipro.fhir.data.v3.careContext.LinkCareContextRequest; +import com.wipro.fhir.data.v3.careContext.PatientCareContext; +import com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; +import com.wipro.fhir.repo.v3.careContext.CareContextRepo; +import com.wipro.fhir.data.v3.careContext.AddCareContextRequest; +import com.wipro.fhir.service.ndhm.Common_NDHMService; +import com.wipro.fhir.service.v3.abha.GenerateAuthSessionService; +import com.wipro.fhir.utils.exception.FHIRException; +import com.wipro.fhir.utils.mapper.InputMapper; + +@Service +public class CareContextLinkingServiceImpl implements CareContextLinkingService { + + @Autowired + private GenerateAuthSessionService generateAuthSessionService; + + @Autowired + private Common_NDHMService common_NDHMService; + + @Autowired + private GenerateTokenAbdmResponsesRepo generateTokenAbdmResponsesRepo; + + @Value("${x-CM-ID}") + String abhaMode; + + @Value("${abdmFacilityId}") + String abdmFacilityId; + + @Value("${generateTokenForLinkCareContext}") + String generateTokenForLinkCareContext; + + @Value("${linkCareContext}") + String linkCareContext; + + @Autowired + private CareContextRepo careContextRepo; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + @Override + public String generateTokenForCareContext(String request) throws FHIRException { + String res = null; + String linkToken = null; + Map responseMap = new HashMap<>(); + RestTemplate restTemplate = new RestTemplate(); + String linkExists = null; + + try { + String abhaAuthToken = generateAuthSessionService.getAbhaAuthToken(); + CareContextLinkTokenRequest careContextLinkRequest = InputMapper.gson().fromJson(request, + CareContextLinkTokenRequest.class); + + if (null != careContextLinkRequest.getAbhaAddress()) { + linkExists = checkRecordExisits(careContextLinkRequest.getAbhaAddress()); + } + if(linkExists != null) { + responseMap.put("linkToken", linkExists); + } else { + + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add("Content-Type", MediaType.APPLICATION_JSON + ";charset=utf-8"); + String requestId = UUID.randomUUID().toString(); + headers.add("REQUEST-ID", requestId); + + TimeZone tz = TimeZone.getTimeZone("UTC"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + df.setTimeZone(tz); + String nowAsISO = df.format(new Date()); + headers.add("TIMESTAMP", nowAsISO); + headers.add("Authorization", abhaAuthToken); + headers.add("X-CM-ID", abhaMode); + if (null != careContextLinkRequest.getAbdmFacilityId() + && "" != careContextLinkRequest.getAbdmFacilityId()) { + headers.add("X-HIP-ID", careContextLinkRequest.getAbdmFacilityId()); + } else { + headers.add("X-HIP-ID", abdmFacilityId); + } + + GenerateCareContextTokenRequest generateTokenRequest = new GenerateCareContextTokenRequest(); + if (null != careContextLinkRequest.getAbhaNumber() && careContextLinkRequest.getAbhaNumber().isEmpty() ) { + String abha = careContextLinkRequest.getAbhaNumber(); + String abhaNumber = abha.replace("-", ""); + generateTokenRequest.setAbhaNumber(abhaNumber); + } + + generateTokenRequest.setAbhaAddress(careContextLinkRequest.getAbhaAddress()); + generateTokenRequest.setName(careContextLinkRequest.getName()); + generateTokenRequest.setYearOfBirth(careContextLinkRequest.getYearOfBirth()); + + if (careContextLinkRequest.getGender().equalsIgnoreCase("female")) { + generateTokenRequest.setGender("F"); + } else if (careContextLinkRequest.getGender().equalsIgnoreCase("male")) { + generateTokenRequest.setGender("M"); + } else { + generateTokenRequest.setGender("O"); + } + + String requestOBJ = new Gson().toJson(generateTokenRequest); + logger.info("ABDM reqobj for generate token link for carecontext : " + requestOBJ); + + HttpEntity httpEntity = new HttpEntity<>(requestOBJ, headers); + ResponseEntity responseEntity = restTemplate.exchange(generateTokenForLinkCareContext, + HttpMethod.POST, httpEntity, String.class); + + logger.info("ABDM response for generate token link for carecontext : " + responseEntity); + String responseStrLogin = common_NDHMService.getBody(responseEntity); + JsonParser jsnParser = new JsonParser(); + if (responseEntity.getStatusCode() == HttpStatusCode.valueOf(202)) { + GenerateTokenAbdmResponses mongoResponse = common_NDHMService.getLinkToken(requestId); + responseMap.put("requestId", requestId); + if (mongoResponse != null && mongoResponse.getResponse() != null) { + String abhaResponse = mongoResponse.getResponse(); + JsonElement jsonElement = jsnParser.parse(abhaResponse); + JsonObject jsonObject = jsonElement.getAsJsonObject(); + + try { + JsonElement linkTokenElement = jsonObject.get("LinkToken"); + + if (linkTokenElement != null && !linkTokenElement.isJsonNull()) { + linkToken = linkTokenElement.getAsString(); + responseMap.put("X-LINK-TOKEN", linkToken); + logger.info("Mongo has link token"); + } else { + if (jsonObject.has("Error") && !jsonObject.get("Error").isJsonNull()) { + JsonObject errorObject = jsonObject.getAsJsonObject("Error"); + logger.info("Mongo has no link token other message - " + errorObject.toString()); + responseMap.put("error", errorObject.toString()); + } else { + responseMap.put("error", "Unknown error"); + } + } + } catch (Exception e) { + throw new FHIRException("ABDM_FHIR Error while parsing response: " + e.getMessage()); + } + + } + + } else { + throw new FHIRException(responseEntity.getBody()); + } + } + } catch (Exception e) { + throw new FHIRException(e.getMessage()); + } + + return new Gson().toJson(responseMap); + } + + @Override + public String linkCareContext(String request) throws FHIRException { + String linkToken = null; + Map responseMap = new HashMap<>(); + RestTemplate restTemplate = new RestTemplate(); + + try { + String abhaAuthToken = generateAuthSessionService.getAbhaAuthToken(); + AddCareContextRequest addCareContextRequest = InputMapper.gson().fromJson(request, + AddCareContextRequest.class); + MultiValueMap headers = new LinkedMultiValueMap<>(); + JsonParser jsnParser = new JsonParser(); + + if (null != addCareContextRequest.getLinkToken()) { + linkToken = addCareContextRequest.getLinkToken(); + headers.add("X-LINK-TOKEN", addCareContextRequest.getLinkToken()); + } else { // if link token is not found then fetch from mongo DB + GenerateTokenAbdmResponses mongoResponse = common_NDHMService + .getLinkToken(addCareContextRequest.getRequestId()); + if (mongoResponse != null && mongoResponse.getResponse() != null) { + String abhaResponse = mongoResponse.getResponse(); + JsonElement jsonElement = jsnParser.parse(abhaResponse); + JsonObject jsonObject = jsonElement.getAsJsonObject(); + + try { + JsonElement linkTokenElement = jsonObject.get("LinkToken"); + if (linkTokenElement != null && !linkTokenElement.isJsonNull()) { + linkToken = linkTokenElement.getAsString(); + headers.add("X-LINK-TOKEN", linkToken); + } else { + if (jsonObject.has("Error") && !jsonObject.get("Error").isJsonNull()) { + JsonObject errorObject = jsonObject.getAsJsonObject("Error"); + responseMap.put("error", errorObject.toString()); + } else { + responseMap.put("error", "Unknown error"); + } + } + } catch (Exception e) { + throw new FHIRException("ABDM_FHIR Error while parsing response: " + e.getMessage()); + } + } + + } + + if (linkToken != null) { + + headers.add("Content-Type", MediaType.APPLICATION_JSON + ";charset=utf-8"); + headers.add("REQUEST-ID", UUID.randomUUID().toString()); + + TimeZone tz = TimeZone.getTimeZone("UTC"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + df.setTimeZone(tz); + String nowAsISO = df.format(new Date()); + headers.add("TIMESTAMP", nowAsISO); + headers.add("Authorization", abhaAuthToken); + headers.add("X-CM-ID", abhaMode); + if (null != addCareContextRequest.getAbdmFacilityId() + && addCareContextRequest.getAbdmFacilityId().isEmpty()) { + headers.add("X-HIP-ID", addCareContextRequest.getAbdmFacilityId()); + } else { + headers.add("X-HIP-ID", abdmFacilityId); + } + + String[] hiTypes = findHiTypes(addCareContextRequest.getVisitCode(), + addCareContextRequest.getVisitCategory()); + + LinkCareContextRequest linkCareContextRequest = new LinkCareContextRequest(); + CareContexts careContexts = new CareContexts(); + ArrayList pcc = new ArrayList(); + + for (String hiType : hiTypes) { + PatientCareContext patient = new PatientCareContext(); + + ArrayList cc = new ArrayList(); + careContexts.setReferenceNumber(addCareContextRequest.getVisitCode()); + careContexts.setDisplay(addCareContextRequest.getVisitCategory()); + cc.add(careContexts); + + patient.setReferenceNumber(addCareContextRequest.getVisitCode()); + patient.setDisplay(addCareContextRequest.getVisitCategory() + " - " + hiType + " care context of " + + addCareContextRequest.getAbhaNumber()); + patient.setCount(1); + patient.setCareContexts(cc); + patient.setHiType(hiType); + pcc.add(patient); + } + + if (null != addCareContextRequest.getAbhaNumber() && addCareContextRequest.getAbhaNumber().isEmpty()) { + String abha = addCareContextRequest.getAbhaNumber(); + String abhaNumber = abha.replace("-", ""); + linkCareContextRequest.setAbhaNumber(abhaNumber); + } + + linkCareContextRequest.setAbhaAddress(addCareContextRequest.getAbhaAddress()); + linkCareContextRequest.setPatient(pcc); + + String requestOBJ = new Gson().toJson(linkCareContextRequest); + logger.info("ABDM reqobj for link for carecontext : " + requestOBJ); + + HttpEntity httpEntity = new HttpEntity<>(requestOBJ, headers); + ResponseEntity responseEntity = restTemplate.exchange(linkCareContext, HttpMethod.POST, + httpEntity, String.class); + + logger.info("ABDM response for generate token link for carecontext : " + responseEntity); + String responseStrLogin = common_NDHMService.getBody(responseEntity); + if (responseEntity.getStatusCode() == HttpStatusCode.valueOf(202)) { + responseMap.put("message", "Care Context added successfully"); + + } else { + JsonObject json = JsonParser.parseString(responseEntity.getBody()).getAsJsonObject(); + if (json.has("error")) { + JsonObject errorObj = json.getAsJsonObject("error"); + String message = errorObj.has("message") ? errorObj.get("message").getAsString() + : "Unknown error"; + responseMap.put("error", message); + } else { + responseMap.put("error", "Unknown error"); + } + } + } + } catch (Exception e) { + String msg = e.getMessage(); + String jsonString = null; + int start = msg.indexOf("{"); + int end = msg.lastIndexOf("}"); + + if (start != -1 && end != -1) { + jsonString = msg.substring(start, end + 1); + } + + if (jsonString != null) { + JsonObject json = JsonParser.parseString(jsonString).getAsJsonObject(); + if (json.has("error")) { + JsonObject errorObj = json.getAsJsonObject("error"); + String message = errorObj.has("message") ? errorObj.get("message").getAsString() : "Unknown error"; + throw new FHIRException(message); + } + + throw new FHIRException(e.getMessage()); + } + } + + return new Gson().toJson(responseMap); + } + + public String checkRecordExisits(String abhaAddress) { + GenerateTokenAbdmResponses result = generateTokenAbdmResponsesRepo.findByAbhaAddress(abhaAddress); + logger.info("find by abha address result - ", result); + String linkResponse = null; + + if (result != null && result.getCreatedDate() != null) { + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.MONTH, -3); + Date threeMonthsAgo = cal.getTime(); + linkResponse = result.getResponse(); + + if (result.getCreatedDate().after(threeMonthsAgo)) { + if (linkResponse != null) { + try { + ObjectMapper mapper = new ObjectMapper(); + JsonNode root = mapper.readTree(linkResponse); + JsonNode linkToken = root.path("LinkToken"); + if (!linkToken.isNull() && !linkToken.isMissingNode()) { + return linkToken.asText(); + } + } catch (Exception e) { + logger.info("failed abha exists check with exception - ", e.getMessage()); + return null; + } + } + } + } + + return linkResponse; + } + + public String[] findHiTypes(String visitCode, String visitCategory) { + + List hiTypes = new ArrayList<>(); + if (visitCategory.equalsIgnoreCase("General OPD")) { + hiTypes.add("OPConsultation"); + } else if (visitCategory.equalsIgnoreCase("General OPD (QC)")) { + hiTypes.add("OPConsultation"); + } + hiTypes.add("DischargeSummary"); + + int hasPhyVitals = careContextRepo.hasPhyVitals(visitCode); + if(hasPhyVitals > 0) { + hiTypes.add("WellnessRecord"); + } + int hasPrescription = careContextRepo.hasPrescribedDrugs(visitCode); + if (hasPrescription > 0) { + hiTypes.add("Prescription"); + } + + int hasLabTests = careContextRepo.hasLabtestsDone(visitCode); + if (hasLabTests > 0) { + hiTypes.add("DiagnosticReport"); + } + + int hasVaccineDetails = careContextRepo.hasVaccineDetails(visitCode); + if (hasVaccineDetails > 0) { + hiTypes.add("ImmunizationRecord"); + } + logger.info("HiTypes", hiTypes); + return hiTypes.toArray(new String[0]); + } + +} + From 4388d59b8d4bcde897c5c93a7002179d31908957 Mon Sep 17 00:00:00 2001 From: Helen Grace Karyamsetty <133211481+helenKaryamsetty@users.noreply.github.com> Date: Wed, 31 Dec 2025 01:33:02 +0530 Subject: [PATCH 4/7] Small correction (#131) * Abdm v3 (#112) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * Update pom.xml * mongo query change fetch to linktoken (#113) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * Abdm v3 (#114) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * ABDM Abdm HiTypes addition in linktoken (#115) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: corrected spelling mistake Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: modified repo queries Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Minor fixes (#116) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * response correction (#117) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * generate token logic change (#120) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * hiType correction and modification in error message format (#121) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * Fix display setting for patient care context --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * Modified error message display (#122) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * modified error message --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * M2 FHIR bundles creation (#123) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * modified error message * feat: new standard FHIR bundles creation * Fix environment variable for systemUrl * Fix formatting of systemUrl property * fix: taken coderabbitai comments and minor changes --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * added missed variable change (#124) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * modified error message * feat: new standard FHIR bundles creation * Fix environment variable for systemUrl * Fix formatting of systemUrl property * fix: taken coderabbitai comments and minor changes * fix: changed missed variable --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * Modified the constructor for better handling (#125) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * modified error message * feat: new standard FHIR bundles creation * Fix environment variable for systemUrl * Fix formatting of systemUrl property * fix: taken coderabbitai comments and minor changes * fix: changed missed variable * fix: modified the constructor * Change exception message for Organization resource * Fix typo in exception message for PractitionerDataModel --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * medication statement correction (#126) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * modified error message * feat: new standard FHIR bundles creation * Fix environment variable for systemUrl * Fix formatting of systemUrl property * fix: taken coderabbitai comments and minor changes * fix: changed missed variable * fix: modified the constructor * Change exception message for Organization resource * Fix typo in exception message for PractitionerDataModel * fix: corrected type error --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * Bundle model fixes (#127) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * modified error message * feat: new standard FHIR bundles creation * Fix environment variable for systemUrl * Fix formatting of systemUrl property * fix: taken coderabbitai comments and minor changes * fix: changed missed variable * fix: modified the constructor * Change exception message for Organization resource * Fix typo in exception message for PractitionerDataModel * fix: corrected type error * fix: correct medication histoory model class --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * Update jboss-web.xml * Update common_docker.properties * Delete src/main/environment/common_test.properties * Delete src/main/environment/common_dev.properties * taken coderabbit comments (#129) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * modified error message * feat: new standard FHIR bundles creation * Fix environment variable for systemUrl * Fix formatting of systemUrl property * fix: taken coderabbitai comments and minor changes * fix: changed missed variable * fix: modified the constructor * Change exception message for Organization resource * Fix typo in exception message for PractitionerDataModel * fix: corrected type error * fix: correct medication histoory model class * fix: taken coderabbitai comments --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace * Update CareContextRepo.java * merging small error (#130) * Abdm Facility fetch services changes * facility save after carecontext and patientcarecontextx update * FacilityId save in mongo db and Variable declaration correction * Mongo carecontext save query logic changes * ABHA Creation M1 V3 API changes * Abha V3 changes * removed unused code * v3- verify auth by abdm API changes * feat: Abdm M2 V3 changes * feat: mongo query change fetch for linktoken * fix: link carecontext authorization error * feat: hiTypes addition * feat: version change for testing * fix: minor change for empty response * Simplify queries in CareContextRepo interface Removed unnecessary 'order by 1 desc' clause from queries. * fix: corrected response format * fix: minor logic change for care context linking * small correction in hiType and error message modification * modified error message * feat: new standard FHIR bundles creation * Fix environment variable for systemUrl * Fix formatting of systemUrl property * fix: taken coderabbitai comments and minor changes * fix: changed missed variable * fix: modified the constructor * Change exception message for Organization resource * Fix typo in exception message for PractitionerDataModel * fix: corrected type error * fix: correct medication histoory model class * fix: taken coderabbitai comments * fix: modified small mistake --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace --------- Co-authored-by: KA40094929 Co-authored-by: KA40094929 Co-authored-by: Karyamsetty Helen Grace Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../v3/careContext/CareContextLinkingServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/wipro/fhir/service/v3/careContext/CareContextLinkingServiceImpl.java b/src/main/java/com/wipro/fhir/service/v3/careContext/CareContextLinkingServiceImpl.java index 5079ffc..40fcb06 100644 --- a/src/main/java/com/wipro/fhir/service/v3/careContext/CareContextLinkingServiceImpl.java +++ b/src/main/java/com/wipro/fhir/service/v3/careContext/CareContextLinkingServiceImpl.java @@ -119,7 +119,7 @@ public String generateTokenForCareContext(String request) throws FHIRException { } GenerateCareContextTokenRequest generateTokenRequest = new GenerateCareContextTokenRequest(); - if (null != careContextLinkRequest.getAbhaNumber() && careContextLinkRequest.getAbhaNumber().isEmpty() ) { + if (null != careContextLinkRequest.getAbhaNumber() && !careContextLinkRequest.getAbhaNumber().isEmpty() ) { String abha = careContextLinkRequest.getAbhaNumber(); String abhaNumber = abha.replace("-", ""); generateTokenRequest.setAbhaNumber(abhaNumber); @@ -245,7 +245,7 @@ public String linkCareContext(String request) throws FHIRException { headers.add("Authorization", abhaAuthToken); headers.add("X-CM-ID", abhaMode); if (null != addCareContextRequest.getAbdmFacilityId() - && addCareContextRequest.getAbdmFacilityId().isEmpty()) { + && !addCareContextRequest.getAbdmFacilityId().isEmpty()) { headers.add("X-HIP-ID", addCareContextRequest.getAbdmFacilityId()); } else { headers.add("X-HIP-ID", abdmFacilityId); @@ -275,7 +275,7 @@ public String linkCareContext(String request) throws FHIRException { pcc.add(patient); } - if (null != addCareContextRequest.getAbhaNumber() && addCareContextRequest.getAbhaNumber().isEmpty()) { + if (null != addCareContextRequest.getAbhaNumber() && !addCareContextRequest.getAbhaNumber().isEmpty()) { String abha = addCareContextRequest.getAbhaNumber(); String abhaNumber = abha.replace("-", ""); linkCareContextRequest.setAbhaNumber(abhaNumber); From c1ac206dc093efd512cd35a187afe6a3c4f236f5 Mon Sep 17 00:00:00 2001 From: Vanitha S <116701245+vanitha1822@users.noreply.github.com> Date: Fri, 30 Jan 2026 12:45:47 +0530 Subject: [PATCH 5/7] Fix the sync issue of Abha Details in Elasticsearch (#133) * fix: abha details sync to ES * fix: add environment variables in common properties file * fix: extend the connection timeout --- .../Logs/fhir-api.log.json | 615 ++++++++++++++++++ pom.xml | 24 + src/main/environment/common_ci.properties | 10 + src/main/environment/common_docker.properties | 11 + .../environment/common_example.properties | 13 +- .../com/wipro/fhir/FhirApiApplication.java | 2 + .../fhir/config/ElasticsearchConfig.java | 104 +++ .../AbhaElasticsearchSyncService.java | 160 +++++ .../service/healthID/HealthIDServiceImpl.java | 171 +++-- src/main/resources/application.properties | 74 ++- 10 files changed, 1105 insertions(+), 79 deletions(-) create mode 100644 E:/uat_new/wildfly-30.0.0.Final/wildfly-30.0.0.Final/Logs/fhir-api.log.json create mode 100644 src/main/java/com/wipro/fhir/config/ElasticsearchConfig.java create mode 100644 src/main/java/com/wipro/fhir/service/elasticsearch/AbhaElasticsearchSyncService.java diff --git a/E:/uat_new/wildfly-30.0.0.Final/wildfly-30.0.0.Final/Logs/fhir-api.log.json b/E:/uat_new/wildfly-30.0.0.Final/wildfly-30.0.0.Final/Logs/fhir-api.log.json new file mode 100644 index 0000000..fb0a10c --- /dev/null +++ b/E:/uat_new/wildfly-30.0.0.Final/wildfly-30.0.0.Final/Logs/fhir-api.log.json @@ -0,0 +1,615 @@ +{"@timestamp":"2026-01-21T16:09:28.807Z", "log.level": "INFO", "message":"Starting FhirApiApplication using Java 17.0.17 with PID 13206 (/home/ds/Documents/Amrit/Backend/FHIR-API/target/classes started by ds in /home/ds/Documents/Amrit/Backend/FHIR-API)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.wipro.fhir.FhirApiApplication"} +{"@timestamp":"2026-01-21T16:09:28.808Z", "log.level": "INFO", "message":"No active profile set, falling back to 1 default profile: \"default\"", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.wipro.fhir.FhirApiApplication"} +{"@timestamp":"2026-01-21T16:09:29.534Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:09:29.535Z", "log.level": "INFO", "message":"Bootstrapping Spring Data Elasticsearch repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:09:29.567Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.568Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.568Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.569Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.570Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.571Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.572Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.572Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.573Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.573Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.574Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.574Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.575Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.576Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.577Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.577Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.578Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.579Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.579Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.580Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.581Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.582Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.583Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.583Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.584Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.584Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.585Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.586Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.586Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.587Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 48 ms. Found 0 Elasticsearch repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:09:29.591Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:09:29.592Z", "log.level": "INFO", "message":"Bootstrapping Spring Data Reactive Elasticsearch repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:09:29.601Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.601Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.602Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.602Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.602Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.602Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.602Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.602Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.603Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.603Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.603Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.603Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.603Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.604Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.604Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.604Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.605Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.605Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.605Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.605Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.605Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.606Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.606Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.606Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.606Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.607Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.607Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.607Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.607Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.607Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 15 ms. Found 0 Reactive Elasticsearch repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:09:29.613Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:09:29.614Z", "log.level": "INFO", "message":"Bootstrapping Spring Data JPA repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:09:29.625Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.625Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.626Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.626Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.699Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.700Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.700Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.700Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.701Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.701Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.745Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 128 ms. Found 19 JPA repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:09:29.775Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:09:29.775Z", "log.level": "INFO", "message":"Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:09:29.783Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.783Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.784Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.784Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.784Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.784Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.784Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.784Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.786Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.786Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.786Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.804Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 29 ms. Found 9 MongoDB repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:09:29.813Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:09:29.814Z", "log.level": "INFO", "message":"Bootstrapping Spring Data Redis repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:09:29.828Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.828Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.828Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.828Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.828Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.829Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.829Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.829Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.829Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.829Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.829Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.830Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.830Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.830Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.830Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.830Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.832Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.832Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.832Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.834Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.834Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:09:29.834Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 15 ms. Found 0 Redis repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:09:30.324Z", "log.level": "INFO", "message":"Tomcat initialized with port 8093 (http)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer"} +{"@timestamp":"2026-01-21T16:09:30.332Z", "log.level": "INFO", "message":"Starting service [Tomcat]", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.apache.catalina.core.StandardService"} +{"@timestamp":"2026-01-21T16:09:30.332Z", "log.level": "INFO", "message":"Starting Servlet engine: [Apache Tomcat/10.1.18]", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.apache.catalina.core.StandardEngine"} +{"@timestamp":"2026-01-21T16:09:30.383Z", "log.level": "INFO", "message":"Initializing Spring embedded WebApplicationContext", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]"} +{"@timestamp":"2026-01-21T16:09:30.384Z", "log.level": "INFO", "message":"Root WebApplicationContext: initialization completed in 1522 ms", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext"} +{"@timestamp":"2026-01-21T16:09:30.683Z", "log.level": "INFO", "message":"HHH000204: Processing PersistenceUnitInfo [name: default]", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.jpa.internal.util.LogHelper"} +{"@timestamp":"2026-01-21T16:09:30.721Z", "log.level": "INFO", "message":"HHH000412: Hibernate ORM core version 6.4.1.Final", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.Version"} +{"@timestamp":"2026-01-21T16:09:30.745Z", "log.level": "INFO", "message":"HHH000026: Second-level cache disabled", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.cache.internal.RegionFactoryInitiator"} +{"@timestamp":"2026-01-21T16:09:30.893Z", "log.level": "INFO", "message":"No LoadTimeWeaver setup: ignoring JPA class transformer", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo"} +{"@timestamp":"2026-01-21T16:09:30.911Z", "log.level": "INFO", "message":"HikariPool-1 - Starting...", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.zaxxer.hikari.HikariDataSource"} +{"@timestamp":"2026-01-21T16:09:34.394Z", "log.level": "INFO", "message":"HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@28e8dee7", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.zaxxer.hikari.pool.HikariPool"} +{"@timestamp":"2026-01-21T16:09:34.397Z", "log.level": "INFO", "message":"HikariPool-1 - Start completed.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.zaxxer.hikari.HikariDataSource"} +{"@timestamp":"2026-01-21T16:09:34.775Z", "log.level": "WARN", "message":"HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.orm.deprecation"} +{"@timestamp":"2026-01-21T16:09:35.674Z", "log.level": "INFO", "message":"HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator"} +{"@timestamp":"2026-01-21T16:09:35.676Z", "log.level": "INFO", "message":"Initialized JPA EntityManagerFactory for persistence unit 'default'", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"} +{"@timestamp":"2026-01-21T16:09:35.828Z", "log.level": "INFO", "message":"Hibernate is in classpath; If applicable, HQL parser will be used.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.jpa.repository.query.QueryEnhancerFactory"} +{"@timestamp":"2026-01-21T16:09:36.574Z", "log.level": "INFO", "message":"MongoClient with metadata {\"driver\": {\"name\": \"mongo-java-driver|sync|spring-boot\", \"version\": \"4.11.1\"}, \"os\": {\"type\": \"Linux\", \"name\": \"Linux\", \"architecture\": \"amd64\", \"version\": \"6.8.0-90-generic\"}, \"platform\": \"Java/Ubuntu/17.0.17+10-Ubuntu-122.04\"} created with settings MongoClientSettings{readPreference=primary, writeConcern=WriteConcern{w=null, wTimeout=null ms, journal=null}, retryWrites=true, retryReads=true, readConcern=ReadConcern{level=null}, credential=MongoCredential{mechanism=null, userName='root', source='admin', password=, mechanismProperties=}, transportSettings=null, streamFactoryFactory=null, commandListeners=[], codecRegistry=ProvidersCodecRegistry{codecProviders=[ValueCodecProvider{}, BsonValueCodecProvider{}, DBRefCodecProvider{}, DBObjectCodecProvider{}, DocumentCodecProvider{}, CollectionCodecProvider{}, IterableCodecProvider{}, MapCodecProvider{}, GeoJsonCodecProvider{}, GridFSFileCodecProvider{}, Jsr310CodecProvider{}, JsonObjectCodecProvider{}, BsonCodecProvider{}, EnumCodecProvider{}, com.mongodb.client.model.mql.ExpressionCodecProvider@74b795da, com.mongodb.Jep395RecordCodecProvider@6e6b556d, com.mongodb.KotlinCodecProvider@7d35707d]}, loggerSettings=LoggerSettings{maxDocumentLength=1000}, clusterSettings={hosts=[localhost:27017], srvServiceName=mongodb, mode=SINGLE, requiredClusterType=UNKNOWN, requiredReplicaSetName='null', serverSelector='null', clusterListeners='[]', serverSelectionTimeout='30000 ms', localThreshold='15 ms'}, socketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=0, receiveBufferSize=0, proxySettings=ProxySettings{host=null, port=null, username=null, password=null}}, heartbeatSocketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=10000, receiveBufferSize=0, proxySettings=ProxySettings{host=null, port=null, username=null, password=null}}, connectionPoolSettings=ConnectionPoolSettings{maxSize=100, minSize=0, maxWaitTimeMS=120000, maxConnectionLifeTimeMS=0, maxConnectionIdleTimeMS=0, maintenanceInitialDelayMS=0, maintenanceFrequencyMS=60000, connectionPoolListeners=[], maxConnecting=2}, serverSettings=ServerSettings{heartbeatFrequencyMS=10000, minHeartbeatFrequencyMS=500, serverListeners='[]', serverMonitorListeners='[]'}, sslSettings=SslSettings{enabled=false, invalidHostNameAllowed=false, context=null}, applicationName='null', compressorList=[], uuidRepresentation=JAVA_LEGACY, serverApi=null, autoEncryptionSettings=null, dnsClient=null, inetAddressResolver=null, contextProvider=null}", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.mongodb.driver.client"} +{"@timestamp":"2026-01-21T16:09:36.582Z", "log.level": "INFO", "message":"Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=17, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=12949440}", "ecs.version": "1.2.0","process.thread.name":"cluster-ClusterId{value='6970fa4007896c5302a9f1eb', description='null'}-localhost:27017","log.logger":"org.mongodb.driver.cluster"} +{"@timestamp":"2026-01-21T16:09:36.635Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.amrit_resource.AMRIT_ResourceMongo.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:09:36.640Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.amrit_resource.TempCollection.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:09:36.646Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:09:36.658Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.atoms.feed.bahmni.encounter.ClinicalFeedDataLog.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:09:36.662Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.care_context.NDHMResponse.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:09:36.663Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.atoms.feed.bahmni.encounter.EncounterFullRepresentation.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:09:36.689Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.care_context.GenerateTokenAbdmResponses.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:09:36.690Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.atoms.feed.bahmni.patient.FeedDataLog.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:09:37.461Z", "log.level": "INFO", "message":"Using default implementation for ThreadExecutor", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.impl.StdSchedulerFactory"} +{"@timestamp":"2026-01-21T16:09:37.469Z", "log.level": "INFO", "message":"Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.SchedulerSignalerImpl"} +{"@timestamp":"2026-01-21T16:09:37.469Z", "log.level": "INFO", "message":"Quartz Scheduler v2.5.0-rc1 created.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} +{"@timestamp":"2026-01-21T16:09:37.470Z", "log.level": "INFO", "message":"RAMJobStore initialized.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.simpl.RAMJobStore"} +{"@timestamp":"2026-01-21T16:09:37.470Z", "log.level": "INFO", "message":"Scheduler meta-data: Quartz Scheduler (v2.5.0-rc1) 'jelies-quartz-scheduler' with instanceId 'NON_CLUSTERED'\n Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.\n NOT STARTED.\n Currently in standby mode.\n Number of jobs executed: 0\n Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.\n Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.\n", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} +{"@timestamp":"2026-01-21T16:09:37.471Z", "log.level": "INFO", "message":"Quartz scheduler 'jelies-quartz-scheduler' initialized from an externally provided properties instance.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.impl.StdSchedulerFactory"} +{"@timestamp":"2026-01-21T16:09:37.471Z", "log.level": "INFO", "message":"Quartz scheduler version: 2.5.0-rc1", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.impl.StdSchedulerFactory"} +{"@timestamp":"2026-01-21T16:09:37.471Z", "log.level": "INFO", "message":"JobFactory set to: com.wipro.fhir.config.quartz.AutowiringSpringBeanJobFactory@117f1636", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} +{"@timestamp":"2026-01-21T16:09:38.342Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.Boolean com.wipro.fhir.utils.config.ConfigProperties.extendExpiryTime", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} +{"@timestamp":"2026-01-21T16:09:38.342Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.Integer com.wipro.fhir.utils.config.ConfigProperties.sessionExpiryTime", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} +{"@timestamp":"2026-01-21T16:09:38.342Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.String com.wipro.fhir.utils.config.ConfigProperties.redisurl", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} +{"@timestamp":"2026-01-21T16:09:38.342Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.Integer com.wipro.fhir.utils.config.ConfigProperties.redisport", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} +{"@timestamp":"2026-01-21T16:09:38.380Z", "log.level": "WARN", "message":"spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration$JpaWebConfiguration"} +{"@timestamp":"2026-01-21T16:09:38.571Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.UomRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.572Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.572Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.572Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.572Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.573Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.573Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.574Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.FacilityRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.574Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.574Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.575Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.healthID.HealthIDRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.575Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.575Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.576Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.RouteRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.576Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.576Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.577Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.577Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.578Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.578Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.578Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.579Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.579Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.579Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:38.580Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:09:39.241Z", "log.level": "INFO", "message":"Tomcat started on port 8093 (http) with context path ''", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer"} +{"@timestamp":"2026-01-21T16:09:39.241Z", "log.level": "INFO", "message":"Starting Quartz Scheduler now", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.scheduling.quartz.SchedulerFactoryBean"} +{"@timestamp":"2026-01-21T16:09:39.241Z", "log.level": "INFO", "message":"Scheduler jelies-quartz-scheduler_$_NON_CLUSTERED started.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} +{"@timestamp":"2026-01-21T16:09:39.251Z", "log.level": "INFO", "message":"Started FhirApiApplication in 10.822 seconds (process running for 11.103)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.wipro.fhir.FhirApiApplication"} +{"@timestamp":"2026-01-21T16:09:52.130Z", "log.level": "INFO", "message":"Initializing Spring DispatcherServlet 'dispatcherServlet'", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]"} +{"@timestamp":"2026-01-21T16:09:52.130Z", "log.level": "INFO", "message":"Initializing Servlet 'dispatcherServlet'", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"org.springframework.web.servlet.DispatcherServlet"} +{"@timestamp":"2026-01-21T16:09:52.132Z", "log.level": "INFO", "message":"Completed initialization in 2 ms", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"org.springframework.web.servlet.DispatcherServlet"} +{"@timestamp":"2026-01-21T16:09:52.134Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:09:52.134Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/requestOtpForAbhaEnrollment", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:09:52.135Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:09:52.495Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} +{"@timestamp":"2026-01-21T16:09:52.511Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"HTTPRequestInterceptor"} +{"@timestamp":"2026-01-21T16:09:52.530Z", "log.level": "INFO", "message":"Generate OTP for ABHA enrollment API request {\"loginId\":\"613877296012\",\"loginMethod\":\"aadhaar\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:10:00.005Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-1","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:10:00.719Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-1","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} +{"@timestamp":"2026-01-21T16:10:00.720Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-1","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:10:02.170Z", "log.level": "INFO", "message":"NDHM_FHIR NDHM V3 authentication success at : 1769011802170", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.GenerateAuthSessionServiceImpl"} +{"@timestamp":"2026-01-21T16:10:03.051Z", "log.level": "INFO", "message":"publicKeyString : MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAstWB95C5pHLXiYW59qyO4Xb+59KYVm9Hywbo77qETZVAyc6VIsxU+UWhd/k/YtjZibCznB+HaXWX9TVTFs9Nwgv7LRGq5uLczpZQDrU7dnGkl/urRA8p0Jv/f8T0MZdFWQgks91uFffeBmJOb58u68ZRxSYGMPe4hb9XXKDVsgoSJaRNYviH7RgAI2QhTCwLEiMqIaUX3p1SAc178ZlN8qHXSSGXvhDR1GKM+y2DIyJqlzfik7lD14mDY/I4lcbftib8cv7llkybtjX1AayfZp4XpmIXKWv8nRM488/jOAF81Bi13paKgpjQUUuwq9tb5Qd/DChytYgBTBTJFe7irDFCmTIcqPr8+IMB7tXA3YXPp3z605Z6cGoYxezUm2Nz2o6oUmarDUntDhq/PnkNergmSeSvS8gD9DHBuJkJWZweG3xOPXiKQAUBr92mdFhJGm6fitO5jsBxgpmulxpG0oKDy9lAOLWSqK92JMcbMNHn4wRikdI9HSiXrrI7fLhJYTbyU3I4v5ESdEsayHXuiwO/1C8y56egzKSw44GAtEpbAkTNEEfK5H5R0QnVBIXOvfeF4tzGvmkfOO6nNXU3o/WAdOyV3xSQ9dqLY5MEL4sJCGY1iJBIAQ452s8v0ynJG5Yq+8hNhsCVnklCzAlsIzQpnSVDUVEzv17grVAw078CAwEAAQ==", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.CertificateKeyServiceImpl"} +{"@timestamp":"2026-01-21T16:10:03.063Z", "log.level": "INFO", "message":"encryptedTextBase64 :sMZM1+A/1tyNFLCLZc15loRg49oy1y9m86zP4U+XWtExgDbimLL4FNSjbw4rbrPtV2JTc5gfXt7AKXCXOJ0olibwvCmhfh6ngRMqIL8nySUUEdYFiSZgzx2Qt0psAmbo0ct/B/F7ZfSlrlMupLqPAjRgdw2IbFmNKbyc3iiuTk0PFGW+hXvfx0J/OQbdXUmSCw6PaopKzH78d/dTO3bqdlvhWgpkLgLERCD0RkVlRw33Ce/LNJr4NLzBz89wd4qRq8BMxUD5UIH0IdvAK65vKvgx1qxW3iICv2n197NsytAhPNW/QzeWKgPD9OI/LPYsUbjHNWtaHBnBfRwkmGhS0hiMkMasmk9DpoPhXJ2573CSKekFRD6BhQVfD6wmBB1kQ31PPu1hCtre+C4ag0FHXQDyuvneV77z9x83Q7XEOTOmzn8NFD0om65L3Hq0pLhWbsuAaqVNqcFggDEsHvOVxDDcahpLps3rUAMF5DpMDQ7gsAmWv/OjsCO2RPwc9Gwr7iM5BUhuWMA2bAHXo8uNGFDQZpeXDHeNyjzdj4ZNgGrhIoPOMTR0KTzi2SzHP1OwOL7Rc1fOewBzR30jKg+GWSp1VFik3VklucsUWYBkmtA2arC3WOfpun948z80RsxiGDxnfF4ac/AYBGDkJ0fVLxl4AvD8cCQWU3oVeW3PhIc=", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.Encryption"} +{"@timestamp":"2026-01-21T16:10:03.066Z", "log.level": "INFO", "message":"ABDM reqobj for request otp for enrollment: {\"scope\":[\"abha-enrol\"],\"loginHint\":\"aadhaar\",\"loginId\":\"sMZM1+A/1tyNFLCLZc15loRg49oy1y9m86zP4U+XWtExgDbimLL4FNSjbw4rbrPtV2JTc5gfXt7AKXCXOJ0olibwvCmhfh6ngRMqIL8nySUUEdYFiSZgzx2Qt0psAmbo0ct/B/F7ZfSlrlMupLqPAjRgdw2IbFmNKbyc3iiuTk0PFGW+hXvfx0J/OQbdXUmSCw6PaopKzH78d/dTO3bqdlvhWgpkLgLERCD0RkVlRw33Ce/LNJr4NLzBz89wd4qRq8BMxUD5UIH0IdvAK65vKvgx1qxW3iICv2n197NsytAhPNW/QzeWKgPD9OI/LPYsUbjHNWtaHBnBfRwkmGhS0hiMkMasmk9DpoPhXJ2573CSKekFRD6BhQVfD6wmBB1kQ31PPu1hCtre+C4ag0FHXQDyuvneV77z9x83Q7XEOTOmzn8NFD0om65L3Hq0pLhWbsuAaqVNqcFggDEsHvOVxDDcahpLps3rUAMF5DpMDQ7gsAmWv/OjsCO2RPwc9Gwr7iM5BUhuWMA2bAHXo8uNGFDQZpeXDHeNyjzdj4ZNgGrhIoPOMTR0KTzi2SzHP1OwOL7Rc1fOewBzR30jKg+GWSp1VFik3VklucsUWYBkmtA2arC3WOfpun948z80RsxiGDxnfF4ac/AYBGDkJ0fVLxl4AvD8cCQWU3oVeW3PhIc\\u003d\",\"otpSystem\":\"aadhaar\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} +{"@timestamp":"2026-01-21T16:10:05.434Z", "log.level": "INFO", "message":"ABDM response for request otp for enrollment: <200 OK OK,{\"txnId\":\"e91c9395-51af-4be6-9c2f-06df50740860\",\"message\":\"OTP sent to Aadhaar registered mobile number ending with ******9836\"},[Content-Type:\"application/json\", Transfer-Encoding:\"chunked\", Connection:\"keep-alive\", Date:\"Wed, 21 Jan 2026 16:10:05 GMT\", Access-Control-Expose-Headers:\"*\", X-Frame-Options:\"SAMEORIGIN\", expires:\"0\", x-envoy-upstream-service-time:\"1446\", vary:\"Origin,Access-Control-Request-Method,Access-Control-Request-Headers\", correlation-id:\"9f510021-ded6-4a47-89ae-45825ecb626b\", permissions-policy:\"geolocation=(self)\", pragma:\"no-cache\", activityid:\"dcc03c00-e686-440a-aff4-ccba291a6f10\", content-security-policy:\"form-action 'self'\", x-content-type-options:\"nosniff\", x-xss-protection:\"1 ; mode=block\", referrer-policy:\"strict-origin-when-cross-origin\", cache-control:\"no-cache, no-store, max-age=0, must-revalidate\", server:\"istio-envoy\", Access-Control-Allow-Origin:\"*\", Access-Control-Allow-Methods:\"GET,HEAD,POST,PUT,DELETE,OPTIONS,CONNECT,TRACE,PATCH\", Access-Control-Allow-Headers:\"*\", X-Cache:\"Miss from cloudfront\", Via:\"1.1 3e01f1bb97e94babf3a238feeedd6966.cloudfront.net (CloudFront)\", X-Amz-Cf-Pop:\"BLR50-P4\", X-Amz-Cf-Id:\"t8d1oa8RjT66Y26eiDB6XtnPkBu_QxCYAIZUJdfmx9QwpL_aEfOesQ==\", Strict-Transport-Security:\"max-age=31536000\"]>", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} +{"@timestamp":"2026-01-21T16:10:05.441Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"data\":{\"message\":\"OTP sent to Aadhaar registered mobile number ending with ******9836\",\"txnId\":\"e91c9395-51af-4be6-9c2f-06df50740860\"},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:10:30.426Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:10:30.427Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/abhaEnrollmentByAadhaar", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:10:30.427Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:10:30.433Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} +{"@timestamp":"2026-01-21T16:10:30.435Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"HTTPRequestInterceptor"} +{"@timestamp":"2026-01-21T16:10:30.438Z", "log.level": "INFO", "message":"ABHA enrollment BY Aadhaar API request {\"loginMethod\":\"aadhaar\",\"loginId\":\"568102\",\"mobileNumber\":\"8754969836\",\"txnId\":\"e91c9395-51af-4be6-9c2f-06df50740860\",\"createdBy\":\"\",\"providerServiceMapId\":\"\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:10:30.501Z", "log.level":"ERROR", "message":"java.lang.NumberFormatException: empty String", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:10:30.501Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"statusCode\":5000,\"errorMessage\":\"java.lang.NumberFormatException: empty String\",\"status\":\"java.lang.NumberFormatException: empty String\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:10:45.334Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:10:45.335Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/abhaEnrollmentByAadhaar", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:10:45.335Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:10:45.342Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} +{"@timestamp":"2026-01-21T16:10:45.344Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"HTTPRequestInterceptor"} +{"@timestamp":"2026-01-21T16:10:45.346Z", "log.level": "INFO", "message":"ABHA enrollment BY Aadhaar API request {\"loginMethod\":\"aadhaar\",\"loginId\":\"568102\",\"mobileNumber\":\"8754969836\",\"txnId\":\"e91c9395-51af-4be6-9c2f-06df50740860\",\"createdBy\":\"\",\"providerServiceMapId\":\"\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:10:45.402Z", "log.level":"ERROR", "message":"java.lang.NumberFormatException: empty String", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:10:45.402Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"statusCode\":5000,\"errorMessage\":\"java.lang.NumberFormatException: empty String\",\"status\":\"java.lang.NumberFormatException: empty String\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:11:03.937Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:11:03.938Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/abhaEnrollmentByAadhaar", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:11:03.938Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:11:03.946Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} +{"@timestamp":"2026-01-21T16:11:03.948Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"HTTPRequestInterceptor"} +{"@timestamp":"2026-01-21T16:11:03.951Z", "log.level": "INFO", "message":"ABHA enrollment BY Aadhaar API request {\"loginMethod\":\"aadhaar\",\"loginId\":\"568102\",\"mobileNumber\":\"8754969836\",\"txnId\":\"e91c9395-51af-4be6-9c2f-06df50740860\",\"createdBy\":\"\",\"providerServiceMapId\":\"\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:11:04.025Z", "log.level":"ERROR", "message":"java.lang.NumberFormatException: empty String", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:11:04.025Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"statusCode\":5000,\"errorMessage\":\"java.lang.NumberFormatException: empty String\",\"status\":\"java.lang.NumberFormatException: empty String\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:14:08.041Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@28e8dee7 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:14:16.872Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@5955ec71 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:14:21.742Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@10a4fe2e (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:14:25.195Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@6664ae2f (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:14:38.772Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@633c9e5b (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:15:00.002Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-2","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:15:00.638Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-2","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} +{"@timestamp":"2026-01-21T16:15:00.639Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-2","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:16:34.545Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:16:34.545Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/requestOtpForAbhaEnrollment", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:16:34.545Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:16:34.549Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} +{"@timestamp":"2026-01-21T16:16:34.550Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"HTTPRequestInterceptor"} +{"@timestamp":"2026-01-21T16:16:34.551Z", "log.level": "INFO", "message":"Generate OTP for ABHA enrollment API request {\"loginId\":\"994906946475\",\"loginMethod\":\"aadhaar\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:16:35.553Z", "log.level": "INFO", "message":"publicKeyString : MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAstWB95C5pHLXiYW59qyO4Xb+59KYVm9Hywbo77qETZVAyc6VIsxU+UWhd/k/YtjZibCznB+HaXWX9TVTFs9Nwgv7LRGq5uLczpZQDrU7dnGkl/urRA8p0Jv/f8T0MZdFWQgks91uFffeBmJOb58u68ZRxSYGMPe4hb9XXKDVsgoSJaRNYviH7RgAI2QhTCwLEiMqIaUX3p1SAc178ZlN8qHXSSGXvhDR1GKM+y2DIyJqlzfik7lD14mDY/I4lcbftib8cv7llkybtjX1AayfZp4XpmIXKWv8nRM488/jOAF81Bi13paKgpjQUUuwq9tb5Qd/DChytYgBTBTJFe7irDFCmTIcqPr8+IMB7tXA3YXPp3z605Z6cGoYxezUm2Nz2o6oUmarDUntDhq/PnkNergmSeSvS8gD9DHBuJkJWZweG3xOPXiKQAUBr92mdFhJGm6fitO5jsBxgpmulxpG0oKDy9lAOLWSqK92JMcbMNHn4wRikdI9HSiXrrI7fLhJYTbyU3I4v5ESdEsayHXuiwO/1C8y56egzKSw44GAtEpbAkTNEEfK5H5R0QnVBIXOvfeF4tzGvmkfOO6nNXU3o/WAdOyV3xSQ9dqLY5MEL4sJCGY1iJBIAQ452s8v0ynJG5Yq+8hNhsCVnklCzAlsIzQpnSVDUVEzv17grVAw078CAwEAAQ==", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.service.v3.abha.CertificateKeyServiceImpl"} +{"@timestamp":"2026-01-21T16:16:35.562Z", "log.level": "INFO", "message":"encryptedTextBase64 :Z1aRw4ttq9RmAduTkWQIPz71Ed+OAYIeVLK/U5JkzmtqZ60iAwDU3sf3oCFFcxivZIDjc1teR4kmTi5Q2mkbqruZi0TSc40iJFYHozc04ZfDgNjPIka6lkQ8A7fPxL7UvqOB9saI1wIoYDRGPT6zKQQhV5jJ7SrGRVxA5ktmo84Nx2ouufPmTAssK3F0cO250VYWfQwwcapIq2JXMtA1S1hY1rvfrBK5eGTXd4hs8zeVXJ7kOo5DX4wNO/6tvyBUQAp0Op7sq4Jx5fhvzIQ3CNTyy/E+pOCFLSEgmT0evjo8HWdfSZwYzwyYEDbsM8bKO0t4zi1EA8lkfjsQVPtHXl5wucpgOlPZAAkMEeaPjEUcBEeDYeV7K20skjK6SAXOOXdDeTAsGKnLzc6dJxM26x1YN2/YSlN1M3bWDvjdev2J68YbBK+MS7exZz6QSo6tF4uaMkVJGAePikjf1exdvq8LT/5XD+N0+G4zOXQS+RMzXOx/vRA1xe6XV6HVU5aDo5v2T98jA6nYnbY2AMkN8YRM3T3Fs0ECO9yv35eiQslPkLVezLEIKrU68mNfToYxXc6+AQj09SReXBnpvZiO66HdPL8ufvaOuO5gaOdFFDFYYc7epN+HhhbSv1RiWBB9cOzL3jC7XQKmAoRDiW8PrNnJGDfuWK3YCTeMU1Hv7ag=", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.utils.Encryption"} +{"@timestamp":"2026-01-21T16:16:35.564Z", "log.level": "INFO", "message":"ABDM reqobj for request otp for enrollment: {\"scope\":[\"abha-enrol\"],\"loginHint\":\"aadhaar\",\"loginId\":\"Z1aRw4ttq9RmAduTkWQIPz71Ed+OAYIeVLK/U5JkzmtqZ60iAwDU3sf3oCFFcxivZIDjc1teR4kmTi5Q2mkbqruZi0TSc40iJFYHozc04ZfDgNjPIka6lkQ8A7fPxL7UvqOB9saI1wIoYDRGPT6zKQQhV5jJ7SrGRVxA5ktmo84Nx2ouufPmTAssK3F0cO250VYWfQwwcapIq2JXMtA1S1hY1rvfrBK5eGTXd4hs8zeVXJ7kOo5DX4wNO/6tvyBUQAp0Op7sq4Jx5fhvzIQ3CNTyy/E+pOCFLSEgmT0evjo8HWdfSZwYzwyYEDbsM8bKO0t4zi1EA8lkfjsQVPtHXl5wucpgOlPZAAkMEeaPjEUcBEeDYeV7K20skjK6SAXOOXdDeTAsGKnLzc6dJxM26x1YN2/YSlN1M3bWDvjdev2J68YbBK+MS7exZz6QSo6tF4uaMkVJGAePikjf1exdvq8LT/5XD+N0+G4zOXQS+RMzXOx/vRA1xe6XV6HVU5aDo5v2T98jA6nYnbY2AMkN8YRM3T3Fs0ECO9yv35eiQslPkLVezLEIKrU68mNfToYxXc6+AQj09SReXBnpvZiO66HdPL8ufvaOuO5gaOdFFDFYYc7epN+HhhbSv1RiWBB9cOzL3jC7XQKmAoRDiW8PrNnJGDfuWK3YCTeMU1Hv7ag\\u003d\",\"otpSystem\":\"aadhaar\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} +{"@timestamp":"2026-01-21T16:16:37.607Z", "log.level": "INFO", "message":"ABDM response for request otp for enrollment: <200 OK OK,{\"txnId\":\"6588d4e3-14b7-4103-80d6-709d682d3f4a\",\"message\":\"OTP sent to Aadhaar registered mobile number ending with ******3131\"},[Content-Type:\"application/json\", Transfer-Encoding:\"chunked\", Connection:\"keep-alive\", Date:\"Wed, 21 Jan 2026 16:16:37 GMT\", Access-Control-Expose-Headers:\"*\", X-Frame-Options:\"SAMEORIGIN\", expires:\"0\", x-envoy-upstream-service-time:\"1556\", vary:\"Origin,Access-Control-Request-Method,Access-Control-Request-Headers\", correlation-id:\"7d945509-2926-40fc-9d28-85c89ebcba01\", permissions-policy:\"geolocation=(self)\", pragma:\"no-cache\", activityid:\"998bb174-e9d1-4b54-938e-48340086ecee\", content-security-policy:\"form-action 'self'\", x-content-type-options:\"nosniff\", x-xss-protection:\"1 ; mode=block\", referrer-policy:\"strict-origin-when-cross-origin\", cache-control:\"no-cache, no-store, max-age=0, must-revalidate\", server:\"istio-envoy\", Access-Control-Allow-Origin:\"*\", Access-Control-Allow-Methods:\"GET,HEAD,POST,PUT,DELETE,OPTIONS,CONNECT,TRACE,PATCH\", Access-Control-Allow-Headers:\"*\", X-Cache:\"Miss from cloudfront\", Via:\"1.1 5d782e204f31cf29d8ed8448ac335be4.cloudfront.net (CloudFront)\", X-Amz-Cf-Pop:\"BLR50-P4\", X-Amz-Cf-Id:\"-CM73GHELjVpz2ifMehoPhTMw_lAlP0pnii4RjLW63wShqskWZB1CQ==\", Strict-Transport-Security:\"max-age=31536000\"]>", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} +{"@timestamp":"2026-01-21T16:16:37.609Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"data\":{\"message\":\"OTP sent to Aadhaar registered mobile number ending with ******3131\",\"txnId\":\"6588d4e3-14b7-4103-80d6-709d682d3f4a\"},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:17:02.996Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:17:02.996Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/abhaEnrollmentByAadhaar", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:17:02.996Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:17:03.003Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} +{"@timestamp":"2026-01-21T16:17:03.004Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"HTTPRequestInterceptor"} +{"@timestamp":"2026-01-21T16:17:03.006Z", "log.level": "INFO", "message":"ABHA enrollment BY Aadhaar API request {\"loginMethod\":\"aadhaar\",\"loginId\":\"299668\",\"mobileNumber\":\"9488833131\",\"txnId\":\"6588d4e3-14b7-4103-80d6-709d682d3f4a\",\"createdBy\":\"Mokrong\",\"providerServiceMapId\":1717}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:17:03.384Z", "log.level": "INFO", "message":"publicKeyString : MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAstWB95C5pHLXiYW59qyO4Xb+59KYVm9Hywbo77qETZVAyc6VIsxU+UWhd/k/YtjZibCznB+HaXWX9TVTFs9Nwgv7LRGq5uLczpZQDrU7dnGkl/urRA8p0Jv/f8T0MZdFWQgks91uFffeBmJOb58u68ZRxSYGMPe4hb9XXKDVsgoSJaRNYviH7RgAI2QhTCwLEiMqIaUX3p1SAc178ZlN8qHXSSGXvhDR1GKM+y2DIyJqlzfik7lD14mDY/I4lcbftib8cv7llkybtjX1AayfZp4XpmIXKWv8nRM488/jOAF81Bi13paKgpjQUUuwq9tb5Qd/DChytYgBTBTJFe7irDFCmTIcqPr8+IMB7tXA3YXPp3z605Z6cGoYxezUm2Nz2o6oUmarDUntDhq/PnkNergmSeSvS8gD9DHBuJkJWZweG3xOPXiKQAUBr92mdFhJGm6fitO5jsBxgpmulxpG0oKDy9lAOLWSqK92JMcbMNHn4wRikdI9HSiXrrI7fLhJYTbyU3I4v5ESdEsayHXuiwO/1C8y56egzKSw44GAtEpbAkTNEEfK5H5R0QnVBIXOvfeF4tzGvmkfOO6nNXU3o/WAdOyV3xSQ9dqLY5MEL4sJCGY1iJBIAQ452s8v0ynJG5Yq+8hNhsCVnklCzAlsIzQpnSVDUVEzv17grVAw078CAwEAAQ==", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.service.v3.abha.CertificateKeyServiceImpl"} +{"@timestamp":"2026-01-21T16:17:03.392Z", "log.level": "INFO", "message":"encryptedTextBase64 :kVA8PvuXKYF0Zo6I6ccKbdmmAREyleXdLllzylJPJhlJHTdAbc/35i+Qb3pgiWcveRBXyMhnuEC6xiuYBT4+UAfPaHvJF5GjTuTmsDKjPoSTF3q5YYyK/tipkISWduMHJ1j14mP2A6T99xDGbH8xeYlZswZP0AqZ4dbGu2p/E5Dn19JqT0+R5JF2+1wvJWuXGjhc75kiiUDaryJadRDsWqyh02IUwkcmJFUj6fn2yJy8iOrZ1deSAvppTps06E5dHzckBo2ZU/xg8QL5JdQbcY0zdI5J70lwlMlji9s6T5SMc/Lualdt0U7GJwCiDEiHCOf15+xy7JEqWbfaDcLQJuTZZBmlMYwIENuZv65qEjvnct+zB+FYnpTWIt1ZZkMbabNpQLgzelWGjPQIPBj4r/4Jw3Hq8rcl9zMPq4zcIcq2M746tZPrDyw6x9rqHb+oWc79t0p7Cj7jjUbocePX8BepOLZ9SW8J/GPFu2G5h1uYW+Va+l6o2Dj9JJreQNrhD+vOLaN9g9f/OU4E5IX+AyhiEwO16tP39Z/qBn58CRvlnrLIAt8lX7In7KkuToK5Kdtry+IArPbq2WM/8u+gq5+0uw8O4dgD5zD7XmoOq3LoSXIFWS3ANnMbSikGn64Hgl/JgJ9bWJEY21LnYbtgVHQ+x0f4FjJfDfSah/pSjow=", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.utils.Encryption"} +{"@timestamp":"2026-01-21T16:17:03.397Z", "log.level": "INFO", "message":"ABDM request for enroll by Aadhaar: EnrollByAadhaar(authData={otp=OtpRequest(timestamp=2026-01-21T16:17:03.394619276Z, txnId=6588d4e3-14b7-4103-80d6-709d682d3f4a, otpValue=kVA8PvuXKYF0Zo6I6ccKbdmmAREyleXdLllzylJPJhlJHTdAbc/35i+Qb3pgiWcveRBXyMhnuEC6xiuYBT4+UAfPaHvJF5GjTuTmsDKjPoSTF3q5YYyK/tipkISWduMHJ1j14mP2A6T99xDGbH8xeYlZswZP0AqZ4dbGu2p/E5Dn19JqT0+R5JF2+1wvJWuXGjhc75kiiUDaryJadRDsWqyh02IUwkcmJFUj6fn2yJy8iOrZ1deSAvppTps06E5dHzckBo2ZU/xg8QL5JdQbcY0zdI5J70lwlMlji9s6T5SMc/Lualdt0U7GJwCiDEiHCOf15+xy7JEqWbfaDcLQJuTZZBmlMYwIENuZv65qEjvnct+zB+FYnpTWIt1ZZkMbabNpQLgzelWGjPQIPBj4r/4Jw3Hq8rcl9zMPq4zcIcq2M746tZPrDyw6x9rqHb+oWc79t0p7Cj7jjUbocePX8BepOLZ9SW8J/GPFu2G5h1uYW+Va+l6o2Dj9JJreQNrhD+vOLaN9g9f/OU4E5IX+AyhiEwO16tP39Z/qBn58CRvlnrLIAt8lX7In7KkuToK5Kdtry+IArPbq2WM/8u+gq5+0uw8O4dgD5zD7XmoOq3LoSXIFWS3ANnMbSikGn64Hgl/JgJ9bWJEY21LnYbtgVHQ+x0f4FjJfDfSah/pSjow=, mobile=9488833131), authMethods=[Ljava.lang.String;@33f9a73f}, consent=ConsentRequest(code=abha-enrollment, version=1.4))", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} +{"@timestamp":"2026-01-21T16:17:03.402Z", "log.level": "INFO", "message":"ABDM request object for ABHA enrollment by AADHAAR: {\"authData\":{\"otp\":{\"timestamp\":\"2026-01-21T16:17:03.394619276Z\",\"txnId\":\"6588d4e3-14b7-4103-80d6-709d682d3f4a\",\"otpValue\":\"kVA8PvuXKYF0Zo6I6ccKbdmmAREyleXdLllzylJPJhlJHTdAbc/35i+Qb3pgiWcveRBXyMhnuEC6xiuYBT4+UAfPaHvJF5GjTuTmsDKjPoSTF3q5YYyK/tipkISWduMHJ1j14mP2A6T99xDGbH8xeYlZswZP0AqZ4dbGu2p/E5Dn19JqT0+R5JF2+1wvJWuXGjhc75kiiUDaryJadRDsWqyh02IUwkcmJFUj6fn2yJy8iOrZ1deSAvppTps06E5dHzckBo2ZU/xg8QL5JdQbcY0zdI5J70lwlMlji9s6T5SMc/Lualdt0U7GJwCiDEiHCOf15+xy7JEqWbfaDcLQJuTZZBmlMYwIENuZv65qEjvnct+zB+FYnpTWIt1ZZkMbabNpQLgzelWGjPQIPBj4r/4Jw3Hq8rcl9zMPq4zcIcq2M746tZPrDyw6x9rqHb+oWc79t0p7Cj7jjUbocePX8BepOLZ9SW8J/GPFu2G5h1uYW+Va+l6o2Dj9JJreQNrhD+vOLaN9g9f/OU4E5IX+AyhiEwO16tP39Z/qBn58CRvlnrLIAt8lX7In7KkuToK5Kdtry+IArPbq2WM/8u+gq5+0uw8O4dgD5zD7XmoOq3LoSXIFWS3ANnMbSikGn64Hgl/JgJ9bWJEY21LnYbtgVHQ+x0f4FjJfDfSah/pSjow\\u003d\",\"mobile\":\"9488833131\"},\"authMethods\":[\"otp\"]},\"consent\":{\"code\":\"abha-enrollment\",\"version\":\"1.4\"}}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} +{"@timestamp":"2026-01-21T16:17:05.655Z", "log.level": "INFO", "message":"ABDM response for ABHA enrollment: <200 OK OK,{\"message\":\"Account created successfully\",\"txnId\":\"6588d4e3-14b7-4103-80d6-709d682d3f4a\",\"tokens\":{\"token\":\"eyJhbGciOiJSUzUxMiJ9.eyJpc0t5Y1ZlcmlmaWVkIjp0cnVlLCJzdWIiOiI5MS0zNDgxLTQ4MDAtMjYwNiIsImF1dGhfdHlwZSI6IktZQ19PVFAiLCJjbGllbnRJZCI6ImFiaGEtcHJvZmlsZS1hcHAtYXBpIiwiYWNjb3VudFR5cGUiOiJzdGFuZGFyZCIsImdlbl9zb3VyY2UiOiJhYWRoYWFyX290cCIsIm1vYmlsZSI6Ijk0ODg4MzMxMzEiLCJ0eXAiOiJUcmFuc2FjdGlvbiIsImFwaV92ZXJzaW9uIjoidjMiLCJzeXN0ZW0iOiJBQkhBLU4iLCJhYmhhTnVtYmVyIjoiOTEtMzQ4MS00ODAwLTI2MDYiLCJwcmVmZXJyZWRBYmhhQWRkcmVzcyI6IjkxMzQ4MTQ4MDAyNjA2QHNieCIsImJhYWxfYWJoYSI6Im5vIiwiZXhwIjoxNzY5MDE0MDI1LCJpYXQiOjE3NjkwMTIyMjUsInR4bklkIjoiNjU4OGQ0ZTMtMTRiNy00MTAzLTgwZDYtNzA5ZDY4MmQzZjRhIn0.kr65cxMlxW1Fhot0Dnz6Vi37y5rEtFRAvaHdAjb61xK7tCU7CW_tBRYIdT505uf1g9Pfh1XXg34h65y_Btv3_BEndrxuXpeuY5RcRV0Y5wNnY_XJt8W_M83tqb1C0HFjmPdhbN2cAialHmBPV5s8bkq-x0CNES3Fq0JD3cvgXDJQ4k0v3YTIs8qrYcnZDTIYpevLc4PIjUwa2Qnmwrc5Zdj0kCnJlRWttGauyaZhktlKRkWIc1ttZQO_yE_yLdjmAzoD8UUUafs0Caa5ZS5sJhb-GQj-NwtnrpIu4aYJhkvW5Fu09xrdLYzCN9i_fP0Z2CV2WTzRCtgxGTyPU6dDzKYOeBIDeN3NWPgHjJ5jnN5iVeeptNOC2wwRK8wZhlmyyfv5Z6K74_hf_AUGx79hjPiNfTF-VbbTQr13jynW7okgsPz2F9mRXRRg92jIQ6xWyPSwIqzYWDQKUl-Q5xRyt3xTZ1U8gbvqDbgczXcwOJIOH2Gp1hTkXT3QuQPFWLSvnfRCSrTwfVFyNsM3fRzbNiNMB6yPziuioWqpzHrn6zhAUmfUZVV7Qx-QEiD8Dga3Q9dySNr8NgZNBghWishfq2jDFx_j7NLpeY6uML703N9F8HiDHO24A6mXDAonO7gwLKRWjdtdhnRcfCRTkK38zHW4--YiUp_mSiIXyQbIe7c\",\"expiresIn\":1800,\"refreshToken\":\"eyJhbGciOiJSUzUxMiJ9.eyJzdWIiOiI5MS0zNDgxLTQ4MDAtMjYwNiIsImNsaWVudElkIjoiYWJoYS1wcm9maWxlLWFwcC1hcGkiLCJzeXN0ZW0iOiJBQkhBLU4iLCJ0eXAiOiJSZWZyZXNoIiwiZXhwIjoxNzcwMzA4MjI1LCJpYXQiOjE3NjkwMTIyMjV9.pASTdE-I0F0gHpeDlU8bVNc_8Df1PiAetWqORJ_tNPJuOpAGDw0CJ0PUUjhqGCnF-Dp8YZieFRQwtIr9jp3U2rvsgdU0djyYY_MxalRG0ROdvBrKM-TiBTzvnt9jtdsoNrVpLL7tI6aCGLol2tvq-_hbLWTPx-GtslyE3gDwzD8Jh3d5WOvz4ExkLKZ-BOhT59Ngre_XmQtc8VB7aVbkCays-uj1cGQhpVfpOi4M4c5eOH1DC_JD10cFxaHbDqn2FB-eiSRKNTSflx2ocw2cEK-c8gbzwiGNRiDTHHUNHb8dmx7VVnfQgTIzcnHNMkpkhHFFMq_OReMrFx5bEHzrKGOHMY6UoEg72M5k0K6faFsg162aUZx152J49lolEUnKteCCQR5rWIpdc4g2JxnZlB-EMr7WdnDiVHtyjjUABJaEL-RRQOn4WIgGb-1zi1MliXTeMabaHVVXt65bAZm1iZXACJm39dQ_M3jTAt-jdi_yn9WXrm1L1mm1PEalQKSvMgp34VAjqfe_1B6uDyF7Czhwb_nES84fwI0Pvo0lkjgE4-Z_fDiLfkiPhy0dlwDA7j_zYxQxi0Kxfiy6HOz2pL_3Jzh5WR7SdlWqwQxmm_YclyxgO9H6dSs5s9eFQRgEH3_iTMZ2anJhQrFcDZtJkf-0f--YIjpIvPgMXiJ15l4\",\"refreshExpiresIn\":1296000},\"ABHAProfile\":{\"preferredAddress\":null,\"firstName\":\"Sureshkumar\",\"middleName\":\"\",\"lastName\":\"Palanisamy\",\"dob\":\"18-07-1985\",\"gender\":\"M\",\"photo\":\"/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCADIAKADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDvsYppUA/d/Kn8n2pChPRjTERbct8pIPY1MOlATC8U4DI/nSASjHNOxS4oAYaTmnkUmKAGUY+tP20YoAZikFPIPYUwZyflNIAxyab3NO+fd93j60bTk5FADMU3FSbaaVoAjNNPvUhWmkUwIz1ph9KmximMucGgDRCmnbKfS4pgM24pMYbGOtSgZpdtAEe3ijbUoAo20gIsUbalK0baAISoo2AVIcdzWXfeINJ09Sbm+hUg4Kqd7Z9MDOKANDbTdvPSuU/4WPoYmKH7QFzjeUGP55qzH470J3K/aip7EqcH6H/HFIDoSvNJjk1WstXsdR5tLmOXjOFbkfX0q5kZPTNAEe3mkK1NjLfhRtFAFfbTSvNWdlNKD0pgVinFMx7VYK8ZpmOaALwFOximg06mACncUgpQMZpAKABQKKiubmG0geeeVI4kGWZjgAUgJGZVUsxAVRkk9APWuG8RfEWx04mDTtl3MOGbJ2L+Pf8ADj3rj/GnjebWpWsrNjFYAjjvIR3Ptnt7CuIeWNW5JZqLgdNqPi7WdUBE9+4iORsRtq49CB1/GsNrtwSr/Nn8aqfbF6DqPeqs028lgTj+VIZaNwWDbcY/pTPtTKAQ3XiqyBirZPBpF+8pOOOooA0rfU5rKZZI5WjkHcHHNeh+G/iNKpSHVjvixhZlHzL9R3H6/WvI3kO881NHO6nOTjvQB9Q2t1FcIHidXQgbWU5BB5B/WrWK8b+H/itLRzZXt1styhCZXOGJHft3r163uY7iPfE6uvTK0xWJcU0inUhoEREdKQYHUVJimNx9KBkoNOzUQJp4NMB+acDio80uaQDy2Aa8V8d+J7m+1C5t0lP2WJiiIDwcHk+9d14/16bRdGUW7lJJyyBhnjj6deePpXhFzPJIeAcGgY151KnnmqwkOeeakhtZ7l8Kn41oW3h6eUjc+1T6DNQ5JblKLexkCTD/AONWVjMmCq/hXRQ+FUPJd/qw/pVy38PIhw0h+mKn2sS1SkcnJGwUYBA9KRLGeXjH613J0Oz/AIwWPoBihtOso12rGPzNQ6yKVI4ldNbPrV+DS9qguPwromgjCnCKMe1V2TFL2jK9mjm54GtJtycD1rt/Bvi+exuY7a4lPln5Tu6Y5P55J/lx1rnrqASIQRWIzPbzYzx71rCVzGcbH03a3S3CZBGe4B/X6VPurzf4cazJc2/2aYk7chTjHGAQP/Qs/hXom7JrQzHE009KM8UhNADhTwKbg0+mAooxQBS4pAeU/FvUGW6sbBc7Qhmb3JJA/LB/OuHsraO4jDMAa7X4wWii6027AO+RGjJ9lII/9CNcla7IIRuOAByazqGlNK+pbht0RgEXA+la9rAQMkDntXO/2oC4EQwo7mraa8YlyefwrBxZupI6dABwRTli+bpWHZ67HcyKvCj361ppfpJMsSEMcZzUNNblposmIZOR34qvLbqR0FQy3gW42SZCnofesq61tIDlHLg9FoUbg5JFuW3IBYjB+tUpAFODVd9RubrGyJ8ADO0E4qvJPcREZ+YHs1VytE86LbICM1g6jEBLurZhuBKDjII6g1Q1dD5aSjnDVcL3Iqao7H4aK00VwqgnypI3XHuec+3Ar1gcivOPhNbBdMvbrfkvMIyvptGc/wDj/wClekKMA10I5hKQ9KdSEcUwJQKcKUCngUwGgZp2OKWjvikBwXxQ00Xfh6O5wu62lBzjnDcEfnj8q8quuIgo616z8RNUe3szpohBS5iLeYwOCQeg9xgHv1FeZ/Z/NcAjpWc2aQRkxzrblUwCxPpk59hVw3ds4aK8tpA464Rc/hT30/7PcCUqctyD6VcjgE0okkVHI4GRnIxisnJGyi7FBdN8tUkEEkKuoYMwxwenPStXRrd9s8zOcoOuffFWLoQjDbN0gGBvOcVoabbiLSJSAcEqDxnPU1EmVGJgXjOZlj3ffPJzVZbGaWSQwweYIlLEjGOPfv8AhWjeWy+dgjg1Ytrc7/MR9knYg4z+NKLKkjFtNQuJVjtYoGMhbbtVvy6j+tEs584wzxlXHUEYZa2Wt2gmEkESxsAQGUDP51Uks/PkDyKSe5PWquiOV2KkMDIQy5ZT1qLVI/8AQ/X5hWwipHFsHUd6ztRXNvgddwpwldimtD034eWX2TwvbExlHmJlYHvk8H8VC12IXiuB8N+KZTqFrpYs41tyFijSPLMgwAMnoQPoP0r0ILxXRGSexzSTW5GRnFBFSYppFUIkWnVAJgakEopgSCnYxUXmrS+atIDmvHtpDc+G5XkjVpImVo27qSwBx+B/zivLYkCsK9M8fXfl+H1UH/WSqp+mCf5gV5pES0g5FY1TakX1Ec4CFeaT7MxOBhVHpUkODz61cj29e1cx0pGddW0cKqp4PUn0rWtI4nsXXzAoVcgf3jnp+prnPEciRSqfMdhIMFEOCD65qLT7++8t4ljz5fBZuPz96pwbQKSTL91GzTnbjAFXLOBLi1ABAfoQe9cnPPOmoGR55fM6bQcKPoK6TSblfs5LsvmMcnHak42WoKSZMyyRsVIyB602RRt5FXJGEg3dz15qncHCk+lTYZnzBVbjiqtxH5kLLznqMVYk757VBvy2MVpFGcjtPA1h5mprcHGIQzE8ckgqB/M/hXo/auT8H25g0qJjnMg3n8f/AK1dUDxXRCNkc03djs0hpM0masgpq75GV/I08SNn/VnHrxSCnD0qgFDktgowHrSl9oPB/AUv0pwAH1pAcT8Q2LaXasAdolIOVI6jj+RrgIJe2a9N8e23n+GZJASPIkWTA7/w/wDs1eSrLiTj9ayqI2pM3ROsUWSazrjX/K4Rv0pk03mwbVGOKwZi+4IV3HsPSsYRubTlbYuzSz6i6kAkew6VM08tiWjAk3FeuOD04H41DYS3anylCD0rSUXsDjdGrencVWwlHm1KkljcSRR3LZDMuWRuooS4ktjhgAcdKt3C3mN0mxcj1yay5BOW3MVYAdMc0b7g1y7G1a6wNyqcEHitKV8xk+tcpZK0k/y5AHXitr7QRHt3dBWco2ehUHcJXAzg1DGfm9c02VwMEnrU2nxNe30MC5HmOFyB0HrVxREmeq+Hxt0i0IyAYUIGenArXEjf3jVa3iVIlCgAAcAVPtGK6UcrHGVh/EaTzW9aaVpu2mBJnFPHApnbpnmnYycUASADFO4puDjFPAOP/rUAUdStUvdOuLZ8YljK+vUda8CvVexvpYJMhkYq2exFfQd7PBZ2ktzcyCKGNdzu3QD/AB9u9fP3ijWrfVtemngi8pG4XI5OO59/8+9TJXRUXZiR3QU8kfTNOVo5HJUDJrFDFCc5yKsW9xmUKSM1k49jZSNbMsfzIgPPanjWLyFui49GGas2s6NGARkdKuJbWr4LFc1Cfc016MzVu57xgXjLE8ZxTzCBjcK1i9vbr8pX3xWPeXiszEEBR2pXuF7bkRlWCQlc896YblRk81QkuWaQhOfrUe84zn86rl7kc5eMxkcAcgV2HgjT/PvmuiPli+Vfqev6fzrhIm+bjqa9Y8B3VpfaQhthtMWFkjJyVPqfrzzWkUZSZ2Ua4UCnkUKMU7vWhmRnNBFOptADhTlNYd54q0eyQlrtZGC5Cwjfn2yOPzNcfq3xAvZJGTTtlvGp4YgOxHvnj8vzNWothc9P49RVCfxBo9rE8kupWuEOCFkDN+Qya8SudWvr6ZHuriWZk6b3Jx9M1SN3NcXSwox64Y46VXIK51/xG8WLqASzsJc2iAMzbSPMc/XnAH07+1eYrE0rh2OAWwDWvqg8+4jiBwCwGKpXjrFeRQrwsbAH/P0rObs+VFRV1cjVyjbXXpwKlMQYhozg+tXpLUNk4B9RiqxtZIwGjGR6elY81zWxLFcTwqAYmPoV5zUhvrljmON8jrniqyTyowBDECrCXjD7yn3qX6FK/cf9vncbfKkJPtVaQTynDfu17881M1yz54JFQHzWOAp5oQO7HhY4147D86aP3nCjipIbCWVtzkgfzq6tsI0wAMCi4rFMLsUt3xx7Vv8Aw81mPSdaxcyBLeceU7MThSSME/jgZPQE1jOn7tj7VQJMNnK4ODlcD8RWlPW5E1ZH0nHKksavG6ujDKspyCPrTyAQeK+f9E1/UNLkb7LdyR8htqng/UdDXZ6f8SL6FVW+torlRwXQ7H+p7fhgVpyszuemGkrI0nxPpWtbVtrkCcjPkSfK/wCXfpngmtekB4Gz7hndnPIJyc0xZN3mE4IU8DOD+GeabEBvKk9APmIJHrimIcXDB1wSMcdR7gD9a6SBwAMp+YYPVsZA571HpagyTEDDbj36dfy61KVYkYGSThWHQngYPpVGO7+yW00uMndtC59/Wh6AWpVP2+MnO3cMZ69DWNdBp9UH3fnkJG054Bx/SriXEg8m4nOWyzED0FVtGi87UU/2VJNc1T4mzaGyR0Yi27cjtVmO1R+cc/zqdoNyDjnFJCSjYrj5jrSK8unA9sfSqjW3lPh1BHriuijAdMk/hVee1MpIxkUucXKjNEcRHCqDSpa72+7gep4qxFatDIAc1fjgyvAOO+aOYOUptFHCmF5I79qpz/N2xWhN8pPQVgX96SWWNSeOtXTg5vQmclBajb65jhgYAhnx0rHu7jzLNeNuTkj6USxs0gDA5B6DnHvROm+IqAfmUnB6YArsjBRVkcsp8zHwSbdjKc56g9/84rQL4bKkYxkDPTkdOefpWNaNviAJ6GtQsdwOC4PrwMkY7f54q47EssCTLHAxjtnFdTovjfVNObZM/wBqhH8Ex+b8G6j9R7VyKuojB3AkNhQ5J69weR/nmnr1UAE5wAMncfx/Gm13FckdiCGwCSMepIzj8PrjvRFJukkZSQX4UD0J6H2x7U2RSAynOCcFCeSR3/z1qOEB1Ma7dwIynZh71oSWFwP4A+4HjHDY7/5/+vWdc7fJdArZVwxJ7etXyxZSRu5xlW5PA565478+tVb0bldyQ5bILdB27etDVwRVuZttimcM21lBHvxVrw1EftErkdsVQmgbyEAP+rAYjPWui8PKrQtcO++SaQliDkg+9clfRHRR1kdIseYlOOoqnPDtbcBWoADGMelQSpkEAVwnZYiiBaLg805AQKIRsJBz1p7sEPPFAEbbs5pXdljo3E+9MmYYxRYCjPucMc9qxZsRjJzgE5Ax1H/6xWpqFzHBAR/E3AArBkkLEbm6joOAK7sLFpNnJiGrpDbmcCER72AY/MGOeAT/AI/jVUoFVBlcY6E5HI4z/n1qR2Ekqgr5YxknGMgfh/kmkKksApUZOcE8de/5V0MwM+1O0uprZ2MycZYBcnP8Iz6/jWQI1V5zuwVxwe+a2QP3I6bDwoPLDgevb6dqmPYbGI25HBxzkk449eOPapI1J+TGCcHaSMNyeKjZSsvGGOM/KOPWnKNqYVyADuGON34Z445//VVEkpwgHmDavQOoPJHTg8etMKAEttIYf8s1GeMdaKK0ES+YCCGcl+mRwD6DHvQULwGNcucHMagnjsR+P6UUUAUgiOHjDKxGVBHQ/Sr+jP5Cxy9FIw3YZFFFRKKloyotrVHXW10kyKemelSnDLnqKKK8yaSlY74NtXK8jeWpOQB71C8wPPB4+lFFCRQwSHJUEcdh3qteXixITjJPQetFFaU4JySZFSTUW0YjyF3aVsk9dzHggen6fXNVi7bScLmTgggfLjHP0oor0NkcF7vUgi+diQAGY9Oyg+lSKnznapbgblOcsfX6dvpRRSGVp0BwQzEkBT7jrg/j/Kr8ChNuTzgZY/w+x9R/SiiktxMWQBVjO0qBzt5BPv04/wD1UKMy7TIAxGPm6KOnP4UUUwP/2Q==\",\"mobile\":\"9488833131\",\"mobileVerified\":true,\"email\":null,\"phrAddress\":[\"91348148002606@sbx\"],\"address\":\"4/1B, MAHADEVAPURAM STREET NO 2, MAHADEVAPURAM, METTUPALAYAM, Mettupalayam, Mettupalayam, Coimbatore, Tamil Nadu\",\"districtCode\":\"569\",\"stateCode\":\"33\",\"pinCode\":\"641301\",\"abhaType\":\"STANDARD\",\"stateName\":\"TAMIL NADU\",\"districtName\":\"COIMBATORE\",\"communicationMobile\":null,\"ABHANumber\":\"91-3481-4800-2606\",\"abhaStatus\":\"ACTIVE\"},\"isNew\":true},[Content-Type:\"application/json\", Transfer-Encoding:\"chunked\", Connection:\"keep-alive\", Date:\"Wed, 21 Jan 2026 16:17:05 GMT\", Access-Control-Expose-Headers:\"*\", X-Frame-Options:\"SAMEORIGIN\", expires:\"0\", x-envoy-upstream-service-time:\"2082\", vary:\"Origin,Access-Control-Request-Method,Access-Control-Request-Headers\", correlation-id:\"87fce058-415f-44d3-9f33-2042e1e81a37\", permissions-policy:\"geolocation=(self)\", pragma:\"no-cache\", activityid:\"ef579dea-e815-4c67-bc1f-f58b5de7b415\", content-security-policy:\"form-action 'self'\", x-content-type-options:\"nosniff\", x-xss-protection:\"1 ; mode=block\", referrer-policy:\"strict-origin-when-cross-origin\", cache-control:\"no-cache, no-store, max-age=0, must-revalidate\", server:\"istio-envoy\", Access-Control-Allow-Origin:\"*\", Access-Control-Allow-Methods:\"GET,HEAD,POST,PUT,DELETE,OPTIONS,CONNECT,TRACE,PATCH\", Access-Control-Allow-Headers:\"*\", X-Cache:\"Miss from cloudfront\", Via:\"1.1 303e917d845d3965f206781fd60fa0d4.cloudfront.net (CloudFront)\", X-Amz-Cf-Pop:\"BLR50-P4\", X-Amz-Cf-Id:\"KRBlxs1El4isyejvL8jwMUd-nANeJ0FA3MJKLzfoPx4WyPaoUc7cqw==\", Strict-Transport-Security:\"max-age=31536000\"]>", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} +{"@timestamp":"2026-01-21T16:17:05.687Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2e2376d8 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:17:05.690Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@132c9f7d (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:17:05.692Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@16488fd9 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:17:05.693Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@23e8be7e (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:17:05.695Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@26c38181 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:17:08.035Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"data\":{\"xToken\":\"eyJhbGciOiJSUzUxMiJ9.eyJpc0t5Y1ZlcmlmaWVkIjp0cnVlLCJzdWIiOiI5MS0zNDgxLTQ4MDAtMjYwNiIsImF1dGhfdHlwZSI6IktZQ19PVFAiLCJjbGllbnRJZCI6ImFiaGEtcHJvZmlsZS1hcHAtYXBpIiwiYWNjb3VudFR5cGUiOiJzdGFuZGFyZCIsImdlbl9zb3VyY2UiOiJhYWRoYWFyX290cCIsIm1vYmlsZSI6Ijk0ODg4MzMxMzEiLCJ0eXAiOiJUcmFuc2FjdGlvbiIsImFwaV92ZXJzaW9uIjoidjMiLCJzeXN0ZW0iOiJBQkhBLU4iLCJhYmhhTnVtYmVyIjoiOTEtMzQ4MS00ODAwLTI2MDYiLCJwcmVmZXJyZWRBYmhhQWRkcmVzcyI6IjkxMzQ4MTQ4MDAyNjA2QHNieCIsImJhYWxfYWJoYSI6Im5vIiwiZXhwIjoxNzY5MDE0MDI1LCJpYXQiOjE3NjkwMTIyMjUsInR4bklkIjoiNjU4OGQ0ZTMtMTRiNy00MTAzLTgwZDYtNzA5ZDY4MmQzZjRhIn0.kr65cxMlxW1Fhot0Dnz6Vi37y5rEtFRAvaHdAjb61xK7tCU7CW_tBRYIdT505uf1g9Pfh1XXg34h65y_Btv3_BEndrxuXpeuY5RcRV0Y5wNnY_XJt8W_M83tqb1C0HFjmPdhbN2cAialHmBPV5s8bkq-x0CNES3Fq0JD3cvgXDJQ4k0v3YTIs8qrYcnZDTIYpevLc4PIjUwa2Qnmwrc5Zdj0kCnJlRWttGauyaZhktlKRkWIc1ttZQO_yE_yLdjmAzoD8UUUafs0Caa5ZS5sJhb-GQj-NwtnrpIu4aYJhkvW5Fu09xrdLYzCN9i_fP0Z2CV2WTzRCtgxGTyPU6dDzKYOeBIDeN3NWPgHjJ5jnN5iVeeptNOC2wwRK8wZhlmyyfv5Z6K74_hf_AUGx79hjPiNfTF-VbbTQr13jynW7okgsPz2F9mRXRRg92jIQ6xWyPSwIqzYWDQKUl-Q5xRyt3xTZ1U8gbvqDbgczXcwOJIOH2Gp1hTkXT3QuQPFWLSvnfRCSrTwfVFyNsM3fRzbNiNMB6yPziuioWqpzHrn6zhAUmfUZVV7Qx-QEiD8Dga3Q9dySNr8NgZNBghWishfq2jDFx_j7NLpeY6uML703N9F8HiDHO24A6mXDAonO7gwLKRWjdtdhnRcfCRTkK38zHW4--YiUp_mSiIXyQbIe7c\",\"isNew\":true,\"ABHAProfile\":{\"hID\":3435,\"healthIdNumber\":\"91-3481-4800-2606\",\"name\":\"Sureshkumar Palanisamy\",\"providerServiceMapID\":1717,\"gender\":\"M\",\"yearOfBirth\":\"1985\",\"monthOfBirth\":\"07\",\"dayOfBirth\":\"18\",\"firstName\":\"Sureshkumar\",\"healthId\":\"91348148002606@sbx\",\"lastName\":\"Palanisamy\",\"middleName\":\"\",\"stateCode\":\"33\",\"districtCode\":\"569\",\"stateName\":\"TAMIL NADU\",\"districtName\":\"COIMBATORE\",\"mobile\":\"9488833131\",\"deleted\":false,\"processed\":\"N\",\"createdBy\":\"Mokrong\",\"isNewAbha\":true},\"txnId\":\"6588d4e3-14b7-4103-80d6-709d682d3f4a\"},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:17:20.110Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-8","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:17:20.110Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /healthID/getBenIdForhealthID", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-8","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:17:20.111Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-8","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:17:20.114Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-8","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} +{"@timestamp":"2026-01-21T16:17:20.116Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-8","log.logger":"HTTPRequestInterceptor"} +{"@timestamp":"2026-01-21T16:17:20.117Z", "log.level": "INFO", "message":"NDHM_FHIR Request obj to fetch beneficiary Ids for HealthID :{\"healthIdNumber\":\"91-3481-4800-2606\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-8","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIDWithMobileOTP"} +{"@timestamp":"2026-01-21T16:17:20.383Z", "log.level": "INFO", "message":"NDHM_FHIR get beneficiary Ids for HealthID response:{\"data\":{\"response\":\"No Beneficiary Found\"},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-8","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIDWithMobileOTP"} +{"@timestamp":"2026-01-21T16:17:51.424Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-9","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:17:51.424Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /healthIDRecord/mapHealthIDToBeneficiary", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-9","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:17:51.424Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-9","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:17:51.429Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-9","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} +{"@timestamp":"2026-01-21T16:17:51.430Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-9","log.logger":"HTTPRequestInterceptor"} +{"@timestamp":"2026-01-21T16:17:51.437Z", "log.level": "INFO", "message":"NDHM_FHIR Map ABHA to beneficiary API request {\"beneficiaryRegID\":null,\"beneficiaryID\":\"299711001300\",\"healthId\":\"91-3481-4800-2606\",\"healthIdNumber\":\"91-3481-4800-2606\",\"providerServiceMapId\":1717,\"authenticationMode\":null,\"createdBy\":\"Mokrong\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-9","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIdRecord"} +{"@timestamp":"2026-01-21T16:17:53.370Z", "log.level": "INFO", "message":"NDHM_FHIR Map ABHA to beneficiary API response {\"data\":{\"benHealthID\":7927,\"healthIdNumber\":\"91-3481-4800-2606\",\"providerServiceMapId\":1717,\"beneficiaryRegID\":10468792,\"beneficiaryID\":299711001300,\"healthId\":\"91-3481-4800-2606\",\"deleted\":false,\"processed\":\"N\",\"createdBy\":\"Mokrong\",\"isNewAbha\":false},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-9","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIdRecord"} +{"@timestamp":"2026-01-21T16:20:00.002Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-3","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:20:00.677Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-3","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} +{"@timestamp":"2026-01-21T16:20:00.677Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-3","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:21:46.689Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2ce6758 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:22:00.793Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@246f1f7c (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:22:01.738Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@75f8b95e (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:22:06.772Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2930cc62 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:22:08.798Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@38b15633 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:24:35.835Z", "log.level": "INFO", "message":"Scheduler jelies-quartz-scheduler_$_NON_CLUSTERED paused.", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"org.quartz.core.QuartzScheduler"} +{"@timestamp":"2026-01-21T16:24:35.985Z", "log.level": "INFO", "message":"Shutting down Quartz Scheduler", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"org.springframework.scheduling.quartz.SchedulerFactoryBean"} +{"@timestamp":"2026-01-21T16:24:35.986Z", "log.level": "INFO", "message":"Scheduler jelies-quartz-scheduler_$_NON_CLUSTERED shutting down.", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"org.quartz.core.QuartzScheduler"} +{"@timestamp":"2026-01-21T16:24:35.986Z", "log.level": "INFO", "message":"Scheduler jelies-quartz-scheduler_$_NON_CLUSTERED paused.", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"org.quartz.core.QuartzScheduler"} +{"@timestamp":"2026-01-21T16:24:35.987Z", "log.level": "INFO", "message":"Scheduler jelies-quartz-scheduler_$_NON_CLUSTERED shutdown complete.", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"org.quartz.core.QuartzScheduler"} +{"@timestamp":"2026-01-21T16:24:36.013Z", "log.level": "INFO", "message":"Closing JPA EntityManagerFactory for persistence unit 'default'", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"} +{"@timestamp":"2026-01-21T16:24:36.017Z", "log.level": "INFO", "message":"HikariPool-1 - Shutdown initiated...", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"com.zaxxer.hikari.HikariDataSource"} +{"@timestamp":"2026-01-21T16:24:37.524Z", "log.level": "INFO", "message":"HikariPool-1 - Shutdown completed.", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"com.zaxxer.hikari.HikariDataSource"} +{"@timestamp":"2026-01-21T16:24:57.464Z", "log.level": "INFO", "message":"Starting FhirApiApplication using Java 17.0.17 with PID 18684 (/home/ds/Documents/Amrit/Backend/FHIR-API/target/classes started by ds in /home/ds/Documents/Amrit/Backend/FHIR-API)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.wipro.fhir.FhirApiApplication"} +{"@timestamp":"2026-01-21T16:24:57.465Z", "log.level": "INFO", "message":"No active profile set, falling back to 1 default profile: \"default\"", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.wipro.fhir.FhirApiApplication"} +{"@timestamp":"2026-01-21T16:24:58.237Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:24:58.238Z", "log.level": "INFO", "message":"Bootstrapping Spring Data Elasticsearch repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:24:58.271Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.271Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.272Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.272Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.274Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.275Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.275Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.276Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.276Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.277Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.277Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.278Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.279Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.279Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.280Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.281Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.281Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.282Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.282Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.283Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.284Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.285Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.286Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.287Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.287Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.288Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.288Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.290Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.290Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.291Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 49 ms. Found 0 Elasticsearch repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:24:58.295Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:24:58.295Z", "log.level": "INFO", "message":"Bootstrapping Spring Data Reactive Elasticsearch repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:24:58.304Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.305Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.305Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.305Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.305Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.305Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.306Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.306Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.306Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.306Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.306Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.306Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.307Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.307Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.307Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.307Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.307Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.308Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.308Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.308Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.308Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.308Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.308Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.309Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.309Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.309Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.309Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.309Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.310Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.310Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 14 ms. Found 0 Reactive Elasticsearch repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:24:58.315Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:24:58.316Z", "log.level": "INFO", "message":"Bootstrapping Spring Data JPA repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:24:58.328Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.329Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.329Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.330Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.409Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.409Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.410Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.410Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.410Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.411Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.454Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 135 ms. Found 19 JPA repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:24:58.478Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:24:58.479Z", "log.level": "INFO", "message":"Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:24:58.487Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.487Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.487Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.487Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.487Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.489Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.489Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.489Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.489Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.490Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.490Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.490Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.507Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 27 ms. Found 9 MongoDB repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:24:58.518Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:24:58.519Z", "log.level": "INFO", "message":"Bootstrapping Spring Data Redis repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:24:58.534Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.534Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.534Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.534Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.534Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.535Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.535Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.535Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.535Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.535Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.535Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.535Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.536Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.536Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.536Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.536Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.536Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.536Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.537Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.537Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.537Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.537Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.537Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.537Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.537Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.538Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.538Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.538Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.538Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} +{"@timestamp":"2026-01-21T16:24:58.538Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 13 ms. Found 0 Redis repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} +{"@timestamp":"2026-01-21T16:24:59.019Z", "log.level": "INFO", "message":"Tomcat initialized with port 8093 (http)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer"} +{"@timestamp":"2026-01-21T16:24:59.027Z", "log.level": "INFO", "message":"Starting service [Tomcat]", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.apache.catalina.core.StandardService"} +{"@timestamp":"2026-01-21T16:24:59.027Z", "log.level": "INFO", "message":"Starting Servlet engine: [Apache Tomcat/10.1.18]", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.apache.catalina.core.StandardEngine"} +{"@timestamp":"2026-01-21T16:24:59.081Z", "log.level": "INFO", "message":"Initializing Spring embedded WebApplicationContext", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]"} +{"@timestamp":"2026-01-21T16:24:59.082Z", "log.level": "INFO", "message":"Root WebApplicationContext: initialization completed in 1563 ms", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext"} +{"@timestamp":"2026-01-21T16:24:59.392Z", "log.level": "INFO", "message":"HHH000204: Processing PersistenceUnitInfo [name: default]", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.jpa.internal.util.LogHelper"} +{"@timestamp":"2026-01-21T16:24:59.435Z", "log.level": "INFO", "message":"HHH000412: Hibernate ORM core version 6.4.1.Final", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.Version"} +{"@timestamp":"2026-01-21T16:24:59.459Z", "log.level": "INFO", "message":"HHH000026: Second-level cache disabled", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.cache.internal.RegionFactoryInitiator"} +{"@timestamp":"2026-01-21T16:24:59.604Z", "log.level": "INFO", "message":"No LoadTimeWeaver setup: ignoring JPA class transformer", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo"} +{"@timestamp":"2026-01-21T16:24:59.621Z", "log.level": "INFO", "message":"HikariPool-1 - Starting...", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.zaxxer.hikari.HikariDataSource"} +{"@timestamp":"2026-01-21T16:25:02.008Z", "log.level": "INFO", "message":"HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@2d5e051e", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.zaxxer.hikari.pool.HikariPool"} +{"@timestamp":"2026-01-21T16:25:02.010Z", "log.level": "INFO", "message":"HikariPool-1 - Start completed.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.zaxxer.hikari.HikariDataSource"} +{"@timestamp":"2026-01-21T16:25:02.466Z", "log.level": "WARN", "message":"HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.orm.deprecation"} +{"@timestamp":"2026-01-21T16:25:03.360Z", "log.level": "INFO", "message":"HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator"} +{"@timestamp":"2026-01-21T16:25:03.362Z", "log.level": "INFO", "message":"Initialized JPA EntityManagerFactory for persistence unit 'default'", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"} +{"@timestamp":"2026-01-21T16:25:03.535Z", "log.level": "INFO", "message":"Hibernate is in classpath; If applicable, HQL parser will be used.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.jpa.repository.query.QueryEnhancerFactory"} +{"@timestamp":"2026-01-21T16:25:04.372Z", "log.level": "INFO", "message":"MongoClient with metadata {\"driver\": {\"name\": \"mongo-java-driver|sync|spring-boot\", \"version\": \"4.11.1\"}, \"os\": {\"type\": \"Linux\", \"name\": \"Linux\", \"architecture\": \"amd64\", \"version\": \"6.8.0-90-generic\"}, \"platform\": \"Java/Ubuntu/17.0.17+10-Ubuntu-122.04\"} created with settings MongoClientSettings{readPreference=primary, writeConcern=WriteConcern{w=null, wTimeout=null ms, journal=null}, retryWrites=true, retryReads=true, readConcern=ReadConcern{level=null}, credential=MongoCredential{mechanism=null, userName='root', source='admin', password=, mechanismProperties=}, transportSettings=null, streamFactoryFactory=null, commandListeners=[], codecRegistry=ProvidersCodecRegistry{codecProviders=[ValueCodecProvider{}, BsonValueCodecProvider{}, DBRefCodecProvider{}, DBObjectCodecProvider{}, DocumentCodecProvider{}, CollectionCodecProvider{}, IterableCodecProvider{}, MapCodecProvider{}, GeoJsonCodecProvider{}, GridFSFileCodecProvider{}, Jsr310CodecProvider{}, JsonObjectCodecProvider{}, BsonCodecProvider{}, EnumCodecProvider{}, com.mongodb.client.model.mql.ExpressionCodecProvider@4c89b58, com.mongodb.Jep395RecordCodecProvider@472cf6af, com.mongodb.KotlinCodecProvider@1fab1909]}, loggerSettings=LoggerSettings{maxDocumentLength=1000}, clusterSettings={hosts=[localhost:27017], srvServiceName=mongodb, mode=SINGLE, requiredClusterType=UNKNOWN, requiredReplicaSetName='null', serverSelector='null', clusterListeners='[]', serverSelectionTimeout='30000 ms', localThreshold='15 ms'}, socketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=0, receiveBufferSize=0, proxySettings=ProxySettings{host=null, port=null, username=null, password=null}}, heartbeatSocketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=10000, receiveBufferSize=0, proxySettings=ProxySettings{host=null, port=null, username=null, password=null}}, connectionPoolSettings=ConnectionPoolSettings{maxSize=100, minSize=0, maxWaitTimeMS=120000, maxConnectionLifeTimeMS=0, maxConnectionIdleTimeMS=0, maintenanceInitialDelayMS=0, maintenanceFrequencyMS=60000, connectionPoolListeners=[], maxConnecting=2}, serverSettings=ServerSettings{heartbeatFrequencyMS=10000, minHeartbeatFrequencyMS=500, serverListeners='[]', serverMonitorListeners='[]'}, sslSettings=SslSettings{enabled=false, invalidHostNameAllowed=false, context=null}, applicationName='null', compressorList=[], uuidRepresentation=JAVA_LEGACY, serverApi=null, autoEncryptionSettings=null, dnsClient=null, inetAddressResolver=null, contextProvider=null}", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.mongodb.driver.client"} +{"@timestamp":"2026-01-21T16:25:04.381Z", "log.level": "INFO", "message":"Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=17, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=13654922}", "ecs.version": "1.2.0","process.thread.name":"cluster-ClusterId{value='6970fde0ce785b271d2cb22e', description='null'}-localhost:27017","log.logger":"org.mongodb.driver.cluster"} +{"@timestamp":"2026-01-21T16:25:04.431Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.amrit_resource.TempCollection.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:25:04.436Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.atoms.feed.bahmni.encounter.ClinicalFeedDataLog.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:25:04.444Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:25:04.455Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.amrit_resource.AMRIT_ResourceMongo.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:25:04.456Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.care_context.NDHMResponse.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:25:04.458Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.atoms.feed.bahmni.encounter.EncounterFullRepresentation.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:25:04.484Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.atoms.feed.bahmni.patient.FeedDataLog.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:25:04.487Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.care_context.GenerateTokenAbdmResponses.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} +{"@timestamp":"2026-01-21T16:25:05.267Z", "log.level": "INFO", "message":"Using default implementation for ThreadExecutor", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.impl.StdSchedulerFactory"} +{"@timestamp":"2026-01-21T16:25:05.276Z", "log.level": "INFO", "message":"Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.SchedulerSignalerImpl"} +{"@timestamp":"2026-01-21T16:25:05.276Z", "log.level": "INFO", "message":"Quartz Scheduler v2.5.0-rc1 created.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} +{"@timestamp":"2026-01-21T16:25:05.276Z", "log.level": "INFO", "message":"RAMJobStore initialized.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.simpl.RAMJobStore"} +{"@timestamp":"2026-01-21T16:25:05.277Z", "log.level": "INFO", "message":"Scheduler meta-data: Quartz Scheduler (v2.5.0-rc1) 'jelies-quartz-scheduler' with instanceId 'NON_CLUSTERED'\n Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.\n NOT STARTED.\n Currently in standby mode.\n Number of jobs executed: 0\n Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.\n Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.\n", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} +{"@timestamp":"2026-01-21T16:25:05.277Z", "log.level": "INFO", "message":"Quartz scheduler 'jelies-quartz-scheduler' initialized from an externally provided properties instance.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.impl.StdSchedulerFactory"} +{"@timestamp":"2026-01-21T16:25:05.277Z", "log.level": "INFO", "message":"Quartz scheduler version: 2.5.0-rc1", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.impl.StdSchedulerFactory"} +{"@timestamp":"2026-01-21T16:25:05.277Z", "log.level": "INFO", "message":"JobFactory set to: com.wipro.fhir.config.quartz.AutowiringSpringBeanJobFactory@30cf6802", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} +{"@timestamp":"2026-01-21T16:25:05.900Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.Boolean com.wipro.fhir.utils.config.ConfigProperties.extendExpiryTime", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} +{"@timestamp":"2026-01-21T16:25:05.900Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.Integer com.wipro.fhir.utils.config.ConfigProperties.sessionExpiryTime", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} +{"@timestamp":"2026-01-21T16:25:05.900Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.String com.wipro.fhir.utils.config.ConfigProperties.redisurl", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} +{"@timestamp":"2026-01-21T16:25:05.900Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.Integer com.wipro.fhir.utils.config.ConfigProperties.redisport", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} +{"@timestamp":"2026-01-21T16:25:05.934Z", "log.level": "WARN", "message":"spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration$JpaWebConfiguration"} +{"@timestamp":"2026-01-21T16:25:06.102Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.105Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.106Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.106Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.healthID.HealthIDRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.107Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.107Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.107Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.108Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.108Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.RouteRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.108Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.UomRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.109Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.109Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.FacilityRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.109Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.110Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.110Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.110Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.111Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.111Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.112Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.112Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.112Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.113Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.113Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.113Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.113Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} +{"@timestamp":"2026-01-21T16:25:06.758Z", "log.level": "INFO", "message":"Tomcat started on port 8093 (http) with context path ''", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer"} +{"@timestamp":"2026-01-21T16:25:06.759Z", "log.level": "INFO", "message":"Starting Quartz Scheduler now", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.scheduling.quartz.SchedulerFactoryBean"} +{"@timestamp":"2026-01-21T16:25:06.759Z", "log.level": "INFO", "message":"Scheduler jelies-quartz-scheduler_$_NON_CLUSTERED started.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} +{"@timestamp":"2026-01-21T16:25:06.769Z", "log.level": "INFO", "message":"Started FhirApiApplication in 9.677 seconds (process running for 9.992)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.wipro.fhir.FhirApiApplication"} +{"@timestamp":"2026-01-21T16:29:40.505Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@44747fcc (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:29:41.589Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2a945356 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:29:42.968Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2d5e051e (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:29:50.131Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2e3176a8 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:30:00.007Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-1","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:30:00.096Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@7ba1e388 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-1","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:30:00.659Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-1","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} +{"@timestamp":"2026-01-21T16:30:00.659Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-1","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:34:23.812Z", "log.level": "INFO", "message":"Initializing Spring DispatcherServlet 'dispatcherServlet'", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]"} +{"@timestamp":"2026-01-21T16:34:23.812Z", "log.level": "INFO", "message":"Initializing Servlet 'dispatcherServlet'", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"org.springframework.web.servlet.DispatcherServlet"} +{"@timestamp":"2026-01-21T16:34:23.815Z", "log.level": "INFO", "message":"Completed initialization in 1 ms", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"org.springframework.web.servlet.DispatcherServlet"} +{"@timestamp":"2026-01-21T16:34:23.817Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:34:23.817Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/requestOtpForAbhaEnrollment", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:34:23.817Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:34:24.190Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} +{"@timestamp":"2026-01-21T16:34:24.206Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"HTTPRequestInterceptor"} +{"@timestamp":"2026-01-21T16:34:24.224Z", "log.level": "INFO", "message":"Generate OTP for ABHA enrollment API request {\"loginId\":\"994906946475\",\"loginMethod\":\"aadhaar\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:34:26.020Z", "log.level": "INFO", "message":"NDHM_FHIR NDHM V3 authentication success at : 1769013266020", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.GenerateAuthSessionServiceImpl"} +{"@timestamp":"2026-01-21T16:34:26.199Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@5e08ed95 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:34:26.579Z", "log.level": "INFO", "message":"publicKeyString : MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAstWB95C5pHLXiYW59qyO4Xb+59KYVm9Hywbo77qETZVAyc6VIsxU+UWhd/k/YtjZibCznB+HaXWX9TVTFs9Nwgv7LRGq5uLczpZQDrU7dnGkl/urRA8p0Jv/f8T0MZdFWQgks91uFffeBmJOb58u68ZRxSYGMPe4hb9XXKDVsgoSJaRNYviH7RgAI2QhTCwLEiMqIaUX3p1SAc178ZlN8qHXSSGXvhDR1GKM+y2DIyJqlzfik7lD14mDY/I4lcbftib8cv7llkybtjX1AayfZp4XpmIXKWv8nRM488/jOAF81Bi13paKgpjQUUuwq9tb5Qd/DChytYgBTBTJFe7irDFCmTIcqPr8+IMB7tXA3YXPp3z605Z6cGoYxezUm2Nz2o6oUmarDUntDhq/PnkNergmSeSvS8gD9DHBuJkJWZweG3xOPXiKQAUBr92mdFhJGm6fitO5jsBxgpmulxpG0oKDy9lAOLWSqK92JMcbMNHn4wRikdI9HSiXrrI7fLhJYTbyU3I4v5ESdEsayHXuiwO/1C8y56egzKSw44GAtEpbAkTNEEfK5H5R0QnVBIXOvfeF4tzGvmkfOO6nNXU3o/WAdOyV3xSQ9dqLY5MEL4sJCGY1iJBIAQ452s8v0ynJG5Yq+8hNhsCVnklCzAlsIzQpnSVDUVEzv17grVAw078CAwEAAQ==", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.CertificateKeyServiceImpl"} +{"@timestamp":"2026-01-21T16:34:26.584Z", "log.level": "INFO", "message":"encryptedTextBase64 :PJgT59BFq7fcPWOlShuXJkuC1yawAW+L7pb9GteYzT7R8RzPH4VARr04i35Lp70D7zeLt9rWrHU+HY2BryV+2TSDprCZzVFu8Qrojs7izGCAUK069Zhbe9DcLUNiEaVILnp3zW+UfoT6caVedAmi7AFU2nnLZS+CMwHXGNvZDhzB7AZx2S/aAw1QQimx792cXKGnrqbvF4RC8QzOLu/oFyy6x9oN9F4ZC1xio8rJf89LW6lMu0aJ+eAVVr7GeSYbzCGCWxENqOuUpUkzzzkHt8wVJpLXMC+Icb/MW/JRgvsWc9WkgTmMYLvyJayd9iUcFZKIWj7mvCKTaCYH3L04PMofipQfmTKp5ARsPGS6kTj63/1TXi6hYc14Dih3r4sMkonVr9BfkqS/L/IHn9yG8mPEUGIBEiS8z/9TL5zo9Rv20OjljNpEIoQbEd/wRzBMwckQeb5pRSCgdh7A14Gdpji/wZIZ5Y6nT1uzr+h465g5bkrya+BDB+Rs8HqOvnWEpCQayZwAGHv01zZrjBn4FIC07u+gzJAFkKfJLKQcM508yxoDWMMXX9obKgEXrchBodyRqSrtjdB8DcwpCOL4qo8dokOdeoVt3r1EwpLZi18v8IIRBmGlcs5+9FncMyjpsX9uDYwaAwmspVB4RSLr6hQHZ2QpaEHNL3clX/T9tyc=", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.Encryption"} +{"@timestamp":"2026-01-21T16:34:26.585Z", "log.level": "INFO", "message":"ABDM reqobj for request otp for enrollment: {\"scope\":[\"abha-enrol\"],\"loginHint\":\"aadhaar\",\"loginId\":\"PJgT59BFq7fcPWOlShuXJkuC1yawAW+L7pb9GteYzT7R8RzPH4VARr04i35Lp70D7zeLt9rWrHU+HY2BryV+2TSDprCZzVFu8Qrojs7izGCAUK069Zhbe9DcLUNiEaVILnp3zW+UfoT6caVedAmi7AFU2nnLZS+CMwHXGNvZDhzB7AZx2S/aAw1QQimx792cXKGnrqbvF4RC8QzOLu/oFyy6x9oN9F4ZC1xio8rJf89LW6lMu0aJ+eAVVr7GeSYbzCGCWxENqOuUpUkzzzkHt8wVJpLXMC+Icb/MW/JRgvsWc9WkgTmMYLvyJayd9iUcFZKIWj7mvCKTaCYH3L04PMofipQfmTKp5ARsPGS6kTj63/1TXi6hYc14Dih3r4sMkonVr9BfkqS/L/IHn9yG8mPEUGIBEiS8z/9TL5zo9Rv20OjljNpEIoQbEd/wRzBMwckQeb5pRSCgdh7A14Gdpji/wZIZ5Y6nT1uzr+h465g5bkrya+BDB+Rs8HqOvnWEpCQayZwAGHv01zZrjBn4FIC07u+gzJAFkKfJLKQcM508yxoDWMMXX9obKgEXrchBodyRqSrtjdB8DcwpCOL4qo8dokOdeoVt3r1EwpLZi18v8IIRBmGlcs5+9FncMyjpsX9uDYwaAwmspVB4RSLr6hQHZ2QpaEHNL3clX/T9tyc\\u003d\",\"otpSystem\":\"aadhaar\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} +{"@timestamp":"2026-01-21T16:34:28.461Z", "log.level": "INFO", "message":"ABDM response for request otp for enrollment: <200 OK OK,{\"txnId\":\"87e052b3-8927-4bc2-98ad-297625553197\",\"message\":\"OTP sent to Aadhaar registered mobile number ending with ******3131\"},[Content-Type:\"application/json\", Transfer-Encoding:\"chunked\", Connection:\"keep-alive\", Date:\"Wed, 21 Jan 2026 16:34:28 GMT\", Access-Control-Expose-Headers:\"*\", X-Frame-Options:\"SAMEORIGIN\", expires:\"0\", x-envoy-upstream-service-time:\"1661\", vary:\"Origin,Access-Control-Request-Method,Access-Control-Request-Headers\", correlation-id:\"f2f8ccf4-8d91-4bd1-8e25-3c8fc9e66782\", permissions-policy:\"geolocation=(self)\", pragma:\"no-cache\", activityid:\"5859be00-8e93-4abc-a827-d1e22d74b9d7\", content-security-policy:\"form-action 'self'\", x-content-type-options:\"nosniff\", x-xss-protection:\"1 ; mode=block\", referrer-policy:\"strict-origin-when-cross-origin\", cache-control:\"no-cache, no-store, max-age=0, must-revalidate\", server:\"istio-envoy\", Access-Control-Allow-Origin:\"*\", Access-Control-Allow-Methods:\"GET,HEAD,POST,PUT,DELETE,OPTIONS,CONNECT,TRACE,PATCH\", Access-Control-Allow-Headers:\"*\", X-Cache:\"Miss from cloudfront\", Via:\"1.1 2c89cca1ce7a0bb2069a1fa1ddabec0e.cloudfront.net (CloudFront)\", X-Amz-Cf-Pop:\"BLR50-P4\", X-Amz-Cf-Id:\"CoQEAJQ6ch1BaDNbvQtMbff6NzGS4BoLEsA7HG5DwNkNqTcE9LoBWQ==\", Strict-Transport-Security:\"max-age=31536000\"]>", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} +{"@timestamp":"2026-01-21T16:34:28.468Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"data\":{\"message\":\"OTP sent to Aadhaar registered mobile number ending with ******3131\",\"txnId\":\"87e052b3-8927-4bc2-98ad-297625553197\"},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:34:38.332Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@756e9bbb (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:34:40.451Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@44d89397 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:34:40.742Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@456a6bf4 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:34:59.649Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@342e521b (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:34:59.860Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:34:59.860Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/abhaEnrollmentByAadhaar", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:34:59.860Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:34:59.868Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} +{"@timestamp":"2026-01-21T16:34:59.870Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"HTTPRequestInterceptor"} +{"@timestamp":"2026-01-21T16:34:59.872Z", "log.level": "INFO", "message":"ABHA enrollment BY Aadhaar API request {\"loginMethod\":\"aadhaar\",\"loginId\":\"188455\",\"mobileNumber\":\"9488833131\",\"txnId\":\"87e052b3-8927-4bc2-98ad-297625553197\",\"createdBy\":\"Mokrong\",\"providerServiceMapId\":1717}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:35:00.001Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-2","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:35:00.286Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-2","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} +{"@timestamp":"2026-01-21T16:35:00.286Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-2","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:35:00.698Z", "log.level": "INFO", "message":"publicKeyString : MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAstWB95C5pHLXiYW59qyO4Xb+59KYVm9Hywbo77qETZVAyc6VIsxU+UWhd/k/YtjZibCznB+HaXWX9TVTFs9Nwgv7LRGq5uLczpZQDrU7dnGkl/urRA8p0Jv/f8T0MZdFWQgks91uFffeBmJOb58u68ZRxSYGMPe4hb9XXKDVsgoSJaRNYviH7RgAI2QhTCwLEiMqIaUX3p1SAc178ZlN8qHXSSGXvhDR1GKM+y2DIyJqlzfik7lD14mDY/I4lcbftib8cv7llkybtjX1AayfZp4XpmIXKWv8nRM488/jOAF81Bi13paKgpjQUUuwq9tb5Qd/DChytYgBTBTJFe7irDFCmTIcqPr8+IMB7tXA3YXPp3z605Z6cGoYxezUm2Nz2o6oUmarDUntDhq/PnkNergmSeSvS8gD9DHBuJkJWZweG3xOPXiKQAUBr92mdFhJGm6fitO5jsBxgpmulxpG0oKDy9lAOLWSqK92JMcbMNHn4wRikdI9HSiXrrI7fLhJYTbyU3I4v5ESdEsayHXuiwO/1C8y56egzKSw44GAtEpbAkTNEEfK5H5R0QnVBIXOvfeF4tzGvmkfOO6nNXU3o/WAdOyV3xSQ9dqLY5MEL4sJCGY1iJBIAQ452s8v0ynJG5Yq+8hNhsCVnklCzAlsIzQpnSVDUVEzv17grVAw078CAwEAAQ==", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.service.v3.abha.CertificateKeyServiceImpl"} +{"@timestamp":"2026-01-21T16:35:00.706Z", "log.level": "INFO", "message":"encryptedTextBase64 :G+Djz3vMnQ69+G6C3PvCJJDalclsgPaRTMkvCdeBsDtjTJ/zi5K9vNYpawTcPXp/TlUwVsSyfErlmFsZWDPGUWk4DGOiKTln/fgIZqZUPzB1Mgw5fgxKyBaDLf2T44ByNwWyclsFqlv7EUTgbcAt+wY7uagSCNsGEsQ3Uc5WI/nMnoGbaGvKnP6xUQoi8FLDhqB9TlQUB6ccwprlei3psE+64YWG5l+2rq4fsIk6ijvYj9Fe15LFq5gzkrHUssTP8XwpIlWsxNLW84Tf13zrGoCzg3khtBmBS/8vi36vYVAISstxWf8AcZUbDgnadSbWjAeLERqksvdAduTZKqjoHdHOmdAdKEocn7Hmc8wvWdJq0BJiR7vNhLfxjkw+lpCUQljOWvFvBL/pVlhycqZYJ8txtNj9YojucLl6xV7Zjm6QZ7vjuuXWUlqkV8iIPb15ikvTtA24/0qBs5RdpE78OyYwiNC/PpOuUZW1e31vLq3NDkU9cWVzFVX15yJ919IF+/nPbqaCRSgboPqdft8XuI21L+QWRTPmSvG+nD1gPztCwexBiItRZy3mdYMfwywTNPJOtDi8fED1GVdwDaWGsynMxUfZY+aR2TdumfBYA95HZKCrUFpN5klPa3iqg/GvPVEiZoIWf4/z/GY1KGBoGz9tLn4Lw/MfUbIBKd99QjU=", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.Encryption"} +{"@timestamp":"2026-01-21T16:35:00.711Z", "log.level": "INFO", "message":"ABDM request for enroll by Aadhaar: EnrollByAadhaar(authData={otp=OtpRequest(timestamp=2026-01-21T16:35:00.708664783Z, txnId=87e052b3-8927-4bc2-98ad-297625553197, otpValue=G+Djz3vMnQ69+G6C3PvCJJDalclsgPaRTMkvCdeBsDtjTJ/zi5K9vNYpawTcPXp/TlUwVsSyfErlmFsZWDPGUWk4DGOiKTln/fgIZqZUPzB1Mgw5fgxKyBaDLf2T44ByNwWyclsFqlv7EUTgbcAt+wY7uagSCNsGEsQ3Uc5WI/nMnoGbaGvKnP6xUQoi8FLDhqB9TlQUB6ccwprlei3psE+64YWG5l+2rq4fsIk6ijvYj9Fe15LFq5gzkrHUssTP8XwpIlWsxNLW84Tf13zrGoCzg3khtBmBS/8vi36vYVAISstxWf8AcZUbDgnadSbWjAeLERqksvdAduTZKqjoHdHOmdAdKEocn7Hmc8wvWdJq0BJiR7vNhLfxjkw+lpCUQljOWvFvBL/pVlhycqZYJ8txtNj9YojucLl6xV7Zjm6QZ7vjuuXWUlqkV8iIPb15ikvTtA24/0qBs5RdpE78OyYwiNC/PpOuUZW1e31vLq3NDkU9cWVzFVX15yJ919IF+/nPbqaCRSgboPqdft8XuI21L+QWRTPmSvG+nD1gPztCwexBiItRZy3mdYMfwywTNPJOtDi8fED1GVdwDaWGsynMxUfZY+aR2TdumfBYA95HZKCrUFpN5klPa3iqg/GvPVEiZoIWf4/z/GY1KGBoGz9tLn4Lw/MfUbIBKd99QjU=, mobile=9488833131), authMethods=[Ljava.lang.String;@1d3e2ab3}, consent=ConsentRequest(code=abha-enrollment, version=1.4))", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} +{"@timestamp":"2026-01-21T16:35:00.717Z", "log.level": "INFO", "message":"ABDM request object for ABHA enrollment by AADHAAR: {\"authData\":{\"otp\":{\"timestamp\":\"2026-01-21T16:35:00.708664783Z\",\"txnId\":\"87e052b3-8927-4bc2-98ad-297625553197\",\"otpValue\":\"G+Djz3vMnQ69+G6C3PvCJJDalclsgPaRTMkvCdeBsDtjTJ/zi5K9vNYpawTcPXp/TlUwVsSyfErlmFsZWDPGUWk4DGOiKTln/fgIZqZUPzB1Mgw5fgxKyBaDLf2T44ByNwWyclsFqlv7EUTgbcAt+wY7uagSCNsGEsQ3Uc5WI/nMnoGbaGvKnP6xUQoi8FLDhqB9TlQUB6ccwprlei3psE+64YWG5l+2rq4fsIk6ijvYj9Fe15LFq5gzkrHUssTP8XwpIlWsxNLW84Tf13zrGoCzg3khtBmBS/8vi36vYVAISstxWf8AcZUbDgnadSbWjAeLERqksvdAduTZKqjoHdHOmdAdKEocn7Hmc8wvWdJq0BJiR7vNhLfxjkw+lpCUQljOWvFvBL/pVlhycqZYJ8txtNj9YojucLl6xV7Zjm6QZ7vjuuXWUlqkV8iIPb15ikvTtA24/0qBs5RdpE78OyYwiNC/PpOuUZW1e31vLq3NDkU9cWVzFVX15yJ919IF+/nPbqaCRSgboPqdft8XuI21L+QWRTPmSvG+nD1gPztCwexBiItRZy3mdYMfwywTNPJOtDi8fED1GVdwDaWGsynMxUfZY+aR2TdumfBYA95HZKCrUFpN5klPa3iqg/GvPVEiZoIWf4/z/GY1KGBoGz9tLn4Lw/MfUbIBKd99QjU\\u003d\",\"mobile\":\"9488833131\"},\"authMethods\":[\"otp\"]},\"consent\":{\"code\":\"abha-enrollment\",\"version\":\"1.4\"}}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} +{"@timestamp":"2026-01-21T16:35:02.594Z", "log.level": "INFO", "message":"ABDM response for ABHA enrollment: <200 OK OK,{\"message\":\"This account already exist\",\"txnId\":\"87e052b3-8927-4bc2-98ad-297625553197\",\"tokens\":{\"token\":\"eyJhbGciOiJSUzUxMiJ9.eyJpc0t5Y1ZlcmlmaWVkIjp0cnVlLCJzdWIiOiI5MS0zNDgxLTQ4MDAtMjYwNiIsImF1dGhfdHlwZSI6IktZQ19PVFAiLCJjbGllbnRJZCI6ImFiaGEtcHJvZmlsZS1hcHAtYXBpIiwiYWNjb3VudFR5cGUiOiJzdGFuZGFyZCIsImdlbl9zb3VyY2UiOiJhYWRoYWFyX290cCIsIm1vYmlsZSI6Ijk0ODg4MzMxMzEiLCJ0eXAiOiJUcmFuc2FjdGlvbiIsImFwaV92ZXJzaW9uIjoidjMiLCJzeXN0ZW0iOiJBQkhBLU4iLCJhYmhhTnVtYmVyIjoiOTEtMzQ4MS00ODAwLTI2MDYiLCJwcmVmZXJyZWRBYmhhQWRkcmVzcyI6IjkxMzQ4MTQ4MDAyNjA2QHNieCIsImJhYWxfYWJoYSI6Im5vIiwiZXhwIjoxNzY5MDE1MTAyLCJpYXQiOjE3NjkwMTMzMDIsInR4bklkIjoiODdlMDUyYjMtODkyNy00YmMyLTk4YWQtMjk3NjI1NTUzMTk3In0.NNBYHl7c1qhFIP9LAUn3d8Jh_IUDp8ksGKlaQ2VPfZTN7jHdB_JjX-GBZgt5WUm0AhRiuPPvo8NKkWCM2fVEp7O0r4buWAvdejyu1Bfh5wHKGjkRx53bUiH_JUTDPyWgMnTSvMAp2NqbSPrg7oM2ltSSXXupPjHpOk7f-MsP6HkcU4OS1sZj-9PFdjl1ADVFaw1iI2NwmXkZNRCw6o0QyHWyAhocT_G446tb8q4GwEsxn-SARbTMcGdut_JYm8jpxEjuU_jLJuu8mELIgWrGc9oy_F7spkhOsW3Ni_sQy-TwfvPRNJ9AAc25bBEL5hM4eMaqDvPnqirH0xQe6tjJcux2wbFkRirNJQ32CLT1llnI83NCEDF7bwmmBUX4Ko9eJmKrpBF6WG4kU-sUJPyzqG96xClRKZIudTDsE9vSVQjnqmGtSsxzSyuZNBqT3OQ3HeHwwK1bfErar5AbsWeQuFgEHvxYVT73d8gzO1WuwHb9eaNTJurPNQLI9U9LidwH5g_eqK8lLgmeNOnbsadgAVAyr7py2tmE5KflfhDoGaGcIrZFMK_su3p9FIWP_NOK47R8Tns4lbtdLf4t1ZxO_nOFv_rrIEP5p6x0hoReH6mWmaPn1NgS-GS8QFH-wcIuB96adiI3iXroKeKCj8ND2Af-z2uL4IvK9mCwckecOwo\",\"expiresIn\":1800,\"refreshToken\":\"eyJhbGciOiJSUzUxMiJ9.eyJzdWIiOiI5MS0zNDgxLTQ4MDAtMjYwNiIsImNsaWVudElkIjoiYWJoYS1wcm9maWxlLWFwcC1hcGkiLCJzeXN0ZW0iOiJBQkhBLU4iLCJ0eXAiOiJSZWZyZXNoIiwiZXhwIjoxNzcwMzA5MzAyLCJpYXQiOjE3NjkwMTMzMDJ9.e5FkFkQgfJNUk8odAsGH9dkYMxdrKOYAfjOOnhVm0i-ycDEZMD3uRZUzqvhL30MlpdXqtirp8qf6v6ZKQhgUPXKWI_6IoO_gVamlQCy9UrmMnKtu09VfCzQ3zo2EDaphAbEPRYky7OMnKd3Hi2gJabImsvtKHj8VhLJxb7IkykGFa9J5kuIAMkV3aavaopmj_poMmAZeR_GisLGFvtDuhsc4GyEny7_Um9dh9JSSPl1flJfuWdZQ7cBaV66CjzhaBNbUo6n5GkNC_qj26FK46ZAFP-FxmTmLatxHEcLyMJJK9iYacWpoQcRjbf1HIGbm5W1z7o71G-WsEfh7uH1f6qk7rQc4jaPUM_rbU8_qIJPC9dT8usXE7TUPqkvNtLP_YhAppDm_rgZi2OZHDde7DNGTrEpBK75NwFWZndPw6bg99WmAbQbaY1M4V7DP-XbjvfR5KJNfQQuxQ9oyjhfKCrt2c2O_g89rCuYFE-LKy261riaUWVxWN9JC47PKDuFRrfR8hRMGe4D3xxGo7hlyIrY0kcLK2Jo2MWZaGRZcdrhKybiuPDEcGy5LCM0YCjwT3tfViG27pT7sakiUCCYBu0us0U9lLJjtBYFMknA5c4gxezOC7kG9BNNAeIrstcko5gYWE3x6n1lx5eNqPPdZg4Sv4jZRCDoQOpX7rAm_Kz8\",\"refreshExpiresIn\":1296000},\"ABHAProfile\":{\"preferredAddress\":\"91348148002606@sbx\",\"firstName\":\"Sureshkumar\",\"middleName\":\"\",\"lastName\":\"Palanisamy\",\"dob\":\"18-07-1985\",\"gender\":\"M\",\"photo\":\"/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCADIAKADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDvsYppUA/d/Kn8n2pChPRjTERbct8pIPY1MOlATC8U4DI/nSASjHNOxS4oAYaTmnkUmKAGUY+tP20YoAZikFPIPYUwZyflNIAxyab3NO+fd93j60bTk5FADMU3FSbaaVoAjNNPvUhWmkUwIz1ph9KmximMucGgDRCmnbKfS4pgM24pMYbGOtSgZpdtAEe3ijbUoAo20gIsUbalK0baAISoo2AVIcdzWXfeINJ09Sbm+hUg4Kqd7Z9MDOKANDbTdvPSuU/4WPoYmKH7QFzjeUGP55qzH470J3K/aip7EqcH6H/HFIDoSvNJjk1WstXsdR5tLmOXjOFbkfX0q5kZPTNAEe3mkK1NjLfhRtFAFfbTSvNWdlNKD0pgVinFMx7VYK8ZpmOaALwFOximg06mACncUgpQMZpAKABQKKiubmG0geeeVI4kGWZjgAUgJGZVUsxAVRkk9APWuG8RfEWx04mDTtl3MOGbJ2L+Pf8ADj3rj/GnjebWpWsrNjFYAjjvIR3Ptnt7CuIeWNW5JZqLgdNqPi7WdUBE9+4iORsRtq49CB1/GsNrtwSr/Nn8aqfbF6DqPeqs028lgTj+VIZaNwWDbcY/pTPtTKAQ3XiqyBirZPBpF+8pOOOooA0rfU5rKZZI5WjkHcHHNeh+G/iNKpSHVjvixhZlHzL9R3H6/WvI3kO881NHO6nOTjvQB9Q2t1FcIHidXQgbWU5BB5B/WrWK8b+H/itLRzZXt1styhCZXOGJHft3r163uY7iPfE6uvTK0xWJcU0inUhoEREdKQYHUVJimNx9KBkoNOzUQJp4NMB+acDio80uaQDy2Aa8V8d+J7m+1C5t0lP2WJiiIDwcHk+9d14/16bRdGUW7lJJyyBhnjj6deePpXhFzPJIeAcGgY151KnnmqwkOeeakhtZ7l8Kn41oW3h6eUjc+1T6DNQ5JblKLexkCTD/AONWVjMmCq/hXRQ+FUPJd/qw/pVy38PIhw0h+mKn2sS1SkcnJGwUYBA9KRLGeXjH613J0Oz/AIwWPoBihtOso12rGPzNQ6yKVI4ldNbPrV+DS9qguPwromgjCnCKMe1V2TFL2jK9mjm54GtJtycD1rt/Bvi+exuY7a4lPln5Tu6Y5P55J/lx1rnrqASIQRWIzPbzYzx71rCVzGcbH03a3S3CZBGe4B/X6VPurzf4cazJc2/2aYk7chTjHGAQP/Qs/hXom7JrQzHE009KM8UhNADhTwKbg0+mAooxQBS4pAeU/FvUGW6sbBc7Qhmb3JJA/LB/OuHsraO4jDMAa7X4wWii6027AO+RGjJ9lII/9CNcla7IIRuOAByazqGlNK+pbht0RgEXA+la9rAQMkDntXO/2oC4EQwo7mraa8YlyefwrBxZupI6dABwRTli+bpWHZ67HcyKvCj361ppfpJMsSEMcZzUNNblposmIZOR34qvLbqR0FQy3gW42SZCnofesq61tIDlHLg9FoUbg5JFuW3IBYjB+tUpAFODVd9RubrGyJ8ADO0E4qvJPcREZ+YHs1VytE86LbICM1g6jEBLurZhuBKDjII6g1Q1dD5aSjnDVcL3Iqao7H4aK00VwqgnypI3XHuec+3Ar1gcivOPhNbBdMvbrfkvMIyvptGc/wDj/wClekKMA10I5hKQ9KdSEcUwJQKcKUCngUwGgZp2OKWjvikBwXxQ00Xfh6O5wu62lBzjnDcEfnj8q8quuIgo616z8RNUe3szpohBS5iLeYwOCQeg9xgHv1FeZ/Z/NcAjpWc2aQRkxzrblUwCxPpk59hVw3ds4aK8tpA464Rc/hT30/7PcCUqctyD6VcjgE0okkVHI4GRnIxisnJGyi7FBdN8tUkEEkKuoYMwxwenPStXRrd9s8zOcoOuffFWLoQjDbN0gGBvOcVoabbiLSJSAcEqDxnPU1EmVGJgXjOZlj3ffPJzVZbGaWSQwweYIlLEjGOPfv8AhWjeWy+dgjg1Ytrc7/MR9knYg4z+NKLKkjFtNQuJVjtYoGMhbbtVvy6j+tEs584wzxlXHUEYZa2Wt2gmEkESxsAQGUDP51Uks/PkDyKSe5PWquiOV2KkMDIQy5ZT1qLVI/8AQ/X5hWwipHFsHUd6ztRXNvgddwpwldimtD034eWX2TwvbExlHmJlYHvk8H8VC12IXiuB8N+KZTqFrpYs41tyFijSPLMgwAMnoQPoP0r0ILxXRGSexzSTW5GRnFBFSYppFUIkWnVAJgakEopgSCnYxUXmrS+atIDmvHtpDc+G5XkjVpImVo27qSwBx+B/zivLYkCsK9M8fXfl+H1UH/WSqp+mCf5gV5pES0g5FY1TakX1Ec4CFeaT7MxOBhVHpUkODz61cj29e1cx0pGddW0cKqp4PUn0rWtI4nsXXzAoVcgf3jnp+prnPEciRSqfMdhIMFEOCD65qLT7++8t4ljz5fBZuPz96pwbQKSTL91GzTnbjAFXLOBLi1ABAfoQe9cnPPOmoGR55fM6bQcKPoK6TSblfs5LsvmMcnHak42WoKSZMyyRsVIyB602RRt5FXJGEg3dz15qncHCk+lTYZnzBVbjiqtxH5kLLznqMVYk757VBvy2MVpFGcjtPA1h5mprcHGIQzE8ckgqB/M/hXo/auT8H25g0qJjnMg3n8f/AK1dUDxXRCNkc03djs0hpM0masgpq75GV/I08SNn/VnHrxSCnD0qgFDktgowHrSl9oPB/AUv0pwAH1pAcT8Q2LaXasAdolIOVI6jj+RrgIJe2a9N8e23n+GZJASPIkWTA7/w/wDs1eSrLiTj9ayqI2pM3ROsUWSazrjX/K4Rv0pk03mwbVGOKwZi+4IV3HsPSsYRubTlbYuzSz6i6kAkew6VM08tiWjAk3FeuOD04H41DYS3anylCD0rSUXsDjdGrencVWwlHm1KkljcSRR3LZDMuWRuooS4ktjhgAcdKt3C3mN0mxcj1yay5BOW3MVYAdMc0b7g1y7G1a6wNyqcEHitKV8xk+tcpZK0k/y5AHXitr7QRHt3dBWco2ehUHcJXAzg1DGfm9c02VwMEnrU2nxNe30MC5HmOFyB0HrVxREmeq+Hxt0i0IyAYUIGenArXEjf3jVa3iVIlCgAAcAVPtGK6UcrHGVh/EaTzW9aaVpu2mBJnFPHApnbpnmnYycUASADFO4puDjFPAOP/rUAUdStUvdOuLZ8YljK+vUda8CvVexvpYJMhkYq2exFfQd7PBZ2ktzcyCKGNdzu3QD/AB9u9fP3ijWrfVtemngi8pG4XI5OO59/8+9TJXRUXZiR3QU8kfTNOVo5HJUDJrFDFCc5yKsW9xmUKSM1k49jZSNbMsfzIgPPanjWLyFui49GGas2s6NGARkdKuJbWr4LFc1Cfc016MzVu57xgXjLE8ZxTzCBjcK1i9vbr8pX3xWPeXiszEEBR2pXuF7bkRlWCQlc896YblRk81QkuWaQhOfrUe84zn86rl7kc5eMxkcAcgV2HgjT/PvmuiPli+Vfqev6fzrhIm+bjqa9Y8B3VpfaQhthtMWFkjJyVPqfrzzWkUZSZ2Ua4UCnkUKMU7vWhmRnNBFOptADhTlNYd54q0eyQlrtZGC5Cwjfn2yOPzNcfq3xAvZJGTTtlvGp4YgOxHvnj8vzNWothc9P49RVCfxBo9rE8kupWuEOCFkDN+Qya8SudWvr6ZHuriWZk6b3Jx9M1SN3NcXSwox64Y46VXIK51/xG8WLqASzsJc2iAMzbSPMc/XnAH07+1eYrE0rh2OAWwDWvqg8+4jiBwCwGKpXjrFeRQrwsbAH/P0rObs+VFRV1cjVyjbXXpwKlMQYhozg+tXpLUNk4B9RiqxtZIwGjGR6elY81zWxLFcTwqAYmPoV5zUhvrljmON8jrniqyTyowBDECrCXjD7yn3qX6FK/cf9vncbfKkJPtVaQTynDfu17881M1yz54JFQHzWOAp5oQO7HhY4147D86aP3nCjipIbCWVtzkgfzq6tsI0wAMCi4rFMLsUt3xx7Vv8Aw81mPSdaxcyBLeceU7MThSSME/jgZPQE1jOn7tj7VQJMNnK4ODlcD8RWlPW5E1ZH0nHKksavG6ujDKspyCPrTyAQeK+f9E1/UNLkb7LdyR8htqng/UdDXZ6f8SL6FVW+torlRwXQ7H+p7fhgVpyszuemGkrI0nxPpWtbVtrkCcjPkSfK/wCXfpngmtekB4Gz7hndnPIJyc0xZN3mE4IU8DOD+GeabEBvKk9APmIJHrimIcXDB1wSMcdR7gD9a6SBwAMp+YYPVsZA571HpagyTEDDbj36dfy61KVYkYGSThWHQngYPpVGO7+yW00uMndtC59/Wh6AWpVP2+MnO3cMZ69DWNdBp9UH3fnkJG054Bx/SriXEg8m4nOWyzED0FVtGi87UU/2VJNc1T4mzaGyR0Yi27cjtVmO1R+cc/zqdoNyDjnFJCSjYrj5jrSK8unA9sfSqjW3lPh1BHriuijAdMk/hVee1MpIxkUucXKjNEcRHCqDSpa72+7gep4qxFatDIAc1fjgyvAOO+aOYOUptFHCmF5I79qpz/N2xWhN8pPQVgX96SWWNSeOtXTg5vQmclBajb65jhgYAhnx0rHu7jzLNeNuTkj6USxs0gDA5B6DnHvROm+IqAfmUnB6YArsjBRVkcsp8zHwSbdjKc56g9/84rQL4bKkYxkDPTkdOefpWNaNviAJ6GtQsdwOC4PrwMkY7f54q47EssCTLHAxjtnFdTovjfVNObZM/wBqhH8Ex+b8G6j9R7VyKuojB3AkNhQ5J69weR/nmnr1UAE5wAMncfx/Gm13FckdiCGwCSMepIzj8PrjvRFJukkZSQX4UD0J6H2x7U2RSAynOCcFCeSR3/z1qOEB1Ma7dwIynZh71oSWFwP4A+4HjHDY7/5/+vWdc7fJdArZVwxJ7etXyxZSRu5xlW5PA565478+tVb0bldyQ5bILdB27etDVwRVuZttimcM21lBHvxVrw1EftErkdsVQmgbyEAP+rAYjPWui8PKrQtcO++SaQliDkg+9clfRHRR1kdIseYlOOoqnPDtbcBWoADGMelQSpkEAVwnZYiiBaLg805AQKIRsJBz1p7sEPPFAEbbs5pXdljo3E+9MmYYxRYCjPucMc9qxZsRjJzgE5Ax1H/6xWpqFzHBAR/E3AArBkkLEbm6joOAK7sLFpNnJiGrpDbmcCER72AY/MGOeAT/AI/jVUoFVBlcY6E5HI4z/n1qR2Ekqgr5YxknGMgfh/kmkKksApUZOcE8de/5V0MwM+1O0uprZ2MycZYBcnP8Iz6/jWQI1V5zuwVxwe+a2QP3I6bDwoPLDgevb6dqmPYbGI25HBxzkk449eOPapI1J+TGCcHaSMNyeKjZSsvGGOM/KOPWnKNqYVyADuGON34Z445//VVEkpwgHmDavQOoPJHTg8etMKAEttIYf8s1GeMdaKK0ES+YCCGcl+mRwD6DHvQULwGNcucHMagnjsR+P6UUUAUgiOHjDKxGVBHQ/Sr+jP5Cxy9FIw3YZFFFRKKloyotrVHXW10kyKemelSnDLnqKKK8yaSlY74NtXK8jeWpOQB71C8wPPB4+lFFCRQwSHJUEcdh3qteXixITjJPQetFFaU4JySZFSTUW0YjyF3aVsk9dzHggen6fXNVi7bScLmTgggfLjHP0oor0NkcF7vUgi+diQAGY9Oyg+lSKnznapbgblOcsfX6dvpRRSGVp0BwQzEkBT7jrg/j/Kr8ChNuTzgZY/w+x9R/SiiktxMWQBVjO0qBzt5BPv04/wD1UKMy7TIAxGPm6KOnP4UUUwP/2Q==\",\"mobile\":\"9488833131\",\"mobileVerified\":true,\"email\":null,\"phrAddress\":[\"91348148002606@sbx\"],\"address\":\"4/1B, MAHADEVAPURAM STREET NO 2, MAHADEVAPURAM, METTUPALAYAM, Mettupalayam, Mettupalayam, Coimbatore, Tamil Nadu\",\"districtCode\":\"569\",\"stateCode\":\"33\",\"pinCode\":\"641301\",\"abhaType\":\"STANDARD\",\"stateName\":\"TAMIL NADU\",\"districtName\":\"COIMBATORE\",\"communicationMobile\":null,\"ABHANumber\":\"91-3481-4800-2606\",\"abhaStatus\":\"ACTIVE\"},\"isNew\":false},[Content-Type:\"application/json\", Transfer-Encoding:\"chunked\", Connection:\"keep-alive\", Date:\"Wed, 21 Jan 2026 16:35:02 GMT\", Access-Control-Expose-Headers:\"*\", X-Frame-Options:\"SAMEORIGIN\", expires:\"0\", x-envoy-upstream-service-time:\"1646\", vary:\"Origin,Access-Control-Request-Method,Access-Control-Request-Headers\", correlation-id:\"ef973694-6d58-4a08-85b4-183d6cf5cbef\", permissions-policy:\"geolocation=(self)\", pragma:\"no-cache\", activityid:\"739cf15e-bbe9-4985-b4d9-f7ce0c04f4a1\", content-security-policy:\"form-action 'self'\", x-content-type-options:\"nosniff\", x-xss-protection:\"1 ; mode=block\", referrer-policy:\"strict-origin-when-cross-origin\", cache-control:\"no-cache, no-store, max-age=0, must-revalidate\", server:\"istio-envoy\", Access-Control-Allow-Origin:\"*\", Access-Control-Allow-Methods:\"GET,HEAD,POST,PUT,DELETE,OPTIONS,CONNECT,TRACE,PATCH\", Access-Control-Allow-Headers:\"*\", X-Cache:\"Miss from cloudfront\", Via:\"1.1 2fdab31714a9ba8fc39c70a3c382663c.cloudfront.net (CloudFront)\", X-Amz-Cf-Pop:\"BLR50-P4\", X-Amz-Cf-Id:\"UoGCeML7Q3vSAx0AXLaQhiJJU7w4kqt71T6ods7299k1wr-KI3cASQ==\", Strict-Transport-Security:\"max-age=31536000\"]>", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} +{"@timestamp":"2026-01-21T16:35:03.907Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"data\":{\"xToken\":\"eyJhbGciOiJSUzUxMiJ9.eyJpc0t5Y1ZlcmlmaWVkIjp0cnVlLCJzdWIiOiI5MS0zNDgxLTQ4MDAtMjYwNiIsImF1dGhfdHlwZSI6IktZQ19PVFAiLCJjbGllbnRJZCI6ImFiaGEtcHJvZmlsZS1hcHAtYXBpIiwiYWNjb3VudFR5cGUiOiJzdGFuZGFyZCIsImdlbl9zb3VyY2UiOiJhYWRoYWFyX290cCIsIm1vYmlsZSI6Ijk0ODg4MzMxMzEiLCJ0eXAiOiJUcmFuc2FjdGlvbiIsImFwaV92ZXJzaW9uIjoidjMiLCJzeXN0ZW0iOiJBQkhBLU4iLCJhYmhhTnVtYmVyIjoiOTEtMzQ4MS00ODAwLTI2MDYiLCJwcmVmZXJyZWRBYmhhQWRkcmVzcyI6IjkxMzQ4MTQ4MDAyNjA2QHNieCIsImJhYWxfYWJoYSI6Im5vIiwiZXhwIjoxNzY5MDE1MTAyLCJpYXQiOjE3NjkwMTMzMDIsInR4bklkIjoiODdlMDUyYjMtODkyNy00YmMyLTk4YWQtMjk3NjI1NTUzMTk3In0.NNBYHl7c1qhFIP9LAUn3d8Jh_IUDp8ksGKlaQ2VPfZTN7jHdB_JjX-GBZgt5WUm0AhRiuPPvo8NKkWCM2fVEp7O0r4buWAvdejyu1Bfh5wHKGjkRx53bUiH_JUTDPyWgMnTSvMAp2NqbSPrg7oM2ltSSXXupPjHpOk7f-MsP6HkcU4OS1sZj-9PFdjl1ADVFaw1iI2NwmXkZNRCw6o0QyHWyAhocT_G446tb8q4GwEsxn-SARbTMcGdut_JYm8jpxEjuU_jLJuu8mELIgWrGc9oy_F7spkhOsW3Ni_sQy-TwfvPRNJ9AAc25bBEL5hM4eMaqDvPnqirH0xQe6tjJcux2wbFkRirNJQ32CLT1llnI83NCEDF7bwmmBUX4Ko9eJmKrpBF6WG4kU-sUJPyzqG96xClRKZIudTDsE9vSVQjnqmGtSsxzSyuZNBqT3OQ3HeHwwK1bfErar5AbsWeQuFgEHvxYVT73d8gzO1WuwHb9eaNTJurPNQLI9U9LidwH5g_eqK8lLgmeNOnbsadgAVAyr7py2tmE5KflfhDoGaGcIrZFMK_su3p9FIWP_NOK47R8Tns4lbtdLf4t1ZxO_nOFv_rrIEP5p6x0hoReH6mWmaPn1NgS-GS8QFH-wcIuB96adiI3iXroKeKCj8ND2Af-z2uL4IvK9mCwckecOwo\",\"isNew\":false,\"ABHAProfile\":{\"hID\":3436,\"healthIdNumber\":\"91-3481-4800-2606\",\"name\":\"Sureshkumar Palanisamy\",\"providerServiceMapID\":1717,\"gender\":\"M\",\"yearOfBirth\":\"1985\",\"monthOfBirth\":\"07\",\"dayOfBirth\":\"18\",\"firstName\":\"Sureshkumar\",\"healthId\":\"91348148002606@sbx\",\"lastName\":\"Palanisamy\",\"middleName\":\"\",\"stateCode\":\"33\",\"districtCode\":\"569\",\"stateName\":\"TAMIL NADU\",\"districtName\":\"COIMBATORE\",\"mobile\":\"9488833131\",\"deleted\":false,\"processed\":\"N\",\"createdBy\":\"Mokrong\",\"isNewAbha\":false},\"txnId\":\"87e052b3-8927-4bc2-98ad-297625553197\"},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} +{"@timestamp":"2026-01-21T16:35:21.168Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:35:21.168Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /healthID/getBenIdForhealthID", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:35:21.168Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:35:21.175Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} +{"@timestamp":"2026-01-21T16:35:21.177Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"HTTPRequestInterceptor"} +{"@timestamp":"2026-01-21T16:35:21.180Z", "log.level": "INFO", "message":"NDHM_FHIR Request obj to fetch beneficiary Ids for HealthID :{\"healthIdNumber\":\"91-3481-4800-2606\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIDWithMobileOTP"} +{"@timestamp":"2026-01-21T16:35:21.187Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@7847b2b8 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:35:21.189Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@32c6c702 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:35:21.191Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@7992e0f3 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:35:21.193Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@3c854f0b (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:35:21.194Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@28f948b6 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:35:22.354Z", "log.level": "INFO", "message":"NDHM_FHIR get beneficiary Ids for HealthID response:{\"data\":{\"response\":\"No Beneficiary Found\"},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIDWithMobileOTP"} +{"@timestamp":"2026-01-21T16:35:52.062Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:35:52.062Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /healthIDRecord/mapHealthIDToBeneficiary", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:35:52.062Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} +{"@timestamp":"2026-01-21T16:35:52.064Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} +{"@timestamp":"2026-01-21T16:35:52.065Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"HTTPRequestInterceptor"} +{"@timestamp":"2026-01-21T16:35:52.070Z", "log.level": "INFO", "message":"NDHM_FHIR Map ABHA to beneficiary API request {\"beneficiaryRegID\":null,\"beneficiaryID\":\"297047122514\",\"healthId\":\"91-3481-4800-2606\",\"healthIdNumber\":\"91-3481-4800-2606\",\"providerServiceMapId\":1717,\"authenticationMode\":null,\"createdBy\":\"Mokrong\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIdRecord"} +{"@timestamp":"2026-01-21T16:35:53.315Z", "log.level": "INFO", "message":"Triggered ES sync for ABHA: benRegId=10468793", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.service.healthID.HealthIDServiceImpl"} +{"@timestamp":"2026-01-21T16:35:53.316Z", "log.level": "INFO", "message":"Syncing ABHA details to ES for benRegId: 10468793", "ecs.version": "1.2.0","process.thread.name":"es-sync-1","log.logger":"com.wipro.fhir.service.elasticsearch.AbhaElasticsearchSyncService"} +{"@timestamp":"2026-01-21T16:35:53.413Z", "log.level": "INFO", "message":"Successfully updated ABHA in ES: benRegId=10468793, healthID=91-3481-4800-2606, abhaID=91-3481-4800-2606", "ecs.version": "1.2.0","process.thread.name":"es-sync-1","log.logger":"com.wipro.fhir.service.elasticsearch.AbhaElasticsearchSyncService"} +{"@timestamp":"2026-01-21T16:35:53.506Z", "log.level": "INFO", "message":"NDHM_FHIR Map ABHA to beneficiary API response {\"data\":{\"benHealthID\":7928,\"healthIdNumber\":\"91-3481-4800-2606\",\"providerServiceMapId\":1717,\"beneficiaryRegID\":10468793,\"beneficiaryID\":297047122514,\"healthId\":\"91-3481-4800-2606\",\"deleted\":false,\"processed\":\"N\",\"createdBy\":\"Mokrong\",\"isNewAbha\":false},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIdRecord"} +{"@timestamp":"2026-01-21T16:40:00.001Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-3","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:40:00.383Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-3","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} +{"@timestamp":"2026-01-21T16:40:00.383Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-3","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:40:12.396Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2936ad72 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:40:23.830Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@fd5c208 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:44:33.920Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@3309bb71 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:44:53.798Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@7428977e (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:45:00.000Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-4","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:45:00.336Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-4","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} +{"@timestamp":"2026-01-21T16:45:00.336Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-4","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:49:31.031Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@5c989bec (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:49:33.121Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@6e0d8f4 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:49:35.040Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@1ebf643f (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:49:55.729Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@10ef38b6 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:50:00.002Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-5","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:50:00.624Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-5","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} +{"@timestamp":"2026-01-21T16:50:00.624Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-5","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:54:05.626Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@6cba05a (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:54:14.737Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@13fb5ec9 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:54:24.893Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@48a46625 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:54:33.049Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@90f577b (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:55:00.003Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-6","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:55:00.664Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-6","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} +{"@timestamp":"2026-01-21T16:55:00.664Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-6","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T16:59:05.057Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@e00734 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:59:08.142Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@668c6889 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:59:12.293Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@66d51acb (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T16:59:18.736Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@38cd3a67 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T17:00:00.001Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-7","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T17:00:00.479Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-7","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} +{"@timestamp":"2026-01-21T17:00:00.480Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-7","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T17:03:45.758Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@795a5c93 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T17:03:55.069Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@424597e3 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T17:04:01.382Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@32895d36 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T17:04:04.305Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@14361158 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} +{"@timestamp":"2026-01-21T17:05:00.001Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-8","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} +{"@timestamp":"2026-01-21T17:05:00.414Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-8","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} +{"@timestamp":"2026-01-21T17:05:00.414Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-8","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} diff --git a/pom.xml b/pom.xml index 2909c01..0a5c084 100644 --- a/pom.xml +++ b/pom.xml @@ -53,6 +53,30 @@ + + co.elastic.logging + logback-ecs-encoder + 1.3.2 + + + org.springframework.boot + spring-boot-starter-data-elasticsearch + + + co.elastic.clients + elasticsearch-java + 8.11.0 + + + + org.springframework.boot + spring-boot-starter-data-elasticsearch + + + co.elastic.clients + elasticsearch-java + 8.11.0 + org.springframework.boot diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index cda0a73..9723c76 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -126,3 +126,13 @@ spring.redis.host=@env.REDIS_HOST@ cors.allowed-origins=@env.CORS_ALLOWED_ORIGINS@ hipSystemUrl= @env.HIP_SYSTEM_URL@ + +# Elasticsearch Configuration +elasticsearch.host=@env.ELASTICSEARCH_HOST@ +elasticsearch.port=@env.ELASTICSEARCH_PORT@ +elasticsearch.username=@env.ELASTICSEARCH_USERNAME@ +elasticsearch.password=@env.ELASTICSEARCH_PASSWORD@ +elasticsearch.index.beneficiary=@env.ELASTICSEARCH_INDEX_BENEFICIARY@ + +# Enable/Disable ES (for gradual rollout) +elasticsearch.enabled=@env.ELASTICSEARCH_ENABLED@ \ No newline at end of file diff --git a/src/main/environment/common_docker.properties b/src/main/environment/common_docker.properties index 496239d..610ce8f 100644 --- a/src/main/environment/common_docker.properties +++ b/src/main/environment/common_docker.properties @@ -125,3 +125,14 @@ spring.redis.host=${REDIS_HOST} hipSystemUrl= ${HIP_SYSTEM_URL} + +# Elasticsearch Configuration +elasticsearch.host=${ELASTICSEARCH_HOST} +elasticsearch.port=${ELASTICSEARCH_PORT} +elasticsearch.username=${ELASTICSEARCH_USERNAME} +elasticsearch.password=${ELASTICSEARCH_PASSWORD} +elasticsearch.index.beneficiary=${ELASTICSEARCH_INDEX_BENEFICIARY} + +# Enable/Disable ES (for gradual rollout) +elasticsearch.enabled=${ELASTICSEARCH_ENABLED} + diff --git a/src/main/environment/common_example.properties b/src/main/environment/common_example.properties index 4e99ca7..c3ba365 100644 --- a/src/main/environment/common_example.properties +++ b/src/main/environment/common_example.properties @@ -119,4 +119,15 @@ logging.file.name=logs/fhir-api.log cors.allowed-origins=http://localhost:* -hipSystemUrl= \ No newline at end of file +hipSystemUrl= + +# Elasticsearch Configuration +elasticsearch.host=localhost +elasticsearch.port=9200 +elasticsearch.username=elastic +elasticsearch.password=piramalES +elasticsearch.index.beneficiary=beneficiary_index + +# Enable/Disable ES (for gradual rollout) +elasticsearch.enabled=true + diff --git a/src/main/java/com/wipro/fhir/FhirApiApplication.java b/src/main/java/com/wipro/fhir/FhirApiApplication.java index d732a3f..48cd6a1 100644 --- a/src/main/java/com/wipro/fhir/FhirApiApplication.java +++ b/src/main/java/com/wipro/fhir/FhirApiApplication.java @@ -30,10 +30,12 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.scheduling.annotation.EnableAsync; import com.wipro.fhir.data.users.User; @SpringBootApplication +@EnableAsync public class FhirApiApplication { public static void main(String[] args) { diff --git a/src/main/java/com/wipro/fhir/config/ElasticsearchConfig.java b/src/main/java/com/wipro/fhir/config/ElasticsearchConfig.java new file mode 100644 index 0000000..ce775b5 --- /dev/null +++ b/src/main/java/com/wipro/fhir/config/ElasticsearchConfig.java @@ -0,0 +1,104 @@ +package com.wipro.fhir.config; + +import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.json.jackson.JacksonJsonpMapper; +import co.elastic.clients.transport.ElasticsearchTransport; +import co.elastic.clients.transport.rest_client.RestClientTransport; +import org.apache.http.HttpHost; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.apache.http.impl.nio.reactor.IOReactorConfig; +import org.elasticsearch.client.RestClient; +import org.elasticsearch.client.RestClientBuilder; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; + +@Configuration +@EnableAsync +public class ElasticsearchConfig { + + @Value("${elasticsearch.host}") + private String esHost; + + @Value("${elasticsearch.port}") + private int esPort; + + @Value("${elasticsearch.username}") + private String esUsername; + + @Value("${elasticsearch.password}") + private String esPassword; + + @Value("${elasticsearch.connection.timeout:10000}") + private int connectionTimeout; + + @Value("${elasticsearch.socket.timeout:120000}") + private int socketTimeout; + + @Value("${elasticsearch.max.connections:200}") + private int maxConnections; + + @Value("${elasticsearch.max.connections.per.route:100}") + private int maxConnectionsPerRoute; + + @Bean + public ElasticsearchClient elasticsearchClient() { + BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials( + AuthScope.ANY, + new UsernamePasswordCredentials(esUsername, esPassword) + ); + + RestClientBuilder builder = RestClient.builder( + new HttpHost(esHost, esPort, "http") + ); + + // Apply timeout configurations + builder.setRequestConfigCallback(requestConfigBuilder -> + requestConfigBuilder + .setConnectTimeout(connectionTimeout) + .setSocketTimeout(socketTimeout) + .setConnectionRequestTimeout(connectionTimeout) + ); + + // Apply connection pool settings + builder.setHttpClientConfigCallback(httpClientBuilder -> + httpClientBuilder + .setDefaultCredentialsProvider(credentialsProvider) + .setMaxConnTotal(maxConnections) + .setMaxConnPerRoute(maxConnectionsPerRoute) + .setDefaultIOReactorConfig( + IOReactorConfig.custom() + .setSoTimeout(socketTimeout) + .build() + ) + ); + + RestClient restClient = builder.build(); + + ElasticsearchTransport transport = new RestClientTransport( + restClient, + new JacksonJsonpMapper() + ); + + return new ElasticsearchClient(transport); + } + + @Bean(name = "esAsyncExecutor") + public Executor asyncExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(5); + executor.setMaxPoolSize(20); + executor.setQueueCapacity(500); + executor.setThreadNamePrefix("es-sync-"); + executor.setRejectedExecutionHandler(new java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy()); + executor.initialize(); + return executor; + } +} \ No newline at end of file diff --git a/src/main/java/com/wipro/fhir/service/elasticsearch/AbhaElasticsearchSyncService.java b/src/main/java/com/wipro/fhir/service/elasticsearch/AbhaElasticsearchSyncService.java new file mode 100644 index 0000000..5e19375 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/elasticsearch/AbhaElasticsearchSyncService.java @@ -0,0 +1,160 @@ +package com.wipro.fhir.service.elasticsearch; + +import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.elasticsearch._types.Refresh; +import co.elastic.clients.elasticsearch.core.GetRequest; +import co.elastic.clients.elasticsearch.core.GetResponse; +import co.elastic.clients.elasticsearch.core.UpdateRequest; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +/** + * Lightweight ES sync service for FHIR-API + * Only updates ABHA-related fields without fetching full beneficiary data + */ +@Service +public class AbhaElasticsearchSyncService { + + private static final Logger logger = LoggerFactory.getLogger(AbhaElasticsearchSyncService.class); + + @Autowired + private ElasticsearchClient esClient; + + @Value("${elasticsearch.index.beneficiary}") + private String beneficiaryIndex; + + @Value("${elasticsearch.enabled}") + private boolean esEnabled; + + private final ObjectMapper objectMapper = new ObjectMapper(); + + /** + * Update ABHA details in Elasticsearch after ABHA is created/updated + * This method updates only ABHA fields, doesn't require full beneficiary data + */ + @Async("esAsyncExecutor") +public void updateAbhaInElasticsearch(Long benRegId, String healthId, String healthIdNumber, String createdDate) { + if (!esEnabled) { + logger.debug("Elasticsearch is disabled, skipping ABHA sync"); + return; + } + + if (benRegId == null) { + logger.warn("benRegId is null, cannot sync ABHA to ES"); + return; + } + + int maxRetries = 3; + int retryDelay = 2000; // 2 seconds + + for (int attempt = 1; attempt <= maxRetries; attempt++) { + try { + logger.info("Syncing ABHA details to ES for benRegId: {} (attempt {}/{})", benRegId, attempt, maxRetries); + + Map abhaData = new HashMap<>(); + abhaData.put("healthID", healthId); + abhaData.put("abhaID", healthIdNumber); + abhaData.put("abhaCreatedDate", createdDate); + + String documentId = String.valueOf(benRegId); + boolean exists = checkDocumentExists(documentId); + + if (exists) { + UpdateRequest updateRequest = UpdateRequest.of(u -> u + .index(beneficiaryIndex) + .id(documentId) + .doc(abhaData) + .refresh(Refresh.True) + .docAsUpsert(false) + .retryOnConflict(3) + ); + + esClient.update(updateRequest, Object.class); + logger.info("Successfully updated ABHA in ES: benRegId={}", benRegId); + return; + + } else { + logger.warn("Document not found in ES for benRegId={} (attempt {}/{})", benRegId, attempt, maxRetries); + if (attempt < maxRetries) { + Thread.sleep(retryDelay * attempt); + } + } + + } catch (java.net.SocketTimeoutException e) { + logger.error("Timeout updating ABHA in ES for benRegId {} (attempt {}/{}): {}", + benRegId, attempt, maxRetries, e.getMessage()); + if (attempt < maxRetries) { + try { + Thread.sleep(retryDelay * attempt); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + return; + } + } + } catch (Exception e) { + logger.error("Error updating ABHA in ES for benRegId {} (attempt {}/{}): {}", + benRegId, attempt, maxRetries, e.getMessage()); + if (attempt == maxRetries) { + logger.error("Failed to sync ABHA after {} attempts for benRegId {}", maxRetries, benRegId); + } + } + } +} + + /** + * Check if document exists in ES + */ + private boolean checkDocumentExists(String documentId) { + try { + GetRequest getRequest = GetRequest.of(g -> g + .index(beneficiaryIndex) + .id(documentId) + ); + + GetResponse response = esClient.get(getRequest, Object.class); + return response.found(); + + } catch (Exception e) { + logger.debug("Document not found or error checking: {}", e.getMessage()); + return false; + } + } + + /** + * Retry sync after 5 seconds if document wasn't found + * (Handles race condition where ABHA is saved before beneficiary is synced to ES) + */ + @Async("esAsyncExecutor") + private void retryAfterDelay(Long benRegId, String healthId, String healthIdNumber, String createdDate) { + try { + Thread.sleep(5000); // Wait 5 seconds + logger.info("Retrying ABHA sync for benRegId: {}", benRegId); + updateAbhaInElasticsearch(benRegId, healthId, healthIdNumber, createdDate); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + logger.error("Retry interrupted for benRegId: {}", benRegId); + } + } + + /** + * Update multiple ABHA addresses (comma-separated) + */ + @Async("esAsyncExecutor") + public void updateMultipleAbhaAddresses(Long benRegId, String commaSeparatedHealthIds, + String healthIdNumber, String createdDate) { + if (!esEnabled || benRegId == null) { + return; + } + + // For multiple ABHA addresses, store as comma-separated string + updateAbhaInElasticsearch(benRegId, commaSeparatedHealthIds, healthIdNumber, createdDate); + } +} \ No newline at end of file diff --git a/src/main/java/com/wipro/fhir/service/healthID/HealthIDServiceImpl.java b/src/main/java/com/wipro/fhir/service/healthID/HealthIDServiceImpl.java index f79f5d5..39c3ed9 100644 --- a/src/main/java/com/wipro/fhir/service/healthID/HealthIDServiceImpl.java +++ b/src/main/java/com/wipro/fhir/service/healthID/HealthIDServiceImpl.java @@ -46,10 +46,13 @@ import com.wipro.fhir.data.healthID.HealthIDResponse; import com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; import com.wipro.fhir.repo.healthID.HealthIDRepo; +import com.wipro.fhir.service.elasticsearch.AbhaElasticsearchSyncService; import com.wipro.fhir.utils.exception.FHIRException; import com.wipro.fhir.utils.http.HttpUtils; import com.wipro.fhir.utils.mapper.InputMapper; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.stream.IntStream; import java.util.stream.Stream; @@ -62,18 +65,21 @@ public class HealthIDServiceImpl implements HealthIDService { @Autowired private BenHealthIDMappingRepo benHealthIDMappingRepo; + @Autowired HealthIDRepo healthIDRepo; - + @Autowired + private AbhaElasticsearchSyncService abhaEsSyncService; + @Override public String mapHealthIDToBeneficiary(String request) throws FHIRException { - BenHealthIDMapping health = null; - try { - JsonObject jsonRequest = JsonParser.parseString(request).getAsJsonObject(); - JsonObject abhaProfileJson = jsonRequest.getAsJsonObject("ABHAProfile"); + BenHealthIDMapping health = null; + try { + JsonObject jsonRequest = JsonParser.parseString(request).getAsJsonObject(); + JsonObject abhaProfileJson = jsonRequest.getAsJsonObject("ABHAProfile"); - health = InputMapper.gson().fromJson(request, BenHealthIDMapping.class); + health = InputMapper.gson().fromJson(request, BenHealthIDMapping.class); if (health.getBeneficiaryRegID() == null && health.getBeneficiaryID() == null) { throw new FHIRException("BeneficiaryRegID or BeneficiaryID must be provided"); @@ -97,6 +103,20 @@ public String mapHealthIDToBeneficiary(String request) throws FHIRException { health = benHealthIDMappingRepo.save(health); } + try { + String createdDate = LocalDateTime.now(ZoneId.of("Asia/Kolkata")) + .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S")); + abhaEsSyncService.updateAbhaInElasticsearch( + health.getBeneficiaryRegID(), + healthIdNumber, // healthID (ABHA address) + healthIdNumber, // abhaID (ABHA number) + createdDate); + logger.info("Triggered ES sync for ABHA: benRegId={}", health.getBeneficiaryRegID()); + } catch (Exception e) { + // Don't fail the request if ES sync fails + logger.error("Failed to sync ABHA to ES: {}", e.getMessage()); + } + // Add to healthId table if missing boolean healthIdExists = healthIDRepo.existsByHealthIdNumber(healthIdNumber); if (!healthIdExists) { @@ -106,19 +126,20 @@ public String mapHealthIDToBeneficiary(String request) throws FHIRException { // phrAddress as comma-separated JsonArray phrAddressArray = abhaProfileJson.getAsJsonArray("phrAddress"); String abhaAddress = IntStream.range(0, phrAddressArray.size()) - .mapToObj(i -> phrAddressArray.get(i).getAsString()) - .collect(Collectors.joining(", ")); + .mapToObj(i -> phrAddressArray.get(i).getAsString()) + .collect(Collectors.joining(", ")); healthID.setHealthId(abhaAddress); // Full name String fullName = Stream.of("firstName", "middleName", "lastName") - .map(field -> abhaProfileJson.has(field) ? abhaProfileJson.get(field).getAsString() : "") - .filter(s -> !s.isEmpty()) - .collect(Collectors.joining(" ")); + .map(field -> abhaProfileJson.has(field) ? abhaProfileJson.get(field).getAsString() : "") + .filter(s -> !s.isEmpty()) + .collect(Collectors.joining(" ")); healthID.setName(fullName.trim()); // Parse and split DOB - LocalDate dob = LocalDate.parse(abhaProfileJson.get("dob").getAsString(), DateTimeFormatter.ofPattern("dd-MM-yyyy")); + LocalDate dob = LocalDate.parse(abhaProfileJson.get("dob").getAsString(), + DateTimeFormatter.ofPattern("dd-MM-yyyy")); healthID.setYearOfBirth(String.valueOf(dob.getYear())); healthID.setMonthOfBirth(String.format("%02d", dob.getMonthValue())); healthID.setDayOfBirth(String.format("%02d", dob.getDayOfMonth())); @@ -129,71 +150,85 @@ public String mapHealthIDToBeneficiary(String request) throws FHIRException { healthID.setIsNewAbha(jsonRequest.get("isNew").getAsBoolean()); healthIDRepo.save(healthID); - } - } - } catch (FHIRException e) { - throw e; // already custom - } catch (Exception e) { - logger.error("Unexpected error while mapping HealthID", e); - throw new FHIRException("Unexpected error: " + e.getMessage()); - } + try { + String createdDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); + abhaEsSyncService.updateAbhaInElasticsearch( + health.getBeneficiaryRegID(), + abhaAddress, // healthID (ABHA address) + healthIdNumber, // abhaID (ABHA number) + createdDate); + logger.info("Triggered ES sync for ABHA: benRegId={}", health.getBeneficiaryRegID()); + } catch (Exception e) { + // Don't fail the request if ES sync fails + logger.error("Failed to sync ABHA to ES: {}", e.getMessage()); + } + } + } - return new Gson().toJson(health); -} + } catch (FHIRException e) { + throw e; // already custom + } catch (Exception e) { + logger.error("Unexpected error while mapping HealthID", e); + throw new FHIRException("Unexpected error: " + e.getMessage()); + } + return new Gson().toJson(health); + } public String getBenHealthID(Long benRegID) { - List healthDetailsList = benHealthIDMappingRepo.getHealthDetails(benRegID); - - List healthIdNumbers = healthDetailsList.stream() - .map(BenHealthIDMapping::getHealthIdNumber) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - - Map abhaMap = new HashMap<>(); - if (!healthIdNumbers.isEmpty()) { - List abhaResults = benHealthIDMappingRepo.getIsNewAbhaBatch(healthIdNumbers); - for (Object[] row : abhaResults) { - String healthIdNumber = (String) row[0]; - Boolean isNewAbha = (Boolean) row[1]; - abhaMap.put(healthIdNumber, isNewAbha); - } - } - - for (BenHealthIDMapping healthDetails : healthDetailsList) { - Boolean isNew = abhaMap.get(healthDetails.getHealthIdNumber()); - healthDetails.setNewAbha(Boolean.TRUE.equals(isNew)); + List healthDetailsList = benHealthIDMappingRepo.getHealthDetails(benRegID); + + List healthIdNumbers = healthDetailsList.stream() + .map(BenHealthIDMapping::getHealthIdNumber) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + Map abhaMap = new HashMap<>(); + if (!healthIdNumbers.isEmpty()) { + List abhaResults = benHealthIDMappingRepo.getIsNewAbhaBatch(healthIdNumbers); + for (Object[] row : abhaResults) { + String healthIdNumber = (String) row[0]; + Boolean isNewAbha = (Boolean) row[1]; + abhaMap.put(healthIdNumber, isNewAbha); + } + } + + for (BenHealthIDMapping healthDetails : healthDetailsList) { + Boolean isNew = abhaMap.get(healthDetails.getHealthIdNumber()); + healthDetails.setNewAbha(Boolean.TRUE.equals(isNew)); } - Map responseMap = new HashMap<>(); - responseMap.put("BenHealthDetails", healthDetailsList); + Map responseMap = new HashMap<>(); + responseMap.put("BenHealthDetails", healthDetailsList); + + return new Gson().toJson(responseMap); + } - return new Gson().toJson(responseMap); - } - @Override public String addRecordToHealthIdTable(String request) throws FHIRException { JsonObject jsonRequest = JsonParser.parseString(request).getAsJsonObject(); - JsonObject abhaProfileJson = jsonRequest.getAsJsonObject("ABHAProfile"); - HealthIDResponse healthID = InputMapper.gson().fromJson(abhaProfileJson, HealthIDResponse.class); + JsonObject abhaProfileJson = jsonRequest.getAsJsonObject("ABHAProfile"); + HealthIDResponse healthID = InputMapper.gson().fromJson(abhaProfileJson, HealthIDResponse.class); String res = null; try { Integer healthIdCount = healthIDRepo.getCountOfHealthIdNumber(healthID.getHealthIdNumber()); - if(healthIdCount < 1) { - healthID.setHealthIdNumber(abhaProfileJson.get("ABHANumber").getAsString()); - JsonArray phrAddressArray = abhaProfileJson.getAsJsonArray("phrAddress"); - StringBuilder abhaAddressBuilder = new StringBuilder(); - - for (int i = 0; i < phrAddressArray.size(); i++) { - abhaAddressBuilder.append(phrAddressArray.get(i).getAsString()); - if (i < phrAddressArray.size() - 1) { - abhaAddressBuilder.append(", "); - } - } - healthID.setHealthId(abhaAddressBuilder.toString()); + if (healthIdCount < 1) { + healthID.setHealthIdNumber(abhaProfileJson.get("ABHANumber").getAsString()); + JsonArray phrAddressArray = abhaProfileJson.getAsJsonArray("phrAddress"); + StringBuilder abhaAddressBuilder = new StringBuilder(); + + for (int i = 0; i < phrAddressArray.size(); i++) { + abhaAddressBuilder.append(phrAddressArray.get(i).getAsString()); + if (i < phrAddressArray.size() - 1) { + abhaAddressBuilder.append(", "); + } + } + healthID.setHealthId(abhaAddressBuilder.toString()); healthID.setName( - abhaProfileJson.get("firstName").getAsString() + " " + abhaProfileJson.get("middleName").getAsString() + " " + abhaProfileJson.get("lastName").getAsString()); + abhaProfileJson.get("firstName").getAsString() + " " + + abhaProfileJson.get("middleName").getAsString() + " " + + abhaProfileJson.get("lastName").getAsString()); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy"); Date date = simpleDateFormat.parse(abhaProfileJson.get("dob").getAsString()); SimpleDateFormat year = new SimpleDateFormat("yyyy"); @@ -209,22 +244,22 @@ public String addRecordToHealthIdTable(String request) throws FHIRException { res = "Data Saved Successfully"; } else { res = "Data already exists"; - } + } } catch (Exception e) { throw new FHIRException("Error in saving data"); } return res; } - + @Override public String getMappedBenIdForHealthId(String healthIdNumber) { String[] beneficiaryIdsList = benHealthIDMappingRepo.getBenIdForHealthId(healthIdNumber); - - if(beneficiaryIdsList.length > 0) { + + if (beneficiaryIdsList.length > 0) { String[] benIds = benHealthIDMappingRepo.getBeneficiaryIds(beneficiaryIdsList); return Arrays.toString(benIds); - } + } return "No Beneficiary Found"; } - + } \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 6117156..2afeaf0 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,13 +1,29 @@ -spring.datasource.tomcat.initial-size=5 -spring.datasource.tomcat.max-active=30 -spring.datasource.tomcat.max-idle=5 -spring.datasource.tomcat.min-idle=2 -spring.datasource.tomcat.min-evictable-idle-time-millis=15000 -spring.datasource.tomcat.remove-abandoned=true -spring.datasource.tomcat.remove-abandoned-timeout=1800 -spring.datasource.tomcat.logAbandoned=true -spring.datasource.continue-on-error=true -spring.datasource.tomcat.jdbc-interceptors=ResetAbandonedTimer +# spring.datasource.tomcat.initial-size=5 +# spring.datasource.tomcat.max-active=30 +# spring.datasource.tomcat.max-idle=5 +# spring.datasource.tomcat.min-idle=2 +# spring.datasource.tomcat.min-evictable-idle-time-millis=15000 +# spring.datasource.tomcat.remove-abandoned=true +# spring.datasource.tomcat.remove-abandoned-timeout=1800 +# spring.datasource.tomcat.logAbandoned=true +# spring.datasource.continue-on-error=true +# spring.datasource.tomcat.jdbc-interceptors=ResetAbandonedTimer + + +# ---- HIKARI (REQUIRED) ---- +spring.datasource.hikari.minimum-idle=5 +spring.datasource.hikari.maximum-pool-size=30 +spring.datasource.hikari.idle-timeout=600000 +spring.datasource.hikari.max-lifetime=1800000 +spring.datasource.hikari.keepalive-time=300000 +spring.datasource.hikari.connection-timeout=30000 + +# Validation (CRITICAL) +spring.datasource.hikari.connection-test-query=SELECT 1 +spring.datasource.hikari.validation-timeout=5000 + +# Prevent isolation detection failure +spring.datasource.hikari.transaction-isolation=TRANSACTION_READ_COMMITTED spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl @@ -74,3 +90,41 @@ logging.path=logs/ logging.file.name=logs/fhir-api.log +# Connection timeouts +elasticsearch.connection.timeout=10000 +elasticsearch.socket.timeout=120000 +elasticsearch.max.retry.timeout=120000 + +# Connection pooling - INCREASED for bulk operations +elasticsearch.max.connections=200 +elasticsearch.max.connections.per.route=100 + +# Request configuration +elasticsearch.request.timeout=60000 +elasticsearch.max.result.window=10000 + +# Bulk indexing - OPTIMIZED for maximum throughput +elasticsearch.bulk.size=2000 +elasticsearch.bulk.concurrent.requests=8 +elasticsearch.bulk.flush.interval=30s + +# Search performance (unchanged - maintains fast search) +elasticsearch.search.default.size=100 +elasticsearch.search.max.size=500 +elasticsearch.search.timeout=5s + +# Query cache (for search performance) +elasticsearch.query.cache.enabled=true +elasticsearch.query.cache.size=10% + +# Request cache +elasticsearch.request.cache.enabled=true + +# Circuit breaker +elasticsearch.circuit.breaker.enabled=true +elasticsearch.circuit.breaker.limit=95% + +# Async operations thread pool +elasticsearch.async.thread.pool.size=20 +elasticsearch.async.thread.pool.queue.size=5000 + From db93a33fc81e8d36d4de898c4475c634ab8323d8 Mon Sep 17 00:00:00 2001 From: KOPPIREDDY DURGA PRASAD <144464542+DurgaPrasad-54@users.noreply.github.com> Date: Thu, 12 Mar 2026 21:27:16 +0530 Subject: [PATCH 6/7] Cherry-pick health and version API enhancements to release-3.6.1 (#139) * feat(health,version): add health and version endpoints * fix(jwt): fix the jwtvalidation issues * refactor(health): simplify MySQL health check and remove sensitive details * fix(health): harden advanced MySQL checks and throttle execution * fix(health): scope PROCESSLIST lock-wait check to application DB user * fix(health): cancel timed-out advanced MySQL checks to avoid orphaned tasks * fix(health): avoid sharing JDBC connections across threads in advanced MySQL checks * refactor(health): extract MySQL basic health query into helper method * fix(health): avoid blocking DB I/O under write lock and restore interrupt flag * feat(health): add gpl license header --- pom.xml | 26 + .../controller/health/HealthController.java | 84 +++ .../controller/version/VersionController.java | 79 +++ .../fhir/service/health/HealthService.java | 573 ++++++++++++++++++ .../fhir/utils/JwtUserIdValidationFilter.java | 4 +- 5 files changed, 765 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/wipro/fhir/controller/health/HealthController.java create mode 100644 src/main/java/com/wipro/fhir/controller/version/VersionController.java create mode 100644 src/main/java/com/wipro/fhir/service/health/HealthService.java diff --git a/pom.xml b/pom.xml index 0a5c084..69e1b16 100644 --- a/pom.xml +++ b/pom.xml @@ -511,6 +511,32 @@ + + io.github.git-commit-id + git-commit-id-maven-plugin + 7.0.0 + + + get-the-git-infos + + revision + + initialize + + + + true + ${project.build.outputDirectory}/git.properties + + ^git.branch$ + ^git.commit.id.abbrev$ + ^git.build.version$ + ^git.build.time$ + + false + false + + org.springframework.boot spring-boot-maven-plugin diff --git a/src/main/java/com/wipro/fhir/controller/health/HealthController.java b/src/main/java/com/wipro/fhir/controller/health/HealthController.java new file mode 100644 index 0000000..1599a9e --- /dev/null +++ b/src/main/java/com/wipro/fhir/controller/health/HealthController.java @@ -0,0 +1,84 @@ +/* +* AMRIT – Accessible Medical Records via Integrated Technology +* Integrated EHR (Electronic Health Records) Solution +* +* Copyright (C) "Piramal Swasthya Management and Research Institute" +* +* This file is part of AMRIT. +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see https://www.gnu.org/licenses/. +*/ + +package com.wipro.fhir.controller.health; + +import java.time.Instant; +import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.wipro.fhir.service.health.HealthService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; + +@RestController +@RequestMapping("/health") +@Tag(name = "Health Check", description = "APIs for checking infrastructure health status") +public class HealthController { + + private static final Logger logger = LoggerFactory.getLogger(HealthController.class); + + private final HealthService healthService; + + public HealthController(HealthService healthService) { + this.healthService = healthService; + } + + @GetMapping + @Operation(summary = "Check infrastructure health", + description = "Returns the health status of MySQL, Redis, and other configured services") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "Services are UP or DEGRADED (operational with warnings)"), + @ApiResponse(responseCode = "503", description = "One or more critical services are DOWN") + }) + public ResponseEntity> checkHealth() { + logger.info("Health check endpoint called"); + + try { + Map healthStatus = healthService.checkHealth(); + String overallStatus = (String) healthStatus.get("status"); + + // Return 503 only if DOWN; 200 for both UP and DEGRADED (DEGRADED = operational with warnings) + HttpStatus httpStatus = "DOWN".equals(overallStatus) ? HttpStatus.SERVICE_UNAVAILABLE : HttpStatus.OK; + + logger.debug("Health check completed with status: {}", overallStatus); + return new ResponseEntity<>(healthStatus, httpStatus); + + } catch (Exception e) { + logger.error("Unexpected error during health check", e); + + Map errorResponse = Map.of( + "status", "DOWN", + "timestamp", Instant.now().toString() + ); + + return new ResponseEntity<>(errorResponse, HttpStatus.SERVICE_UNAVAILABLE); + } + } +} diff --git a/src/main/java/com/wipro/fhir/controller/version/VersionController.java b/src/main/java/com/wipro/fhir/controller/version/VersionController.java new file mode 100644 index 0000000..7a5af18 --- /dev/null +++ b/src/main/java/com/wipro/fhir/controller/version/VersionController.java @@ -0,0 +1,79 @@ +/* +* AMRIT – Accessible Medical Records via Integrated Technology +* Integrated EHR (Electronic Health Records) Solution +* +* Copyright (C) "Piramal Swasthya Management and Research Institute" +* +* This file is part of AMRIT. +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see https://www.gnu.org/licenses/. +*/ +package com.wipro.fhir.controller.version; + +import java.io.IOException; +import java.io.InputStream; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Properties; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.v3.oas.annotations.Operation; + +@RestController +public class VersionController { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); + + private static final String UNKNOWN_VALUE = "unknown"; + + @Operation(summary = "Get version information") + @GetMapping(value = "/version", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> versionInformation() { + Map response = new LinkedHashMap<>(); + try { + logger.info("version Controller Start"); + Properties gitProperties = loadGitProperties(); + response.put("buildTimestamp", gitProperties.getProperty("git.build.time", UNKNOWN_VALUE)); + response.put("version", gitProperties.getProperty("git.build.version", UNKNOWN_VALUE)); + response.put("branch", gitProperties.getProperty("git.branch", UNKNOWN_VALUE)); + response.put("commitHash", gitProperties.getProperty("git.commit.id.abbrev", UNKNOWN_VALUE)); + } catch (Exception e) { + logger.error("Failed to load version information", e); + response.put("buildTimestamp", UNKNOWN_VALUE); + response.put("version", UNKNOWN_VALUE); + response.put("branch", UNKNOWN_VALUE); + response.put("commitHash", UNKNOWN_VALUE); + } + logger.info("version Controller End"); + return ResponseEntity.ok(response); + } + + private Properties loadGitProperties() throws IOException { + Properties properties = new Properties(); + try (InputStream input = getClass().getClassLoader() + .getResourceAsStream("git.properties")) { + if (input != null) { + properties.load(input); + } + } + return properties; + } +} diff --git a/src/main/java/com/wipro/fhir/service/health/HealthService.java b/src/main/java/com/wipro/fhir/service/health/HealthService.java new file mode 100644 index 0000000..4072bb5 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/health/HealthService.java @@ -0,0 +1,573 @@ +/* +* AMRIT – Accessible Medical Records via Integrated Technology +* Integrated EHR (Electronic Health Records) Solution +* +* Copyright (C) "Piramal Swasthya Management and Research Institute" +* +* This file is part of AMRIT. +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see https://www.gnu.org/licenses/. +*/ + +package com.wipro.fhir.service.health; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.time.Instant; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.ExecutionException; +import java.util.function.Supplier; +import jakarta.annotation.PreDestroy; +import javax.sql.DataSource; +import com.zaxxer.hikari.HikariDataSource; +import com.zaxxer.hikari.HikariPoolMXBean; +import java.lang.management.ManagementFactory; +import javax.management.MBeanServer; +import javax.management.ObjectName; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +@Service +public class HealthService { + + private static final Logger logger = LoggerFactory.getLogger(HealthService.class); + + // Status constants + private static final String STATUS_KEY = "status"; + private static final String STATUS_UP = "UP"; + private static final String STATUS_DOWN = "DOWN"; + private static final String STATUS_DEGRADED = "DEGRADED"; + + // Severity levels and keys + private static final String SEVERITY_KEY = "severity"; + private static final String SEVERITY_OK = "OK"; + private static final String SEVERITY_WARNING = "WARNING"; + private static final String SEVERITY_CRITICAL = "CRITICAL"; + + // Response keys + private static final String ERROR_KEY = "error"; + private static final String MESSAGE_KEY = "message"; + private static final String RESPONSE_TIME_KEY = "responseTimeMs"; + + // Component names + private static final String MYSQL_COMPONENT = "MySQL"; + private static final String REDIS_COMPONENT = "Redis"; + + // Timeouts (in seconds) + private static final long MYSQL_TIMEOUT_SECONDS = 3; + private static final long REDIS_TIMEOUT_SECONDS = 3; + private static final long ADVANCED_CHECKS_TIMEOUT_MS = 500L; + private static final long ADVANCED_CHECKS_THROTTLE_SECONDS = 30; + private static final long RESPONSE_TIME_THRESHOLD_MS = 2000; + + // Diagnostic event codes for concise logging + private static final String DIAGNOSTIC_LOCK_WAIT = "MYSQL_LOCK_WAIT"; + private static final String DIAGNOSTIC_SLOW_QUERIES = "MYSQL_SLOW_QUERIES"; + private static final String DIAGNOSTIC_POOL_EXHAUSTED = "MYSQL_POOL_EXHAUSTED"; + private static final String DIAGNOSTIC_LOG_TEMPLATE = "Diagnostic: {}"; + + private final DataSource dataSource; + private final RedisTemplate redisTemplate; + private final ExecutorService executorService; + private final ExecutorService advancedCheckExecutor; + private volatile long lastAdvancedCheckTime = 0; + private volatile AdvancedCheckResult cachedAdvancedCheckResult = null; + private final ReentrantReadWriteLock advancedCheckLock = new ReentrantReadWriteLock(); + + // Deadlock check resilience - disable after first permission error + private volatile boolean deadlockCheckDisabled = false; + + // Advanced checks always enabled + private static final boolean ADVANCED_HEALTH_CHECKS_ENABLED = true; + + public HealthService(DataSource dataSource, + @Autowired(required = false) RedisTemplate redisTemplate) { + this.dataSource = dataSource; + this.redisTemplate = redisTemplate; + this.executorService = Executors.newFixedThreadPool(6); + this.advancedCheckExecutor = Executors.newSingleThreadExecutor(r -> { + Thread t = new Thread(r, "health-advanced-check"); + t.setDaemon(true); + return t; + }); + } + + @PreDestroy + public void shutdown() { + if (executorService != null && !executorService.isShutdown()) { + try { + executorService.shutdown(); + if (!executorService.awaitTermination(5, TimeUnit.SECONDS)) { + executorService.shutdownNow(); + logger.warn("ExecutorService did not terminate gracefully"); + } + } catch (InterruptedException e) { + executorService.shutdownNow(); + Thread.currentThread().interrupt(); + logger.warn("ExecutorService shutdown interrupted", e); + } + } + if (advancedCheckExecutor != null && !advancedCheckExecutor.isShutdown()) { + advancedCheckExecutor.shutdownNow(); + } + } + + public Map checkHealth() { + Map response = new LinkedHashMap<>(); + response.put("timestamp", Instant.now().toString()); + + Map mysqlStatus = new ConcurrentHashMap<>(); + Map redisStatus = new ConcurrentHashMap<>(); + + if (!executorService.isShutdown()) { + performHealthChecks(mysqlStatus, redisStatus); + } + + ensurePopulated(mysqlStatus, MYSQL_COMPONENT); + ensurePopulated(redisStatus, REDIS_COMPONENT); + + Map> components = new LinkedHashMap<>(); + components.put("mysql", mysqlStatus); + components.put("redis", redisStatus); + + response.put("components", components); + response.put(STATUS_KEY, computeOverallStatus(components)); + + return response; + } + + private void performHealthChecks(Map mysqlStatus, Map redisStatus) { + Future mysqlFuture = executorService.submit( + () -> performHealthCheck(MYSQL_COMPONENT, mysqlStatus, this::checkMySQLHealthSync)); + Future redisFuture = executorService.submit( + () -> performHealthCheck(REDIS_COMPONENT, redisStatus, this::checkRedisHealthSync)); + + try { + awaitHealthChecks(mysqlFuture, redisFuture); + } catch (TimeoutException e) { + logger.warn("Health check aggregate timeout after {} seconds", getMaxTimeout()); + mysqlFuture.cancel(true); + redisFuture.cancel(true); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + logger.warn("Health check was interrupted"); + mysqlFuture.cancel(true); + redisFuture.cancel(true); + } catch (Exception e) { + logger.warn("Health check execution error: {}", e.getMessage()); + mysqlFuture.cancel(true); + redisFuture.cancel(true); + } + } + + private void awaitHealthChecks(Future mysqlFuture, Future redisFuture) throws TimeoutException, InterruptedException, ExecutionException { + long maxTimeout = getMaxTimeout(); + long deadlineNs = System.nanoTime() + TimeUnit.SECONDS.toNanos(maxTimeout); + + mysqlFuture.get(maxTimeout, TimeUnit.SECONDS); + long remainingNs = deadlineNs - System.nanoTime(); + + if (remainingNs > 0) { + redisFuture.get(remainingNs, TimeUnit.NANOSECONDS); + } else { + redisFuture.cancel(true); + } + } + + private long getMaxTimeout() { + return Math.max(MYSQL_TIMEOUT_SECONDS, REDIS_TIMEOUT_SECONDS) + 1; + } + + + private void ensurePopulated(Map status, String componentName) { + if (!status.containsKey(STATUS_KEY)) { + status.put(STATUS_KEY, STATUS_DOWN); + status.put(SEVERITY_KEY, SEVERITY_CRITICAL); + status.put(ERROR_KEY, componentName + " health check did not complete in time"); + } + } + + private HealthCheckResult checkMySQLHealthSync() { + try (Connection connection = dataSource.getConnection(); + PreparedStatement stmt = connection.prepareStatement("SELECT 1 as health_check")) { + + stmt.setQueryTimeout((int) MYSQL_TIMEOUT_SECONDS); + + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + // Basic health check passed, now run advanced checks with throttling + boolean isDegraded = performAdvancedMySQLChecksWithThrottle(); + return new HealthCheckResult(true, null, isDegraded); + } + } + + return new HealthCheckResult(false, "No result from health check query", false); + + } catch (Exception e) { + logger.warn("MySQL health check failed: {}", e.getMessage(), e); + return new HealthCheckResult(false, "MySQL connection failed", false); + } + } + + private HealthCheckResult checkRedisHealthSync() { + if (redisTemplate == null) { + return new HealthCheckResult(true, "Redis not configured — skipped", false); + } + + try { + String pong = redisTemplate.execute((org.springframework.data.redis.core.RedisCallback) (connection) -> connection.ping()); + + if ("PONG".equals(pong)) { + return new HealthCheckResult(true, null, false); + } + + return new HealthCheckResult(false, "Redis PING failed", false); + + } catch (Exception e) { + logger.warn("Redis health check failed: {}", e.getMessage(), e); + return new HealthCheckResult(false, "Redis connection failed", false); + } + } + + private Map performHealthCheck(String componentName, + Map status, + Supplier checker) { + long startTime = System.currentTimeMillis(); + + try { + HealthCheckResult result = checker.get(); + long responseTime = System.currentTimeMillis() - startTime; + + // Determine status: DOWN (unhealthy), DEGRADED (healthy but with issues), or UP + String componentStatus; + if (!result.isHealthy) { + componentStatus = STATUS_DOWN; + } else if (result.isDegraded) { + componentStatus = STATUS_DEGRADED; + } else { + componentStatus = STATUS_UP; + } + status.put(STATUS_KEY, componentStatus); + + // Set response time + status.put(RESPONSE_TIME_KEY, responseTime); + + // Determine severity based on health, response time, and degradation flags + String severity = determineSeverity(result.isHealthy, responseTime, result.isDegraded); + status.put(SEVERITY_KEY, severity); + + // Include message or error based on health status + if (result.error != null) { + // Use MESSAGE_KEY for informational messages when healthy + // Use ERROR_KEY for actual error messages when unhealthy + String fieldKey = result.isHealthy ? MESSAGE_KEY : ERROR_KEY; + status.put(fieldKey, result.error); + } + + return status; + + } catch (Exception e) { + long responseTime = System.currentTimeMillis() - startTime; + logger.error("{} health check failed with exception: {}", componentName, e.getMessage(), e); + + status.put(STATUS_KEY, STATUS_DOWN); + status.put(RESPONSE_TIME_KEY, responseTime); + status.put(SEVERITY_KEY, SEVERITY_CRITICAL); + status.put(ERROR_KEY, "Health check failed with an unexpected error"); + + return status; + } + } + + private String determineSeverity(boolean isHealthy, long responseTimeMs, boolean isDegraded) { + if (!isHealthy) { + return SEVERITY_CRITICAL; + } + + if (isDegraded) { + return SEVERITY_WARNING; + } + + if (responseTimeMs > RESPONSE_TIME_THRESHOLD_MS) { + return SEVERITY_WARNING; + } + + return SEVERITY_OK; + } + + private String computeOverallStatus(Map> components) { + boolean hasCritical = false; + boolean hasDegraded = false; + + for (Map componentStatus : components.values()) { + String status = (String) componentStatus.get(STATUS_KEY); + String severity = (String) componentStatus.get(SEVERITY_KEY); + + if (STATUS_DOWN.equals(status) || SEVERITY_CRITICAL.equals(severity)) { + hasCritical = true; + } + + if (STATUS_DEGRADED.equals(status)) { + hasDegraded = true; + } + + if (SEVERITY_WARNING.equals(severity)) { + hasDegraded = true; + } + } + + if (hasCritical) { + return STATUS_DOWN; + } + + if (hasDegraded) { + return STATUS_DEGRADED; + } + + return STATUS_UP; + } + + // Internal advanced health checks for MySQL - do not expose details in responses + private boolean performAdvancedMySQLChecksWithThrottle() { + if (!ADVANCED_HEALTH_CHECKS_ENABLED) { + return false; // Advanced checks disabled + } + + long currentTime = System.currentTimeMillis(); + + // Check throttle window - use read lock first for fast path + advancedCheckLock.readLock().lock(); + try { + if (cachedAdvancedCheckResult != null && + (currentTime - lastAdvancedCheckTime) < ADVANCED_CHECKS_THROTTLE_SECONDS * 1000) { + // Return cached result - within throttle window + return cachedAdvancedCheckResult.isDegraded; + } + } finally { + advancedCheckLock.readLock().unlock(); + } + + // Outside throttle window - acquire write lock and run checks + advancedCheckLock.writeLock().lock(); + try { + // Double-check after acquiring write lock + if (cachedAdvancedCheckResult != null && + (currentTime - lastAdvancedCheckTime) < ADVANCED_CHECKS_THROTTLE_SECONDS * 1000) { + return cachedAdvancedCheckResult.isDegraded; + } + + AdvancedCheckResult result; + Future future = + advancedCheckExecutor.submit(this::performAdvancedMySQLChecks); + try { + result = future.get(ADVANCED_CHECKS_TIMEOUT_MS, TimeUnit.MILLISECONDS); + } catch (TimeoutException ex) { + logger.debug("Advanced MySQL checks timed out after {}ms", ADVANCED_CHECKS_TIMEOUT_MS); + future.cancel(true); + result = new AdvancedCheckResult(true); // treat timeout as degraded + } catch (ExecutionException ex) { + future.cancel(true); + // Check if the cause is an InterruptedException + if (ex.getCause() instanceof InterruptedException) { + Thread.currentThread().interrupt(); + logger.debug("Advanced MySQL checks were interrupted"); + } else { + logger.debug("Advanced MySQL checks failed: {}", ex.getCause() != null ? ex.getCause().getMessage() : ex.getMessage()); + } + result = new AdvancedCheckResult(true); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + logger.debug("Advanced MySQL checks interrupted"); + future.cancel(true); + result = new AdvancedCheckResult(true); + } catch (Exception ex) { + logger.debug("Advanced MySQL checks failed: {}", ex.getMessage()); + future.cancel(true); + result = new AdvancedCheckResult(true); + } + + // Cache the result + lastAdvancedCheckTime = currentTime; + cachedAdvancedCheckResult = result; + + return result.isDegraded; + } finally { + advancedCheckLock.writeLock().unlock(); + } + } + + private AdvancedCheckResult performAdvancedMySQLChecks() { + try (Connection connection = dataSource.getConnection()) { + return performAdvancedCheckLogic(connection); + } catch (Exception e) { + logger.debug("Advanced MySQL checks could not obtain connection: {}", e.getMessage()); + return new AdvancedCheckResult(true); + } + } + + private AdvancedCheckResult performAdvancedCheckLogic(Connection connection) { + try { + boolean hasIssues = false; + + if (hasLockWaits(connection)) { + logger.warn(DIAGNOSTIC_LOG_TEMPLATE, DIAGNOSTIC_LOCK_WAIT); + hasIssues = true; + } + + if (hasSlowQueries(connection)) { + logger.warn(DIAGNOSTIC_LOG_TEMPLATE, DIAGNOSTIC_SLOW_QUERIES); + hasIssues = true; + } + + if (hasConnectionPoolExhaustion()) { + logger.warn(DIAGNOSTIC_LOG_TEMPLATE, DIAGNOSTIC_POOL_EXHAUSTED); + hasIssues = true; + } + + return new AdvancedCheckResult(hasIssues); + } catch (Exception e) { + logger.debug("Advanced MySQL checks encountered exception, marking degraded"); + return new AdvancedCheckResult(true); + } + } + + private boolean hasLockWaits(Connection connection) { + try (PreparedStatement stmt = connection.prepareStatement( + "SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST " + + "WHERE (state = 'Waiting for table metadata lock' " + + " OR state = 'Waiting for row lock' " + + " OR state = 'Waiting for lock') " + + "AND user = SUBSTRING_INDEX(USER(), '@', 1)")) { + stmt.setQueryTimeout(2); + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + int lockCount = rs.getInt(1); + return lockCount > 0; + } + } + } catch (Exception e) { + logger.debug("Could not check for lock waits"); + } + return false; + } + + + private boolean hasSlowQueries(Connection connection) { + try (PreparedStatement stmt = connection.prepareStatement( + "SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST " + + "WHERE command != 'Sleep' AND time > ? AND user = SUBSTRING_INDEX(USER(), '@', 1)")) { + stmt.setQueryTimeout(2); + stmt.setInt(1, 10); // Queries running longer than 10 seconds + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + int slowQueryCount = rs.getInt(1); + return slowQueryCount > 3; // Alert if more than 3 slow queries + } + } + } catch (Exception e) { + logger.debug("Could not check for slow queries"); + } + return false; + } + + private boolean hasConnectionPoolExhaustion() { + // Use HikariCP metrics if available + if (dataSource instanceof HikariDataSource hikariDataSource) { + try { + HikariPoolMXBean poolMXBean = hikariDataSource.getHikariPoolMXBean(); + + if (poolMXBean != null) { + int activeConnections = poolMXBean.getActiveConnections(); + int maxPoolSize = hikariDataSource.getMaximumPoolSize(); + + // Alert if > 80% of pool is exhausted + int threshold = (int) (maxPoolSize * 0.8); + return activeConnections > threshold; + } + } catch (Exception e) { + logger.debug("Could not retrieve HikariCP pool metrics"); + } + } + + // Fallback: try to get pool metrics via JMX if HikariCP is not directly available + return checkPoolMetricsViaJMX(); + } + + private boolean checkPoolMetricsViaJMX() { + try { + MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); + ObjectName objectName = new ObjectName("com.zaxxer.hikari:type=Pool (*)"); + var mBeans = mBeanServer.queryMBeans(objectName, null); + + for (var mBean : mBeans) { + if (evaluatePoolMetrics(mBeanServer, mBean.getObjectName())) { + return true; + } + } + } catch (Exception e) { + logger.debug("Could not access HikariCP pool metrics via JMX"); + } + + // No pool metrics available - disable this check + logger.debug("Pool exhaustion check disabled: HikariCP metrics unavailable"); + return false; + } + + private boolean evaluatePoolMetrics(MBeanServer mBeanServer, ObjectName objectName) { + try { + Integer activeConnections = (Integer) mBeanServer.getAttribute(objectName, "ActiveConnections"); + Integer maximumPoolSize = (Integer) mBeanServer.getAttribute(objectName, "MaximumPoolSize"); + + if (activeConnections != null && maximumPoolSize != null) { + int threshold = (int) (maximumPoolSize * 0.8); + return activeConnections > threshold; + } + } catch (Exception e) { + // Continue to next MBean + } + return false; + } + + private static class AdvancedCheckResult { + final boolean isDegraded; + + AdvancedCheckResult(boolean isDegraded) { + this.isDegraded = isDegraded; + } + } + + private static class HealthCheckResult { + final boolean isHealthy; + final String error; + final boolean isDegraded; + + HealthCheckResult(boolean isHealthy, String error, boolean isDegraded) { + this.isHealthy = isHealthy; + this.error = error; + this.isDegraded = isDegraded; + } + } +} diff --git a/src/main/java/com/wipro/fhir/utils/JwtUserIdValidationFilter.java b/src/main/java/com/wipro/fhir/utils/JwtUserIdValidationFilter.java index a924837..e688c58 100644 --- a/src/main/java/com/wipro/fhir/utils/JwtUserIdValidationFilter.java +++ b/src/main/java/com/wipro/fhir/utils/JwtUserIdValidationFilter.java @@ -191,7 +191,9 @@ private boolean shouldSkipPath(String path, String contextPath) { || path.equalsIgnoreCase(contextPath + "/user/logOutUserFromConcurrentSession") || path.startsWith(contextPath + "/swagger-ui") || path.startsWith(contextPath + "/v3/api-docs") - || path.startsWith(contextPath + "/public"); + || path.startsWith(contextPath + "/public") + || path.equals(contextPath +"/version") + || path.equals(contextPath +"/health"); } private String getJwtTokenFromCookies(HttpServletRequest request) { From 7ef6b9ade225f2b4135561b08ec46b90c0734c60 Mon Sep 17 00:00:00 2001 From: vanitha1822 Date: Thu, 19 Mar 2026 17:24:11 +0530 Subject: [PATCH 7/7] fix: remove unwanted file --- .../Logs/fhir-api.log.json | 615 ------------------ 1 file changed, 615 deletions(-) delete mode 100644 E:/uat_new/wildfly-30.0.0.Final/wildfly-30.0.0.Final/Logs/fhir-api.log.json diff --git a/E:/uat_new/wildfly-30.0.0.Final/wildfly-30.0.0.Final/Logs/fhir-api.log.json b/E:/uat_new/wildfly-30.0.0.Final/wildfly-30.0.0.Final/Logs/fhir-api.log.json deleted file mode 100644 index fb0a10c..0000000 --- a/E:/uat_new/wildfly-30.0.0.Final/wildfly-30.0.0.Final/Logs/fhir-api.log.json +++ /dev/null @@ -1,615 +0,0 @@ -{"@timestamp":"2026-01-21T16:09:28.807Z", "log.level": "INFO", "message":"Starting FhirApiApplication using Java 17.0.17 with PID 13206 (/home/ds/Documents/Amrit/Backend/FHIR-API/target/classes started by ds in /home/ds/Documents/Amrit/Backend/FHIR-API)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.wipro.fhir.FhirApiApplication"} -{"@timestamp":"2026-01-21T16:09:28.808Z", "log.level": "INFO", "message":"No active profile set, falling back to 1 default profile: \"default\"", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.wipro.fhir.FhirApiApplication"} -{"@timestamp":"2026-01-21T16:09:29.534Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:09:29.535Z", "log.level": "INFO", "message":"Bootstrapping Spring Data Elasticsearch repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:09:29.567Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.568Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.568Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.569Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.570Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.571Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.572Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.572Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.573Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.573Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.574Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.574Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.575Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.576Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.577Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.577Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.578Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.579Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.579Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.580Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.581Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.582Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.583Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.583Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.584Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.584Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.585Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.586Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.586Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.587Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 48 ms. Found 0 Elasticsearch repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:09:29.591Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:09:29.592Z", "log.level": "INFO", "message":"Bootstrapping Spring Data Reactive Elasticsearch repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:09:29.601Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.601Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.602Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.602Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.602Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.602Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.602Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.602Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.603Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.603Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.603Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.603Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.603Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.604Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.604Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.604Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.605Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.605Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.605Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.605Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.605Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.606Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.606Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.606Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.606Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.607Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.607Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.607Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.607Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.607Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 15 ms. Found 0 Reactive Elasticsearch repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:09:29.613Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:09:29.614Z", "log.level": "INFO", "message":"Bootstrapping Spring Data JPA repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:09:29.625Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.625Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.626Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.626Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.699Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.700Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.700Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.700Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.701Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.701Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.745Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 128 ms. Found 19 JPA repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:09:29.775Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:09:29.775Z", "log.level": "INFO", "message":"Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:09:29.783Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.783Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.784Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.784Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.784Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.784Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.784Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.784Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.785Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.786Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.786Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.786Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.804Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 29 ms. Found 9 MongoDB repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:09:29.813Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:09:29.814Z", "log.level": "INFO", "message":"Bootstrapping Spring Data Redis repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:09:29.828Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.828Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.828Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.828Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.828Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.829Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.829Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.829Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.829Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.829Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.829Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.830Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.830Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.830Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.830Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.830Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.831Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.832Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.832Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.832Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.834Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.834Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:09:29.834Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 15 ms. Found 0 Redis repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:09:30.324Z", "log.level": "INFO", "message":"Tomcat initialized with port 8093 (http)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer"} -{"@timestamp":"2026-01-21T16:09:30.332Z", "log.level": "INFO", "message":"Starting service [Tomcat]", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.apache.catalina.core.StandardService"} -{"@timestamp":"2026-01-21T16:09:30.332Z", "log.level": "INFO", "message":"Starting Servlet engine: [Apache Tomcat/10.1.18]", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.apache.catalina.core.StandardEngine"} -{"@timestamp":"2026-01-21T16:09:30.383Z", "log.level": "INFO", "message":"Initializing Spring embedded WebApplicationContext", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]"} -{"@timestamp":"2026-01-21T16:09:30.384Z", "log.level": "INFO", "message":"Root WebApplicationContext: initialization completed in 1522 ms", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext"} -{"@timestamp":"2026-01-21T16:09:30.683Z", "log.level": "INFO", "message":"HHH000204: Processing PersistenceUnitInfo [name: default]", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.jpa.internal.util.LogHelper"} -{"@timestamp":"2026-01-21T16:09:30.721Z", "log.level": "INFO", "message":"HHH000412: Hibernate ORM core version 6.4.1.Final", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.Version"} -{"@timestamp":"2026-01-21T16:09:30.745Z", "log.level": "INFO", "message":"HHH000026: Second-level cache disabled", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.cache.internal.RegionFactoryInitiator"} -{"@timestamp":"2026-01-21T16:09:30.893Z", "log.level": "INFO", "message":"No LoadTimeWeaver setup: ignoring JPA class transformer", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo"} -{"@timestamp":"2026-01-21T16:09:30.911Z", "log.level": "INFO", "message":"HikariPool-1 - Starting...", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.zaxxer.hikari.HikariDataSource"} -{"@timestamp":"2026-01-21T16:09:34.394Z", "log.level": "INFO", "message":"HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@28e8dee7", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.zaxxer.hikari.pool.HikariPool"} -{"@timestamp":"2026-01-21T16:09:34.397Z", "log.level": "INFO", "message":"HikariPool-1 - Start completed.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.zaxxer.hikari.HikariDataSource"} -{"@timestamp":"2026-01-21T16:09:34.775Z", "log.level": "WARN", "message":"HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.orm.deprecation"} -{"@timestamp":"2026-01-21T16:09:35.674Z", "log.level": "INFO", "message":"HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator"} -{"@timestamp":"2026-01-21T16:09:35.676Z", "log.level": "INFO", "message":"Initialized JPA EntityManagerFactory for persistence unit 'default'", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"} -{"@timestamp":"2026-01-21T16:09:35.828Z", "log.level": "INFO", "message":"Hibernate is in classpath; If applicable, HQL parser will be used.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.jpa.repository.query.QueryEnhancerFactory"} -{"@timestamp":"2026-01-21T16:09:36.574Z", "log.level": "INFO", "message":"MongoClient with metadata {\"driver\": {\"name\": \"mongo-java-driver|sync|spring-boot\", \"version\": \"4.11.1\"}, \"os\": {\"type\": \"Linux\", \"name\": \"Linux\", \"architecture\": \"amd64\", \"version\": \"6.8.0-90-generic\"}, \"platform\": \"Java/Ubuntu/17.0.17+10-Ubuntu-122.04\"} created with settings MongoClientSettings{readPreference=primary, writeConcern=WriteConcern{w=null, wTimeout=null ms, journal=null}, retryWrites=true, retryReads=true, readConcern=ReadConcern{level=null}, credential=MongoCredential{mechanism=null, userName='root', source='admin', password=, mechanismProperties=}, transportSettings=null, streamFactoryFactory=null, commandListeners=[], codecRegistry=ProvidersCodecRegistry{codecProviders=[ValueCodecProvider{}, BsonValueCodecProvider{}, DBRefCodecProvider{}, DBObjectCodecProvider{}, DocumentCodecProvider{}, CollectionCodecProvider{}, IterableCodecProvider{}, MapCodecProvider{}, GeoJsonCodecProvider{}, GridFSFileCodecProvider{}, Jsr310CodecProvider{}, JsonObjectCodecProvider{}, BsonCodecProvider{}, EnumCodecProvider{}, com.mongodb.client.model.mql.ExpressionCodecProvider@74b795da, com.mongodb.Jep395RecordCodecProvider@6e6b556d, com.mongodb.KotlinCodecProvider@7d35707d]}, loggerSettings=LoggerSettings{maxDocumentLength=1000}, clusterSettings={hosts=[localhost:27017], srvServiceName=mongodb, mode=SINGLE, requiredClusterType=UNKNOWN, requiredReplicaSetName='null', serverSelector='null', clusterListeners='[]', serverSelectionTimeout='30000 ms', localThreshold='15 ms'}, socketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=0, receiveBufferSize=0, proxySettings=ProxySettings{host=null, port=null, username=null, password=null}}, heartbeatSocketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=10000, receiveBufferSize=0, proxySettings=ProxySettings{host=null, port=null, username=null, password=null}}, connectionPoolSettings=ConnectionPoolSettings{maxSize=100, minSize=0, maxWaitTimeMS=120000, maxConnectionLifeTimeMS=0, maxConnectionIdleTimeMS=0, maintenanceInitialDelayMS=0, maintenanceFrequencyMS=60000, connectionPoolListeners=[], maxConnecting=2}, serverSettings=ServerSettings{heartbeatFrequencyMS=10000, minHeartbeatFrequencyMS=500, serverListeners='[]', serverMonitorListeners='[]'}, sslSettings=SslSettings{enabled=false, invalidHostNameAllowed=false, context=null}, applicationName='null', compressorList=[], uuidRepresentation=JAVA_LEGACY, serverApi=null, autoEncryptionSettings=null, dnsClient=null, inetAddressResolver=null, contextProvider=null}", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.mongodb.driver.client"} -{"@timestamp":"2026-01-21T16:09:36.582Z", "log.level": "INFO", "message":"Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=17, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=12949440}", "ecs.version": "1.2.0","process.thread.name":"cluster-ClusterId{value='6970fa4007896c5302a9f1eb', description='null'}-localhost:27017","log.logger":"org.mongodb.driver.cluster"} -{"@timestamp":"2026-01-21T16:09:36.635Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.amrit_resource.AMRIT_ResourceMongo.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:09:36.640Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.amrit_resource.TempCollection.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:09:36.646Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:09:36.658Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.atoms.feed.bahmni.encounter.ClinicalFeedDataLog.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:09:36.662Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.care_context.NDHMResponse.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:09:36.663Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.atoms.feed.bahmni.encounter.EncounterFullRepresentation.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:09:36.689Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.care_context.GenerateTokenAbdmResponses.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:09:36.690Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.atoms.feed.bahmni.patient.FeedDataLog.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:09:37.461Z", "log.level": "INFO", "message":"Using default implementation for ThreadExecutor", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.impl.StdSchedulerFactory"} -{"@timestamp":"2026-01-21T16:09:37.469Z", "log.level": "INFO", "message":"Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.SchedulerSignalerImpl"} -{"@timestamp":"2026-01-21T16:09:37.469Z", "log.level": "INFO", "message":"Quartz Scheduler v2.5.0-rc1 created.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} -{"@timestamp":"2026-01-21T16:09:37.470Z", "log.level": "INFO", "message":"RAMJobStore initialized.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.simpl.RAMJobStore"} -{"@timestamp":"2026-01-21T16:09:37.470Z", "log.level": "INFO", "message":"Scheduler meta-data: Quartz Scheduler (v2.5.0-rc1) 'jelies-quartz-scheduler' with instanceId 'NON_CLUSTERED'\n Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.\n NOT STARTED.\n Currently in standby mode.\n Number of jobs executed: 0\n Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.\n Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.\n", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} -{"@timestamp":"2026-01-21T16:09:37.471Z", "log.level": "INFO", "message":"Quartz scheduler 'jelies-quartz-scheduler' initialized from an externally provided properties instance.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.impl.StdSchedulerFactory"} -{"@timestamp":"2026-01-21T16:09:37.471Z", "log.level": "INFO", "message":"Quartz scheduler version: 2.5.0-rc1", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.impl.StdSchedulerFactory"} -{"@timestamp":"2026-01-21T16:09:37.471Z", "log.level": "INFO", "message":"JobFactory set to: com.wipro.fhir.config.quartz.AutowiringSpringBeanJobFactory@117f1636", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} -{"@timestamp":"2026-01-21T16:09:38.342Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.Boolean com.wipro.fhir.utils.config.ConfigProperties.extendExpiryTime", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} -{"@timestamp":"2026-01-21T16:09:38.342Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.Integer com.wipro.fhir.utils.config.ConfigProperties.sessionExpiryTime", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} -{"@timestamp":"2026-01-21T16:09:38.342Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.String com.wipro.fhir.utils.config.ConfigProperties.redisurl", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} -{"@timestamp":"2026-01-21T16:09:38.342Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.Integer com.wipro.fhir.utils.config.ConfigProperties.redisport", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} -{"@timestamp":"2026-01-21T16:09:38.380Z", "log.level": "WARN", "message":"spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration$JpaWebConfiguration"} -{"@timestamp":"2026-01-21T16:09:38.571Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.UomRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.572Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.572Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.572Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.572Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.573Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.573Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.574Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.FacilityRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.574Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.574Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.575Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.healthID.HealthIDRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.575Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.575Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.576Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.RouteRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.576Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.576Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.577Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.577Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.578Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.578Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.578Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.579Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.579Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.579Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:38.580Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:09:39.241Z", "log.level": "INFO", "message":"Tomcat started on port 8093 (http) with context path ''", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer"} -{"@timestamp":"2026-01-21T16:09:39.241Z", "log.level": "INFO", "message":"Starting Quartz Scheduler now", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.scheduling.quartz.SchedulerFactoryBean"} -{"@timestamp":"2026-01-21T16:09:39.241Z", "log.level": "INFO", "message":"Scheduler jelies-quartz-scheduler_$_NON_CLUSTERED started.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} -{"@timestamp":"2026-01-21T16:09:39.251Z", "log.level": "INFO", "message":"Started FhirApiApplication in 10.822 seconds (process running for 11.103)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.wipro.fhir.FhirApiApplication"} -{"@timestamp":"2026-01-21T16:09:52.130Z", "log.level": "INFO", "message":"Initializing Spring DispatcherServlet 'dispatcherServlet'", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]"} -{"@timestamp":"2026-01-21T16:09:52.130Z", "log.level": "INFO", "message":"Initializing Servlet 'dispatcherServlet'", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"org.springframework.web.servlet.DispatcherServlet"} -{"@timestamp":"2026-01-21T16:09:52.132Z", "log.level": "INFO", "message":"Completed initialization in 2 ms", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"org.springframework.web.servlet.DispatcherServlet"} -{"@timestamp":"2026-01-21T16:09:52.134Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:09:52.134Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/requestOtpForAbhaEnrollment", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:09:52.135Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:09:52.495Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} -{"@timestamp":"2026-01-21T16:09:52.511Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"HTTPRequestInterceptor"} -{"@timestamp":"2026-01-21T16:09:52.530Z", "log.level": "INFO", "message":"Generate OTP for ABHA enrollment API request {\"loginId\":\"613877296012\",\"loginMethod\":\"aadhaar\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:10:00.005Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-1","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:10:00.719Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-1","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} -{"@timestamp":"2026-01-21T16:10:00.720Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-1","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:10:02.170Z", "log.level": "INFO", "message":"NDHM_FHIR NDHM V3 authentication success at : 1769011802170", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.GenerateAuthSessionServiceImpl"} -{"@timestamp":"2026-01-21T16:10:03.051Z", "log.level": "INFO", "message":"publicKeyString : MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAstWB95C5pHLXiYW59qyO4Xb+59KYVm9Hywbo77qETZVAyc6VIsxU+UWhd/k/YtjZibCznB+HaXWX9TVTFs9Nwgv7LRGq5uLczpZQDrU7dnGkl/urRA8p0Jv/f8T0MZdFWQgks91uFffeBmJOb58u68ZRxSYGMPe4hb9XXKDVsgoSJaRNYviH7RgAI2QhTCwLEiMqIaUX3p1SAc178ZlN8qHXSSGXvhDR1GKM+y2DIyJqlzfik7lD14mDY/I4lcbftib8cv7llkybtjX1AayfZp4XpmIXKWv8nRM488/jOAF81Bi13paKgpjQUUuwq9tb5Qd/DChytYgBTBTJFe7irDFCmTIcqPr8+IMB7tXA3YXPp3z605Z6cGoYxezUm2Nz2o6oUmarDUntDhq/PnkNergmSeSvS8gD9DHBuJkJWZweG3xOPXiKQAUBr92mdFhJGm6fitO5jsBxgpmulxpG0oKDy9lAOLWSqK92JMcbMNHn4wRikdI9HSiXrrI7fLhJYTbyU3I4v5ESdEsayHXuiwO/1C8y56egzKSw44GAtEpbAkTNEEfK5H5R0QnVBIXOvfeF4tzGvmkfOO6nNXU3o/WAdOyV3xSQ9dqLY5MEL4sJCGY1iJBIAQ452s8v0ynJG5Yq+8hNhsCVnklCzAlsIzQpnSVDUVEzv17grVAw078CAwEAAQ==", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.CertificateKeyServiceImpl"} -{"@timestamp":"2026-01-21T16:10:03.063Z", "log.level": "INFO", "message":"encryptedTextBase64 :sMZM1+A/1tyNFLCLZc15loRg49oy1y9m86zP4U+XWtExgDbimLL4FNSjbw4rbrPtV2JTc5gfXt7AKXCXOJ0olibwvCmhfh6ngRMqIL8nySUUEdYFiSZgzx2Qt0psAmbo0ct/B/F7ZfSlrlMupLqPAjRgdw2IbFmNKbyc3iiuTk0PFGW+hXvfx0J/OQbdXUmSCw6PaopKzH78d/dTO3bqdlvhWgpkLgLERCD0RkVlRw33Ce/LNJr4NLzBz89wd4qRq8BMxUD5UIH0IdvAK65vKvgx1qxW3iICv2n197NsytAhPNW/QzeWKgPD9OI/LPYsUbjHNWtaHBnBfRwkmGhS0hiMkMasmk9DpoPhXJ2573CSKekFRD6BhQVfD6wmBB1kQ31PPu1hCtre+C4ag0FHXQDyuvneV77z9x83Q7XEOTOmzn8NFD0om65L3Hq0pLhWbsuAaqVNqcFggDEsHvOVxDDcahpLps3rUAMF5DpMDQ7gsAmWv/OjsCO2RPwc9Gwr7iM5BUhuWMA2bAHXo8uNGFDQZpeXDHeNyjzdj4ZNgGrhIoPOMTR0KTzi2SzHP1OwOL7Rc1fOewBzR30jKg+GWSp1VFik3VklucsUWYBkmtA2arC3WOfpun948z80RsxiGDxnfF4ac/AYBGDkJ0fVLxl4AvD8cCQWU3oVeW3PhIc=", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.Encryption"} -{"@timestamp":"2026-01-21T16:10:03.066Z", "log.level": "INFO", "message":"ABDM reqobj for request otp for enrollment: {\"scope\":[\"abha-enrol\"],\"loginHint\":\"aadhaar\",\"loginId\":\"sMZM1+A/1tyNFLCLZc15loRg49oy1y9m86zP4U+XWtExgDbimLL4FNSjbw4rbrPtV2JTc5gfXt7AKXCXOJ0olibwvCmhfh6ngRMqIL8nySUUEdYFiSZgzx2Qt0psAmbo0ct/B/F7ZfSlrlMupLqPAjRgdw2IbFmNKbyc3iiuTk0PFGW+hXvfx0J/OQbdXUmSCw6PaopKzH78d/dTO3bqdlvhWgpkLgLERCD0RkVlRw33Ce/LNJr4NLzBz89wd4qRq8BMxUD5UIH0IdvAK65vKvgx1qxW3iICv2n197NsytAhPNW/QzeWKgPD9OI/LPYsUbjHNWtaHBnBfRwkmGhS0hiMkMasmk9DpoPhXJ2573CSKekFRD6BhQVfD6wmBB1kQ31PPu1hCtre+C4ag0FHXQDyuvneV77z9x83Q7XEOTOmzn8NFD0om65L3Hq0pLhWbsuAaqVNqcFggDEsHvOVxDDcahpLps3rUAMF5DpMDQ7gsAmWv/OjsCO2RPwc9Gwr7iM5BUhuWMA2bAHXo8uNGFDQZpeXDHeNyjzdj4ZNgGrhIoPOMTR0KTzi2SzHP1OwOL7Rc1fOewBzR30jKg+GWSp1VFik3VklucsUWYBkmtA2arC3WOfpun948z80RsxiGDxnfF4ac/AYBGDkJ0fVLxl4AvD8cCQWU3oVeW3PhIc\\u003d\",\"otpSystem\":\"aadhaar\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} -{"@timestamp":"2026-01-21T16:10:05.434Z", "log.level": "INFO", "message":"ABDM response for request otp for enrollment: <200 OK OK,{\"txnId\":\"e91c9395-51af-4be6-9c2f-06df50740860\",\"message\":\"OTP sent to Aadhaar registered mobile number ending with ******9836\"},[Content-Type:\"application/json\", Transfer-Encoding:\"chunked\", Connection:\"keep-alive\", Date:\"Wed, 21 Jan 2026 16:10:05 GMT\", Access-Control-Expose-Headers:\"*\", X-Frame-Options:\"SAMEORIGIN\", expires:\"0\", x-envoy-upstream-service-time:\"1446\", vary:\"Origin,Access-Control-Request-Method,Access-Control-Request-Headers\", correlation-id:\"9f510021-ded6-4a47-89ae-45825ecb626b\", permissions-policy:\"geolocation=(self)\", pragma:\"no-cache\", activityid:\"dcc03c00-e686-440a-aff4-ccba291a6f10\", content-security-policy:\"form-action 'self'\", x-content-type-options:\"nosniff\", x-xss-protection:\"1 ; mode=block\", referrer-policy:\"strict-origin-when-cross-origin\", cache-control:\"no-cache, no-store, max-age=0, must-revalidate\", server:\"istio-envoy\", Access-Control-Allow-Origin:\"*\", Access-Control-Allow-Methods:\"GET,HEAD,POST,PUT,DELETE,OPTIONS,CONNECT,TRACE,PATCH\", Access-Control-Allow-Headers:\"*\", X-Cache:\"Miss from cloudfront\", Via:\"1.1 3e01f1bb97e94babf3a238feeedd6966.cloudfront.net (CloudFront)\", X-Amz-Cf-Pop:\"BLR50-P4\", X-Amz-Cf-Id:\"t8d1oa8RjT66Y26eiDB6XtnPkBu_QxCYAIZUJdfmx9QwpL_aEfOesQ==\", Strict-Transport-Security:\"max-age=31536000\"]>", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} -{"@timestamp":"2026-01-21T16:10:05.441Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"data\":{\"message\":\"OTP sent to Aadhaar registered mobile number ending with ******9836\",\"txnId\":\"e91c9395-51af-4be6-9c2f-06df50740860\"},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:10:30.426Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:10:30.427Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/abhaEnrollmentByAadhaar", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:10:30.427Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:10:30.433Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} -{"@timestamp":"2026-01-21T16:10:30.435Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"HTTPRequestInterceptor"} -{"@timestamp":"2026-01-21T16:10:30.438Z", "log.level": "INFO", "message":"ABHA enrollment BY Aadhaar API request {\"loginMethod\":\"aadhaar\",\"loginId\":\"568102\",\"mobileNumber\":\"8754969836\",\"txnId\":\"e91c9395-51af-4be6-9c2f-06df50740860\",\"createdBy\":\"\",\"providerServiceMapId\":\"\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:10:30.501Z", "log.level":"ERROR", "message":"java.lang.NumberFormatException: empty String", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:10:30.501Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"statusCode\":5000,\"errorMessage\":\"java.lang.NumberFormatException: empty String\",\"status\":\"java.lang.NumberFormatException: empty String\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:10:45.334Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:10:45.335Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/abhaEnrollmentByAadhaar", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:10:45.335Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:10:45.342Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} -{"@timestamp":"2026-01-21T16:10:45.344Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"HTTPRequestInterceptor"} -{"@timestamp":"2026-01-21T16:10:45.346Z", "log.level": "INFO", "message":"ABHA enrollment BY Aadhaar API request {\"loginMethod\":\"aadhaar\",\"loginId\":\"568102\",\"mobileNumber\":\"8754969836\",\"txnId\":\"e91c9395-51af-4be6-9c2f-06df50740860\",\"createdBy\":\"\",\"providerServiceMapId\":\"\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:10:45.402Z", "log.level":"ERROR", "message":"java.lang.NumberFormatException: empty String", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:10:45.402Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"statusCode\":5000,\"errorMessage\":\"java.lang.NumberFormatException: empty String\",\"status\":\"java.lang.NumberFormatException: empty String\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:11:03.937Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:11:03.938Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/abhaEnrollmentByAadhaar", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:11:03.938Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:11:03.946Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} -{"@timestamp":"2026-01-21T16:11:03.948Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"HTTPRequestInterceptor"} -{"@timestamp":"2026-01-21T16:11:03.951Z", "log.level": "INFO", "message":"ABHA enrollment BY Aadhaar API request {\"loginMethod\":\"aadhaar\",\"loginId\":\"568102\",\"mobileNumber\":\"8754969836\",\"txnId\":\"e91c9395-51af-4be6-9c2f-06df50740860\",\"createdBy\":\"\",\"providerServiceMapId\":\"\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:11:04.025Z", "log.level":"ERROR", "message":"java.lang.NumberFormatException: empty String", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:11:04.025Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"statusCode\":5000,\"errorMessage\":\"java.lang.NumberFormatException: empty String\",\"status\":\"java.lang.NumberFormatException: empty String\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:14:08.041Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@28e8dee7 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:14:16.872Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@5955ec71 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:14:21.742Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@10a4fe2e (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:14:25.195Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@6664ae2f (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:14:38.772Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@633c9e5b (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:15:00.002Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-2","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:15:00.638Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-2","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} -{"@timestamp":"2026-01-21T16:15:00.639Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-2","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:16:34.545Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:16:34.545Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/requestOtpForAbhaEnrollment", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:16:34.545Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:16:34.549Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} -{"@timestamp":"2026-01-21T16:16:34.550Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"HTTPRequestInterceptor"} -{"@timestamp":"2026-01-21T16:16:34.551Z", "log.level": "INFO", "message":"Generate OTP for ABHA enrollment API request {\"loginId\":\"994906946475\",\"loginMethod\":\"aadhaar\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:16:35.553Z", "log.level": "INFO", "message":"publicKeyString : MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAstWB95C5pHLXiYW59qyO4Xb+59KYVm9Hywbo77qETZVAyc6VIsxU+UWhd/k/YtjZibCznB+HaXWX9TVTFs9Nwgv7LRGq5uLczpZQDrU7dnGkl/urRA8p0Jv/f8T0MZdFWQgks91uFffeBmJOb58u68ZRxSYGMPe4hb9XXKDVsgoSJaRNYviH7RgAI2QhTCwLEiMqIaUX3p1SAc178ZlN8qHXSSGXvhDR1GKM+y2DIyJqlzfik7lD14mDY/I4lcbftib8cv7llkybtjX1AayfZp4XpmIXKWv8nRM488/jOAF81Bi13paKgpjQUUuwq9tb5Qd/DChytYgBTBTJFe7irDFCmTIcqPr8+IMB7tXA3YXPp3z605Z6cGoYxezUm2Nz2o6oUmarDUntDhq/PnkNergmSeSvS8gD9DHBuJkJWZweG3xOPXiKQAUBr92mdFhJGm6fitO5jsBxgpmulxpG0oKDy9lAOLWSqK92JMcbMNHn4wRikdI9HSiXrrI7fLhJYTbyU3I4v5ESdEsayHXuiwO/1C8y56egzKSw44GAtEpbAkTNEEfK5H5R0QnVBIXOvfeF4tzGvmkfOO6nNXU3o/WAdOyV3xSQ9dqLY5MEL4sJCGY1iJBIAQ452s8v0ynJG5Yq+8hNhsCVnklCzAlsIzQpnSVDUVEzv17grVAw078CAwEAAQ==", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.service.v3.abha.CertificateKeyServiceImpl"} -{"@timestamp":"2026-01-21T16:16:35.562Z", "log.level": "INFO", "message":"encryptedTextBase64 :Z1aRw4ttq9RmAduTkWQIPz71Ed+OAYIeVLK/U5JkzmtqZ60iAwDU3sf3oCFFcxivZIDjc1teR4kmTi5Q2mkbqruZi0TSc40iJFYHozc04ZfDgNjPIka6lkQ8A7fPxL7UvqOB9saI1wIoYDRGPT6zKQQhV5jJ7SrGRVxA5ktmo84Nx2ouufPmTAssK3F0cO250VYWfQwwcapIq2JXMtA1S1hY1rvfrBK5eGTXd4hs8zeVXJ7kOo5DX4wNO/6tvyBUQAp0Op7sq4Jx5fhvzIQ3CNTyy/E+pOCFLSEgmT0evjo8HWdfSZwYzwyYEDbsM8bKO0t4zi1EA8lkfjsQVPtHXl5wucpgOlPZAAkMEeaPjEUcBEeDYeV7K20skjK6SAXOOXdDeTAsGKnLzc6dJxM26x1YN2/YSlN1M3bWDvjdev2J68YbBK+MS7exZz6QSo6tF4uaMkVJGAePikjf1exdvq8LT/5XD+N0+G4zOXQS+RMzXOx/vRA1xe6XV6HVU5aDo5v2T98jA6nYnbY2AMkN8YRM3T3Fs0ECO9yv35eiQslPkLVezLEIKrU68mNfToYxXc6+AQj09SReXBnpvZiO66HdPL8ufvaOuO5gaOdFFDFYYc7epN+HhhbSv1RiWBB9cOzL3jC7XQKmAoRDiW8PrNnJGDfuWK3YCTeMU1Hv7ag=", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.utils.Encryption"} -{"@timestamp":"2026-01-21T16:16:35.564Z", "log.level": "INFO", "message":"ABDM reqobj for request otp for enrollment: {\"scope\":[\"abha-enrol\"],\"loginHint\":\"aadhaar\",\"loginId\":\"Z1aRw4ttq9RmAduTkWQIPz71Ed+OAYIeVLK/U5JkzmtqZ60iAwDU3sf3oCFFcxivZIDjc1teR4kmTi5Q2mkbqruZi0TSc40iJFYHozc04ZfDgNjPIka6lkQ8A7fPxL7UvqOB9saI1wIoYDRGPT6zKQQhV5jJ7SrGRVxA5ktmo84Nx2ouufPmTAssK3F0cO250VYWfQwwcapIq2JXMtA1S1hY1rvfrBK5eGTXd4hs8zeVXJ7kOo5DX4wNO/6tvyBUQAp0Op7sq4Jx5fhvzIQ3CNTyy/E+pOCFLSEgmT0evjo8HWdfSZwYzwyYEDbsM8bKO0t4zi1EA8lkfjsQVPtHXl5wucpgOlPZAAkMEeaPjEUcBEeDYeV7K20skjK6SAXOOXdDeTAsGKnLzc6dJxM26x1YN2/YSlN1M3bWDvjdev2J68YbBK+MS7exZz6QSo6tF4uaMkVJGAePikjf1exdvq8LT/5XD+N0+G4zOXQS+RMzXOx/vRA1xe6XV6HVU5aDo5v2T98jA6nYnbY2AMkN8YRM3T3Fs0ECO9yv35eiQslPkLVezLEIKrU68mNfToYxXc6+AQj09SReXBnpvZiO66HdPL8ufvaOuO5gaOdFFDFYYc7epN+HhhbSv1RiWBB9cOzL3jC7XQKmAoRDiW8PrNnJGDfuWK3YCTeMU1Hv7ag\\u003d\",\"otpSystem\":\"aadhaar\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} -{"@timestamp":"2026-01-21T16:16:37.607Z", "log.level": "INFO", "message":"ABDM response for request otp for enrollment: <200 OK OK,{\"txnId\":\"6588d4e3-14b7-4103-80d6-709d682d3f4a\",\"message\":\"OTP sent to Aadhaar registered mobile number ending with ******3131\"},[Content-Type:\"application/json\", Transfer-Encoding:\"chunked\", Connection:\"keep-alive\", Date:\"Wed, 21 Jan 2026 16:16:37 GMT\", Access-Control-Expose-Headers:\"*\", X-Frame-Options:\"SAMEORIGIN\", expires:\"0\", x-envoy-upstream-service-time:\"1556\", vary:\"Origin,Access-Control-Request-Method,Access-Control-Request-Headers\", correlation-id:\"7d945509-2926-40fc-9d28-85c89ebcba01\", permissions-policy:\"geolocation=(self)\", pragma:\"no-cache\", activityid:\"998bb174-e9d1-4b54-938e-48340086ecee\", content-security-policy:\"form-action 'self'\", x-content-type-options:\"nosniff\", x-xss-protection:\"1 ; mode=block\", referrer-policy:\"strict-origin-when-cross-origin\", cache-control:\"no-cache, no-store, max-age=0, must-revalidate\", server:\"istio-envoy\", Access-Control-Allow-Origin:\"*\", Access-Control-Allow-Methods:\"GET,HEAD,POST,PUT,DELETE,OPTIONS,CONNECT,TRACE,PATCH\", Access-Control-Allow-Headers:\"*\", X-Cache:\"Miss from cloudfront\", Via:\"1.1 5d782e204f31cf29d8ed8448ac335be4.cloudfront.net (CloudFront)\", X-Amz-Cf-Pop:\"BLR50-P4\", X-Amz-Cf-Id:\"-CM73GHELjVpz2ifMehoPhTMw_lAlP0pnii4RjLW63wShqskWZB1CQ==\", Strict-Transport-Security:\"max-age=31536000\"]>", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} -{"@timestamp":"2026-01-21T16:16:37.609Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"data\":{\"message\":\"OTP sent to Aadhaar registered mobile number ending with ******3131\",\"txnId\":\"6588d4e3-14b7-4103-80d6-709d682d3f4a\"},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-6","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:17:02.996Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:17:02.996Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/abhaEnrollmentByAadhaar", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:17:02.996Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:17:03.003Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} -{"@timestamp":"2026-01-21T16:17:03.004Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"HTTPRequestInterceptor"} -{"@timestamp":"2026-01-21T16:17:03.006Z", "log.level": "INFO", "message":"ABHA enrollment BY Aadhaar API request {\"loginMethod\":\"aadhaar\",\"loginId\":\"299668\",\"mobileNumber\":\"9488833131\",\"txnId\":\"6588d4e3-14b7-4103-80d6-709d682d3f4a\",\"createdBy\":\"Mokrong\",\"providerServiceMapId\":1717}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:17:03.384Z", "log.level": "INFO", "message":"publicKeyString : MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAstWB95C5pHLXiYW59qyO4Xb+59KYVm9Hywbo77qETZVAyc6VIsxU+UWhd/k/YtjZibCznB+HaXWX9TVTFs9Nwgv7LRGq5uLczpZQDrU7dnGkl/urRA8p0Jv/f8T0MZdFWQgks91uFffeBmJOb58u68ZRxSYGMPe4hb9XXKDVsgoSJaRNYviH7RgAI2QhTCwLEiMqIaUX3p1SAc178ZlN8qHXSSGXvhDR1GKM+y2DIyJqlzfik7lD14mDY/I4lcbftib8cv7llkybtjX1AayfZp4XpmIXKWv8nRM488/jOAF81Bi13paKgpjQUUuwq9tb5Qd/DChytYgBTBTJFe7irDFCmTIcqPr8+IMB7tXA3YXPp3z605Z6cGoYxezUm2Nz2o6oUmarDUntDhq/PnkNergmSeSvS8gD9DHBuJkJWZweG3xOPXiKQAUBr92mdFhJGm6fitO5jsBxgpmulxpG0oKDy9lAOLWSqK92JMcbMNHn4wRikdI9HSiXrrI7fLhJYTbyU3I4v5ESdEsayHXuiwO/1C8y56egzKSw44GAtEpbAkTNEEfK5H5R0QnVBIXOvfeF4tzGvmkfOO6nNXU3o/WAdOyV3xSQ9dqLY5MEL4sJCGY1iJBIAQ452s8v0ynJG5Yq+8hNhsCVnklCzAlsIzQpnSVDUVEzv17grVAw078CAwEAAQ==", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.service.v3.abha.CertificateKeyServiceImpl"} -{"@timestamp":"2026-01-21T16:17:03.392Z", "log.level": "INFO", "message":"encryptedTextBase64 :kVA8PvuXKYF0Zo6I6ccKbdmmAREyleXdLllzylJPJhlJHTdAbc/35i+Qb3pgiWcveRBXyMhnuEC6xiuYBT4+UAfPaHvJF5GjTuTmsDKjPoSTF3q5YYyK/tipkISWduMHJ1j14mP2A6T99xDGbH8xeYlZswZP0AqZ4dbGu2p/E5Dn19JqT0+R5JF2+1wvJWuXGjhc75kiiUDaryJadRDsWqyh02IUwkcmJFUj6fn2yJy8iOrZ1deSAvppTps06E5dHzckBo2ZU/xg8QL5JdQbcY0zdI5J70lwlMlji9s6T5SMc/Lualdt0U7GJwCiDEiHCOf15+xy7JEqWbfaDcLQJuTZZBmlMYwIENuZv65qEjvnct+zB+FYnpTWIt1ZZkMbabNpQLgzelWGjPQIPBj4r/4Jw3Hq8rcl9zMPq4zcIcq2M746tZPrDyw6x9rqHb+oWc79t0p7Cj7jjUbocePX8BepOLZ9SW8J/GPFu2G5h1uYW+Va+l6o2Dj9JJreQNrhD+vOLaN9g9f/OU4E5IX+AyhiEwO16tP39Z/qBn58CRvlnrLIAt8lX7In7KkuToK5Kdtry+IArPbq2WM/8u+gq5+0uw8O4dgD5zD7XmoOq3LoSXIFWS3ANnMbSikGn64Hgl/JgJ9bWJEY21LnYbtgVHQ+x0f4FjJfDfSah/pSjow=", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.utils.Encryption"} -{"@timestamp":"2026-01-21T16:17:03.397Z", "log.level": "INFO", "message":"ABDM request for enroll by Aadhaar: EnrollByAadhaar(authData={otp=OtpRequest(timestamp=2026-01-21T16:17:03.394619276Z, txnId=6588d4e3-14b7-4103-80d6-709d682d3f4a, otpValue=kVA8PvuXKYF0Zo6I6ccKbdmmAREyleXdLllzylJPJhlJHTdAbc/35i+Qb3pgiWcveRBXyMhnuEC6xiuYBT4+UAfPaHvJF5GjTuTmsDKjPoSTF3q5YYyK/tipkISWduMHJ1j14mP2A6T99xDGbH8xeYlZswZP0AqZ4dbGu2p/E5Dn19JqT0+R5JF2+1wvJWuXGjhc75kiiUDaryJadRDsWqyh02IUwkcmJFUj6fn2yJy8iOrZ1deSAvppTps06E5dHzckBo2ZU/xg8QL5JdQbcY0zdI5J70lwlMlji9s6T5SMc/Lualdt0U7GJwCiDEiHCOf15+xy7JEqWbfaDcLQJuTZZBmlMYwIENuZv65qEjvnct+zB+FYnpTWIt1ZZkMbabNpQLgzelWGjPQIPBj4r/4Jw3Hq8rcl9zMPq4zcIcq2M746tZPrDyw6x9rqHb+oWc79t0p7Cj7jjUbocePX8BepOLZ9SW8J/GPFu2G5h1uYW+Va+l6o2Dj9JJreQNrhD+vOLaN9g9f/OU4E5IX+AyhiEwO16tP39Z/qBn58CRvlnrLIAt8lX7In7KkuToK5Kdtry+IArPbq2WM/8u+gq5+0uw8O4dgD5zD7XmoOq3LoSXIFWS3ANnMbSikGn64Hgl/JgJ9bWJEY21LnYbtgVHQ+x0f4FjJfDfSah/pSjow=, mobile=9488833131), authMethods=[Ljava.lang.String;@33f9a73f}, consent=ConsentRequest(code=abha-enrollment, version=1.4))", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} -{"@timestamp":"2026-01-21T16:17:03.402Z", "log.level": "INFO", "message":"ABDM request object for ABHA enrollment by AADHAAR: {\"authData\":{\"otp\":{\"timestamp\":\"2026-01-21T16:17:03.394619276Z\",\"txnId\":\"6588d4e3-14b7-4103-80d6-709d682d3f4a\",\"otpValue\":\"kVA8PvuXKYF0Zo6I6ccKbdmmAREyleXdLllzylJPJhlJHTdAbc/35i+Qb3pgiWcveRBXyMhnuEC6xiuYBT4+UAfPaHvJF5GjTuTmsDKjPoSTF3q5YYyK/tipkISWduMHJ1j14mP2A6T99xDGbH8xeYlZswZP0AqZ4dbGu2p/E5Dn19JqT0+R5JF2+1wvJWuXGjhc75kiiUDaryJadRDsWqyh02IUwkcmJFUj6fn2yJy8iOrZ1deSAvppTps06E5dHzckBo2ZU/xg8QL5JdQbcY0zdI5J70lwlMlji9s6T5SMc/Lualdt0U7GJwCiDEiHCOf15+xy7JEqWbfaDcLQJuTZZBmlMYwIENuZv65qEjvnct+zB+FYnpTWIt1ZZkMbabNpQLgzelWGjPQIPBj4r/4Jw3Hq8rcl9zMPq4zcIcq2M746tZPrDyw6x9rqHb+oWc79t0p7Cj7jjUbocePX8BepOLZ9SW8J/GPFu2G5h1uYW+Va+l6o2Dj9JJreQNrhD+vOLaN9g9f/OU4E5IX+AyhiEwO16tP39Z/qBn58CRvlnrLIAt8lX7In7KkuToK5Kdtry+IArPbq2WM/8u+gq5+0uw8O4dgD5zD7XmoOq3LoSXIFWS3ANnMbSikGn64Hgl/JgJ9bWJEY21LnYbtgVHQ+x0f4FjJfDfSah/pSjow\\u003d\",\"mobile\":\"9488833131\"},\"authMethods\":[\"otp\"]},\"consent\":{\"code\":\"abha-enrollment\",\"version\":\"1.4\"}}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} -{"@timestamp":"2026-01-21T16:17:05.655Z", "log.level": "INFO", "message":"ABDM response for ABHA enrollment: <200 OK OK,{\"message\":\"Account created successfully\",\"txnId\":\"6588d4e3-14b7-4103-80d6-709d682d3f4a\",\"tokens\":{\"token\":\"eyJhbGciOiJSUzUxMiJ9.eyJpc0t5Y1ZlcmlmaWVkIjp0cnVlLCJzdWIiOiI5MS0zNDgxLTQ4MDAtMjYwNiIsImF1dGhfdHlwZSI6IktZQ19PVFAiLCJjbGllbnRJZCI6ImFiaGEtcHJvZmlsZS1hcHAtYXBpIiwiYWNjb3VudFR5cGUiOiJzdGFuZGFyZCIsImdlbl9zb3VyY2UiOiJhYWRoYWFyX290cCIsIm1vYmlsZSI6Ijk0ODg4MzMxMzEiLCJ0eXAiOiJUcmFuc2FjdGlvbiIsImFwaV92ZXJzaW9uIjoidjMiLCJzeXN0ZW0iOiJBQkhBLU4iLCJhYmhhTnVtYmVyIjoiOTEtMzQ4MS00ODAwLTI2MDYiLCJwcmVmZXJyZWRBYmhhQWRkcmVzcyI6IjkxMzQ4MTQ4MDAyNjA2QHNieCIsImJhYWxfYWJoYSI6Im5vIiwiZXhwIjoxNzY5MDE0MDI1LCJpYXQiOjE3NjkwMTIyMjUsInR4bklkIjoiNjU4OGQ0ZTMtMTRiNy00MTAzLTgwZDYtNzA5ZDY4MmQzZjRhIn0.kr65cxMlxW1Fhot0Dnz6Vi37y5rEtFRAvaHdAjb61xK7tCU7CW_tBRYIdT505uf1g9Pfh1XXg34h65y_Btv3_BEndrxuXpeuY5RcRV0Y5wNnY_XJt8W_M83tqb1C0HFjmPdhbN2cAialHmBPV5s8bkq-x0CNES3Fq0JD3cvgXDJQ4k0v3YTIs8qrYcnZDTIYpevLc4PIjUwa2Qnmwrc5Zdj0kCnJlRWttGauyaZhktlKRkWIc1ttZQO_yE_yLdjmAzoD8UUUafs0Caa5ZS5sJhb-GQj-NwtnrpIu4aYJhkvW5Fu09xrdLYzCN9i_fP0Z2CV2WTzRCtgxGTyPU6dDzKYOeBIDeN3NWPgHjJ5jnN5iVeeptNOC2wwRK8wZhlmyyfv5Z6K74_hf_AUGx79hjPiNfTF-VbbTQr13jynW7okgsPz2F9mRXRRg92jIQ6xWyPSwIqzYWDQKUl-Q5xRyt3xTZ1U8gbvqDbgczXcwOJIOH2Gp1hTkXT3QuQPFWLSvnfRCSrTwfVFyNsM3fRzbNiNMB6yPziuioWqpzHrn6zhAUmfUZVV7Qx-QEiD8Dga3Q9dySNr8NgZNBghWishfq2jDFx_j7NLpeY6uML703N9F8HiDHO24A6mXDAonO7gwLKRWjdtdhnRcfCRTkK38zHW4--YiUp_mSiIXyQbIe7c\",\"expiresIn\":1800,\"refreshToken\":\"eyJhbGciOiJSUzUxMiJ9.eyJzdWIiOiI5MS0zNDgxLTQ4MDAtMjYwNiIsImNsaWVudElkIjoiYWJoYS1wcm9maWxlLWFwcC1hcGkiLCJzeXN0ZW0iOiJBQkhBLU4iLCJ0eXAiOiJSZWZyZXNoIiwiZXhwIjoxNzcwMzA4MjI1LCJpYXQiOjE3NjkwMTIyMjV9.pASTdE-I0F0gHpeDlU8bVNc_8Df1PiAetWqORJ_tNPJuOpAGDw0CJ0PUUjhqGCnF-Dp8YZieFRQwtIr9jp3U2rvsgdU0djyYY_MxalRG0ROdvBrKM-TiBTzvnt9jtdsoNrVpLL7tI6aCGLol2tvq-_hbLWTPx-GtslyE3gDwzD8Jh3d5WOvz4ExkLKZ-BOhT59Ngre_XmQtc8VB7aVbkCays-uj1cGQhpVfpOi4M4c5eOH1DC_JD10cFxaHbDqn2FB-eiSRKNTSflx2ocw2cEK-c8gbzwiGNRiDTHHUNHb8dmx7VVnfQgTIzcnHNMkpkhHFFMq_OReMrFx5bEHzrKGOHMY6UoEg72M5k0K6faFsg162aUZx152J49lolEUnKteCCQR5rWIpdc4g2JxnZlB-EMr7WdnDiVHtyjjUABJaEL-RRQOn4WIgGb-1zi1MliXTeMabaHVVXt65bAZm1iZXACJm39dQ_M3jTAt-jdi_yn9WXrm1L1mm1PEalQKSvMgp34VAjqfe_1B6uDyF7Czhwb_nES84fwI0Pvo0lkjgE4-Z_fDiLfkiPhy0dlwDA7j_zYxQxi0Kxfiy6HOz2pL_3Jzh5WR7SdlWqwQxmm_YclyxgO9H6dSs5s9eFQRgEH3_iTMZ2anJhQrFcDZtJkf-0f--YIjpIvPgMXiJ15l4\",\"refreshExpiresIn\":1296000},\"ABHAProfile\":{\"preferredAddress\":null,\"firstName\":\"Sureshkumar\",\"middleName\":\"\",\"lastName\":\"Palanisamy\",\"dob\":\"18-07-1985\",\"gender\":\"M\",\"photo\":\"/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCADIAKADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDvsYppUA/d/Kn8n2pChPRjTERbct8pIPY1MOlATC8U4DI/nSASjHNOxS4oAYaTmnkUmKAGUY+tP20YoAZikFPIPYUwZyflNIAxyab3NO+fd93j60bTk5FADMU3FSbaaVoAjNNPvUhWmkUwIz1ph9KmximMucGgDRCmnbKfS4pgM24pMYbGOtSgZpdtAEe3ijbUoAo20gIsUbalK0baAISoo2AVIcdzWXfeINJ09Sbm+hUg4Kqd7Z9MDOKANDbTdvPSuU/4WPoYmKH7QFzjeUGP55qzH470J3K/aip7EqcH6H/HFIDoSvNJjk1WstXsdR5tLmOXjOFbkfX0q5kZPTNAEe3mkK1NjLfhRtFAFfbTSvNWdlNKD0pgVinFMx7VYK8ZpmOaALwFOximg06mACncUgpQMZpAKABQKKiubmG0geeeVI4kGWZjgAUgJGZVUsxAVRkk9APWuG8RfEWx04mDTtl3MOGbJ2L+Pf8ADj3rj/GnjebWpWsrNjFYAjjvIR3Ptnt7CuIeWNW5JZqLgdNqPi7WdUBE9+4iORsRtq49CB1/GsNrtwSr/Nn8aqfbF6DqPeqs028lgTj+VIZaNwWDbcY/pTPtTKAQ3XiqyBirZPBpF+8pOOOooA0rfU5rKZZI5WjkHcHHNeh+G/iNKpSHVjvixhZlHzL9R3H6/WvI3kO881NHO6nOTjvQB9Q2t1FcIHidXQgbWU5BB5B/WrWK8b+H/itLRzZXt1styhCZXOGJHft3r163uY7iPfE6uvTK0xWJcU0inUhoEREdKQYHUVJimNx9KBkoNOzUQJp4NMB+acDio80uaQDy2Aa8V8d+J7m+1C5t0lP2WJiiIDwcHk+9d14/16bRdGUW7lJJyyBhnjj6deePpXhFzPJIeAcGgY151KnnmqwkOeeakhtZ7l8Kn41oW3h6eUjc+1T6DNQ5JblKLexkCTD/AONWVjMmCq/hXRQ+FUPJd/qw/pVy38PIhw0h+mKn2sS1SkcnJGwUYBA9KRLGeXjH613J0Oz/AIwWPoBihtOso12rGPzNQ6yKVI4ldNbPrV+DS9qguPwromgjCnCKMe1V2TFL2jK9mjm54GtJtycD1rt/Bvi+exuY7a4lPln5Tu6Y5P55J/lx1rnrqASIQRWIzPbzYzx71rCVzGcbH03a3S3CZBGe4B/X6VPurzf4cazJc2/2aYk7chTjHGAQP/Qs/hXom7JrQzHE009KM8UhNADhTwKbg0+mAooxQBS4pAeU/FvUGW6sbBc7Qhmb3JJA/LB/OuHsraO4jDMAa7X4wWii6027AO+RGjJ9lII/9CNcla7IIRuOAByazqGlNK+pbht0RgEXA+la9rAQMkDntXO/2oC4EQwo7mraa8YlyefwrBxZupI6dABwRTli+bpWHZ67HcyKvCj361ppfpJMsSEMcZzUNNblposmIZOR34qvLbqR0FQy3gW42SZCnofesq61tIDlHLg9FoUbg5JFuW3IBYjB+tUpAFODVd9RubrGyJ8ADO0E4qvJPcREZ+YHs1VytE86LbICM1g6jEBLurZhuBKDjII6g1Q1dD5aSjnDVcL3Iqao7H4aK00VwqgnypI3XHuec+3Ar1gcivOPhNbBdMvbrfkvMIyvptGc/wDj/wClekKMA10I5hKQ9KdSEcUwJQKcKUCngUwGgZp2OKWjvikBwXxQ00Xfh6O5wu62lBzjnDcEfnj8q8quuIgo616z8RNUe3szpohBS5iLeYwOCQeg9xgHv1FeZ/Z/NcAjpWc2aQRkxzrblUwCxPpk59hVw3ds4aK8tpA464Rc/hT30/7PcCUqctyD6VcjgE0okkVHI4GRnIxisnJGyi7FBdN8tUkEEkKuoYMwxwenPStXRrd9s8zOcoOuffFWLoQjDbN0gGBvOcVoabbiLSJSAcEqDxnPU1EmVGJgXjOZlj3ffPJzVZbGaWSQwweYIlLEjGOPfv8AhWjeWy+dgjg1Ytrc7/MR9knYg4z+NKLKkjFtNQuJVjtYoGMhbbtVvy6j+tEs584wzxlXHUEYZa2Wt2gmEkESxsAQGUDP51Uks/PkDyKSe5PWquiOV2KkMDIQy5ZT1qLVI/8AQ/X5hWwipHFsHUd6ztRXNvgddwpwldimtD034eWX2TwvbExlHmJlYHvk8H8VC12IXiuB8N+KZTqFrpYs41tyFijSPLMgwAMnoQPoP0r0ILxXRGSexzSTW5GRnFBFSYppFUIkWnVAJgakEopgSCnYxUXmrS+atIDmvHtpDc+G5XkjVpImVo27qSwBx+B/zivLYkCsK9M8fXfl+H1UH/WSqp+mCf5gV5pES0g5FY1TakX1Ec4CFeaT7MxOBhVHpUkODz61cj29e1cx0pGddW0cKqp4PUn0rWtI4nsXXzAoVcgf3jnp+prnPEciRSqfMdhIMFEOCD65qLT7++8t4ljz5fBZuPz96pwbQKSTL91GzTnbjAFXLOBLi1ABAfoQe9cnPPOmoGR55fM6bQcKPoK6TSblfs5LsvmMcnHak42WoKSZMyyRsVIyB602RRt5FXJGEg3dz15qncHCk+lTYZnzBVbjiqtxH5kLLznqMVYk757VBvy2MVpFGcjtPA1h5mprcHGIQzE8ckgqB/M/hXo/auT8H25g0qJjnMg3n8f/AK1dUDxXRCNkc03djs0hpM0masgpq75GV/I08SNn/VnHrxSCnD0qgFDktgowHrSl9oPB/AUv0pwAH1pAcT8Q2LaXasAdolIOVI6jj+RrgIJe2a9N8e23n+GZJASPIkWTA7/w/wDs1eSrLiTj9ayqI2pM3ROsUWSazrjX/K4Rv0pk03mwbVGOKwZi+4IV3HsPSsYRubTlbYuzSz6i6kAkew6VM08tiWjAk3FeuOD04H41DYS3anylCD0rSUXsDjdGrencVWwlHm1KkljcSRR3LZDMuWRuooS4ktjhgAcdKt3C3mN0mxcj1yay5BOW3MVYAdMc0b7g1y7G1a6wNyqcEHitKV8xk+tcpZK0k/y5AHXitr7QRHt3dBWco2ehUHcJXAzg1DGfm9c02VwMEnrU2nxNe30MC5HmOFyB0HrVxREmeq+Hxt0i0IyAYUIGenArXEjf3jVa3iVIlCgAAcAVPtGK6UcrHGVh/EaTzW9aaVpu2mBJnFPHApnbpnmnYycUASADFO4puDjFPAOP/rUAUdStUvdOuLZ8YljK+vUda8CvVexvpYJMhkYq2exFfQd7PBZ2ktzcyCKGNdzu3QD/AB9u9fP3ijWrfVtemngi8pG4XI5OO59/8+9TJXRUXZiR3QU8kfTNOVo5HJUDJrFDFCc5yKsW9xmUKSM1k49jZSNbMsfzIgPPanjWLyFui49GGas2s6NGARkdKuJbWr4LFc1Cfc016MzVu57xgXjLE8ZxTzCBjcK1i9vbr8pX3xWPeXiszEEBR2pXuF7bkRlWCQlc896YblRk81QkuWaQhOfrUe84zn86rl7kc5eMxkcAcgV2HgjT/PvmuiPli+Vfqev6fzrhIm+bjqa9Y8B3VpfaQhthtMWFkjJyVPqfrzzWkUZSZ2Ua4UCnkUKMU7vWhmRnNBFOptADhTlNYd54q0eyQlrtZGC5Cwjfn2yOPzNcfq3xAvZJGTTtlvGp4YgOxHvnj8vzNWothc9P49RVCfxBo9rE8kupWuEOCFkDN+Qya8SudWvr6ZHuriWZk6b3Jx9M1SN3NcXSwox64Y46VXIK51/xG8WLqASzsJc2iAMzbSPMc/XnAH07+1eYrE0rh2OAWwDWvqg8+4jiBwCwGKpXjrFeRQrwsbAH/P0rObs+VFRV1cjVyjbXXpwKlMQYhozg+tXpLUNk4B9RiqxtZIwGjGR6elY81zWxLFcTwqAYmPoV5zUhvrljmON8jrniqyTyowBDECrCXjD7yn3qX6FK/cf9vncbfKkJPtVaQTynDfu17881M1yz54JFQHzWOAp5oQO7HhY4147D86aP3nCjipIbCWVtzkgfzq6tsI0wAMCi4rFMLsUt3xx7Vv8Aw81mPSdaxcyBLeceU7MThSSME/jgZPQE1jOn7tj7VQJMNnK4ODlcD8RWlPW5E1ZH0nHKksavG6ujDKspyCPrTyAQeK+f9E1/UNLkb7LdyR8htqng/UdDXZ6f8SL6FVW+torlRwXQ7H+p7fhgVpyszuemGkrI0nxPpWtbVtrkCcjPkSfK/wCXfpngmtekB4Gz7hndnPIJyc0xZN3mE4IU8DOD+GeabEBvKk9APmIJHrimIcXDB1wSMcdR7gD9a6SBwAMp+YYPVsZA571HpagyTEDDbj36dfy61KVYkYGSThWHQngYPpVGO7+yW00uMndtC59/Wh6AWpVP2+MnO3cMZ69DWNdBp9UH3fnkJG054Bx/SriXEg8m4nOWyzED0FVtGi87UU/2VJNc1T4mzaGyR0Yi27cjtVmO1R+cc/zqdoNyDjnFJCSjYrj5jrSK8unA9sfSqjW3lPh1BHriuijAdMk/hVee1MpIxkUucXKjNEcRHCqDSpa72+7gep4qxFatDIAc1fjgyvAOO+aOYOUptFHCmF5I79qpz/N2xWhN8pPQVgX96SWWNSeOtXTg5vQmclBajb65jhgYAhnx0rHu7jzLNeNuTkj6USxs0gDA5B6DnHvROm+IqAfmUnB6YArsjBRVkcsp8zHwSbdjKc56g9/84rQL4bKkYxkDPTkdOefpWNaNviAJ6GtQsdwOC4PrwMkY7f54q47EssCTLHAxjtnFdTovjfVNObZM/wBqhH8Ex+b8G6j9R7VyKuojB3AkNhQ5J69weR/nmnr1UAE5wAMncfx/Gm13FckdiCGwCSMepIzj8PrjvRFJukkZSQX4UD0J6H2x7U2RSAynOCcFCeSR3/z1qOEB1Ma7dwIynZh71oSWFwP4A+4HjHDY7/5/+vWdc7fJdArZVwxJ7etXyxZSRu5xlW5PA565478+tVb0bldyQ5bILdB27etDVwRVuZttimcM21lBHvxVrw1EftErkdsVQmgbyEAP+rAYjPWui8PKrQtcO++SaQliDkg+9clfRHRR1kdIseYlOOoqnPDtbcBWoADGMelQSpkEAVwnZYiiBaLg805AQKIRsJBz1p7sEPPFAEbbs5pXdljo3E+9MmYYxRYCjPucMc9qxZsRjJzgE5Ax1H/6xWpqFzHBAR/E3AArBkkLEbm6joOAK7sLFpNnJiGrpDbmcCER72AY/MGOeAT/AI/jVUoFVBlcY6E5HI4z/n1qR2Ekqgr5YxknGMgfh/kmkKksApUZOcE8de/5V0MwM+1O0uprZ2MycZYBcnP8Iz6/jWQI1V5zuwVxwe+a2QP3I6bDwoPLDgevb6dqmPYbGI25HBxzkk449eOPapI1J+TGCcHaSMNyeKjZSsvGGOM/KOPWnKNqYVyADuGON34Z445//VVEkpwgHmDavQOoPJHTg8etMKAEttIYf8s1GeMdaKK0ES+YCCGcl+mRwD6DHvQULwGNcucHMagnjsR+P6UUUAUgiOHjDKxGVBHQ/Sr+jP5Cxy9FIw3YZFFFRKKloyotrVHXW10kyKemelSnDLnqKKK8yaSlY74NtXK8jeWpOQB71C8wPPB4+lFFCRQwSHJUEcdh3qteXixITjJPQetFFaU4JySZFSTUW0YjyF3aVsk9dzHggen6fXNVi7bScLmTgggfLjHP0oor0NkcF7vUgi+diQAGY9Oyg+lSKnznapbgblOcsfX6dvpRRSGVp0BwQzEkBT7jrg/j/Kr8ChNuTzgZY/w+x9R/SiiktxMWQBVjO0qBzt5BPv04/wD1UKMy7TIAxGPm6KOnP4UUUwP/2Q==\",\"mobile\":\"9488833131\",\"mobileVerified\":true,\"email\":null,\"phrAddress\":[\"91348148002606@sbx\"],\"address\":\"4/1B, MAHADEVAPURAM STREET NO 2, MAHADEVAPURAM, METTUPALAYAM, Mettupalayam, Mettupalayam, Coimbatore, Tamil Nadu\",\"districtCode\":\"569\",\"stateCode\":\"33\",\"pinCode\":\"641301\",\"abhaType\":\"STANDARD\",\"stateName\":\"TAMIL NADU\",\"districtName\":\"COIMBATORE\",\"communicationMobile\":null,\"ABHANumber\":\"91-3481-4800-2606\",\"abhaStatus\":\"ACTIVE\"},\"isNew\":true},[Content-Type:\"application/json\", Transfer-Encoding:\"chunked\", Connection:\"keep-alive\", Date:\"Wed, 21 Jan 2026 16:17:05 GMT\", Access-Control-Expose-Headers:\"*\", X-Frame-Options:\"SAMEORIGIN\", expires:\"0\", x-envoy-upstream-service-time:\"2082\", vary:\"Origin,Access-Control-Request-Method,Access-Control-Request-Headers\", correlation-id:\"87fce058-415f-44d3-9f33-2042e1e81a37\", permissions-policy:\"geolocation=(self)\", pragma:\"no-cache\", activityid:\"ef579dea-e815-4c67-bc1f-f58b5de7b415\", content-security-policy:\"form-action 'self'\", x-content-type-options:\"nosniff\", x-xss-protection:\"1 ; mode=block\", referrer-policy:\"strict-origin-when-cross-origin\", cache-control:\"no-cache, no-store, max-age=0, must-revalidate\", server:\"istio-envoy\", Access-Control-Allow-Origin:\"*\", Access-Control-Allow-Methods:\"GET,HEAD,POST,PUT,DELETE,OPTIONS,CONNECT,TRACE,PATCH\", Access-Control-Allow-Headers:\"*\", X-Cache:\"Miss from cloudfront\", Via:\"1.1 303e917d845d3965f206781fd60fa0d4.cloudfront.net (CloudFront)\", X-Amz-Cf-Pop:\"BLR50-P4\", X-Amz-Cf-Id:\"KRBlxs1El4isyejvL8jwMUd-nANeJ0FA3MJKLzfoPx4WyPaoUc7cqw==\", Strict-Transport-Security:\"max-age=31536000\"]>", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} -{"@timestamp":"2026-01-21T16:17:05.687Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2e2376d8 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:17:05.690Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@132c9f7d (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:17:05.692Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@16488fd9 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:17:05.693Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@23e8be7e (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:17:05.695Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@26c38181 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:17:08.035Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"data\":{\"xToken\":\"eyJhbGciOiJSUzUxMiJ9.eyJpc0t5Y1ZlcmlmaWVkIjp0cnVlLCJzdWIiOiI5MS0zNDgxLTQ4MDAtMjYwNiIsImF1dGhfdHlwZSI6IktZQ19PVFAiLCJjbGllbnRJZCI6ImFiaGEtcHJvZmlsZS1hcHAtYXBpIiwiYWNjb3VudFR5cGUiOiJzdGFuZGFyZCIsImdlbl9zb3VyY2UiOiJhYWRoYWFyX290cCIsIm1vYmlsZSI6Ijk0ODg4MzMxMzEiLCJ0eXAiOiJUcmFuc2FjdGlvbiIsImFwaV92ZXJzaW9uIjoidjMiLCJzeXN0ZW0iOiJBQkhBLU4iLCJhYmhhTnVtYmVyIjoiOTEtMzQ4MS00ODAwLTI2MDYiLCJwcmVmZXJyZWRBYmhhQWRkcmVzcyI6IjkxMzQ4MTQ4MDAyNjA2QHNieCIsImJhYWxfYWJoYSI6Im5vIiwiZXhwIjoxNzY5MDE0MDI1LCJpYXQiOjE3NjkwMTIyMjUsInR4bklkIjoiNjU4OGQ0ZTMtMTRiNy00MTAzLTgwZDYtNzA5ZDY4MmQzZjRhIn0.kr65cxMlxW1Fhot0Dnz6Vi37y5rEtFRAvaHdAjb61xK7tCU7CW_tBRYIdT505uf1g9Pfh1XXg34h65y_Btv3_BEndrxuXpeuY5RcRV0Y5wNnY_XJt8W_M83tqb1C0HFjmPdhbN2cAialHmBPV5s8bkq-x0CNES3Fq0JD3cvgXDJQ4k0v3YTIs8qrYcnZDTIYpevLc4PIjUwa2Qnmwrc5Zdj0kCnJlRWttGauyaZhktlKRkWIc1ttZQO_yE_yLdjmAzoD8UUUafs0Caa5ZS5sJhb-GQj-NwtnrpIu4aYJhkvW5Fu09xrdLYzCN9i_fP0Z2CV2WTzRCtgxGTyPU6dDzKYOeBIDeN3NWPgHjJ5jnN5iVeeptNOC2wwRK8wZhlmyyfv5Z6K74_hf_AUGx79hjPiNfTF-VbbTQr13jynW7okgsPz2F9mRXRRg92jIQ6xWyPSwIqzYWDQKUl-Q5xRyt3xTZ1U8gbvqDbgczXcwOJIOH2Gp1hTkXT3QuQPFWLSvnfRCSrTwfVFyNsM3fRzbNiNMB6yPziuioWqpzHrn6zhAUmfUZVV7Qx-QEiD8Dga3Q9dySNr8NgZNBghWishfq2jDFx_j7NLpeY6uML703N9F8HiDHO24A6mXDAonO7gwLKRWjdtdhnRcfCRTkK38zHW4--YiUp_mSiIXyQbIe7c\",\"isNew\":true,\"ABHAProfile\":{\"hID\":3435,\"healthIdNumber\":\"91-3481-4800-2606\",\"name\":\"Sureshkumar Palanisamy\",\"providerServiceMapID\":1717,\"gender\":\"M\",\"yearOfBirth\":\"1985\",\"monthOfBirth\":\"07\",\"dayOfBirth\":\"18\",\"firstName\":\"Sureshkumar\",\"healthId\":\"91348148002606@sbx\",\"lastName\":\"Palanisamy\",\"middleName\":\"\",\"stateCode\":\"33\",\"districtCode\":\"569\",\"stateName\":\"TAMIL NADU\",\"districtName\":\"COIMBATORE\",\"mobile\":\"9488833131\",\"deleted\":false,\"processed\":\"N\",\"createdBy\":\"Mokrong\",\"isNewAbha\":true},\"txnId\":\"6588d4e3-14b7-4103-80d6-709d682d3f4a\"},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-7","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:17:20.110Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-8","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:17:20.110Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /healthID/getBenIdForhealthID", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-8","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:17:20.111Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-8","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:17:20.114Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-8","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} -{"@timestamp":"2026-01-21T16:17:20.116Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-8","log.logger":"HTTPRequestInterceptor"} -{"@timestamp":"2026-01-21T16:17:20.117Z", "log.level": "INFO", "message":"NDHM_FHIR Request obj to fetch beneficiary Ids for HealthID :{\"healthIdNumber\":\"91-3481-4800-2606\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-8","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIDWithMobileOTP"} -{"@timestamp":"2026-01-21T16:17:20.383Z", "log.level": "INFO", "message":"NDHM_FHIR get beneficiary Ids for HealthID response:{\"data\":{\"response\":\"No Beneficiary Found\"},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-8","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIDWithMobileOTP"} -{"@timestamp":"2026-01-21T16:17:51.424Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-9","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:17:51.424Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /healthIDRecord/mapHealthIDToBeneficiary", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-9","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:17:51.424Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-9","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:17:51.429Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-9","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} -{"@timestamp":"2026-01-21T16:17:51.430Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-9","log.logger":"HTTPRequestInterceptor"} -{"@timestamp":"2026-01-21T16:17:51.437Z", "log.level": "INFO", "message":"NDHM_FHIR Map ABHA to beneficiary API request {\"beneficiaryRegID\":null,\"beneficiaryID\":\"299711001300\",\"healthId\":\"91-3481-4800-2606\",\"healthIdNumber\":\"91-3481-4800-2606\",\"providerServiceMapId\":1717,\"authenticationMode\":null,\"createdBy\":\"Mokrong\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-9","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIdRecord"} -{"@timestamp":"2026-01-21T16:17:53.370Z", "log.level": "INFO", "message":"NDHM_FHIR Map ABHA to beneficiary API response {\"data\":{\"benHealthID\":7927,\"healthIdNumber\":\"91-3481-4800-2606\",\"providerServiceMapId\":1717,\"beneficiaryRegID\":10468792,\"beneficiaryID\":299711001300,\"healthId\":\"91-3481-4800-2606\",\"deleted\":false,\"processed\":\"N\",\"createdBy\":\"Mokrong\",\"isNewAbha\":false},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-9","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIdRecord"} -{"@timestamp":"2026-01-21T16:20:00.002Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-3","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:20:00.677Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-3","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} -{"@timestamp":"2026-01-21T16:20:00.677Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-3","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:21:46.689Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2ce6758 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:22:00.793Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@246f1f7c (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:22:01.738Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@75f8b95e (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:22:06.772Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2930cc62 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:22:08.798Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@38b15633 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:24:35.835Z", "log.level": "INFO", "message":"Scheduler jelies-quartz-scheduler_$_NON_CLUSTERED paused.", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"org.quartz.core.QuartzScheduler"} -{"@timestamp":"2026-01-21T16:24:35.985Z", "log.level": "INFO", "message":"Shutting down Quartz Scheduler", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"org.springframework.scheduling.quartz.SchedulerFactoryBean"} -{"@timestamp":"2026-01-21T16:24:35.986Z", "log.level": "INFO", "message":"Scheduler jelies-quartz-scheduler_$_NON_CLUSTERED shutting down.", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"org.quartz.core.QuartzScheduler"} -{"@timestamp":"2026-01-21T16:24:35.986Z", "log.level": "INFO", "message":"Scheduler jelies-quartz-scheduler_$_NON_CLUSTERED paused.", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"org.quartz.core.QuartzScheduler"} -{"@timestamp":"2026-01-21T16:24:35.987Z", "log.level": "INFO", "message":"Scheduler jelies-quartz-scheduler_$_NON_CLUSTERED shutdown complete.", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"org.quartz.core.QuartzScheduler"} -{"@timestamp":"2026-01-21T16:24:36.013Z", "log.level": "INFO", "message":"Closing JPA EntityManagerFactory for persistence unit 'default'", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"} -{"@timestamp":"2026-01-21T16:24:36.017Z", "log.level": "INFO", "message":"HikariPool-1 - Shutdown initiated...", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"com.zaxxer.hikari.HikariDataSource"} -{"@timestamp":"2026-01-21T16:24:37.524Z", "log.level": "INFO", "message":"HikariPool-1 - Shutdown completed.", "ecs.version": "1.2.0","process.thread.name":"SpringApplicationShutdownHook","log.logger":"com.zaxxer.hikari.HikariDataSource"} -{"@timestamp":"2026-01-21T16:24:57.464Z", "log.level": "INFO", "message":"Starting FhirApiApplication using Java 17.0.17 with PID 18684 (/home/ds/Documents/Amrit/Backend/FHIR-API/target/classes started by ds in /home/ds/Documents/Amrit/Backend/FHIR-API)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.wipro.fhir.FhirApiApplication"} -{"@timestamp":"2026-01-21T16:24:57.465Z", "log.level": "INFO", "message":"No active profile set, falling back to 1 default profile: \"default\"", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.wipro.fhir.FhirApiApplication"} -{"@timestamp":"2026-01-21T16:24:58.237Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:24:58.238Z", "log.level": "INFO", "message":"Bootstrapping Spring Data Elasticsearch repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:24:58.271Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.271Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.272Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.272Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.274Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.275Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.275Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.276Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.276Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.277Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.277Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.278Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.279Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.279Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.280Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.281Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.281Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.282Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.282Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.283Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.284Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.285Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.286Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.287Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.287Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.288Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.288Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.290Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.290Z", "log.level": "INFO", "message":"Spring Data Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ElasticsearchRepository, org.springframework.data.elasticsearch.repository.ElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.291Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 49 ms. Found 0 Elasticsearch repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:24:58.295Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:24:58.295Z", "log.level": "INFO", "message":"Bootstrapping Spring Data Reactive Elasticsearch repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:24:58.304Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.305Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.305Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.305Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.305Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.305Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.306Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.306Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.306Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.306Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.306Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.306Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.307Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.307Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.307Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.307Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.307Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.308Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.308Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.308Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.308Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.308Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.308Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.309Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.309Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.309Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.309Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.309Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.310Z", "log.level": "INFO", "message":"Spring Data Reactive Elasticsearch - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a Reactive Elasticsearch repository, consider annotating your entities with one of these annotations: org.springframework.data.elasticsearch.annotations.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.elasticsearch.repository.ReactiveElasticsearchRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.310Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 14 ms. Found 0 Reactive Elasticsearch repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:24:58.315Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:24:58.316Z", "log.level": "INFO", "message":"Bootstrapping Spring Data JPA repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:24:58.328Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.329Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.329Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.330Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.409Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.409Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.410Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.410Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.410Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.411Z", "log.level": "INFO", "message":"Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.454Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 135 ms. Found 19 JPA repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:24:58.478Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:24:58.479Z", "log.level": "INFO", "message":"Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:24:58.487Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.487Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.487Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.487Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.487Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.488Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.489Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.489Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.489Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.489Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.490Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.490Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.490Z", "log.level": "INFO", "message":"Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.507Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 27 ms. Found 9 MongoDB repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:24:58.518Z", "log.level": "INFO", "message":"Multiple Spring Data modules found, entering strict repository configuration mode", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:24:58.519Z", "log.level": "INFO", "message":"Bootstrapping Spring Data Redis repositories in DEFAULT mode.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:24:58.534Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.534Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.534Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.534Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.AllergyIntoleranceDataModelRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.534Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.common.PatientEligibleForResourceCreationRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.535Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.535Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.FacilityRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.535Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.535Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.535Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.535Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.535Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.536Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.536Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.536Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.536Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.RouteRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.536Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.UomRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.536Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.537Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.537Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.healthID.HealthIDRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.537Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.537Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.537Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.537Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.537Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.538Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.538Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.538Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.user.UserLoginRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.538Z", "log.level": "INFO", "message":"Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.wipro.fhir.repo.v3.careContext.CareContextRepo; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport"} -{"@timestamp":"2026-01-21T16:24:58.538Z", "log.level": "INFO", "message":"Finished Spring Data repository scanning in 13 ms. Found 0 Redis repository interfaces.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.repository.config.RepositoryConfigurationDelegate"} -{"@timestamp":"2026-01-21T16:24:59.019Z", "log.level": "INFO", "message":"Tomcat initialized with port 8093 (http)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer"} -{"@timestamp":"2026-01-21T16:24:59.027Z", "log.level": "INFO", "message":"Starting service [Tomcat]", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.apache.catalina.core.StandardService"} -{"@timestamp":"2026-01-21T16:24:59.027Z", "log.level": "INFO", "message":"Starting Servlet engine: [Apache Tomcat/10.1.18]", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.apache.catalina.core.StandardEngine"} -{"@timestamp":"2026-01-21T16:24:59.081Z", "log.level": "INFO", "message":"Initializing Spring embedded WebApplicationContext", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]"} -{"@timestamp":"2026-01-21T16:24:59.082Z", "log.level": "INFO", "message":"Root WebApplicationContext: initialization completed in 1563 ms", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext"} -{"@timestamp":"2026-01-21T16:24:59.392Z", "log.level": "INFO", "message":"HHH000204: Processing PersistenceUnitInfo [name: default]", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.jpa.internal.util.LogHelper"} -{"@timestamp":"2026-01-21T16:24:59.435Z", "log.level": "INFO", "message":"HHH000412: Hibernate ORM core version 6.4.1.Final", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.Version"} -{"@timestamp":"2026-01-21T16:24:59.459Z", "log.level": "INFO", "message":"HHH000026: Second-level cache disabled", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.cache.internal.RegionFactoryInitiator"} -{"@timestamp":"2026-01-21T16:24:59.604Z", "log.level": "INFO", "message":"No LoadTimeWeaver setup: ignoring JPA class transformer", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo"} -{"@timestamp":"2026-01-21T16:24:59.621Z", "log.level": "INFO", "message":"HikariPool-1 - Starting...", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.zaxxer.hikari.HikariDataSource"} -{"@timestamp":"2026-01-21T16:25:02.008Z", "log.level": "INFO", "message":"HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@2d5e051e", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.zaxxer.hikari.pool.HikariPool"} -{"@timestamp":"2026-01-21T16:25:02.010Z", "log.level": "INFO", "message":"HikariPool-1 - Start completed.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.zaxxer.hikari.HikariDataSource"} -{"@timestamp":"2026-01-21T16:25:02.466Z", "log.level": "WARN", "message":"HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.orm.deprecation"} -{"@timestamp":"2026-01-21T16:25:03.360Z", "log.level": "INFO", "message":"HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator"} -{"@timestamp":"2026-01-21T16:25:03.362Z", "log.level": "INFO", "message":"Initialized JPA EntityManagerFactory for persistence unit 'default'", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"} -{"@timestamp":"2026-01-21T16:25:03.535Z", "log.level": "INFO", "message":"Hibernate is in classpath; If applicable, HQL parser will be used.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.jpa.repository.query.QueryEnhancerFactory"} -{"@timestamp":"2026-01-21T16:25:04.372Z", "log.level": "INFO", "message":"MongoClient with metadata {\"driver\": {\"name\": \"mongo-java-driver|sync|spring-boot\", \"version\": \"4.11.1\"}, \"os\": {\"type\": \"Linux\", \"name\": \"Linux\", \"architecture\": \"amd64\", \"version\": \"6.8.0-90-generic\"}, \"platform\": \"Java/Ubuntu/17.0.17+10-Ubuntu-122.04\"} created with settings MongoClientSettings{readPreference=primary, writeConcern=WriteConcern{w=null, wTimeout=null ms, journal=null}, retryWrites=true, retryReads=true, readConcern=ReadConcern{level=null}, credential=MongoCredential{mechanism=null, userName='root', source='admin', password=, mechanismProperties=}, transportSettings=null, streamFactoryFactory=null, commandListeners=[], codecRegistry=ProvidersCodecRegistry{codecProviders=[ValueCodecProvider{}, BsonValueCodecProvider{}, DBRefCodecProvider{}, DBObjectCodecProvider{}, DocumentCodecProvider{}, CollectionCodecProvider{}, IterableCodecProvider{}, MapCodecProvider{}, GeoJsonCodecProvider{}, GridFSFileCodecProvider{}, Jsr310CodecProvider{}, JsonObjectCodecProvider{}, BsonCodecProvider{}, EnumCodecProvider{}, com.mongodb.client.model.mql.ExpressionCodecProvider@4c89b58, com.mongodb.Jep395RecordCodecProvider@472cf6af, com.mongodb.KotlinCodecProvider@1fab1909]}, loggerSettings=LoggerSettings{maxDocumentLength=1000}, clusterSettings={hosts=[localhost:27017], srvServiceName=mongodb, mode=SINGLE, requiredClusterType=UNKNOWN, requiredReplicaSetName='null', serverSelector='null', clusterListeners='[]', serverSelectionTimeout='30000 ms', localThreshold='15 ms'}, socketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=0, receiveBufferSize=0, proxySettings=ProxySettings{host=null, port=null, username=null, password=null}}, heartbeatSocketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=10000, receiveBufferSize=0, proxySettings=ProxySettings{host=null, port=null, username=null, password=null}}, connectionPoolSettings=ConnectionPoolSettings{maxSize=100, minSize=0, maxWaitTimeMS=120000, maxConnectionLifeTimeMS=0, maxConnectionIdleTimeMS=0, maintenanceInitialDelayMS=0, maintenanceFrequencyMS=60000, connectionPoolListeners=[], maxConnecting=2}, serverSettings=ServerSettings{heartbeatFrequencyMS=10000, minHeartbeatFrequencyMS=500, serverListeners='[]', serverMonitorListeners='[]'}, sslSettings=SslSettings{enabled=false, invalidHostNameAllowed=false, context=null}, applicationName='null', compressorList=[], uuidRepresentation=JAVA_LEGACY, serverApi=null, autoEncryptionSettings=null, dnsClient=null, inetAddressResolver=null, contextProvider=null}", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.mongodb.driver.client"} -{"@timestamp":"2026-01-21T16:25:04.381Z", "log.level": "INFO", "message":"Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=17, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=13654922}", "ecs.version": "1.2.0","process.thread.name":"cluster-ClusterId{value='6970fde0ce785b271d2cb22e', description='null'}-localhost:27017","log.logger":"org.mongodb.driver.cluster"} -{"@timestamp":"2026-01-21T16:25:04.431Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.amrit_resource.TempCollection.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:25:04.436Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.atoms.feed.bahmni.encounter.ClinicalFeedDataLog.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:25:04.444Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:25:04.455Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.amrit_resource.AMRIT_ResourceMongo.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:25:04.456Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.care_context.NDHMResponse.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:25:04.458Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.atoms.feed.bahmni.encounter.EncounterFullRepresentation.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:25:04.484Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.atoms.feed.bahmni.patient.FeedDataLog.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:25:04.487Z", "log.level": "WARN", "message":"Customizing field name for id property 'com.wipro.fhir.data.mongo.care_context.GenerateTokenAbdmResponses.id' is not allowed; Custom name ('id') will not be considered", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.mongodb.core.mapping.BasicMongoPersistentProperty"} -{"@timestamp":"2026-01-21T16:25:05.267Z", "log.level": "INFO", "message":"Using default implementation for ThreadExecutor", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.impl.StdSchedulerFactory"} -{"@timestamp":"2026-01-21T16:25:05.276Z", "log.level": "INFO", "message":"Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.SchedulerSignalerImpl"} -{"@timestamp":"2026-01-21T16:25:05.276Z", "log.level": "INFO", "message":"Quartz Scheduler v2.5.0-rc1 created.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} -{"@timestamp":"2026-01-21T16:25:05.276Z", "log.level": "INFO", "message":"RAMJobStore initialized.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.simpl.RAMJobStore"} -{"@timestamp":"2026-01-21T16:25:05.277Z", "log.level": "INFO", "message":"Scheduler meta-data: Quartz Scheduler (v2.5.0-rc1) 'jelies-quartz-scheduler' with instanceId 'NON_CLUSTERED'\n Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.\n NOT STARTED.\n Currently in standby mode.\n Number of jobs executed: 0\n Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.\n Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.\n", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} -{"@timestamp":"2026-01-21T16:25:05.277Z", "log.level": "INFO", "message":"Quartz scheduler 'jelies-quartz-scheduler' initialized from an externally provided properties instance.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.impl.StdSchedulerFactory"} -{"@timestamp":"2026-01-21T16:25:05.277Z", "log.level": "INFO", "message":"Quartz scheduler version: 2.5.0-rc1", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.impl.StdSchedulerFactory"} -{"@timestamp":"2026-01-21T16:25:05.277Z", "log.level": "INFO", "message":"JobFactory set to: com.wipro.fhir.config.quartz.AutowiringSpringBeanJobFactory@30cf6802", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} -{"@timestamp":"2026-01-21T16:25:05.900Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.Boolean com.wipro.fhir.utils.config.ConfigProperties.extendExpiryTime", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} -{"@timestamp":"2026-01-21T16:25:05.900Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.Integer com.wipro.fhir.utils.config.ConfigProperties.sessionExpiryTime", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} -{"@timestamp":"2026-01-21T16:25:05.900Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.String com.wipro.fhir.utils.config.ConfigProperties.redisurl", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} -{"@timestamp":"2026-01-21T16:25:05.900Z", "log.level": "INFO", "message":"Autowired annotation is not supported on static fields: private static java.lang.Integer com.wipro.fhir.utils.config.ConfigProperties.redisport", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"} -{"@timestamp":"2026-01-21T16:25:05.934Z", "log.level": "WARN", "message":"spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration$JpaWebConfiguration"} -{"@timestamp":"2026-01-21T16:25:06.102Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ParkingPlaceRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.105Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.106Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.PatientIssueRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.106Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.healthID.HealthIDRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.107Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemFormRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.107Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemStockEntryRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.107Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemStockExitRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.108Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.patient_data_handler.TRG_PatientResourceData_Repo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.108Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.RouteRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.108Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.UomRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.109Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.109Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.FacilityRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.109Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.VanMasterRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.110Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.ItemCategoryRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.110Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.E_AusdhFacilityProcessLogRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.110Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.e_aushdhi.M_itemfacilitymappingRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.111Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.amrit_resource.TempCollectionRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.111Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.patient_data_handler.PatientDemographicModel_NDHM_Patient_Profile_Repo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.112Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.ndhm_response.NDHMResponseRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.112Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.atoms.feed.bahmni.encounter.ClinicalFeedDataLogRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.112Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.atoms.feed.bahmni.encounter.EncounterFullRepresentationRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.113Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.atoms.feed.bahmni.patient.FeedDataLogRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.113Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.amrit_resource.AMRIT_ResourceMongoRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.113Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.amrit_resource.PatientCareContextsMongoRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.113Z", "log.level": "WARN", "message":"@RestResource detected to customize the repository resource for com.wipro.fhir.repo.mongo.generateToken_response.GenerateTokenAbdmResponsesRepo; Use @RepositoryRestResource instead", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.data.rest.core.mapping.RepositoryCollectionResourceMapping"} -{"@timestamp":"2026-01-21T16:25:06.758Z", "log.level": "INFO", "message":"Tomcat started on port 8093 (http) with context path ''", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer"} -{"@timestamp":"2026-01-21T16:25:06.759Z", "log.level": "INFO", "message":"Starting Quartz Scheduler now", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.springframework.scheduling.quartz.SchedulerFactoryBean"} -{"@timestamp":"2026-01-21T16:25:06.759Z", "log.level": "INFO", "message":"Scheduler jelies-quartz-scheduler_$_NON_CLUSTERED started.", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"org.quartz.core.QuartzScheduler"} -{"@timestamp":"2026-01-21T16:25:06.769Z", "log.level": "INFO", "message":"Started FhirApiApplication in 9.677 seconds (process running for 9.992)", "ecs.version": "1.2.0","process.thread.name":"main","log.logger":"com.wipro.fhir.FhirApiApplication"} -{"@timestamp":"2026-01-21T16:29:40.505Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@44747fcc (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:29:41.589Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2a945356 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:29:42.968Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2d5e051e (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:29:50.131Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2e3176a8 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:30:00.007Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-1","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:30:00.096Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@7ba1e388 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-1","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:30:00.659Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-1","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} -{"@timestamp":"2026-01-21T16:30:00.659Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-1","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:34:23.812Z", "log.level": "INFO", "message":"Initializing Spring DispatcherServlet 'dispatcherServlet'", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]"} -{"@timestamp":"2026-01-21T16:34:23.812Z", "log.level": "INFO", "message":"Initializing Servlet 'dispatcherServlet'", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"org.springframework.web.servlet.DispatcherServlet"} -{"@timestamp":"2026-01-21T16:34:23.815Z", "log.level": "INFO", "message":"Completed initialization in 1 ms", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"org.springframework.web.servlet.DispatcherServlet"} -{"@timestamp":"2026-01-21T16:34:23.817Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:34:23.817Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/requestOtpForAbhaEnrollment", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:34:23.817Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:34:24.190Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} -{"@timestamp":"2026-01-21T16:34:24.206Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"HTTPRequestInterceptor"} -{"@timestamp":"2026-01-21T16:34:24.224Z", "log.level": "INFO", "message":"Generate OTP for ABHA enrollment API request {\"loginId\":\"994906946475\",\"loginMethod\":\"aadhaar\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:34:26.020Z", "log.level": "INFO", "message":"NDHM_FHIR NDHM V3 authentication success at : 1769013266020", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.GenerateAuthSessionServiceImpl"} -{"@timestamp":"2026-01-21T16:34:26.199Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@5e08ed95 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:34:26.579Z", "log.level": "INFO", "message":"publicKeyString : MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAstWB95C5pHLXiYW59qyO4Xb+59KYVm9Hywbo77qETZVAyc6VIsxU+UWhd/k/YtjZibCznB+HaXWX9TVTFs9Nwgv7LRGq5uLczpZQDrU7dnGkl/urRA8p0Jv/f8T0MZdFWQgks91uFffeBmJOb58u68ZRxSYGMPe4hb9XXKDVsgoSJaRNYviH7RgAI2QhTCwLEiMqIaUX3p1SAc178ZlN8qHXSSGXvhDR1GKM+y2DIyJqlzfik7lD14mDY/I4lcbftib8cv7llkybtjX1AayfZp4XpmIXKWv8nRM488/jOAF81Bi13paKgpjQUUuwq9tb5Qd/DChytYgBTBTJFe7irDFCmTIcqPr8+IMB7tXA3YXPp3z605Z6cGoYxezUm2Nz2o6oUmarDUntDhq/PnkNergmSeSvS8gD9DHBuJkJWZweG3xOPXiKQAUBr92mdFhJGm6fitO5jsBxgpmulxpG0oKDy9lAOLWSqK92JMcbMNHn4wRikdI9HSiXrrI7fLhJYTbyU3I4v5ESdEsayHXuiwO/1C8y56egzKSw44GAtEpbAkTNEEfK5H5R0QnVBIXOvfeF4tzGvmkfOO6nNXU3o/WAdOyV3xSQ9dqLY5MEL4sJCGY1iJBIAQ452s8v0ynJG5Yq+8hNhsCVnklCzAlsIzQpnSVDUVEzv17grVAw078CAwEAAQ==", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.CertificateKeyServiceImpl"} -{"@timestamp":"2026-01-21T16:34:26.584Z", "log.level": "INFO", "message":"encryptedTextBase64 :PJgT59BFq7fcPWOlShuXJkuC1yawAW+L7pb9GteYzT7R8RzPH4VARr04i35Lp70D7zeLt9rWrHU+HY2BryV+2TSDprCZzVFu8Qrojs7izGCAUK069Zhbe9DcLUNiEaVILnp3zW+UfoT6caVedAmi7AFU2nnLZS+CMwHXGNvZDhzB7AZx2S/aAw1QQimx792cXKGnrqbvF4RC8QzOLu/oFyy6x9oN9F4ZC1xio8rJf89LW6lMu0aJ+eAVVr7GeSYbzCGCWxENqOuUpUkzzzkHt8wVJpLXMC+Icb/MW/JRgvsWc9WkgTmMYLvyJayd9iUcFZKIWj7mvCKTaCYH3L04PMofipQfmTKp5ARsPGS6kTj63/1TXi6hYc14Dih3r4sMkonVr9BfkqS/L/IHn9yG8mPEUGIBEiS8z/9TL5zo9Rv20OjljNpEIoQbEd/wRzBMwckQeb5pRSCgdh7A14Gdpji/wZIZ5Y6nT1uzr+h465g5bkrya+BDB+Rs8HqOvnWEpCQayZwAGHv01zZrjBn4FIC07u+gzJAFkKfJLKQcM508yxoDWMMXX9obKgEXrchBodyRqSrtjdB8DcwpCOL4qo8dokOdeoVt3r1EwpLZi18v8IIRBmGlcs5+9FncMyjpsX9uDYwaAwmspVB4RSLr6hQHZ2QpaEHNL3clX/T9tyc=", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.utils.Encryption"} -{"@timestamp":"2026-01-21T16:34:26.585Z", "log.level": "INFO", "message":"ABDM reqobj for request otp for enrollment: {\"scope\":[\"abha-enrol\"],\"loginHint\":\"aadhaar\",\"loginId\":\"PJgT59BFq7fcPWOlShuXJkuC1yawAW+L7pb9GteYzT7R8RzPH4VARr04i35Lp70D7zeLt9rWrHU+HY2BryV+2TSDprCZzVFu8Qrojs7izGCAUK069Zhbe9DcLUNiEaVILnp3zW+UfoT6caVedAmi7AFU2nnLZS+CMwHXGNvZDhzB7AZx2S/aAw1QQimx792cXKGnrqbvF4RC8QzOLu/oFyy6x9oN9F4ZC1xio8rJf89LW6lMu0aJ+eAVVr7GeSYbzCGCWxENqOuUpUkzzzkHt8wVJpLXMC+Icb/MW/JRgvsWc9WkgTmMYLvyJayd9iUcFZKIWj7mvCKTaCYH3L04PMofipQfmTKp5ARsPGS6kTj63/1TXi6hYc14Dih3r4sMkonVr9BfkqS/L/IHn9yG8mPEUGIBEiS8z/9TL5zo9Rv20OjljNpEIoQbEd/wRzBMwckQeb5pRSCgdh7A14Gdpji/wZIZ5Y6nT1uzr+h465g5bkrya+BDB+Rs8HqOvnWEpCQayZwAGHv01zZrjBn4FIC07u+gzJAFkKfJLKQcM508yxoDWMMXX9obKgEXrchBodyRqSrtjdB8DcwpCOL4qo8dokOdeoVt3r1EwpLZi18v8IIRBmGlcs5+9FncMyjpsX9uDYwaAwmspVB4RSLr6hQHZ2QpaEHNL3clX/T9tyc\\u003d\",\"otpSystem\":\"aadhaar\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} -{"@timestamp":"2026-01-21T16:34:28.461Z", "log.level": "INFO", "message":"ABDM response for request otp for enrollment: <200 OK OK,{\"txnId\":\"87e052b3-8927-4bc2-98ad-297625553197\",\"message\":\"OTP sent to Aadhaar registered mobile number ending with ******3131\"},[Content-Type:\"application/json\", Transfer-Encoding:\"chunked\", Connection:\"keep-alive\", Date:\"Wed, 21 Jan 2026 16:34:28 GMT\", Access-Control-Expose-Headers:\"*\", X-Frame-Options:\"SAMEORIGIN\", expires:\"0\", x-envoy-upstream-service-time:\"1661\", vary:\"Origin,Access-Control-Request-Method,Access-Control-Request-Headers\", correlation-id:\"f2f8ccf4-8d91-4bd1-8e25-3c8fc9e66782\", permissions-policy:\"geolocation=(self)\", pragma:\"no-cache\", activityid:\"5859be00-8e93-4abc-a827-d1e22d74b9d7\", content-security-policy:\"form-action 'self'\", x-content-type-options:\"nosniff\", x-xss-protection:\"1 ; mode=block\", referrer-policy:\"strict-origin-when-cross-origin\", cache-control:\"no-cache, no-store, max-age=0, must-revalidate\", server:\"istio-envoy\", Access-Control-Allow-Origin:\"*\", Access-Control-Allow-Methods:\"GET,HEAD,POST,PUT,DELETE,OPTIONS,CONNECT,TRACE,PATCH\", Access-Control-Allow-Headers:\"*\", X-Cache:\"Miss from cloudfront\", Via:\"1.1 2c89cca1ce7a0bb2069a1fa1ddabec0e.cloudfront.net (CloudFront)\", X-Amz-Cf-Pop:\"BLR50-P4\", X-Amz-Cf-Id:\"CoQEAJQ6ch1BaDNbvQtMbff6NzGS4BoLEsA7HG5DwNkNqTcE9LoBWQ==\", Strict-Transport-Security:\"max-age=31536000\"]>", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} -{"@timestamp":"2026-01-21T16:34:28.468Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"data\":{\"message\":\"OTP sent to Aadhaar registered mobile number ending with ******3131\",\"txnId\":\"87e052b3-8927-4bc2-98ad-297625553197\"},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-1","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:34:38.332Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@756e9bbb (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:34:40.451Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@44d89397 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:34:40.742Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@456a6bf4 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:34:59.649Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@342e521b (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:34:59.860Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:34:59.860Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /abhaCreation/abhaEnrollmentByAadhaar", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:34:59.860Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:34:59.868Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} -{"@timestamp":"2026-01-21T16:34:59.870Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"HTTPRequestInterceptor"} -{"@timestamp":"2026-01-21T16:34:59.872Z", "log.level": "INFO", "message":"ABHA enrollment BY Aadhaar API request {\"loginMethod\":\"aadhaar\",\"loginId\":\"188455\",\"mobileNumber\":\"9488833131\",\"txnId\":\"87e052b3-8927-4bc2-98ad-297625553197\",\"createdBy\":\"Mokrong\",\"providerServiceMapId\":1717}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:35:00.001Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-2","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:35:00.286Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-2","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} -{"@timestamp":"2026-01-21T16:35:00.286Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-2","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:35:00.698Z", "log.level": "INFO", "message":"publicKeyString : MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAstWB95C5pHLXiYW59qyO4Xb+59KYVm9Hywbo77qETZVAyc6VIsxU+UWhd/k/YtjZibCznB+HaXWX9TVTFs9Nwgv7LRGq5uLczpZQDrU7dnGkl/urRA8p0Jv/f8T0MZdFWQgks91uFffeBmJOb58u68ZRxSYGMPe4hb9XXKDVsgoSJaRNYviH7RgAI2QhTCwLEiMqIaUX3p1SAc178ZlN8qHXSSGXvhDR1GKM+y2DIyJqlzfik7lD14mDY/I4lcbftib8cv7llkybtjX1AayfZp4XpmIXKWv8nRM488/jOAF81Bi13paKgpjQUUuwq9tb5Qd/DChytYgBTBTJFe7irDFCmTIcqPr8+IMB7tXA3YXPp3z605Z6cGoYxezUm2Nz2o6oUmarDUntDhq/PnkNergmSeSvS8gD9DHBuJkJWZweG3xOPXiKQAUBr92mdFhJGm6fitO5jsBxgpmulxpG0oKDy9lAOLWSqK92JMcbMNHn4wRikdI9HSiXrrI7fLhJYTbyU3I4v5ESdEsayHXuiwO/1C8y56egzKSw44GAtEpbAkTNEEfK5H5R0QnVBIXOvfeF4tzGvmkfOO6nNXU3o/WAdOyV3xSQ9dqLY5MEL4sJCGY1iJBIAQ452s8v0ynJG5Yq+8hNhsCVnklCzAlsIzQpnSVDUVEzv17grVAw078CAwEAAQ==", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.service.v3.abha.CertificateKeyServiceImpl"} -{"@timestamp":"2026-01-21T16:35:00.706Z", "log.level": "INFO", "message":"encryptedTextBase64 :G+Djz3vMnQ69+G6C3PvCJJDalclsgPaRTMkvCdeBsDtjTJ/zi5K9vNYpawTcPXp/TlUwVsSyfErlmFsZWDPGUWk4DGOiKTln/fgIZqZUPzB1Mgw5fgxKyBaDLf2T44ByNwWyclsFqlv7EUTgbcAt+wY7uagSCNsGEsQ3Uc5WI/nMnoGbaGvKnP6xUQoi8FLDhqB9TlQUB6ccwprlei3psE+64YWG5l+2rq4fsIk6ijvYj9Fe15LFq5gzkrHUssTP8XwpIlWsxNLW84Tf13zrGoCzg3khtBmBS/8vi36vYVAISstxWf8AcZUbDgnadSbWjAeLERqksvdAduTZKqjoHdHOmdAdKEocn7Hmc8wvWdJq0BJiR7vNhLfxjkw+lpCUQljOWvFvBL/pVlhycqZYJ8txtNj9YojucLl6xV7Zjm6QZ7vjuuXWUlqkV8iIPb15ikvTtA24/0qBs5RdpE78OyYwiNC/PpOuUZW1e31vLq3NDkU9cWVzFVX15yJ919IF+/nPbqaCRSgboPqdft8XuI21L+QWRTPmSvG+nD1gPztCwexBiItRZy3mdYMfwywTNPJOtDi8fED1GVdwDaWGsynMxUfZY+aR2TdumfBYA95HZKCrUFpN5klPa3iqg/GvPVEiZoIWf4/z/GY1KGBoGz9tLn4Lw/MfUbIBKd99QjU=", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.utils.Encryption"} -{"@timestamp":"2026-01-21T16:35:00.711Z", "log.level": "INFO", "message":"ABDM request for enroll by Aadhaar: EnrollByAadhaar(authData={otp=OtpRequest(timestamp=2026-01-21T16:35:00.708664783Z, txnId=87e052b3-8927-4bc2-98ad-297625553197, otpValue=G+Djz3vMnQ69+G6C3PvCJJDalclsgPaRTMkvCdeBsDtjTJ/zi5K9vNYpawTcPXp/TlUwVsSyfErlmFsZWDPGUWk4DGOiKTln/fgIZqZUPzB1Mgw5fgxKyBaDLf2T44ByNwWyclsFqlv7EUTgbcAt+wY7uagSCNsGEsQ3Uc5WI/nMnoGbaGvKnP6xUQoi8FLDhqB9TlQUB6ccwprlei3psE+64YWG5l+2rq4fsIk6ijvYj9Fe15LFq5gzkrHUssTP8XwpIlWsxNLW84Tf13zrGoCzg3khtBmBS/8vi36vYVAISstxWf8AcZUbDgnadSbWjAeLERqksvdAduTZKqjoHdHOmdAdKEocn7Hmc8wvWdJq0BJiR7vNhLfxjkw+lpCUQljOWvFvBL/pVlhycqZYJ8txtNj9YojucLl6xV7Zjm6QZ7vjuuXWUlqkV8iIPb15ikvTtA24/0qBs5RdpE78OyYwiNC/PpOuUZW1e31vLq3NDkU9cWVzFVX15yJ919IF+/nPbqaCRSgboPqdft8XuI21L+QWRTPmSvG+nD1gPztCwexBiItRZy3mdYMfwywTNPJOtDi8fED1GVdwDaWGsynMxUfZY+aR2TdumfBYA95HZKCrUFpN5klPa3iqg/GvPVEiZoIWf4/z/GY1KGBoGz9tLn4Lw/MfUbIBKd99QjU=, mobile=9488833131), authMethods=[Ljava.lang.String;@1d3e2ab3}, consent=ConsentRequest(code=abha-enrollment, version=1.4))", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} -{"@timestamp":"2026-01-21T16:35:00.717Z", "log.level": "INFO", "message":"ABDM request object for ABHA enrollment by AADHAAR: {\"authData\":{\"otp\":{\"timestamp\":\"2026-01-21T16:35:00.708664783Z\",\"txnId\":\"87e052b3-8927-4bc2-98ad-297625553197\",\"otpValue\":\"G+Djz3vMnQ69+G6C3PvCJJDalclsgPaRTMkvCdeBsDtjTJ/zi5K9vNYpawTcPXp/TlUwVsSyfErlmFsZWDPGUWk4DGOiKTln/fgIZqZUPzB1Mgw5fgxKyBaDLf2T44ByNwWyclsFqlv7EUTgbcAt+wY7uagSCNsGEsQ3Uc5WI/nMnoGbaGvKnP6xUQoi8FLDhqB9TlQUB6ccwprlei3psE+64YWG5l+2rq4fsIk6ijvYj9Fe15LFq5gzkrHUssTP8XwpIlWsxNLW84Tf13zrGoCzg3khtBmBS/8vi36vYVAISstxWf8AcZUbDgnadSbWjAeLERqksvdAduTZKqjoHdHOmdAdKEocn7Hmc8wvWdJq0BJiR7vNhLfxjkw+lpCUQljOWvFvBL/pVlhycqZYJ8txtNj9YojucLl6xV7Zjm6QZ7vjuuXWUlqkV8iIPb15ikvTtA24/0qBs5RdpE78OyYwiNC/PpOuUZW1e31vLq3NDkU9cWVzFVX15yJ919IF+/nPbqaCRSgboPqdft8XuI21L+QWRTPmSvG+nD1gPztCwexBiItRZy3mdYMfwywTNPJOtDi8fED1GVdwDaWGsynMxUfZY+aR2TdumfBYA95HZKCrUFpN5klPa3iqg/GvPVEiZoIWf4/z/GY1KGBoGz9tLn4Lw/MfUbIBKd99QjU\\u003d\",\"mobile\":\"9488833131\"},\"authMethods\":[\"otp\"]},\"consent\":{\"code\":\"abha-enrollment\",\"version\":\"1.4\"}}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} -{"@timestamp":"2026-01-21T16:35:02.594Z", "log.level": "INFO", "message":"ABDM response for ABHA enrollment: <200 OK OK,{\"message\":\"This account already exist\",\"txnId\":\"87e052b3-8927-4bc2-98ad-297625553197\",\"tokens\":{\"token\":\"eyJhbGciOiJSUzUxMiJ9.eyJpc0t5Y1ZlcmlmaWVkIjp0cnVlLCJzdWIiOiI5MS0zNDgxLTQ4MDAtMjYwNiIsImF1dGhfdHlwZSI6IktZQ19PVFAiLCJjbGllbnRJZCI6ImFiaGEtcHJvZmlsZS1hcHAtYXBpIiwiYWNjb3VudFR5cGUiOiJzdGFuZGFyZCIsImdlbl9zb3VyY2UiOiJhYWRoYWFyX290cCIsIm1vYmlsZSI6Ijk0ODg4MzMxMzEiLCJ0eXAiOiJUcmFuc2FjdGlvbiIsImFwaV92ZXJzaW9uIjoidjMiLCJzeXN0ZW0iOiJBQkhBLU4iLCJhYmhhTnVtYmVyIjoiOTEtMzQ4MS00ODAwLTI2MDYiLCJwcmVmZXJyZWRBYmhhQWRkcmVzcyI6IjkxMzQ4MTQ4MDAyNjA2QHNieCIsImJhYWxfYWJoYSI6Im5vIiwiZXhwIjoxNzY5MDE1MTAyLCJpYXQiOjE3NjkwMTMzMDIsInR4bklkIjoiODdlMDUyYjMtODkyNy00YmMyLTk4YWQtMjk3NjI1NTUzMTk3In0.NNBYHl7c1qhFIP9LAUn3d8Jh_IUDp8ksGKlaQ2VPfZTN7jHdB_JjX-GBZgt5WUm0AhRiuPPvo8NKkWCM2fVEp7O0r4buWAvdejyu1Bfh5wHKGjkRx53bUiH_JUTDPyWgMnTSvMAp2NqbSPrg7oM2ltSSXXupPjHpOk7f-MsP6HkcU4OS1sZj-9PFdjl1ADVFaw1iI2NwmXkZNRCw6o0QyHWyAhocT_G446tb8q4GwEsxn-SARbTMcGdut_JYm8jpxEjuU_jLJuu8mELIgWrGc9oy_F7spkhOsW3Ni_sQy-TwfvPRNJ9AAc25bBEL5hM4eMaqDvPnqirH0xQe6tjJcux2wbFkRirNJQ32CLT1llnI83NCEDF7bwmmBUX4Ko9eJmKrpBF6WG4kU-sUJPyzqG96xClRKZIudTDsE9vSVQjnqmGtSsxzSyuZNBqT3OQ3HeHwwK1bfErar5AbsWeQuFgEHvxYVT73d8gzO1WuwHb9eaNTJurPNQLI9U9LidwH5g_eqK8lLgmeNOnbsadgAVAyr7py2tmE5KflfhDoGaGcIrZFMK_su3p9FIWP_NOK47R8Tns4lbtdLf4t1ZxO_nOFv_rrIEP5p6x0hoReH6mWmaPn1NgS-GS8QFH-wcIuB96adiI3iXroKeKCj8ND2Af-z2uL4IvK9mCwckecOwo\",\"expiresIn\":1800,\"refreshToken\":\"eyJhbGciOiJSUzUxMiJ9.eyJzdWIiOiI5MS0zNDgxLTQ4MDAtMjYwNiIsImNsaWVudElkIjoiYWJoYS1wcm9maWxlLWFwcC1hcGkiLCJzeXN0ZW0iOiJBQkhBLU4iLCJ0eXAiOiJSZWZyZXNoIiwiZXhwIjoxNzcwMzA5MzAyLCJpYXQiOjE3NjkwMTMzMDJ9.e5FkFkQgfJNUk8odAsGH9dkYMxdrKOYAfjOOnhVm0i-ycDEZMD3uRZUzqvhL30MlpdXqtirp8qf6v6ZKQhgUPXKWI_6IoO_gVamlQCy9UrmMnKtu09VfCzQ3zo2EDaphAbEPRYky7OMnKd3Hi2gJabImsvtKHj8VhLJxb7IkykGFa9J5kuIAMkV3aavaopmj_poMmAZeR_GisLGFvtDuhsc4GyEny7_Um9dh9JSSPl1flJfuWdZQ7cBaV66CjzhaBNbUo6n5GkNC_qj26FK46ZAFP-FxmTmLatxHEcLyMJJK9iYacWpoQcRjbf1HIGbm5W1z7o71G-WsEfh7uH1f6qk7rQc4jaPUM_rbU8_qIJPC9dT8usXE7TUPqkvNtLP_YhAppDm_rgZi2OZHDde7DNGTrEpBK75NwFWZndPw6bg99WmAbQbaY1M4V7DP-XbjvfR5KJNfQQuxQ9oyjhfKCrt2c2O_g89rCuYFE-LKy261riaUWVxWN9JC47PKDuFRrfR8hRMGe4D3xxGo7hlyIrY0kcLK2Jo2MWZaGRZcdrhKybiuPDEcGy5LCM0YCjwT3tfViG27pT7sakiUCCYBu0us0U9lLJjtBYFMknA5c4gxezOC7kG9BNNAeIrstcko5gYWE3x6n1lx5eNqPPdZg4Sv4jZRCDoQOpX7rAm_Kz8\",\"refreshExpiresIn\":1296000},\"ABHAProfile\":{\"preferredAddress\":\"91348148002606@sbx\",\"firstName\":\"Sureshkumar\",\"middleName\":\"\",\"lastName\":\"Palanisamy\",\"dob\":\"18-07-1985\",\"gender\":\"M\",\"photo\":\"/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCADIAKADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDvsYppUA/d/Kn8n2pChPRjTERbct8pIPY1MOlATC8U4DI/nSASjHNOxS4oAYaTmnkUmKAGUY+tP20YoAZikFPIPYUwZyflNIAxyab3NO+fd93j60bTk5FADMU3FSbaaVoAjNNPvUhWmkUwIz1ph9KmximMucGgDRCmnbKfS4pgM24pMYbGOtSgZpdtAEe3ijbUoAo20gIsUbalK0baAISoo2AVIcdzWXfeINJ09Sbm+hUg4Kqd7Z9MDOKANDbTdvPSuU/4WPoYmKH7QFzjeUGP55qzH470J3K/aip7EqcH6H/HFIDoSvNJjk1WstXsdR5tLmOXjOFbkfX0q5kZPTNAEe3mkK1NjLfhRtFAFfbTSvNWdlNKD0pgVinFMx7VYK8ZpmOaALwFOximg06mACncUgpQMZpAKABQKKiubmG0geeeVI4kGWZjgAUgJGZVUsxAVRkk9APWuG8RfEWx04mDTtl3MOGbJ2L+Pf8ADj3rj/GnjebWpWsrNjFYAjjvIR3Ptnt7CuIeWNW5JZqLgdNqPi7WdUBE9+4iORsRtq49CB1/GsNrtwSr/Nn8aqfbF6DqPeqs028lgTj+VIZaNwWDbcY/pTPtTKAQ3XiqyBirZPBpF+8pOOOooA0rfU5rKZZI5WjkHcHHNeh+G/iNKpSHVjvixhZlHzL9R3H6/WvI3kO881NHO6nOTjvQB9Q2t1FcIHidXQgbWU5BB5B/WrWK8b+H/itLRzZXt1styhCZXOGJHft3r163uY7iPfE6uvTK0xWJcU0inUhoEREdKQYHUVJimNx9KBkoNOzUQJp4NMB+acDio80uaQDy2Aa8V8d+J7m+1C5t0lP2WJiiIDwcHk+9d14/16bRdGUW7lJJyyBhnjj6deePpXhFzPJIeAcGgY151KnnmqwkOeeakhtZ7l8Kn41oW3h6eUjc+1T6DNQ5JblKLexkCTD/AONWVjMmCq/hXRQ+FUPJd/qw/pVy38PIhw0h+mKn2sS1SkcnJGwUYBA9KRLGeXjH613J0Oz/AIwWPoBihtOso12rGPzNQ6yKVI4ldNbPrV+DS9qguPwromgjCnCKMe1V2TFL2jK9mjm54GtJtycD1rt/Bvi+exuY7a4lPln5Tu6Y5P55J/lx1rnrqASIQRWIzPbzYzx71rCVzGcbH03a3S3CZBGe4B/X6VPurzf4cazJc2/2aYk7chTjHGAQP/Qs/hXom7JrQzHE009KM8UhNADhTwKbg0+mAooxQBS4pAeU/FvUGW6sbBc7Qhmb3JJA/LB/OuHsraO4jDMAa7X4wWii6027AO+RGjJ9lII/9CNcla7IIRuOAByazqGlNK+pbht0RgEXA+la9rAQMkDntXO/2oC4EQwo7mraa8YlyefwrBxZupI6dABwRTli+bpWHZ67HcyKvCj361ppfpJMsSEMcZzUNNblposmIZOR34qvLbqR0FQy3gW42SZCnofesq61tIDlHLg9FoUbg5JFuW3IBYjB+tUpAFODVd9RubrGyJ8ADO0E4qvJPcREZ+YHs1VytE86LbICM1g6jEBLurZhuBKDjII6g1Q1dD5aSjnDVcL3Iqao7H4aK00VwqgnypI3XHuec+3Ar1gcivOPhNbBdMvbrfkvMIyvptGc/wDj/wClekKMA10I5hKQ9KdSEcUwJQKcKUCngUwGgZp2OKWjvikBwXxQ00Xfh6O5wu62lBzjnDcEfnj8q8quuIgo616z8RNUe3szpohBS5iLeYwOCQeg9xgHv1FeZ/Z/NcAjpWc2aQRkxzrblUwCxPpk59hVw3ds4aK8tpA464Rc/hT30/7PcCUqctyD6VcjgE0okkVHI4GRnIxisnJGyi7FBdN8tUkEEkKuoYMwxwenPStXRrd9s8zOcoOuffFWLoQjDbN0gGBvOcVoabbiLSJSAcEqDxnPU1EmVGJgXjOZlj3ffPJzVZbGaWSQwweYIlLEjGOPfv8AhWjeWy+dgjg1Ytrc7/MR9knYg4z+NKLKkjFtNQuJVjtYoGMhbbtVvy6j+tEs584wzxlXHUEYZa2Wt2gmEkESxsAQGUDP51Uks/PkDyKSe5PWquiOV2KkMDIQy5ZT1qLVI/8AQ/X5hWwipHFsHUd6ztRXNvgddwpwldimtD034eWX2TwvbExlHmJlYHvk8H8VC12IXiuB8N+KZTqFrpYs41tyFijSPLMgwAMnoQPoP0r0ILxXRGSexzSTW5GRnFBFSYppFUIkWnVAJgakEopgSCnYxUXmrS+atIDmvHtpDc+G5XkjVpImVo27qSwBx+B/zivLYkCsK9M8fXfl+H1UH/WSqp+mCf5gV5pES0g5FY1TakX1Ec4CFeaT7MxOBhVHpUkODz61cj29e1cx0pGddW0cKqp4PUn0rWtI4nsXXzAoVcgf3jnp+prnPEciRSqfMdhIMFEOCD65qLT7++8t4ljz5fBZuPz96pwbQKSTL91GzTnbjAFXLOBLi1ABAfoQe9cnPPOmoGR55fM6bQcKPoK6TSblfs5LsvmMcnHak42WoKSZMyyRsVIyB602RRt5FXJGEg3dz15qncHCk+lTYZnzBVbjiqtxH5kLLznqMVYk757VBvy2MVpFGcjtPA1h5mprcHGIQzE8ckgqB/M/hXo/auT8H25g0qJjnMg3n8f/AK1dUDxXRCNkc03djs0hpM0masgpq75GV/I08SNn/VnHrxSCnD0qgFDktgowHrSl9oPB/AUv0pwAH1pAcT8Q2LaXasAdolIOVI6jj+RrgIJe2a9N8e23n+GZJASPIkWTA7/w/wDs1eSrLiTj9ayqI2pM3ROsUWSazrjX/K4Rv0pk03mwbVGOKwZi+4IV3HsPSsYRubTlbYuzSz6i6kAkew6VM08tiWjAk3FeuOD04H41DYS3anylCD0rSUXsDjdGrencVWwlHm1KkljcSRR3LZDMuWRuooS4ktjhgAcdKt3C3mN0mxcj1yay5BOW3MVYAdMc0b7g1y7G1a6wNyqcEHitKV8xk+tcpZK0k/y5AHXitr7QRHt3dBWco2ehUHcJXAzg1DGfm9c02VwMEnrU2nxNe30MC5HmOFyB0HrVxREmeq+Hxt0i0IyAYUIGenArXEjf3jVa3iVIlCgAAcAVPtGK6UcrHGVh/EaTzW9aaVpu2mBJnFPHApnbpnmnYycUASADFO4puDjFPAOP/rUAUdStUvdOuLZ8YljK+vUda8CvVexvpYJMhkYq2exFfQd7PBZ2ktzcyCKGNdzu3QD/AB9u9fP3ijWrfVtemngi8pG4XI5OO59/8+9TJXRUXZiR3QU8kfTNOVo5HJUDJrFDFCc5yKsW9xmUKSM1k49jZSNbMsfzIgPPanjWLyFui49GGas2s6NGARkdKuJbWr4LFc1Cfc016MzVu57xgXjLE8ZxTzCBjcK1i9vbr8pX3xWPeXiszEEBR2pXuF7bkRlWCQlc896YblRk81QkuWaQhOfrUe84zn86rl7kc5eMxkcAcgV2HgjT/PvmuiPli+Vfqev6fzrhIm+bjqa9Y8B3VpfaQhthtMWFkjJyVPqfrzzWkUZSZ2Ua4UCnkUKMU7vWhmRnNBFOptADhTlNYd54q0eyQlrtZGC5Cwjfn2yOPzNcfq3xAvZJGTTtlvGp4YgOxHvnj8vzNWothc9P49RVCfxBo9rE8kupWuEOCFkDN+Qya8SudWvr6ZHuriWZk6b3Jx9M1SN3NcXSwox64Y46VXIK51/xG8WLqASzsJc2iAMzbSPMc/XnAH07+1eYrE0rh2OAWwDWvqg8+4jiBwCwGKpXjrFeRQrwsbAH/P0rObs+VFRV1cjVyjbXXpwKlMQYhozg+tXpLUNk4B9RiqxtZIwGjGR6elY81zWxLFcTwqAYmPoV5zUhvrljmON8jrniqyTyowBDECrCXjD7yn3qX6FK/cf9vncbfKkJPtVaQTynDfu17881M1yz54JFQHzWOAp5oQO7HhY4147D86aP3nCjipIbCWVtzkgfzq6tsI0wAMCi4rFMLsUt3xx7Vv8Aw81mPSdaxcyBLeceU7MThSSME/jgZPQE1jOn7tj7VQJMNnK4ODlcD8RWlPW5E1ZH0nHKksavG6ujDKspyCPrTyAQeK+f9E1/UNLkb7LdyR8htqng/UdDXZ6f8SL6FVW+torlRwXQ7H+p7fhgVpyszuemGkrI0nxPpWtbVtrkCcjPkSfK/wCXfpngmtekB4Gz7hndnPIJyc0xZN3mE4IU8DOD+GeabEBvKk9APmIJHrimIcXDB1wSMcdR7gD9a6SBwAMp+YYPVsZA571HpagyTEDDbj36dfy61KVYkYGSThWHQngYPpVGO7+yW00uMndtC59/Wh6AWpVP2+MnO3cMZ69DWNdBp9UH3fnkJG054Bx/SriXEg8m4nOWyzED0FVtGi87UU/2VJNc1T4mzaGyR0Yi27cjtVmO1R+cc/zqdoNyDjnFJCSjYrj5jrSK8unA9sfSqjW3lPh1BHriuijAdMk/hVee1MpIxkUucXKjNEcRHCqDSpa72+7gep4qxFatDIAc1fjgyvAOO+aOYOUptFHCmF5I79qpz/N2xWhN8pPQVgX96SWWNSeOtXTg5vQmclBajb65jhgYAhnx0rHu7jzLNeNuTkj6USxs0gDA5B6DnHvROm+IqAfmUnB6YArsjBRVkcsp8zHwSbdjKc56g9/84rQL4bKkYxkDPTkdOefpWNaNviAJ6GtQsdwOC4PrwMkY7f54q47EssCTLHAxjtnFdTovjfVNObZM/wBqhH8Ex+b8G6j9R7VyKuojB3AkNhQ5J69weR/nmnr1UAE5wAMncfx/Gm13FckdiCGwCSMepIzj8PrjvRFJukkZSQX4UD0J6H2x7U2RSAynOCcFCeSR3/z1qOEB1Ma7dwIynZh71oSWFwP4A+4HjHDY7/5/+vWdc7fJdArZVwxJ7etXyxZSRu5xlW5PA565478+tVb0bldyQ5bILdB27etDVwRVuZttimcM21lBHvxVrw1EftErkdsVQmgbyEAP+rAYjPWui8PKrQtcO++SaQliDkg+9clfRHRR1kdIseYlOOoqnPDtbcBWoADGMelQSpkEAVwnZYiiBaLg805AQKIRsJBz1p7sEPPFAEbbs5pXdljo3E+9MmYYxRYCjPucMc9qxZsRjJzgE5Ax1H/6xWpqFzHBAR/E3AArBkkLEbm6joOAK7sLFpNnJiGrpDbmcCER72AY/MGOeAT/AI/jVUoFVBlcY6E5HI4z/n1qR2Ekqgr5YxknGMgfh/kmkKksApUZOcE8de/5V0MwM+1O0uprZ2MycZYBcnP8Iz6/jWQI1V5zuwVxwe+a2QP3I6bDwoPLDgevb6dqmPYbGI25HBxzkk449eOPapI1J+TGCcHaSMNyeKjZSsvGGOM/KOPWnKNqYVyADuGON34Z445//VVEkpwgHmDavQOoPJHTg8etMKAEttIYf8s1GeMdaKK0ES+YCCGcl+mRwD6DHvQULwGNcucHMagnjsR+P6UUUAUgiOHjDKxGVBHQ/Sr+jP5Cxy9FIw3YZFFFRKKloyotrVHXW10kyKemelSnDLnqKKK8yaSlY74NtXK8jeWpOQB71C8wPPB4+lFFCRQwSHJUEcdh3qteXixITjJPQetFFaU4JySZFSTUW0YjyF3aVsk9dzHggen6fXNVi7bScLmTgggfLjHP0oor0NkcF7vUgi+diQAGY9Oyg+lSKnznapbgblOcsfX6dvpRRSGVp0BwQzEkBT7jrg/j/Kr8ChNuTzgZY/w+x9R/SiiktxMWQBVjO0qBzt5BPv04/wD1UKMy7TIAxGPm6KOnP4UUUwP/2Q==\",\"mobile\":\"9488833131\",\"mobileVerified\":true,\"email\":null,\"phrAddress\":[\"91348148002606@sbx\"],\"address\":\"4/1B, MAHADEVAPURAM STREET NO 2, MAHADEVAPURAM, METTUPALAYAM, Mettupalayam, Mettupalayam, Coimbatore, Tamil Nadu\",\"districtCode\":\"569\",\"stateCode\":\"33\",\"pinCode\":\"641301\",\"abhaType\":\"STANDARD\",\"stateName\":\"TAMIL NADU\",\"districtName\":\"COIMBATORE\",\"communicationMobile\":null,\"ABHANumber\":\"91-3481-4800-2606\",\"abhaStatus\":\"ACTIVE\"},\"isNew\":false},[Content-Type:\"application/json\", Transfer-Encoding:\"chunked\", Connection:\"keep-alive\", Date:\"Wed, 21 Jan 2026 16:35:02 GMT\", Access-Control-Expose-Headers:\"*\", X-Frame-Options:\"SAMEORIGIN\", expires:\"0\", x-envoy-upstream-service-time:\"1646\", vary:\"Origin,Access-Control-Request-Method,Access-Control-Request-Headers\", correlation-id:\"ef973694-6d58-4a08-85b4-183d6cf5cbef\", permissions-policy:\"geolocation=(self)\", pragma:\"no-cache\", activityid:\"739cf15e-bbe9-4985-b4d9-f7ce0c04f4a1\", content-security-policy:\"form-action 'self'\", x-content-type-options:\"nosniff\", x-xss-protection:\"1 ; mode=block\", referrer-policy:\"strict-origin-when-cross-origin\", cache-control:\"no-cache, no-store, max-age=0, must-revalidate\", server:\"istio-envoy\", Access-Control-Allow-Origin:\"*\", Access-Control-Allow-Methods:\"GET,HEAD,POST,PUT,DELETE,OPTIONS,CONNECT,TRACE,PATCH\", Access-Control-Allow-Headers:\"*\", X-Cache:\"Miss from cloudfront\", Via:\"1.1 2fdab31714a9ba8fc39c70a3c382663c.cloudfront.net (CloudFront)\", X-Amz-Cf-Pop:\"BLR50-P4\", X-Amz-Cf-Id:\"UoGCeML7Q3vSAx0AXLaQhiJJU7w4kqt71T6ods7299k1wr-KI3cASQ==\", Strict-Transport-Security:\"max-age=31536000\"]>", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.service.v3.abha.CreateAbhaV3ServiceImpl"} -{"@timestamp":"2026-01-21T16:35:03.907Z", "log.level": "INFO", "message":"NDHM_FHIR generate OTP for ABHA card API response {\"data\":{\"xToken\":\"eyJhbGciOiJSUzUxMiJ9.eyJpc0t5Y1ZlcmlmaWVkIjp0cnVlLCJzdWIiOiI5MS0zNDgxLTQ4MDAtMjYwNiIsImF1dGhfdHlwZSI6IktZQ19PVFAiLCJjbGllbnRJZCI6ImFiaGEtcHJvZmlsZS1hcHAtYXBpIiwiYWNjb3VudFR5cGUiOiJzdGFuZGFyZCIsImdlbl9zb3VyY2UiOiJhYWRoYWFyX290cCIsIm1vYmlsZSI6Ijk0ODg4MzMxMzEiLCJ0eXAiOiJUcmFuc2FjdGlvbiIsImFwaV92ZXJzaW9uIjoidjMiLCJzeXN0ZW0iOiJBQkhBLU4iLCJhYmhhTnVtYmVyIjoiOTEtMzQ4MS00ODAwLTI2MDYiLCJwcmVmZXJyZWRBYmhhQWRkcmVzcyI6IjkxMzQ4MTQ4MDAyNjA2QHNieCIsImJhYWxfYWJoYSI6Im5vIiwiZXhwIjoxNzY5MDE1MTAyLCJpYXQiOjE3NjkwMTMzMDIsInR4bklkIjoiODdlMDUyYjMtODkyNy00YmMyLTk4YWQtMjk3NjI1NTUzMTk3In0.NNBYHl7c1qhFIP9LAUn3d8Jh_IUDp8ksGKlaQ2VPfZTN7jHdB_JjX-GBZgt5WUm0AhRiuPPvo8NKkWCM2fVEp7O0r4buWAvdejyu1Bfh5wHKGjkRx53bUiH_JUTDPyWgMnTSvMAp2NqbSPrg7oM2ltSSXXupPjHpOk7f-MsP6HkcU4OS1sZj-9PFdjl1ADVFaw1iI2NwmXkZNRCw6o0QyHWyAhocT_G446tb8q4GwEsxn-SARbTMcGdut_JYm8jpxEjuU_jLJuu8mELIgWrGc9oy_F7spkhOsW3Ni_sQy-TwfvPRNJ9AAc25bBEL5hM4eMaqDvPnqirH0xQe6tjJcux2wbFkRirNJQ32CLT1llnI83NCEDF7bwmmBUX4Ko9eJmKrpBF6WG4kU-sUJPyzqG96xClRKZIudTDsE9vSVQjnqmGtSsxzSyuZNBqT3OQ3HeHwwK1bfErar5AbsWeQuFgEHvxYVT73d8gzO1WuwHb9eaNTJurPNQLI9U9LidwH5g_eqK8lLgmeNOnbsadgAVAyr7py2tmE5KflfhDoGaGcIrZFMK_su3p9FIWP_NOK47R8Tns4lbtdLf4t1ZxO_nOFv_rrIEP5p6x0hoReH6mWmaPn1NgS-GS8QFH-wcIuB96adiI3iXroKeKCj8ND2Af-z2uL4IvK9mCwckecOwo\",\"isNew\":false,\"ABHAProfile\":{\"hID\":3436,\"healthIdNumber\":\"91-3481-4800-2606\",\"name\":\"Sureshkumar Palanisamy\",\"providerServiceMapID\":1717,\"gender\":\"M\",\"yearOfBirth\":\"1985\",\"monthOfBirth\":\"07\",\"dayOfBirth\":\"18\",\"firstName\":\"Sureshkumar\",\"healthId\":\"91348148002606@sbx\",\"lastName\":\"Palanisamy\",\"middleName\":\"\",\"stateCode\":\"33\",\"districtCode\":\"569\",\"stateName\":\"TAMIL NADU\",\"districtName\":\"COIMBATORE\",\"mobile\":\"9488833131\",\"deleted\":false,\"processed\":\"N\",\"createdBy\":\"Mokrong\",\"isNewAbha\":false},\"txnId\":\"87e052b3-8927-4bc2-98ad-297625553197\"},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-2","log.logger":"com.wipro.fhir.controller.v3.abha.CreateAbhaV3Controller"} -{"@timestamp":"2026-01-21T16:35:21.168Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:35:21.168Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /healthID/getBenIdForhealthID", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:35:21.168Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:35:21.175Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} -{"@timestamp":"2026-01-21T16:35:21.177Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"HTTPRequestInterceptor"} -{"@timestamp":"2026-01-21T16:35:21.180Z", "log.level": "INFO", "message":"NDHM_FHIR Request obj to fetch beneficiary Ids for HealthID :{\"healthIdNumber\":\"91-3481-4800-2606\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIDWithMobileOTP"} -{"@timestamp":"2026-01-21T16:35:21.187Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@7847b2b8 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:35:21.189Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@32c6c702 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:35:21.191Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@7992e0f3 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:35:21.193Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@3c854f0b (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:35:21.194Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@28f948b6 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:35:22.354Z", "log.level": "INFO", "message":"NDHM_FHIR get beneficiary Ids for HealthID response:{\"data\":{\"response\":\"No Beneficiary Found\"},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-3","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIDWithMobileOTP"} -{"@timestamp":"2026-01-21T16:35:52.062Z", "log.level": "WARN", "message":"Origin [null] is NOT allowed. CORS headers NOT added.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:35:52.062Z", "log.level": "INFO", "message":"JwtUserIdValidationFilter invoked for path: /healthIDRecord/mapHealthIDToBeneficiary", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:35:52.062Z", "log.level": "INFO", "message":"Validating JWT token from cookie", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtUserIdValidationFilter"} -{"@timestamp":"2026-01-21T16:35:52.064Z", "log.level": "INFO", "message":"User fetched successfully from Redis.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.utils.JwtAuthenticationUtil"} -{"@timestamp":"2026-01-21T16:35:52.065Z", "log.level": "INFO", "message":"Authorization header is null or empty. Skipping HTTPRequestInterceptor.", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"HTTPRequestInterceptor"} -{"@timestamp":"2026-01-21T16:35:52.070Z", "log.level": "INFO", "message":"NDHM_FHIR Map ABHA to beneficiary API request {\"beneficiaryRegID\":null,\"beneficiaryID\":\"297047122514\",\"healthId\":\"91-3481-4800-2606\",\"healthIdNumber\":\"91-3481-4800-2606\",\"providerServiceMapId\":1717,\"authenticationMode\":null,\"createdBy\":\"Mokrong\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIdRecord"} -{"@timestamp":"2026-01-21T16:35:53.315Z", "log.level": "INFO", "message":"Triggered ES sync for ABHA: benRegId=10468793", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.service.healthID.HealthIDServiceImpl"} -{"@timestamp":"2026-01-21T16:35:53.316Z", "log.level": "INFO", "message":"Syncing ABHA details to ES for benRegId: 10468793", "ecs.version": "1.2.0","process.thread.name":"es-sync-1","log.logger":"com.wipro.fhir.service.elasticsearch.AbhaElasticsearchSyncService"} -{"@timestamp":"2026-01-21T16:35:53.413Z", "log.level": "INFO", "message":"Successfully updated ABHA in ES: benRegId=10468793, healthID=91-3481-4800-2606, abhaID=91-3481-4800-2606", "ecs.version": "1.2.0","process.thread.name":"es-sync-1","log.logger":"com.wipro.fhir.service.elasticsearch.AbhaElasticsearchSyncService"} -{"@timestamp":"2026-01-21T16:35:53.506Z", "log.level": "INFO", "message":"NDHM_FHIR Map ABHA to beneficiary API response {\"data\":{\"benHealthID\":7928,\"healthIdNumber\":\"91-3481-4800-2606\",\"providerServiceMapId\":1717,\"beneficiaryRegID\":10468793,\"beneficiaryID\":297047122514,\"healthId\":\"91-3481-4800-2606\",\"deleted\":false,\"processed\":\"N\",\"createdBy\":\"Mokrong\",\"isNewAbha\":false},\"statusCode\":200,\"errorMessage\":\"Success\",\"status\":\"Success\"}", "ecs.version": "1.2.0","process.thread.name":"http-nio-8093-exec-4","log.logger":"com.wipro.fhir.controller.healthID.CreateHealthIdRecord"} -{"@timestamp":"2026-01-21T16:40:00.001Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-3","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:40:00.383Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-3","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} -{"@timestamp":"2026-01-21T16:40:00.383Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-3","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:40:12.396Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2936ad72 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:40:23.830Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@fd5c208 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:44:33.920Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@3309bb71 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:44:53.798Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@7428977e (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:45:00.000Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-4","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:45:00.336Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-4","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} -{"@timestamp":"2026-01-21T16:45:00.336Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-4","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:49:31.031Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@5c989bec (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:49:33.121Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@6e0d8f4 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:49:35.040Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@1ebf643f (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:49:55.729Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@10ef38b6 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:50:00.002Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-5","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:50:00.624Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-5","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} -{"@timestamp":"2026-01-21T16:50:00.624Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-5","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:54:05.626Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@6cba05a (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:54:14.737Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@13fb5ec9 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:54:24.893Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@48a46625 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:54:33.049Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@90f577b (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:55:00.003Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-6","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:55:00.664Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-6","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} -{"@timestamp":"2026-01-21T16:55:00.664Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-6","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T16:59:05.057Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@e00734 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:59:08.142Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@668c6889 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:59:12.293Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@66d51acb (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T16:59:18.736Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@38cd3a67 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T17:00:00.001Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-7","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T17:00:00.479Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-7","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} -{"@timestamp":"2026-01-21T17:00:00.480Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-7","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T17:03:45.758Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@795a5c93 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T17:03:55.069Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@424597e3 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T17:04:01.382Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@32895d36 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T17:04:04.305Z", "log.level": "WARN", "message":"HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@14361158 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.", "ecs.version": "1.2.0","process.thread.name":"HikariPool-1 housekeeper","log.logger":"com.zaxxer.hikari.pool.PoolBase"} -{"@timestamp":"2026-01-21T17:05:00.001Z", "log.level": "INFO", "message":"Started job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-8","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"} -{"@timestamp":"2026-01-21T17:05:00.414Z", "log.level": "INFO", "message":"No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : 0", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-8","log.logger":"com.wipro.fhir.service.common.CommonServiceImpl"} -{"@timestamp":"2026-01-21T17:05:00.414Z", "log.level": "INFO", "message":"Completed job for FHIR resource creation org.quartz.impl.JobExecutionContextImpl", "ecs.version": "1.2.0","process.thread.name":"jelies-quartz-scheduler_Worker-8","log.logger":"com.wipro.fhir.config.quartz.Scheduler_Job_FHIR_R4_ResourceCreation_NDHM"}