Example #1
0
        /// <summary>
        /// Calculate income tax for given salary and tax table
        /// </summary>
        /// <param name="salary"></param>
        /// <param name="taxTable"></param>
        /// <returns></returns>
        public decimal CalculateIncomeTax(decimal salary, ITaxTable taxTable)
        {
            var taxBracket = taxTable.GetTaxBracket(salary);

            if (taxBracket == null)
            {
                throw new TaxBracketNotFoundException(salary);
            }

            return(Math.Round(
                       (taxBracket.MandatoryTax + (salary - taxBracket.Minimum - 1) * (taxBracket.Rate / 100)) / 12
                       , 0
                       , MidpointRounding.AwayFromZero
                       ));
        }
Example #2
0
        /// <summary>
        /// Combine salary calculations and produce a Payslip for an Employee
        /// </summary>
        /// <param name="employee"></param>
        public string GeneratePayslip(EmployeeDetail employee)
        {
            var employeeName = $"{employee.FirstName} {employee.LastName}";
            var taxBracket   = _taxTable.GetTaxBracket(employee.Salary);
            var incomeTax    = _payCalculator.CalculateIncomeTax(employee.Salary, taxBracket);
            var grossIncome  = _payCalculator.CalculateGrossIncome(employee.Salary);
            var netIncome    = _payCalculator.CalculateNetIncome(grossIncome, incomeTax);
            var super        = _payCalculator.CalculateSuper(grossIncome, employee.SuperRate);
            var payPeriod    = employee.PayPeriod;

            //  Name, payPeriod, grossIncome, incomeTax, netIncome, super
            var payslip = $"{employeeName}, {payPeriod}, {grossIncome}, {incomeTax}, {netIncome}, {super}";

            return(payslip);
        }