Saltar al contenido principal

Estructura del e-CF

Esta página describe el contenido del objeto ecf que se envía al endpoint de emisión. El comprobante siempre va dentro de la envoltura de emisión:

{
"dgii_env": "testecf",
"allow_certification_reset": false,
"ecf": {
"Encabezado": { },
"DetallesItems": { "Item": [ ] }
}
}

El objeto ecf es la representación JSON del XML e-CF v1.0 de la DGII: usa los mismos nombres de elemento (en PascalCase, respetando mayúsculas y minúsculas) y la misma jerarquía. Facturo genera el XML, lo firma con tu certificado y lo envía a la DGII. La fuente de verdad son los esquemas XSD y el documento Formato Comprobante Fiscal Electrónico (e-CF) V1.0 publicados por la DGII.

Convenciones
  • Fechas: formato DD-MM-AAAA (por ejemplo 17-01-2026), no ISO 8601.
  • Códigos numéricos (TipoeCF, TipoPago, IndicadorFacturacion, …) se envían como números. TipoIngresos es texto de dos dígitos ("01").
  • Listas: un elemento que se repite en el XML se envía como arreglo dentro de su contenedor, por ejemplo "DetallesItems": { "Item": [ ... ] }.
  • Montos: máximo 2 decimales (el precio unitario admite hasta 4).

Estructura general​

{
"Encabezado": {
"Version": "1.0",
"IdDoc": { },
"Emisor": { },
"Comprador": { },
"Totales": { },
"OtraMoneda": { }
},
"DetallesItems": { "Item": [ ] },
"DescuentosORecargos": { "DescuentoORecargo": [ ] },
"InformacionReferencia": { }
}
SecciónObligatoriaContenido
EncabezadoSíIdentificación del documento, emisor, comprador y totales
DetallesItemsSíLíneas del comprobante (1 a 1000 Item)
DescuentosORecargosNoDescuentos o recargos globales (hasta 20)
InformacionReferenciaTipos 33 y 34Comprobante que se modifica

IdDoc​

Identificación del comprobante.

{
"IdDoc": {
"TipoeCF": 31,
"eNCF": "E310000000001",
"FechaVencimientoSecuencia": "31-12-2026",
"IndicadorMontoGravado": 0,
"TipoIngresos": "01",
"TipoPago": 2,
"FechaLimitePago": "16-02-2026",
"TablaFormasPago": {
"FormaDePago": [
{ "FormaPago": 4, "MontoPago": 1180.00 }
]
}
}
}
CampoTipoRequeridoDescripción
TipoeCFnúmeroSíTipo de comprobante (ver tabla abajo)
eNCFtexto (13)SíNúmero de comprobante: serie (1) + tipo (2) + secuencia (10). Ej. E310000000001
FechaVencimientoSecuenciafechaSegún tipoVencimiento de la secuencia autorizada. No aplica a 32 ni 34
IndicadorMontoGravadonúmeroNo0 = precios sin ITBIS incluido, 1 = precios con ITBIS incluido
TipoIngresostextoSegún tipo01 Operacionales, 02 Financieros, 03 Extraordinarios, 04 Arrendamientos, 05 Venta de activo depreciable, 06 Otros
TipoPagonúmeroSí1 Contado, 2 Crédito, 3 Gratuito
FechaLimitePagofechaNoFecha límite de pago (ventas a crédito)
TerminoPagotextoNoTérmino de pago, por ejemplo 30 días
TablaFormasPago.FormaDePago[]listaNoHasta 7 formas de pago con FormaPago y MontoPago

Tipos de comprobante (TipoeCF)​

CódigoDescripción
31Factura de Crédito Fiscal Electrónica
32Factura de Consumo Electrónica
33Nota de Débito Electrónica
34Nota de Crédito Electrónica
41Comprobante Electrónico de Compras
43Comprobante Electrónico para Gastos Menores
44Comprobante Electrónico para Regímenes Especiales
45Comprobante Electrónico Gubernamental
46Comprobante Electrónico para Exportaciones
47Comprobante Electrónico para Pagos al Exterior

Formas de pago (FormaPago)​

CódigoDescripción
1Efectivo
2Cheque / Transferencia / Depósito
3Tarjeta de débito / crédito
4Venta a crédito
5Bonos o certificados de regalo
6Permuta
7Nota de crédito
8Otras formas de pago

Emisor​

Datos de quien emite el documento. Aquí va la fecha de emisión.

{
"Emisor": {
"RNCEmisor": "131234567",
"RazonSocialEmisor": "MI EMPRESA SRL",
"NombreComercial": "Mi Empresa",
"DireccionEmisor": "Calle Principal #123, Santo Domingo",
"TablaTelefonoEmisor": { "TelefonoEmisor": ["809-555-1234"] },
"CorreoEmisor": "facturacion@miempresa.com.do",
"NumeroFacturaInterna": "INV-2026-0001",
"FechaEmision": "17-01-2026"
}
}
CampoRequeridoDescripción
RNCEmisorSíRNC o cédula del emisor
RazonSocialEmisorSíRazón social (máx. 150)
DireccionEmisorSíDirección (máx. 100)
FechaEmisionSíFecha de emisión (DD-MM-AAAA)
NombreComercial, Sucursal, Municipio, ProvinciaNoDatos complementarios
TablaTelefonoEmisor.TelefonoEmisor[]NoHasta 3 teléfonos, formato 809-555-1234
CorreoEmisor, WebSite, ActividadEconomicaNoContacto
CodigoVendedor, NumeroFacturaInterna, NumeroPedidoInternoNoReferencias internas

Comprador​

Datos del cliente.

{
"Comprador": {
"RNCComprador": "101234567",
"RazonSocialComprador": "CLIENTE EJEMPLO SA",
"CorreoComprador": "compras@cliente.com.do",
"DireccionComprador": "Av. Winston Churchill #456, Santo Domingo"
}
}
CampoRequeridoDescripción
RNCCompradorSegún tipoRNC o cédula. Obligatorio en 31 y 45
IdentificadorExtranjeroNoIdentificación de compradores extranjeros (32, 33, 34, 44, 46, 47)
RazonSocialCompradorSegún tipoObligatorio en 31, 44, 45 y 46
ContactoComprador, CorreoComprador, DireccionCompradorNoContacto
FechaEntrega, DireccionEntrega, NumeroOrdenCompra, FechaOrdenCompraNoLogística y orden de compra
Factura de consumo (32)

En la Factura de Consumo el comprador es opcional por debajo del monto que fija la DGII; a partir de ese monto se debe identificar.

DetallesItems​

Líneas de productos o servicios. Cada línea es un Item.

{
"DetallesItems": {
"Item": [
{
"NumeroLinea": 1,
"IndicadorFacturacion": 1,
"NombreItem": "Laptop Dell Latitude 5420",
"IndicadorBienoServicio": 1,
"CantidadItem": 1,
"PrecioUnitarioItem": 1000.00,
"MontoItem": 1000.00
}
]
}
}
CampoRequeridoDescripción
NumeroLineaSíNúmero de línea, desde 1
IndicadorFacturacionSí0 No facturable, 1 ITBIS 18 %, 2 ITBIS 16 %, 3 ITBIS 0 %, 4 Exento
NombreItemSíNombre del producto o servicio (máx. 80)
IndicadorBienoServicioSí1 Bien, 2 Servicio
CantidadItemSíCantidad (mayor que 0)
PrecioUnitarioItemSíPrecio unitario (hasta 4 decimales)
MontoItemSíMonto de la línea: CantidadItem × PrecioUnitarioItem − DescuentoMonto + RecargoMonto
DescripcionItemNoDescripción ampliada (máx. 1000)
UnidadMedidaNoCódigo de unidad de medida de la DGII
DescuentoMonto, TablaSubDescuentoNoDescuento de la línea y su desglose
RecargoMonto, TablaSubRecargoNoRecargo de la línea y su desglose
RetencionNoIndicadorAgenteRetencionoPercepcion, MontoITBISRetenido, MontoISRRetenido (en el tipo 47 es obligatoria, con MontoISRRetenido)

El ITBIS no se informa por línea: se deriva de IndicadorFacturacion y se totaliza en Totales.

Totales​

{
"Totales": {
"MontoGravadoTotal": 1000.00,
"MontoGravadoI1": 1000.00,
"ITBIS1": 18,
"TotalITBIS": 180.00,
"TotalITBIS1": 180.00,
"MontoTotal": 1180.00
}
}
CampoDescripción
MontoGravadoTotalSuma de MontoGravadoI1 + MontoGravadoI2 + MontoGravadoI3
MontoGravadoI1 / I2 / I3Base gravada al 18 %, 16 % y 0 %
MontoExentoSuma de líneas exentas (IndicadorFacturacion = 4)
ITBIS1 / ITBIS2 / ITBIS3Tasa aplicada en cada grupo: 18, 16, 0
TotalITBIS1 / 2 / 3ITBIS calculado en cada grupo
TotalITBISSuma de TotalITBIS1..3
MontoTotalObligatorio. MontoGravadoTotal + MontoExento + TotalITBIS + MontoImpuestoAdicional
TotalITBISRetenido, TotalISRRetencionTotales de retenciones
MontoNoFacturableSuma de líneas no facturables
ITBIS1 es una tasa, no un monto

ITBIS1, ITBIS2 e ITBIS3 llevan el porcentaje (18, 16, 0). Los montos de impuesto van en TotalITBIS1, TotalITBIS2 y TotalITBIS3.

OtraMoneda​

Solo cuando el documento se factura en una moneda distinta al peso dominicano. Los montos de Totales siempre van en DOP.

{
"OtraMoneda": {
"TipoMoneda": "USD",
"TipoCambio": 59.5000,
"MontoGravadoTotalOtraMoneda": 16.81,
"MontoGravado1OtraMoneda": 16.81,
"TotalITBISOtraMoneda": 3.03,
"TotalITBIS1OtraMoneda": 3.03,
"MontoTotalOtraMoneda": 19.83
}
}

DescuentosORecargos​

Descuentos o recargos aplicados al total del documento.

{
"DescuentosORecargos": {
"DescuentoORecargo": [
{
"NumeroLinea": 1,
"TipoAjuste": "D",
"DescripcionDescuentooRecargo": "Descuento por pronto pago",
"TipoValor": "$",
"ValorDescuentooRecargo": 50.00,
"MontoDescuentooRecargo": 50.00,
"IndicadorFacturacionDescuentooRecargo": 1
}
]
}
}
CampoDescripción
TipoAjusteD Descuento, R Recargo
TipoValor$ monto fijo, % porcentaje
ValorDescuentooRecargoValor (monto o porcentaje según TipoValor)
MontoDescuentooRecargoMonto resultante en DOP
IndicadorFacturacionDescuentooRecargoGrupo de ITBIS al que afecta (mismos códigos que IndicadorFacturacion)

InformacionReferencia​

Obligatoria en Notas de Débito (33) y Notas de Crédito (34).

{
"InformacionReferencia": {
"NCFModificado": "E310000000001",
"FechaNCFModificado": "17-01-2026",
"CodigoModificacion": 3,
"RazonModificacion": "Devolución parcial de mercancía"
}
}
CódigoCodigoModificacion
1Anula el NCF modificado
2Corrige texto del comprobante fiscal modificado
3Corrige montos del NCF modificado
4Reemplazo de NCF emitido en contingencia
5Referencia a Factura de Consumo Electrónica

Campos según el tipo de comprobante​

TipoFechaVencimientoSecuenciaCompradorInformacionReferencia
31ObligatoriaObligatorio con RNC y razón socialOpcional
32No aplicaOpcional según montoOpcional
33ObligatoriaOpcionalObligatoria
34No aplicaOpcionalObligatoria
41ObligatoriaVer XSD del tipo 41Opcional
43ObligatoriaNo aplicaOpcional
44ObligatoriaObligatorio (razón social)Opcional
45ObligatoriaObligatorio con RNC y razón socialOpcional
46ObligatoriaObligatorio (razón social), admite extranjeroOpcional
47ObligatoriaOpcional, beneficiario extranjeroOpcional

Para el detalle de cada tipo consulta los XSD de la DGII.

Ejemplo completo​

Factura de Crédito Fiscal (tipo 31), a crédito, una línea gravada al 18 %:

{
"Encabezado": {
"Version": "1.0",
"IdDoc": {
"TipoeCF": 31,
"eNCF": "E310000000001",
"FechaVencimientoSecuencia": "31-12-2026",
"IndicadorMontoGravado": 0,
"TipoIngresos": "01",
"TipoPago": 2,
"FechaLimitePago": "16-02-2026",
"TablaFormasPago": {
"FormaDePago": [
{ "FormaPago": 4, "MontoPago": 1180.00 }
]
}
},
"Emisor": {
"RNCEmisor": "131234567",
"RazonSocialEmisor": "MI EMPRESA SRL",
"NombreComercial": "Mi Empresa",
"DireccionEmisor": "Calle Principal #123, Santo Domingo",
"CorreoEmisor": "facturacion@miempresa.com.do",
"FechaEmision": "17-01-2026"
},
"Comprador": {
"RNCComprador": "101234567",
"RazonSocialComprador": "CLIENTE EJEMPLO SA",
"CorreoComprador": "compras@cliente.com.do"
},
"Totales": {
"MontoGravadoTotal": 1000.00,
"MontoGravadoI1": 1000.00,
"ITBIS1": 18,
"TotalITBIS": 180.00,
"TotalITBIS1": 180.00,
"MontoTotal": 1180.00
}
},
"DetallesItems": {
"Item": [
{
"NumeroLinea": 1,
"IndicadorFacturacion": 1,
"NombreItem": "Laptop Dell Latitude 5420",
"IndicadorBienoServicio": 1,
"CantidadItem": 1,
"PrecioUnitarioItem": 1000.00,
"MontoItem": 1000.00
}
]
}
}

Validaciones​

Antes de firmar y transmitir el comprobante, Facturo valida, entre otros:

  • ✅ Estructura y nombres de campo según el XSD del tipo de e-CF
  • ✅ Fechas en formato DD-MM-AAAA
  • ✅ RNC/cédula con formato válido
  • ✅ Cálculos de totales e ITBIS
  • ✅ e-NCF válido (13 caracteres: serie, tipo y secuencia)

Si alguna validación falla, la API responde con un error 4xx y el detalle en el mensaje. Consulta Manejo de errores.

Pendiente de confirmar

El conector de Odoo de referencia envía el número de comprobante como ENCF y el ambiente como TesteCF. Esta documentación sigue el XSD (eNCF) y los clientes oficiales (testecf). Si tu integración ya usa esa variante, confirma con soporte cuál acepta tu cuenta.

Próximos pasos​