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.
- Fechas: formato
DD-MM-AAAA(por ejemplo17-01-2026), no ISO 8601. - Códigos numéricos (
TipoeCF,TipoPago,IndicadorFacturacion, …) se envían como números.TipoIngresoses 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ón | Obligatoria | Contenido |
|---|---|---|
Encabezado | Sí | Identificación del documento, emisor, comprador y totales |
DetallesItems | Sí | Líneas del comprobante (1 a 1000 Item) |
DescuentosORecargos | No | Descuentos o recargos globales (hasta 20) |
InformacionReferencia | Tipos 33 y 34 | Comprobante 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 }
]
}
}
}
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
TipoeCF | número | Sí | Tipo de comprobante (ver tabla abajo) |
eNCF | texto (13) | Sí | Número de comprobante: serie (1) + tipo (2) + secuencia (10). Ej. E310000000001 |
FechaVencimientoSecuencia | fecha | Según tipo | Vencimiento de la secuencia autorizada. No aplica a 32 ni 34 |
IndicadorMontoGravado | número | No | 0 = precios sin ITBIS incluido, 1 = precios con ITBIS incluido |
TipoIngresos | texto | Según tipo | 01 Operacionales, 02 Financieros, 03 Extraordinarios, 04 Arrendamientos, 05 Venta de activo depreciable, 06 Otros |
TipoPago | número | Sí | 1 Contado, 2 Crédito, 3 Gratuito |
FechaLimitePago | fecha | No | Fecha límite de pago (ventas a crédito) |
TerminoPago | texto | No | Término de pago, por ejemplo 30 días |
TablaFormasPago.FormaDePago[] | lista | No | Hasta 7 formas de pago con FormaPago y MontoPago |
Tipos de comprobante (TipoeCF)
| Código | Descripción |
|---|---|
| 31 | Factura de Crédito Fiscal Electrónica |
| 32 | Factura de Consumo Electrónica |
| 33 | Nota de Débito Electrónica |
| 34 | Nota de Crédito Electrónica |
| 41 | Comprobante Electrónico de Compras |
| 43 | Comprobante Electrónico para Gastos Menores |
| 44 | Comprobante Electrónico para Regímenes Especiales |
| 45 | Comprobante Electrónico Gubernamental |
| 46 | Comprobante Electrónico para Exportaciones |
| 47 | Comprobante Electrónico para Pagos al Exterior |
Formas de pago (FormaPago)
| Código | Descripción |
|---|---|
| 1 | Efectivo |
| 2 | Cheque / Transferencia / Depósito |
| 3 | Tarjeta de débito / crédito |
| 4 | Venta a crédito |
| 5 | Bonos o certificados de regalo |
| 6 | Permuta |
| 7 | Nota de crédito |
| 8 | Otras 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"
}
}
| Campo | Requerido | Descripción |
|---|---|---|
RNCEmisor | Sí | RNC o cédula del emisor |
RazonSocialEmisor | Sí | Razón social (máx. 150) |
DireccionEmisor | Sí | Dirección (máx. 100) |
FechaEmision | Sí | Fecha de emisión (DD-MM-AAAA) |
NombreComercial, Sucursal, Municipio, Provincia | No | Datos complementarios |
TablaTelefonoEmisor.TelefonoEmisor[] | No | Hasta 3 teléfonos, formato 809-555-1234 |
CorreoEmisor, WebSite, ActividadEconomica | No | Contacto |
CodigoVendedor, NumeroFacturaInterna, NumeroPedidoInterno | No | Referencias internas |
Comprador
Datos del cliente.
{
"Comprador": {
"RNCComprador": "101234567",
"RazonSocialComprador": "CLIENTE EJEMPLO SA",
"CorreoComprador": "compras@cliente.com.do",
"DireccionComprador": "Av. Winston Churchill #456, Santo Domingo"
}
}
| Campo | Requerido | Descripción |
|---|---|---|
RNCComprador | Según tipo | RNC o cédula. Obligatorio en 31 y 45 |
IdentificadorExtranjero | No | Identificación de compradores extranjeros (32, 33, 34, 44, 46, 47) |
RazonSocialComprador | Según tipo | Obligatorio en 31, 44, 45 y 46 |
ContactoComprador, CorreoComprador, DireccionComprador | No | Contacto |
FechaEntrega, DireccionEntrega, NumeroOrdenCompra, FechaOrdenCompra | No | Logística y orden de compra |
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
}
]
}
}
| Campo | Requerido | Descripción |
|---|---|---|
NumeroLinea | Sí | Número de línea, desde 1 |
IndicadorFacturacion | Sí | 0 No facturable, 1 ITBIS 18 %, 2 ITBIS 16 %, 3 ITBIS 0 %, 4 Exento |
NombreItem | Sí | Nombre del producto o servicio (máx. 80) |
IndicadorBienoServicio | Sí | 1 Bien, 2 Servicio |
CantidadItem | Sí | Cantidad (mayor que 0) |
PrecioUnitarioItem | Sí | Precio unitario (hasta 4 decimales) |
MontoItem | Sí | Monto de la línea: CantidadItem × PrecioUnitarioItem − DescuentoMonto + RecargoMonto |
DescripcionItem | No | Descripción ampliada (máx. 1000) |
UnidadMedida | No | Código de unidad de medida de la DGII |
DescuentoMonto, TablaSubDescuento | No | Descuento de la línea y su desglose |
RecargoMonto, TablaSubRecargo | No | Recargo de la línea y su desglose |
Retencion | No | IndicadorAgenteRetencionoPercepcion, 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
}
}
| Campo | Descripción |
|---|---|
MontoGravadoTotal | Suma de MontoGravadoI1 + MontoGravadoI2 + MontoGravadoI3 |
MontoGravadoI1 / I2 / I3 | Base gravada al 18 %, 16 % y 0 % |
MontoExento | Suma de líneas exentas (IndicadorFacturacion = 4) |
ITBIS1 / ITBIS2 / ITBIS3 | Tasa aplicada en cada grupo: 18, 16, 0 |
TotalITBIS1 / 2 / 3 | ITBIS calculado en cada grupo |
TotalITBIS | Suma de TotalITBIS1..3 |
MontoTotal | Obligatorio. MontoGravadoTotal + MontoExento + TotalITBIS + MontoImpuestoAdicional |
TotalITBISRetenido, TotalISRRetencion | Totales de retenciones |
MontoNoFacturable | Suma de líneas no facturables |
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
}
]
}
}
| Campo | Descripción |
|---|---|
TipoAjuste | D Descuento, R Recargo |
TipoValor | $ monto fijo, % porcentaje |
ValorDescuentooRecargo | Valor (monto o porcentaje según TipoValor) |
MontoDescuentooRecargo | Monto resultante en DOP |
IndicadorFacturacionDescuentooRecargo | Grupo 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ódigo | CodigoModificacion |
|---|---|
| 1 | Anula el NCF modificado |
| 2 | Corrige texto del comprobante fiscal modificado |
| 3 | Corrige montos del NCF modificado |
| 4 | Reemplazo de NCF emitido en contingencia |
| 5 | Referencia a Factura de Consumo Electrónica |
Campos según el tipo de comprobante
| Tipo | FechaVencimientoSecuencia | Comprador | InformacionReferencia |
|---|---|---|---|
| 31 | Obligatoria | Obligatorio con RNC y razón social | Opcional |
| 32 | No aplica | Opcional según monto | Opcional |
| 33 | Obligatoria | Opcional | Obligatoria |
| 34 | No aplica | Opcional | Obligatoria |
| 41 | Obligatoria | Ver XSD del tipo 41 | Opcional |
| 43 | Obligatoria | No aplica | Opcional |
| 44 | Obligatoria | Obligatorio (razón social) | Opcional |
| 45 | Obligatoria | Obligatorio con RNC y razón social | Opcional |
| 46 | Obligatoria | Obligatorio (razón social), admite extranjero | Opcional |
| 47 | Obligatoria | Opcional, beneficiario extranjero | Opcional |
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.
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.