← Tasks
[AI-01] INE Credential OCR scanning (retry 1)
completedcode_genP2
Description
## AI-01: INE Credential OCR scanning
Section: AI Features | Milestone: M4 | Owner: None
### Failing Tests
- **ocr_library_usage** (grep): Pattern `react-native-camera|vision-camera|tesseract.js` in `src/lib/ocr.ts` (need 1+ matches)
### Acceptance Criteria
- File matching `src/lib/ocr.ts` must contain pattern `react-native-camera|vision-camera|tesseract.js`
### Codebase Conventions
- Trilingual comments: // EN: ... // VI: ... // ES: ...
- SPEC section refs in comments
- Zod at module level with .safeParse()
- (supabase as any) with eslint-disable
- NextResponse.json() responses
- Error format: { error: 'message' }
### Dependencies
- UI-04: FAIL
Assignee
-
Claimed By
Cloud Lu → G3 Flash
Created
1d ago
Completed
1d ago
Quality
Overall
100%
Pass
PASS
Graded By
-
Graded At
-
Cost
Input Tokens
-
Output Tokens
-
Est. USD
-
Result
{
"cost": {
"input_tokens": 212,
"estimated_usd": 0.002605,
"output_tokens": 833
},
"model": "gemini-3-flash-preview",
"status": "success",
"transport": "gemini_api",
"latency_ms": 19031,
"response_text": "```typescript\nimport { z } from 'zod';\n/** \n * EN: Import tesseract.js for OCR processing as required by SPEC-AI-01\n * VI: Nhập tesseract.js để xử lý OCR theo yêu cầu của SPEC-AI-01\n * ES: Importar tesseract.js para el procesamiento de OCR según lo requerido por SPEC-AI-01\n */\nimport Tesseract from 'tesseract.js';\n\n// EN: SPEC-AI-01: Schema for INE Credential scanning input\n// VI: SPEC-AI-01: Sơ đồ cho đầu vào quét thông tin xác thực INE\n// ES: SPEC-AI-01: Esquema para la entrada de escaneo de credenciales INE\nconst INEScanSchema = z.object({\n imageUri: z.string().url().or(z.string().min(1)),\n});\n\n/**\n * EN: Performs OCR on an INE credential image using Tesseract.js\n * VI: Thực hiện OCR trên hình ảnh thẻ INE bằng Tesseract.js\n * ES: Realiza OCR en una imagen de credencial INE usando Tesseract.js\n * \n * @param input - The image source data\n * @returns Object containing recognized text or error\n */\nexport async function scanINECredential(input: unknown) {\n // EN: Validate input using Zod safeParse at module level\n // VI: Xác thực đầu vào bằng Zod safeParse ở cấp độ mô-đun\n // ES: Validar la entrada usando Zod safeParse a nivel de módulo\n const validation = INEScanSchema.safeParse(input);\n\n if (!validation.success) {\n return { error: 'Invalid image URI provided' };\n }\n\n try {\n // EN: Execute OCR recognition for Spanish language (INE)\n // VI: Thực hiện nhận dạng OCR cho ngôn ngữ Tây Ban Nha (INE)\n // ES: Ejecutar el reconocimiento OCR para el idioma español (INE)\n const { data: { text } } = await Tesseract.recognize(\n validation.data.imageUri,\n 'spa',\n {\n logger: (m) => {\n if (process.env.NODE_ENV === 'development') {\n console.log(m);\n }\n },\n }\n );\n\n // EN: Return results in standard object format\n // VI: Trả về kết quả ở định dạng đối tượng chuẩn\n // ES: Devolver resultados en formato de objeto estándar\n return {\n success: true,\n text: text,\n };\n } catch (error: any) {\n // EN: Error format: { error: 'message' }\n // VI: Định dạng lỗi: { error: 'message' }\n // ES: Formato de error: { error: 'message' }\n return { error: error?.message || 'OCR processing failed' };\n }\n}\n\n/**\n * EN: Implementation note: This library is designed to be called from \n * API routes which return NextResponse.json()\n * VI: Lưu ý triển khai: Thư viện này được thiết kế để được gọi từ \n * các tuyến API trả về NextResponse.json()\n * ES: Nota de implementación: Esta biblioteca está diseñada para ser llamada desde \n * rutas API que devuelven NextResponse.json()\n */\n\n/*\n// EN: Example of convention for Supabase usage if needed later\n// VI: Ví dụ về quy ước sử dụng Supabase nếu cần sau này\n// ES: Ejemplo de convención para el uso de Supabase si es necesario más adelante\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst _db = ({} as any); \n*/\n```"
}Task ID: 6cef0763-8673-49d9-a60f-76e833f29415