Saltar a contenido

e-CF 47 — Comprobante para Pagos al Exterior Electrónico

POST /api/v1/documents/47
Authorization: Bearer <su-token>
Content-Type: application/json

El emisor.rnc del cuerpo dice de qué empresa es el comprobante y, a la vez, en nombre de quién se emite: la API comprueba que su token esté habilitado para esa empresa (cómo funciona).

Documenta un pago a un beneficiario en el extranjero —servicios profesionales, regalías, intereses, dividendos— sobre el que usted debe practicar la retención del ISR.

Como en el 41, lo emite quien paga.

Particularidades

Aspecto Regla
Numeración id_doc.e_ncf (E47 + 10 dígitos) y id_doc.fecha_vencimiento_secuencia (dd-MM-aaaa) obligatorios: la numeración la lleva su sistema. Ver numeracion.md.
Comprador Beneficiario extranjero: sin rnc, se identifica con identificador_extranjero y razon_social.
retencion en cada ítem Obligatoria, con indicador e isr_retenido. Es la razón de ser del comprobante.
ITBIS No lleva.
Impuestos adicionales (ISC) No aplican.
Líneas de detalle Máximo 1.000.

La retención del ISR es obligatoria

"retencion": {
  "indicador": "1",        // indicador de retención / percepción
  "isr_retenido": 2700.00  // ISR retenido sobre este ítem
}

Sin este bloque el comprobante no tiene sentido: lo que la DGII espera de un 47 es precisamente cuánto se retuvo al pagar al exterior. Y el total, totales.total_isr_retencion, es obligatorio y tiene que ser la suma de los isr_retenido de las líneas: sin él la DGII rechaza el comprobante («el campo TotalISRRetencion … no es válido»).

Ejemplo

Pago de servicios de consultoría a una empresa española, reteniendo el 27% de ISR.

{
  "emisor": {
    "rnc": "133802074"
  },
  "comprador": {
    "identificador_extranjero": "ES-B12345678",
    "razon_social": "CONSULTORA IBERICA SL"
  },
  "id_doc": {
    "e_ncf": "E470000000001",
    "fecha_vencimiento_secuencia": "31-12-2028",
    "tipo_pago": "1",
    "formas_pago": [
      { "forma": "3", "monto": 10000.0 }
    ]
  },
  "items": [
    {
      "nombre": "Servicios de consultoría",
      "cantidad": 1,
      "unidad_medida": "43",
      "precio_unitario": 10000.0,
      "monto": 10000.0,
      "indicador_facturacion": 4,
      "indicador_bien_servicio": "2",
      "retencion": {
        "indicador": "1",
        "isr_retenido": 2700.0
      }
    }
  ],
  "totales": {
    "monto_exento": 10000.0,
    "monto_total": 10000.0,
    "total_isr_retencion": 2700.0
  }
}

Archivo: ejemplos/ecf-47-minimo.json

TrackID. La respuesta 202 siempre trae track_id: null: la transmisión ocurre después, en segundo plano. Al transmitirse, este tipo completo recibe su TrackID y el documento pasa a in_process_dgii (dónde aparece el TrackID).

Errores frecuentes

Cada mensaje llega en un 422 dentro de document.errors (y, por campo, en document.detailed_errors); la forma completa está en Cómo responde la API.

Mensaje Causa
El campo retención del ítem es obligatorio. Todo ítem de un 47 debe declarar la retención.
El campo ISR retenido del ítem es obligatorio. Falta retencion.isr_retenido.
El campo RNC/Cédula del comprador no está permitido. El beneficiario es extranjero: use identificador_extranjero.
El campo total ITBIS no está permitido. El 47 no lleva ITBIS.
Hay ISR retenido en el detalle, así que totales.total_isr_retencion es obligatorio (…). Falta totales.total_isr_retencion: es la suma de los retencion.isr_retenido de las líneas.
El total de ISR retenido (…) no coincide con la suma de las líneas (…). Revise que el total sea exactamente la suma de las retenciones de los ítems.
Escriba el país con su nombre …, sin números y con al menos 3 letras… transporte.pais_destino es el nombre del país ("España"), no su código ("ES").

Referencias