ReteIVA y ReteICA en Factura Electrónica Colombia: Campos Obligatorios en el XML DIAN
Cómo implementar correctamente reteIVA (TaxScheme ID 04) y reteICA (TaxScheme ID 07) en la factura electrónica colombiana: bases, tarifas, municipios y validación DIAN.

Ing. Carlos Méndez | Septiembre 2026
Ing. Carlos Méndez es arquitecto de software con más de 10 años integrando sistemas fiscales en América Latina. Ha liderado implementaciones de facturación electrónica en Colombia, México y Centroamérica para ISVs de mediana y gran escala.
La reteIVA y la reteICA son las dos retenciones que más confusión generan en los equipos de desarrollo colombianos. La reteIVA se aplica sobre el IVA, no sobre la base gravable. La reteICA se aplica según el municipio donde se origina la actividad. Las dos tienen bases de cálculo distintas entre sí y distintas a la de la retención en la fuente (reteRenta). Confundir estas bases genera errores matemáticos que la DIAN detecta y rechaza en tiempo real.
Este artículo explica en detalle la lógica de cálculo, el mapeo XML correcto y los casos especiales para reteIVA (TaxScheme ID 04) y reteICA (TaxScheme ID 07) en la factura electrónica colombiana, incluyendo cómo manejar múltiples municipios en un mismo documento.
ReteIVA: retención sobre el impuesto, no sobre el precio
La reteIVA (retención de IVA) aplica cuando el comprador es un gran contribuyente designado por la DIAN, una entidad del Estado, o una persona marcada en el RUT con la responsabilidad 15 (agente retenedor de IVA). La tarifa estándar es del 15% sobre el valor del IVA del documento, no sobre la base gravable. Este detalle es crítico: si la factura tiene un valor neto de $1.000.000 con IVA del 19% ($190.000), la reteIVA sería el 15% de $190.000, es decir, $28.500. Aplicar el 15% sobre $1.000.000 en lugar de sobre $190.000 produce un monto incorrecto y rechazo DIAN.
Existen casos donde la tarifa de reteIVA es diferente al 15%. Cuando el vendedor es un productor con tarifa diferencial de IVA (5%), la reteIVA puede ser del 100% del IVA (el comprador retiene todo el IVA). Algunos sectores con tratamientos especiales definidos en el Estatuto Tributario también tienen tarifas diferentes. El ISV debe implementar la lógica de selección de tarifa de reteIVA basada tanto en el perfil del comprador como en la tarifa de IVA aplicada a cada ítem del documento.
ReteICA: impuesto municipal con tarifa variable por actividad
El ICA es un impuesto territorial: lo administra cada municipio y la tarifa varía según el municipio y la actividad económica. La reteICA aplica cuando el comprador está designado como agente retenedor de ICA en el municipio donde se desarrolla la actividad comercial. A diferencia de la reteRenta y la reteIVA (que tienen tarifas nacionales), la reteICA tiene tarifas locales que el ISV debe configurar municipio a municipio. Las tarifas más comunes en los principales centros comerciales son: Bogotá entre 4 y 11.04 por mil, Medellín entre 2 y 10 por mil, Cali entre 4 y 10 por mil, Barranquilla entre 3 y 10 por mil.
La base de reteICA es el valor neto de los bienes o servicios, la misma base que para reteRenta (valor sin IVA). La diferencia clave es la tarifa y que se expresa en porciones por mil, no en porcentaje. En el XML, el campo cbc:Percent debe expresarse como porcentaje equivalente: si la tarifa es 6.9 por mil, el campo Percent debe ser '0.69' (que equivale a 0.69% = 6.9/1000). Algunos equipos de desarrollo confunden la expresión por mil con el porcentaje y envian valores 10 veces mayores.
Estructura XML: WithholdingTaxTotal para reteIVA (ID 04)
El bloque WithholdingTaxTotal para reteIVA tiene la misma estructura que para reteRenta, con dos diferencias clave: el TaxScheme/ID es '04' (no '06') y el TaxScheme/Name es 'RETEIVA'. La TaxableAmount en el TaxSubtotal es el valor del IVA del documento (no la base gravable). Esto significa que para calcular correctamente el cbc:TaxableAmount de reteIVA, el sistema debe primero calcular el total de IVA del TaxTotal con ID 01, y usar ese valor como base del bloque de reteIVA.
Si la factura tiene líneas con diferentes tarifas de IVA (19% y 5% por ejemplo), la base de reteIVA se calcula por separado para cada tarifa. Esto puede generar dos bloques WithholdingTaxTotal con ID 04 pero con bases y montos diferentes, uno para el IVA al 19% y otro para el IVA al 5%. La DIAN acepta múltiples bloques del mismo TaxScheme ID siempre que cada uno sea consistente internamente.
Estructura XML: WithholdingTaxTotal para reteICA (ID 07)
Para reteICA el TaxScheme/ID es '07' y el Name es 'RETEICA'. La TaxableAmount es el valor neto antes de IVA (igual que reteRenta). El campo cbc:Percent expresa la tarifa municipal como porcentaje decimal: 6.9 por mil = '0.69'. La DIAN verifica que TaxableAmount * (Percent/100) = TaxAmount con tolerancia de ±1 peso. Si el municipio tiene una tarifa de 11.04 por mil, el Percent debería ser '1.104'.
Cuando una factura cubre actividades en múltiples municipios con tarifas de ICA diferentes, cada municipio requiere su propio bloque WithholdingTaxTotal con ID 07. La DIAN permite múltiples bloques del mismo TaxScheme ID. El campo opcional cbc:TaxExemptionReasonCode se puede usar para identificar el municipio, aunque no es obligatorio. La práctica más común es documentar el municipio en los campos de descripción o en metadatos adicionales del sistema.
Los tres blques juntos: orden y consistencia con PayableAmount
Cuando la factura incluye reteRenta (ID 06), reteIVA (ID 04) y reteICA (ID 07) simultáneamente, el XML tendrá al menos tres bloques WithholdingTaxTotal. El orden no está prescrito por el estándar, pero por consistencia con los validadores DIAN es preferible ir de ID menor a mayor: primero el 04, luego el 06, luego el 07. El PayableAmount en LegalMonetaryTotal debe descontar la suma de TODOS los TaxAmount de los tres bloques. Un error en el cálculo acumulado del PayableAmount produce rechazo global del documento, aunque cada bloque individual sea correcto.
Ejemplo numérico: factura de servicios de $2.000.000 neto + IVA 19% ($380.000) = $2.380.000 total con IVA. Comprador es gran contribuyente y agente retenedor. ReteRenta 4%: base $2.000.000, monto $80.000. ReteIVA 15% sobre IVA: base $380.000, monto $57.000. ReteICA 6.9/mil: base $2.000.000, monto $13.800. Total retenciones: $150.800. PayableAmount: $2.380.000 - $150.800 = $2.229.200. TaxInclusiveAmount permanece en $2.380.000.
Cuándo NO aplica reteIVA y cuándo no aplica reteICA
ReteIVA no aplica cuando: el emisor pertenece al régimen SIMPLE (no cobra IVA), la transacción está exenta de IVA, el comprador no está designado como agente retenedor de IVA, o la factura es de exportación (IVA en exportaciones es 0%). ReteICA no aplica cuando: el comprador no es agente retenedor municipal en el municipio correspondiente, la actividad está exenta de ICA en ese municipio (zonas francas, actividades específicas), o cuando el emisor ya paga ICA directamente como contribuyente en ese municipio y el comprador no tiene la designación de agente retenedor.
Preguntas frecuentes sobre reteIVA y reteICA
¿Cuál es la diferencia entre la base gravable de reteIVA y la de reteRenta?
La base de reteRenta es el valor neto del bien o servicio antes de IVA (LineExtensionAmount). La base de reteIVA es el monto del IVA calculado sobre esa base (el valor que aparece en el TaxTotal con ID 01). Son bases completamente distintas: en una factura de $1.000.000 neto con IVA 19%, reteRenta se calcula sobre $1.000.000 y reteIVA se calcula sobre $190.000. Confundir las bases duplica o reduce el monto de reteIVA y produce rechazo DIAN.
¿Cómo puedo obtener la tarifa de reteICA para cada municipio donde opera mi cliente?
Las tarifas de ICA y reteICA las publica cada municipio en sus acuerdos municipales y códigos de rentas. No existe un repositorio centralizado nacional. Para ISVs que operan en múltiples ciudades, la solución práctica es construir una tabla de tarifas por municipio y código de actividad económica (CIIU), actualizable por configuración. Algunos gremios empresariales y firmas de consultoría publican compilados actualizados anualmente.
¿Qué diferencia hay entre tener dos bloques WithholdingTaxTotal con ID 07 y uno solo con la suma?
Para operaciones en un solo municipio, lo correcto es un solo bloque ID 07. Para operaciones en dos municipios con tarifas distintas, los dos enfoques (dos bloques vs. un bloque con suma) son técnicamente aceptables por la DIAN en términos de validación matemática. Sin embargo, usar dos bloques separados es preferible porque preserva la trazabilidad por municipio en los registros contables del comprador. Un solo bloque con la suma total hace imposible identificar la distribución municipal en auditorías posteriores.
¿Es posible que una factura tenga reteIVA pero no reteRenta?
Sí. Las retenciones son independientes entre sí. Un comprador puede ser agente retenedor de IVA pero no de renta (aunque es poco frecuente). También puede darse el caso inverso: agente retenedor de renta pero no de IVA. Cada tipo de retención tiene su propia designación en el RUT. El ISV debe consultar qué responsabilidades tiene el comprador (códigos 06, 09, 15 en el RUT) para determinar qué retenciones incluir en cada factura.
Sobre el autor
Ing. Carlos Méndez es arquitecto de software con más de 10 años integrando sistemas fiscales en América Latina. Ha liderado implementaciones de facturación electrónica en Colombia, México y Centroamérica para ISVs de mediana y gran escala.
Artículos Relacionados
Errores de Retenciones en DIAN: Códigos, Causas y Solución para Equipos de Desarrollo
Los 9 errores más frecuentes al declarar retenciones (reteRenta, reteIVA, reteICA) en factura electrónica DIAN: códigos de rechazo, causa raíz y acción correctiva.
Agente de Retención en Colombia: Obligaciones Técnicas para API de Facturación Electrónica
Qué es un agente de retención en Colombia, cómo identificarlo desde la API, qué impacto tiene en el XML UBL 2.1 y cómo diseñar el modelo de datos para soportar múltiples agentes retenedores.
Retención en la Fuente en Factura Electrónica Colombia: Campos XML y Reglas DIAN
Cómo declarar correctamente la retención en la fuente (TaxScheme ID 06) en el XML UBL 2.1 de la DIAN: base imponible, porcentajes por concepto y cálculo de PayableAmount.