Skip to content

Limitaciones del Servicio

Crítico Planificación Requerida

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:

  1. uploadDocument - Enviar XML
  2. documentStatus - 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:

  • Reintentos por errores
  • Polling múltiple de status
  • Margen de seguridad

~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 minutos
Ciclos necesarios: 10
Complejidad: BAJA

Estrategia:

  • Procesamiento secuencial simple
  • Sin necesidad de optimizaciones
  • Cola básica suficiente

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 respuesta
while ($intento < $maxIntentos) {
$status = $client->documentStatus($transactionID);
if ($status['codigo'] == 200) break;
sleep($intervalo);
}

Problema: El tiempo de autorización no es predecible.

Rangos observados:

  • Sandbox: 5-30 segundos
  • Producción: xx segundos
  • Alta demanda: Hasta xx minutos

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:

  • Layout del documento
  • Tipografía
  • Logo (solo Facturatech)
  • Orden de secciones

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:

  • ALTA: Nómina complementaria, correcciones urgentes
  • MEDIA: Nómina regular del mes
  • BAJA: Re-emisiones, documentos de respaldo

// Métricas críticas a monitorear
$metricas = [
'nominas_pendientes' => countPending(),
'tasa_exito' => calculateSuccessRate(),
'tiempo_promedio' => getAverageTime(),
'errors_last_hour' => countRecentErrors(),
'rate_limit_hits' => getRateLimitHits()
];
// Alertas
if ($metricas['nominas_pendientes'] > 100) {
alertar('Cola muy grande');
}
if ($metricas['tasa_exito'] < 0.95) {
alertar('Tasa de éxito baja');
}

EmpleadosCiclosTiempo MínimoTiempo EsperadoTiempo Máximo
50550s1 min2 min
100101.5 min2 min3 min
250254 min5 min7 min
500508 min10 min15 min
100010016 min20 min30 min
150015025 min30 min45 min
300030050 min60 min90 min
500050083 min100 min150 min

Planificación

  • Calcular tiempo necesario con anticipación
  • Considerar el día de emisión (evitar fines de mes)
  • Tener plan B para volúmenes grandes

Automatización

  • Sistema de cola robusto
  • Reintentos automáticos
  • Monitoreo continuo
  • Alertas configuradas

Monitoreo

  • Dashboard en tiempo real
  • Métricas de performance
  • Logs detallados
  • Reportes diarios

Contingencia

  • Plan de recuperación
  • Procedimientos de emergencia
  • Contactos de soporte
  • Documentación actualizada

Si su organización requiere procesar más de 5000 nóminas por día, considere:

  1. Negociar límites especiales con Facturatech
  2. Múltiples credenciales (C3) si es posible
  3. Procesamiento distribuido en varios días
  4. Servicios enterprise con SLA dedicado