Au Tax Chart

by paulftw

HTML

<div ng-app ng-controller=TaxCtrl>
    <input type=text ng-model='income'></input>
    
    <span>Tax: {{ tax_for(income) | currency}} or 
        {{ tax_for(income) / parseFloat(income) * 100 | number:1}}%
    </span>
</div>

JavaScript

function TaxCtrl($scope) {
    // source: http://www.ato.gov.au/content/12333.htm
    var medicare = 0.015;
    $scope.up_to = [
        {
            cap: 18200,
            rate: 0,
            start: 0
        },
        {
            cap: 37000,
            rate: 0.19,
            start: 0
        },
        {
            cap: 80000,
            rate: 0.325,
            start: 3572
        },
        {
            cap: 180000,
            rate: 0.37,
            start: 17547
        },
        {
            cap: 1e100,
            rate: 0.45,
            start: 54547
        }
    ];
    $scope.parseFloat = parseFloat;
    $scope.tax_for = function(income) {
        income = parseFloat(income);
        console.log('get tax for ', income);
        for (var i = 0; i < $scope.up_to.length; i++) {
            var prev_cap = i ? $scope.up_to[i - 1].cap : 0;
            var bracket = $scope.up_to[i];
            if (bracket.cap >= income) {
                return bracket.start +
                    bracket.rate * (income - prev_cap);
            }
        }
        return 'Runtime Error';
    };
};