Campos comunes del JSON¶
Referencia de los nodos que comparten todos los tipos de e-CF. Las particularidades de cada tipo (qué es obligatorio, qué no aplica) están en su página: 31 · 32 · 33 · 34.
Leyenda de obligatoriedad
| Símbolo | Significado |
|---|---|
| ● | Obligatorio siempre |
| ◐ | Condicional (obligatorio si se cumple la condición indicada) |
| ○ | Opcional |
| — | No aplica a ese tipo |
Recuerde: el emisor y el e-NCF no se envían (salen del token y de sus secuencias autorizadas).
comprador — datos del cliente¶
| Campo | Tipo | 31 | 32 | 33 | 34 | Reglas |
|---|---|---|---|---|---|---|
rnc |
string(9|11) | ● | ◐ | ○ | ○ | Sólo dígitos: 9 (RNC) u 11 (cédula). En el 32 es obligatorio si el monto total ≥ RD$250.000. |
razon_social |
string(150) | ● | ◐ | ○ | ○ | Como consta en el RNC. Misma condición que arriba en el 32. |
identificador_extranjero |
string(20) | ○ | ○ | ○ | ○ | Para compradores sin RNC dominicano. Se usa en lugar del rnc. |
correo |
string(80) | ○ | ○ | ○ | ○ | Email válido. |
direccion |
string(100) | ○ | ○ | ○ | ○ | |
municipio |
string(6) | ○ | ○ | ○ | ○ | Código del catálogo de provincias/municipios. |
provincia |
string(6) | ○ | ○ | ○ | ○ | Código del catálogo. |
id_doc — identificación del documento¶
| Campo | Tipo | 31 | 32 | 33 | 34 | Reglas |
|---|---|---|---|---|---|---|
tipo_ingresos |
string(2) | ● | ● | ● | ● | Catálogo: 01…06. |
tipo_pago |
string(1) | ● | ● | ● | ● | 1 Contado, 2 Crédito, 3 Gratuito. |
fecha_limite_pago |
fecha | ◐ | ◐ | ◐ | ◐ | Formato dd-MM-aaaa. Corresponde cuando tipo_pago = 2. |
termino_pago |
string(15) | ○ | ○ | — | — | Texto libre (p. ej. 30 días). |
formas_pago[] |
array (máx. 7) | ○ | ○ | ○ | — | El 34 no lleva formas de pago. |
formas_pago[].forma |
string(1) | ● | ● | ● | — | Catálogo. La 5 (bonos) sólo en el 32. |
formas_pago[].monto |
decimal(18,2) | ● | ● | ● | — | ≥ 0. |
indicador_monto_gravado |
int | ○ | ○ | ○ | ○ | 0 el monto no incluye ITBIS, 1 sí lo incluye. |
indicador_envio_diferido |
int | ○ | ○ | — | ○ | Sólo 1. |
indicador_servicio_todo_incluido |
int | ○ | ○ | — | ○ | Sólo 1. |
indicador_nota_credito |
int | — | — | — | ● | 0 NC dentro de 30 días, 1 fuera de 30 días. |
fecha_desde / fecha_hasta |
fecha | ○ | ○ | — | ○ | Período facturado. |
items[] — detalle de bienes o servicios¶
Entre 1 y 1.000 líneas (10.000 en el tipo 32 por debajo de RD$250.000).
| Campo | Tipo | Oblig. | Reglas |
|---|---|---|---|
nombre |
string(80) | ● | Nombre del ítem. Es lo que se imprime como Descripción en la representación impresa. |
descripcion |
string(1000) | ○ | Descripción ampliada (no se imprime en la RI). |
cantidad |
decimal(18,2) | ● | Mayor que 0. 2 decimales (CantidadItem en el XSD). |
unidad_medida |
string | ○ | Catálogo (código numérico como string). |
precio_unitario |
decimal(16,4) | ● | Admite hasta 4 decimales (excepción de la norma). |
monto |
decimal(18,2) | ● | precio_unitario × cantidad − descuento_monto + recargo_monto. |
indicador_facturacion |
int | ● | Ver tabla: 1,2,3 gravado; 4 exento; 0 no facturable. |
indicador_bien_servicio |
string(1) | ● | 1 Bien, 2 Servicio. |
descuento_monto |
decimal(18,2) | ○ | Descuento de esta línea (ya reflejado en monto). |
recargo_monto |
decimal(18,2) | ○ | Recargo de esta línea (ya reflejado en monto). |
codigos[] |
array (máx. 5) | ○ | Códigos del producto: { "tipo": "...", "codigo": "..." }. |
impuestos_adicionales[] |
array (máx. 2) | ○ | { "tipo": "006" } — catálogo de impuestos. A nivel de ítem sólo va el código; su importe se declara en totales.impuestos_adicionales[]. |
fecha_elaboracion |
dd-mm-aaaa |
○ | Fecha de elaboración del producto. |
fecha_vencimiento |
dd-mm-aaaa |
○ | Fecha de vencimiento del producto. |
Cuidado con
monto: ya incluye el descuento y el recargo de la línea. No los reste otra vez.
Campos de referencia — ISC de alcoholes, cervezas y tabaco¶
Sólo aplican a los tipos 31, 32, 33, 34 y 45, y sólo cuando el ítem lleva un impuesto adicional
con código 006–039 (ISC). La norma los usa para calcular el impuesto, y es tajante: "si
existen estos códigos y el campo no viene, se rechaza la factura".
| Campo | Tipo | Oblig. | Reglas |
|---|---|---|---|
cantidad_referencia |
decimal(18,2) | ◐ | Obligatorio con códigos 006–022. Contenido del envase (p. ej. 0.75 litros). |
unidad_referencia |
string | ○ | Catálogo de unidades. |
subcantidades[] |
array (máx. 5) | ○ | { "subcantidad": 0.125, "codigo": "43" }. subcantidad admite 3 decimales (excepción de la norma). |
grados_alcohol |
decimal(5,2) | ◐ | Obligatorio con códigos 006–018. Mayor que 0 (p. ej. 37.50). |
precio_unitario_referencia |
decimal(18,2) | ○ | Precio de lista del envase de referencia. Mayor que 0. |
Qué se vuelve obligatorio, según el código del impuesto adicional del ítem:
| Códigos | Exige | Fórmula que aplica la norma |
|---|---|---|
006–018 (alcoholes, cervezas) |
cantidad_referencia + grados_alcohol |
cantidad de referencia × grados de alcohol × tasa × subcantidad × cantidad |
019–022 |
cantidad_referencia |
cantidad × cantidad de referencia × tasa |
023–039 (tabaco y otros) |
cantidad_referencia; y precio_unitario_referencia si declara isc_advalorem |
ad valorem = (precio unitario de referencia ÷ (1+ITBIS) − ISC específico unitario) ÷ (1+tasa) × cantidad × cantidad de referencia × tasa |
006–039 (todos) |
isc_especifico en totales.impuestos_adicionales[] para ese código |
— |
Excepción del granel. Si la
unidad_medidadel ítem es18(a granel), no se exige nada de lo anterior porque la norma exceptúa ese caso del cálculo del ISC específico. Ojo: para los códigos023–039la norma sí describe un cálculo alternativo del ad valorem en granel (incrementar un 30 % el precio unitario del ítem); ese importe sigue siendo suyo de declarar.El importe lo calcula usted, no nosotros. La tasa del ISC específico "varía trimestralmente por ajustes de inflación" y debe corresponder al período de la fecha de emisión. Nosotros validamos que venga y que traiga sus campos de referencia; el cálculo es del emisor.
Ejemplo de una línea de ron:
{
"nombre": "Ron añejo 5 años",
"cantidad": 12, "unidad_medida": "43",
"cantidad_referencia": 0.75, "unidad_referencia": "43",
"subcantidades": [{ "subcantidad": 0.125, "codigo": "43" }],
"grados_alcohol": 37.50, "precio_unitario_referencia": 450.00,
"precio_unitario": 1000.00, "monto": 12000.00,
"indicador_facturacion": 1, "indicador_bien_servicio": "1",
"impuestos_adicionales": [{ "tipo": "006" }]
}
totales — totalizadores¶
Validamos la cuadratura antes de enviar a la DGII (con la tolerancia de ±1 por línea que admite la
norma). Si no cuadra, recibe 422 y no se consume su e-NCF.
Los totales que debe enviar los decide su detalle. La norma los marca como condicionales: si hay ítems con
indicador_facturacion1, son obligatoriosmonto_gravado_i1,itbis1ytotal_itbis1; con 2 y 3, sus equivalentes; con 4,monto_exento; y con 0,monto_no_facturable. Faltando, la DGII puede dejar el e-CF en Aceptado Condicional.
| Campo | Tipo | Oblig. | Reglas |
|---|---|---|---|
monto_gravado_total |
decimal(18,2) | ◐ | Suma de los monto de las líneas con indicador 1, 2 o 3. |
monto_gravado_i1 / i2 / i3 |
decimal(18,2) | ◐ | Desglose por tasa (18 %, 16 %, 0 %). |
monto_exento |
decimal(18,2) | ◐ | Suma de los monto de las líneas con indicador 4. |
itbis1 / itbis2 / itbis3 |
int | ◐ | La tasa aplicada: 18, 16, 0. |
total_itbis |
decimal(18,2) | ◐ | ITBIS total. |
total_itbis1 / 2 / 3 |
decimal(18,2) | ◐ | ITBIS por tasa. |
monto_impuesto_adicional |
decimal(18,2) | ◐ | Suma de los impuestos adicionales. |
monto_no_facturable |
decimal(18,2) | ◐ | Suma de las líneas con indicador 0. No entra en monto_total. |
impuestos_adicionales[] |
array (máx. 20) | ○ | Ver abajo. |
monto_total |
decimal(18,2) | ● | = gravado + exento + total ITBIS + impuesto adicional. |
valor_pagar |
decimal(18,2) | ○ | Si difiere del total (anticipos, retenciones). |
total_itbis_retenido |
decimal(18,2) | ○ | Retención de ITBIS. |
total_isr_retencion |
decimal(18,2) | ○ | Retención de ISR. |
totales.impuestos_adicionales[]¶
Cada fila lleva el código y su importe en la clave que corresponda (no existe una clave monto):
{ "tipo": "002", "tasa": 2.00, "otros": 500.00 }
{ "tipo": "013", "tasa": 637.00, "isc_especifico": 1274.00, "isc_advalorem": 500.00 }
| Campo | Uso |
|---|---|
tipo |
Código del catálogo de impuestos. |
tasa |
Tasa o monto específico aplicado. |
isc_especifico |
Importe del ISC específico (códigos 006–039). |
isc_advalorem |
Importe del ISC ad valorem (códigos 006–039). |
otros |
Importe de los demás impuestos (001 propina, 002 CDT, 003–005). |
referencia — documento que se modifica¶
Obligatorio en las notas (33 y 34). Opcional en el 31 (códigos 4 y 5).
| Campo | Tipo | Reglas |
|---|---|---|
ncf_modificado |
string(11–19) | NCF del comprobante que se modifica. Serie E (13), B (11) o A/P (19). |
fecha_ncf_modificado |
fecha | dd-MM-aaaa. Obligatoria en 33 y 34. |
codigo_modificacion |
string(1) | Catálogo. En las notas sólo 1–4. |
razon_modificacion |
string(90) | Texto libre. |
rnc_otro_contribuyente |
string(9|11) | Si el documento modificado es de otro contribuyente. |
descuentos_recargos[] — globales (máx. 20)¶
Se aplican al comprobante completo, no a una línea.
| Campo | Tipo | Reglas |
|---|---|---|
numero_linea |
int | Secuencial desde 1. |
tipo_ajuste |
string(1) | D descuento, R recargo. |
descripcion |
string(45) | |
tipo_valor |
string(1) | % porcentaje o $ monto. |
valor |
decimal(3,2) | El porcentaje, si tipo_valor = %. |
monto |
decimal(18,2) | El importe. Obligatorio siempre, incluso si se expresó en %. |
otra_moneda — facturación en divisa¶
Si factura en moneda extranjera. La moneda local (DOP) no se declara.
| Campo | Tipo | Reglas |
|---|---|---|
tipo_moneda |
string(3) | Catálogo de monedas. |
tipo_cambio |
decimal(3,4) | Tasa del Banco Central. Admite 4 decimales. |
monto_gravado_total_otra_moneda |
decimal(18,2) | |
monto_exento_otra_moneda |
decimal(18,2) | |
total_itbis_otra_moneda |
decimal(18,2) | |
monto_total_otra_moneda |
decimal(18,2) |
paginacion[] — subtotales por página (máx. 1.000)¶
Sección condicional: sólo si su representación impresa se pagina y quiere que esos subtotales
viajen en el XML. Va acompañada de id_doc.total_paginas.
| Campo | Tipo | Oblig. | Reglas |
|---|---|---|---|
pagina_no |
int | ● | Número de página, desde 1. |
no_linea_desde / no_linea_hasta |
int | ● | Rango de líneas del detalle que entra en la página. |
subtotal_monto_gravado |
decimal(18,2) | ○ | Gravado de la página. |
subtotal_monto_gravado_1 / _2 / _3 |
decimal(18,2) | ○ | Gravado por tasa. |
subtotal_exento |
decimal(18,2) | ○ | Exento de la página. |
subtotal_itbis |
decimal(18,2) | ○ | ITBIS de la página. |
subtotal_itbis_1 / _2 / _3 |
decimal(18,2) | ○ | ITBIS por tasa. |
subtotal_impuesto_adicional |
decimal(18,2) | ○ | Impuestos adicionales de la página. Mayor que 0 (con 0 se rechaza: el XSD no lo admite). |
subtotal_isc_especifico |
decimal(18,2) | ○ | ISC específico de la página. Mayor que 0. |
subtotal_otros_impuestos |
decimal(18,2) | ○ | Otros impuestos de la página. Mayor que 0. |
monto_subtotal |
decimal(18,2) | ○ | Total de la página. |
subtotal_monto_no_facturable |
decimal(18,2) | ○ | No facturable de la página. |
subtotales[] — informativos (máx. 20)¶
Subtotales que no modifican los totalizadores; sólo se muestran. Cada uno lleva numero,
descripcion y los montos que quiera reflejar.
informacion_adicional¶
Nodo libre para datos de transporte, contacto o referencias del emisor, según el tipo.