{"version":3,"sources":["../src/intelligence/correction.ts"],"names":["hint"],"mappings":"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","file":"chunk-ZDVXCJVC.mjs","sourcesContent":["import { generateGSTCheckDigit, validateGSTCheckDigit, validateVerhoeff } from '../utils';\r\nimport { isValidAadhaar } from '../validators/aadhaar';\r\nimport { isValidPAN } from '../validators/pan';\r\nimport { isValidGSTIN } from '../validators/gstin';\r\nimport { isValidIFSC } from '../validators/ifsc';\r\nimport { isValidPincode } from '../validators/pincode';\r\nimport { isValidTAN } from '../validators/tan';\r\nimport { isValidUAN } from '../validators/uan';\r\nimport { isValidIndianPhone, normalisePhone } from '../validators/phone';\r\nimport { isValidUPI } from '../validators/upi';\r\nimport { isValidMSME, isValidUAM } from '../validators/msme';\r\nimport { isValidVoterID } from '../validators/voterId';\r\nimport { isValidPassport } from '../validators/passport';\r\nimport { BANK_CODES } from '../data/bankCodes';\r\nimport { PINCODE_REGIONS } from '../data/postalCircles';\r\nimport { getAllocatedUANRange } from '../data/uanRanges';\r\nimport { INVALID_6_SERIES_PREFIXES, VALID_MOBILE_PREFIXES } from '../data/mobileSeriesAllocation';\r\nimport { VALID_UPI_HANDLES } from '../data/upiHandles';\r\nimport { UDYAM_STATE_CODES } from '../data/udyamStateCodes';\r\n\r\nconst GST_CHARSET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\nconst PAN_ENTITY_TYPES = new Set(['C', 'P', 'H', 'F', 'A', 'T', 'B', 'L', 'J', 'G']);\r\n\r\ntype SupportedDocumentType =\r\n    | 'aadhaar'\r\n    | 'pan'\r\n    | 'gstin'\r\n    | 'ifsc'\r\n    | 'pincode'\r\n    | 'tan'\r\n    | 'uan'\r\n    | 'phone'\r\n    | 'upi'\r\n    | 'msme'\r\n    | 'voterid'\r\n    | 'passport';\r\n\r\nconst SUPPORTED_DOC_TYPES: ReadonlySet<SupportedDocumentType> = new Set([\r\n    'aadhaar',\r\n    'pan',\r\n    'gstin',\r\n    'ifsc',\r\n    'pincode',\r\n    'tan',\r\n    'uan',\r\n    'phone',\r\n    'upi',\r\n    'msme',\r\n    'voterid',\r\n    'passport',\r\n]);\r\n\r\nconst isSupportedDocumentType = (documentType: string): documentType is SupportedDocumentType => (\r\n    SUPPORTED_DOC_TYPES.has(documentType as SupportedDocumentType)\r\n);\r\n\r\nconst DOCUMENT_TYPE_ALIASES: Readonly<Record<string, SupportedDocumentType>> = {\r\n    aadhaar: 'aadhaar',\r\n    pan: 'pan',\r\n    gstin: 'gstin',\r\n    ifsc: 'ifsc',\r\n    pincode: 'pincode',\r\n    tan: 'tan',\r\n    uan: 'uan',\r\n    phone: 'phone',\r\n    upi: 'upi',\r\n    msme: 'msme',\r\n    voterid: 'voterid',\r\n    voter_id: 'voterid',\r\n    voter: 'voterid',\r\n    passport: 'passport',\r\n};\r\n\r\nconst normalizeDocumentType = (documentType: string): string => (\r\n    (documentType || '').trim().toLowerCase().replace(/[\\s-]+/g, '_')\r\n);\r\n\r\nexport type CorrectionConfidence = 'EXACT' | 'HIGH' | 'MEDIUM' | 'LOW' | 'NONE';\r\n\r\nexport interface CorrectionCandidate {\r\n    corrected: string;\r\n    changedPosition: number;\r\n    changedFrom: string;\r\n    changedTo: string;\r\n    verificationAlgorithm: string;\r\n}\r\n\r\nexport interface CorrectionResult {\r\n    original: string;\r\n    normalizedInput: string;\r\n    documentType: string;\r\n    isAlreadyValid: boolean;\r\n    confidence: CorrectionConfidence;\r\n    candidates: CorrectionCandidate[];\r\n    primarySuggestion: string | null;\r\n    note: string;\r\n}\r\n\r\nconst normalizeInput = (documentType: SupportedDocumentType, input: string): string => {\r\n    const base = input.trim();\r\n\r\n    switch (documentType) {\r\n        case 'aadhaar':\r\n        case 'pincode':\r\n        case 'uan':\r\n        case 'phone':\r\n            return base.replace(/\\D/g, '');\r\n        case 'upi':\r\n            return base.toLowerCase().replace(/\\s+/g, '');\r\n        case 'msme':\r\n            return base.toUpperCase().replace(/\\s+/g, '');\r\n        default:\r\n            return base.toUpperCase().replace(/[\\s-]/g, '');\r\n    }\r\n};\r\n\r\nconst isDocumentValid = (documentType: SupportedDocumentType, normalizedInput: string): boolean => {\r\n    switch (documentType) {\r\n        case 'aadhaar':\r\n            return isValidAadhaar(normalizedInput);\r\n        case 'pan':\r\n            return isValidPAN(normalizedInput);\r\n        case 'gstin':\r\n            return isValidGSTIN(normalizedInput);\r\n        case 'ifsc':\r\n            return isValidIFSC(normalizedInput);\r\n        case 'pincode':\r\n            return isValidPincode(normalizedInput);\r\n        case 'tan':\r\n            return isValidTAN(normalizedInput);\r\n        case 'uan':\r\n            return isValidUAN(normalizedInput);\r\n        case 'phone':\r\n            return isValidIndianPhone(normalizedInput);\r\n        case 'upi':\r\n            return isValidUPI(normalizedInput);\r\n        case 'msme':\r\n            return isValidMSME(normalizedInput);\r\n        case 'voterid':\r\n            return isValidVoterID(normalizedInput);\r\n        case 'passport':\r\n            return isValidPassport(normalizedInput);\r\n        default:\r\n            return false;\r\n    }\r\n};\r\n\r\nconst recoverAadhaarByVerhoeff = (input: string): CorrectionCandidate[] => {\r\n    if (!/^\\d{12}$/.test(input)) return [];\r\n\r\n    const candidates: CorrectionCandidate[] = [];\r\n\r\n    for (let position = 0; position < input.length; position += 1) {\r\n        const originalChar = input[position];\r\n\r\n        for (let digit = 0; digit <= 9; digit += 1) {\r\n            const replacement = String(digit);\r\n            if (replacement === originalChar) continue;\r\n\r\n            const corrected = (\r\n                input.slice(0, position)\r\n                + replacement\r\n                + input.slice(position + 1)\r\n            );\r\n\r\n            if (!validateVerhoeff(corrected)) continue;\r\n\r\n            candidates.push({\r\n                corrected,\r\n                changedPosition: position + 1,\r\n                changedFrom: originalChar,\r\n                changedTo: replacement,\r\n                verificationAlgorithm: 'verhoeff',\r\n            });\r\n        }\r\n    }\r\n\r\n    return candidates.sort((a, b) => (\r\n        b.changedPosition - a.changedPosition || a.corrected.localeCompare(b.corrected)\r\n    ));\r\n};\r\n\r\nconst isStructurallyValidGSTINBase = (base: string): boolean => (\r\n    /^\\d{2}[A-Z]{5}\\d{4}[A-Z][1-9A-Z]Z$/.test(base)\r\n);\r\n\r\nconst recoverGSTINCheckDigit = (input: string): CorrectionCandidate | null => {\r\n    const normalized = input.toUpperCase();\r\n    if (normalized.length !== 14 && normalized.length !== 15) return null;\r\n\r\n    const base = normalized.slice(0, 14);\r\n    if (!isStructurallyValidGSTINBase(base)) return null;\r\n\r\n    const checkDigitIndex = generateGSTCheckDigit(base);\r\n    if (checkDigitIndex < 0) return null;\r\n\r\n    const expected = GST_CHARSET[checkDigitIndex];\r\n    const existing = normalized.length === 15 ? normalized.charAt(14) : '';\r\n    if (existing === expected) return null;\r\n\r\n    return {\r\n        corrected: `${base}${expected}`,\r\n        changedPosition: 15,\r\n        changedFrom: existing,\r\n        changedTo: expected,\r\n        verificationAlgorithm: 'mod36',\r\n    };\r\n};\r\n\r\nconst firstInvalidPosition = (value: string, predicate: (char: string) => boolean): number => {\r\n    for (let i = 0; i < value.length; i += 1) {\r\n        if (!predicate(value.charAt(i))) return i + 1;\r\n    }\r\n    return -1;\r\n};\r\n\r\nconst getStructuralHint = (documentType: string, input: string): string => {\r\n    const normalizedDocType = (documentType || '').toLowerCase();\r\n\r\n    if (normalizedDocType === 'aadhaar') {\r\n        const value = input.replace(/\\D/g, '');\r\n        if (value.length !== 12) return `Aadhaar must be exactly 12 digits; received length ${value.length}.`;\r\n\r\n        const nonDigitPosition = firstInvalidPosition(value, (char) => /[0-9]/.test(char));\r\n        if (nonDigitPosition !== -1) {\r\n            return `Position ${nonDigitPosition} must be a digit, received '${value.charAt(nonDigitPosition - 1)}'.`;\r\n        }\r\n\r\n        if (!/^[2-9]/.test(value)) {\r\n            return `Position 1 must be a digit from 2 to 9, received '${value.charAt(0)}'.`;\r\n        }\r\n\r\n        if (!validateVerhoeff(value)) {\r\n            return 'Aadhaar checksum validation failed (Verhoeff).';\r\n        }\r\n\r\n        return 'Aadhaar appears structurally valid; no deterministic correction could be inferred.';\r\n    }\r\n\r\n    if (normalizedDocType === 'gstin') {\r\n        const value = input.toUpperCase().replace(/[\\s-]/g, '');\r\n        if (value.length !== 15) return `GSTIN must be exactly 15 characters; received length ${value.length}.`;\r\n\r\n        const statePos = firstInvalidPosition(value.slice(0, 2), (char) => /[0-9]/.test(char));\r\n        if (statePos !== -1) {\r\n            return `Position ${statePos} must be a digit for GST state code, received '${value.charAt(statePos - 1)}'.`;\r\n        }\r\n\r\n        const panAlphaPos = firstInvalidPosition(value.slice(2, 7), (char) => /[A-Z]/.test(char));\r\n        if (panAlphaPos !== -1) {\r\n            const position = panAlphaPos + 2;\r\n            return `Position ${position} must be an uppercase letter, received '${value.charAt(position - 1)}'.`;\r\n        }\r\n\r\n        const panDigitPos = firstInvalidPosition(value.slice(7, 11), (char) => /[0-9]/.test(char));\r\n        if (panDigitPos !== -1) {\r\n            const position = panDigitPos + 7;\r\n            return `Position ${position} must be a digit, received '${value.charAt(position - 1)}'.`;\r\n        }\r\n\r\n        if (!/[A-Z]/.test(value.charAt(11))) {\r\n            return `Position 12 must be an uppercase letter, received '${value.charAt(11)}'.`;\r\n        }\r\n\r\n        if (!/[1-9A-Z]/.test(value.charAt(12))) {\r\n            return `Position 13 must be alphanumeric (1-9/A-Z), received '${value.charAt(12)}'.`;\r\n        }\r\n\r\n        if (value.charAt(13) !== 'Z') {\r\n            return `Position 14 must be 'Z', received '${value.charAt(13)}'.`;\r\n        }\r\n\r\n        if (!/[0-9A-Z]/.test(value.charAt(14))) {\r\n            return `Position 15 must be an alphanumeric checksum character, received '${value.charAt(14)}'.`;\r\n        }\r\n\r\n        if (!validateGSTCheckDigit(value)) {\r\n            return 'GSTIN checksum mismatch; recompute the 15th character using Mod-36.';\r\n        }\r\n\r\n        return 'GSTIN appears structurally valid; no deterministic correction could be inferred.';\r\n    }\r\n\r\n    if (normalizedDocType === 'pan') {\r\n        const value = input.toUpperCase().replace(/[\\s-]/g, '');\r\n        if (value.length !== 10) return `PAN must be exactly 10 characters; received length ${value.length}.`;\r\n\r\n        const alphaPrefixPosition = firstInvalidPosition(value.slice(0, 5), (char) => /[A-Z]/.test(char));\r\n        if (alphaPrefixPosition !== -1) {\r\n            return `Position ${alphaPrefixPosition} must be an uppercase letter, received '${value.charAt(alphaPrefixPosition - 1)}'.`;\r\n        }\r\n\r\n        if (!PAN_ENTITY_TYPES.has(value.charAt(3))) {\r\n            return `Position 4 must be one of C,P,H,F,A,T,B,L,J,G; received '${value.charAt(3)}'.`;\r\n        }\r\n\r\n        const numericPosition = firstInvalidPosition(value.slice(5, 9), (char) => /[0-9]/.test(char));\r\n        if (numericPosition !== -1) {\r\n            const position = numericPosition + 5;\r\n            return `Position ${position} must be a digit, received '${value.charAt(position - 1)}'.`;\r\n        }\r\n\r\n        if (!/[A-Z]/.test(value.charAt(9))) {\r\n            return `Position 10 must be an uppercase letter, received '${value.charAt(9)}'.`;\r\n        }\r\n\r\n        return 'PAN structure appears valid; no checksum-driven correction is available.';\r\n    }\r\n\r\n    if (normalizedDocType === 'ifsc') {\r\n        const value = input.toUpperCase().replace(/[\\s-]/g, '');\r\n        if (value.length !== 11) return `IFSC must be exactly 11 characters; received length ${value.length}.`;\r\n\r\n        const bankCodePosition = firstInvalidPosition(value.slice(0, 4), (char) => /[A-Z]/.test(char));\r\n        if (bankCodePosition !== -1) {\r\n            return `Position ${bankCodePosition} must be an uppercase letter, received '${value.charAt(bankCodePosition - 1)}'.`;\r\n        }\r\n\r\n        if (value.charAt(4) !== '0') {\r\n            return `Position 5 must be '0', received '${value.charAt(4)}'.`;\r\n        }\r\n\r\n        const branchPosition = firstInvalidPosition(value.slice(5), (char) => /[A-Z0-9]/.test(char));\r\n        if (branchPosition !== -1) {\r\n            const position = branchPosition + 5;\r\n            return `Position ${position} must be uppercase alphanumeric, received '${value.charAt(position - 1)}'.`;\r\n        }\r\n\r\n        const bankCode = value.slice(0, 4);\r\n        if (!BANK_CODES.has(bankCode)) {\r\n            return `Bank code '${bankCode}' is not present in the supported IFSC bank-code set.`;\r\n        }\r\n\r\n        return 'IFSC appears structurally valid; no deterministic correction is available.';\r\n    }\r\n\r\n    if (normalizedDocType === 'pincode') {\r\n        const value = input.replace(/\\D/g, '');\r\n        if (value.length !== 6) return `Pincode must be exactly 6 digits; received length ${value.length}.`;\r\n\r\n        if (!/^\\d{6}$/.test(value)) {\r\n            return 'Pincode must contain only digits 0-9.';\r\n        }\r\n\r\n        if (!/^[1-9]/.test(value)) {\r\n            return `Position 1 must be between 1 and 9, received '${value.charAt(0)}'.`;\r\n        }\r\n\r\n        const regionKey = value.slice(0, 2);\r\n        if (!Object.prototype.hasOwnProperty.call(PINCODE_REGIONS, regionKey)) {\r\n            return `Pincode prefix '${regionKey}' is not mapped to a known postal region.`;\r\n        }\r\n\r\n        return 'Pincode appears structurally valid; no deterministic correction is available.';\r\n    }\r\n\r\n    if (normalizedDocType === 'tan') {\r\n        const value = input.toUpperCase().replace(/[\\s-]/g, '');\r\n        if (value.length !== 10) return `TAN must be exactly 10 characters; received length ${value.length}.`;\r\n\r\n        const alphaPrefixPosition = firstInvalidPosition(value.slice(0, 4), (char) => /[A-Z]/.test(char));\r\n        if (alphaPrefixPosition !== -1) {\r\n            return `Position ${alphaPrefixPosition} must be an uppercase letter, received '${value.charAt(alphaPrefixPosition - 1)}'.`;\r\n        }\r\n\r\n        const numericPosition = firstInvalidPosition(value.slice(4, 9), (char) => /[0-9]/.test(char));\r\n        if (numericPosition !== -1) {\r\n            const position = numericPosition + 4;\r\n            return `Position ${position} must be a digit, received '${value.charAt(position - 1)}'.`;\r\n        }\r\n\r\n        if (!/[A-Z]/.test(value.charAt(9))) {\r\n            return `Position 10 must be an uppercase letter, received '${value.charAt(9)}'.`;\r\n        }\r\n\r\n        return 'TAN appears structurally valid; no checksum-driven correction is available.';\r\n    }\r\n\r\n    if (normalizedDocType === 'uan') {\r\n        const value = input.replace(/[\\s-]/g, '');\r\n        if (value.length !== 12) return `UAN must be exactly 12 digits; received length ${value.length}.`;\r\n        if (!/^\\d{12}$/.test(value)) return 'UAN must contain only digits 0-9.';\r\n        if (/^0{12}$/.test(value)) return 'UAN cannot be all zeros.';\r\n        if (/^(\\d)\\1{11}$/.test(value)) return 'UAN cannot repeat the same digit for all 12 positions.';\r\n\r\n        if (getAllocatedUANRange(value) == null) {\r\n            return 'UAN prefix is outside known allocated EPFO ranges in this library.';\r\n        }\r\n\r\n        return 'UAN appears structurally valid; no deterministic correction is available.';\r\n    }\r\n\r\n    if (normalizedDocType === 'phone') {\r\n        const trimmed = input.trim();\r\n        if (trimmed.length === 0) return 'Phone input is empty.';\r\n        if (/[^0-9+\\s\\-().]/.test(trimmed)) {\r\n            return 'Phone number contains unsupported characters; allowed: digits, +, space, -, (, ).';\r\n        }\r\n\r\n        const normalized = normalisePhone(trimmed);\r\n        if (normalized == null) {\r\n            return 'Phone number could not be normalized to a 10-digit Indian mobile number.';\r\n        }\r\n\r\n        if (/^(\\d)\\1{9}$/.test(normalized)) {\r\n            return 'Phone number cannot contain the same digit repeated 10 times.';\r\n        }\r\n\r\n        if (normalized === '0123456789' || normalized === '1234567890') {\r\n            return 'Phone number matches a known synthetic/test pattern.';\r\n        }\r\n\r\n        const series = normalized.charAt(0);\r\n        if (!VALID_MOBILE_PREFIXES.has(series)) {\r\n            return `Phone number must start with one of ${Array.from(VALID_MOBILE_PREFIXES).join(', ')}, received '${series}'.`;\r\n        }\r\n\r\n        if (series === '6' && INVALID_6_SERIES_PREFIXES.has(normalized.substring(0, 4))) {\r\n            return `Phone prefix '${normalized.substring(0, 4)}' is blocked in the current allocation map.`;\r\n        }\r\n\r\n        if (!isValidIndianPhone(normalized)) {\r\n            return 'Phone number failed validation after normalization.';\r\n        }\r\n\r\n        return 'Phone number appears valid after normalization; no deterministic correction is available.';\r\n    }\r\n\r\n    if (normalizedDocType === 'upi') {\r\n        const value = input.trim().toLowerCase();\r\n        if (value.length === 0) return 'UPI ID is empty.';\r\n\r\n        const firstAt = value.indexOf('@');\r\n        const lastAt = value.lastIndexOf('@');\r\n        if (firstAt === -1 || firstAt !== lastAt) {\r\n            return 'UPI ID must contain exactly one @ symbol.';\r\n        }\r\n\r\n        const [handle, provider] = value.split('@');\r\n        if (!handle || !provider) return 'UPI ID must have both handle and provider in handle@provider form.';\r\n\r\n        if (handle.length < 3 || handle.length > 256) {\r\n            return `UPI handle length must be between 3 and 256 characters; received ${handle.length}.`;\r\n        }\r\n\r\n        if (!/^[a-z0-9._-]+$/.test(handle)) {\r\n            return 'UPI handle may only contain lowercase letters, digits, dot, underscore, or hyphen.';\r\n        }\r\n\r\n        if (!/^[a-z0-9].*[a-z0-9]$/.test(handle)) {\r\n            return 'UPI handle must start and end with an alphanumeric character.';\r\n        }\r\n\r\n        if (/[._-][._-]/.test(handle)) {\r\n            return 'UPI handle cannot contain consecutive special characters.';\r\n        }\r\n\r\n        if (!VALID_UPI_HANDLES.has(provider)) {\r\n            return `UPI provider '${provider}' is not in the supported handle whitelist.`;\r\n        }\r\n\r\n        return 'UPI ID appears structurally valid; no deterministic correction is available.';\r\n    }\r\n\r\n    if (normalizedDocType === 'msme') {\r\n        const value = input.toUpperCase().replace(/\\s+/g, '');\r\n        if (isValidMSME(value)) return 'MSME (Udyam) appears valid; no correction needed.';\r\n        if (isValidUAM(value)) return 'Input matches legacy UAM format. Use UAM validator for this identifier.';\r\n\r\n        if (!value.startsWith('UDYAM-')) {\r\n            return \"MSME (Udyam) must start with 'UDYAM-' and follow UDYAM-XX-00-0000000.\";\r\n        }\r\n\r\n        const parts = value.split('-');\r\n        if (parts.length !== 4) {\r\n            return 'MSME Udyam format must be UDYAM-XX-00-0000000.';\r\n        }\r\n\r\n        const [, stateCode, districtCode, serial] = parts;\r\n\r\n        if (!/^[A-Z]{2}$/.test(stateCode)) {\r\n            return `State code must be two uppercase letters, received '${stateCode}'.`;\r\n        }\r\n\r\n        if (!UDYAM_STATE_CODES.has(stateCode)) {\r\n            return `State code '${stateCode}' is not recognized in Udyam state codes.`;\r\n        }\r\n\r\n        if (!/^\\d{2}$/.test(districtCode)) {\r\n            return `District code must be exactly 2 digits, received '${districtCode}'.`;\r\n        }\r\n\r\n        const districtNum = Number.parseInt(districtCode, 10);\r\n        if (districtNum < 1 || districtNum > 99) {\r\n            return `District code must be between 01 and 99, received '${districtCode}'.`;\r\n        }\r\n\r\n        if (!/^\\d{7}$/.test(serial)) {\r\n            return `Serial number must be exactly 7 digits, received '${serial}'.`;\r\n        }\r\n\r\n        if (serial === '0000000') {\r\n            return 'Serial number cannot be all zeros.';\r\n        }\r\n\r\n        return 'MSME appears structurally valid; no deterministic correction is available.';\r\n    }\r\n\r\n    if (normalizedDocType === 'voterid') {\r\n        const value = input.toUpperCase().replace(/[\\s-]/g, '');\r\n        if (value.length !== 10) return `Voter ID must be exactly 10 characters; received length ${value.length}.`;\r\n\r\n        const prefixPosition = firstInvalidPosition(value.slice(0, 3), (char) => /[A-Z]/.test(char));\r\n        if (prefixPosition !== -1) {\r\n            return `Position ${prefixPosition} must be an uppercase letter, received '${value.charAt(prefixPosition - 1)}'.`;\r\n        }\r\n\r\n        const sequencePosition = firstInvalidPosition(value.slice(3), (char) => /[0-9]/.test(char));\r\n        if (sequencePosition !== -1) {\r\n            const position = sequencePosition + 3;\r\n            return `Position ${position} must be a digit, received '${value.charAt(position - 1)}'.`;\r\n        }\r\n\r\n        if (value.slice(3) === '0000000') {\r\n            return 'Voter ID sequence (positions 4-10) cannot be all zeros.';\r\n        }\r\n\r\n        return 'Voter ID appears structurally valid; no deterministic correction is available.';\r\n    }\r\n\r\n    if (normalizedDocType === 'passport') {\r\n        const value = input.toUpperCase().replace(/\\s+/g, '');\r\n        if (value.length !== 8) return `Passport must be exactly 8 characters; received length ${value.length}.`;\r\n\r\n        const series = value.charAt(0);\r\n        if (!/[A-Z]/.test(series)) {\r\n            return `Position 1 must be an uppercase letter, received '${series}'.`;\r\n        }\r\n\r\n        if (!isValidPassport(`${series}1234567`)) {\r\n            return `Passport series '${series}' is not in the supported series set.`;\r\n        }\r\n\r\n        const sequencePosition = firstInvalidPosition(value.slice(1), (char) => /[0-9]/.test(char));\r\n        if (sequencePosition !== -1) {\r\n            const position = sequencePosition + 1;\r\n            return `Position ${position} must be a digit, received '${value.charAt(position - 1)}'.`;\r\n        }\r\n\r\n        if (value.slice(1) === '0000000') {\r\n            return 'Passport sequence (positions 2-8) cannot be all zeros.';\r\n        }\r\n\r\n        return 'Passport appears structurally valid; no deterministic correction is available.';\r\n    }\r\n\r\n    return `No correction rules are configured for document type '${documentType}'.`;\r\n};\r\n\r\nconst buildNoCorrectionResult = (\r\n    original: string,\r\n    normalizedInput: string,\r\n    documentType: string,\r\n    confidence: CorrectionConfidence,\r\n    note: string\r\n): CorrectionResult => ({\r\n    original,\r\n    normalizedInput,\r\n    documentType,\r\n    isAlreadyValid: false,\r\n    confidence,\r\n    candidates: [],\r\n    primarySuggestion: null,\r\n    note,\r\n});\r\n\r\n/**\r\n * Suggests corrections for invalid document numbers using checksum recovery.\r\n *\r\n * PRIVACY NOTE: This function processes potentially real identity document\r\n * numbers. Never log or persist the input, corrections, or results.\r\n * Results are returned to the caller - no data leaves this function.\r\n */\r\nexport const suggestCorrection = (documentType: string, input: string): CorrectionResult => {\r\n    const safeInput = typeof input === 'string' ? input : String(input ?? '');\r\n    const normalizedDocTypeInput = normalizeDocumentType(documentType);\r\n    const normalizedDocType = DOCUMENT_TYPE_ALIASES[normalizedDocTypeInput];\r\n\r\n    if (!normalizedDocType || !isSupportedDocumentType(normalizedDocType)) {\r\n        return buildNoCorrectionResult(\r\n            safeInput,\r\n            safeInput.trim(),\r\n            normalizedDocTypeInput || documentType,\r\n            'NONE',\r\n            `Unsupported document type '${documentType}'.`\r\n        );\r\n    }\r\n\r\n    const normalizedInput = normalizeInput(normalizedDocType, safeInput);\r\n    const isAlreadyValid = isDocumentValid(normalizedDocType, normalizedInput);\r\n\r\n    if (isAlreadyValid) {\r\n        return {\r\n            original: safeInput,\r\n            normalizedInput,\r\n            documentType: normalizedDocType,\r\n            isAlreadyValid: true,\r\n            confidence: 'NONE',\r\n            candidates: [],\r\n            primarySuggestion: null,\r\n            note: 'Input is already valid for this document type; no correction suggested.',\r\n        };\r\n    }\r\n\r\n    if (normalizedDocType === 'aadhaar') {\r\n        const candidates = recoverAadhaarByVerhoeff(normalizedInput);\r\n        if (candidates.length === 0) {\r\n            const hint = getStructuralHint(normalizedDocType, safeInput);\r\n            return buildNoCorrectionResult(safeInput, normalizedInput, normalizedDocType, 'NONE', hint);\r\n        }\r\n\r\n        const confidence: CorrectionConfidence = candidates.length === 1 ? 'HIGH' : 'MEDIUM';\r\n        return {\r\n            original: safeInput,\r\n            normalizedInput,\r\n            documentType: normalizedDocType,\r\n            isAlreadyValid: false,\r\n            confidence,\r\n            candidates,\r\n            primarySuggestion: candidates[0].corrected,\r\n            note: candidates.length === 1\r\n                ? 'Single checksum-valid Aadhaar correction found.'\r\n                : `Multiple checksum-valid Aadhaar corrections found (${candidates.length}).`,\r\n        };\r\n    }\r\n\r\n    if (normalizedDocType === 'gstin') {\r\n        const candidate = recoverGSTINCheckDigit(normalizedInput);\r\n        if (candidate != null) {\r\n            return {\r\n                original: safeInput,\r\n                normalizedInput,\r\n                documentType: normalizedDocType,\r\n                isAlreadyValid: false,\r\n                confidence: 'EXACT',\r\n                candidates: [candidate],\r\n                primarySuggestion: candidate.corrected,\r\n                note: 'GSTIN check digit can be corrected deterministically using Mod-36.',\r\n            };\r\n        }\r\n\r\n        const hint = getStructuralHint(normalizedDocType, safeInput);\r\n        return buildNoCorrectionResult(safeInput, normalizedInput, normalizedDocType, 'NONE', hint);\r\n    }\r\n\r\n    const hint = getStructuralHint(normalizedDocType, safeInput);\r\n    return buildNoCorrectionResult(safeInput, normalizedInput, normalizedDocType, 'NONE', hint);\r\n};\r\n"]}