private static decimal?CalculateTaxableAmountWithinAnnualSalaryTaxBand( decimal annualSalary, AnnualSalaryTaxBand annualSalaryTaxBand) { if (annualSalary < annualSalaryTaxBand.StartOfRange) { return(null); } if (annualSalaryTaxBand.EndOfRange == null) { return(annualSalary - annualSalaryTaxBand.StartOfRange); } decimal endOfTaxableRange; if (annualSalary < annualSalaryTaxBand.EndOfRange) { endOfTaxableRange = annualSalary; } else { endOfTaxableRange = (decimal)annualSalaryTaxBand.EndOfRange; } return(endOfTaxableRange - annualSalaryTaxBand.StartOfRange); }
private static TaxPayableOnAnnualSalaryTaxBand CalculateTaxPayableForAnnualSalaryTaxBand( decimal annualSalary, AnnualSalaryTaxBand annualSalaryTaxBand) { var taxableAmount = CalculateTaxableAmountWithinAnnualSalaryTaxBand( annualSalary, annualSalaryTaxBand); if (taxableAmount.HasValue == false) { return(new TaxPayableOnAnnualSalaryTaxBand(annualSalaryTaxBand, 0m, 0m)); } var taxPayable = (decimal)taxableAmount * annualSalaryTaxBand.RateMultiplier; return(new TaxPayableOnAnnualSalaryTaxBand( annualSalaryTaxBand, (decimal)taxableAmount, taxPayable)); }