# ❓ PREGUNTAS FRECUENTES (FAQ)
## 📡 API y Conexión
### ¿Cuál es el endpoint de la API?
```
POST: https://datosrut.codepyme.com/procesar
```
### ¿Cuánto tiempo tarda procesar un RUT?
Entre 10-30 segundos dependiendo del tamaño del PDF y la complejidad.
### ¿Hay límite de solicitudes?
No hay límite de solicitudes actualmente.
### ¿Qué pasa si la solicitud tarda mucho?
Configura timeout de al menos 120 segundos (2 minutos).
```python
# Python
response = requests.post(url, files=files, timeout=120)
# JavaScript
fetch(url, {signal: AbortSignal.timeout(120000)})
# Node.js
axios.post(url, {timeout: 120000})
```
### ¿Es segura la información?
Sí, los archivos se procesan y eliminan inmediatamente. No se almacenan.
---
## 📁 Archivos y Formatos
### ¿Qué formatos soporta?
Solo PDF. Asegúrate que sea un PDF válido, no una imagen en formato PDF.
### ¿Cuál es el tamaño máximo?
10 MB por archivo.
### ¿Puedo enviar archivos por lotes?
Sí, pero debes procesar uno a uno con esperas de 1-2 segundos entre solicitudes.
### ¿Qué pasa si el PDF no es válido?
Recibirás un error indicando el problema. El archivo debe ser un PDF real con texto extraíble.
### ¿Puedo subir PDFs escaneados?
Depende. Si el PDF tiene texto extraíble, sí. Si es solo imagen, necesitaría OCR (no soportado actualmente).
---
## 📊 Datos Extraídos
### ¿Qué datos se extraen?
- Identificación (NIT, DV, tipo de documento)
- Datos jurídicos (razón social, nombre comercial)
- Ubicación (país, departamento, ciudad, dirección, teléfono, email)
- Actividad económica (códigos, descripciones, fechas)
- Responsabilidades (códigos DIAN)
- Representante legal (nombre, documento, cargo)
- Revisor fiscal (nombre, documento)
- Contador (nombre, documento)
- Socios (nombre, documento, participación)
- Establecimientos
### ¿Por qué algunos campos están vacíos (null)?
Porque el RUT no tiene esa información o no está visible en el PDF.
### ¿Cómo manejo los campos nulos?
Verifica antes de usar:
```python
# Python
nit = datos.get('identificacion', {}).get('nit')
if nit:
print(nit)
else:
print("NIT no disponible")
# JavaScript
const nit = datos?.identificacion?.nit || 'No disponible';
```
### ¿Puedo confiar en que todos los datos estén?
Sí, siempre que el PDF sea válido. Nuestro sistema busca en TODAS las páginas.
---
## 🐛 Problemas Comunes
### Error: "CORS Error"
**Síntoma:** En JavaScript obtienes error de CORS
**Causa:** Navegador bloquea solicitud de diferentes dominios
**Solución:**
- Opción 1: Usa un backend (Node.js, Python) como proxy
- Opción 2: El servidor debe tener CORS habilitado (ya lo está)
- Opción 3: Usa cliente HTML que está en el mismo dominio
### Error: "Timeout"
**Síntoma:** La solicitud nunca completa
**Causa:** El servidor tardó más de lo esperado o conexión lenta
**Solución:**
```python
# Aumenta timeout
response = requests.post(url, files=files, timeout=180) # 3 minutos
```
### Error: "PDF no válido"
**Síntoma:** La API rechaza el archivo
**Causa:** El PDF es corrupto o no tiene texto extraíble
**Solución:**
- Abre el PDF en tu lector y verifica que se vea bien
- Intenta guardar el PDF nuevamente
- Si es imagen escaneada, necesitaría OCR
### Error: "JSON inválido"
**Síntoma:** No puedo parsear la respuesta
**Causa:** La respuesta no es JSON válido
**Solución:**
```javascript
try {
const data = JSON.parse(response);
} catch (e) {
console.log('Respuesta raw:', response);
}
```
### Error: "Módulo no encontrado"
**Síntoma:** `ModuleNotFoundError` en Python o `npm ERR!` en Node
**Causa:** Falta instalar dependencias
**Solución:**
```bash
# Python
pip install requests
# Node.js
npm install express multer axios form-data
```
### Mi cliente recibe datos incompletos
**Síntoma:** Faltan campos del RUT
**Causa:** Posiblemente PDF no tiene toda la información legible
**Solución:**
- Verifica que sea el PDF correcto
- Verifica que tenga todas las páginas
- Intenta procesar manualmente para comparar
---
## 🔄 Integración
### ¿Debo procesar todos de una vez?
No, hazlo de uno en uno con esperas:
```python
for rut_file in rut_files:
datos = extraer_rut(rut_file)
# Procesar datos
time.sleep(1) # Esperar 1 segundo
```
### ¿Cómo integro en mi base de datos?
Después de extraer, guarda los datos:
```python
import sqlite3
# Guardar
db = sqlite3.connect('ruts.db')
db.execute('''
INSERT INTO ruts (nit, razon_social, email)
VALUES (?, ?, ?)
''', (
datos['identificacion']['nit'],
datos['datos_juridicos']['razon_social'],
datos['ubicacion']['correo_electronico']
))
db.commit()
```
### ¿Puedo guardar archivos localmente?
Sí:
```python
import json
# Guardar resultado en archivo
with open('resultado.json', 'w') as f:
json.dump(datos, f, indent=2)
```
---
## 🚀 Rendimiento
### ¿Cuántos RUTs puedo procesar por hora?
Teóricamente ilimitado, pero respeta:
- 1-2 segundos entre solicitudes
- Máximo 120 segundos de timeout por solicitud
```
Estimado: 1 RUT cada 30 segundos = 120 por hora
```
### ¿Es muy lenta para mi caso de uso?
- Si necesitas < 30 segundos por RUT: Contacta para soluciones premium
- Si está bien > 30 segundos: Usa el sistema actual
- Si necesitas procesamiento batch: Implementa cola de procesos
### ¿Puedo paralelizar solicitudes?
Con cuidado. Máximo 5-10 en paralelo:
```python
import asyncio
async def procesar_multiples():
tasks = []
for rut in ruts[:10]: # Máximo 10 en paralelo
tasks.append(extraer_rut(rut))
resultados = await asyncio.gather(*tasks)
return resultados
```
---
## 🔐 Seguridad
### ¿Son seguros mis datos?
Sí:
- Solo se envía el PDF a nuestra API
- Los datos se procesan inmediatamente
- No se almacenan en nuestro servidor
- Conexión HTTPS encriptada
### ¿Quién puede ver mis datos?
Nadie, excepto tú:
- Los datos se procesan en memoria
- Se devuelven directamente al cliente
- No quedan logs con información personal
### ¿Debo autenticar mis solicitudes?
No actualmente, pero puedes:
- Usar Node.js como proxy con validación
- Agregar API Key en headers
- Proteger el endpoint con contraseña
---
## 💻 Lenguajes Soportados
### ¿Soportan todos los lenguajes?
Cualquier lenguaje que pueda hacer HTTP POST multipart:
- ✅ Python
- ✅ JavaScript
- ✅ Node.js
- ✅ Java
- ✅ C#
- ✅ Go
- ✅ Ruby
- ✅ PHP
- ✅ Cualquier otro
### ¿Hay SDKs oficiales?
No actualmente, pero el API es simple de usar.
### ¿Puedo contribuir un cliente?
Sí, contacta al equipo!
---
## 🎯 Casos de Uso
### Caso: Procesar masivamente RUTs de un archivo CSV
```python
import csv
with open('ruts.csv') as f:
reader = csv.DictReader(f)
for row in reader:
datos = extraer_rut(row['archivo_pdf'])
# Procesar y guardar
```
### Caso: API REST para que mis clientes suban RUTs
```javascript
// Node.js Express
app.post('/api/ruts', upload.single('file'), async (req, res) => {
const datos = await extraerRUT(req.file.path);
res.json(datos);
});
```
### Caso: Integración con sistema de facturación
```python
# Extraer datos del RUT
datos = extraer_rut('rut.pdf')
# Crear cliente en tu sistema
cliente = {
'nit': datos['identificacion']['nit'],
'nombre': datos['datos_juridicos']['razon_social'],
'email': datos['ubicacion']['correo_electronico'],
'telefono': datos['ubicacion']['telefono_1'],
'direccion': datos['ubicacion']['direccion_principal']
}
# Guardar en tu base de datos
crear_cliente(cliente)
```
---
## ❌ Lo que NO funciona
- ❌ Documentos que no sean RUTs
- ❌ PDFs solo en imagen (sin texto)
- ❌ Archivos corrompidos
- ❌ Documentos sin información extraíble
- ❌ Más de 10 MB
- ❌ Solicitudes simultáneas masivas (>50 paralelas)
---
## 📞 Contacto
Si tu pregunta no está aquí:
1. Consulta README_CLIENTE.md
2. Revisa INTEGRACION_RAPIDA.md
3. Contacta al equipo de desarrollo
---
## 🔄 Feedback
¿Encontraste un problema o tienes sugerencia?
Avísale al equipo:
- Describe el problema claramente
- Incluye el código que usaste
- Incluye mensaje de error exacto
- Incluye tu caso de uso
---
**¡Espero haberte ayudado! Si necesitas más, consulta la documentación principal.** 📚