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
- El neto de cada línea es cantidad × precio unitario, redondeado a centavos, menos su descuento.
- El ICE y el IRBPNR de cada línea se calculan y redondean una vez por línea.
- 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.
- El IVA se calcula por tarifa: la suma de las bases de esa tarifa × la tarifa, redondeada una sola vez.
- 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
rate | Tarifa | Cuándo |
|---|---|---|
iva_15 | 15 % | La tarifa general |
iva_5 | 5 % | Materiales de construcción de la lista del SRI; la línea exige su código en auxiliary_code |
iva_0 | 0 % | Bienes y servicios gravados con tarifa 0 % |
no_objeto | No objeto de IVA | Lo que no está sujeto al impuesto |
exento | Exento de IVA | Lo 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:
ratees 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 enbase. - Específico:
unit_amountson 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.