Fórmulas para el IVA

Hoy acaba de subir el IVA, así que para refrescar un poco nuestras matemáticas básicas, vamos a ver que operaciones podemos hacer con él. El lenguaje de programación es Groovy, pero con algunos cambios es compatible en Java.

Obtener el IVA de un producto

public static BigDecimal calcIva(BigDecimal p, BigDecimal IVA)   { return p * (IVA/100) }

assert calcIva(100, 21) == 21

Obtener el precio con IVA de un producto que no tiene IVA

public static BigDecimal sumaIva(BigDecimal p, BigDecimal IVA)   { return p * (1+(IVA/100)) }

assert sumaIva(100, 21) == 121

Dado el precio con IVA de un producto, averiguar su valor sin IVA

public static BigDecimal quitaIva(BigDecimal p, BigDecimal IVA)  { return p / (1+(IVA/100))  }

assert quitaIva(121, 21) == 100

Obtener solo el IVA de un producto con IVA

public static BigDecimal extraeIva(BigDecimal p, BigDecimal IVA) { return p / (1+(100/IVA))  }

assert extraeIva(121, 21) == 21

Supongamos, que es mucho suponer, que sube el IVA del 18% al 21%. Y que el comercio decide “asumir” esta subida, bajando el importe del producto para que, al aplicar el nuevo IVA, tenga el mismo precio final.

public static BigDecimal asumeIva(BigDecimal p, BigDecimal IVA, BigDecimal IVA_NUEVO) { 
    return quitaIva(sumaIva(p, IVA), IVA_NUEVO)
}

println asumeIva(100, 18, 21) // devuelve 97.520661157

Es decir, que si antes nuestro producto de 100€ lo vendíamos por 118€ con IVA al 18%, ahora para seguir vendiéndolo a 118€ pero con el IVA al 21% debemos rebajar la base imponible a 97.52€

El uso de BigDecimal en las operaciones no es fortuito. En otro post un poco más avanzado (este ha sido muy básico) explicaremos como guardar y operar correctamente precios con decimales, donde se verá que los Float y Double no son precisamente la mejor opción, y BigDecimal es el único tipo que nos ofrece seguridad a la hora de hacer operaciones matemáticas con importes.

One thought on “Fórmulas para el IVA

Comments are closed.