{"version":3,"sources":["../src/utils/verhoeff.ts","../src/validators/aadhaar.ts","../src/validators/pan.ts","../src/validators/tan.ts","../src/data/uanRanges.ts","../src/validators/uan.ts","../src/utils/mod36.ts","../src/data/gstStates.ts","../src/validators/gstin.ts","../src/data/bankCodes.ts","../src/validators/ifsc.ts","../src/data/postalCircles.ts","../src/validators/pincode.ts","../src/validators/voterId.ts","../src/data/rtoCodes.ts","../src/validators/drivingLicense.ts","../src/validators/passport.ts","../src/data/upiHandles.ts","../src/validators/upi.ts","../src/data/mobileSeriesAllocation.ts","../src/validators/phone.ts","../src/data/udyamStateCodes.ts","../src/validators/msme.ts"],"names":["issueYear","ALL_ZERO_SEQUENCE_REGEX","ALL_SAME_DIGIT_REGEX"],"mappings":"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","file":"chunk-UKRCT2T6.mjs","sourcesContent":["/**\r\n * The multiplication table\r\n */\r\nconst d = [\r\n    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\r\n    [1, 2, 3, 4, 0, 6, 7, 8, 9, 5],\r\n    [2, 3, 4, 0, 1, 7, 8, 9, 5, 6],\r\n    [3, 4, 0, 1, 2, 8, 9, 5, 6, 7],\r\n    [4, 0, 1, 2, 3, 9, 5, 6, 7, 8],\r\n    [5, 9, 8, 7, 6, 0, 4, 3, 2, 1],\r\n    [6, 5, 9, 8, 7, 1, 0, 4, 3, 2],\r\n    [7, 6, 5, 9, 8, 2, 1, 0, 4, 3],\r\n    [8, 7, 6, 5, 9, 3, 2, 1, 0, 4],\r\n    [9, 8, 7, 6, 5, 4, 3, 2, 1, 0],\r\n];\r\n\r\n/**\r\n * The permutation table\r\n */\r\nconst p = [\r\n    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\r\n    [1, 5, 7, 6, 2, 8, 3, 0, 9, 4],\r\n    [5, 8, 0, 3, 7, 9, 6, 1, 4, 2],\r\n    [8, 9, 1, 6, 0, 4, 3, 5, 2, 7],\r\n    [9, 4, 5, 3, 1, 2, 6, 8, 7, 0],\r\n    [4, 2, 8, 6, 5, 7, 3, 9, 0, 1],\r\n    [2, 7, 9, 3, 8, 0, 6, 4, 1, 5],\r\n    [7, 0, 4, 6, 9, 1, 3, 2, 5, 8],\r\n];\r\n\r\n/**\r\n * The inverse table\r\n */\r\nconst inv = [0, 4, 3, 2, 1, 5, 6, 7, 8, 9];\r\n\r\n/**\r\n * Validates a number string using the Verhoeff algorithm.\r\n * @param numStr The number string to validate.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const validateVerhoeff = (numStr: any): boolean => {\r\n    // Defensive: Handle null/undefined/non-string\r\n    if (numStr == null || typeof numStr !== 'string') return false;\r\n    if (!/^\\d+$/.test(numStr)) return false;\r\n\r\n    let c = 0;\r\n    const myArray = numStr.split('').map(Number).reverse();\r\n\r\n    for (let i = 0; i < myArray.length; i++) {\r\n        c = d[c][p[i % 8][myArray[i]]];\r\n    }\r\n\r\n    return c === 0;\r\n};\r\n\r\n/**\r\n * Generates the Verhoeff checksum digit for a given number string.\r\n * @param numStr The number string (without the checksum).\r\n * @returns The checksum digit.\r\n */\r\nexport const generateVerhoeff = (numStr: any): number => {\r\n    // Defensive: Handle null/undefined/non-string\r\n    if (numStr == null || typeof numStr !== 'string') {\r\n        throw new Error('Input must be a non-null string');\r\n    }\r\n    if (!/^\\d+$/.test(numStr)) {\r\n        throw new Error('Input must be a numeric string');\r\n    }\r\n\r\n    let c = 0;\r\n    const myArray = numStr.split('').map(Number).reverse();\r\n\r\n    for (let i = 0; i < myArray.length; i++) {\r\n        c = d[c][p[(i + 1) % 8][myArray[i]]];\r\n    }\r\n\r\n    return inv[c];\r\n};\r\n","import { validateVerhoeff } from '../utils/verhoeff';\r\n\r\n/**\r\n * Validates an Aadhaar number.\r\n * @param aadhaar The 12-digit Aadhaar number string.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const isValidAadhaar = (aadhaar: any): boolean => {\r\n    // 0. Null/undefined check\r\n    if (aadhaar == null) return false;\r\n    if (typeof aadhaar !== 'string') return false;\r\n    \r\n    // 1. Structure: 12 digits\r\n    if (!/^\\d{12}$/.test(aadhaar)) return false;\r\n\r\n    // 2. Logic: Should not start with 0 or 1\r\n    if (/^[01]/.test(aadhaar)) return false;\r\n\r\n    // 3. Algorithm: Verhoeff Checksum\r\n    return validateVerhoeff(aadhaar);\r\n};\r\n","/**\r\n * Validates a Permanent Account Number (PAN).\r\n * @param pan The 10-character PAN string.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const isValidPAN = (pan: any): boolean => {\r\n    // 0. Null/undefined check\r\n    if (pan == null) return false;\r\n    if (typeof pan !== 'string') return false;\r\n    \r\n    // 1. Structure: 5 chars, 4 digits, 1 char using Regex\r\n    const regex = /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/;\r\n    if (!regex.test(pan)) return false;\r\n\r\n    // 2. Logic: 4th character must be one of the valid entity types\r\n    const fourthChar = pan.charAt(3);\r\n    const validEntityTypes = ['C', 'P', 'H', 'F', 'A', 'T', 'B', 'L', 'J', 'G'];\r\n\r\n    if (!validEntityTypes.includes(fourthChar)) return false;\r\n\r\n    return true;\r\n};\r\n\r\nexport interface PANInfo {\r\n    valid: boolean;\r\n    category?: string; // Code (P, C, etc.)\r\n    categoryDesc?: string; // Description (Person, Company)\r\n}\r\n\r\nconst PAN_CATEGORY_MAP: Record<string, string> = {\r\n    'C': 'Company',\r\n    'P': 'Person',\r\n    'H': 'Hindu Undivided Family (HUF)',\r\n    'F': 'Firm',\r\n    'A': 'Association of Persons (AOP)',\r\n    'T': 'AOP (Trust)',\r\n    'B': 'Body of Individuals (BOI)',\r\n    'L': 'Local Authority',\r\n    'J': 'Artificial Juridical Person',\r\n    'G': 'Government',\r\n};\r\n\r\n/**\r\n * Extracts metadata from a PAN number.\r\n * @param pan The PAN string.\r\n * @returns Object containing validity and metadata.\r\n */\r\nexport const getPANInfo = (pan: string): PANInfo => {\r\n    if (!isValidPAN(pan)) {\r\n        return { valid: false };\r\n    }\r\n\r\n    const category = pan.charAt(3);\r\n    return {\r\n        valid: true,\r\n        category,\r\n        categoryDesc: PAN_CATEGORY_MAP[category] || 'Unknown',\r\n    };\r\n};\r\n","export interface TANInfo {\n    raw: string;\n    normalized: string;\n    cityCode: string;\n    sequenceNumber: string;\n    lastChar: string;\n    deductorType: string;\n}\n\n/**\n * Normalizes TAN input to a canonical form:\n * - Trims outer whitespace\n * - Converts to uppercase\n * - Removes spaces and hyphens\n *\n * @param input Raw TAN input.\n * @returns Normalized TAN candidate.\n */\nconst normalizeTAN = (input: string): string => (\n    input.trim().toUpperCase().replace(/[\\s-]/g, '')\n);\n\n/**\n * Validates a Tax Deduction and Collection Account Number (TAN).\n *\n * Validation rules:\n * - Input must be a non-empty string\n * - Normalized structure must be exactly `AAAA99999A`\n * - Position 4 is TAN-specific name-initial character (alphabet),\n *   not PAN entity-type logic\n *\n * @param input TAN input from caller.\n * @returns True for valid TAN, false for invalid input. Never throws.\n */\nexport const isValidTAN = (input: unknown): boolean => {\n    if (input == null) return false;\n    if (typeof input !== 'string') return false;\n    if (input.trim().length === 0) return false;\n\n    const normalized = normalizeTAN(input);\n    if (normalized.length !== 10) return false;\n\n    if (!/^[A-Z]{4}[0-9]{5}[A-Z]$/.test(normalized)) return false;\n\n    // TAN position 4: initial of deductor/collector name (alphabetic).\n    const tanSpecificChar = normalized.charAt(3);\n    if (!/^[A-Z]$/.test(tanSpecificChar)) return false;\n\n    return true;\n};\n\n/**\n * Returns parsed TAN metadata for valid input.\n *\n * @param input TAN string.\n * @returns Parsed TANInfo object, or null when TAN is invalid.\n */\nexport const getTANInfo = (input: string): TANInfo | null => {\n    if (!isValidTAN(input)) return null;\n\n    const normalized = normalizeTAN(input);\n    const nameInitial = normalized.charAt(3);\n\n    return {\n        raw: input,\n        normalized,\n        cityCode: normalized.substring(0, 4),\n        sequenceNumber: normalized.substring(4, 9),\n        lastChar: normalized.charAt(9),\n        deductorType: `Name-initial code (${nameInitial}): initial of deductor/collector name`,\n    };\n};\n","export interface UANPrefixRange {\n    start: number;\n    end: number;\n    note: string;\n}\n\n/**\n * Known EPFO UAN allocation prefix windows (first 3 digits).\n *\n * Note: EPFO does not publish a full public prefix-allocation matrix.\n * These ranges are conservative known-issued series used for validation.\n */\nexport const UAN_ALLOCATED_PREFIX_RANGES: readonly UANPrefixRange[] = [\n    {\n        start: 100,\n        end: 199,\n        note: 'EPFO series 1xx - allocated post-2014',\n    },\n];\n\n/**\n * Returns allocation range details for a normalized UAN, or null if unknown.\n * @param normalizedUAN The normalized 12-digit UAN candidate.\n * @returns Matching allocation range info when available.\n */\nexport const getAllocatedUANRange = (normalizedUAN: string): UANPrefixRange | null => {\n    const prefix = Number.parseInt(normalizedUAN.substring(0, 3), 10);\n    if (Number.isNaN(prefix)) return null;\n\n    const matchedRange = UAN_ALLOCATED_PREFIX_RANGES.find((range) => (\n        prefix >= range.start && prefix <= range.end\n    ));\n\n    return matchedRange ?? null;\n};\n","import { getAllocatedUANRange } from '../data/uanRanges';\n\nexport interface UANInfo {\n    raw: string;\n    normalized: string;\n    isAllocated: boolean;\n    rangeNote: string;\n}\n\nconst UAN_LENGTH = 12;\nconst UAN_STRUCTURE_REGEX = /^\\d{12}$/;\nconst ALL_ZEROS_REGEX = /^0{12}$/;\nconst ALL_SAME_DIGIT_REGEX = /^(\\d)\\1{11}$/;\n\n/**\n * Normalizes UAN input to canonical validation form:\n * - Trims outer whitespace\n * - Removes internal spaces and hyphens\n *\n * @param input Raw UAN input.\n * @returns Normalized UAN candidate.\n */\nconst normalizeUAN = (input: string): string => (\n    input.trim().replace(/[\\s-]/g, '')\n);\n\n/**\n * Validates an EPFO Universal Account Number (UAN).\n *\n * Validation rules:\n * - Input must be a non-empty string\n * - Normalized value must be exactly 12 digits\n * - Reject known synthetic invalid patterns (all zeros / all same digit)\n * - Prefix must fall in a known allocated EPFO range\n *\n * @param input UAN input from caller.\n * @returns True for valid UAN, false for invalid input. Never throws.\n */\nexport const isValidUAN = (input: unknown): boolean => {\n    if (input == null) return false;\n    if (typeof input !== 'string') return false;\n    if (input.trim().length === 0) return false;\n\n    const normalized = normalizeUAN(input);\n    if (normalized.length !== UAN_LENGTH) return false;\n    if (!UAN_STRUCTURE_REGEX.test(normalized)) return false;\n    if (ALL_ZEROS_REGEX.test(normalized)) return false;\n    if (ALL_SAME_DIGIT_REGEX.test(normalized)) return false;\n\n    const allocatedRange = getAllocatedUANRange(normalized);\n    if (allocatedRange == null) return false;\n\n    return true;\n};\n\n/**\n * Returns parsed UAN metadata for valid input.\n *\n * @param input UAN string.\n * @returns Parsed UANInfo object, or null when UAN is invalid.\n */\nexport const getUANInfo = (input: string): UANInfo | null => {\n    if (!isValidUAN(input)) return null;\n\n    const normalized = normalizeUAN(input);\n    const allocatedRange = getAllocatedUANRange(normalized);\n    if (allocatedRange == null) return null;\n\n    return {\n        raw: input,\n        normalized,\n        isAllocated: true,\n        rangeNote: allocatedRange.note,\n    };\n};\n","/**\r\n * Character set for Mod-36 checksum: 0-9, A-Z\r\n * Used in GSTIN validation (GST Identification Number)\r\n */\r\nconst CHARSET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\n/**\r\n * Generates the Mod-36 check digit for a 14-character GSTIN base.\r\n * \r\n * Algorithm:\r\n * 1. For each of the 14 characters (left to right, 0-indexed):\r\n *    - Convert character to numeric value (0-35)\r\n *    - Multiply by weight: weight = (index % 2) + 1, alternating 1, 2, 1, 2...\r\n *    - Calculate: quotient = product / 36, remainder = product % 36\r\n *    - Add quotient + remainder to sum\r\n * 2. Calculate check digit index: (36 - (sum % 36)) % 36\r\n * 3. Map index back to character\r\n * \r\n * Reference: Official GSTIN format specification (Ministry of Finance, India)\r\n * \r\n * @param gstinBase The first 14 characters of GSTIN (excluding check digit)\r\n * @returns The check digit index (0-35), or -1 if input is invalid\r\n */\r\nexport const generateGSTCheckDigit = (gstinBase: any): number => {\r\n    // Defensive: Handle null/undefined/non-string\r\n    if (gstinBase == null || typeof gstinBase !== 'string') return -1;\r\n    if (gstinBase.length !== 14) return -1;\r\n    \r\n    const input = gstinBase.toUpperCase();\r\n    let sum = 0;\r\n\r\n    for (let i = 0; i < 14; i++) {\r\n        const charValue = CHARSET.indexOf(input[i]);\r\n        if (charValue < 0) return -1; // Invalid character\r\n\r\n        // Weight alternates: 1, 2, 1, 2, ... (for positions 0, 1, 2, 3, ...)\r\n        const weight = (i % 2) + 1;\r\n        const product = charValue * weight;\r\n        \r\n        // Add both quotient and remainder\r\n        sum += Math.floor(product / 36) + (product % 36);\r\n    }\r\n\r\n    // Check digit index = (36 - (sum mod 36)) mod 36\r\n    const checkDigitIndex = (36 - (sum % 36)) % 36;\r\n    return checkDigitIndex;\r\n};\r\n\r\n/**\r\n * Validates a GSTIN using Mod-36 Checksum Algorithm.\r\n * \r\n * @param gstin The 15-character GSTIN string to validate\r\n * @returns True if the check digit is valid, false otherwise\r\n */\r\nexport const validateGSTCheckDigit = (gstin: any): boolean => {\r\n    // Defensive: Handle null/undefined/non-string\r\n    if (gstin == null || typeof gstin !== 'string') return false;\r\n    if (gstin.length !== 15) return false;\r\n    \r\n    const input = gstin.toUpperCase();\r\n    const gstinBase = input.substring(0, 14);\r\n    const providedCheckDigit = input.charAt(14);\r\n    \r\n    // Generate expected check digit\r\n    const expectedCheckDigitIndex = generateGSTCheckDigit(gstinBase);\r\n    if (expectedCheckDigitIndex < 0) return false;\r\n    \r\n    const expectedCheckDigit = CHARSET[expectedCheckDigitIndex];\r\n    return providedCheckDigit === expectedCheckDigit;\r\n};\r\n","/**\r\n * Mapping of GST State Codes (first 2 digits) to State Names.\r\n */\r\nexport const GST_STATE_CODES: Record<string, string> = {\r\n    '01': 'Jammu and Kashmir',\r\n    '02': 'Himachal Pradesh',\r\n    '03': 'Punjab',\r\n    '04': 'Chandigarh',\r\n    '05': 'Uttarakhand',\r\n    '06': 'Haryana',\r\n    '07': 'Delhi',\r\n    '08': 'Rajasthan',\r\n    '09': 'Uttar Pradesh',\r\n    '10': 'Bihar',\r\n    '11': 'Sikkim',\r\n    '12': 'Arunachal Pradesh',\r\n    '13': 'Nagaland',\r\n    '14': 'Manipur',\r\n    '15': 'Mizoram',\r\n    '16': 'Tripura',\r\n    '17': 'Meghalaya',\r\n    '18': 'Assam',\r\n    '19': 'West Bengal',\r\n    '20': 'Jharkhand',\r\n    '21': 'Odisha',\r\n    '22': 'Chhattisgarh',\r\n    '23': 'Madhya Pradesh',\r\n    '24': 'Gujarat',\r\n    '25': 'Daman and Diu', // Merged but code persists for legacy/current\r\n    '26': 'Dadra and Nagar Haveli',\r\n    '27': 'Maharashtra',\r\n    '28': 'Andhra Pradesh (Old)', // Check current usage\r\n    '29': 'Karnataka',\r\n    '30': 'Goa',\r\n    '31': 'Lakshadweep',\r\n    '32': 'Kerala',\r\n    '33': 'Tamil Nadu',\r\n    '34': 'Puducherry',\r\n    '35': 'Andaman and Nicobar Islands',\r\n    '36': 'Telangana',\r\n    '37': 'Andhra Pradesh',\r\n    '38': 'Ladakh',\r\n    '97': 'Other Territory',\r\n    '99': 'Centre Jurisdiction',\r\n};\r\n","import { validateGSTCheckDigit } from '../utils/mod36';\r\nimport { GST_STATE_CODES } from '../data/gstStates';\n\r\n/**\r\n * Validates a GSTIN.\r\n * @param gstin The 15-character GSTIN string.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const isValidGSTIN = (gstin: any): boolean => {\r\n    // 0. Null/undefined check\r\n    if (gstin == null) return false;\r\n    if (typeof gstin !== 'string') return false;\r\n    \r\n    // 1. Basic Regex Structure\r\n    const regex = /^\\d{2}[A-Z]{5}\\d{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$/;\r\n\r\n    if (!regex.test(gstin)) return false;\r\n\r\n    // 2. Validate Mod-36 Check Digit\r\n    return validateGSTCheckDigit(gstin);\r\n};\r\n\r\nexport interface GSTINInfo {\r\n    valid: boolean;\r\n    state?: string;\r\n    stateCode?: string;\r\n}\r\n\r\n/**\r\n * Extracts metadata from a GSTIN.\r\n * @param gstin The GSTIN string.\r\n * @returns Object containing validity and metadata (State Name).\r\n */\r\nexport const getGSTINInfo = (gstin: string): GSTINInfo => {\r\n    if (!isValidGSTIN(gstin)) {\r\n        return { valid: false };\r\n    }\r\n\r\n    const stateCode = gstin.substring(0, 2);\r\n\r\n    return {\r\n        valid: true,\r\n        stateCode,\r\n        state: GST_STATE_CODES[stateCode] || 'Unknown State',\r\n    };\r\n};\r\n","/**\r\n * A compressed set of popular/valid bank codes (First 4 chars of IFSC).\r\n * This is not exhaustive but covers major banks to demonstrate the pattern.\r\n * In a real scenario, this would be auto-generated from RBI master list.\r\n */\r\nexport const BANK_CODES = new Set([\r\n    'SBIN', // State Bank of India\r\n    'HDFC', // HDFC Bank\r\n    'ICIC', // ICICI Bank\r\n    'UTIB', // Axis Bank\r\n    'PUNB', // Punjab National Bank\r\n    'BKID', // Bank of India\r\n    'BARB', // Bank of Baroda\r\n    'CNRB', // Canara Bank\r\n    'UBIN', // Union Bank of India\r\n    'IOBA', // Indian Overseas Bank\r\n    'IDIB', // Indian Bank\r\n    'CBIN', // Central Bank of India\r\n    'MAHB', // Bank of Maharashtra\r\n    'ORBC', // Oriental Bank of Commerce (Merged)\r\n    'ALLA', // Allahabad Bank (Merged)\r\n    'ANDB', // Andhra Bank (Merged)\r\n    'SYNB', // Syndicate Bank (Merged)\r\n    'CORP', // Corporation Bank (Merged)\r\n    'VYSA', // ING Vysya (Merged)\r\n    'KKBK', // Kotak Mahindra Bank\r\n    'YESB', // Yes Bank\r\n    'INDB', // IndusInd Bank\r\n    'FDRL', // Federal Bank\r\n]);\r\n","import { BANK_CODES } from '../data/bankCodes';\n\r\n/**\r\n * Validates an IFSC Code.\r\n * @param ifsc The 11-character IFSC string.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const isValidIFSC = (ifsc: any): boolean => {\r\n    // 0. Null/undefined check\r\n    if (ifsc == null) return false;\r\n    if (typeof ifsc !== 'string') return false;\r\n    \r\n    // 1. Structure: 4 chars, 0, 6 chars (alphanumeric)\r\n    const regex = /^[A-Z]{4}0[A-Z0-9]{6}$/;\r\n    if (!regex.test(ifsc)) return false;\r\n\r\n    // 2. Knowledge: Check if the Bank Code (first 4 chars) is known\r\n    const bankCode = ifsc.substring(0, 4);\r\n\r\n    // In strict mode, we only allow known banks.\r\n    // In permissive mode (if we hadn't hardcoded), we'd skip.\r\n    // For this library, we want high performance validation, so checking the Set is fast.\r\n    return BANK_CODES.has(bankCode);\r\n};\r\n","/**\r\n * Mapping of first 2 digits of Pincode to Region/Circle.\r\n */\r\nexport const PINCODE_REGIONS: Record<string, string> = {\r\n    '11': 'Delhi',\r\n    '12': 'Haryana',\r\n    '13': 'Haryana',\r\n    '14': 'Punjab',\r\n    '15': 'Punjab',\r\n    '16': 'Chandigarh',\r\n    '17': 'Himachal Pradesh',\r\n    '18': 'Jammu & Kashmir',\r\n    '19': 'Jammu & Kashmir',\r\n    '20': 'Uttar Pradesh',\r\n    '21': 'Uttar Pradesh',\r\n    '22': 'Uttar Pradesh',\r\n    '23': 'Uttar Pradesh',\r\n    '24': 'Uttar Pradesh',\r\n    '25': 'Uttar Pradesh',\r\n    '26': 'Uttar Pradesh',\r\n    '27': 'Uttar Pradesh',\r\n    '28': 'Uttar Pradesh',\r\n    '30': 'Rajasthan',\r\n    '31': 'Rajasthan',\r\n    '32': 'Rajasthan',\r\n    '33': 'Rajasthan',\r\n    '34': 'Rajasthan',\r\n    '36': 'Gujarat',\r\n    '37': 'Gujarat',\r\n    '38': 'Gujarat',\r\n    '39': 'Gujarat',\r\n    '40': 'Maharashtra',\r\n    '41': 'Maharashtra',\r\n    '42': 'Maharashtra',\r\n    '43': 'Maharashtra',\r\n    '44': 'Maharashtra',\r\n    // ... (Can expand list)\r\n    '50': 'Telangana',\r\n    '51': 'Andhra Pradesh',\r\n    '52': 'Andhra Pradesh',\r\n    '53': 'Andhra Pradesh',\r\n    '56': 'Karnataka',\r\n    '57': 'Karnataka',\r\n    '58': 'Karnataka',\r\n    '59': 'Karnataka',\r\n    '60': 'Tamil Nadu',\r\n    '61': 'Tamil Nadu',\r\n    '62': 'Tamil Nadu',\r\n    '63': 'Tamil Nadu',\r\n    '64': 'Tamil Nadu',\r\n    '67': 'Kerala',\r\n    '68': 'Kerala',\r\n    '69': 'Kerala',\r\n    '70': 'West Bengal',\r\n    '71': 'West Bengal',\r\n    '72': 'West Bengal',\r\n    '73': 'West Bengal',\r\n    '74': 'West Bengal',\r\n    '78': 'Assam',\r\n    '79': 'North East',\r\n    '80': 'Bihar',\r\n    '81': 'Bihar',\r\n    '82': 'Bihar',\r\n    '83': 'Jharkhand',\r\n    '84': 'Bihar',\r\n    '85': 'Bihar',\r\n    '90': 'Army Postal Service',\r\n    '99': 'Army Postal Service',\r\n};\r\n","import { PINCODE_REGIONS } from '../data/postalCircles';\n\r\n/**\r\n * Validates an Indian Pincode.\r\n * @param pincode The 6-digit Pincode string.\r\n * @returns True if valid, false otherwise.\r\n */\r\nexport const isValidPincode = (pincode: any): boolean => {\r\n    // 0. Null/undefined check\r\n    if (pincode == null) return false;\r\n    if (typeof pincode !== 'string') return false;\r\n    \r\n    // 1. Structure: 6 digits, first digit 1-9\r\n    const regex = /^[1-9][0-9]{5}$/;\r\n    if (!regex.test(pincode)) return false;\r\n\r\n    // 2. Knowledge: Check if the Region (first 2 digits) exists in our map\r\n    const regionKey = pincode.substring(0, 2);\r\n    return Object.prototype.hasOwnProperty.call(PINCODE_REGIONS, regionKey);\r\n};\r\n\r\nexport interface PincodeInfo {\r\n    valid: boolean;\r\n    region?: string;\r\n}\r\n\r\n/**\r\n * Extracts metadata from a Pincode.\r\n * @param pincode The Pincode string.\r\n * @returns Object containing validity and region info.\r\n */\r\nexport const getPincodeInfo = (pincode: string): PincodeInfo => {\r\n    if (!isValidPincode(pincode)) {\r\n        return { valid: false };\r\n    }\r\n\r\n    const regionKey = pincode.substring(0, 2);\r\n    return {\r\n        valid: true,\r\n        region: PINCODE_REGIONS[regionKey] || 'Unknown Region',\r\n    };\r\n};\r\n","export interface VoterIDInfo {\r\n    raw: string;\r\n    normalized: string;\r\n    stateCode: string;\r\n    stateName: string;\r\n    sequenceNumber: string;\r\n}\r\n\r\nconst VOTER_ID_LENGTH = 10;\r\nconst VOTER_ID_REGEX = /^[A-Z]{3}[0-9]{7}$/;\r\nconst ALL_ZERO_SEQUENCE_REGEX = /^0{7}$/;\r\n\r\n/**\r\n * Normalizes Voter ID input to canonical validation form:\r\n * - Trims outer whitespace\r\n * - Converts to uppercase\r\n * - Removes internal spaces and hyphens\r\n *\r\n * @param input Raw Voter ID input.\r\n * @returns Normalized Voter ID candidate.\r\n */\r\nconst normalizeVoterID = (input: string): string => (\r\n    input.trim().toUpperCase().replace(/[\\s-]/g, '')\r\n);\r\n\r\n/**\r\n * Validates an EPIC / Voter ID number.\r\n *\r\n * Validation rules:\r\n * - Input must be a non-empty string\r\n * - Normalized value must be exactly 10 characters\r\n * - Structure must match `AAA9999999`\r\n * - Numeric suffix cannot be all zeros\r\n *\r\n * Note:\r\n * - The first three letters are FUSN (Assembly Constituency-level), not a\r\n *   publicly published state-code mapping. A complete official public prefix\r\n *   whitelist is not available, so no state-prefix whitelist check is applied.\r\n *\r\n * @param input Voter ID input from caller.\r\n * @returns True for valid Voter ID, false for invalid input. Never throws.\r\n */\r\nexport const isValidVoterID = (input: unknown): boolean => {\r\n    if (input == null) return false;\r\n    if (typeof input !== 'string') return false;\r\n    if (input.trim().length === 0) return false;\r\n\r\n    const normalized = normalizeVoterID(input);\r\n    if (normalized.length !== VOTER_ID_LENGTH) return false;\r\n    if (!VOTER_ID_REGEX.test(normalized)) return false;\r\n\r\n    const sequenceNumber = normalized.substring(3);\r\n    if (ALL_ZERO_SEQUENCE_REGEX.test(sequenceNumber)) return false;\r\n\r\n    return true;\r\n};\r\n\r\n/**\r\n * Returns parsed Voter ID metadata for valid input.\r\n *\r\n * @param input Voter ID string.\r\n * @returns Parsed VoterIDInfo object, or null when Voter ID is invalid.\r\n */\r\nexport const getVoterIDInfo = (input: string): VoterIDInfo | null => {\r\n    if (!isValidVoterID(input)) return null;\r\n\r\n    const normalized = normalizeVoterID(input);\r\n\r\n    return {\r\n        raw: input,\r\n        normalized,\r\n        stateCode: normalized.substring(0, 3),\r\n        stateName: 'Unknown',\r\n        sequenceNumber: normalized.substring(3),\r\n    };\r\n};\r\n","/**\r\n * Official vehicle-registration state/UT codes used by MoRTH.\r\n *\r\n * Notes:\r\n * - Includes all current 36 State/UT codes.\r\n * - Includes legacy aliases (`TS`, `OR`) for backward compatibility with\r\n *   historical driving licence records.\r\n */\r\nexport const INDIA_STATE_CODES: Record<string, string> = {\r\n    AN: 'Andaman and Nicobar Islands',\r\n    AP: 'Andhra Pradesh',\r\n    AR: 'Arunachal Pradesh',\r\n    AS: 'Assam',\r\n    BR: 'Bihar',\r\n    CH: 'Chandigarh',\r\n    CG: 'Chhattisgarh',\r\n    DD: 'Daman and Diu',\r\n    DL: 'Delhi',\r\n    DN: 'Dadra and Nagar Haveli',\r\n    GA: 'Goa',\r\n    GJ: 'Gujarat',\r\n    HR: 'Haryana',\r\n    HP: 'Himachal Pradesh',\r\n    JK: 'Jammu and Kashmir',\r\n    JH: 'Jharkhand',\r\n    KA: 'Karnataka',\r\n    KL: 'Kerala',\r\n    LA: 'Ladakh',\r\n    LD: 'Lakshadweep',\r\n    MH: 'Maharashtra',\r\n    ML: 'Meghalaya',\r\n    MN: 'Manipur',\r\n    MP: 'Madhya Pradesh',\r\n    MZ: 'Mizoram',\r\n    NL: 'Nagaland',\r\n    OD: 'Odisha',\r\n    PB: 'Punjab',\r\n    PY: 'Puducherry',\r\n    RJ: 'Rajasthan',\r\n    SK: 'Sikkim',\r\n    TN: 'Tamil Nadu',\r\n    TG: 'Telangana',\r\n    TR: 'Tripura',\r\n    UP: 'Uttar Pradesh',\r\n    UK: 'Uttarakhand',\r\n    WB: 'West Bengal',\r\n    // Legacy aliases\r\n    TS: 'Telangana (legacy code)',\r\n    OR: 'Odisha (legacy code)',\r\n};\r\n\r\ntype RTOCodeRange = readonly [number, number];\r\n\r\n/**\r\n * Valid RTO numeric code ranges by state code.\r\n *\r\n * This validator uses a conservative nationally accepted range (01-99) and\r\n * enforces state presence + range bounds. Exact per-state allotments are\r\n * dynamic at RTO level and vary over time.\r\n */\r\nexport const INDIA_RTO_CODE_RANGES: Record<string, readonly RTOCodeRange[]> = (\r\n    Object.keys(INDIA_STATE_CODES).reduce<Record<string, readonly RTOCodeRange[]>>((acc, stateCode) => {\r\n        acc[stateCode] = [[1, 99]] as const;\r\n        return acc;\r\n    }, {})\r\n);\r\n","import { INDIA_RTO_CODE_RANGES, INDIA_STATE_CODES } from '../data/rtoCodes';\r\n\r\nexport interface DLInfo {\r\n    raw: string;\r\n    normalized: string;\r\n    stateCode: string;\r\n    stateName: string;\r\n    rtoCode: string;\r\n    rtoNumber: number;\r\n    format: 'pre-2021' | 'post-2021' | 'unknown';\r\n    yearHint: number | null;\r\n}\r\n\r\nconst POST_2021_NORMALIZED_LENGTH = 15; // SS + RR + YYYY + NNNNNNN\r\nconst PRE_2021_NORMALIZED_LENGTH = 16;  // SS + RR + X + YYYY + NNNNNNN\r\nconst MIN_RTO_CODE = 1;\r\nconst MAX_RTO_CODE = 99;\r\nconst MIN_ISSUE_YEAR = 1900;\r\n\r\n/**\r\n * Normalizes driving licence input:\r\n * - Trims outer whitespace\r\n * - Converts to uppercase\r\n * - Removes spaces, hyphens and slashes\r\n */\r\nconst normaliseLD = (input: string): string => (\r\n    input.trim().toUpperCase().replace(/[\\s\\-/]/g, '')\r\n);\r\n\r\nconst getCurrentUpperYearBound = (): number => new Date().getFullYear() + 1;\r\n\r\nconst isPlausibleIssueYear = (year: number): boolean => (\r\n    Number.isInteger(year) && year >= MIN_ISSUE_YEAR && year <= getCurrentUpperYearBound()\r\n);\r\n\r\nconst isRTOCodeValidForState = (stateCode: string, rtoNumber: number): boolean => {\r\n    const ranges = INDIA_RTO_CODE_RANGES[stateCode];\r\n    if (!ranges || ranges.length === 0) return false;\r\n\r\n    return ranges.some(([min, max]) => rtoNumber >= min && rtoNumber <= max);\r\n};\r\n\r\nconst detectFormat = (normalized: string): DLInfo['format'] => {\r\n    if (normalized.length === POST_2021_NORMALIZED_LENGTH) return 'post-2021';\r\n    if (normalized.length === PRE_2021_NORMALIZED_LENGTH) return 'pre-2021';\r\n    return 'unknown';\r\n};\r\n\r\nconst extractYearHint = (normalized: string, format: DLInfo['format']): number | null => {\r\n    if (format === 'post-2021') {\r\n        const year = Number.parseInt(normalized.substring(4, 8), 10);\r\n        return isPlausibleIssueYear(year) ? year : null;\r\n    }\r\n\r\n    if (format === 'pre-2021') {\r\n        const year = Number.parseInt(normalized.substring(5, 9), 10);\r\n        return isPlausibleIssueYear(year) ? year : null;\r\n    }\r\n\r\n    return null;\r\n};\r\n\r\n/**\r\n * Validates Indian Driving Licence numbers.\r\n *\r\n * Supported normalized formats:\r\n * - Post-2021: SSRRYYYYNNNNNNN\r\n * - Pre-2021:  SSRRXYYYYNNNNNNN\r\n *\r\n * Where:\r\n * - SS: State code\r\n * - RR: RTO code (01-99)\r\n * - X: Legacy extra area code digit (pre-2021 only)\r\n * - YYYY: Year hint\r\n * - NNNNNNN: Running serial\r\n *\r\n * Returns false for any invalid input and never throws.\r\n */\r\nexport const isValidDrivingLicense = (input: unknown): boolean => {\r\n    if (input == null) return false;\r\n    if (typeof input !== 'string') return false;\r\n    if (input.trim().length === 0) return false;\r\n\r\n    const normalized = normaliseLD(input);\r\n    const format = detectFormat(normalized);\r\n    if (format === 'unknown') return false;\r\n\r\n    const stateCode = normalized.substring(0, 2);\r\n    if (!(stateCode in INDIA_STATE_CODES)) return false;\r\n\r\n    const rtoCode = normalized.substring(2, 4);\r\n    if (!/^\\d{2}$/.test(rtoCode)) return false;\r\n\r\n    const rtoNumber = Number.parseInt(rtoCode, 10);\r\n    if (Number.isNaN(rtoNumber)) return false;\r\n    if (rtoNumber < MIN_RTO_CODE || rtoNumber > MAX_RTO_CODE) return false;\r\n    if (!isRTOCodeValidForState(stateCode, rtoNumber)) return false;\r\n\r\n    const remainder = normalized.substring(4);\r\n    if (!/^\\d+$/.test(remainder)) return false;\r\n\r\n    if (format === 'post-2021') {\r\n        // YYYY + NNNNNNN\r\n        if (!/^\\d{4}\\d{7}$/.test(remainder)) return false;\r\n        const issueYear = Number.parseInt(remainder.substring(0, 4), 10);\r\n        if (!isPlausibleIssueYear(issueYear)) return false;\r\n        return true;\r\n    }\r\n\r\n    // pre-2021: X + YYYY + NNNNNNN\r\n    if (!/^\\d{1}\\d{4}\\d{7}$/.test(remainder)) return false;\r\n    const issueYear = Number.parseInt(remainder.substring(1, 5), 10);\r\n    if (!isPlausibleIssueYear(issueYear)) return false;\r\n    return true;\r\n};\r\n\r\n/**\r\n * Returns parsed metadata for a valid Indian Driving Licence.\r\n */\r\nexport const getDrivingLicenseInfo = (input: string): DLInfo | null => {\r\n    if (!isValidDrivingLicense(input)) return null;\r\n\r\n    const normalized = normaliseLD(input);\r\n    const format = detectFormat(normalized);\r\n    const stateCode = normalized.substring(0, 2);\r\n    const rtoCode = normalized.substring(2, 4);\r\n    const rtoNumber = Number.parseInt(rtoCode, 10);\r\n\r\n    return {\r\n        raw: input,\r\n        normalized,\r\n        stateCode,\r\n        stateName: INDIA_STATE_CODES[stateCode] ?? 'Unknown',\r\n        rtoCode,\r\n        rtoNumber,\r\n        format,\r\n        yearHint: extractYearHint(normalized, format),\r\n    };\r\n};\r\n","export interface PassportInfo {\r\n    raw: string;\r\n    normalized: string;\r\n    series: string;\r\n    seriesType: 'Regular' | 'Official' | 'Diplomatic' | 'Unknown';\r\n    sequenceNumber: string;\r\n    mrzValid: boolean | null;\r\n}\r\n\r\nconst PASSPORT_LENGTH = 8;\r\nconst PASSPORT_SEQUENCE_REGEX = /^\\d{7}$/;\r\nconst ALL_ZERO_SEQUENCE_REGEX = /^0{7}$/;\r\n\r\n/**\r\n * Based on publicly observed Indian passport number prefixes.\r\n *\r\n * Important:\r\n * - MEA does not publish a complete official mapping of all active/retired\r\n *   serial prefix letters.\r\n * - We intentionally avoid all 26 letters and accept only commonly observed\r\n *   prefixes in production records.\r\n * - Letters I/O/Q are excluded to reduce ambiguity and false positives.\r\n */\r\nconst VALID_PASSPORT_SERIES = new Set([\r\n    // Common ordinary booklet serial prefixes\r\n    'A', 'B', 'C', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\r\n    // Government-travel contexts seen in public records\r\n    'S', // Often associated with official/service passport contexts\r\n    'D', // Often associated with diplomatic passport contexts\r\n]);\r\n\r\nconst PASSPORT_SERIES_TYPE: Record<string, PassportInfo['seriesType']> = {\r\n    D: 'Diplomatic',\r\n    S: 'Official',\r\n    A: 'Regular',\r\n    B: 'Regular',\r\n    C: 'Regular',\r\n    E: 'Regular',\r\n    F: 'Regular',\r\n    G: 'Regular',\r\n    H: 'Regular',\r\n    J: 'Regular',\r\n    K: 'Regular',\r\n    L: 'Regular',\r\n    M: 'Regular',\r\n    N: 'Regular',\r\n    P: 'Regular',\r\n    R: 'Regular',\r\n    T: 'Regular',\r\n    U: 'Regular',\r\n    V: 'Regular',\r\n    W: 'Regular',\r\n    X: 'Regular',\r\n    Y: 'Regular',\r\n    Z: 'Regular',\r\n};\r\n\r\nconst normalizePassport = (input: string): string => (\r\n    input.trim().toUpperCase().replace(/\\s+/g, '')\r\n);\r\n\r\n/**\r\n * Validates Indian passport number.\r\n *\r\n * Supported normalized format: A1234567\r\n * - 1 letter prefix (series)\r\n * - 7 numeric digits\r\n * - digit block cannot be all zeros\r\n *\r\n * Note:\r\n * - MRZ check digit is not part of the passport number itself and therefore\r\n *   cannot be validated from this standalone field.\r\n */\r\nexport const isValidPassport = (input: unknown): boolean => {\r\n    if (input == null) return false;\r\n    if (typeof input !== 'string') return false;\r\n    if (input.trim().length === 0) return false;\r\n\r\n    const normalized = normalizePassport(input);\r\n    if (normalized.length !== PASSPORT_LENGTH) return false;\r\n\r\n    const series = normalized.substring(0, 1);\r\n    if (!VALID_PASSPORT_SERIES.has(series)) return false;\r\n\r\n    const sequenceNumber = normalized.substring(1);\r\n    if (!PASSPORT_SEQUENCE_REGEX.test(sequenceNumber)) return false;\r\n    if (ALL_ZERO_SEQUENCE_REGEX.test(sequenceNumber)) return false;\r\n\r\n    return true;\r\n};\r\n\r\n/**\r\n * Returns parsed metadata for a valid Indian passport number.\r\n */\r\nexport const getPassportInfo = (input: string): PassportInfo | null => {\r\n    if (!isValidPassport(input)) return null;\r\n\r\n    const normalized = normalizePassport(input);\r\n    const series = normalized.substring(0, 1);\r\n    const sequenceNumber = normalized.substring(1);\r\n\r\n    return {\r\n        raw: input,\r\n        normalized,\r\n        series,\r\n        seriesType: PASSPORT_SERIES_TYPE[series] ?? 'Unknown',\r\n        sequenceNumber,\r\n        mrzValid: null,\r\n    };\r\n};\r\n\r\n","// Source: NPCI PSP handle lists (TPAP, PPI, BHIM, NETC), researched 2026-04-05.\nexport const VALID_UPI_HANDLES: ReadonlySet<string> = new Set([\n    'abcdicici',\n    'abfspay',\n    'amazonpay',\n    'apl',\n    'aubank',\n    'axisb',\n    'axisbank',\n    'axl',\n    'barodampay',\n    'bpaywallet',\n    'bpunity',\n    'cred',\n    'cub',\n    'dhani',\n    'digikhata',\n    'ebixcash',\n    'equitas',\n    'fam',\n    'fbl',\n    'fifederal',\n    'fkaxis',\n    'freoicici',\n    'goaxb',\n    'hdfcbank',\n    'ibl',\n    'icici',\n    'idbi',\n    'idfcbank',\n    'idfcnetc',\n    'idfcpay',\n    'ikwik',\n    'indus',\n    'inhdfc',\n    'jarunity',\n    'jkb',\n    'jupiteraxis',\n    'kbaxis',\n    'kotak',\n    'kphdfc',\n    'kvb',\n    'liv',\n    'mahb',\n    'mairtel',\n    'mbk',\n    'mufin',\n    'mvhdfc',\n    'naviaxis',\n    'niyoicici',\n    'nye',\n    'obopay',\n    'okaxis',\n    'okhdfcbank',\n    'okicici',\n    'oksbi',\n    'omni',\n    'oneyes',\n    'oxymoney',\n    'paulpay',\n    'paymoni',\n    'paytm',\n    'payu',\n    'payworld',\n    'phonepe',\n    'pinelabs',\n    'pingpay',\n    'pnb',\n    'pockets',\n    'ptaxis',\n    'pthdfc',\n    'ptsbi',\n    'ptyes',\n    'pzw',\n    'rapl',\n    'rmrbl',\n    'sbi',\n    'seyes',\n    'shriramhdfcbank',\n    'sib',\n    'slice',\n    'spicepay',\n    'superyes',\n    'tapay',\n    'tapicici',\n    'tbl',\n    'timecosmos',\n    'topay',\n    'trans',\n    'unionbank',\n    'upi',\n    'waaxis',\n    'wahdfcbank',\n    'waicici',\n    'wasbi',\n    'yapl',\n    'ybl',\n    'yescred',\n    'yescurie',\n    'yesfam',\n    'yesg',\n    'yesgo',\n    'yespop',\n    'yestp',\n]);\n\nexport const UPI_PROVIDER_BANK_LOOKUP: Readonly<Record<string, string>> = Object.freeze({\n    abcdicici: 'ICICI Bank',\n    abfspay: 'Aditya Birla Payments Bank',\n    amazonpay: 'Amazon Pay (Axis Bank)',\n    apl: 'Axis Bank',\n    aubank: 'AU Small Finance Bank',\n    axisb: 'Axis Bank',\n    axisbank: 'Axis Bank',\n    axl: 'Axis Bank',\n    barodampay: 'Bank of Baroda',\n    bpaywallet: 'BharatPe (Bank Partner)',\n    bpunity: 'Unity Small Finance Bank',\n    cred: 'CRED (Bank Partner)',\n    cub: 'City Union Bank',\n    dhani: 'Dhani (Bank Partner)',\n    digikhata: 'DigiKhata (Bank Partner)',\n    ebixcash: 'EbixCash (Bank Partner)',\n    equitas: 'Equitas Small Finance Bank',\n    fam: 'FamApp (Bank Partner)',\n    fbl: 'Federal Bank',\n    fifederal: 'Federal Bank',\n    fkaxis: 'Axis Bank',\n    freoicici: 'ICICI Bank',\n    goaxb: 'Axis Bank',\n    hdfcbank: 'HDFC Bank',\n    ibl: 'ICICI Bank',\n    icici: 'ICICI Bank',\n    idbi: 'IDBI Bank',\n    idfcbank: 'IDFC FIRST Bank',\n    idfcnetc: 'IDFC FIRST Bank',\n    idfcpay: 'IDFC FIRST Bank',\n    ikwik: 'iKwik (Bank Partner)',\n    indus: 'IndusInd Bank',\n    inhdfc: 'HDFC Bank',\n    jarunity: 'Unity Small Finance Bank',\n    jkb: 'Jammu & Kashmir Bank',\n    jupiteraxis: 'Axis Bank',\n    kbaxis: 'Axis Bank',\n    kotak: 'Kotak Mahindra Bank',\n    kphdfc: 'HDFC Bank',\n    kvb: 'Karur Vysya Bank',\n    liv: 'LivQuik (Bank Partner)',\n    mahb: 'Bank of Maharashtra',\n    mairtel: 'Airtel Payments Bank',\n    mbk: 'MobiKwik',\n    mufin: 'Mufin (Bank Partner)',\n    mvhdfc: 'HDFC Bank',\n    naviaxis: 'Axis Bank',\n    niyoicici: 'ICICI Bank',\n    nye: 'Niyo (Bank Partner)',\n    obopay: 'OBOPAY (Bank Partner)',\n    okaxis: 'Axis Bank',\n    okhdfcbank: 'HDFC Bank',\n    okicici: 'ICICI Bank',\n    oksbi: 'State Bank of India',\n    omni: 'OmniCard (Bank Partner)',\n    oneyes: 'YES Bank',\n    oxymoney: 'Oxyzo Money (Bank Partner)',\n    paulpay: 'Paul Merchants (Bank Partner)',\n    paymoni: 'PayMoni (Bank Partner)',\n    paytm: 'Paytm Payments Bank',\n    payu: 'PayU (Bank Partner)',\n    payworld: 'Payworld (Bank Partner)',\n    phonepe: 'PhonePe (Multi-bank)',\n    pinelabs: 'Pine Labs (Bank Partner)',\n    pingpay: 'PingPay (Bank Partner)',\n    pnb: 'Punjab National Bank',\n    pockets: 'ICICI Bank',\n    ptaxis: 'Axis Bank',\n    pthdfc: 'HDFC Bank',\n    ptsbi: 'State Bank of India',\n    ptyes: 'YES Bank',\n    pzw: 'PayZapp (HDFC Bank)',\n    rapl: 'Axis Bank',\n    rmrbl: 'RBL Bank',\n    sbi: 'State Bank of India',\n    seyes: 'YES Bank',\n    shriramhdfcbank: 'HDFC Bank',\n    sib: 'South Indian Bank',\n    slice: 'slice (Bank Partner)',\n    spicepay: 'Spice Money (Bank Partner)',\n    superyes: 'YES Bank',\n    tapay: 'Tata Pay (Bank Partner)',\n    tapicici: 'ICICI Bank',\n    tbl: 'Bank Partner',\n    timecosmos: 'Cosmos Bank',\n    topay: 'Topay (Bank Partner)',\n    trans: 'TRANServ (Bank Partner)',\n    unionbank: 'Union Bank of India',\n    upi: 'NPCI / BHIM',\n    waaxis: 'Axis Bank',\n    wahdfcbank: 'HDFC Bank',\n    waicici: 'ICICI Bank',\n    wasbi: 'State Bank of India',\n    yapl: 'Axis Bank',\n    ybl: 'YES Bank',\n    yescred: 'YES Bank',\n    yescurie: 'YES Bank',\n    yesfam: 'YES Bank',\n    yesg: 'YES Bank',\n    yesgo: 'YES Bank',\n    yespop: 'YES Bank',\n    yestp: 'YES Bank',\n});\n","import { UPI_PROVIDER_BANK_LOOKUP, VALID_UPI_HANDLES } from '../data/upiHandles';\n\nexport interface UPIInfo {\n    raw: string;\n    normalized: string;\n    handle: string;\n    provider: string;\n    bank: string;\n    type: 'personal' | 'merchant' | 'unknown';\n}\n\nconst MIN_UPI_HANDLE_LENGTH = 3;\nconst MAX_UPI_HANDLE_LENGTH = 256;\nconst HANDLE_ALLOWED_REGEX = /^[a-z0-9._-]+$/;\nconst HANDLE_EDGE_ALPHANUMERIC_REGEX = /^[a-z0-9].*[a-z0-9]$/;\nconst CONSECUTIVE_SPECIAL_REGEX = /[._-][._-]/;\nconst PERSONAL_UPI_NUMBER_HANDLE_REGEX = /^\\d{7,10}$/;\nconst HANDLE_TOKEN_SPLIT_REGEX = /[._-]+/;\nconst MERCHANT_HINT_TOKENS = new Set([\n    'biz',\n    'business',\n    'corp',\n    'enterprise',\n    'enterprises',\n    'fastag',\n    'fuel',\n    'gas',\n    'hotel',\n    'mart',\n    'merchant',\n    'netc',\n    'petrol',\n    'pharma',\n    'pharmacy',\n    'pay',\n    'services',\n    'shop',\n    'store',\n    'traders',\n]);\n\nconst normalizeUPI = (input: string): string => input.trim().toLowerCase();\n\nconst hasExactlyOneAtSymbol = (value: string): boolean => {\n    const firstAt = value.indexOf('@');\n    if (firstAt === -1) return false;\n    return firstAt === value.lastIndexOf('@');\n};\n\nconst isValidUPIHandle = (handle: string): boolean => {\n    if (handle.length < MIN_UPI_HANDLE_LENGTH || handle.length > MAX_UPI_HANDLE_LENGTH) {\n        return false;\n    }\n\n    if (!HANDLE_ALLOWED_REGEX.test(handle)) return false;\n    if (!HANDLE_EDGE_ALPHANUMERIC_REGEX.test(handle)) return false;\n    if (CONSECUTIVE_SPECIAL_REGEX.test(handle)) return false;\n\n    return true;\n};\n\nconst detectUPIHandleType = (handle: string): UPIInfo['type'] => {\n    if (PERSONAL_UPI_NUMBER_HANDLE_REGEX.test(handle)) return 'personal';\n\n    const tokens = handle.split(HANDLE_TOKEN_SPLIT_REGEX).filter(Boolean);\n    if (tokens.some((token) => MERCHANT_HINT_TOKENS.has(token))) return 'merchant';\n\n    return 'unknown';\n};\n\n/**\n * Validates UPI ID in format: handle@provider.\n *\n * Rules:\n * - Accepts unknown input and never throws.\n * - Normalizes by trim + lowercase.\n * - Exactly one @ is required.\n * - Handle must be 3..256 chars, alphanumeric/dot/underscore/hyphen,\n *   cannot start/end with special chars, and cannot have consecutive special chars.\n * - Provider must match researched NPCI handle whitelist.\n */\nexport const isValidUPI = (input: unknown): boolean => {\n    if (input == null) return false;\n    if (typeof input !== 'string') return false;\n    if (input.trim().length === 0) return false;\n\n    const normalized = normalizeUPI(input);\n    if (!hasExactlyOneAtSymbol(normalized)) return false;\n\n    const [handle, provider] = normalized.split('@');\n    if (!handle || !provider) return false;\n    if (!isValidUPIHandle(handle)) return false;\n    if (!VALID_UPI_HANDLES.has(provider)) return false;\n\n    return true;\n};\n\n/**\n * Returns normalized UPI metadata for valid input.\n */\nexport const getUPIInfo = (input: string): UPIInfo | null => {\n    if (!isValidUPI(input)) return null;\n\n    const normalized = normalizeUPI(input);\n    const [handle, provider] = normalized.split('@');\n    const bank = UPI_PROVIDER_BANK_LOOKUP[provider] ?? 'Unknown';\n\n    return {\n        raw: input,\n        normalized,\n        handle,\n        provider,\n        bank,\n        type: detectUPIHandleType(handle),\n    };\n};\n","/**\n * Source: TRAI National Numbering consultation/recommendation material and\n * DoT mobile numbering allocation practice, researched 2026-04-05.\n *\n * Notes:\n * - Indian mobile NSN currently uses leading levels 6/7/8/9.\n * - DoT remains the custodian and allocates at MSC/prefix granularity.\n * - A complete, machine-readable, always-current public 6xxx allocation list\n *   is not published as a single stable dataset; keep this list conservative.\n */\nexport const VALID_MOBILE_PREFIXES: ReadonlySet<string> = new Set([\n    '6',\n    '7',\n    '8',\n    '9',\n]);\n\n/**\n * Explicit 6xxx prefixes that should be rejected in strict validation mode.\n *\n * Keep intentionally narrow to avoid rejecting legitimate allocations as\n * numbering updates evolve. Extend this set as validated DoT allocation data\n * is curated.\n */\nexport const INVALID_6_SERIES_PREFIXES: ReadonlySet<string> = new Set([\n    '6000',\n]);\n","import { INVALID_6_SERIES_PREFIXES, VALID_MOBILE_PREFIXES } from '../data/mobileSeriesAllocation';\n\nexport interface PhoneInfo {\n    raw: string;\n    normalized: string;\n    withCountryCode: string;\n    series: string;\n    isValid: boolean;\n}\n\nconst NORMALIZATION_SEPARATOR_REGEX = /[\\s\\-().]/g;\nconst INVALID_INPUT_CHAR_REGEX = /[^0-9+\\s\\-().]/;\nconst DIGITS_ONLY_REGEX = /^\\d+$/;\nconst TEN_DIGIT_REGEX = /^\\d{10}$/;\nconst ALL_SAME_DIGIT_REGEX = /^(\\d)\\1{9}$/;\nconst KNOWN_FAKE_PHONE_PATTERNS: ReadonlySet<string> = new Set([\n    '0123456789',\n    '1234567890',\n]);\n\nconst stripCountryCode = (value: string): string => {\n    if (value.startsWith('0091')) return value.substring(4);\n    if (value.startsWith('91') && value.length === 12) return value.substring(2);\n    return value;\n};\n\nconst normalizeLocalLeadingZero = (value: string): string => {\n    if (value.startsWith('0') && value.length > 10) return value.substring(1);\n    return value;\n};\n\n/**\n * Normalizes an Indian phone candidate to a 10-digit NSN.\n *\n * Supported cleanup:\n * - Removes spaces, hyphens, dots, and parentheses\n * - Strips +91 / 0091 / 91 country prefixes when applicable\n * - Strips a local leading 0 when present\n *\n * Returns null when normalization is impossible or cannot produce 10 digits.\n */\nexport const normalisePhone = (input: string): string | null => {\n    if (typeof input !== 'string') return null;\n    if (input.trim().length === 0) return null;\n    if (INVALID_INPUT_CHAR_REGEX.test(input)) return null;\n\n    let compact = input.trim().replace(NORMALIZATION_SEPARATOR_REGEX, '');\n    if (compact.length === 0) return null;\n\n    const plusCount = (compact.match(/\\+/g) ?? []).length;\n    if (plusCount > 1) return null;\n    if (plusCount === 1 && !compact.startsWith('+')) return null;\n\n    if (compact.startsWith('+')) {\n        if (!compact.startsWith('+91')) return null;\n        compact = compact.substring(3);\n    }\n\n    if (!DIGITS_ONLY_REGEX.test(compact)) return null;\n\n    compact = stripCountryCode(compact);\n    compact = normalizeLocalLeadingZero(compact);\n    compact = stripCountryCode(compact);\n    compact = normalizeLocalLeadingZero(compact);\n\n    if (!TEN_DIGIT_REGEX.test(compact)) return null;\n    return compact;\n};\n\nconst isValidNormalizedIndianPhone = (normalized: string): boolean => {\n    if (!TEN_DIGIT_REGEX.test(normalized)) return false;\n    if (ALL_SAME_DIGIT_REGEX.test(normalized)) return false;\n    if (KNOWN_FAKE_PHONE_PATTERNS.has(normalized)) return false;\n\n    const series = normalized.charAt(0);\n    if (!VALID_MOBILE_PREFIXES.has(series)) return false;\n\n    if (series === '6') {\n        const prefix4 = normalized.substring(0, 4);\n        if (INVALID_6_SERIES_PREFIXES.has(prefix4)) return false;\n    }\n\n    return true;\n};\n\n/**\n * Validates an Indian mobile number candidate.\n *\n * Returns false for invalid input and never throws.\n */\nexport const isValidIndianPhone = (input: unknown): boolean => {\n    if (input == null) return false;\n    if (typeof input !== 'string') return false;\n\n    const normalized = normalisePhone(input);\n    if (normalized == null) return false;\n\n    return isValidNormalizedIndianPhone(normalized);\n};\n\n/**\n * Returns normalized metadata for Indian phone input.\n *\n * Returns null if the value cannot be normalized to a 10-digit candidate.\n */\nexport const getPhoneInfo = (input: string): PhoneInfo | null => {\n    const normalized = normalisePhone(input);\n    if (normalized == null) return null;\n    if (!isValidNormalizedIndianPhone(normalized)) return null;\n\n    return {\n        raw: input,\n        normalized,\n        withCountryCode: `+91${normalized}`,\n        series: normalized.charAt(0),\n        isValid: true,\n    };\n};\n","import { INDIA_STATE_CODES } from './rtoCodes';\n\nconst LEGACY_UAM_ONLY_CODES = new Set([\n    'OR',\n    'TS',\n]);\n\nconst buildCodeNameMap = (includeLegacy: boolean): Readonly<Record<string, string>> => {\n    const entries = Object.entries(INDIA_STATE_CODES).filter(([code]) => (\n        includeLegacy || !LEGACY_UAM_ONLY_CODES.has(code)\n    ));\n    return Object.freeze(Object.fromEntries(entries));\n};\n\n/**\n * Udyam state/UT code map for current format `UDYAM-XX-00-0000000`.\n *\n * Uses 2-letter Indian state/UT abbreviations and excludes legacy aliases that\n * were historically seen in UAM-era records.\n */\nexport const UDYAM_STATE_CODE_NAME_MAP = buildCodeNameMap(false);\n\nexport const UDYAM_STATE_CODES: ReadonlySet<string> = new Set(\n    Object.keys(UDYAM_STATE_CODE_NAME_MAP)\n);\n\n/**\n * UAM accepts legacy state aliases in historical records.\n */\nexport const UAM_STATE_CODE_NAME_MAP = buildCodeNameMap(true);\n\nexport const UAM_STATE_CODES: ReadonlySet<string> = new Set(\n    Object.keys(UAM_STATE_CODE_NAME_MAP)\n);\n","import {\n    UAM_STATE_CODE_NAME_MAP,\n    UAM_STATE_CODES,\n    UDYAM_STATE_CODE_NAME_MAP,\n    UDYAM_STATE_CODES,\n} from '../data/udyamStateCodes';\n\nexport interface MSMEInfo {\n    raw: string;\n    normalized: string;\n    format: 'udyam' | 'uam';\n    stateCode: string;\n    stateName: string;\n    districtCode: string;\n    serialNumber: string;\n}\n\ninterface ParsedUdyam {\n    stateCode: string;\n    districtCode: string;\n    serialNumber: string;\n}\n\ninterface ParsedUAM {\n    stateCode: string;\n    districtCode: string;\n    serialNumber: string;\n}\n\nconst UDYAM_PREFIX = 'UDYAM';\nconst UDYAM_SERIAL_ZERO = '0000000';\nconst UAM_REGEX = /^[A-Z]{2}[0-9]{2}[A-Z][0-9]{7}$/;\nconst UDYAM_STATE_CODE_REGEX = /^[A-Z]{2}$/;\nconst UDYAM_DISTRICT_REGEX = /^[0-9]{2}$/;\nconst UDYAM_SERIAL_REGEX = /^[0-9]{7}$/;\nconst DISTRICT_MIN = 1;\nconst DISTRICT_MAX = 99;\n\nconst normalizeMSME = (input: string): string => (\n    input.trim().toUpperCase().replace(/\\s+/g, '')\n);\n\nconst isDistrictCodeInRange = (districtCode: string): boolean => {\n    if (!UDYAM_DISTRICT_REGEX.test(districtCode)) return false;\n    const districtNumber = Number.parseInt(districtCode, 10);\n    return districtNumber >= DISTRICT_MIN && districtNumber <= DISTRICT_MAX;\n};\n\nconst parseUdyam = (normalized: string): ParsedUdyam | null => {\n    if (!normalized.startsWith(`${UDYAM_PREFIX}-`)) return null;\n\n    const parts = normalized.split('-');\n    if (parts.length !== 4) return null;\n\n    const [prefix, stateCode, districtCode, serialNumber] = parts;\n    if (prefix !== UDYAM_PREFIX) return null;\n    if (!UDYAM_STATE_CODE_REGEX.test(stateCode)) return null;\n    if (!UDYAM_STATE_CODES.has(stateCode)) return null;\n    if (!isDistrictCodeInRange(districtCode)) return null;\n    if (!UDYAM_SERIAL_REGEX.test(serialNumber)) return null;\n    if (serialNumber === UDYAM_SERIAL_ZERO) return null;\n\n    return {\n        stateCode,\n        districtCode,\n        serialNumber,\n    };\n};\n\nconst parseUAM = (normalized: string): ParsedUAM | null => {\n    if (!UAM_REGEX.test(normalized)) return null;\n\n    const stateCode = normalized.substring(0, 2);\n    const districtCode = normalized.substring(2, 4);\n    const serialNumber = normalized.substring(5);\n\n    if (!UAM_STATE_CODES.has(stateCode)) return null;\n    if (!isDistrictCodeInRange(districtCode)) return null;\n    if (serialNumber === UDYAM_SERIAL_ZERO) return null;\n\n    return {\n        stateCode,\n        districtCode,\n        serialNumber,\n    };\n};\n\n/**\n * Validates MSME Udyam Registration Number.\n *\n * Expected normalized format: UDYAM-XX-00-0000000\n */\nexport const isValidMSME = (input: unknown): boolean => {\n    if (input == null) return false;\n    if (typeof input !== 'string') return false;\n    if (input.trim().length === 0) return false;\n\n    const normalized = normalizeMSME(input);\n    return parseUdyam(normalized) != null;\n};\n\n/**\n * Validates legacy UAM (Udyog Aadhaar Memorandum) identifier.\n *\n * Expected format: XX00A0000000 (12 chars total).\n */\nexport const isValidUAM = (input: unknown): boolean => {\n    if (input == null) return false;\n    if (typeof input !== 'string') return false;\n    if (input.trim().length === 0) return false;\n\n    const normalized = normalizeMSME(input);\n    return parseUAM(normalized) != null;\n};\n\n/**\n * Returns parsed metadata for valid MSME IDs (Udyam or UAM).\n */\nexport const getMSMEInfo = (input: string): MSMEInfo | null => {\n    const normalized = normalizeMSME(input);\n\n    const udyam = parseUdyam(normalized);\n    if (udyam != null) {\n        return {\n            raw: input,\n            normalized: `${UDYAM_PREFIX}-${udyam.stateCode}-${udyam.districtCode}-${udyam.serialNumber}`,\n            format: 'udyam',\n            stateCode: udyam.stateCode,\n            stateName: UDYAM_STATE_CODE_NAME_MAP[udyam.stateCode] ?? 'Unknown',\n            districtCode: udyam.districtCode,\n            serialNumber: udyam.serialNumber,\n        };\n    }\n\n    const uam = parseUAM(normalized);\n    if (uam != null) {\n        return {\n            raw: input,\n            normalized,\n            format: 'uam',\n            stateCode: uam.stateCode,\n            stateName: UAM_STATE_CODE_NAME_MAP[uam.stateCode] ?? 'Unknown',\n            districtCode: uam.districtCode,\n            serialNumber: uam.serialNumber,\n        };\n    }\n\n    return null;\n};\n"]}