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