JSFiddle - React, Tailwind, and code Playground

by Felipe Alfaro

HTML

<input type="number" oninput="calc(this)">

<h1 id="result"></h1>

JavaScript

const tiposEmpresa = {
	pequena: {
		grati: 1,
		cts: 0
	},
	medianaGrande: {
		grati: 2,
		cts: 1
	}
};

const tramosRentasImponibles = [
	{uitLimit: 7, cost: 0},
	{uitLimit: 5, cost: 0.08},
	{uitLimit: 15, cost: 0.14},
	{uitLimit: 15, cost: 0.17},
	{uitLimit: 10, cost: 0.2},
	{uitLimit: 9999, cost: 0.3}
];




// entrada
var empresa = tiposEmpresa.medianaGrande,
	uit = 4150,
	SM = 3500;
	
// calculo
var	sueldos = 12 + empresa.cts + empresa.grati,
	SA = SM * sueldos,
	tramosUIT = [],
	tramosUITDesc = [],
	SAFinal = SA;

for (var i = 0; i < tramosRentasImponibles.length; i++) {

	let montoTramo = uit * tramosRentasImponibles[i].uitLimit;
	
	if (SAFinal > montoTramo) {
		tramosUIT.push(montoTramo);
		SAFinal = SAFinal - montoTramo;
	}
	else if (SAFinal > 0) {
		tramosUIT.push(SAFinal);
		break;
	}

}

SAFinal = 0;

for (i in tramosUIT) {
	tramosUITDesc.push(tramosUIT[i] - (tramosUIT[i] * tramosRentasImponibles[i].cost));
	SAFinal += tramosUITDesc[i];
}

//console.log(SA, tramosUIT);
console.clear();
console.log(SA, tramosUIT, (SA / sueldos));
console.log(SAFinal, tramosUITDesc, (SAFinal / sueldos));