Saltar a contenido

e-CF 41 — Comprobante de Compras Electrónico

POST /api/v1/documents/41
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).

Registra una compra a un proveedor que no emite comprobantes electrónicos —típicamente personas físicas o informales—, para que usted pueda sustentar el gasto y practicar las retenciones que correspondan. Lo emite quien compra, no quien vende.

Si su proveedor sí emite e-CF, no use este tipo: lo que recibe de él llega por recepción y lo consulta en GET /api/v1/received-documents.

Particularidades

Aspecto Regla
Numeración id_doc.e_ncf (E41 + 10 dígitos) y id_doc.fecha_vencimiento_secuencia (dd-MM-aaaa) obligatorios: la numeración la lleva su sistema. Ver numeracion.md.
id_doc.tipo_ingresos No existe. Este tipo no clasifica ingresos, porque registra una compra.
id_doc.indicador_envio_diferido No existe.
retencion en cada ítem Obligatoria, con indicador. Es la razón de ser del comprobante.
Impuestos adicionales (ISC) No aplican, ni en los ítems ni en totales.
Comprador Obligatorio: rnc y razon_social.
Líneas de detalle Máximo 1.000.

La retención es obligatoria

Cada ítem debe declarar su retención. Es lo que distingue a este comprobante: la DGII espera saber qué retuvo usted al pagarle a ese proveedor.

"retencion": {
  "indicador": "1",                // indicador de retención / percepción
  "itbis_retenido": 180.00,        // ITBIS retenido sobre este ítem
  "isr_retenido": 0.00             // ISR retenido (obligatorio si el ítem es un servicio; envíe 0 si no hay)
}

Con retención de agente (indicador 1), la DGII exige itbis_retenido si el ítem lleva ITBIS e isr_retenido si es un servicio (indicador_bien_servicio 2). Y los totales total_itbis_retenido y total_isr_retencion son obligatorios en cuanto alguna línea declare retención, y tienen que ser la suma de las líneas.

Los valores admitidos del indicador están en catálogos.

Ejemplo

Compra de un servicio de mantenimiento a un proveedor informal, reteniéndole el ITBIS.

{
  "emisor": {
    "rnc": "133802074"
  },
  "comprador": {
    "rnc": "131880738",
    "razon_social": "PROVEEDOR INFORMAL, SRL"
  },
  "id_doc": {
    "e_ncf": "E410000000001",
    "fecha_vencimiento_secuencia": "31-12-2028",
    "indicador_monto_gravado": 0,
    "tipo_pago": "1",
    "formas_pago": [
      { "forma": "1", "monto": 1180.0 }
    ]
  },
  "items": [
    {
      "nombre": "Servicio de mantenimiento",
      "cantidad": 1,
      "unidad_medida": "43",
      "precio_unitario": 1000.0,
      "monto": 1000.0,
      "indicador_facturacion": 1,
      "indicador_bien_servicio": "2",
      "retencion": {
        "indicador": "1",
        "itbis_retenido": 180.0,
        "isr_retenido": 0.0
      }
    }
  ],
  "totales": {
    "monto_gravado_total": 1000.0,
    "itbis1": 18,
    "total_itbis": 180.0,
    "monto_total": 1180.0,
    "monto_gravado_i1": 1000.0,
    "total_itbis1": 180.0,
    "total_itbis_retenido": 180.0,
    "total_isr_retencion": 0.0
  }
}

Archivo: ejemplos/ecf-41-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 41 debe declarar su retención.
El campo indicador de retención del ítem es obligatorio. Falta retencion.indicador.
El campo tipo de ingresos no está permitido. El 41 no lleva tipo_ingresos: quítelo del id_doc.
El campo RNC/Cédula del comprador es obligatorio. Hay que identificar a la contraparte de la compra.
El ítem 1 tiene retención de agente (indicador 1) y lleva ITBIS, así que el ITBIS retenido … es obligatorio. La clave es retencion.itbis_retenido (no monto_itbis_retenido: esa se ignora en silencio y la DGII rechaza el comprobante).
Hay ITBIS retenido en el detalle, así que totales.total_itbis_retenido es obligatorio. Declaró retención en las líneas pero no la sumó en totales. Lo mismo para total_isr_retencion.
El total de ITBIS retenido (…) no coincide con la suma de las líneas (…). total_itbis_retenido debe ser exactamente la suma de retencion.itbis_retenido de todos los ítems.
Hay ítems gravados con ITBIS, así que el indicador de monto gravado (id_doc.indicador_monto_gravado) es obligatorio: 0 si los montos de las líneas no incluyen ITBIS, 1 si lo incluyen. Falta id_doc.indicador_monto_gravado. La DGII lo exige cuando hay ítems gravados (Formato e-CF, campo 7) y, si no viene, rechaza el comprobante con el código 176.
El campo fecha límite de pago es obligatorio cuando tipo de pago es 2. Una venta a crédito siempre declara su fecha_limite_pago.
La fecha límite de pago (…) no puede ser anterior a la fecha de emisión, que es la de hoy (…). id_doc.fecha_limite_pago está en el pasado. Con tipo_pago 2 (crédito) es obligatoria y tiene que ser igual o posterior a hoy.

Referencias