From 0815d3228ecfc6da41e8b0cfbf1cafd2af9f4d40 Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Fri, 9 Jan 2026 13:19:23 +0530 Subject: [PATCH 01/17] Added ARC Audit Signed-off-by: Rakshithasai123 --- .../registration_client/HostApiModule.java | 6 +- .../registration_client/MainActivity.java | 1 + .../api_services/AuthenticationApi.java | 4 + .../api_services/BiometricsDetailsApi.java | 1 + .../api_services/DemographicsDetailsApi.java | 8 ++ .../api_services/DynamicDetailsApi.java | 3 + .../api_services/MasterDataSyncApi.java | 4 +- .../api_services/PacketAuthenticationApi.java | 12 +- .../api_services/RegistrationApi.java | 30 ++++- .../clientmanager/constant/AuditEvent.java | 101 ++++++++++++---- .../service/PacketServiceImpl.java | 7 +- lib/ui/onboard/home_page.dart | 2 +- lib/ui/process_ui/generic_process.dart | 19 ++- .../widgets/document_upload_control.dart | 112 +++++++++++++++++- lib/ui/scanner/custom_scanner.dart | 10 +- 15 files changed, 279 insertions(+), 41 deletions(-) diff --git a/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java b/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java index 72713195e..805bcec0b 100644 --- a/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java +++ b/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java @@ -72,7 +72,7 @@ import io.mosip.registration_client.api_services.ProcessSpecDetailsApi; import io.mosip.registration_client.api_services.RegistrationApi; import io.mosip.registration_client.api_services.UserDetailsApi; - +import io.mosip.registration.clientmanager.repository.UserDetailRepository; @Module public class HostApiModule { @@ -160,8 +160,8 @@ RegistrationApi getRegistrationDataApi(RegistrationService registrationService, @Singleton PacketAuthenticationApi getPacketAuthenticationApi(SyncRestService syncRestService, SyncRestUtil syncRestFactory, LoginService loginService, PacketService packetService, RegistrationRepository registrationRepository, - AuditManagerService auditManagerService) { - return new PacketAuthenticationApi(syncRestService, syncRestFactory, loginService, packetService,registrationRepository, auditManagerService); + AuditManagerService auditManagerService,UserDetailRepository userDetailRepository) { + return new PacketAuthenticationApi(syncRestService, syncRestFactory, loginService, packetService,registrationRepository, auditManagerService,userDetailRepository); } @Provides diff --git a/android/app/src/main/java/io/mosip/registration_client/MainActivity.java b/android/app/src/main/java/io/mosip/registration_client/MainActivity.java index 25598da76..c7637086b 100644 --- a/android/app/src/main/java/io/mosip/registration_client/MainActivity.java +++ b/android/app/src/main/java/io/mosip/registration_client/MainActivity.java @@ -340,6 +340,7 @@ public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); GeneratedPluginRegistrant.registerWith(flutterEngine); initializeAppComponent(); + auditManagerService.audit(AuditEvent.NAV_REDIRECT_HOME, Components.REGISTRATION); MachinePigeon.MachineApi.setup(flutterEngine.getDartExecutor().getBinaryMessenger(), machineDetailsApi); UserPigeon.UserApi.setup(flutterEngine.getDartExecutor().getBinaryMessenger(), userDetailsApi); CommonDetailsPigeon.CommonDetailsApi.setup(flutterEngine.getDartExecutor().getBinaryMessenger(),commonDetailsApi); diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/AuthenticationApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/AuthenticationApi.java index cb283f9ea..d6f662418 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/AuthenticationApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/AuthenticationApi.java @@ -106,6 +106,7 @@ public void onResponse(Call call, Response response) { loginService.saveAuthToken(wrapper.getResponse(), username); loginService.setPasswordHash(username, password); loginService.resetFailedLoginAttempts(username); + auditManagerService.audit(AuditEvent.NAV_HOME, Components.REGISTRATION); String preferredUsername = sharedPreferences.getString(PREFERRED_USERNAME, username); String fullName = sharedPreferences.getString(USER_NAME, preferredUsername); AuthResponsePigeon.AuthResponse authResponse = new AuthResponsePigeon.AuthResponse.Builder() @@ -175,6 +176,7 @@ private void offlineLogin(final String username, final String password, AuthResp String token = loginService.saveUserAuthTokenOffline(username); String preferredUsername = sharedPreferences.getString(PREFERRED_USERNAME, username); String fullName = sharedPreferences.getString(USER_NAME, preferredUsername); + auditManagerService.audit(AuditEvent.NAV_HOME, Components.REGISTRATION); AuthResponsePigeon.AuthResponse authResponse = new AuthResponsePigeon.AuthResponse.Builder() .setResponse(token) .setUserId(username) @@ -196,6 +198,7 @@ private void offlineLogin(final String username, final String password, AuthResp @Override public void login(@NonNull String username, @NonNull String password, @NonNull Boolean isConnected, @NonNull AuthResponsePigeon.Result result) { + auditManagerService.audit(AuditEvent.LOGIN_AUTHENTICATE_USER_ID, Components.LOGIN); auditManagerService.audit(AuditEvent.LOGIN_WITH_PASSWORD, Components.LOGIN); if(loginService.isUserLocked(username)) { result.success(getAuthErrorResponse(LOCKOUT_ERROR_CODE)); @@ -212,6 +215,7 @@ public void login(@NonNull String username, @NonNull String password, @NonNull B @Override public void logout(@NonNull AuthResponsePigeon.Result result) { loginService.clearAuthToken(this.context); + auditManagerService.audit(AuditEvent.LOGOUT_USER, Components.LOGIN); result.success("Logout Success"); } diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/BiometricsDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/BiometricsDetailsApi.java index 7d958892d..98589b7da 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/BiometricsDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/BiometricsDetailsApi.java @@ -518,6 +518,7 @@ public void getBioAttempt(@NonNull String fieldId, @NonNull String modality, @Override public void startOperatorOnboarding(@NonNull BiometricsPigeon.Result result) { + auditManagerService.audit(AuditEvent.NAV_ON_BOARD_USER, Components.REGISTRATION); try { OPERATOR_EXCEPTIONS.clear(); userOnboardService.getOperatorBiometrics().clear(); diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java index 9939fec9e..b80811384 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java @@ -24,12 +24,15 @@ import io.mosip.registration.keymanager.util.CryptoUtil; import io.mosip.registration.packetmanager.dto.SimpleType; import io.mosip.registration_client.model.DemographicsDataPigeon; +import io.mosip.registration.clientmanager.constant.AuditEvent; +import io.mosip.registration.clientmanager.constant.Components; @Singleton public class DemographicsDetailsApi implements DemographicsDataPigeon.DemographicsApi { private final RegistrationService registrationService; AuditManagerService auditManagerService; private static final String GET_FIELD_FAILED_MESSAGE = "Get field failed!"; + private boolean isDemoCaptureAudited = false; GlobalParamRepository globalParamRepository; @@ -43,6 +46,11 @@ public DemographicsDetailsApi(RegistrationService registrationService, AuditMana @Override public void addDemographicField(@NonNull String fieldId, @NonNull String value, @NonNull DemographicsDataPigeon.Result result) { + if (!isDemoCaptureAudited) { + auditManagerService.audit(AuditEvent.REG_DEMO_CAPTURE, Components.REGISTRATION); + Log.i("AUDIT", "Logged REG_DEMO_CAPTURE - Started capturing demographic details"); + isDemoCaptureAudited = true; + } try { this.registrationService.getRegistrationDto().addDemographicField(fieldId, value); result.success("Ok"); diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/DynamicDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/DynamicDetailsApi.java index a3fabd25e..a5ffbbaaa 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/DynamicDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/DynamicDetailsApi.java @@ -48,6 +48,8 @@ import io.mosip.registration.packetmanager.dto.PacketWriter.DocumentType; import io.mosip.registration.packetmanager.dto.SimpleType; import io.mosip.registration_client.model.DynamicResponsePigeon; +import io.mosip.registration.clientmanager.constant.AuditEvent; +import io.mosip.registration.clientmanager.constant.Components; @Singleton public class DynamicDetailsApi implements DynamicResponsePigeon.DynamicResponseApi { @@ -231,6 +233,7 @@ public void getLocationHierarchyMap(@NonNull DynamicResponsePigeon.Result> result) { + auditManagerService.audit(AuditEvent.REG_DEMO_PRE_REG_DATA_FETCH, Components.REGISTRATION); Map preRegistrationData = new HashMap<>(); try { this.preRegistrationData.getPreRegistration(preRegId,false); diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java index 1f6f1a4c5..097c51bec 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java @@ -70,7 +70,8 @@ import io.mosip.registration_client.UploadBackgroundService; import io.mosip.registration_client.model.MasterDataSyncPigeon; import io.mosip.registration_client.utils.NetworkUtils; - +import io.mosip.registration.clientmanager.constant.AuditEvent; +import io.mosip.registration.clientmanager.constant.Components; @Singleton public class MasterDataSyncApi implements MasterDataSyncPigeon.SyncApi { private static final String MASTER_DATA_LAST_UPDATED = "masterdata.lastupdated"; @@ -224,6 +225,7 @@ public void getIDSchemaSync(@NonNull Boolean isManualSync, @NonNull MasterDataSy @Override public void getMasterDataSync(@NonNull Boolean isManualSync, @NonNull String jobId, @NonNull MasterDataSyncPigeon.Result result) { + auditManagerService.audit(AuditEvent.NAV_SYNC_DATA, Components.REGISTRATION); try { masterDataService.syncMasterData(() -> { Log.i(TAG, "Master Data Sync Completed."); diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java index e81347e21..41cf13494 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java @@ -37,7 +37,8 @@ import io.mosip.registration_client.MainActivity; import io.mosip.registration_client.R; import io.mosip.registration_client.model.PacketAuthPigeon; - +import io.mosip.registration.clientmanager.repository.UserDetailRepository; +import io.mosip.registration.clientmanager.entity.UserDetail; @Singleton public class PacketAuthenticationApi implements PacketAuthPigeon.PacketAuthApi { SyncRestService syncRestService; @@ -48,7 +49,7 @@ public class PacketAuthenticationApi implements PacketAuthPigeon.PacketAuthApi { RegistrationRepository registrationRepository; private Activity activity; - + private UserDetailRepository userDetailRepository; public void setCallbackActivity(MainActivity mainActivity) { this.activity = mainActivity; } @@ -56,13 +57,15 @@ public void setCallbackActivity(MainActivity mainActivity) { @Inject public PacketAuthenticationApi(SyncRestService syncRestService, SyncRestUtil syncRestFactory, LoginService loginService, PacketService packetService, RegistrationRepository registrationRepository, - AuditManagerService auditManagerService) { + AuditManagerService auditManagerService, + UserDetailRepository userDetailRepository) { this.syncRestService = syncRestService; this.syncRestFactory = syncRestFactory; this.loginService = loginService; this.packetService = packetService; this.registrationRepository = registrationRepository; this.auditManagerService = auditManagerService; + this.userDetailRepository = userDetailRepository; } private PacketAuthPigeon.PacketAuth getAuthErrorResponse(String errorCode) { @@ -146,6 +149,7 @@ public void onComplete(String RID, PacketTaskStatus status) { @Override public void uploadPacketAll(@NonNull List packetIds, @NonNull PacketAuthPigeon.Result result) { + auditManagerService.audit(AuditEvent.NAV_UPLOAD_PACKETS, Components.REGISTRATION); Integer packetSize = packetIds.size(); final Integer[] remainingPack = {packetSize, 0}; CustomToast newToast = new CustomToast(activity); @@ -167,6 +171,7 @@ public void inProgress(String RID) { public void onComplete(String RID, PacketTaskStatus status) { if (status.equals(PacketTaskStatus.UPLOAD_COMPLETED) || status.equals(PacketTaskStatus.UPLOAD_ALREADY_COMPLETED)) { remainingPack[1] += 1; + auditManagerService.audit(AuditEvent.PACKET_UPLOAD, Components.REGISTRATION); } remainingPack[0] -= 1; @@ -213,6 +218,7 @@ public void getAllRegistrationPacket(@NonNull PacketAuthPigeon.Result> result) { + auditManagerService.audit(AuditEvent.NAV_APPROVE_REG, Components.REGISTRATION); List packets = new ArrayList(); try { List allRegistration = packetService.getRegistrationsByStatus(PacketClientStatus.CREATED.name(), 40); diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java index 5fe49881f..f8a4bd7c6 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java @@ -48,7 +48,33 @@ public RegistrationApi(RegistrationService registrationService, TemplateService @Override public void startRegistration(@NonNull List languages, @NonNull String flowType, @NonNull String process, @NonNull RegistrationDataPigeon.Result result) { - auditManagerService.audit(AuditEvent.REGISTRATION_START, Components.REGISTRATION); + Log.d("RegistrationApi", "startRegistration called with process: '" + process + "'"); + Log.d("RegistrationApi", "startRegistration called with flowType: '" + flowType + "'"); + + String flowTypeUpper = flowType.toUpperCase().trim(); + Log.d("RegistrationApi", "FlowType uppercase: '" + flowTypeUpper + "'"); + + switch (flowTypeUpper) { + case "NEW": + Log.d("RegistrationApi", "Matched NEW - auditing NAV_NEW_REG"); + auditManagerService.audit(AuditEvent.NAV_NEW_REG, Components.REGISTRATION); + break; + case "LOST": + Log.d("RegistrationApi", "Matched LOST - auditing NAV_LOST_UIN"); + auditManagerService.audit(AuditEvent.NAV_LOST_UIN, Components.REGISTRATION); + break; + case "UPDATE": + Log.d("RegistrationApi", "Matched UPDATE - auditing NAV_UIN_UPDATE"); + auditManagerService.audit(AuditEvent.NAV_UIN_UPDATE, Components.REGISTRATION); + break; + case "CORRECTION": + Log.d("RegistrationApi", "Matched CORRECTION - auditing NAV_CORRECTION"); + auditManagerService.audit(AuditEvent.NAV_CORRECTION, Components.REGISTRATION); + break; + default: + Log.w("RegistrationApi", "NO MATCH for process: '" + process + "'"); + break; + } String response = ""; try { this.registrationDto = registrationService.startRegistration(languages, flowType, process); @@ -103,6 +129,7 @@ public void getPreviewTemplate(@NonNull Boolean isPreview, @NonNull Map result) { + auditManagerService.audit(AuditEvent.REG_DEMO_NEXT, Components.REGISTRATION); String response = ""; String errorCode = ""; try { @@ -148,6 +175,7 @@ public void setAdditionalReqId(@NonNull String additionalReqId, @NonNull Registr @Override public void setMachineLocation(@NonNull Double latitude, @NonNull Double longitude, @NonNull RegistrationDataPigeon.Result result) { + auditManagerService.audit(AuditEvent.NAV_GEO_LOCATION, Components.REGISTRATION); try { this.registrationDto.setGeoLocation(longitude, latitude); } catch (Exception e) { diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java index f98a9f10c..7f1d66aee 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java @@ -22,11 +22,30 @@ public enum AuditEvent { LOADED_DATA_ENTRY_LANG("REG-LOAD-006", USER_EVENT.getCode(), "LOADED_DATA_ENTRY_LANG", "DataEntry Language selection activity loaded"), //Login - LOGIN_WITH_PASSWORD("REG-AUTH-001", USER_EVENT.getCode(), "LOGIN_WITH_PASSWORD", + LOGIN_AUTHENTICATE_USER_ID("REG-AUTH-001", USER_EVENT.getCode(), "LOGIN_AUTHENTICATE_USER_ID", + "Login authenticating user id: Click of Submit"), + LOGIN_WITH_PASSWORD("REG-AUTH-002", USER_EVENT.getCode(), "LOGIN_WITH_PASSWORD", "Login with password: Click of Submit"), - ABOUT_CLIENT("REG-AUTH-002", USER_EVENT.getCode(), "ABOUT_CLIENT", "Press and hold on logo to navigate: About activity"), - LOGOUT_USER("REG-AUTH-003", USER_EVENT.getCode(), "LOGOUT_USER", "Logout"), - + ABOUT_CLIENT("REG-AUTH-003", USER_EVENT.getCode(), "ABOUT_CLIENT", "Press and hold on logo to navigate: About activity"), + LOGOUT_USER("REG-AUTH-009", USER_EVENT.getCode(), "LOGOUT_USER", "Logout"), + + // Navigation + NAV_LOST_UIN("REG-EVT-001", USER_EVENT.getCode(), "NAV_LOST_UIN", "Click of navigation link: Lost UIN"), + NAV_NEW_REG("REG-EVT-002", USER_EVENT.getCode(), "NAV_NEW_REG", "Click of navigation link: New Registration"), + NAV_UIN_UPDATE("REG-EVT-003", USER_EVENT.getCode(), "NAV_UIN_UPDATE", "Navigation link: UIN Update"), + NAV_APPROVE_REG("REG-EVT-004", USER_EVENT.getCode(), "NAV_APPROVE_REG", "Navigation link: Approve Registration"), + NAV_UPLOAD_PACKETS("REG-EVT-005", USER_EVENT.getCode(), "NAV_UPLOAD_PACKETS", "Navigation link: Upload Packets"), + NAV_CORRECTION("REG-EVT-007", USER_EVENT.getCode(), "NAV_CORRECTION", "Navigation link: CORRECTION"), + NAV_SYNC_PACKETS("REG-NAV-001", USER_EVENT.getCode(), "NAV_SYNC_PACKETS", "Navigation link: Sync Packet IDs"), + NAV_SYNC_DATA("REG-NAV-003", USER_EVENT.getCode(), "NAV_SYNC_DATA", "Navigation link: Sync Data"), + NAV_DOWNLOAD_PRE_REG_DATA("REG-NAV-004", USER_EVENT.getCode(), "NAV_DOWNLOAD_PRE_REG_DATA", + "Navigation link: Download Pre-registration Data"), + NAV_GEO_LOCATION("REG-NAV-005", USER_EVENT.getCode(), "NAV_GEO_LOCATION", "Navigation link: Geo-location"), + NAV_ON_BOARD_USER("REG-NAV-006", USER_EVENT.getCode(), "NAV_ON_BOARD_USER", "Navigation link: On-board Users"), + NAV_HOME("REG-NAV-007", SYSTEM_EVENT.getCode(), "NAV_HOME", "Navigation link: Home"), + NAV_REDIRECT_HOME("REG-NAV-008", SYSTEM_EVENT.getCode(), "NAV_REDIRECT_HOME", "Navigation link: Redirect to Home"), + NAV_ON_BOARD_DEVICES("REG-NAV-009", USER_EVENT.getCode(), "NAV_ON_BOARD_DEVICES", + "Navigation link: On-board Devices"), //Home MASTER_DATA_SYNC("REG-HOME-001", USER_EVENT.getCode(), "MASTER_DATA_SYNC", "Master data sync clicked"), NEW_REGISTRATION("REG-HOME-002", USER_EVENT.getCode(), "NEW_REGISTRATION", "New registration clicked"), @@ -44,27 +63,65 @@ public enum AuditEvent { CANCEL_JOB("REG-JOB-003", USER_EVENT.getCode(), "CANCEL_JOB", "Cancel scheduled job service clicked"), //REGISTRATION USER EVENT - REGISTRATION_START("REG-EVT-001", USER_EVENT.getCode(), "REGISTRATION_START", "Registration start event initiated"), - LOADED_REGISTRATION_SCREEN("REG-EVT-002", USER_EVENT.getCode(), "LOADED_REGISTRATION_SCREEN", "Registration screen activity loaded"), - NEXT_BUTTON_CLICKED("REG-EVT-003", USER_EVENT.getCode(), "NEXT_BUTTON_CLICKED", "Next button clicked"), - DOCUMENT_SCAN("REG-EVT-004", USER_EVENT.getCode(), "DOCUMENT_SCAN", "Scan document button clicked"), - DOCUMENT_SCAN_FAILED("REG-EVT-005", USER_EVENT.getCode(), "DOCUMENT_SCAN_FAILED", "Document scan failed"), + REGISTRATION_START("REG-EVT-104", USER_EVENT.getCode(), "REGISTRATION_START", "Registration start event initiated"), + LOADED_REGISTRATION_SCREEN("REG-EVT-105", USER_EVENT.getCode(), "LOADED_REGISTRATION_SCREEN", "Registration screen activity loaded"), + NEXT_BUTTON_CLICKED("REG-EVT-069", USER_EVENT.getCode(), "NEXT_BUTTON_CLICKED", "Next button clicked"), + DOCUMENT_SCAN("REG-EVT-106", USER_EVENT.getCode(), "DOCUMENT_SCAN", "Scan document button clicked"), + DOCUMENT_SCAN_FAILED("REG-EVT-050", USER_EVENT.getCode(), "DOCUMENT_SCAN_FAILED", "Document scan failed"), DOCUMENT_PREVIEW("REG-EVT-006", USER_EVENT.getCode(), "DOCUMENT_PREVIEW", "Document preview button clicked"), - BIOMETRIC_CAPTURE("REG-EVT-007", USER_EVENT.getCode(), "BIOMETRIC_CAPTURE_INITIATED", "Biometric capture initiated"), - LOADED_REGISTRATION_PREVIEW("REG-EVT-008", USER_EVENT.getCode(), "LOADED_REGISTRATION_PREVIEW", "Registration preview loaded"), - CREATE_PACKET_AUTH("REG-EVT-009", USER_EVENT.getCode(), "CREATE_PACKET_AUTH", "Packet create authentication clicked"), - CREATE_PACKET_AUTH_FAILED("REG-EVT-010", USER_EVENT.getCode(), "CREATE_PACKET_AUTH_FAILED", "Packet create authentication failed"), - LOADED_ACKNOWLEDGEMENT_SCREEN("REG-EVT-011", USER_EVENT.getCode(), "LOADED_ACKNOWLEDGEMENT_SCREEN", "Acknowledgement Activity loaded"), - PRINT_ACKNOWLEDGEMENT("REG-EVT-012", USER_EVENT.getCode(), "PRINT_ACKNOWLEDGEMENT", "Print acknowledgement"), + BIOMETRIC_CAPTURE("REG-EVT-107", USER_EVENT.getCode(), "BIOMETRIC_CAPTURE_INITIATED", "Biometric capture initiated"), + LOADED_REGISTRATION_PREVIEW("REG-EVT-108", USER_EVENT.getCode(), "LOADED_REGISTRATION_PREVIEW", "Registration preview loaded"), + CREATE_PACKET_AUTH("REG-EVT-109", USER_EVENT.getCode(), "CREATE_PACKET_AUTH", "Packet create authentication clicked"), + CREATE_PACKET_AUTH_FAILED("REG-EVT-043", USER_EVENT.getCode(), "CREATE_PACKET_AUTH_FAILED", "Packet create authentication failed"), + LOADED_ACKNOWLEDGEMENT_SCREEN("REG-EVT-044", USER_EVENT.getCode(), "LOADED_ACKNOWLEDGEMENT_SCREEN", "Acknowledgement Activity loaded"), + PRINT_ACKNOWLEDGEMENT("REG-EVT-045", USER_EVENT.getCode(), "PRINT_ACKNOWLEDGEMENT", "Print acknowledgement"), + + // Registration : Demographics Details + REG_DEMO_CAPTURE("REG-EVT-007", USER_EVENT.getCode(), "REG_DEMO_NEXT", "FvStarted capturing demographic details"), + REG_DEMO_PRE_REG_DATA_FETCH("REG-EVT-008", USER_EVENT.getCode(), "REG_DEMO_PRE_REG_DATA_FETCH", "Pre-registration: Fetch data for selected Pre-registration"), + REG_DEMO_NEXT("REG-EVT-105", USER_EVENT.getCode(), "REG_DEMO_NEXT", "Click of Next after capturing demographic details"), + // Registration Preview + REG_PREVIEW_DEMO_EDIT("REG-EVT-043", USER_EVENT.getCode(), "REG_PREVIEW_DEMO_EDIT", "Click of Edit demographics"), + REG_PREVIEW_DOC_EDIT("REG-EVT-044", USER_EVENT.getCode(), "REG_PREVIEW_DOC_EDIT", "Click of Edit documents"), + REG_PREVIEW_BIO_EDIT("REG-EVT-045", USER_EVENT.getCode(), "REG_PREVIEW_BIO_EDIT", "Click of Biometrics Edit"), + REG_PREVIEW_SUBMIT("REG-EVT-046", USER_EVENT.getCode(), "REG_PREVIEW_SUBMIT", + "Click of Next after Registration Preview"), + REG_PREVIEW_BACK("REG-EVT-047", USER_EVENT.getCode(), "REG_PREVIEW_BACK","Click of Back from registration preview screen"), //REGISTRATION SYSTEM EVENT - DISCOVER_SBI_FAILED("REG-EVT-013", SYSTEM_EVENT.getCode(), "DISCOVER_SBI_FAILED", "SBI discovery failed"), - DEVICE_INFO_FAILED("REG-EVT-014", SYSTEM_EVENT.getCode(), "DEVICE_INFO_FAILED", "Device info failed"), - R_CAPTURE_FAILED("REG-EVT-015", SYSTEM_EVENT.getCode(), "R_CAPTURE_FAILED", "R_capture failed"), - DISCOVER_SBI_PARSE_FAILED("REG-EVT-016", SYSTEM_EVENT.getCode(), "DISCOVER_SBI_PARSE_FAILED", "SBI discovery response parsing failed"), - DEVICE_INFO_PARSE_FAILED("REG-EVT-017", SYSTEM_EVENT.getCode(), "DEVICE_INFO_PARSE_FAILED", "Device info response parsing failed"), - R_CAPTURE_PARSE_FAILED("REG-EVT-018", SYSTEM_EVENT.getCode(), "R_CAPTURE_PARSE_FAILED", "R_capture response parsing failed"), - CREATE_PACKET_FAILED("REG-EVT-019", USER_EVENT.getCode(), "CREATE_PACKET_FAILED", "Packet creation failed"); + DISCOVER_SBI_FAILED("REG-EVT-070", SYSTEM_EVENT.getCode(), "DISCOVER_SBI_FAILED", "SBI discovery failed"), + DEVICE_INFO_FAILED("REG-EVT-049", SYSTEM_EVENT.getCode(), "DEVICE_INFO_FAILED", "Device info failed"), + R_CAPTURE_FAILED("REG-EVT-050", SYSTEM_EVENT.getCode(), "R_CAPTURE_FAILED", "R_capture failed"), + DISCOVER_SBI_PARSE_FAILED("REG-EVT-051", SYSTEM_EVENT.getCode(), "DISCOVER_SBI_PARSE_FAILED", "SBI discovery response parsing failed"), + DEVICE_INFO_PARSE_FAILED("REG-EVT-052", SYSTEM_EVENT.getCode(), "DEVICE_INFO_PARSE_FAILED", "Device info response parsing failed"), + R_CAPTURE_PARSE_FAILED("REG-EVT-053", SYSTEM_EVENT.getCode(), "R_CAPTURE_PARSE_FAILED", "R_capture response parsing failed"), + CREATE_PACKET_FAILED("REG-EVT-054", USER_EVENT.getCode(), "CREATE_PACKET_FAILED", "Packet creation failed"), + + // Packet Upload + PACKET_UPLOAD("REG-EVT-083", USER_EVENT.getCode(), "PACKET_UPLOAD", "Upload the local packets to the server"), + // Registration : Documents + REG_DOC_POA_SCAN("REG-EVT-010", USER_EVENT.getCode(), "REG_DOC_POA_SCAN", "PoA: Click of Scan"), + REG_DOC_POA_VIEW("REG-EVT-011", USER_EVENT.getCode(), "REG_DOC_POA_VIEW", "PoA: View"), + REG_DOC_POA_DELETE("REG-EVT-012", USER_EVENT.getCode(), "REG_DOC_POA_DELETE", "PoA: Delete"), + REG_DOC_POI_SCAN("REG-EVT-013", USER_EVENT.getCode(), "REG_DOC_POI_SCAN", "PoI: Click of Scan"), + REG_DOC_POI_VIEW("REG-EVT-014", USER_EVENT.getCode(), "REG_DOC_POI_VIEW", "PoI: View"), + REG_DOC_POI_DELETE("REG-EVT-015", USER_EVENT.getCode(), "REG_DOC_POI_DELETE", "PoI: Delete"), + REG_DOC_POR_SCAN("REG-EVT-016", USER_EVENT.getCode(), "REG_DOC_POR_SCAN", "PoR: Click of Scan"), + REG_DOC_POR_VIEW("REG-EVT-017", USER_EVENT.getCode(), "REG_DOC_POR_VIEW", "PoR: View"), + REG_DOC_POR_DELETE("REG-EVT-018", USER_EVENT.getCode(), "REG_DOC_POR_DELETE", "PoR: Delete"), + REG_DOC_POB_SCAN("REG-EVT-019", USER_EVENT.getCode(), "REG_DOC_POB_SCAN", "PoB: Click of Scan"), + REG_DOC_POB_VIEW("REG-EVT-020", USER_EVENT.getCode(), "REG_DOC_POB_VIEW", "PoB: View"), + REG_DOC_POB_DELETE("REG-EVT-021", USER_EVENT.getCode(), "REG_DOC_POB_DELETE", "PoB: Delete"), + REG_DOC_POE_SCAN("REG-EVT-022", USER_EVENT.getCode(), "REG_DOC_POB_SCAN", "PoB: Click of Scan"), + REG_DOC_POE_VIEW("REG-EVT-023", USER_EVENT.getCode(), "REG_DOC_POB_VIEW", "PoB: View"), + REG_DOC_POE_DELETE("REG-EVT-024", USER_EVENT.getCode(), "REG_DOC_POB_DELETE", "PoB: Delete"), + REG_DOC_NEXT("REG-EVT-025", USER_EVENT.getCode(), "REG_DOC_NEXT", "Click of Next after uploading documents"), + REG_DOC_BACK("REG-EVT-026", USER_EVENT.getCode(), "REG_DOC_BACK", "Click of Back to demographic details"), + + // MDM + REG_DOC_SCAN("REG-EVT-089", USER_EVENT.getCode(), "REG_DOC_SCAN", "Doc: Click of Scan"), + REG_DOC_VIEW("REG-EVT-090", USER_EVENT.getCode(), "REG_DOC_VIEW", "Doc: View"), + REG_DOC_DELETE("REG-EVT-091", USER_EVENT.getCode(), "REG_DOC_DELETE", "Doc: Delete"); AuditEvent(String id, String type, String name, String description) { this.id = id; diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java index 8d31c65b7..074263a20 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java @@ -56,10 +56,12 @@ import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; - +import io.mosip.registration.clientmanager.spi.AuditManagerService; +import io.mosip.registration.clientmanager.constant.AuditEvent; +import io.mosip.registration.clientmanager.constant.Components; @Singleton public class PacketServiceImpl implements PacketService { - + private AuditManagerService auditManagerService; private static final String TAG = PacketServiceImpl.class.getSimpleName(); public static final String PACKET_EXTERNAL_STATUS_READER_ID = "mosip.registration.packet.external.status"; public static final String PACKET_STATUS_READER_ID = "mosip.registration.status"; @@ -89,6 +91,7 @@ public PacketServiceImpl(Context context, RegistrationRepository registrationRep this.syncRestService = syncRestService; this.masterDataService = masterDataService; this.globalParamRepository = globalParamRepository; + this.auditManagerService = auditManagerService; } @Override diff --git a/lib/ui/onboard/home_page.dart b/lib/ui/onboard/home_page.dart index 98dfc5efb..b81fc3d62 100644 --- a/lib/ui/onboard/home_page.dart +++ b/lib/ui/onboard/home_page.dart @@ -132,7 +132,7 @@ class _HomePageState extends State { } } globalProvider.createRegistrationLanguageMap(); - globalProvider.getAudit("REG-HOME-002", "REG-MOD-102"); + //globalProvider.getAudit("REG-HOME-002", "REG-MOD-102"); showDialog( context: context, builder: (BuildContext context) => LanguageSelector( diff --git a/lib/ui/process_ui/generic_process.dart b/lib/ui/process_ui/generic_process.dart index 9e5521a3c..6733e875b 100644 --- a/lib/ui/process_ui/generic_process.dart +++ b/lib/ui/process_ui/generic_process.dart @@ -99,7 +99,7 @@ class _GenericProcessState extends State } }, )); - _registrationScreenLoadedAudit(); + //_registrationScreenLoadedAudit(); WidgetsBinding.instance.addPostFrameCallback((_) async { await _fetchLocation(); }); @@ -225,7 +225,7 @@ class _GenericProcessState extends State } _nextButtonClickedAudit() async { - await globalProvider.getAudit("REG-EVT-003", "REG-MOD-103"); + await globalProvider.getAudit("REG-EVT-069", "REG-MOD-103"); } setScrollToTop() { @@ -238,6 +238,13 @@ class _GenericProcessState extends State } Future onWillPop(Process process) async { + final index = globalProvider.newProcessTabIndex; + if (index > 0 && index < process.screens!.length) { + final currentScreen = process.screens![index]!; + if (currentScreen.name == "Documents") { + globalProvider.getAudit("REG-EVT-026", "REG-MOD-103"); + } + } if (globalProvider.newProcessTabIndex > 0 && globalProvider.newProcessTabIndex < process.screens!.length + postRegistrationTabs.length - 1) { @@ -680,7 +687,13 @@ class _GenericProcessState extends State templateTitleMap!, ); } - + if (globalProvider.newProcessTabIndex < size) { + final currentScreen = + process.screens![globalProvider.newProcessTabIndex]!; + if (currentScreen.name == "Documents") { + globalProvider.getAudit("REG-EVT-025", "REG-MOD-103"); + } + } globalProvider.newProcessTabIndex = globalProvider.newProcessTabIndex + 1; } diff --git a/lib/ui/process_ui/widgets/document_upload_control.dart b/lib/ui/process_ui/widgets/document_upload_control.dart index 57bd4509c..0bf794452 100644 --- a/lib/ui/process_ui/widgets/document_upload_control.dart +++ b/lib/ui/process_ui/widgets/document_upload_control.dart @@ -49,6 +49,103 @@ class _DocumentUploadControlState extends State { } int maxFileSize = 2 * 1024 * 1024; // Default 2MB + Future _logDocumentAudit(String action) async { + String eventId=""; + final String subType = (widget.field.subType ?? "").toUpperCase(); + + switch (action) { + case "SCAN": + switch (subType) { + case "POA": + eventId = "REG-EVT-010"; + break; + case "POI": + eventId = "REG-EVT-013"; + break; + case "POR": + eventId = "REG-EVT-016"; + break; + case "POB": + eventId = "REG-EVT-019"; + break; + case "POE": + eventId = "REG-EVT-022"; + break; + default: + eventId = ""; + } + break; + + case "VIEW": + switch (subType) { + case "POA": + eventId = "REG-EVT-011"; + break; + case "POI": + eventId = "REG-EVT-014"; + break; + case "POR": + eventId = "REG-EVT-017"; + break; + case "POB": + eventId = "REG-EVT-020"; + break; + case "POE": + eventId = "REG-EVT-023"; + break; + default: + eventId = ""; + } + break; + + case "DELETE": + switch (subType) { + case "POA": + eventId = "REG-EVT-012"; + break; + case "POI": + eventId = "REG-EVT-015"; + break; + case "POR": + eventId = "REG-EVT-018"; + break; + case "POB": + eventId = "REG-EVT-021"; + break; + case "POE": + eventId = "REG-EVT-024"; + break; + default: + eventId = ""; + } + break; + + } + + await context.read().getAudit(eventId, "REG-MOD-103"); + } + Future _DocumentAudit(String action) async { + String event=""; + + switch (action) { + case "SCAN": + event = "REG-EVT-089"; + break; + case "VIEW": + event = "REG-EVT-090"; + break; + case "DELETE": + event = "REG-EVT-091"; + break; + default: + event =""; + } + + if (event!= null) { + await context.read() + .getAudit(event!, "REG-MOD-103"); + } + } _fetchMaxFileSize() async { try { @@ -269,9 +366,10 @@ class _DocumentUploadControlState extends State { } } - _documentScanClickedAudit() async { - await context.read().getAudit("REG-EVT-004", "REG-MOD-103"); - } + _documentScanClickedAudit() { + _DocumentAudit("SCAN"); + _logDocumentAudit("SCAN"); + } Future> getImageBytes(String imagePath) async { final File imageFile = File(imagePath); @@ -548,6 +646,8 @@ class _DocumentUploadControlState extends State { children: [ InkWell( onTap: () { + _DocumentAudit("VIEW"); + _logDocumentAudit("VIEW"); Navigator.push( context, MaterialPageRoute( @@ -569,6 +669,8 @@ class _DocumentUploadControlState extends State { SizedBox(height: 2.h), GestureDetector( onTap: () { + _DocumentAudit("DELETE"); + _logDocumentAudit("DELETE"); _deleteImage(widget.field, item); _removeFieldValue(widget.field, item); _setRemoveScannedPages(widget.field, @@ -815,6 +917,8 @@ class _DocumentUploadControlState extends State { children: [ InkWell( onTap: () { + _DocumentAudit("VIEW"); + _logDocumentAudit("VIEW"); Navigator.push( context, MaterialPageRoute( @@ -836,6 +940,8 @@ class _DocumentUploadControlState extends State { SizedBox(height: 10.h), GestureDetector( onTap: () { + _DocumentAudit("DELETE"); + _logDocumentAudit("DELETE"); _deleteImage(widget.field, item); _removeFieldValue(widget.field, item); _setRemoveScannedPages(widget.field, diff --git a/lib/ui/scanner/custom_scanner.dart b/lib/ui/scanner/custom_scanner.dart index 4597caa6a..53872edaa 100644 --- a/lib/ui/scanner/custom_scanner.dart +++ b/lib/ui/scanner/custom_scanner.dart @@ -36,9 +36,10 @@ class _CustomScannerState extends State { CropMode mode = CropMode.rect; double? _aspectRatio; ImageFormat format = ImageFormat.jpg; + bool _previewAuditLogged = false; _documentScanFailedAudit() async { - await context.read().getAudit("REG-EVT-005", "REG-MOD-103"); + await context.read().getAudit("REG-EVT-049", "REG-MOD-103"); } _documentPreviewAudit() async { @@ -110,7 +111,7 @@ class _CustomScannerState extends State { : const SizedBox.shrink(); if (_pickedFile != null) { - _documentPreviewAudit(); + //_documentPreviewAudit(); return Column( children: [ Expanded( @@ -200,6 +201,11 @@ class _CustomScannerState extends State { final pickedFile = await ImagePicker().pickImage(source: ImageSource.camera); if (pickedFile != null) { _pickedFile = await pickedFile.readAsBytes(); + if (!_previewAuditLogged) { + _previewAuditLogged = true; + context.read() + .getAudit("REG-EVT-006", "REG-MOD-103"); + } setState(() {}); } else { Navigator.pop(context); From b1f06f458da369a303069911a183b6a6c33ea998 Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Mon, 12 Jan 2026 10:24:43 +0530 Subject: [PATCH 02/17] Added ARC Audit Signed-off-by: Rakshithasai123 --- .../registration_client/HostApiModule.java | 1 - .../api_services/DemographicsDetailsApi.java | 7 +------ .../api_services/RegistrationApi.java | 11 +++------- .../clientmanager/constant/AuditEvent.java | 2 +- .../widgets/document_upload_control.dart | 21 ++++++++++++------- lib/ui/scanner/custom_scanner.dart | 3 ++- 6 files changed, 20 insertions(+), 25 deletions(-) diff --git a/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java b/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java index 805bcec0b..60b4c35ea 100644 --- a/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java +++ b/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java @@ -72,7 +72,6 @@ import io.mosip.registration_client.api_services.ProcessSpecDetailsApi; import io.mosip.registration_client.api_services.RegistrationApi; import io.mosip.registration_client.api_services.UserDetailsApi; -import io.mosip.registration.clientmanager.repository.UserDetailRepository; @Module public class HostApiModule { diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java index b80811384..ebc06e081 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java @@ -45,12 +45,7 @@ public DemographicsDetailsApi(RegistrationService registrationService, AuditMana @Override - public void addDemographicField(@NonNull String fieldId, @NonNull String value, @NonNull DemographicsDataPigeon.Result result) { - if (!isDemoCaptureAudited) { - auditManagerService.audit(AuditEvent.REG_DEMO_CAPTURE, Components.REGISTRATION); - Log.i("AUDIT", "Logged REG_DEMO_CAPTURE - Started capturing demographic details"); - isDemoCaptureAudited = true; - } + public void addDemographicField(@NonNull String fieldId,@NonNull String value,@NonNull DemographicsDataPigeon.Result result) { try { this.registrationService.getRegistrationDto().addDemographicField(fieldId, value); result.success("Ok"); diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java index f8a4bd7c6..115068db2 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java @@ -48,31 +48,26 @@ public RegistrationApi(RegistrationService registrationService, TemplateService @Override public void startRegistration(@NonNull List languages, @NonNull String flowType, @NonNull String process, @NonNull RegistrationDataPigeon.Result result) { - Log.d("RegistrationApi", "startRegistration called with process: '" + process + "'"); - Log.d("RegistrationApi", "startRegistration called with flowType: '" + flowType + "'"); + String flowTypeUpper = flowType.toUpperCase().trim(); - Log.d("RegistrationApi", "FlowType uppercase: '" + flowTypeUpper + "'"); + switch (flowTypeUpper) { case "NEW": - Log.d("RegistrationApi", "Matched NEW - auditing NAV_NEW_REG"); auditManagerService.audit(AuditEvent.NAV_NEW_REG, Components.REGISTRATION); break; case "LOST": - Log.d("RegistrationApi", "Matched LOST - auditing NAV_LOST_UIN"); auditManagerService.audit(AuditEvent.NAV_LOST_UIN, Components.REGISTRATION); break; case "UPDATE": - Log.d("RegistrationApi", "Matched UPDATE - auditing NAV_UIN_UPDATE"); auditManagerService.audit(AuditEvent.NAV_UIN_UPDATE, Components.REGISTRATION); break; case "CORRECTION": - Log.d("RegistrationApi", "Matched CORRECTION - auditing NAV_CORRECTION"); auditManagerService.audit(AuditEvent.NAV_CORRECTION, Components.REGISTRATION); break; default: - Log.w("RegistrationApi", "NO MATCH for process: '" + process + "'"); + Log.w("RegistrationApi", "NO MATCH for process: '" + flowTypeUpper + "'"); break; } String response = ""; diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java index 7f1d66aee..167cddb50 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java @@ -91,7 +91,7 @@ public enum AuditEvent { //REGISTRATION SYSTEM EVENT DISCOVER_SBI_FAILED("REG-EVT-070", SYSTEM_EVENT.getCode(), "DISCOVER_SBI_FAILED", "SBI discovery failed"), DEVICE_INFO_FAILED("REG-EVT-049", SYSTEM_EVENT.getCode(), "DEVICE_INFO_FAILED", "Device info failed"), - R_CAPTURE_FAILED("REG-EVT-050", SYSTEM_EVENT.getCode(), "R_CAPTURE_FAILED", "R_capture failed"), + R_CAPTURE_FAILED("REG-EVT-077", SYSTEM_EVENT.getCode(), "R_CAPTURE_FAILED", "R_capture failed"), DISCOVER_SBI_PARSE_FAILED("REG-EVT-051", SYSTEM_EVENT.getCode(), "DISCOVER_SBI_PARSE_FAILED", "SBI discovery response parsing failed"), DEVICE_INFO_PARSE_FAILED("REG-EVT-052", SYSTEM_EVENT.getCode(), "DEVICE_INFO_PARSE_FAILED", "Device info response parsing failed"), R_CAPTURE_PARSE_FAILED("REG-EVT-053", SYSTEM_EVENT.getCode(), "R_CAPTURE_PARSE_FAILED", "R_capture response parsing failed"), diff --git a/lib/ui/process_ui/widgets/document_upload_control.dart b/lib/ui/process_ui/widgets/document_upload_control.dart index 0bf794452..f414f8281 100644 --- a/lib/ui/process_ui/widgets/document_upload_control.dart +++ b/lib/ui/process_ui/widgets/document_upload_control.dart @@ -122,9 +122,14 @@ class _DocumentUploadControlState extends State { } - await context.read().getAudit(eventId, "REG-MOD-103"); + if (eventId.isNotEmpty) { + await context.read().getAudit( + eventId, + "REG-MOD-103", + ); + } } - Future _DocumentAudit(String action) async { + Future _documentAudit(String action) async { String event=""; switch (action) { @@ -141,7 +146,7 @@ class _DocumentUploadControlState extends State { event =""; } - if (event!= null) { + if (event.isNotEmpty) { await context.read() .getAudit(event!, "REG-MOD-103"); } @@ -367,7 +372,7 @@ class _DocumentUploadControlState extends State { } _documentScanClickedAudit() { - _DocumentAudit("SCAN"); + _documentAudit("SCAN"); _logDocumentAudit("SCAN"); } @@ -646,7 +651,7 @@ class _DocumentUploadControlState extends State { children: [ InkWell( onTap: () { - _DocumentAudit("VIEW"); + _documentAudit("VIEW"); _logDocumentAudit("VIEW"); Navigator.push( context, @@ -669,7 +674,7 @@ class _DocumentUploadControlState extends State { SizedBox(height: 2.h), GestureDetector( onTap: () { - _DocumentAudit("DELETE"); + _documentAudit("DELETE"); _logDocumentAudit("DELETE"); _deleteImage(widget.field, item); _removeFieldValue(widget.field, item); @@ -917,7 +922,7 @@ class _DocumentUploadControlState extends State { children: [ InkWell( onTap: () { - _DocumentAudit("VIEW"); + _documentAudit("VIEW"); _logDocumentAudit("VIEW"); Navigator.push( context, @@ -940,7 +945,7 @@ class _DocumentUploadControlState extends State { SizedBox(height: 10.h), GestureDetector( onTap: () { - _DocumentAudit("DELETE"); + _documentAudit("DELETE"); _logDocumentAudit("DELETE"); _deleteImage(widget.field, item); _removeFieldValue(widget.field, item); diff --git a/lib/ui/scanner/custom_scanner.dart b/lib/ui/scanner/custom_scanner.dart index 53872edaa..7fee1b61b 100644 --- a/lib/ui/scanner/custom_scanner.dart +++ b/lib/ui/scanner/custom_scanner.dart @@ -39,7 +39,7 @@ class _CustomScannerState extends State { bool _previewAuditLogged = false; _documentScanFailedAudit() async { - await context.read().getAudit("REG-EVT-049", "REG-MOD-103"); + await context.read().getAudit("REG-EVT-050", "REG-MOD-103"); } _documentPreviewAudit() async { @@ -158,6 +158,7 @@ class _CustomScannerState extends State { ), ), onPressed: () async { + _previewAuditLogged = false; _uploadImage(); }, child: Text( From 8bcbdbe789ddd2fe204b198fb7b1807d47eaef0d Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Mon, 12 Jan 2026 12:17:11 +0530 Subject: [PATCH 03/17] Added ARC Audit Signed-off-by: Rakshithasai123 --- .../api_services/DemographicsDetailsApi.java | 14 ++++++++++---- .../clientmanager/config/RoomModule.java | 13 ++++++++----- .../clientmanager/constant/AuditEvent.java | 10 +++++----- .../dto/registration/RegistrationDto.java | 7 +++++++ .../widgets/document_upload_control.dart | 2 +- 5 files changed, 31 insertions(+), 15 deletions(-) diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java index ebc06e081..746af7e1c 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java @@ -32,7 +32,7 @@ public class DemographicsDetailsApi implements DemographicsDataPigeon.Demographi private final RegistrationService registrationService; AuditManagerService auditManagerService; private static final String GET_FIELD_FAILED_MESSAGE = "Get field failed!"; - private boolean isDemoCaptureAudited = false; + GlobalParamRepository globalParamRepository; @@ -47,10 +47,16 @@ public DemographicsDetailsApi(RegistrationService registrationService, AuditMana @Override public void addDemographicField(@NonNull String fieldId,@NonNull String value,@NonNull DemographicsDataPigeon.Result result) { try { - this.registrationService.getRegistrationDto().addDemographicField(fieldId, value); - result.success("Ok"); + RegistrationDto dto = registrationService.getRegistrationDto(); + auditManagerService.audit(AuditEvent.REG_DEMO_CAPTURE, Components.REGISTRATION); + Log.i("AUDIT", "Logged REG_DEMO_CAPTURE - Started capturing demographic details"); + dto.setDemoCaptureAudited(true); + dto.addDemographicField(fieldId, value); + result.success("Ok"); } catch (Exception e) { - Log.e(getClass().getSimpleName(), "Add field failed!" + Arrays.toString(e.getStackTrace())); + Log.e(getClass().getSimpleName(), + "Add field failed!", e); + result.error(e); } } diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java index c97410969..ec087b7dc 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java @@ -110,9 +110,12 @@ public RoomModule(Application application, ApplicationInfo applicationInfo) { encryptExistingDb(context, dbPwd); } } +// clientDatabase = Room.databaseBuilder(application, ClientDatabase.class, DATABASE_NAME) +// .openHelperFactory(new SupportFactory(dbPwd.getBytes())) +// .addMigrations(ClientDatabaseMigrations.MIGRATION_1_2) +// .allowMainThreadQueries() +// .build(); clientDatabase = Room.databaseBuilder(application, ClientDatabase.class, DATABASE_NAME) - .openHelperFactory(new SupportFactory(dbPwd.getBytes())) - .addMigrations(ClientDatabaseMigrations.MIGRATION_1_2) .allowMainThreadQueries() .build(); } catch (Exception e) { @@ -353,7 +356,7 @@ DocumentTypeRepository provideDocumentTypeRepository(DocumentTypeDao documentTyp @Provides @Singleton ApplicantValidDocRepository provideApplicantValidDocRepository(ApplicantValidDocumentDao - applicantValidDocumentDao) { + applicantValidDocumentDao) { return new ApplicantValidDocRepository(applicantValidDocumentDao); } @@ -471,8 +474,8 @@ LocalPreferencesDao providesLocalPreferencesDao(ClientDatabase clientDatabase) { @Singleton LocalConfigDAO provideLocalConfigDAO(PermittedLocalConfigDao permittedLocalConfigDao, LocalPreferencesDao localPreferencesDao) { return new LocalConfigDAOImpl( - new PermittedLocalConfigRepository(permittedLocalConfigDao), - new LocalPreferencesRepository(localPreferencesDao) + new PermittedLocalConfigRepository(permittedLocalConfigDao), + new LocalPreferencesRepository(localPreferencesDao) ); } } diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java index 167cddb50..0103ff6a2 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java @@ -64,7 +64,7 @@ public enum AuditEvent { //REGISTRATION USER EVENT REGISTRATION_START("REG-EVT-104", USER_EVENT.getCode(), "REGISTRATION_START", "Registration start event initiated"), - LOADED_REGISTRATION_SCREEN("REG-EVT-105", USER_EVENT.getCode(), "LOADED_REGISTRATION_SCREEN", "Registration screen activity loaded"), + LOADED_REGISTRATION_SCREEN("REG-EVT-111", USER_EVENT.getCode(), "LOADED_REGISTRATION_SCREEN", "Registration screen activity loaded"), NEXT_BUTTON_CLICKED("REG-EVT-069", USER_EVENT.getCode(), "NEXT_BUTTON_CLICKED", "Next button clicked"), DOCUMENT_SCAN("REG-EVT-106", USER_EVENT.getCode(), "DOCUMENT_SCAN", "Scan document button clicked"), DOCUMENT_SCAN_FAILED("REG-EVT-050", USER_EVENT.getCode(), "DOCUMENT_SCAN_FAILED", "Document scan failed"), @@ -77,13 +77,13 @@ public enum AuditEvent { PRINT_ACKNOWLEDGEMENT("REG-EVT-045", USER_EVENT.getCode(), "PRINT_ACKNOWLEDGEMENT", "Print acknowledgement"), // Registration : Demographics Details - REG_DEMO_CAPTURE("REG-EVT-007", USER_EVENT.getCode(), "REG_DEMO_NEXT", "FvStarted capturing demographic details"), + REG_DEMO_CAPTURE("REG-EVT-110", USER_EVENT.getCode(), "REG_DEMO_NEXT", "FvStarted capturing demographic details"), REG_DEMO_PRE_REG_DATA_FETCH("REG-EVT-008", USER_EVENT.getCode(), "REG_DEMO_PRE_REG_DATA_FETCH", "Pre-registration: Fetch data for selected Pre-registration"), REG_DEMO_NEXT("REG-EVT-105", USER_EVENT.getCode(), "REG_DEMO_NEXT", "Click of Next after capturing demographic details"), // Registration Preview - REG_PREVIEW_DEMO_EDIT("REG-EVT-043", USER_EVENT.getCode(), "REG_PREVIEW_DEMO_EDIT", "Click of Edit demographics"), - REG_PREVIEW_DOC_EDIT("REG-EVT-044", USER_EVENT.getCode(), "REG_PREVIEW_DOC_EDIT", "Click of Edit documents"), - REG_PREVIEW_BIO_EDIT("REG-EVT-045", USER_EVENT.getCode(), "REG_PREVIEW_BIO_EDIT", "Click of Biometrics Edit"), + REG_PREVIEW_DEMO_EDIT("REG-EVT-114", USER_EVENT.getCode(), "REG_PREVIEW_DEMO_EDIT", "Click of Edit demographics"), + REG_PREVIEW_DOC_EDIT("REG-EVT-112", USER_EVENT.getCode(), "REG_PREVIEW_DOC_EDIT", "Click of Edit documents"), + REG_PREVIEW_BIO_EDIT("REG-EVT-113", USER_EVENT.getCode(), "REG_PREVIEW_BIO_EDIT", "Click of Biometrics Edit"), REG_PREVIEW_SUBMIT("REG-EVT-046", USER_EVENT.getCode(), "REG_PREVIEW_SUBMIT", "Click of Next after Registration Preview"), REG_PREVIEW_BACK("REG-EVT-047", USER_EVENT.getCode(), "REG_PREVIEW_BACK","Click of Back from registration preview screen"), diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java index 7c498d06a..2f434abe7 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java @@ -119,7 +119,14 @@ public void setMakerDetails() { public void setReviewerDetails() { //TODO } + private boolean demoCaptureAudited = false; + public boolean isDemoCaptureAudited() { + return demoCaptureAudited; + } + public void setDemoCaptureAudited(boolean audited) { + this.demoCaptureAudited = audited; + } public void setDateField(String fieldId, String subType, String day, String month, String year) { if(isValidValue(day) && isValidValue(month) && isValidValue(year)) { LocalDate date = LocalDate.of(Integer.valueOf(year), Integer.valueOf(month), Integer.valueOf(day)); diff --git a/lib/ui/process_ui/widgets/document_upload_control.dart b/lib/ui/process_ui/widgets/document_upload_control.dart index f414f8281..91782dca6 100644 --- a/lib/ui/process_ui/widgets/document_upload_control.dart +++ b/lib/ui/process_ui/widgets/document_upload_control.dart @@ -148,7 +148,7 @@ class _DocumentUploadControlState extends State { if (event.isNotEmpty) { await context.read() - .getAudit(event!, "REG-MOD-103"); + .getAudit(event, "REG-MOD-103"); } } From 3d7242c6baa2dd4fadc6eedc4f58277068daf0af Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Mon, 12 Jan 2026 12:31:23 +0530 Subject: [PATCH 04/17] Added ARC Audit Signed-off-by: Rakshithasai123 --- .../registration/clientmanager/config/RoomModule.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java index ec087b7dc..c3c46ef4e 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java @@ -110,12 +110,9 @@ public RoomModule(Application application, ApplicationInfo applicationInfo) { encryptExistingDb(context, dbPwd); } } -// clientDatabase = Room.databaseBuilder(application, ClientDatabase.class, DATABASE_NAME) -// .openHelperFactory(new SupportFactory(dbPwd.getBytes())) -// .addMigrations(ClientDatabaseMigrations.MIGRATION_1_2) -// .allowMainThreadQueries() -// .build(); clientDatabase = Room.databaseBuilder(application, ClientDatabase.class, DATABASE_NAME) + .openHelperFactory(new SupportFactory(dbPwd.getBytes())) + .addMigrations(ClientDatabaseMigrations.MIGRATION_1_2) .allowMainThreadQueries() .build(); } catch (Exception e) { From e5aca850ab26ab55862f3d9df035a6ba2bc60e9d Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Wed, 21 Jan 2026 11:49:15 +0530 Subject: [PATCH 05/17] Added ARC Audit Signed-off-by: Rakshithasai123 --- .../api_services/MachineDetailsApi.java | 3 + .../api_services/MasterDataSyncApi.java | 9 +++ .../api_services/PacketAuthenticationApi.java | 2 +- .../api_services/RegistrationApi.java | 1 - .../api_services/UserDetailsApi.java | 3 + .../registration_client/utils/BatchJob.java | 1 + .../clientmanager/config/AppModule.java | 4 +- .../clientmanager/constant/AuditEvent.java | 68 ++++++++++++++++++- .../PreRegistrationDataSyncServiceImpl.java | 9 ++- lib/provider/global_provider.dart | 4 ++ .../widget/template_bottom_sheet.dart | 6 ++ .../export_packet/widgets/export_button.dart | 5 ++ lib/ui/onboard/home_page.dart | 1 + .../onboard/portrait/operational_tasks.dart | 4 ++ lib/ui/process_ui/generic_process.dart | 1 + .../widgets/device_settings_tab.dart | 3 + lib/utils/inactivity_tracker.dart | 3 +- 17 files changed, 117 insertions(+), 10 deletions(-) diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/MachineDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/MachineDetailsApi.java index 8f6578977..a61a39871 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/MachineDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/MachineDetailsApi.java @@ -24,6 +24,8 @@ import io.mosip.registration.clientmanager.spi.AuditManagerService; import io.mosip.registration.keymanager.spi.ClientCryptoManagerService; import io.mosip.registration_client.model.MachinePigeon; +import io.mosip.registration.clientmanager.constant.AuditEvent; +import io.mosip.registration.clientmanager.constant.Components; @Singleton @@ -43,6 +45,7 @@ public MachineDetailsApi(ClientCryptoManagerService clientCryptoManagerService, @Override public void getMachineDetails(@NonNull MachinePigeon.Result result) { + auditManagerService.audit(AuditEvent.SYNC_MACHINE_DETAILS,Components.REGISTRATION,"Sync machine details"); Map machineDetails = new HashMap<>(); Map details = clientCryptoManagerService.getMachineDetails(); diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java index 097c51bec..d4711f59a 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java @@ -190,6 +190,10 @@ public void getPolicyKeySync(@NonNull Boolean isManualSync, @NonNull String jobI public void getGlobalParamsSync(@NonNull Boolean isManualSync, @NonNull String jobId, @NonNull MasterDataSyncPigeon.Result result) { try { masterDataService.syncGlobalParamsData(() -> { + auditManagerService.audit( + AuditEvent.SYNC_CLIENT_STATE, + Components.REGISTRATION + ); Log.i(TAG, "Sync Global Params Completed."); result.success(syncResult("GlobalParamsSync", 1, masterDataService.onResponseComplete())); }, isManualSync, jobId); @@ -202,6 +206,10 @@ public void getGlobalParamsSync(@NonNull Boolean isManualSync, @NonNull String j public void getUserDetailsSync(@NonNull Boolean isManualSync, @NonNull String jobId, @NonNull MasterDataSyncPigeon.Result result) { try { masterDataService.syncUserDetails(() -> { + auditManagerService.audit( + AuditEvent.SYNC_USER_MAPPING, + Components.REGISTRATION + ); Log.i(TAG, "User details sync Completed."); result.success(syncResult("UserDetailsSync", 3, masterDataService.onResponseComplete())); }, isManualSync, jobId); @@ -228,6 +236,7 @@ public void getMasterDataSync(@NonNull Boolean isManualSync, @NonNull String job auditManagerService.audit(AuditEvent.NAV_SYNC_DATA, Components.REGISTRATION); try { masterDataService.syncMasterData(() -> { + auditManagerService.audit(AuditEvent.SYNC_MASTER_DATA,Components.REGISTRATION); Log.i(TAG, "Master Data Sync Completed."); result.success(syncResult("MasterDataSync", 2, masterDataService.onResponseComplete())); }, 0, isManualSync, jobId); diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java index 41cf13494..646c0a867 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java @@ -98,6 +98,7 @@ public void authenticate(@NonNull String username, @NonNull String password, @No @Override public void syncPacketAll(@NonNull List packetIds, @NonNull PacketAuthPigeon.Result result) { + auditManagerService.audit(AuditEvent.SYNC_REGISTRATION_PACKET_STATUS,Components.REGISTRATION); Integer packetSize = packetIds.size(); final Integer[] remainingPack = {packetSize, 0}; CustomToast newToast = new CustomToast(activity); @@ -218,7 +219,6 @@ public void getAllRegistrationPacket(@NonNull PacketAuthPigeon.Result> result) { - auditManagerService.audit(AuditEvent.NAV_APPROVE_REG, Components.REGISTRATION); List packets = new ArrayList(); try { List allRegistration = packetService.getRegistrationsByStatus(PacketClientStatus.CREATED.name(), 40); diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java index 115068db2..4f45ba09e 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java @@ -170,7 +170,6 @@ public void setAdditionalReqId(@NonNull String additionalReqId, @NonNull Registr @Override public void setMachineLocation(@NonNull Double latitude, @NonNull Double longitude, @NonNull RegistrationDataPigeon.Result result) { - auditManagerService.audit(AuditEvent.NAV_GEO_LOCATION, Components.REGISTRATION); try { this.registrationDto.setGeoLocation(longitude, latitude); } catch (Exception e) { diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/UserDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/UserDetailsApi.java index f584affbf..b74ce7524 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/UserDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/UserDetailsApi.java @@ -29,6 +29,8 @@ import io.mosip.registration.clientmanager.spi.MasterDataService; import io.mosip.registration_client.model.MachinePigeon; import io.mosip.registration_client.model.UserPigeon; +import io.mosip.registration.clientmanager.constant.AuditEvent; +import io.mosip.registration.clientmanager.constant.Components; @Singleton public class UserDetailsApi implements UserPigeon.UserApi { @@ -48,6 +50,7 @@ public UserDetailsApi(LoginService loginService, RegistrationCenterRepository re @Override public void validateUser(@NonNull String username, @NonNull String langCode, @NonNull UserPigeon.Result result) { + auditManagerService.audit(AuditEvent.SYNC_USER_DETAILS,Components.REGISTRATION,"Sync user details"); if (username == null || username.trim().length() == 0) { UserPigeon.User user = new UserPigeon.User.Builder() .setUserId(username) diff --git a/android/app/src/main/java/io/mosip/registration_client/utils/BatchJob.java b/android/app/src/main/java/io/mosip/registration_client/utils/BatchJob.java index 31d00adab..ae444e675 100644 --- a/android/app/src/main/java/io/mosip/registration_client/utils/BatchJob.java +++ b/android/app/src/main/java/io/mosip/registration_client/utils/BatchJob.java @@ -68,6 +68,7 @@ private List getRegistrationList(List statusList) { public void syncRegistrationPackets(Context context) { Log.d(getClass().getSimpleName(), "Sync Packets in Batch Job"); + auditManagerService.audit(AuditEvent.SYNC_SERVER,Components.REG_PACKET_LIST); List registrationList = getRegistrationList(Arrays.asList(PacketClientStatus.APPROVED.name(), PacketClientStatus.REJECTED.name())); final Integer[] remainingPack = {registrationList.size(), 0}; diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java index a1d30f495..47c7d1ca7 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java @@ -287,8 +287,8 @@ TemplateService TemplateService(MasterDataService masterDataService, IdentitySch @Provides @Singleton - PreRegistrationDataSyncService PreRegistrationDataSyncService(PreRegistrationDataSyncDao preRegistrationDao, MasterDataService masterDataService, SyncRestService syncRestService, PreRegZipHandlingService preRegZipHandlingService, PreRegistrationList preRegistration, GlobalParamRepository globalParamRepository, RegistrationService registrationService) { - return new PreRegistrationDataSyncServiceImpl(appContext, preRegistrationDao, masterDataService, syncRestService, preRegZipHandlingService, preRegistration, globalParamRepository, registrationService); + PreRegistrationDataSyncService PreRegistrationDataSyncService(PreRegistrationDataSyncDao preRegistrationDao, MasterDataService masterDataService, SyncRestService syncRestService, PreRegZipHandlingService preRegZipHandlingService, PreRegistrationList preRegistration, GlobalParamRepository globalParamRepository, RegistrationService registrationService, AuditManagerService auditManagerService) { + return new PreRegistrationDataSyncServiceImpl(appContext, preRegistrationDao, masterDataService, syncRestService, preRegZipHandlingService, preRegistration, globalParamRepository, registrationService, auditManagerService); } @Provides diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java index 0103ff6a2..60b92a4bd 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java @@ -54,7 +54,7 @@ public enum AuditEvent { //REG_PACKET_LIST SYNC_PACKET("REG-PKT-001", USER_EVENT.getCode(), "SYNC_PACKET", "Packet sync clicked"), - UPLOAD_PACKET("REG-PKT-002", USER_EVENT.getCode(), "UPLOAD_PACKET", "Upload packet clicked"), + UPLOAD_PACKET("REG-UPL-PKT-001", USER_EVENT.getCode(), "UPLOAD_PACKET", "Upload packet clicked"), SYNC_AND_UPLOAD_PACKET("REG-PKT-003", USER_EVENT.getCode(), "SYNC_AND_UPLOAD_PACKET", "sync and upload started"), //JOB_SERVICE @@ -121,8 +121,70 @@ public enum AuditEvent { // MDM REG_DOC_SCAN("REG-EVT-089", USER_EVENT.getCode(), "REG_DOC_SCAN", "Doc: Click of Scan"), REG_DOC_VIEW("REG-EVT-090", USER_EVENT.getCode(), "REG_DOC_VIEW", "Doc: View"), - REG_DOC_DELETE("REG-EVT-091", USER_EVENT.getCode(), "REG_DOC_DELETE", "Doc: Delete"); - + REG_DOC_DELETE("REG-EVT-091", USER_EVENT.getCode(), "REG_DOC_DELETE", "Doc: Delete"), + + // Approve Registration + APPR_VIEW_REG("REG-EVT-066", USER_EVENT.getCode(), "APPR_VIEW_REG", "View registration detail"), + APPR_REG("REG-EVT-067", USER_EVENT.getCode(), "APPR_REG", "Approve registration"), + REJECT_REG("REG-EVT-068", USER_EVENT.getCode(), "REJECT_REG", "Reject registration"), + + // Geo-Location + GEO_LOCATION_CAPTURE("REG-GEO-LOC-001", SYSTEM_EVENT.getCode(), "GEO_LOCATION_CAPTURE", "Capture geo-location"), + + // Client To Server Sync + SYNC_USER_MAPPING("REG-SYNC-008", USER_EVENT.getCode(), "SYNC_USER_MAPPING", "Sync user mapping"), + SYNC_DEVICE_MAPPING("REG-SYNC-009", USER_EVENT.getCode(), "SYNC_DEVICE_MAPPING", "Sync device mapping"), + SYNC_CLIENT_STATE("REG-SYNC-010", USER_EVENT.getCode(), "SYNC_CLIENT_STATE", "Sync client state"), + + // Export Packets + EXPORT_REG_PACKETS("REG-EXPT-PKT-001", USER_EVENT.getCode(), "EXPORT_REGISTRATION_PACKETS", + "Export Packets: To external device"), + + // Sync Packet Ids + SYNC_PACKET_IDS("REG-SYNC-PKTS-001", SYSTEM_EVENT.getCode(), "SYNC_PACKET_IDS", "Send Packet IDs to server"), + + // Sync Packets + SYNC_SERVER("REG-SYNC-014", USER_EVENT.getCode(), "SYNC_SERVER", "Synchronize the packet status to the server"), + + // Server To Client Sync + SYNC_MASTER_DATA("REG-SYNC-001", USER_EVENT.getCode(), "SYNC_MASTER_DATA", "Sync master data"), + SYNC_REGISTRATION_CENTER_DETAILS("REG-SYNC-002", USER_EVENT.getCode(), "SYNC_REGISTRATION_CENTER_DETAILS", + "Sync registration centre details"), + SYNC_MACHINE_DETAILS("REG-SYNC-003", USER_EVENT.getCode(), "SYNC_MACHINE_DETAILS", "Sync machine details"), + SYNC_DEVICE_DETAILS("REG-SYNC-004", USER_EVENT.getCode(), "SYNC_DEVICE_DETAILS", "Sync device details"), + SYNC_USER_DETAILS("REG-SYNC-005", USER_EVENT.getCode(), "SYNC_USER_DETAILS", "Sync user details"), + SYNC_REGISTRATION_PACKET_STATUS("REG-SYNC-006", USER_EVENT.getCode(), "SYNC_REGISTRATION_PACKET_STATUS", + "Sync registration packet status"), + SYNC_PRE_REGISTRATION_PACKET("REG-SYNC-007", USER_EVENT.getCode(), "SYNC_PRE_REGISTRATION_PACKET", + "Sync pre-registration data"), + + // Login and User related + LOGIN_MODES_FETCH("REG-AUTH-010", USER_EVENT.getCode(), "LOGIN_MODES_FETCH", "Fetching Login Modes"), + USER_STATUS_FETCH("REG-AUTH-011", USER_EVENT.getCode(), "USER_STATUS_FETCH", "Fetching User Status"), + VALIDATE_USER_CRED("REG-AUTH-012", USER_EVENT.getCode(), "VALIDATE_USER_CREDENTIALS", + "Validating User credentials"), + FETCH_USR_DET("REG-AUTH-013", USER_EVENT.getCode(), "FETCH_USER_DETAILS", "Fetching User Details"), + FETCH_CNTR_NAME("REG-AUTH-014", USER_EVENT.getCode(), "FETCH_CENTER_NAME", "Fetching Center Name"), + FETCH_CNTR_DET("REG-AUTH-015", USER_EVENT.getCode(), "FETCH_CENTER_DETAILS", "Fetching Center Details"), + FETCH_USR_ROLE("REG-AUTH-016", USER_EVENT.getCode(), "FETCH_USER_ROLE", "Fetching User Roles"), + SYNCJOB_INFO_FETCH("REG-SYNC-011", USER_EVENT.getCode(), "SYNC_JOB_INFO_FETCH", + "SyncJobInfo containing the sync control list and yet to export packet count fetched successfully"), + SYNC_INFO_VALIDATE("REG-SYNC-012", USER_EVENT.getCode(), "SYNC_INFO_VALIDATION", + "Validating the sync status ended successfully"), + SYNC_PKT_COUNT_VALIDATE("REG-SYNC-013", USER_EVENT.getCode(), "SYNC_PKT_COUNT_VALIDATION", + "Validating yet to export packets frequency with the configured limit count"), + PACKET_RETRIVE("REG-PKT-001", USER_EVENT.getCode(), "PACKET_RETRIVE", + "Packets which are in created state for approval are retrived"), + PACKET_UPDATE("REG-PKT-002", USER_EVENT.getCode(), "PACKET_UPDATE", + "Packets which are in created state are updated"), + SYNC_GEO_VALIDATE("REG-SYNC-014", USER_EVENT.getCode(), "SYNC_GEO_VALIDATE", + "Validating the geo information ended successfully"), + + // Scheduler Util + SCHEDULER_REFRESHED_TIMEOUT("REG-SCH-002", SYSTEM_EVENT.getCode(), "REFRESHED_TIMEOUT", + "The time task remainder alert"), + SCHEDULER_SESSION_TIMEOUT("REG-SCH-003", SYSTEM_EVENT.getCode(), "SESSION_TIMEOUT", + "The time task session expires"); AuditEvent(String id, String type, String name, String description) { this.id = id; this.type = type; diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PreRegistrationDataSyncServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PreRegistrationDataSyncServiceImpl.java index 254aff425..0c4c35ec6 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PreRegistrationDataSyncServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PreRegistrationDataSyncServiceImpl.java @@ -41,6 +41,9 @@ import androidx.annotation.NonNull; import org.apache.commons.io.FileUtils; +import io.mosip.registration.clientmanager.constant.AuditEvent; +import io.mosip.registration.clientmanager.constant.Components; +import io.mosip.registration.clientmanager.spi.AuditManagerService; import java.io.File; import java.time.Instant; @@ -81,8 +84,9 @@ public class PreRegistrationDataSyncServiceImpl implements PreRegistrationDataSy ExecutorService executorServiceForPreReg = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); public static final String APPLICATION_ID_SYNC_FAILED = "application_id_sync_failed"; public static final String ERROR_FETCH_PRE_REG_PACKET = "Failed to fetch pre-reg packet"; + private final AuditManagerService auditManager; - public PreRegistrationDataSyncServiceImpl(Context context,PreRegistrationDataSyncDao preRegistrationDao,MasterDataService masterDataService,SyncRestService syncRestService,PreRegZipHandlingService preRegZipHandlingService,PreRegistrationList preRegistration,GlobalParamRepository globalParamRepository,RegistrationService registrationService){ + public PreRegistrationDataSyncServiceImpl(Context context,PreRegistrationDataSyncDao preRegistrationDao,MasterDataService masterDataService,SyncRestService syncRestService,PreRegZipHandlingService preRegZipHandlingService,PreRegistrationList preRegistration,GlobalParamRepository globalParamRepository,RegistrationService registrationService,AuditManagerService auditManager){ this.context = context; this.preRegistrationDao = preRegistrationDao; this.masterDataService = masterDataService; @@ -91,6 +95,7 @@ public PreRegistrationDataSyncServiceImpl(Context context,PreRegistrationDataSyn this.preRegistration = preRegistration; this.globalParamRepository = globalParamRepository; this.registrationService = registrationService; + this.auditManager = auditManager; sharedPreferences = this.context.getSharedPreferences( this.context.getString(R.string.app_name), Context.MODE_PRIVATE); @@ -132,7 +137,7 @@ public void fetchPreRegistrationIds(Runnable onFinish, String jobId) { //REST call to get Pre Registration Id's Call> call = this.syncRestService.getPreRegistrationIds(preRegistrationDataSyncDto); - + auditManager.audit(AuditEvent.SYNC_PRE_REGISTRATION_PACKET,Components.REGISTRATION,"Sync pre-registration data started"); Log.i(TAG,"REST API Url "+call); call.enqueue(new Callback>() { @Override diff --git a/lib/provider/global_provider.dart b/lib/provider/global_provider.dart index 391a1ff69..8ecc30070 100644 --- a/lib/provider/global_provider.dart +++ b/lib/provider/global_provider.dart @@ -903,6 +903,10 @@ class GlobalProvider with ChangeNotifier { // Check and request permission LocationPermission permission = await Geolocator.checkPermission(); if (permission == LocationPermission.denied) { + audit.performAudit( + "REG-NAV-005", + "REG-MOD-102", + ); permission = await Geolocator.requestPermission(); if (permission == LocationPermission.denied) { // Permissions still denied diff --git a/lib/ui/approve_packet/widget/template_bottom_sheet.dart b/lib/ui/approve_packet/widget/template_bottom_sheet.dart index 9e6173cc4..1903a2bd8 100644 --- a/lib/ui/approve_packet/widget/template_bottom_sheet.dart +++ b/lib/ui/approve_packet/widget/template_bottom_sheet.dart @@ -10,6 +10,7 @@ import 'package:webview_flutter_plus/webview_flutter_plus.dart'; import '../../../model/registration.dart'; import '../../../provider/approve_packets_provider.dart'; +import '../../../provider/global_provider.dart'; import 'reject_dialogbox.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -32,6 +33,7 @@ class TemplateBottomSheet { return ChangeNotifierProvider.value( value: context.watch(), builder: (context, _) { + final globalProvider = context.read(); int currentInd = context.watch().currentInd; Registration regCurrent = context .read() @@ -67,6 +69,8 @@ class TemplateBottomSheet { context .read() .setWebViewPlusController(controller); + context.read() + .getAudit("REG-EVT-066", "REG-MOD-103"); loadHtmlData(controller, regCurrent.id!); }, javascriptMode: JavascriptMode.unrestricted, @@ -140,6 +144,7 @@ class TemplateBottomSheet { onPressed: reviewStatus == ReviewStatus.APPROVED.name ? null : () { + globalProvider.getAudit("REG-EVT-067", "REG-MOD-103"); context .read() .approvePacket(regCurrent.packetId); @@ -177,6 +182,7 @@ class TemplateBottomSheet { onPressed: reviewStatus == ReviewStatus.REJECTED.name ? null : () { + globalProvider.getAudit("REG-EVT-068", "REG-MOD-103"); showDialog( context: context, builder: (BuildContext context) { diff --git a/lib/ui/export_packet/widgets/export_button.dart b/lib/ui/export_packet/widgets/export_button.dart index c0257d47e..dfcb7cadb 100644 --- a/lib/ui/export_packet/widgets/export_button.dart +++ b/lib/ui/export_packet/widgets/export_button.dart @@ -8,6 +8,7 @@ import '../../../utils/app_config.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import '../../../provider/global_provider.dart'; class ExportButton extends StatefulWidget { const ExportButton({super.key}); @@ -47,6 +48,10 @@ class _ExportButtonState extends State { }else{ await exportPacketsProvider.packetSyncAll(); } + await context.read().getAudit( + "REG-EXPT-PKT-001", + "REG-MOD-103" + ); await exportPacketsProvider.exportSelected(); exportPacketsProvider.searchedList(); }, diff --git a/lib/ui/onboard/home_page.dart b/lib/ui/onboard/home_page.dart index b81fc3d62..385db4889 100644 --- a/lib/ui/onboard/home_page.dart +++ b/lib/ui/onboard/home_page.dart @@ -92,6 +92,7 @@ class _HomePageState extends State { await registrationTaskProvider.getListOfProcesses(); await globalProvider.getRegCenterName( globalProvider.centerId, globalProvider.selectedLanguage); + await globalProvider.getAudit("REG-SYNC-002", "REG-MOD-102"); await globalProvider.initializeLanguageDataList(true); await globalProvider.initializeLocationHierarchyMap(); } diff --git a/lib/ui/onboard/portrait/operational_tasks.dart b/lib/ui/onboard/portrait/operational_tasks.dart index 6ae66ade9..0f7ba5a72 100644 --- a/lib/ui/onboard/portrait/operational_tasks.dart +++ b/lib/ui/onboard/portrait/operational_tasks.dart @@ -194,6 +194,10 @@ class _OperationalTasksState extends State { icon: widget.operationalTasks[index]["icon"], title: widget.operationalTasks[index]["title"] as String, ontap: () async { + final title = widget.operationalTasks[index]["title"] as String; + if (title == "Pending Approval") { + globalProvider.getAudit("REG-EVT-004", "REG-MOD-101"); + } return widget.operationalTasks[index]["onTap"](context); }, subtitle: widget.operationalTasks[index]["subtitle"], diff --git a/lib/ui/process_ui/generic_process.dart b/lib/ui/process_ui/generic_process.dart index 6733e875b..c906ecf53 100644 --- a/lib/ui/process_ui/generic_process.dart +++ b/lib/ui/process_ui/generic_process.dart @@ -113,6 +113,7 @@ class _GenericProcessState extends State Position? position = await globalProvider.fetchLocation(); if (position != null) { + globalProvider.getAudit("REG-GEO-LOC-001", "REG-MOD-103"); registrationTaskProvider.setCurrentLocation(position.latitude, position.longitude); } else { debugPrint("Location unavailable — permission denied or service off."); diff --git a/lib/ui/process_ui/widgets/device_settings_tab.dart b/lib/ui/process_ui/widgets/device_settings_tab.dart index fb9fd87e6..541907f1f 100644 --- a/lib/ui/process_ui/widgets/device_settings_tab.dart +++ b/lib/ui/process_ui/widgets/device_settings_tab.dart @@ -5,6 +5,8 @@ import '../../../model/settings.dart'; import '../../../platform_spi/biometrics_service.dart'; import '../../../utils/app_config.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:provider/provider.dart'; +import 'package:registration_client/provider/global_provider.dart'; class DeviceSettingsTab extends StatefulWidget { DeviceSettingsTab( @@ -26,6 +28,7 @@ class _DeviceSettingsTabState extends State { } Future> fetchDeviceDetails() async { + context.read().getAudit("REG-SYNC-004","REG-MOD-102"); List deviceDetails = []; try { await Future.delayed(const Duration(seconds: 1)); diff --git a/lib/utils/inactivity_tracker.dart b/lib/utils/inactivity_tracker.dart index 3c1bfee90..014ccb6a9 100644 --- a/lib/utils/inactivity_tracker.dart +++ b/lib/utils/inactivity_tracker.dart @@ -94,12 +94,13 @@ class _InactivityTrackerState extends State with WidgetsBindi _warningShown = true; _dialogOpen = true; _countdown.value = widget.gracePeriod.inSeconds; - + globalProvider.getAudit("REG-SCH-002", "REG-MOD-103"); _logoutTicker = Timer.periodic(const Duration(seconds: 1), (t) { _countdown.value -= 1; if (_countdown.value <= 0) { t.cancel(); // Clear registration process data on auto logout + globalProvider.getAudit("REG-SCH-003", "REG-MOD-103"); globalProvider.clearRegistrationProcessData(); widget.onTimeout(); } From 74ce55ecd3745e34e9f882c7999f6ea08a62a933 Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Wed, 21 Jan 2026 12:08:56 +0530 Subject: [PATCH 06/17] Added ARC Audit Signed-off-by: Rakshithasai123 --- .../clientmanager/constant/AuditEvent.java | 22 ------------------- .../export_packet/widgets/export_button.dart | 1 - .../widgets/device_settings_tab.dart | 3 --- 3 files changed, 26 deletions(-) diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java index 60b92a4bd..a56d85d2e 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java @@ -158,28 +158,6 @@ public enum AuditEvent { SYNC_PRE_REGISTRATION_PACKET("REG-SYNC-007", USER_EVENT.getCode(), "SYNC_PRE_REGISTRATION_PACKET", "Sync pre-registration data"), - // Login and User related - LOGIN_MODES_FETCH("REG-AUTH-010", USER_EVENT.getCode(), "LOGIN_MODES_FETCH", "Fetching Login Modes"), - USER_STATUS_FETCH("REG-AUTH-011", USER_EVENT.getCode(), "USER_STATUS_FETCH", "Fetching User Status"), - VALIDATE_USER_CRED("REG-AUTH-012", USER_EVENT.getCode(), "VALIDATE_USER_CREDENTIALS", - "Validating User credentials"), - FETCH_USR_DET("REG-AUTH-013", USER_EVENT.getCode(), "FETCH_USER_DETAILS", "Fetching User Details"), - FETCH_CNTR_NAME("REG-AUTH-014", USER_EVENT.getCode(), "FETCH_CENTER_NAME", "Fetching Center Name"), - FETCH_CNTR_DET("REG-AUTH-015", USER_EVENT.getCode(), "FETCH_CENTER_DETAILS", "Fetching Center Details"), - FETCH_USR_ROLE("REG-AUTH-016", USER_EVENT.getCode(), "FETCH_USER_ROLE", "Fetching User Roles"), - SYNCJOB_INFO_FETCH("REG-SYNC-011", USER_EVENT.getCode(), "SYNC_JOB_INFO_FETCH", - "SyncJobInfo containing the sync control list and yet to export packet count fetched successfully"), - SYNC_INFO_VALIDATE("REG-SYNC-012", USER_EVENT.getCode(), "SYNC_INFO_VALIDATION", - "Validating the sync status ended successfully"), - SYNC_PKT_COUNT_VALIDATE("REG-SYNC-013", USER_EVENT.getCode(), "SYNC_PKT_COUNT_VALIDATION", - "Validating yet to export packets frequency with the configured limit count"), - PACKET_RETRIVE("REG-PKT-001", USER_EVENT.getCode(), "PACKET_RETRIVE", - "Packets which are in created state for approval are retrived"), - PACKET_UPDATE("REG-PKT-002", USER_EVENT.getCode(), "PACKET_UPDATE", - "Packets which are in created state are updated"), - SYNC_GEO_VALIDATE("REG-SYNC-014", USER_EVENT.getCode(), "SYNC_GEO_VALIDATE", - "Validating the geo information ended successfully"), - // Scheduler Util SCHEDULER_REFRESHED_TIMEOUT("REG-SCH-002", SYSTEM_EVENT.getCode(), "REFRESHED_TIMEOUT", "The time task remainder alert"), diff --git a/lib/ui/export_packet/widgets/export_button.dart b/lib/ui/export_packet/widgets/export_button.dart index dfcb7cadb..b9d682e9e 100644 --- a/lib/ui/export_packet/widgets/export_button.dart +++ b/lib/ui/export_packet/widgets/export_button.dart @@ -7,7 +7,6 @@ import '../../../provider/export_packet_provider.dart'; import '../../../utils/app_config.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import '../../../provider/global_provider.dart'; class ExportButton extends StatefulWidget { diff --git a/lib/ui/process_ui/widgets/device_settings_tab.dart b/lib/ui/process_ui/widgets/device_settings_tab.dart index 541907f1f..fb9fd87e6 100644 --- a/lib/ui/process_ui/widgets/device_settings_tab.dart +++ b/lib/ui/process_ui/widgets/device_settings_tab.dart @@ -5,8 +5,6 @@ import '../../../model/settings.dart'; import '../../../platform_spi/biometrics_service.dart'; import '../../../utils/app_config.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:provider/provider.dart'; -import 'package:registration_client/provider/global_provider.dart'; class DeviceSettingsTab extends StatefulWidget { DeviceSettingsTab( @@ -28,7 +26,6 @@ class _DeviceSettingsTabState extends State { } Future> fetchDeviceDetails() async { - context.read().getAudit("REG-SYNC-004","REG-MOD-102"); List deviceDetails = []; try { await Future.delayed(const Duration(seconds: 1)); From 6b79c55443f2128208fc9407593d8425524d43db Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Fri, 23 Jan 2026 18:28:53 +0530 Subject: [PATCH 07/17] Added ARC Audit Signed-off-by: Rakshithasai123 --- .../api_services/AuthenticationApi.java | 1 - .../api_services/DemographicsDetailsApi.java | 12 +- .../api_services/MachineDetailsApi.java | 2 +- .../api_services/PacketAuthenticationApi.java | 1 - .../api_services/RegistrationApi.java | 23 +- .../registration_client/utils/BatchJob.java | 1 - .../clientmanager/constant/AuditEvent.java | 1 + .../dto/registration/RegistrationDto.java | 8 - .../service/PacketServiceImpl.java | 6 +- .../PreRegistrationDataSyncServiceImpl.java | 1 - .../export_packet/widgets/upload_button.dart | 3 + lib/ui/login_page.dart | 2 +- lib/ui/onboard/home_page.dart | 21 +- lib/ui/process_ui/generic_process.dart | 13 + .../widgets/document_upload_control.dart | 335 ++++++++++-------- .../widgets/pre_reg_data_control.dart | 2 + 16 files changed, 237 insertions(+), 195 deletions(-) diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/AuthenticationApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/AuthenticationApi.java index 92ffa895c..5055dc69c 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/AuthenticationApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/AuthenticationApi.java @@ -198,7 +198,6 @@ private void offlineLogin(final String username, final String password, AuthResp @Override public void login(@NonNull String username, @NonNull String password, @NonNull Boolean isConnected, @NonNull AuthResponsePigeon.Result result) { - auditManagerService.audit(AuditEvent.LOGIN_AUTHENTICATE_USER_ID, Components.LOGIN); auditManagerService.audit(AuditEvent.LOGIN_WITH_PASSWORD, Components.LOGIN); if(loginService.isUserLocked(username)) { result.success(getAuthErrorResponse(LOCKOUT_ERROR_CODE)); diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java index 746af7e1c..cfa81914f 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java @@ -47,16 +47,10 @@ public DemographicsDetailsApi(RegistrationService registrationService, AuditMana @Override public void addDemographicField(@NonNull String fieldId,@NonNull String value,@NonNull DemographicsDataPigeon.Result result) { try { - RegistrationDto dto = registrationService.getRegistrationDto(); - auditManagerService.audit(AuditEvent.REG_DEMO_CAPTURE, Components.REGISTRATION); - Log.i("AUDIT", "Logged REG_DEMO_CAPTURE - Started capturing demographic details"); - dto.setDemoCaptureAudited(true); - dto.addDemographicField(fieldId, value); - result.success("Ok"); + this.registrationService.getRegistrationDto().addDemographicField(fieldId, value); + result.success("Ok"); } catch (Exception e) { - Log.e(getClass().getSimpleName(), - "Add field failed!", e); - result.error(e); + Log.e(getClass().getSimpleName(), "Add field failed!" + Arrays.toString(e.getStackTrace())); } } diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/MachineDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/MachineDetailsApi.java index a61a39871..0b8f4a487 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/MachineDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/MachineDetailsApi.java @@ -45,7 +45,7 @@ public MachineDetailsApi(ClientCryptoManagerService clientCryptoManagerService, @Override public void getMachineDetails(@NonNull MachinePigeon.Result result) { - auditManagerService.audit(AuditEvent.SYNC_MACHINE_DETAILS,Components.REGISTRATION,"Sync machine details"); + auditManagerService.audit(AuditEvent.SYNC_MACHINE_DETAILS,Components.REGISTRATION); Map machineDetails = new HashMap<>(); Map details = clientCryptoManagerService.getMachineDetails(); diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java index d3e78f9ad..1207675ff 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java @@ -151,7 +151,6 @@ public void onComplete(String RID, PacketTaskStatus status) { @Override public void uploadPacketAll(@NonNull List packetIds, @NonNull PacketAuthPigeon.Result result) { - auditManagerService.audit(AuditEvent.NAV_UPLOAD_PACKETS, Components.REGISTRATION); Integer packetSize = packetIds.size(); final Integer[] remainingPack = {packetSize, 0}; CustomToast newToast = new CustomToast(activity); diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java index 4f45ba09e..7c4d98dcb 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java @@ -48,28 +48,7 @@ public RegistrationApi(RegistrationService registrationService, TemplateService @Override public void startRegistration(@NonNull List languages, @NonNull String flowType, @NonNull String process, @NonNull RegistrationDataPigeon.Result result) { - - - String flowTypeUpper = flowType.toUpperCase().trim(); - - - switch (flowTypeUpper) { - case "NEW": - auditManagerService.audit(AuditEvent.NAV_NEW_REG, Components.REGISTRATION); - break; - case "LOST": - auditManagerService.audit(AuditEvent.NAV_LOST_UIN, Components.REGISTRATION); - break; - case "UPDATE": - auditManagerService.audit(AuditEvent.NAV_UIN_UPDATE, Components.REGISTRATION); - break; - case "CORRECTION": - auditManagerService.audit(AuditEvent.NAV_CORRECTION, Components.REGISTRATION); - break; - default: - Log.w("RegistrationApi", "NO MATCH for process: '" + flowTypeUpper + "'"); - break; - } + auditManagerService.audit(AuditEvent.REGISTRATION_START, Components.REGISTRATION); String response = ""; try { this.registrationDto = registrationService.startRegistration(languages, flowType, process); diff --git a/android/app/src/main/java/io/mosip/registration_client/utils/BatchJob.java b/android/app/src/main/java/io/mosip/registration_client/utils/BatchJob.java index 085852d05..3c60a4c58 100644 --- a/android/app/src/main/java/io/mosip/registration_client/utils/BatchJob.java +++ b/android/app/src/main/java/io/mosip/registration_client/utils/BatchJob.java @@ -73,7 +73,6 @@ private List getRegistrationList(List statusList) { public void syncRegistrationPackets(Context context) { Log.d(getClass().getSimpleName(), "Sync Packets in Batch Job"); - auditManagerService.audit(AuditEvent.SYNC_SERVER,Components.REG_PACKET_LIST); List registrationList = getRegistrationList(Arrays.asList(PacketClientStatus.APPROVED.name(), PacketClientStatus.REJECTED.name())); final Integer[] remainingPack = {registrationList.size(), 0}; diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java index a56d85d2e..5316980dd 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java @@ -80,6 +80,7 @@ public enum AuditEvent { REG_DEMO_CAPTURE("REG-EVT-110", USER_EVENT.getCode(), "REG_DEMO_NEXT", "FvStarted capturing demographic details"), REG_DEMO_PRE_REG_DATA_FETCH("REG-EVT-008", USER_EVENT.getCode(), "REG_DEMO_PRE_REG_DATA_FETCH", "Pre-registration: Fetch data for selected Pre-registration"), REG_DEMO_NEXT("REG-EVT-105", USER_EVENT.getCode(), "REG_DEMO_NEXT", "Click of Next after capturing demographic details"), + // Registration Preview REG_PREVIEW_DEMO_EDIT("REG-EVT-114", USER_EVENT.getCode(), "REG_PREVIEW_DEMO_EDIT", "Click of Edit demographics"), REG_PREVIEW_DOC_EDIT("REG-EVT-112", USER_EVENT.getCode(), "REG_PREVIEW_DOC_EDIT", "Click of Edit documents"), diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java index 00fb270a2..909a21ce2 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java @@ -119,14 +119,6 @@ public void setMakerDetails() { public void setReviewerDetails() { //TODO } - private boolean demoCaptureAudited = false; - - public boolean isDemoCaptureAudited() { - return demoCaptureAudited; - } - public void setDemoCaptureAudited(boolean audited) { - this.demoCaptureAudited = audited; - } public void setDateField(String fieldId, String subType, String day, String month, String year) { if(isValidValue(day) && isValidValue(month) && isValidValue(year)) { LocalDate date = LocalDate.of(Integer.valueOf(year), Integer.valueOf(month), Integer.valueOf(day)); diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java index c7c298cf8..fe7b83760 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java @@ -57,12 +57,9 @@ import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; -import io.mosip.registration.clientmanager.spi.AuditManagerService; -import io.mosip.registration.clientmanager.constant.AuditEvent; -import io.mosip.registration.clientmanager.constant.Components; + @Singleton public class PacketServiceImpl implements PacketService { - private AuditManagerService auditManagerService; private static final String TAG = PacketServiceImpl.class.getSimpleName(); public static final String PACKET_EXTERNAL_STATUS_READER_ID = "mosip.registration.packet.external.status"; public static final String PACKET_STATUS_READER_ID = "mosip.registration.status"; @@ -92,7 +89,6 @@ public PacketServiceImpl(Context context, RegistrationRepository registrationRep this.syncRestService = syncRestService; this.masterDataService = masterDataService; this.globalParamRepository = globalParamRepository; - this.auditManagerService = auditManagerService; } @Override diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PreRegistrationDataSyncServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PreRegistrationDataSyncServiceImpl.java index 0c4c35ec6..532505a56 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PreRegistrationDataSyncServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PreRegistrationDataSyncServiceImpl.java @@ -137,7 +137,6 @@ public void fetchPreRegistrationIds(Runnable onFinish, String jobId) { //REST call to get Pre Registration Id's Call> call = this.syncRestService.getPreRegistrationIds(preRegistrationDataSyncDto); - auditManager.audit(AuditEvent.SYNC_PRE_REGISTRATION_PACKET,Components.REGISTRATION,"Sync pre-registration data started"); Log.i(TAG,"REST API Url "+call); call.enqueue(new Callback>() { @Override diff --git a/lib/ui/export_packet/widgets/upload_button.dart b/lib/ui/export_packet/widgets/upload_button.dart index 151b09cfa..6460c4285 100644 --- a/lib/ui/export_packet/widgets/upload_button.dart +++ b/lib/ui/export_packet/widgets/upload_button.dart @@ -5,6 +5,7 @@ import '../../../provider/connectivity_provider.dart'; import '../../../provider/export_packet_provider.dart'; import '../../../utils/app_config.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import '../../../provider/global_provider.dart'; class UploadButton extends StatefulWidget { const UploadButton({super.key}); @@ -38,6 +39,8 @@ class _UploadButtonState extends State { return OutlinedButton( onPressed:(context.watch().countSelected==0)?null: () async { + Provider.of(context, listen: false).getAudit("REG-SYNC-014", "REG-MOD-102"); + await connectivityProvider.checkNetworkConnection(); if (!connectivityProvider.isConnected) { _showInSnackBar(appLocalizations.network_error); diff --git a/lib/ui/login_page.dart b/lib/ui/login_page.dart index c150cade3..4c1f0895c 100644 --- a/lib/ui/login_page.dart +++ b/lib/ui/login_page.dart @@ -247,7 +247,7 @@ class _LoginPageState extends State with WidgetsBindingObserver { _showInSnackBar(appLocalizations.username_incorrect); return; } - + globalProvider.getAudit("REG-AUTH-001","REG-MOD-101"); final User user = authProvider.currentUser; globalProvider.setCenterId(user.centerId!); globalProvider.setName(user.name!); diff --git a/lib/ui/onboard/home_page.dart b/lib/ui/onboard/home_page.dart index 385db4889..3c1b47e19 100644 --- a/lib/ui/onboard/home_page.dart +++ b/lib/ui/onboard/home_page.dart @@ -134,6 +134,22 @@ class _HomePageState extends State { } globalProvider.createRegistrationLanguageMap(); //globalProvider.getAudit("REG-HOME-002", "REG-MOD-102"); + String auditeventid="REG-EVT-002"; + switch(process.flow){ + case "NEW": + auditeventid="REG-EVT-002"; + break; + case "UPDATE": + auditeventid="REG-EVT-003"; + break; + case "LOST": + auditeventid="REG-EVT-001"; + break; + case "CORRECTION": + auditeventid="REG-EVT-007"; + break; + } + globalProvider.getAudit(auditeventid, "REG-MOD-102"); showDialog( context: context, builder: (BuildContext context) => LanguageSelector( @@ -237,7 +253,8 @@ class _HomePageState extends State { "assets/svg/Uploading Local - Registration Data.svg", ), "title": appLocalizations.appliction_upload, - "onTap": (context) { + "onTap": (context){ + Provider.of(context, listen: false).getAudit("REG-EVT-005", "REG-MOD-102"); Navigator.push( context, MaterialPageRoute( @@ -290,7 +307,7 @@ class _HomePageState extends State { return MobileHomePage( operationalTasks: operationalTasks, getProcessUI: (BuildContext context, Process process) { - getProcessUI(context, process); + return getProcessUI(context, process); }, syncData: (BuildContext context) { syncData(context); diff --git a/lib/ui/process_ui/generic_process.dart b/lib/ui/process_ui/generic_process.dart index c906ecf53..4711227e0 100644 --- a/lib/ui/process_ui/generic_process.dart +++ b/lib/ui/process_ui/generic_process.dart @@ -701,6 +701,19 @@ class _GenericProcessState extends State } _nextButtonClickedAudit(); + final currentScreen = + process.screens![globalProvider.newProcessTabIndex]!; + + final localizedDemographicName = + AppLocalizations.of(context)!.demographicsScreenName( + globalProvider.selectedLanguage, + ); + + final screenLabel = currentScreen.label?[globalProvider.selectedLanguage]; + + if (screenLabel == localizedDemographicName) { + globalProvider.getAudit("REG-EVT-110", "REG-MOD-102"); + } } else { if (globalProvider.newProcessTabIndex == size + 1) { bool isPacketAuthenticated = await _authenticatePacket(context); diff --git a/lib/ui/process_ui/widgets/document_upload_control.dart b/lib/ui/process_ui/widgets/document_upload_control.dart index 91782dca6..ea0509fc7 100644 --- a/lib/ui/process_ui/widgets/document_upload_control.dart +++ b/lib/ui/process_ui/widgets/document_upload_control.dart @@ -49,108 +49,6 @@ class _DocumentUploadControlState extends State { } int maxFileSize = 2 * 1024 * 1024; // Default 2MB - Future _logDocumentAudit(String action) async { - String eventId=""; - final String subType = (widget.field.subType ?? "").toUpperCase(); - - switch (action) { - case "SCAN": - switch (subType) { - case "POA": - eventId = "REG-EVT-010"; - break; - case "POI": - eventId = "REG-EVT-013"; - break; - case "POR": - eventId = "REG-EVT-016"; - break; - case "POB": - eventId = "REG-EVT-019"; - break; - case "POE": - eventId = "REG-EVT-022"; - break; - default: - eventId = ""; - } - break; - - case "VIEW": - switch (subType) { - case "POA": - eventId = "REG-EVT-011"; - break; - case "POI": - eventId = "REG-EVT-014"; - break; - case "POR": - eventId = "REG-EVT-017"; - break; - case "POB": - eventId = "REG-EVT-020"; - break; - case "POE": - eventId = "REG-EVT-023"; - break; - default: - eventId = ""; - } - break; - - case "DELETE": - switch (subType) { - case "POA": - eventId = "REG-EVT-012"; - break; - case "POI": - eventId = "REG-EVT-015"; - break; - case "POR": - eventId = "REG-EVT-018"; - break; - case "POB": - eventId = "REG-EVT-021"; - break; - case "POE": - eventId = "REG-EVT-024"; - break; - default: - eventId = ""; - } - break; - - } - - if (eventId.isNotEmpty) { - await context.read().getAudit( - eventId, - "REG-MOD-103", - ); - } - } - Future _documentAudit(String action) async { - String event=""; - - switch (action) { - case "SCAN": - event = "REG-EVT-089"; - break; - case "VIEW": - event = "REG-EVT-090"; - break; - case "DELETE": - event = "REG-EVT-091"; - break; - default: - event =""; - } - - if (event.isNotEmpty) { - await context.read() - .getAudit(event, "REG-MOD-103"); - } - } _fetchMaxFileSize() async { try { @@ -371,10 +269,6 @@ class _DocumentUploadControlState extends State { } } - _documentScanClickedAudit() { - _documentAudit("SCAN"); - _logDocumentAudit("SCAN"); - } Future> getImageBytes(String imagePath) async { final File imageFile = File(imagePath); @@ -602,19 +496,43 @@ class _DocumentUploadControlState extends State { onPressed: (documentController.text == "") ? null : () async { - _documentScanClickedAudit(); - var doc = await Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - CustomScanner( - field: widget.field)), - ); - - await addDocument( - doc, widget.field, referenceNumber); - await getScannedDocuments(widget.field); - }, + String eventId = ""; + final String subType = + (widget.field.subType ?? "").toUpperCase(); + switch (subType) { + case "POA": + eventId = "REG-EVT-010"; + break; + case "POI": + eventId = "REG-EVT-013"; + break; + case "POR": + eventId = "REG-EVT-016"; + break; + case "POB": + eventId = "REG-EVT-019"; + break; + case "POE": + eventId = "REG-EVT-022"; + break; + } + if (eventId.isNotEmpty) { + context + .read() + .getAudit(eventId, "REG-MOD-103"); + } + context + .read() + .getAudit("REG-EVT-089", "REG-MOD-103"); + var doc = await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => CustomScanner(field: widget.field), + ), + ); + await addDocument(doc, widget.field, referenceNumber); + await getScannedDocuments(widget.field); + }, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -651,8 +569,35 @@ class _DocumentUploadControlState extends State { children: [ InkWell( onTap: () { - _documentAudit("VIEW"); - _logDocumentAudit("VIEW"); + String eventId = ""; + final String subType = + (widget.field.subType ?? "").toUpperCase(); + + switch (subType) { + case "POA": + eventId = "REG-EVT-011"; + break; + case "POI": + eventId = "REG-EVT-014"; + break; + case "POR": + eventId = "REG-EVT-017"; + break; + case "POB": + eventId = "REG-EVT-020"; + break; + case "POE": + eventId = "REG-EVT-023"; + break; + } + if (eventId.isNotEmpty) { + context + .read() + .getAudit(eventId, "REG-MOD-103"); + } + context + .read() + .getAudit("REG-EVT-090", "REG-MOD-103"); Navigator.push( context, MaterialPageRoute( @@ -673,9 +618,35 @@ class _DocumentUploadControlState extends State { ), SizedBox(height: 2.h), GestureDetector( - onTap: () { - _documentAudit("DELETE"); - _logDocumentAudit("DELETE"); + onTap: () { + String eventId = ""; + final String subType = + (widget.field.subType ?? "").toUpperCase(); + switch (subType) { + case "POA": + eventId = "REG-EVT-012"; + break; + case "POI": + eventId = "REG-EVT-015"; + break; + case "POR": + eventId = "REG-EVT-018"; + break; + case "POB": + eventId = "REG-EVT-021"; + break; + case "POE": + eventId = "REG-EVT-024"; + break; + } + if (eventId.isNotEmpty) { + context + .read() + .getAudit(eventId, "REG-MOD-103"); + } + context + .read() + .getAudit("REG-EVT-091", "REG-MOD-103"); _deleteImage(widget.field, item); _removeFieldValue(widget.field, item); _setRemoveScannedPages(widget.field, @@ -875,18 +846,44 @@ class _DocumentUploadControlState extends State { onPressed: (documentController.text == "") ? null : () async { - _documentScanClickedAudit(); - var doc = await Navigator.push( - context, - MaterialPageRoute( - builder: (context) => CustomScanner( - field: widget.field)), - ); - await addDocument( - doc, widget.field, referenceNumber); + String eventId = ""; + final String subType = + (widget.field.subType ?? "").toUpperCase(); + switch (subType) { + case "POA": + eventId = "REG-EVT-010"; + break; + case "POI": + eventId = "REG-EVT-013"; + break; + case "POR": + eventId = "REG-EVT-016"; + break; + case "POB": + eventId = "REG-EVT-019"; + break; + case "POE": + eventId = "REG-EVT-022"; + break; + } + if (eventId.isNotEmpty) { + context + .read() + .getAudit(eventId, "REG-MOD-103"); + } + context + .read() + .getAudit("REG-EVT-089", "REG-MOD-103"); + var doc = await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => CustomScanner(field: widget.field), + ), + ); - await getScannedDocuments(widget.field); - }, + await addDocument(doc, widget.field, referenceNumber); + await getScannedDocuments(widget.field); + }, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -921,14 +918,40 @@ class _DocumentUploadControlState extends State { child: Column( children: [ InkWell( - onTap: () { - _documentAudit("VIEW"); - _logDocumentAudit("VIEW"); + onTap: () { + String eventId = ""; + final String subType = + (widget.field.subType ?? "").toUpperCase(); + switch (subType) { + case "POA": + eventId = "REG-EVT-011"; + break; + case "POI": + eventId = "REG-EVT-014"; + break; + case "POR": + eventId = "REG-EVT-017"; + break; + case "POB": + eventId = "REG-EVT-020"; + break; + case "POE": + eventId = "REG-EVT-023"; + break; + } + if (eventId.isNotEmpty) { + context + .read() + .getAudit(eventId, "REG-MOD-103"); + } + context + .read() + .getAudit("REG-EVT-090", "REG-MOD-103"); Navigator.push( context, MaterialPageRoute( - builder: (context) => - PreviewScreen(bytes: item)), + builder: (context) => PreviewScreen(bytes: item), + ), ); }, child: SizedBox( @@ -944,9 +967,35 @@ class _DocumentUploadControlState extends State { ), SizedBox(height: 10.h), GestureDetector( - onTap: () { - _documentAudit("DELETE"); - _logDocumentAudit("DELETE"); + onTap: () { + String eventId = ""; + final String subType = + (widget.field.subType ?? "").toUpperCase(); + switch (subType) { + case "POA": + eventId = "REG-EVT-012"; + break; + case "POI": + eventId = "REG-EVT-015"; + break; + case "POR": + eventId = "REG-EVT-018"; + break; + case "POB": + eventId = "REG-EVT-021"; + break; + case "POE": + eventId = "REG-EVT-024"; + break; + } + if (eventId.isNotEmpty) { + context + .read() + .getAudit(eventId, "REG-MOD-103"); + } + context + .read() + .getAudit("REG-EVT-091", "REG-MOD-103"); _deleteImage(widget.field, item); _removeFieldValue(widget.field, item); _setRemoveScannedPages(widget.field, diff --git a/lib/ui/process_ui/widgets/pre_reg_data_control.dart b/lib/ui/process_ui/widgets/pre_reg_data_control.dart index 756235519..ec985dfdd 100644 --- a/lib/ui/process_ui/widgets/pre_reg_data_control.dart +++ b/lib/ui/process_ui/widgets/pre_reg_data_control.dart @@ -273,6 +273,7 @@ class _PreRegDataControlState extends State { ), ), onPressed: () async { + globalProvider.getAudit("REG-SYNC-007", "REG-MOD-102"); widget.onFetched(); // Validate form field first if (!_formFieldKey.currentState!.validate()) { @@ -348,6 +349,7 @@ class _PreRegDataControlState extends State { ), ), onPressed: () async { + globalProvider.getAudit("REG-SYNC-007", "REG-MOD-102"); widget.onFetched(); var data = await Navigator.push( context, From 497b804c304bbbfacd153debe0631c21697752f1 Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Fri, 23 Jan 2026 18:56:45 +0530 Subject: [PATCH 08/17] Added ARC Audit Signed-off-by: Rakshithasai123 --- lib/ui/process_ui/generic_process.dart | 31 ++++++++++++++++---------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/lib/ui/process_ui/generic_process.dart b/lib/ui/process_ui/generic_process.dart index 4711227e0..52574d177 100644 --- a/lib/ui/process_ui/generic_process.dart +++ b/lib/ui/process_ui/generic_process.dart @@ -658,9 +658,11 @@ class _GenericProcessState extends State } if (globalProvider.newProcessTabIndex < size) { - await ageDateChangeValidation(globalProvider.newProcessTabIndex, process, size); + await ageDateChangeValidation( + globalProvider.newProcessTabIndex, process, size); bool customValidator = - await customValidation(globalProvider.newProcessTabIndex, process, size); + await customValidation( + globalProvider.newProcessTabIndex, process, size); if (customValidator) { if (globalProvider.formKey.currentState!.validate()) { // Additional info validation - prevent navigation if required but not filled @@ -701,20 +703,25 @@ class _GenericProcessState extends State } _nextButtonClickedAudit(); - final currentScreen = - process.screens![globalProvider.newProcessTabIndex]!; - final localizedDemographicName = - AppLocalizations.of(context)!.demographicsScreenName( - globalProvider.selectedLanguage, - ); + if (globalProvider.newProcessTabIndex < size) { + final currentScreen = + process.screens![globalProvider.newProcessTabIndex]!; - final screenLabel = currentScreen.label?[globalProvider.selectedLanguage]; + final localizedDemographicName = + AppLocalizations.of(context)!.demographicsScreenName( + globalProvider.selectedLanguage, + ); - if (screenLabel == localizedDemographicName) { - globalProvider.getAudit("REG-EVT-110", "REG-MOD-102"); + final screenLabel = + currentScreen.label?[globalProvider.selectedLanguage]; + + if (screenLabel == localizedDemographicName) { + globalProvider.getAudit("REG-EVT-110", "REG-MOD-102"); + } } - } else { + } + else { if (globalProvider.newProcessTabIndex == size + 1) { bool isPacketAuthenticated = await _authenticatePacket(context); if (!isPacketAuthenticated) { From d96259b920a3b1c56c34864d6f769eb057366619 Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Tue, 27 Jan 2026 14:42:23 +0530 Subject: [PATCH 09/17] Added ARC Audit Signed-off-by: Rakshithasai123 --- .../registration_client/HostApiModule.java | 2 +- .../api_services/DemographicsDetailsApi.java | 5 +- .../api_services/PacketAuthenticationApi.java | 7 +- .../api_services/RegistrationApi.java | 1 - .../clientmanager/config/AppModule.java | 2 +- .../clientmanager/config/RoomModule.java | 6 +- .../dto/registration/RegistrationDto.java | 1 + .../service/PacketServiceImpl.java | 1 + .../PreRegistrationDataSyncServiceImpl.java | 8 +- lib/ui/process_ui/generic_process.dart | 1 + .../widgets/document_upload_control.dart | 305 ++++++++---------- lib/ui/scanner/custom_scanner.dart | 9 +- 12 files changed, 141 insertions(+), 207 deletions(-) diff --git a/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java b/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java index abe440579..89b4fcccf 100644 --- a/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java +++ b/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java @@ -160,7 +160,7 @@ RegistrationApi getRegistrationDataApi(RegistrationService registrationService, PacketAuthenticationApi getPacketAuthenticationApi(SyncRestService syncRestService, SyncRestUtil syncRestFactory, LoginService loginService, PacketService packetService, RegistrationRepository registrationRepository, AuditManagerService auditManagerService,UserDetailRepository userDetailRepository) { - return new PacketAuthenticationApi(syncRestService, syncRestFactory, loginService, packetService,registrationRepository, auditManagerService,userDetailRepository); + return new PacketAuthenticationApi(syncRestService, syncRestFactory, loginService, packetService,registrationRepository, auditManagerService); } @Provides diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java index cfa81914f..9939fec9e 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java @@ -24,8 +24,6 @@ import io.mosip.registration.keymanager.util.CryptoUtil; import io.mosip.registration.packetmanager.dto.SimpleType; import io.mosip.registration_client.model.DemographicsDataPigeon; -import io.mosip.registration.clientmanager.constant.AuditEvent; -import io.mosip.registration.clientmanager.constant.Components; @Singleton public class DemographicsDetailsApi implements DemographicsDataPigeon.DemographicsApi { @@ -33,7 +31,6 @@ public class DemographicsDetailsApi implements DemographicsDataPigeon.Demographi AuditManagerService auditManagerService; private static final String GET_FIELD_FAILED_MESSAGE = "Get field failed!"; - GlobalParamRepository globalParamRepository; @Inject @@ -45,7 +42,7 @@ public DemographicsDetailsApi(RegistrationService registrationService, AuditMana @Override - public void addDemographicField(@NonNull String fieldId,@NonNull String value,@NonNull DemographicsDataPigeon.Result result) { + public void addDemographicField(@NonNull String fieldId, @NonNull String value, @NonNull DemographicsDataPigeon.Result result) { try { this.registrationService.getRegistrationDto().addDemographicField(fieldId, value); result.success("Ok"); diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java index 1207675ff..0f93260df 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/PacketAuthenticationApi.java @@ -37,8 +37,6 @@ import io.mosip.registration_client.MainActivity; import io.mosip.registration_client.R; import io.mosip.registration_client.model.PacketAuthPigeon; -import io.mosip.registration.clientmanager.repository.UserDetailRepository; -import io.mosip.registration.clientmanager.entity.UserDetail; @Singleton public class PacketAuthenticationApi implements PacketAuthPigeon.PacketAuthApi { SyncRestService syncRestService; @@ -49,7 +47,6 @@ public class PacketAuthenticationApi implements PacketAuthPigeon.PacketAuthApi { RegistrationRepository registrationRepository; private Activity activity; - private UserDetailRepository userDetailRepository; public void setCallbackActivity(MainActivity mainActivity) { this.activity = mainActivity; } @@ -57,15 +54,13 @@ public void setCallbackActivity(MainActivity mainActivity) { @Inject public PacketAuthenticationApi(SyncRestService syncRestService, SyncRestUtil syncRestFactory, LoginService loginService, PacketService packetService, RegistrationRepository registrationRepository, - AuditManagerService auditManagerService, - UserDetailRepository userDetailRepository) { + AuditManagerService auditManagerService) { this.syncRestService = syncRestService; this.syncRestFactory = syncRestFactory; this.loginService = loginService; this.packetService = packetService; this.registrationRepository = registrationRepository; this.auditManagerService = auditManagerService; - this.userDetailRepository = userDetailRepository; } private PacketAuthPigeon.PacketAuth getAuthErrorResponse(String errorCode) { diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java index 7c4d98dcb..5fe49881f 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/RegistrationApi.java @@ -103,7 +103,6 @@ public void getPreviewTemplate(@NonNull Boolean isPreview, @NonNull Map result) { - auditManagerService.audit(AuditEvent.REG_DEMO_NEXT, Components.REGISTRATION); String response = ""; String errorCode = ""; try { diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java index eaafefdf9..598f2fd70 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java @@ -290,7 +290,7 @@ TemplateService TemplateService(MasterDataService masterDataService, IdentitySch @Provides @Singleton PreRegistrationDataSyncService PreRegistrationDataSyncService(PreRegistrationDataSyncDao preRegistrationDao, MasterDataService masterDataService, SyncRestService syncRestService, PreRegZipHandlingService preRegZipHandlingService, PreRegistrationList preRegistration, GlobalParamRepository globalParamRepository, RegistrationService registrationService, AuditManagerService auditManagerService) { - return new PreRegistrationDataSyncServiceImpl(appContext, preRegistrationDao, masterDataService, syncRestService, preRegZipHandlingService, preRegistration, globalParamRepository, registrationService, auditManagerService); + return new PreRegistrationDataSyncServiceImpl(appContext, preRegistrationDao, masterDataService, syncRestService, preRegZipHandlingService, preRegistration, globalParamRepository, registrationService); } @Provides diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java index c3c46ef4e..c7c67b01b 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java @@ -353,7 +353,7 @@ DocumentTypeRepository provideDocumentTypeRepository(DocumentTypeDao documentTyp @Provides @Singleton ApplicantValidDocRepository provideApplicantValidDocRepository(ApplicantValidDocumentDao - applicantValidDocumentDao) { + applicantValidDocumentDao) { return new ApplicantValidDocRepository(applicantValidDocumentDao); } @@ -471,8 +471,8 @@ LocalPreferencesDao providesLocalPreferencesDao(ClientDatabase clientDatabase) { @Singleton LocalConfigDAO provideLocalConfigDAO(PermittedLocalConfigDao permittedLocalConfigDao, LocalPreferencesDao localPreferencesDao) { return new LocalConfigDAOImpl( - new PermittedLocalConfigRepository(permittedLocalConfigDao), - new LocalPreferencesRepository(localPreferencesDao) + new PermittedLocalConfigRepository(permittedLocalConfigDao), + new LocalPreferencesRepository(localPreferencesDao) ); } } diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java index 909a21ce2..565381e44 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java @@ -119,6 +119,7 @@ public void setMakerDetails() { public void setReviewerDetails() { //TODO } + public void setDateField(String fieldId, String subType, String day, String month, String year) { if(isValidValue(day) && isValidValue(month) && isValidValue(year)) { LocalDate date = LocalDate.of(Integer.valueOf(year), Integer.valueOf(month), Integer.valueOf(day)); diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java index fe7b83760..f7c3d5f30 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java @@ -60,6 +60,7 @@ @Singleton public class PacketServiceImpl implements PacketService { + private static final String TAG = PacketServiceImpl.class.getSimpleName(); public static final String PACKET_EXTERNAL_STATUS_READER_ID = "mosip.registration.packet.external.status"; public static final String PACKET_STATUS_READER_ID = "mosip.registration.status"; diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PreRegistrationDataSyncServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PreRegistrationDataSyncServiceImpl.java index 532505a56..254aff425 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PreRegistrationDataSyncServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PreRegistrationDataSyncServiceImpl.java @@ -41,9 +41,6 @@ import androidx.annotation.NonNull; import org.apache.commons.io.FileUtils; -import io.mosip.registration.clientmanager.constant.AuditEvent; -import io.mosip.registration.clientmanager.constant.Components; -import io.mosip.registration.clientmanager.spi.AuditManagerService; import java.io.File; import java.time.Instant; @@ -84,9 +81,8 @@ public class PreRegistrationDataSyncServiceImpl implements PreRegistrationDataSy ExecutorService executorServiceForPreReg = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); public static final String APPLICATION_ID_SYNC_FAILED = "application_id_sync_failed"; public static final String ERROR_FETCH_PRE_REG_PACKET = "Failed to fetch pre-reg packet"; - private final AuditManagerService auditManager; - public PreRegistrationDataSyncServiceImpl(Context context,PreRegistrationDataSyncDao preRegistrationDao,MasterDataService masterDataService,SyncRestService syncRestService,PreRegZipHandlingService preRegZipHandlingService,PreRegistrationList preRegistration,GlobalParamRepository globalParamRepository,RegistrationService registrationService,AuditManagerService auditManager){ + public PreRegistrationDataSyncServiceImpl(Context context,PreRegistrationDataSyncDao preRegistrationDao,MasterDataService masterDataService,SyncRestService syncRestService,PreRegZipHandlingService preRegZipHandlingService,PreRegistrationList preRegistration,GlobalParamRepository globalParamRepository,RegistrationService registrationService){ this.context = context; this.preRegistrationDao = preRegistrationDao; this.masterDataService = masterDataService; @@ -95,7 +91,6 @@ public PreRegistrationDataSyncServiceImpl(Context context,PreRegistrationDataSyn this.preRegistration = preRegistration; this.globalParamRepository = globalParamRepository; this.registrationService = registrationService; - this.auditManager = auditManager; sharedPreferences = this.context.getSharedPreferences( this.context.getString(R.string.app_name), Context.MODE_PRIVATE); @@ -137,6 +132,7 @@ public void fetchPreRegistrationIds(Runnable onFinish, String jobId) { //REST call to get Pre Registration Id's Call> call = this.syncRestService.getPreRegistrationIds(preRegistrationDataSyncDto); + Log.i(TAG,"REST API Url "+call); call.enqueue(new Callback>() { @Override diff --git a/lib/ui/process_ui/generic_process.dart b/lib/ui/process_ui/generic_process.dart index 52574d177..63c3786a5 100644 --- a/lib/ui/process_ui/generic_process.dart +++ b/lib/ui/process_ui/generic_process.dart @@ -727,6 +727,7 @@ class _GenericProcessState extends State if (!isPacketAuthenticated) { return; } + await globalProvider.getAudit("REG-EVT-110","REG-MOD-103"); RegistrationSubmitResponse registrationSubmitResponse = await registrationTaskProvider.submitRegistrationDto(username); if (registrationSubmitResponse.errorCode != null && registrationSubmitResponse.errorCode!.isNotEmpty) { diff --git a/lib/ui/process_ui/widgets/document_upload_control.dart b/lib/ui/process_ui/widgets/document_upload_control.dart index ea0509fc7..573ce10a9 100644 --- a/lib/ui/process_ui/widgets/document_upload_control.dart +++ b/lib/ui/process_ui/widgets/document_upload_control.dart @@ -49,6 +49,108 @@ class _DocumentUploadControlState extends State { } int maxFileSize = 2 * 1024 * 1024; // Default 2MB + Future _logDocumentAudit(String action) async { + String eventId=""; + final String subType = (widget.field.subType ?? "").toUpperCase(); + + switch (action) { + case "SCAN": + switch (subType) { + case "POA": + eventId = "REG-EVT-010"; + break; + case "POI": + eventId = "REG-EVT-013"; + break; + case "POR": + eventId = "REG-EVT-016"; + break; + case "POB": + eventId = "REG-EVT-019"; + break; + case "POE": + eventId = "REG-EVT-022"; + break; + default: + eventId = ""; + } + break; + + case "VIEW": + switch (subType) { + case "POA": + eventId = "REG-EVT-011"; + break; + case "POI": + eventId = "REG-EVT-014"; + break; + case "POR": + eventId = "REG-EVT-017"; + break; + case "POB": + eventId = "REG-EVT-020"; + break; + case "POE": + eventId = "REG-EVT-023"; + break; + default: + eventId = ""; + } + break; + + case "DELETE": + switch (subType) { + case "POA": + eventId = "REG-EVT-012"; + break; + case "POI": + eventId = "REG-EVT-015"; + break; + case "POR": + eventId = "REG-EVT-018"; + break; + case "POB": + eventId = "REG-EVT-021"; + break; + case "POE": + eventId = "REG-EVT-024"; + break; + default: + eventId = ""; + } + break; + + } + + if (eventId.isNotEmpty) { + await context.read().getAudit( + eventId, + "REG-MOD-103", + ); + } + } + Future _documentAudit(String action) async { + String event=""; + + switch (action) { + case "SCAN": + event = "REG-EVT-089"; + break; + case "VIEW": + event = "REG-EVT-090"; + break; + case "DELETE": + event = "REG-EVT-091"; + break; + default: + event =""; + } + + if (event.isNotEmpty) { + await context.read() + .getAudit(event, "REG-MOD-103"); + } + } _fetchMaxFileSize() async { try { @@ -269,6 +371,10 @@ class _DocumentUploadControlState extends State { } } + _documentScanClickedAudit() { + _documentAudit("SCAN"); + _logDocumentAudit("SCAN"); + } Future> getImageBytes(String imagePath) async { final File imageFile = File(imagePath); @@ -496,41 +602,17 @@ class _DocumentUploadControlState extends State { onPressed: (documentController.text == "") ? null : () async { - String eventId = ""; - final String subType = - (widget.field.subType ?? "").toUpperCase(); - switch (subType) { - case "POA": - eventId = "REG-EVT-010"; - break; - case "POI": - eventId = "REG-EVT-013"; - break; - case "POR": - eventId = "REG-EVT-016"; - break; - case "POB": - eventId = "REG-EVT-019"; - break; - case "POE": - eventId = "REG-EVT-022"; - break; - } - if (eventId.isNotEmpty) { - context - .read() - .getAudit(eventId, "REG-MOD-103"); - } - context - .read() - .getAudit("REG-EVT-089", "REG-MOD-103"); + _documentScanClickedAudit(); var doc = await Navigator.push( context, MaterialPageRoute( - builder: (context) => CustomScanner(field: widget.field), - ), + builder: (context) => + CustomScanner( + field: widget.field)), ); - await addDocument(doc, widget.field, referenceNumber); + + await addDocument( + doc, widget.field, referenceNumber); await getScannedDocuments(widget.field); }, child: Row( @@ -569,35 +651,8 @@ class _DocumentUploadControlState extends State { children: [ InkWell( onTap: () { - String eventId = ""; - final String subType = - (widget.field.subType ?? "").toUpperCase(); - - switch (subType) { - case "POA": - eventId = "REG-EVT-011"; - break; - case "POI": - eventId = "REG-EVT-014"; - break; - case "POR": - eventId = "REG-EVT-017"; - break; - case "POB": - eventId = "REG-EVT-020"; - break; - case "POE": - eventId = "REG-EVT-023"; - break; - } - if (eventId.isNotEmpty) { - context - .read() - .getAudit(eventId, "REG-MOD-103"); - } - context - .read() - .getAudit("REG-EVT-090", "REG-MOD-103"); + _documentAudit("VIEW"); + _logDocumentAudit("VIEW"); Navigator.push( context, MaterialPageRoute( @@ -619,34 +674,8 @@ class _DocumentUploadControlState extends State { SizedBox(height: 2.h), GestureDetector( onTap: () { - String eventId = ""; - final String subType = - (widget.field.subType ?? "").toUpperCase(); - switch (subType) { - case "POA": - eventId = "REG-EVT-012"; - break; - case "POI": - eventId = "REG-EVT-015"; - break; - case "POR": - eventId = "REG-EVT-018"; - break; - case "POB": - eventId = "REG-EVT-021"; - break; - case "POE": - eventId = "REG-EVT-024"; - break; - } - if (eventId.isNotEmpty) { - context - .read() - .getAudit(eventId, "REG-MOD-103"); - } - context - .read() - .getAudit("REG-EVT-091", "REG-MOD-103"); + _documentAudit("DELETE"); + _logDocumentAudit("DELETE"); _deleteImage(widget.field, item); _removeFieldValue(widget.field, item); _setRemoveScannedPages(widget.field, @@ -846,42 +875,16 @@ class _DocumentUploadControlState extends State { onPressed: (documentController.text == "") ? null : () async { - String eventId = ""; - final String subType = - (widget.field.subType ?? "").toUpperCase(); - switch (subType) { - case "POA": - eventId = "REG-EVT-010"; - break; - case "POI": - eventId = "REG-EVT-013"; - break; - case "POR": - eventId = "REG-EVT-016"; - break; - case "POB": - eventId = "REG-EVT-019"; - break; - case "POE": - eventId = "REG-EVT-022"; - break; - } - if (eventId.isNotEmpty) { - context - .read() - .getAudit(eventId, "REG-MOD-103"); - } - context - .read() - .getAudit("REG-EVT-089", "REG-MOD-103"); + _documentScanClickedAudit(); var doc = await Navigator.push( context, MaterialPageRoute( - builder: (context) => CustomScanner(field: widget.field), - ), + builder: (context) => CustomScanner( + field: widget.field)), ); + await addDocument( + doc, widget.field, referenceNumber); - await addDocument(doc, widget.field, referenceNumber); await getScannedDocuments(widget.field); }, child: Row( @@ -919,39 +922,13 @@ class _DocumentUploadControlState extends State { children: [ InkWell( onTap: () { - String eventId = ""; - final String subType = - (widget.field.subType ?? "").toUpperCase(); - switch (subType) { - case "POA": - eventId = "REG-EVT-011"; - break; - case "POI": - eventId = "REG-EVT-014"; - break; - case "POR": - eventId = "REG-EVT-017"; - break; - case "POB": - eventId = "REG-EVT-020"; - break; - case "POE": - eventId = "REG-EVT-023"; - break; - } - if (eventId.isNotEmpty) { - context - .read() - .getAudit(eventId, "REG-MOD-103"); - } - context - .read() - .getAudit("REG-EVT-090", "REG-MOD-103"); + _documentAudit("VIEW"); + _logDocumentAudit("VIEW"); Navigator.push( context, MaterialPageRoute( - builder: (context) => PreviewScreen(bytes: item), - ), + builder: (context) => + PreviewScreen(bytes: item)), ); }, child: SizedBox( @@ -968,34 +945,8 @@ class _DocumentUploadControlState extends State { SizedBox(height: 10.h), GestureDetector( onTap: () { - String eventId = ""; - final String subType = - (widget.field.subType ?? "").toUpperCase(); - switch (subType) { - case "POA": - eventId = "REG-EVT-012"; - break; - case "POI": - eventId = "REG-EVT-015"; - break; - case "POR": - eventId = "REG-EVT-018"; - break; - case "POB": - eventId = "REG-EVT-021"; - break; - case "POE": - eventId = "REG-EVT-024"; - break; - } - if (eventId.isNotEmpty) { - context - .read() - .getAudit(eventId, "REG-MOD-103"); - } - context - .read() - .getAudit("REG-EVT-091", "REG-MOD-103"); + _documentAudit("DELETE"); + _logDocumentAudit("DELETE"); _deleteImage(widget.field, item); _removeFieldValue(widget.field, item); _setRemoveScannedPages(widget.field, diff --git a/lib/ui/scanner/custom_scanner.dart b/lib/ui/scanner/custom_scanner.dart index 7fee1b61b..4d923b42c 100644 --- a/lib/ui/scanner/custom_scanner.dart +++ b/lib/ui/scanner/custom_scanner.dart @@ -36,7 +36,6 @@ class _CustomScannerState extends State { CropMode mode = CropMode.rect; double? _aspectRatio; ImageFormat format = ImageFormat.jpg; - bool _previewAuditLogged = false; _documentScanFailedAudit() async { await context.read().getAudit("REG-EVT-050", "REG-MOD-103"); @@ -111,7 +110,6 @@ class _CustomScannerState extends State { : const SizedBox.shrink(); if (_pickedFile != null) { - //_documentPreviewAudit(); return Column( children: [ Expanded( @@ -158,7 +156,6 @@ class _CustomScannerState extends State { ), ), onPressed: () async { - _previewAuditLogged = false; _uploadImage(); }, child: Text( @@ -202,11 +199,7 @@ class _CustomScannerState extends State { final pickedFile = await ImagePicker().pickImage(source: ImageSource.camera); if (pickedFile != null) { _pickedFile = await pickedFile.readAsBytes(); - if (!_previewAuditLogged) { - _previewAuditLogged = true; - context.read() - .getAudit("REG-EVT-006", "REG-MOD-103"); - } + context.read().getAudit("REG-EVT-006", "REG-MOD-103"); setState(() {}); } else { Navigator.pop(context); From 7469dc7a111818883d95deeafca3c07b6f6e29ba Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Tue, 27 Jan 2026 15:04:28 +0530 Subject: [PATCH 10/17] Added ARC Audit Signed-off-by: Rakshithasai123 --- .../clientmanager/config/AppModule.java | 2 +- lib/ui/process_ui/generic_process.dart | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java index 598f2fd70..aa17ab068 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java @@ -289,7 +289,7 @@ TemplateService TemplateService(MasterDataService masterDataService, IdentitySch @Provides @Singleton - PreRegistrationDataSyncService PreRegistrationDataSyncService(PreRegistrationDataSyncDao preRegistrationDao, MasterDataService masterDataService, SyncRestService syncRestService, PreRegZipHandlingService preRegZipHandlingService, PreRegistrationList preRegistration, GlobalParamRepository globalParamRepository, RegistrationService registrationService, AuditManagerService auditManagerService) { + PreRegistrationDataSyncService PreRegistrationDataSyncService(PreRegistrationDataSyncDao preRegistrationDao, MasterDataService masterDataService, SyncRestService syncRestService, PreRegZipHandlingService preRegZipHandlingService, PreRegistrationList preRegistration, GlobalParamRepository globalParamRepository, RegistrationService registrationService) { return new PreRegistrationDataSyncServiceImpl(appContext, preRegistrationDao, masterDataService, syncRestService, preRegZipHandlingService, preRegistration, globalParamRepository, registrationService); } diff --git a/lib/ui/process_ui/generic_process.dart b/lib/ui/process_ui/generic_process.dart index 63c3786a5..0b0336f78 100644 --- a/lib/ui/process_ui/generic_process.dart +++ b/lib/ui/process_ui/generic_process.dart @@ -690,15 +690,14 @@ class _GenericProcessState extends State templateTitleMap!, ); } - if (globalProvider.newProcessTabIndex < size) { - final currentScreen = - process.screens![globalProvider.newProcessTabIndex]!; - if (currentScreen.name == "Documents") { - globalProvider.getAudit("REG-EVT-025", "REG-MOD-103"); + final nextIndex = globalProvider.newProcessTabIndex + 1; + if (nextIndex < size) { + final nextScreen = process.screens![nextIndex]!; + if (nextScreen.name == "Documents") { + globalProvider.getAudit("REG-EVT-025", "REG-MOD-103"); + } } - } - globalProvider.newProcessTabIndex = - globalProvider.newProcessTabIndex + 1; + globalProvider.newProcessTabIndex = nextIndex; } } From 0d508c7026d9b9b693ca531329da3aa58cc6cd5a Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Tue, 27 Jan 2026 15:20:37 +0530 Subject: [PATCH 11/17] Added ARC Audit Signed-off-by: Rakshithasai123 --- .../mosip/registration/clientmanager/config/RoomModule.java | 4 ++-- lib/ui/process_ui/generic_process.dart | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java index c7c67b01b..c97410969 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/RoomModule.java @@ -471,8 +471,8 @@ LocalPreferencesDao providesLocalPreferencesDao(ClientDatabase clientDatabase) { @Singleton LocalConfigDAO provideLocalConfigDAO(PermittedLocalConfigDao permittedLocalConfigDao, LocalPreferencesDao localPreferencesDao) { return new LocalConfigDAOImpl( - new PermittedLocalConfigRepository(permittedLocalConfigDao), - new LocalPreferencesRepository(localPreferencesDao) + new PermittedLocalConfigRepository(permittedLocalConfigDao), + new LocalPreferencesRepository(localPreferencesDao) ); } } diff --git a/lib/ui/process_ui/generic_process.dart b/lib/ui/process_ui/generic_process.dart index 0b0336f78..52c8095d0 100644 --- a/lib/ui/process_ui/generic_process.dart +++ b/lib/ui/process_ui/generic_process.dart @@ -99,7 +99,6 @@ class _GenericProcessState extends State } }, )); - //_registrationScreenLoadedAudit(); WidgetsBinding.instance.addPostFrameCallback((_) async { await _fetchLocation(); }); From 028945cfc6fd197a8d233f995458c29a5d09be7a Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Tue, 27 Jan 2026 15:30:38 +0530 Subject: [PATCH 12/17] Added ARC Audit Signed-off-by: Rakshithasai123 --- .../main/java/io/mosip/registration_client/HostApiModule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java b/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java index 89b4fcccf..c762251d7 100644 --- a/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java +++ b/android/app/src/main/java/io/mosip/registration_client/HostApiModule.java @@ -159,7 +159,7 @@ RegistrationApi getRegistrationDataApi(RegistrationService registrationService, @Singleton PacketAuthenticationApi getPacketAuthenticationApi(SyncRestService syncRestService, SyncRestUtil syncRestFactory, LoginService loginService, PacketService packetService, RegistrationRepository registrationRepository, - AuditManagerService auditManagerService,UserDetailRepository userDetailRepository) { + AuditManagerService auditManagerService) { return new PacketAuthenticationApi(syncRestService, syncRestFactory, loginService, packetService,registrationRepository, auditManagerService); } From 794526c2224bd8800738017a31c810962dfecbc9 Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Tue, 27 Jan 2026 15:37:02 +0530 Subject: [PATCH 13/17] Added ARC Audit Signed-off-by: Rakshithasai123 --- lib/ui/onboard/portrait/operational_tasks.dart | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/ui/onboard/portrait/operational_tasks.dart b/lib/ui/onboard/portrait/operational_tasks.dart index 0f7ba5a72..6ae66ade9 100644 --- a/lib/ui/onboard/portrait/operational_tasks.dart +++ b/lib/ui/onboard/portrait/operational_tasks.dart @@ -194,10 +194,6 @@ class _OperationalTasksState extends State { icon: widget.operationalTasks[index]["icon"], title: widget.operationalTasks[index]["title"] as String, ontap: () async { - final title = widget.operationalTasks[index]["title"] as String; - if (title == "Pending Approval") { - globalProvider.getAudit("REG-EVT-004", "REG-MOD-101"); - } return widget.operationalTasks[index]["onTap"](context); }, subtitle: widget.operationalTasks[index]["subtitle"], From 13447dd10a01f158d798bce2f8b2fe71aeb2927d Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Tue, 27 Jan 2026 17:01:59 +0530 Subject: [PATCH 14/17] Added ARC Audit Signed-off-by: Rakshithasai123 --- lib/ui/process_ui/generic_process.dart | 38 ++------------------------ 1 file changed, 3 insertions(+), 35 deletions(-) diff --git a/lib/ui/process_ui/generic_process.dart b/lib/ui/process_ui/generic_process.dart index 52c8095d0..0c0a018e9 100644 --- a/lib/ui/process_ui/generic_process.dart +++ b/lib/ui/process_ui/generic_process.dart @@ -238,13 +238,6 @@ class _GenericProcessState extends State } Future onWillPop(Process process) async { - final index = globalProvider.newProcessTabIndex; - if (index > 0 && index < process.screens!.length) { - final currentScreen = process.screens![index]!; - if (currentScreen.name == "Documents") { - globalProvider.getAudit("REG-EVT-026", "REG-MOD-103"); - } - } if (globalProvider.newProcessTabIndex > 0 && globalProvider.newProcessTabIndex < process.screens!.length + postRegistrationTabs.length - 1) { @@ -689,43 +682,18 @@ class _GenericProcessState extends State templateTitleMap!, ); } - final nextIndex = globalProvider.newProcessTabIndex + 1; - if (nextIndex < size) { - final nextScreen = process.screens![nextIndex]!; - if (nextScreen.name == "Documents") { - globalProvider.getAudit("REG-EVT-025", "REG-MOD-103"); - } - } - globalProvider.newProcessTabIndex = nextIndex; + globalProvider.newProcessTabIndex = + globalProvider.newProcessTabIndex + 1; } } _nextButtonClickedAudit(); - - if (globalProvider.newProcessTabIndex < size) { - final currentScreen = - process.screens![globalProvider.newProcessTabIndex]!; - - final localizedDemographicName = - AppLocalizations.of(context)!.demographicsScreenName( - globalProvider.selectedLanguage, - ); - - final screenLabel = - currentScreen.label?[globalProvider.selectedLanguage]; - - if (screenLabel == localizedDemographicName) { - globalProvider.getAudit("REG-EVT-110", "REG-MOD-102"); - } - } - } - else { + } else { if (globalProvider.newProcessTabIndex == size + 1) { bool isPacketAuthenticated = await _authenticatePacket(context); if (!isPacketAuthenticated) { return; } - await globalProvider.getAudit("REG-EVT-110","REG-MOD-103"); RegistrationSubmitResponse registrationSubmitResponse = await registrationTaskProvider.submitRegistrationDto(username); if (registrationSubmitResponse.errorCode != null && registrationSubmitResponse.errorCode!.isNotEmpty) { From 5858acdf6291905653840791a2aaa2afae313a96 Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Wed, 28 Jan 2026 17:15:38 +0530 Subject: [PATCH 15/17] Added ARC Audit Signed-off-by: Rakshithasai123 --- .../api_services/UserDetailsApi.java | 5 -- .../widgets/document_upload_control.dart | 85 ------------------- 2 files changed, 90 deletions(-) diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/UserDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/UserDetailsApi.java index b74ce7524..46f08b540 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/UserDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/UserDetailsApi.java @@ -18,8 +18,6 @@ import javax.inject.Inject; import javax.inject.Singleton; -import io.mosip.registration.clientmanager.constant.AuditEvent; -import io.mosip.registration.clientmanager.constant.Components; import io.mosip.registration.clientmanager.dto.CenterMachineDto; import io.mosip.registration.clientmanager.entity.RegistrationCenter; import io.mosip.registration.clientmanager.entity.UserDetail; @@ -29,8 +27,6 @@ import io.mosip.registration.clientmanager.spi.MasterDataService; import io.mosip.registration_client.model.MachinePigeon; import io.mosip.registration_client.model.UserPigeon; -import io.mosip.registration.clientmanager.constant.AuditEvent; -import io.mosip.registration.clientmanager.constant.Components; @Singleton public class UserDetailsApi implements UserPigeon.UserApi { @@ -50,7 +46,6 @@ public UserDetailsApi(LoginService loginService, RegistrationCenterRepository re @Override public void validateUser(@NonNull String username, @NonNull String langCode, @NonNull UserPigeon.Result result) { - auditManagerService.audit(AuditEvent.SYNC_USER_DETAILS,Components.REGISTRATION,"Sync user details"); if (username == null || username.trim().length() == 0) { UserPigeon.User user = new UserPigeon.User.Builder() .setUserId(username) diff --git a/lib/ui/process_ui/widgets/document_upload_control.dart b/lib/ui/process_ui/widgets/document_upload_control.dart index 573ce10a9..1e8e08fc8 100644 --- a/lib/ui/process_ui/widgets/document_upload_control.dart +++ b/lib/ui/process_ui/widgets/document_upload_control.dart @@ -49,86 +49,6 @@ class _DocumentUploadControlState extends State { } int maxFileSize = 2 * 1024 * 1024; // Default 2MB - Future _logDocumentAudit(String action) async { - String eventId=""; - final String subType = (widget.field.subType ?? "").toUpperCase(); - - switch (action) { - case "SCAN": - switch (subType) { - case "POA": - eventId = "REG-EVT-010"; - break; - case "POI": - eventId = "REG-EVT-013"; - break; - case "POR": - eventId = "REG-EVT-016"; - break; - case "POB": - eventId = "REG-EVT-019"; - break; - case "POE": - eventId = "REG-EVT-022"; - break; - default: - eventId = ""; - } - break; - - case "VIEW": - switch (subType) { - case "POA": - eventId = "REG-EVT-011"; - break; - case "POI": - eventId = "REG-EVT-014"; - break; - case "POR": - eventId = "REG-EVT-017"; - break; - case "POB": - eventId = "REG-EVT-020"; - break; - case "POE": - eventId = "REG-EVT-023"; - break; - default: - eventId = ""; - } - break; - - case "DELETE": - switch (subType) { - case "POA": - eventId = "REG-EVT-012"; - break; - case "POI": - eventId = "REG-EVT-015"; - break; - case "POR": - eventId = "REG-EVT-018"; - break; - case "POB": - eventId = "REG-EVT-021"; - break; - case "POE": - eventId = "REG-EVT-024"; - break; - default: - eventId = ""; - } - break; - - } - - if (eventId.isNotEmpty) { - await context.read().getAudit( - eventId, - "REG-MOD-103", - ); - } - } Future _documentAudit(String action) async { String event=""; @@ -373,7 +293,6 @@ class _DocumentUploadControlState extends State { _documentScanClickedAudit() { _documentAudit("SCAN"); - _logDocumentAudit("SCAN"); } Future> getImageBytes(String imagePath) async { @@ -652,7 +571,6 @@ class _DocumentUploadControlState extends State { InkWell( onTap: () { _documentAudit("VIEW"); - _logDocumentAudit("VIEW"); Navigator.push( context, MaterialPageRoute( @@ -675,7 +593,6 @@ class _DocumentUploadControlState extends State { GestureDetector( onTap: () { _documentAudit("DELETE"); - _logDocumentAudit("DELETE"); _deleteImage(widget.field, item); _removeFieldValue(widget.field, item); _setRemoveScannedPages(widget.field, @@ -923,7 +840,6 @@ class _DocumentUploadControlState extends State { InkWell( onTap: () { _documentAudit("VIEW"); - _logDocumentAudit("VIEW"); Navigator.push( context, MaterialPageRoute( @@ -946,7 +862,6 @@ class _DocumentUploadControlState extends State { GestureDetector( onTap: () { _documentAudit("DELETE"); - _logDocumentAudit("DELETE"); _deleteImage(widget.field, item); _removeFieldValue(widget.field, item); _setRemoveScannedPages(widget.field, From f1cb5a9b711c4b1dbd026c63c42a9dca57a000b8 Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Thu, 29 Jan 2026 15:40:33 +0530 Subject: [PATCH 16/17] added geo location denied audit Signed-off-by: Rakshithasai123 --- .../io/mosip/registration/clientmanager/constant/AuditEvent.java | 1 + lib/ui/process_ui/generic_process.dart | 1 + 2 files changed, 2 insertions(+) diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java index 5316980dd..26fbd9a8e 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java @@ -131,6 +131,7 @@ public enum AuditEvent { // Geo-Location GEO_LOCATION_CAPTURE("REG-GEO-LOC-001", SYSTEM_EVENT.getCode(), "GEO_LOCATION_CAPTURE", "Capture geo-location"), + GEO_LOCATION_DENIED("REG-GEO-LOC-002", SYSTEM_EVENT.getCode(), "GEO_LOCATION_DENIED", "Denied geo-location"), // Client To Server Sync SYNC_USER_MAPPING("REG-SYNC-008", USER_EVENT.getCode(), "SYNC_USER_MAPPING", "Sync user mapping"), diff --git a/lib/ui/process_ui/generic_process.dart b/lib/ui/process_ui/generic_process.dart index 31ad10869..933207425 100644 --- a/lib/ui/process_ui/generic_process.dart +++ b/lib/ui/process_ui/generic_process.dart @@ -117,6 +117,7 @@ class _GenericProcessState extends State registrationTaskProvider.setCurrentLocation(position.latitude, position.longitude); } else { debugPrint("Location unavailable — permission denied or service off."); + globalProvider.getAudit("REG-GEO-LOC-002", "REG-MOD-103"); } } From a3cb33c9004042a65eaba938fc6d59d12fe4ca38 Mon Sep 17 00:00:00 2001 From: Rakshithasai123 Date: Mon, 2 Feb 2026 11:12:10 +0530 Subject: [PATCH 17/17] removed unused audits Signed-off-by: Rakshithasai123 --- .../clientmanager/constant/AuditEvent.java | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java index 26fbd9a8e..acec2ebd3 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/AuditEvent.java @@ -100,22 +100,8 @@ public enum AuditEvent { // Packet Upload PACKET_UPLOAD("REG-EVT-083", USER_EVENT.getCode(), "PACKET_UPLOAD", "Upload the local packets to the server"), + // Registration : Documents - REG_DOC_POA_SCAN("REG-EVT-010", USER_EVENT.getCode(), "REG_DOC_POA_SCAN", "PoA: Click of Scan"), - REG_DOC_POA_VIEW("REG-EVT-011", USER_EVENT.getCode(), "REG_DOC_POA_VIEW", "PoA: View"), - REG_DOC_POA_DELETE("REG-EVT-012", USER_EVENT.getCode(), "REG_DOC_POA_DELETE", "PoA: Delete"), - REG_DOC_POI_SCAN("REG-EVT-013", USER_EVENT.getCode(), "REG_DOC_POI_SCAN", "PoI: Click of Scan"), - REG_DOC_POI_VIEW("REG-EVT-014", USER_EVENT.getCode(), "REG_DOC_POI_VIEW", "PoI: View"), - REG_DOC_POI_DELETE("REG-EVT-015", USER_EVENT.getCode(), "REG_DOC_POI_DELETE", "PoI: Delete"), - REG_DOC_POR_SCAN("REG-EVT-016", USER_EVENT.getCode(), "REG_DOC_POR_SCAN", "PoR: Click of Scan"), - REG_DOC_POR_VIEW("REG-EVT-017", USER_EVENT.getCode(), "REG_DOC_POR_VIEW", "PoR: View"), - REG_DOC_POR_DELETE("REG-EVT-018", USER_EVENT.getCode(), "REG_DOC_POR_DELETE", "PoR: Delete"), - REG_DOC_POB_SCAN("REG-EVT-019", USER_EVENT.getCode(), "REG_DOC_POB_SCAN", "PoB: Click of Scan"), - REG_DOC_POB_VIEW("REG-EVT-020", USER_EVENT.getCode(), "REG_DOC_POB_VIEW", "PoB: View"), - REG_DOC_POB_DELETE("REG-EVT-021", USER_EVENT.getCode(), "REG_DOC_POB_DELETE", "PoB: Delete"), - REG_DOC_POE_SCAN("REG-EVT-022", USER_EVENT.getCode(), "REG_DOC_POB_SCAN", "PoB: Click of Scan"), - REG_DOC_POE_VIEW("REG-EVT-023", USER_EVENT.getCode(), "REG_DOC_POB_VIEW", "PoB: View"), - REG_DOC_POE_DELETE("REG-EVT-024", USER_EVENT.getCode(), "REG_DOC_POB_DELETE", "PoB: Delete"), REG_DOC_NEXT("REG-EVT-025", USER_EVENT.getCode(), "REG_DOC_NEXT", "Click of Next after uploading documents"), REG_DOC_BACK("REG-EVT-026", USER_EVENT.getCode(), "REG_DOC_BACK", "Click of Back to demographic details"),