Ejemplo n.º 1
0
        private bool IsLimitValueMonth(IncomeTaxThreshold currentValueIncomeTaxThreshold, TaxCalculationContext context)
        {
            var currentIncomesSum = context.TotalIncomes + context.CurrentIncome;

            return(currentIncomesSum > currentValueIncomeTaxThreshold.ToAmount &&
                   context.TotalIncomes > currentValueIncomeTaxThreshold.FromAmount);
        }
Ejemplo n.º 2
0
        private decimal CalculateForBorderMonth(TaxCalculationContext context, IncomeTaxThreshold currentValueIncomeTaxThreshold, IncomeTaxThreshold nextThreshold)
        {
            decimal taxValue = (currentValueIncomeTaxThreshold.ToAmount - context.TotalIncomes) * currentValueIncomeTaxThreshold.Percentage;
            var     remainingValueForNextThreshold = ((context.TotalIncomes + context.CurrentIncome) - nextThreshold.FromAmount) * nextThreshold.Percentage;

            return(taxValue + remainingValueForNextThreshold);
        }
Ejemplo n.º 3
0
        public decimal Calculate(TaxCalculationContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            decimal taxValue = 0;
            List <IncomeTaxThreshold> incomeTaxThresholds = GetIncomeTaxThreshold();

            var currentValueIncomeTaxThreshold =
                GetCurrentValueIncomeTaxThreshold(context, incomeTaxThresholds);

            if (IsLimitValueMonth(currentValueIncomeTaxThreshold, context))
            {
                IncomeTaxThreshold nextThreshold = GetNextIncomeTaxThreshold(incomeTaxThresholds, currentValueIncomeTaxThreshold);
                taxValue = CalculateForBorderMonth(context, currentValueIncomeTaxThreshold, nextThreshold);
            }
            else
            {
                taxValue = CalculateForFullMonth(currentValueIncomeTaxThreshold, context);
            }

            return(Decimal.Round(taxValue, 2));
        }
Ejemplo n.º 4
0
 private IncomeTaxThreshold GetNextIncomeTaxThreshold(List <IncomeTaxThreshold> incomeTaxThresholds,
                                                      IncomeTaxThreshold currentTaxThreshold)
 {
     return(incomeTaxThresholds.FirstOrDefault(x => x.ThresholdNumber == (currentTaxThreshold.ThresholdNumber + 1)));
 }
Ejemplo n.º 5
0
 private decimal CalculateForFullMonth(IncomeTaxThreshold currentValueIncomeTaxThreshold, TaxCalculationContext context)
 {
     return(context.CurrentIncome * currentValueIncomeTaxThreshold.Percentage);
 }
Ejemplo n.º 6
0
        private decimal GetTaxPercentage()
        {
            IncomeTaxThreshold incomeTaxThreshold = _taxPercentagesService.GetLinearRate() ?? throw new DomainException("Tax percentages not found");

            return(incomeTaxThreshold.Percentage);
        }