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ón | Valor |
|---|---|
| Tamaño máximo de archivo | 50 MB |
| Formato de entrada | PDF codificado en Base64 |
| Formato de salida | JSON estructurado |
| Expiración de sesión | 1 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ónfile_size- Bytes totales esperadoschunk_size- Tamaño del chunk individual (típicamente 1 MB)total_chunks- Número de chunks necesariosexpires_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 INITchunk_number- Posición secuencial (base-0)chunk_data- Segmento de PDF codificado en Base64
Respuesta:
progress_percent- Porcentaje de completituduploaded_chunks- Conteo de chunks recibidosremaining_chunks- Aún necesariosis_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ónname- 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ón | Timeout |
|---|---|
| INIT | 10 segundos |
| UPLOAD-CHUNK | 30 segundos por chunk |
| COMPLETE | 120 segundos (procesamiento OCR) |
Manejo de Errores
| Código | Descripción |
|---|---|
| 400 | Tamaño/formato de archivo inválido o chunks incompletos |
| 401 | Token no autorizado/expirado |
| 404 | Sesión expirada o inexistente |
| 429 | Rate limiting (100 req/min por API key) |
| 500 | Fallo de procesamiento OCR |
Error de ejemplo:
{
"errorCode": "INCOMPLETE_UPLOAD",
"message": "Missing chunks: 3, 7, 12",
"statusCode": 400
}
Mejores Prácticas
- Pre-validación: Verificar tipo PDF, tamaño (máx 50MB) y extensión antes de cargar
- Gestión de sesión: Almacenar
upload_idpara cargas reanudables - Lógica de reintento: Backoff exponencial (1s, 2s, 4s) para chunks fallidos
- Seguimiento de progreso: Mostrar porcentaje y conteo de chunks a usuarios
- Seguridad: Nunca exponer API keys en frontend; usar proxy backend
- 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-IdyeventId - Cumplimiento con regulaciones mexicanas de protección de datos