Facturar en Ecuador
Errores del SRI
Cuando el SRI rechaza un comprobante, el estado pasa a no_autorizado y el motivo llega en
mensajes[]:
{ "id": "6f1e…", "estado": "no_autorizado", "mensajes": [ { "tipo": "ERROR", "codigo": "65", "mensaje": "FECHA EMISION EXTEMPORANEA", "informacion_adicional": "La fecha de emisión está fuera del rango permitido", "etapa": "authorization", "reintentable": false, "titulo": "Fecha de emisión fuera de plazo", "recomendaciones": ["Corrija la fecha de emisión del comprobante."] } ]}| Campo | Qué es |
|---|---|
codigo | El código del SRI. Es el identificador estable |
mensaje | El texto tal cual lo devuelve el SRI |
informacion_adicional | Detalle del SRI, cuando lo da |
etapa | Dónde ocurrió: build, sign, send, authorization, ride |
reintentable | Si tiene sentido volver a enviarlo sin cambios |
titulo y recomendaciones | Interpretación de Olympus, en lenguaje llano |
Los rechazos más frecuentes
Sección titulada «Los rechazos más frecuentes»35 · Clave de acceso registrada
Sección titulada «35 · Clave de acceso registrada»Ya existe un comprobante con esa clave de acceso. Casi siempre significa que el comprobante sí se autorizó en un envío anterior que pareció fallar.
Consulta por clave de acceso antes de dar nada por perdido:
curl https://olympus.atharix.com/api/v1/documents/2409…13 -H "X-API-Key: $OLYMPUS_API_KEY"39 · Firma inválida
Sección titulada «39 · Firma inválida»El certificado no es válido, caducó, o la contraseña guardada no corresponde.
Solución: el negocio tiene que revisar su firma en Configuración → Fiscal. Comprueba primero
GET /me. No se resuelve reintentando.
43 · Clave de acceso no existe / mal formada
Sección titulada «43 · Clave de acceso no existe / mal formada»Problema interno en la generación. No deberías verlo; si aparece, avisa a soporte con el request_id.
45 · Documento inválido según el esquema XSD
Sección titulada «45 · Documento inválido según el esquema XSD»Algún campo no cumple el formato del SRI: una descripción con caracteres no admitidos, un importe con más decimales de la cuenta, un campo obligatorio vacío.
informacion_adicional suele decir qué campo. Suele venir de datos con caracteres raros copiados y
pegados en la descripción de un producto.
52 · RUC del emisor no existe o no está activo
Sección titulada «52 · RUC del emisor no existe o no está activo»El RUC del negocio no está activo en el SRI, o no está autorizado a emitir electrónicamente.
Solución: es un trámite del contribuyente ante el SRI. Nada que hacer desde la API.
56 · Establecimiento cerrado o no autorizado
Sección titulada «56 · Establecimiento cerrado o no autorizado»El establecimiento o el punto de emisión no están dados de alta en el SRI, o están cerrados.
Solución: el negocio tiene que darlos de alta en el portal del SRI, y los códigos de Olympus tienen que coincidir con los que allí figuran.
65 · Fecha de emisión extemporánea
Sección titulada «65 · Fecha de emisión extemporánea»La fecha está fuera del plazo que admite el SRI (no puede ser futura, ni demasiado antigua).
Olympus ya rechaza las fechas futuras antes de emitir. Si aparece, suele ser una factura muy atrasada.
69 · Identificación del comprador
Sección titulada «69 · Identificación del comprador»La identificación no cuadra con su tipo: un RUC declarado como consumidor final, una cédula con
dígito verificador incorrecto, 9999999999999 con otra razón social.
Olympus normaliza estos casos antes de enviar, así que casi siempre significa que la identificación en sí es inválida: un RUC o una cédula mal tecleados. Valídalos en tu sistema antes de facturar.
Con el mismo código el SRI devuelve las facturas a consumidor final de más de 50 USD. Olympus las
rechaza antes de enviarlas (422 validation_error): identifica al comprador.
70 · Secuencial registrado
Sección titulada «70 · Secuencial registrado»Ese número ya se usó en ese punto de emisión.
Solución: POST /invoices/{id}/retry. Olympus detecta el conflicto, toma el siguiente número
libre, recalcula la clave de acceso y reenvía.
76 · Error en la estructura de impuestos
Sección titulada «76 · Error en la estructura de impuestos»El desglose no cuadra: la base no corresponde al importe, o el código de tarifa no existe. Revisa Impuestos; casi siempre es un problema de redondeo.
Qué hacer con cada tipo
Sección titulada «Qué hacer con cada tipo»| Tipo de error | Acción |
|---|---|
Configuración del negocio (39, 52, 56) | Avisar al negocio. No reintentar |
Datos del comprobante (45, 65, 69, 76) | Corregir en el origen. La factura se corrige desde Olympus |
Numeración (70) | POST /retry: se resuelve solo |
Ya existía (35) | Consultar por clave de acceso: probablemente ya está autorizada |
Conectividad (error_envio) | Esperar. Olympus reintenta solo |
Reintentar
Sección titulada «Reintentar»curl -X POST https://olympus.atharix.com/api/v1/invoices/6f1e…/retry \ -H "X-API-Key: $OLYMPUS_API_KEY"Solo funciona en no_autorizado y error_envio; en cualquier otro estado responde 409 document_locked.
Reintentar no cambia los datos de la factura. Si el SRI la rechazó por un dato incorrecto, reintentar da el mismo rechazo: hay que corregirla primero desde Olympus y volver a autorizarla.
Un proceso de revisión diario
Sección titulada «Un proceso de revisión diario»rechazadas = client.get("/invoices", params={ "estado": "no_autorizado", "desde": (date.today() - timedelta(days=7)).isoformat(),}).json()
AUTOREINTENTABLES = {"70", "35"}
for factura in rechazadas["data"]: codigos = {m["codigo"] for m in factura["mensajes"] if m["tipo"] == "ERROR"} if codigos & AUTOREINTENTABLES: client.post(f"/invoices/{factura['id']}/retry") else: avisar_al_equipo(factura) # Requiere intervención humana.