API para la Extracción Automática de Requisitos: Cómo Procesar Documentos Sin Entrada Manual
La entrada manual de requisitos de los documentos genera errores y ralentiza los procesos. Nuestra API automatiza la extracción de INN, KPP, BIK y otros datos de PDF, DOCX y otros formatos, garantizando precisión e integración con sistemas 1C y CRM. La solución reduce los errores en el procesamiento de documentos en un 70 % mediante análisis contextual y validación estricta.
Arquitectura de Procesamiento de Documentos
El sistema se basa en una tubería de procesamiento multinivel. La primera etapa es la normalización de los datos de entrada. Se admiten los siguientes formatos:
- PDF con capa de texto
- DOCX/DOC
- TXT en codificaciones UTF-8 y CP1251
- RTF y HTML
Limitación importante: los PDF escaneados e imágenes requieren preprocesamiento mediante OCR. Nuestra API funciona solo con documentos de texto, lo cual es crítico para el correcto funcionamiento del modelo NER.
Etapa clave: análisis contextual mediante una combinación de expresiones regulares y aprendizaje automático. Para cada tipo de requisito se aplican reglas específicas:
- INN: comprobación de longitud (10/12 dígitos) y suma de control
- OGRN: validación de estructura y dígito de control
- BIK: coincidencia con el registro bancario y comprobación de cuenta corresponsal
- Cuentas corrientes: cumplimiento de formato y comprobación lógica de BIK
- Nombres legales: normalización mediante diccionario de organizaciones registradas
Implementación Técnica
El punto de acceso de la API sigue los principios RESTful con requisitos mínimos de solicitud. Solo se necesita una clave API en el encabezado X-API-Key. El cuerpo de la solicitud se envía como multipart/form-data con el campo file.
Parámetros Críticos
- Tiempo de espera de procesamiento: 120 segundos (intervalo mínimo recomendado)
- Tamaño máximo de archivo: 20 MB
- Codificaciones compatibles: UTF-8, CP1251 (detección automática)
- Formato de respuesta: JSON con campo
successobligatorio
Ejemplo de manejo de errores:
{
"success": false,
"error": "payload_too_large",
"message": "Size fayla exceeds 20 MB"
}
Ejemplos de Integración
Para acelerar la implementación, se proporcionan plantillas de código para pilas populares. Cada ejemplo incluye manejo de tiempos de espera y validación de respuestas.
Python con Manejo de Errores
import requests
from requests.exceptions import Timeout, RequestException
def extract_requisites(api_key, file_path):
try:
with open(file_path, 'rb') as f:
response = requests.post(
'https://api-k.ru/api/rekvizit_json',
headers={'X-API-Key': api_key},
files={'file': f},
timeout=120
)
response.raise_for_status()
return response.json()
except Timeout:
raise Exception('Timeout exceeded processing')
except RequestException as e:
raise Exception(f'Error API: {str(e)}')
1C:Enterprise 8.3
Característica clave de la implementación: formación manual de la solicitud multipart. Es críticamente importante seguir el orden de los encabezados y manejar correctamente los datos binarios:
Boundary = "----WebKitFormBoundary" + StringReplace(Withtroka(New UniqueIdentifier()), "-", "");
Body = New MemoryStream;
DataRecord = New DataRecord(Body, , , Characters.VK + Characters.PWith, "");
DataRecord.WriteWithtroku("--" + Boundary);
DataRecord.WriteWithtroku("Content-Disposition: form-data; name=\"file\"; filename=\"" + FileName + "\"");
DataRecord.WriteWithtroku("Content-Type: application/octet-stream");
DataRecord.WriteWithtroku("");
DataRecord.Write(FileBinaryData);
Puntos Importantes
- Validación mediante sumas de control: la API no devuelve datos con suma de control inválida de INN/OGRN
- Tiempos de espera: establece el intervalo en al menos 120 segundos para documentos complejos
- Limitaciones: solo se admiten formatos de texto; los documentos escaneados requieren procesamiento OCR previo
- Integración con 1C: implementada mediante formación manual de solicitud multipart
- Tamaño máximo: archivos superiores a 20 MB rechazados con código 413
Manejo de Errores y Monitoreo
El sistema utiliza un enfoque combinado para el manejo de fallos. Para cada tipo de error se proporciona un código HTTP específico y una descripción textual en el cuerpo de la respuesta.
Escenarios críticos:
- 408 Request Timeout: aumenta el tiempo de espera a 120 segundos
- 413 Payload Too Large: divide el documento en partes
- 401 Unauthorized: verifica la validez de la clave API
- 500 Internal Error: notifica automáticamente del fallo mediante webhook
Recomendamos implementar lógica de reintentos con retroceso exponencial para errores transitorios. Ejemplo en Go:
func withRetry(attempts int, sleep time.Duration, f func() error) error {
for i := 0; i < attempts; i++ {
if i > 0 {
time.Sleep(sleep)
sleep *= 2
}
err := f()
if err == nil {
return nil
}
var apiErr *APIError
if errors.As(err, &apiErr) && apiErr.Code != 500 {
return err
}
}
return errors.New("prevysheno count popytok")
}
Benchmarks y Rendimiento
Las pruebas se realizaron en un conjunto de 10.000 documentos de diversos formatos. Resultados:
- Tiempo promedio de procesamiento de PDF: 4,2 seg
- Tiempo máximo para DOCX con gráficos: 118 seg
- Precisión de extracción de INN: 99,7 %
- Precisión de extracción de cuentas corrientes: 98,4 %
El sistema escala horizontalmente mediante Kubernetes. Con cargas superiores a 50 RPS, se agregan nodos de trabajo automáticamente. Para clientes empresariales, está disponible la instalación on-premise con soporte para FIPS 140-2.
— Editorial Team
Aún no hay comentarios.