Montos e impuestos

Cómo calculamos totales e IVA para que cuadren exactamente con lo que el SRI revisa.

El SRI revisa que los números de tu comprobante cuadren entre sí: el IVA de cada línea con el de cada tarifa, las tarifas con el total. Un centavo de diferencia es un comprobante devuelto (código 52, error en diferencias). Por eso calculamos todo nosotros, una sola vez, y el XML, el RIDE y la respuesta de la API leen ese mismo resultado.

Las reglas

  1. El neto de cada línea es cantidad × precio unitario, redondeado a centavos, menos su descuento.
  2. El ICE y el IRBPNR de cada línea se calculan y redondean una vez por línea.
  3. La base del IVA de una línea es su neto más su ICE: el ICE forma parte de la base del IVA. El IRBPNR no.
  4. El IVA se calcula por tarifa: la suma de las bases de esa tarifa × la tarifa, redondeada una sola vez.
  5. Ese IVA se reparte entre las líneas de la tarifa por residuo mayor: el IVA de las líneas suma exactamente el de la tarifa, y cada línea queda a menos de un centavo de su parte exacta.

Redondeamos al centavo, y la mitad se aleja de cero: 1.275 da 1.28.

Por qué así

Si redondearas el IVA de cada línea y lo sumaras, una factura con muchas líneas pequeñas podría quedar varios centavos lejos de base × tarifa, y el SRI la devolvería. Redondeando una vez por tarifa, cualquier forma en que el SRI revise los números da lo mismo.

Las tarifas de IVA

rateTarifaCuándo
iva_1515 %La tarifa general
iva_55 %Materiales de construcción de la lista del SRI; la línea exige su código en auxiliary_code
iva_00 %Bienes y servicios gravados con tarifa 0 %
no_objetoNo objeto de IVALo que no está sujeto al impuesto
exentoExento de IVALo que la ley exime

Cada línea lleva exactamente un IVA, y además puede llevar un ICE y un IRBPNR. La liquidación de compra solo admite IVA.

ICE

El ICE (Impuesto a los Consumos Especiales) va en la misma lista, con el código de la tabla 18 del SRI. Sus tarifas cambian con la ley, así que tú indicas la tarifa y nosotros calculamos el valor:

{ "type": "ice", "code": "3684", "rate": "5" }
  • Ad valorem: rate es un porcentaje de la base. La base es el neto de la línea, salvo que la ley fije otra (por ejemplo, el precio de venta al público sugerido); entonces envíala en base.
  • Específico: unit_amount son dólares por unidad de la cantidad de la línea, como las fundas plásticas:
{
  "code": "ICE-FPN-01",
  "description": "Funda/bolsa plástica",
  "quantity": "10",
  "unit_price": "0",
  "taxes": [
    { "type": "iva", "rate": "iva_15" },
    { "type": "ice", "code": "3680", "unit_amount": "0.04" }
  ]
}
  • Mixto: envía ambos. El valor es la suma, redondeada una vez.

Una camioneta de USD 29.500 con ICE del 5 % paga 1.475,00 de ICE, y su IVA del 15 % se calcula sobre 30.975,00.

IRBPNR

El impuesto redimible a las botellas plásticas no retornables es de dos centavos por botella. Por defecto contamos la cantidad de la línea; si la línea es un paquete, indica las botellas:

{ "type": "irbpnr", "bottles": 12 }

Subsidios

Si vendes un bien subsidiado, envía en la línea su unsubsidized_price, el precio que tendría sin el subsidio. Calculamos el subsidy del comprobante, y el RIDE muestra el valor sin subsidio y el ahorro, como pide el SRI.

Los montos son texto

Envía y recibe los montos como texto: "189.00", no 189. Los números JSON se convierten a coma flotante en casi todos los lenguajes, donde 0.1 + 0.2 no da 0.3. Con texto, lo que envías es exactamente lo que calculamos.

En esta página