EKYC 3.0 — Gap Analysis: Stage 6 (Bank Verification) & Stage 7 (Liveness & Photo Match)

Comparing new backend vs old code
New Backend: .NET 8 + PostgreSQL + In-Memory OTP

Table of Contents

  1. Executive Summary
  2. Stage 6 — Bank Verification (Checks 1–18)
  3. Stage 7 — Liveness & Photo Match (Checks 19–33)
  4. Missing Checks — Priority Action Items
  5. Old Tables NOT to Reuse
  6. Reference Tables
  7. Action Items

1. Executive Summary

28
PRESENT
3
PARTIAL
2
MISSING
33
TOTAL CHECKS
Reading guide PRESENT = logic exists in new backend and matches BRD requirement. PARTIAL = logic exists but is incomplete or has caveats. MISSING = logic is absent in new backend — action required. N/A = not needed per Product team decision — no action required.
Overall Assessment Stage 6 and 7 are fully implemented. All core flows plus gap fixes are complete. Only the assisted journey handoff link (P2) remains as a future enhancement.
Gaps Summary All previously missing/partial items have been implemented: penny drop rate limit, RPD refund tracking, vendor selection via provider_configurations, bank data cleanup, location exception whitelist, city whitelist validation. Only handoff link (P2) remains for future.

2. Stage 6 — Bank Verification (Checks 1–18)

#Check / LogicOld Code (SP/Method)New BackendStatus
1RPD via Hyperverge SDKRPD integration in old SPHyperverge RPD provider implementedPRESENT
2PD via Hyperverge SDKPD integration in old SPHyperverge PD provider implementedPRESENT
3PD via Perfios fallbackPerfios fallback SPPerfios fallback provider wiredPRESENT
4IFSC lookup with 7-day cacheIFSC lookup SP with cacheIFSC lookup with 7-day cache via bank_ifsc_masterPRESENT
5Bank account dedup (post-eSign block)Dedup SP check post-eSignBank account dedup with post-eSign block logicPRESENT
6Bank name match (0–100 Levenshtein)Name matching SPNameMatchService.CalculateScore with LevenshteinPRESENT
7STP: 70–100=STP, 1–69=NON_STPSTP flag SP logicSTP scoring with 70 thresholdPRESENT
8Score 0 attempt 3 = DROP_BANK_NAME_FAILDrop logic in SPScore 0 on 3rd attempt triggers DROP_BANK_NAME_FAILPRESENT
9Max 3 different accountsAccount attempt limit SPMax 3 distinct bank accounts enforcedPRESENT
10Annual income rangeIncome range validation SPAnnual income range validation presentPRESENT
11Downstream events (4 targets)Event firing SP4 downstream targets (CleverTap, Zoho, CDP, Datalake) firedPRESENT
12CS Journey when all APIs downCS fallback SPCS Journey fallback when all bank APIs failPRESENT
13Penny drop rate limiting (max 10/account)USP_ALLOW_PENNYDROP_SJET limits to 10 attempts per accountFIXED: Rate limit of 10 per account added in VerifyBankAccountAsync. Returns BE_BANK_RATE_LIMIT.PRESENT
14Bank proof OCR (cheque/passbook)OCR SP for bank proofNot Day Zero scopeN/A
15RPD refund trackingRefund monitoring SPFIXED: RpdRefundStatus + RpdRefundAt fields added to BankVerificationAttempt. Set to PENDING on RPD.PRESENT
16MICR validationMICR validation SPMICR validation implementedPRESENT
17Vendor selection configConfigurable vendor selection in old codeFIXED: ResolveProviderFromConfigAsync queries provider_configurations table by category=BANK_VERIFY, ordered by priority.PRESENT
18Bank data cleanup on mismatchOld SP deleted bank data on retryFIXED: CleanupPreviousBankDataAsync resets STP flags on previous accounts when customer retries.PRESENT

3. Stage 7 — Liveness & Photo Match (Checks 19–33)

#Check / LogicOld Code (SP/Method)New BackendStatus
19Location within India checkLocation validation SPGeolocation bounding box check for IndiaPRESENT
20DROP_LOCATION_OUTSIDE_INDIADrop logic SPDROP_LOCATION_OUTSIDE_INDIA drop implementedPRESENT
21Liveness SDK (Hyperverge + AiNXT fallback)Liveness SP with vendor fallbackHyperverge liveness with AiNXT fallbackPRESENT
22Max 3 liveness → CS JourneyAttempt limit SPMax 3 liveness attempts, then CS JourneyPRESENT
23Face match selfie vs AadhaarFace match SPFace match selfie against Aadhaar photoPRESENT
24STP face: 70–100=STP, 1–69=NON_STPSTP flag SP logicFace match STP scoring with 70 thresholdPRESENT
25Score 0 attempt 1 retry, attempt 2 DROPDrop logic SPScore 0: retry on attempt 1, DROP on attempt 2PRESENT
26Aadhaar photo deleted after matchPhoto deletion SPAadhaar photo deleted after face matchPRESENT
27Selfie stored for AOFSelfie storage SPSelfie stored in document path for AOFPRESENT
28No Aadhaar photo = NON_STPMissing photo SP logicMissing Aadhaar photo sets NON_STPPRESENT
29Downstream eventsEvent firing SP4 downstream targets firedPRESENT
30Geolocation fallback (coordinate cities)Coordinate-to-city SPCoordinate-based city resolution fallbackPRESENT
31Assisted journey handoff linkWhatsApp link for RM in BRDBRD describes WhatsApp link for RM. Not implemented.PARTIAL
32Location exception whitelist (PAN)TBL_LIVE_PHOTO_LOCATION_EXCEPTIONFIXED: LocationExceptionWhitelist entity + table + query in LivenessService before location drop.PRESENT
33City whitelist validationTBL_LIVEPHOTO_LOCATION_DETAILS_CITYLISTFIXED: City validated against city_master table in ResolveGeolocationAsync.PRESENT

4. Missing Checks — Priority Action Items

PriorityCheck #IssueRequired Action
P2#13Penny drop rate limitingAdd penny drop rate limit (10 attempts per account) matching old USP_ALLOW_PENNYDROP_SJET logic.
P2#32Location exception whitelistCreate location_exception_whitelist table to replace TBL_LIVE_PHOTO_LOCATION_EXCEPTION.
P2#33City whitelist validationAdd city whitelist validation via city_master to supplement bounding box check.

5. Old Tables NOT to Reuse

These old tables are replaced by new entities. Do NOT create equivalents — data maps to the new schema as shown.
Old TableReplaced By (New Entity)
TBL_CLIENT_BANKDETAILSbank_accounts
TBL_YESBANK_REQUEST_RESPONSE_LOGbank_verification_attempts + api_audit_logs
TBL_KARZA_BANKAC_VALIDATE_RESPONSEbank_verification_attempts
TBL_NAMEMATCHING_STP_FLAGleads.StpDecision
TBL_CLIENT_LIVEPHOTO_RESPONSE_DETAILSliveness_verifications
TBL_CLIENT_AINXT_LIVEPHOTO_RESPONSE_DETAILSliveness_verifications
TBL_LIVEPHOTO_LOCATION_DETAILS_LOGliveness_verifications
TBL_CLIENT_PROOFUPLOADdocument_path_info
TBL_IPV_DETAILSliveness_verifications
TBL_LIVE_PHOTO_LOCATION_EXCEPTIONNEW TABLE NEEDED
TBL_LIVEPHOTO_LOCATION_DETAILS_CITYLISTcity_master

6. Reference Tables

Reference tables needed for Stage 6 and Stage 7.
TableSync StatusNotes
bank_ifsc_masterAlready syncedUsed for IFSC lookup with 7-day cache
city_masterAlready syncedUsed for geolocation city resolution
location_exception_whitelistNEWNeeds to be created to replace TBL_LIVE_PHOTO_LOCATION_EXCEPTION

7. Action Items (6 items)

#PriorityAction
1P2Add penny drop rate limiting (max 10 attempts per account) in bank verification service
2P2Create location_exception_whitelist entity and migration
3P2Add city whitelist validation in geolocation service using city_master
4P2Add RPD refund tracking field to bank_verification_attempts
5P2Consider handoff link endpoint for assisted journeys (WhatsApp RM link)
6P2Bank proof OCR (cheque/passbook) for subsequent launch phase