Reglas transversales del e-CF (fórmulas, tolerancia y topes)¶
Extraídas del Formato Comprobante Fiscal Electrónico (e-CF) V1.0 y del Informe Técnico e-CF v1.0
usando el texto cacheado en resources/dgii/txt/. Es la parte que el agente
transversal de la auditoría no llegó a completar.
Fórmulas de los totalizadores¶
| Campo | Fórmula |
|---|---|
Monto Ítem (campo 39) |
Precio Unitario × Cantidad − Monto Descuento + Monto Recargo |
Total ITBIS Tasa N (campos 101-103) |
Monto Gravado ITBIS TasaN × Tasa ITBIS N |
Total ITBIS (campo 100) |
Total ITBIS Tasa1 + Total ITBIS Tasa2 + Total ITBIS Tasa3 |
Monto del Impuesto Adicional (campo 104) |
ISC Específico + ISC Ad Valorem + Otros Impuestos Adicionales |
Monto Total (campo 110) |
Monto Gravado Total + Monto Exento + Total ITBIS + Monto del Impuesto Adicional |
Monto Total con paginación |
Debe ser igual a la sumatoria de Monto Subtotal Página |
El ISC entra en la base imponible del ITBIS¶
"Si existen impuestos selectivos al consumo que formen parte de la base imponible del ITBIS, estos se sumarán al monto gravado antes de multiplicarlo por la tasa de ITBIS. Sólo forman parte de la base imponible del ITBIS los impuestos selectivos al consumo con códigos desde 006 hasta 039." — Formato e-CF, campo 101
Es decir, con ISC la fórmula del ITBIS por tasa es (Monto Gravado TasaN + ISC) × Tasa N.
✅ Implementado en UtilPdfClient::itbisLinea() / iscDeLinea(): el ISC de la línea (campos
isc_especifico e isc_advalorem, y los impuestos adicionales con códigos 006-039) se suma al monto
antes de aplicar la tasa. Cubierto por RiPayloadTest.
Regla de tolerancia (Informe Técnico §12)¶
"Se admite como regla de tolerancia para cada línea del Detalle una diferencia de ± 1 unidad del valor del precio por la cantidad de ítems. A su vez, se define una tolerancia global sobre el monto total del e-CF, que será equivalente al total de líneas del Detalle. Si la diferencia de los montos supera la tolerancia, el e-CF será aceptado condicional."
✅ Implementado tal cual en App\Http\Requests\Concerns\ValidatesEcfTotals
(tolerancia = max(1, número de líneas)).
Regla de redondeo (Informe Técnico §13)¶
Dos decimales en general, con excepciones expresas (nota al pie 19):
| Campo | Decimales |
|---|---|
Precio Unitario Ítem |
4 |
Precio Unitario Ítem Otra Moneda |
4 |
Tipo de Cambio |
4 |
Subcantidad |
3 |
| Todos los demás importes | 2 |
✅ Implementado con money4() / money3() en XmlBuilder y decimal:0,4 en los FormRequests.
Regla propia de la Nota de Crédito (tipo 34)¶
"Si se emite un e-CF tipo 34, el monto total deberá ser menor o igual al monto total del e-CF modificado. Si un e-CF es afectado por varias notas de crédito, la sumatoria de los montos de las notas de crédito deberá ser menor o igual al monto total del e-CF que se afecta." — Formato e-CF, campo 110, nota 30
✅ Implementado en Ecf34Request::validacionesDelTipo(). Se denormalizó documents.modified_e_ncf
para poder sumar las notas anteriores sin recorrer los payloads; las notas rechazadas se excluyen
(son nulas fiscalmente y no consumen saldo acreditable). Si el NCF modificado es de serie B/A/P o de
otro proveedor no está en nuestra base y la regla la hace valer la DGII. Cubierto por TopeNotaCreditoTest.
Corrección de texto (código de modificación 2)¶
Con el código 2 el Monto Ítem —y por tanto el Monto Total— debe ser cero: la nota no tiene
efecto económico (Formato e-CF, campo 39, nota c). ✅ Implementado y cubierto por tests.
Topes de repetición y longitudes¶
| Sección | Tope |
|---|---|
| Líneas de detalle | 1.000 (10.000 en el tipo 32 por debajo de RD$250.000) |
| Formas de pago | 7 |
| Impuestos adicionales (totales) | 20 |
| Impuestos adicionales (por línea) | 2 |
| Subtotales informativos | 20 |
| Descuentos/recargos globales | 20 |
| Sub descuentos / sub recargos por línea | 12 |
| Códigos de producto por línea | 5 |
| Páginas (sección Paginación) | 100 |
| Nombre del ítem | 80 caracteres |
| Descripción del ítem | 1.000 caracteres |
| Razón social | 150 caracteres |
| Descripción de descuento/recargo | 45 caracteres |
| Razón de modificación | 90 caracteres |
Estructura del e-NCF¶
E + tipo (2 dígitos) + secuencial (10 dígitos) = 13 caracteres. Se toma de los rangos
autorizados por la DGII, que vencen el 31 de diciembre del año siguiente al de su autorización.
El NCF Modificado de una nota puede ser de serie E (13), B (11) o A/P (19), porque puede
referirse a comprobantes anteriores a la facturación electrónica.