api

Extracción de PDF con OCR

Descripción

Sistema de extracción de PDFs que procesa documentos mediante un flujo de trabajo de 3 pasos diseñado para manejo eficiente de archivos de hasta 50 MB. Usa cargas fragmentadas (1 MB por chunk) con codificación Base64 y retorna datos estructurados en JSON extraídos mediante OCR e IA.

Especializado en: documentos complejos como actas constitutivas, documentos notariales y recibos de CFE.

Especificaciones

EspecificaciónValor
Tamaño máximo de archivo50 MB
Formato de entradaPDF codificado en Base64
Formato de salidaJSON estructurado
Expiración de sesión1 hora

Flujo de Procesamiento

INIT → UPLOAD-CHUNK (×N) → COMPLETE → Resultado JSON

Endpoints

1. INIT - Inicialización de Sesión

POST /v4/document/extract/pdf/init

Headers:

  • Request-Id (UUID v4, requerido)
  • Language (en/es, opcional)
  • Authorization (Bearer token)

Body: vacío

Respuesta:

  • upload_id - Identificador único de sesión
  • file_size - Bytes totales esperados
  • chunk_size - Tamaño del chunk individual (típicamente 1 MB)
  • total_chunks - Número de chunks necesarios
  • expires_at - Timestamp de expiración

2. UPLOAD-CHUNK - Carga de Fragmentos

POST /v4/document/extract/pdf/upload-chunk

Importante: Los chunks usan indexación base cero (0, 1, 2...N-1).

Body:

  • upload_id - Del response de INIT
  • chunk_number - Posición secuencial (base-0)
  • chunk_data - Segmento de PDF codificado en Base64

Respuesta:

  • progress_percent - Porcentaje de completitud
  • uploaded_chunks - Conteo de chunks recibidos
  • remaining_chunks - Aún necesarios
  • is_complete - Flag boolean cuando todos los chunks son recibidos

3. COMPLETE - Finalización del Procesamiento

POST /v4/document/extract/pdf/complete

Body:

  • upload_id - Identificador de sesión
  • name - Identificador de usuario opcional

Respuesta (ejemplo Acta Constitutiva):

{
  "eventId": "UUID",
  "status": "SUCCESS",
  "content": {
    "data": {
      "capital_shareholders": {},
      "company_data": {},
      "initial_governing_bodies": {},
      "main_corporate_purpose": []
    },
    "extra": {
      "document_type": "ACTA_CONSTITUTIVA",
      "country_code": "MX",
      "page_count": 22
    }
  },
  "processingTime": 1234
}

Tipos de Documentos Soportados

  • Actas Constitutivas
  • Documentos notariales
  • Recibos de CFE
  • Contratos comerciales
  • Estados financieros
  • Acuerdos legales

Nota: Para documentos de identidad (INE, pasaportes), JAAK proporciona endpoints especializados.

Puntos Críticos de Implementación

Indexación Base Cero

El primer chunk es siempre 0, no 1. Para 19 chunks totales, enviar 0-18.

Auto-Configuración del Servidor

Nunca calcular manualmente chunk_size o total_chunks - el response de INIT proporciona estos valores.

Expiración de Sesión

Cada sesión expira 1 hora después de la creación.

Flexibilidad en Carga de Chunks

Enviar chunks en cualquier orden, pero deben llegar todos antes de llamar a COMPLETE.

Implementación JavaScript

class JAKPDFExtractor {
    async extractPDF(file) {
        // 1. Validar archivo
        // 2. Convertir a Base64
        // 3. INIT: obtener parámetros de chunk
        const initRes = await this._initUpload();

        // 4. UPLOAD-CHUNK: enviar fragmentos
        for (let i = 0; i < initRes.total_chunks; i++) {
            await this._uploadChunk(i, chunks[i]);
        }

        // 5. COMPLETE: finalizar procesamiento
        return await this._completeUpload();
    }
}

Timeouts Recomendados

OperaciónTimeout
INIT10 segundos
UPLOAD-CHUNK30 segundos por chunk
COMPLETE120 segundos (procesamiento OCR)

Manejo de Errores

CódigoDescripción
400Tamaño/formato de archivo inválido o chunks incompletos
401Token no autorizado/expirado
404Sesión expirada o inexistente
429Rate limiting (100 req/min por API key)
500Fallo de procesamiento OCR

Error de ejemplo:

{
  "errorCode": "INCOMPLETE_UPLOAD",
  "message": "Missing chunks: 3, 7, 12",
  "statusCode": 400
}

Mejores Prácticas

  1. Pre-validación: Verificar tipo PDF, tamaño (máx 50MB) y extensión antes de cargar
  2. Gestión de sesión: Almacenar upload_id para cargas reanudables
  3. Lógica de reintento: Backoff exponencial (1s, 2s, 4s) para chunks fallidos
  4. Seguimiento de progreso: Mostrar porcentaje y conteo de chunks a usuarios
  5. Seguridad: Nunca exponer API keys en frontend; usar proxy backend
  6. HTTPS únicamente: Todas las comunicaciones deben usar TLS 1.3

Seguridad y Privacidad

  • Sin almacenamiento persistente de documentos; procesamiento en memoria
  • Expiración automática de sesión tras 1 hora
  • Rastro de auditoría completo vía Request-Id y eventId
  • Cumplimiento con regulaciones mexicanas de protección de datos