/// <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 )); }
/// <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); }