Capacidad Teórica
10 nóminas cada 10 segundos
20 peticiones ÷ 2 operaciones = 10 nóminas
3,600 nóminas/hora (teórico)
La limitación más importante del servicio Facturatech es el rate limiting estricto que impone el API.
Cada nómina requiere mínimo 2 peticiones:
uploadDocument - Enviar XMLdocumentStatus - Verificar estado (puede requerir múltiples llamadas)Capacidad Teórica
10 nóminas cada 10 segundos
20 peticiones ÷ 2 operaciones = 10 nóminas
3,600 nóminas/hora (teórico)
Capacidad Real
8 nóminas cada 10 segundos
Considerando:
~2,400 nóminas/hora (real)
Tiempo para 3000 Empleados
50-75 minutos
3000 nóminas ÷ 10 cada 10s = 300 ciclos
300 × 10 segundos = 3000s ≈ 50 min
Escalamiento Limitado
NO es posible paralelizar
El límite es por cuenta/credencial
No hay forma de aumentar la velocidad
Tiempo estimado: 1-2 minutosCiclos necesarios: 10Complejidad: BAJAEstrategia:
Tiempo estimado: 8-10 minutosCiclos necesarios: 50Complejidad: MEDIAEstrategia:
Tiempo estimado: 25-30 minutosCiclos necesarios: 150Complejidad: ALTAEstrategia:
Tiempo estimado: 50-75 minutosCiclos necesarios: 300+Complejidad: MUY ALTAEstrategia:
Problema: El API no envía notificaciones cuando un documento es autorizado.
Implicación: Se requiere polling activo para consultar el estado.
Solución: Implementar sistema de polling inteligente con backoff progresivo.
// Polling cada 3-5 segundos hasta obtener respuestawhile ($intento < $maxIntentos) { $status = $client->documentStatus($transactionID); if ($status['codigo'] == 200) break; sleep($intervalo);}
Problema: El tiempo de autorización no es predecible.
Rangos observados:
Solución: Timeout configurable con límite máximo de 10 minutos.
Límite: Aunque no está documentado oficialmente, XMLs muy grandes (>5MB) pueden fallar.
Recomendación: Mantener XMLs bajo 2MB.
Consideración: Una nómina con muchos devengados y deducciones puede crecer significativamente.
Problema: No existe endpoint para enviar múltiples nóminas en una sola petición.
Implicación: Cada nómina debe enviarse individualmente.
Solución: Sistema de cola local que simule procesamiento por lotes.
Limitación: El PDF usa plantilla genérica de Facturatech.
Personalización disponible: Solo 2 colores principales.
No se puede cambiar:
Alternativa: Generar PDF propio adicional para uso interno si asi se llega a requerir en el futuro.
class SmartQueueManager { private $maxBatchSize = 10; private $batchInterval = 10; private $maxRetries = 3;
public function process() { $pendientes = $this->getPendingNominas($this->maxBatchSize);
foreach ($pendientes as $nomina) { try { $this->processNomina($nomina); } catch (RateLimitException $e) { // Esperar y reintentar sleep($this->batchInterval); $this->retry($nomina); } }
sleep($this->batchInterval); }}Procesamiento Nocturno
Ventaja: Menos congestión del servicio
Programar emisión a las 2-4 AM para grandes volúmenes
Ventanas Múltiples
Ventaja: Distribuir la carga
Dividir emisión en 2-3 días para empresas muy grandes
// Procesar por prioridad$query = " SELECT * FROM nomina_electronica WHERE estado = 'PENDIENTE_ENVIO' ORDER BY CASE WHEN prioridad = 'ALTA' THEN 1 WHEN prioridad = 'MEDIA' THEN 2 WHEN prioridad = 'BAJA' THEN 3 END, fecha_liquidacion ASC LIMIT 10";Criterios de prioridad:
// Métricas críticas a monitorear$metricas = [ 'nominas_pendientes' => countPending(), 'tasa_exito' => calculateSuccessRate(), 'tiempo_promedio' => getAverageTime(), 'errors_last_hour' => countRecentErrors(), 'rate_limit_hits' => getRateLimitHits()];
// Alertasif ($metricas['nominas_pendientes'] > 100) { alertar('Cola muy grande');}
if ($metricas['tasa_exito'] < 0.95) { alertar('Tasa de éxito baja');}| Empleados | Ciclos | Tiempo Mínimo | Tiempo Esperado | Tiempo Máximo |
|---|---|---|---|---|
| 50 | 5 | 50s | 1 min | 2 min |
| 100 | 10 | 1.5 min | 2 min | 3 min |
| 250 | 25 | 4 min | 5 min | 7 min |
| 500 | 50 | 8 min | 10 min | 15 min |
| 1000 | 100 | 16 min | 20 min | 30 min |
| 1500 | 150 | 25 min | 30 min | 45 min |
| 3000 | 300 | 50 min | 60 min | 90 min |
| 5000 | 500 | 83 min | 100 min | 150 min |
Planificación
Automatización
Monitoreo
Contingencia
Si su organización requiere procesar más de 5000 nóminas por día, considere: