FOUNDRY
C8 Platform
← 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