Diccionario de errores
ERPly Pro retorna errores en formato RFC 9457 — Problem Details for HTTP APIs. Cada respuesta de error incluye un campo type que apunta a una entrada de este diccionario:
{
"type": "https://errors.api.erply.pro/dgii-17-totales-inconsistentes",
"title": "Totales no coinciden con los detalles",
"status": 422,
"detail": "DGII código 17: Totales no coinciden con los detalles",
"correlationId": "1-65fa7c3a-6f9c2d8e0a1b2c3d4e5f6789",
"dgii": { "code": "17", "trackId": "20260501-DGII-9988" }
}
Categorías
| Categoría | Descripción | Ejemplos |
|---|---|---|
| Autenticación | Token inválido o ausente | unauthorised |
| Validación | El payload no cumple el contrato API | malformed-json, validation-error |
| e-CF / DGII | DGII rechazó el comprobante | Códigos 1–106 |
| Firma | XAdES-BES inválido o certificado caducado | Códigos 30–35 |
| Disponibilidad | DGII inalcanzable / mantenimiento | dgii-unavailable, 70, 71 |
| Configuración | Tenant sin RNC o PFX | tenant-config-missing |
Errores de la plataforma (Platform API error codes)
Los siguientes códigos están registrados de forma centralizada en
lambdas/shared/error_codes.py
y se emiten mediante la función error_response() de lambdas/shared/problem_response.py.
Todos siguen el esquema RFC 9457 con el campo type apuntando a
https://errors.api.erply.pro/<slug>.
Autenticación y autorización
| Slug | HTTP | Título | Descripción |
|---|---|---|---|
unauthorised | 401 | Unauthorised | Token ausente, expirado o firma inválida. |
forbidden | 403 | Forbidden | El llamante no tiene permisos para esta operación. |
approval-required | 403 | Approval required | Se requiere token de aprobación maker-checker. |
invalid-approval-token | 403 | Invalid approval token | El token de aprobación es inválido o ha expirado. |
Validación de entrada
| Slug | HTTP | Título | Descripción |
|---|---|---|---|
malformed-json | 400 | Malformed JSON | El body de la solicitud no es JSON válido. |
missing-field | 400 | Required field missing | Un campo obligatorio de la solicitud no fue proporcionado. |
validation-error | 400 | Validation error | Uno o más campos fallaron la validación de esquema. |
unknown-action | 400 | Unknown action | El valor del campo action no es reconocido. |
unknown-operation | 400 | Unknown operation | El valor del campo operation no es reconocido. |
unsupported-ecf-type | 422 | Unsupported e-CF type | El tipo de e-CF está fuera del catálogo soportado. |
mathematical-discrepancy | 422 | Mathematical discrepancy | Totales o ITBIS no coinciden con los detalles de líneas. |
DGII y servicios externos
| Slug | HTTP | Título | Descripción |
|---|---|---|---|
dgii-unavailable | 503 | DGII service temporarily unavailable | DGII no responde; reintente con back-off exponencial. |
dgii-rejected | 422 | DGII rejected the document | DGII rechazó el comprobante (ver dgii.code en la respuesta). |
Proveedor externo / AI
| Slug | HTTP | Título | Descripción |
|---|---|---|---|
provider-not-configured | 503 | AI provider not configured | La API key del proveedor no está provisionada en Secrets Manager. |
upstream-error | 502 | Upstream provider error | El proveedor externo retornó una respuesta de error. |
network-error | 502 | Network error | Error de red transitorio alcanzando al proveedor. |
Configuración de tenant
| Slug | HTTP | Título | Descripción |
|---|---|---|---|
tenant-config-missing | 503 | Tenant configuration missing | El tenant no tiene RNC, PFX o passphrase configurados. |
tenant-resolver-not-configured | 500 | Tenant resolver not configured | Error interno de configuración — resolver de tenant ausente. |
Errores internos
| Slug | HTTP | Título | Descripción |
|---|---|---|---|
internal-error | 500 | Internal server error | Error inesperado; contacte soporte con el correlationId. |
Errores emitidos por el API
Los siguientes errores los origina ERPly Pro antes de hablar con DGII:
unauthorised— falta token o no resolvió el tenant.malformed-json— el body no es JSON válido.unsupported-ecf-type— tipo de e-CF fuera del catálogo soportado.mathematical-discrepancy— totales/ITBIS no cuadran.validation-error— campos requeridos faltan o tienen formato inválido.tenant-resolver-not-configured— bug interno (no debería ocurrir en producción).tenant-config-missing— el tenant no tiene RNC, PFX o passphrase configurados.dgii-rejected— rechazo DGII genérico (sin código mapeado).dgii-unavailable— DGII no responde dentro del SLA.
Códigos DGII
Los códigos numéricos los emite la DGII y los enriquecemos con dgii.code/dgii.trackId en el Problem. Consulta cada código directamente:
Diccionario de errores
ERPly Pro retorna errores en formato RFC 9457 — Problem Details for HTTP APIs. Cada respuesta de error incluye un campo type que apunta a una entrada de este diccionario:
Errores de Identidad
Códigos de error específicos del módulo de Validación de Identidad (/v1/dgii/document/ y /v1/dgii/registry/).
— RNC no existe en el registro DGII
DGII código 1 — RNC no existe en el registro DGII
0 — Formato de eNCF inválido
DGII código 10 — Formato de eNCF inválido
00 — Payload excede el tamaño máximo (8 MB)
DGII código 100 — Payload excede el tamaño máximo (8 MB)
01 — Encabezado del e-CF incompleto
DGII código 101 — Encabezado del e-CF incompleto
02 — El detalle de líneas no puede estar vacío
DGII código 102 — El detalle de líneas no puede estar vacío
03 — Código de producto/servicio no registrado en DGII
DGII código 103 — Código de producto/servicio no registrado en DGII
04 — Dirección del comprador requerida
DGII código 104 — Dirección del comprador requerida
05 — País del comprador no soportado
DGII código 105 — País del comprador no soportado
06 — Formato de orden de compra inválido
DGII código 106 — Formato de orden de compra inválido
1 — Secuencia de eNCF agotada
DGII código 11 — Secuencia de eNCF agotada
2 — eNCF fuera del rango autorizado
DGII código 12 — eNCF fuera del rango autorizado
3 — eNCF duplicado
DGII código 13 — eNCF duplicado
4 — Tipo de comprobante no permitido para este RNC
DGII código 14 — Tipo de comprobante no permitido para este RNC
5 — Fecha de emisión en el futuro
DGII código 15 — Fecha de emisión en el futuro
6 — Fecha de emisión anterior al período permitido
DGII código 16 — Fecha de emisión anterior al período permitido
7 — Totales inconsistentes con el detalle de líneas
DGII código 17 — Totales inconsistentes con el detalle de líneas
8 — ITBIS calculado incorrectamente
DGII código 18 — ITBIS calculado incorrectamente
9 — Moneda no soportada
DGII código 19 — Moneda no soportada
— RNC inactivo o suspendido
DGII código 2 — RNC inactivo o suspendido
0 — Tasa de cambio requerida para moneda extranjera
DGII código 20 — Tasa de cambio requerida para moneda extranjera
— RNC no autorizado como emisor electrónico
DGII código 3 — RNC no autorizado como emisor electrónico
0 — Firma XAdES-BES inválida
DGII código 30 — Firma XAdES-BES inválida
1 — Certificado del firmante expirado
DGII código 31 — Certificado del firmante expirado
2 — Certificado del firmante revocado
DGII código 32 — Certificado del firmante revocado
3 — Certificado no emitido por una AC autorizada por INDOTEL
DGII código 33 — Certificado no emitido por una AC autorizada por INDOTEL
4 — Canonicalización XML no es Exclusive C14N
DGII código 34 — Canonicalización XML no es Exclusive C14N
5 — Digest del documento no coincide con la firma
DGII código 35 — Digest del documento no coincide con la firma
0 — Versión de XSD no soportada
DGII código 40 — Versión de XSD no soportada
1 — XML malformado
DGII código 41 — XML malformado
2 — Elemento XSD requerido ausente
DGII código 42 — Elemento XSD requerido ausente
3 — Namespace XML incorrecto
DGII código 43 — Namespace XML incorrecto
4 — eNCF no corresponde al tipo declarado
DGII código 44 — eNCF no corresponde al tipo declarado
0 — RNC del comprador inválido
DGII código 50 — RNC del comprador inválido
1 — Datos del comprador requeridos para este tipo
DGII código 51 — Datos del comprador requeridos para este tipo
2 — Monto excede el límite de e-CF tipo 32 (Consumo)
DGII código 52 — Monto excede el límite de e-CF tipo 32 (Consumo)
3 — Nota de crédito sin eNCF padre válido
DGII código 53 — Nota de crédito sin eNCF padre válido
4 — Nota de débito sin eNCF padre válido
DGII código 54 — Nota de débito sin eNCF padre válido
0 — Token DGII inválido o expirado
DGII código 60 — Token DGII inválido o expirado
1 — Cuota diaria de envíos excedida
DGII código 61 — Cuota diaria de envíos excedida
2 — Límite de tasa DGII alcanzado
DGII código 62 — Límite de tasa DGII alcanzado
0 — Servicio DGII en mantenimiento
DGII código 70 — Servicio DGII en mantenimiento
1 — Tiempo de espera agotado al contactar DGII
DGII código 71 — Tiempo de espera agotado al contactar DGII
2 — Error de conectividad con DGII
DGII código 72 — Error de conectividad con DGII
3 — Respuesta DGII malformada
DGII código 73 — Respuesta DGII malformada
0 — TrackId no encontrado en DGII
DGII código 80 — TrackId no encontrado en DGII
1 — TrackId no pertenece al RNC consultante
DGII código 81 — TrackId no pertenece al RNC consultante
2 — Aprobación comercial rechazada por el comprador
DGII código 82 — Aprobación comercial rechazada por el comprador
0 — ITBIS exento mal clasificado
DGII código 90 — ITBIS exento mal clasificado
1 — Tasa de ITBIS no permitida (use 0%, 16% ó 18%)
DGII código 91 — Tasa de ITBIS no permitida (use 0%, 16% ó 18%)
2 — ISC no aplicable a este tipo de bien o servicio
DGII código 92 — ISC no aplicable a este tipo de bien o servicio
3 — Propina legal (10%) mal aplicada
DGII código 93 — Propina legal (10%) mal aplicada
4 — Retención de ISR mal aplicada
DGII código 94 — Retención de ISR mal aplicada
5 — Retención de ITBIS mal aplicada
DGII código 95 — Retención de ITBIS mal aplicada
6 — Descuento excede el porcentaje permitido
DGII código 96 — Descuento excede el porcentaje permitido
7 — Formato de fecha inválido (use AAAA-MM-DD)
DGII código 97 — Formato de fecha inválido (use AAAA-MM-DD)
8 — Excedió los decimales permitidos (máx. 2)
DGII código 98 — Excedió los decimales permitidos (máx. 2)
9 — Error genérico DGII
DGII código 99 — Error genérico DGII
dgii-rejected
HTTP 422 · Posiblemente resoluble por el tenant.
dgii-unavailable
HTTP 504 · Reintentable. ERPly Pro reintenta automáticamente vía la cola de envíos.
malformed-json
HTTP 400 · Resoluble por el tenant.
mathematical-discrepancy
HTTP 422 · Resoluble por el tenant.
tenant-config-missing
HTTP 422 · Resoluble por el tenant.
tenant-resolver-not-configured
HTTP 500 · No resoluble por el tenant.
unauthorised
HTTP 401 · No reintentable sin acción del cliente.
unsupported-ecf-type
HTTP 400 · Resoluble por el tenant.
validation-error
HTTP 400 · Resoluble por el tenant.
Datos canónicos
El catálogo completo está disponible como JSON en /dgii-errors.json — útil para automatizar reglas de remediación en clientes propios.