JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://github.com/jquery/qunit/raw/master/qunit/qunit.js"></script>
<link rel="stylesheet" href="https://raw.github.com/jquery/qunit/master/qunit/qunit.css">
<ol id="qunit-tests"></ol>

JavaScript

function TaxCalculator(calcScheme)
{
    return function(sum){
        var totalTaxes = 0.0;
        var prevBound = 0.0;
        var calc = {
            upTo : function(upToSum, pct){
                var range = upToSum - prevBound;
                prevBound = upToSum;
                
                if(sum >= range)
                {
                    totalTaxes += range * (pct / 100.0);
                    sum -= range;
                } else
                {
                    totalTaxes += sum * (pct / 100.0);
                    sum = 0;
                }
            }, 
            rest : function(pct){
                totalTaxes += sum * (pct / 100.0);
            }
        };
        
        calcScheme(calc);
        alert(totalTaxes)
        return totalTaxes;
    };
}

function calcScheme(c)
{
    c.upTo(5070, 10);
    c.upTo(8660, 14);
    c.upTo(14070, 23);
    c.upTo(21240, 30);
    c.upTo(40230, 33);    
    c.rest(45);
}


function calc(sum)
{
    var c = TaxCalculator(calcScheme);
    return c(sum);
}

test("5000", function() {
      alert('test');
      equal(calc(5000), 500);
});
test("5800", function() {
      equal(calc(5800), 609.2);
});
test("9000", function() {
      equal(calc(9000), 1087.8);
});
test("15000", function() {
      equal(calc(15000), 2532.9);
});
test("5000", function() {
      equal(calc(50000), 15068.1);
});