e-CF 41 — Comprobante de Compras Electrónico¶
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
202siempre traetrack_id: null: la transmisión ocurre después, en segundo plano. Al transmitirse, este tipo completo recibe su TrackID y el documento pasa ain_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. |