eKYC 3.0 — Old vs New UI: Functional Comparison Report

Old: EkycDevProject (Flutter BLoC/Cubit, 17 features) • New: flutter_app (Flutter setState, 16 stages)
Generated: 9 April 2026 • Includes BRD change analysis (EKYC3_BRD_v1, Bank_Auto_Verify_BRD_v2, Annual Income Relocation BRD)
16
Stages Compared
9
Functionally Equivalent
4
Significant Differences
5
BRD-Driven Changes
3
Features Removed/Merged
SAME Functionally equivalent
CHANGED Functional difference
NEW Added in new code
REMOVED Not in new code
IMPROVED Enhanced in new code
BRD Changed per BRD requirement

Table of Contents

0 Stage 0 - Arrival / Splash Screen

FeatureOld App (EkycDevProject)New App (flutter_app)Status
Purpose No dedicated arrival stage. Session starts at Registration/OTP. Dedicated splash with session creation, device info capture, fraud pre-checks, journey resume. NEW
Resume Logic Resume handled via pageName param passed from parent app. Uses ScreenNavigator to jump to saved page. Calls getResumeState(leadId) + getJourneyStatus() to auto-detect stage. Maps resume pages to routes. IMPROVED
Session Init No explicit session creation. Relies on initSuperApp later. Calls journeyInit(deviceType) to create session with UTM params. NEW
Loading Animation N/A Lottie RISE logo + Lottie loader animation. No-connection Lottie on error. NEW
Error Handling N/A Error state with retry button. Shows error message. NEW
Stage 0 is entirely new in the rewrite. The old app had no arrival screen - users went straight to registration. The new app adds session management, device fingerprinting, IP velocity checks (backend), and intelligent journey resumption.

1 Stage 1 - Registration

FeatureOld AppNew AppStatus
User Inputs Mobile, Name, Terms, Referral Code (optional), DIY ID (optional), Location (lat/lng) Mobile, Name, Terms only CHANGED
Mobile Validation 10 digits, regex ^\d{10} 10 digits, regex ^[6-9]\d{9}$ (stricter - must start with 6-9) IMPROVED
Name Validation 2+ chars, letters + spaces, no double spaces, no leading/trailing spaces 2+ chars (simpler validation) CHANGED
API Calls app/signup app/sendOtp lead/bindDiyDataFromId app/validateReferralCode registrationSignup (single consolidated call) IMPROVED
Referral Code Optional input field + validateReferralCode API Not in UI (moved to session init via UTM params) CHANGED
DIY Partner Bind Binds DIY ID via bindDiyDataFromId Not in UI (handled at backend session level) CHANGED
Location Capture Geolocator permission + lat/lng sent with signup Not captured at registration (moved to Stage 0 journeyInit) CHANGED
Existing User Shows appropriate message for existing customers Detects via error codes (BE_REG_MOBILE_EXISTS, etc.), auto-resumes journey IMPROVED
Hero Illustration SVG illustration (ic_register_illustration.svg) Same SVG illustration (migrated) SAME
SDKs Used Geolocator AppsFlyer url_launcher (for T&Cs only) CHANGED
New app simplifies registration by moving referral, DIY, and location to backend/session level. Fewer API calls = faster registration.

2 Stage 2 - Mobile OTP Verification

FeatureOld AppNew AppStatus
OTP Input PinPut widget (4 digits) Custom 4-box input with auto-focus, auto-submit on 4th digit SAME
Resend Timer 60 seconds countdown 30 seconds countdown (configurable via ApiConfig.otpResendCooldown) CHANGED
Max Attempts Not explicitly limited in UI (backend handles) 5 attempts max, shows locked banner with remaining count IMPROVED
API Calls app/verifyOtp app/sendOtp app/initUserResponse auth/sendEmailOtp verifyMobileOtp resendMobileOtp IMPROVED
KRA eSign Pending Not handled at OTP stage If kraEsignPending=true in response, skips to Stage 13 (eSign directly) NEW BRD
Resume from OTP Uses initUserResponse pageName to determine next screen Uses resumePage field from verifyOtp response IMPROVED
Edit Mobile Edit icon to change mobile number "Edit" button navigates back to Stage 1 SAME
Success Animation Lottie tick animation Green "OTP Verified!" text for 1.2s before navigation CHANGED

3 Stage 3 - Email Verification

FeatureOld AppNew AppStatus
Verification Methods Manual email + OTP, Google Sign-In Google Sign-In, KRA Prefill, Manual email + OTP (3 methods) IMPROVED
KRA Prefill Not present If KRA data has email, shows as prefilled option with verified badge NEW BRD
Auto-Verification Google OAuth skips OTP Google OAuth and KRA prefill both auto-verify (skip OTP entirely) IMPROVED
UI State Machine Simple flow (enter email → enter OTP) 4-state machine: initial → manualEntry → otpEntry → verified IMPROVED
API Calls auth/sendEmailOtp auth/verifyEmailOtp auth/verifyEmailWithGoogle getEmailDetails generateEmailOtp verifyEmailOtp resendEmailOtp CHANGED
Email Source Tracking Not tracked Tracks source: GOOGLE, KRA, or MANUAL NEW

4 Stage 4 - PAN Verification

FeatureOld AppNew AppStatus
PAN Input Paths Manual entry: PAN + Name + DOB. DigiLocker integration for Aadhaar (mixed in same screen). Two clean paths: Prefilled PAN (from KRA/DigiLocker) OR Manual entry. Separated from DigiLocker. IMPROVED
PAN Validation Regex ^[A-Z]{5}[0-9]{4}[A-Z]{1}$ Same regex ^[A-Z]{5}[0-9]{4}[A-Z]$ SAME
KRA Status Check Not explicitly checked at PAN stage confirmPan() returns kraStatus. If VALIDATED, skip DigiLocker (Stage 5). NEW BRD
Prefilled PAN Fetches via getUserPanDetails getPanDetails() returns preFetched flag + masked PAN + name IMPROVED
Attempt Limit Not explicitly limited in UI Max 3 PAN validation attempts with counter display NEW
API Calls pan/verifyPanNSDL proof/updateStage pan/getUserPanDetails pan/validatePan + 4 DigiLocker endpoints getPanDetails validatePan confirmPan IMPROVED
DigiLocker in PAN DigiLocker initiation/callback handled within PAN cubit (mixed concern) DigiLocker is a separate Stage 5. PAN stage focuses only on PAN. IMPROVED

5 Stage 5 - DigiLocker / Aadhaar Verification

FeatureOld AppNew AppStatus
DigiLocker Providers Dual: AINxt DigiLocker (primary) + DigiLocker (backup). Both always initialized. Single WebView-based DigiLocker. Backend determines provider. IMPROVED
KRA Customer Skip Not handled (all users go through Aadhaar) If isKraCustomer=true, auto-skips to Stage 6 (Bank) NEW BRD
Upload Fallback Not available (DigiLocker mandatory) If DigiLocker unavailable, shows file upload fallback (JPG/PNG/PDF, max 5MB) NEW
Consent Implicit (starts DigiLocker flow directly) Explicit consent checkbox required before DigiLocker WebView IMPROVED
Success Flow Navigate immediately after callback Shows success screen with 5-second countdown, then auto-navigates to Bank CHANGED
SDKs AINxt DigiLocker (native) DigiLocker (native) webview_flutter file_picker CHANGED
New app uses WebView instead of native SDK for DigiLocker - better web compatibility and easier maintenance. Upload fallback is a significant usability improvement.

6 Stage 6 - Bank Account Verification

FeatureOld AppNew AppStatus
Verification Methods Manual entry (Account + IFSC) + Penny Drop (2-step: get token → SMS → confirm) UPI Reverse Penny Drop (primary, 5 app options) + Manual entry (fallback) CHANGED BRD
UPI Apps Not supported as primary method PhonePe, Google Pay, Paytm UPI, Cred UPI, Other Apps NEW
Annual Income Collected in Other Details (Stage 9) Collected right after bank verification (5 income ranges) CHANGED BRD
Bank Auto-Verify Manual penny drop with SMS confirmation Auto-verify via UPI reverse penny drop + auto movement to next stage NEW BRD
IFSC Lookup bank/getBankListByIFSC getBankByIfsc on focus-loss (auto-fill bank/branch name) SAME
Bank Rejection Shows rejection reason + bank proof upload screen Max 3 attempts with counter. No separate bank proof upload screen. CHANGED
OneMoney OneMoney for pre-linked bank details Not used (Decentro auto-verify per BRD) CHANGED BRD
UI States Single form view 3-state UI: upi (app selection) → manual (form) → verified (confirmed + income) IMPROVED
BRD Changes: Bank_Auto_Verify_BRD_v2 specifies Decentro-based auto-verification replacing manual penny drop. Annual Income Relocation BRD moves income collection from Stage 9 to Stage 6.

7 Stage 7 - Liveness / Selfie Verification

FeatureOld AppNew AppStatus
Liveness SDK HyperKYC v2.6.0 + HyperSnap v7.2.0 + AINxt (backup) image_picker (camera/gallery) + backend liveness check CHANGED
API Calls 8 endpoints: getPhotoDetails, getProofDetails, createHyperVergeRequest, getHyperVergeResponse, getLivePhotoLocationDetails, ainxt x2, submitOCR, updateStage initiateLiveness livenessCallback IMPROVED
Location Capture Geolocator captures lat/lng at selfie time Geolocator captures GPS coordinates with photo SAME
OCR Extraction Client-side submitOCRProofUpload Server-side (backend handles OCR after photo upload) IMPROVED
Attempt Limit Backend-controlled Max 3 attempts with UI counter IMPROVED
Photo Preview HyperSnap handles preview internally Shows captured photo preview with confirm/retake options IMPROVED
Old app relied heavily on HyperKYC/HyperSnap native SDKs which don't work on web. New app uses image_picker for capture + backend liveness check, making it web-compatible.

8 Stage 8 - Signature Capture

FeatureOld AppNew AppStatus
Signature Input Custom canvas + Syncfusion integration signature package (SignatureController, pen stroke=3) SAME
Clear/Retake Full canvas clear, user must redraw Clear button, signature validation (not empty) SAME
API Calls proof/getSignatureDetails proof/uploadSignatureImageProof proof/updateStage getSignatureDetails uploadSignature SAME
Attempt Limit Backend-controlled Max 3 upload attempts with counter IMPROVED
Output Format PNG base64 PNG bytes → base64 SAME

9 Stage 9 - Personal Details & Nominees (+ Income Proof)

FeatureOld AppNew AppStatus
Screen Scope Other Details: Personal + Investment prefs + FNO activation + E-sign (massive screen, ~500+ lines cubit) Combined: Personal Details + Investment + F&O + Income Proof + Nominees (4 accordion sections). Stage 10 merged in. CHANGED
Personal Fields Occupation, Annual Income, Existing KYC, Marital Status, Education, Employment, Business details Education, Occupation, Marital Status, Father/Spouse Name, Mother Name, PEP declaration CHANGED
Annual Income Collected here (5 brackets) Moved to Stage 6 (Bank Verification) per BRD CHANGED BRD
Investment Section Investment objectives, Risk appetite, Investment experience, Years in current job Trading experience, Settlement preference (T1/T2/T3), DIS booklet, DDPI enabled CHANGED
F&O Activation FNO opt-in toggle + risk disclosure + e-sign flow Enable F&O checkbox + Enable Equity + F&O risk acceptance + income proof upload CHANGED
Income Proof Separate screen (income_proof feature) with OneMoney WebView Merged into Stage 9 F&O section. File upload (PDF/JPG/PNG) + OneMoney bank connection button. CHANGED
Nominees Separate add_nominee screen: Name, PAN, DOB, Relationship, Gender, Full Address, Mobile, Email, Nomination % Bottom sheet form: Name, PAN, DOB, Relation. Up to 3 nominees. "No nominee" declaration option. CHANGED
E-Sign in Details Digio/EMudhra e-sign initiated from Other Details if FNO opted E-sign is a separate Stage 13 (not mixed with personal details) IMPROVED
initSuperApp Called unconditionally on page load (OPT-2 issue) Not used (session already initialized at Stage 0) IMPROVED
Lookup Dropdowns Hardcoded dropdown options Field codes match ekyc.lookups table (backend-driven dropdowns) IMPROVED
BRD Change - Annual Income Relocation: Income collection moved from Stage 9 to Stage 6 per "Bank verified auto movement and Annual Income relocation_BRD.docx". This reduces Stage 9 complexity and captures income earlier in the flow.

10 Stage 10 - Income Proof (DEPRECATED)

In the old app, Income Proof was a separate screen with OneMoney WebView redirect. In the new app, this has been merged into Stage 9 (Personal Details, F&O accordion section). Stage 10 auto-redirects to Stage 9.

11 Stage 11 - Final Validation

FeatureOld AppNew AppStatus
Purpose No dedicated validation screen. Backend validates during stage transitions. Dedicated validation screen with animated progress and check items. NEW
User Input N/A None (passive - backend runs checks) NEW
Visual Feedback N/A Animated circle (0-100% over 8s), 5 check items with pending→spinning→green checkmark animation NEW
Checks Displayed N/A 1. Verifying identity, 2. Checking PAN records, 3. Validating bank, 4. Running compliance, 5. Preparing documents NEW
API Calls N/A runFinalValidation NEW
This is a UX improvement - gives users visual feedback during the backend compliance/validation process instead of a generic loading spinner.

12 Stage 12 - Document Generation (AOF)

FeatureOld AppNew AppStatus
Purpose No dedicated document generation screen. AOF generated as part of e-sign flow. Dedicated screen: generates AOF PDF, shows download option, then proceeds to eSign. NEW
PDF Download Not available separately Optional download button (opens in external browser) NEW
Document Type Implicit Returns documentType: NEW_KRA, KRA_MODIFICATION, or KRA_VALIDATED NEW

13 Stage 13 - eSign

FeatureOld AppNew AppStatus
eSign Providers Digio (primary) + EMudhra/NSDL (backup) + Non-KRA path. 5 separate API endpoints. Single WebView-based eSign. Backend selects provider (eMudhra/HyperVerge). IMPROVED
Provider SDKs Digio SDK EMudhra SDK webview_flutter (WebView for all providers) CHANGED
Already Signed Check Not in UI (backend checked) getEsignDetails() checks isSigned - auto-skips to Stage 14 if already signed IMPROVED
Screen Placement Mixed into Other Details screen (Stage 9) for FNO e-sign Dedicated standalone Stage 13 IMPROVED
Callback Handling SDK callbacks via native code WebView URL interception for 'esign-callback' / 'callback' patterns CHANGED

14 Stage 14 - Account Creation

FeatureOld AppNew AppStatus
Purpose No dedicated account creation screen. Account created as part of success flow. Dedicated screen with animated "Creating Your Account..." messaging + progress bar. NEW
STP vs Non-STP Determined by backend, reflected in Account Success screen Determined by accountStatus response. CREATED=STP, PENDING_REVIEW=Non-STP SAME
Error Handling Generic error BE_ACC_PENDING_VERIFIER error code treated as Non-STP (graceful handling) IMPROVED
API Calls Part of combined flow createAccount → returns accountStatus, clientId, dpId IMPROVED

15 Stage 15 - Congratulations / Fund Transfer

FeatureOld AppNew AppStatus
STP Variant Client code + scheme recommendations + scheme upsell Client ID + DP ID + OTP info ("Your 4-digit OTP is last 4 digits of mobile") + animated celebration CHANGED
Non-STP Variant Account success message only "Thank You! Application submitted for verification" + update notifications message IMPROVED
Fund Transfer Separate fund_transfer feature with Razorpay Custom UI, AES encryption, 3-wave init (9 endpoints), UPI/NetBanking/Card options Integrated "Add Fund" button + amount input + Razorpay checkout (simplified). Uses initiatePayment + paymentCallback. CHANGED
Fund API Calls 9 endpoints: GetEPayToken, ValidateToken, GetClientBankDetails, GetDownTime, UpdateVpa, CreateTransaction, UpdateTransaction, SaveSchemeDetails, InsertSegmentDetails (Fund Base URL + Basic Auth + AES) getPaymentDefaults initiatePayment paymentCallback IMPROVED
Scheme Selection Scheme recommendations + save scheme + segment details (upsell post-creation) Not present (removed upsell flow) REMOVED
WhatsApp Updates Optional toggle for WhatsApp notifications Not present REMOVED
Login/Exit "Go to Rise" CTA + "Download Statement" "Login to RIISE" (external link) + "Back to Home" (clears storage, returns to Stage 0) SAME
Animation Lottie congratulation animation + tick animation Scale-in animation (elasticOut curve). Lottie congrats available but not yet integrated. CHANGED

Features Removed or Merged in New App

Old FeatureOld ScreenNew StatusReason
US Equity Verification us_equity_verification, us_equity_success, us_equity_error_exit REMOVED US Equity flow deprecated. FATCA/PEP handled at backend level if needed.
Add Fund Popup add_fund_popup MERGED Merged into Stage 15 (Congrats) as inline "Add Fund" section.
Separate Income Proof income_proof MERGED Merged into Stage 9 (Personal Details, F&O accordion).
Cancel Transaction fund_transfer/CancelTransactionScreen REMOVED Simplified fund flow uses Razorpay checkout directly.
WebView NetBanking fund_transfer/WebViewNetBankingScreen REMOVED Razorpay handles payment method selection internally.
Verify PAN/Aadhaar Display verify_pan_aadhar (display proof images) REMOVED Proof image viewing not needed in new flow. Backend stores proofs directly.

BRD-Driven Changes Summary

1. Bank Auto-Verify (Bank_Auto_Verify_BRD_v2.docx)

Change: Replace manual penny drop with UPI Reverse Penny Drop as primary bank verification method. Auto-move to next stage on successful verification.
Impact: Stage 6 redesigned with UPI app selection (PhonePe, GPay, Paytm, Cred, Others). Manual entry becomes fallback. OneMoney removed, Decentro auto-verify added.
Status: Implemented in new flutter_app Stage 6.

2. Annual Income Relocation (Bank verified auto movement and Annual Income relocation_BRD.docx)

Change: Move annual income collection from Personal Details (Stage 9) to Bank Verification (Stage 6).
Impact: Stage 6 now shows income range selector after bank verification. Stage 9 no longer collects annual income.
Status: Implemented in new flutter_app Stage 6 (verified state shows 5 income ranges).

3. KRA Customer Skip Logic (EKYC3_BRD_v1.docx)

Change: KRA-validated customers should skip DigiLocker/Aadhaar verification.
Impact: Stage 4 (PAN) checks kraStatus. If VALIDATED, skips Stage 5 entirely. Stage 5 also checks isKraCustomer and auto-navigates away.
Status: Implemented in Stages 4 and 5.

4. KRA eSign Pending Flow (EKYC3_BRD_v1.docx)

Change: If KRA eSign is pending, customer should skip directly to eSign stage after OTP.
Impact: Stage 2 (OTP) checks kraEsignPending in response. If true, navigates directly to Stage 13 (eSign), bypassing all intermediate stages.
Status: Implemented in Stage 2.

5. Session Timer & Handoff Link (EKYC3_BRD_v1.docx)

Change: Add session inactivity timer (15 min) with warning dialog. Add handoff link for cross-device continuation.
Impact: New session_timer.dart widget added. 13-min warning dialog with "Continue" option. Not present in old app.
Status: Implemented as cross-cutting widget in new flutter_app.

Third-Party SDK Comparison

SDKOld AppNew AppChange
HyperKYC / HyperSnap v2.6.0 / v7.2.0 - Native selfie liveness Not used - image_picker + backend liveness REPLACED
AINxt DigiLocker Native SDK - Aadhaar + liveness alternative Not used - WebView DigiLocker REPLACED
Digio Native SDK - eSign Not used - WebView eSign REPLACED
EMudhra Native SDK - eSign (NSDL) Not used - WebView eSign REPLACED
Razorpay Custom UI v1.4.1 (full control: UPI, card, netbanking) Standard Checkout (simplified) SIMPLIFIED
OneMoney Bank verification + income aggregation OneMoney for income (in Stage 9), Decentro for bank (Stage 6) SPLIT
Google Sign-In Email verification alternative Email verification alternative (same) SAME
Geolocator Registration + Selfie location Stage 0 + Stage 7 location SAME
Firebase/CleverTap/AppsFlyer Analytics: Firebase 11.4.2, CleverTap 3.7.0, AppsFlyer 6.16.2 Not yet integrated NOT YET
New app replaces native SDKs with WebView-based integrations for DigiLocker and eSign. This makes the app web-compatible but may need native SDK integration for mobile production builds.

API Architecture Comparison

AspectOld AppNew App
Total Endpoints 74 endpoint constants, 87 invocations across 13 repos ~35 methods in unified ApiService
HTTP Client Dio with interceptors (error + logging), 60s timeout http package, 30s timeout (ApiConfig.apiTimeout)
Base URLs 2: Main API + Fund/ePay API (separate base URLs, separate auth) Single base URL (fund transfer integrated into main API)
Auth JWT token (optional per call) + Basic Auth (fund transfer) Bearer token (X-Lead-Id, X-Session-Id auto-injected)
State Management BLoC/Cubit (flutter_bloc ^9.1.1) - separate cubit per feature setState (vanilla Flutter) - all state in screen widgets
Repository Pattern 13 feature-specific repository implementations Single ApiService class with all methods
Request Models Typed Dart classes (PostRequest / Req) per endpoint Inline Map<String, dynamic> in ApiService methods
Response Models Typed Response classes per endpoint ApiResponse<T> with generic data parsing

Navigation Flow Comparison

Old App (Happy Path)

Registration Mobile OTP Email PAN + DigiLocker Verify Proof Bank Selfie (HyperKYC) Signature File Upload Other Details + eSign Income Proof Account Success

New App (Happy Path)

Stage 0: Arrival Stage 1: Registration Stage 2: OTP Stage 3: Email Stage 4: PAN Stage 5: DigiLocker Stage 6: Bank + Income Stage 7: Liveness Stage 8: Signature Stage 9: Personal + Nominee Stage 11: Validation Stage 12: Document Stage 13: eSign Stage 14: Account Creation Stage 15: Congrats + Fund

Green = New stages not in old app

Cross-Cutting Features Comparison

FeatureOld AppNew AppStatus
Session Timer Not present 15-min inactivity timeout, 13-min warning dialog NEW
Back Button Handler Custom exit popup screen Device back intercept with "KYC is one-time" bottom sheet IMPROVED
Loading Overlay LoaderOverlay package + Lottie (ic_loader.json) Custom LoadingOverlay widget + Lottie (migrated) SAME
Progress Bar Striped custom painter (StripedProgressPainter) Striped custom painter (migrated) - 16 stage names SAME
Analytics Firebase + CleverTap + AppsFlyer (30+ events) Not yet integrated PENDING
Responsive Design flutter_screenutil (360x690 base) Standard Flutter layouts (no screenutil) CHANGED
Error Handling ApiDataState union (DataSuccess/DataFailed/DataError) ApiResponse with success/errorCode/displayMessage + ErrorDialog/SnackBar IMPROVED
Mock/Dev Mode UAT vs Prod base URL toggle Mock URL detection (contains 'mock', 'example.com') bypasses external flows IMPROVED
eKYC 3.0 UI Comparison Report • Generated 9 April 2026 • Old: EkycDevProject/Flutter BLoC • New: flutter_app/Flutter setState
BRD Sources: EKYC3_BRD_v1.docx, Bank_Auto_Verify_BRD_v2.docx, Bank verified auto movement and Annual Income relocation_BRD.docx, Journey.docx