Conforme al Art. 21°, de la Ley N° 18.267:
a contar del 1° de enero de 1984, las personas naturales, instituciones bancarias, de previsión social y en general todo otro servicio, institución o empresa, pública o privada, eliminarán de su contabilidad las fracciones de la unidad monetaria. Con tal objeto, se despreciarán las fracciones inferiores a cincuenta centavos de peso y se elevarán al entero superior las de cincuenta centavos o más.
Por lo tanto, la forma correcta de calcular el IVA a partir del monto neto, es redondear el valor del IVA.
Por ejemplo, el IVA del monto neto $33.655 es $6.394 (no $6.395).
En caso de no aplicar correctamente este criterio, los documentos y libros serán aceptados por el SII, pero generarán un reparo leve que será informado al contribuyente con la observación “LBR – 2 – Reparo en Calculo de – [MntIVA] distinto a [MntNeto]*[TasaImp]“.
Calcular el Monto Neto a partir del Monto Total puede parecer algo muy sencillo, sin embargo, no lo es. De hecho, para algunos montos totales como $103, $110, $116, etc. no existe un monto neto al que se le pueda sumar el IVA calculado por medio del Art. 21° de la Ley.
Cuando se emite un documento con SuperFactura, es posible simplemente omitir el tag MntNeto para que SuperFactura realice el cálculo automáticamente. De todas maneras, acá presentamos pseudo-código para explicar como se puede realizar este cálculo:
/**
* Obtiene neto del total, procurando que neto + iva (redondeado) = total
* OBS: Hay valores para $total para los cuales no existirá un neto tal que:
* neto + iva = total, donde iva = round(neto) * 0.19
* Por ejemplo: total = 103, 110, 116, 122, 128, 135, 141, 147, 153, 160, 166,172, 178, 185, 191, 197, 204, 210,...
*/
function GetNetoFromTotal($total, $allowFloat = false) {
if($allowFloat) {
$neto = $total / 1.19;
} else {
$neto = floor($total / 1.19); // Intentaremos tanteando con el neto menor (floor($x) < round($x))
$ivaDelNeto = round($neto * 0.19); // IVA calculado correctamente (con round)
if($neto + $ivaDelNeto > $total) {
// No cuadra => arreglar neto para cuadrar
$neto--;
}
}
return $neto;
}