Subir con OCR
Exportar contenido
Funcionalidad de escaneo y extracción automática de datos desde imágenes o PDFs de facturas usando tecnología OCR.
Componente
Sección titulada «Componente»<CreateExpenseSheet transaction={null} open={isOpen} onOpenChange={setIsOpen} onSuccess={handleSuccess}/>Características
Sección titulada «Características»- Escáner de documentos optimizado para móvil y escritorio
- Extracción OCR mediante Edge Function
- Pre-carga de datos desde imagen/PDF escaneado
- Indicador de confianza para cada campo extraído
- Corrección manual de datos extraídos
- Procesamiento en lote para múltiples documentos
- Vista previa del documento escaneado
Tipos de datos OCR
Sección titulada «Tipos de datos OCR»interface ExpenseOCRData { merchant?: string; // Nombre del comercio amount?: number; // Importe total date?: string; // Fecha del documento tax_amount?: number; // IVA extraído invoice_number?: string; // Número de factura category?: string; // Categoría sugerida raw_text?: string; // Texto completo extraído confidence?: number; // Confianza global (0-1)}Confianza de extracción
Sección titulada «Confianza de extracción»El sistema calcula un nivel de confianza para cada campo:
- Alta (más de 0.8): Datos muy fiables, pre-cargar directamente
- Media (0.5-0.8): Datos probables, revisar antes de guardar
- Baja (menos de 0.5): Datos dudosos, requieren corrección manual
Flujo de procesamiento
Sección titulada «Flujo de procesamiento»- Captura: Usuario toma foto o sube archivo
- Envío: Imagen se envía a Edge Function
/ocr-process - Análisis: OCR extrae texto y estructura datos
- Pre-carga: Formulario se rellena con datos extraídos
- Revisión: Usuario corrige campos si es necesario
- Guardado: Se crea el gasto con metadata OCR
Matching automático de proveedor
Sección titulada «Matching automático de proveedor»import { useOCRVendorMatch } from '@/features/expenses/hooks/useOCRVendorMatch';
const { matchResult } = useOCRVendorMatch(ocrData.merchant);
// matchResult contiene:// {// vendor: Vendor | null,// confidence: 'high' | 'medium' | 'low',// matchedBy: 'exact' | 'alias' | 'fuzzy'// }El sistema busca proveedores por:
- Coincidencia exacta de nombre
- Alias registrados para el comercio
- Fuzzy matching con algoritmo Levenshtein
Componentes del escáner
Sección titulada «Componentes del escáner»Desktop:
<DesktopExpenseScanner onScanComplete={handleOCRData} businessId={currentBusinessId}/>Mobile:
<MobileExpenseScanner onScanComplete={handleOCRData} businessId={currentBusinessId}/>Indicador de confianza
Sección titulada «Indicador de confianza»<ExpenseConfidenceIndicator confidence={ocrData.confidence} fieldName="amount" extractedValue={ocrData.amount}/>Muestra:
- Verde: Alta confianza (más de 80%)
- Amarillo: Media confianza (50-80%)
- Rojo: Baja confianza (menos de 50%)
Edge Function: OCR Processing
Endpoint
Sección titulada «Endpoint»POST /functions/v1/ocr-process{ image: base64string, // Imagen codificada businessId: string, // ID del negocio}{ success: boolean, data: ExpenseOCRData, processingTime: number // Milisegundos}Tecnologías
Sección titulada «Tecnologías»- Tesseract.js: Motor OCR open source
- OpenAI Vision API: Análisis semántico opcional
- Sharp: Preprocesamiento de imágenes
Optimizaciones
Sección titulada «Optimizaciones»- Preprocesamiento de imagen (ajuste de contraste, rotación)
- Detección de región de interés (ROI)
- Normalización de formatos de fecha
- Extracción de patrones fiscales españoles (NIF/CIF)