Saltar al contenido principal

Manejar errores y reintentos

Todos los errores siguen RFC 9457 y el campo type es un enlace deep al diccionario de errores.

Patrón recomendado

resp = requests.post(...)
if resp.status_code >= 400:
problem = resp.json()
print("Error:", problem["type"], problem["title"])
print("Correlation:", problem.get("correlationId"))
if problem.get("dgii"):
print("DGII code:", problem["dgii"]["code"], "track:", problem["dgii"].get("trackId"))
# Decide reintento según problem["type"]:
if problem["type"].endswith("/dgii-unavailable"):
# ERPly Pro ya reintentará — registra y sal.
return
if problem["type"].endswith("/validation-error"):
raise ValueError(problem["detail"])

Reintentos seguros

  • POST /v1/invoices es idempotente vía Idempotency-Key con TTL de 24 h. Reusar la misma clave devuelve el resultado original con HTTP 200 (en vez de 202).
  • dgii-unavailable (504) → ERPly Pro reintenta solo. No hace falta hacer nada.
  • dgii-rejected (422) → NO reintentes con el mismo eNCF; ese número ya quedó consumido.

Errores frecuentes

TipoAcción
validation-errorCorrige el payload.
mathematical-discrepancyRe-calcula totales con redondeo correcto.
dgii-rejectedLee dgii.code y consulta el diccionario.
dgii-unavailableEspera al webhook.

¡Listo! Has emitido tu primera factura. Continúa con los conceptos o el reference completo.