コード例 #1
0
        ///<inheritdoc/>
        public async Task <CalculateIrpfResult> CalculateIrpf(decimal revenue, decimal inssValue, byte dependentsNumber, DateTime?date, CancellationToken cancellationToken = default)
        {
            CalculateIrpfResult result = null;

            IrpfTax irpf = await _irpfRepository.GetActive(date, cancellationToken);

            if (irpf != null)
            {
                decimal dependentsDeductionAmount = (dependentsNumber * irpf.DeductionAmount);
                decimal calculationBasis          = (revenue - inssValue - dependentsDeductionAmount);

                IrpfTaxRange range = irpf
                                     .Range
                                     .OrderByDescending(o => o.EndValue)
                                     .FirstOrDefault(x => (calculationBasis >= x.StartValue && calculationBasis <= x.EndValue) || calculationBasis >= x.EndValue);

                if (range != null)
                {
                    result = new CalculateIrpfResult
                    {
                        CalculationBasis          = calculationBasis,
                        Rate                      = range.Rate,
                        DependentsDeductionAmount = dependentsDeductionAmount
                    };

                    result.Amount = Math.Round(((calculationBasis * (range.Rate / 100)) - range.DeductionAmount), 2);
                }
            }

            return(result);
        }
コード例 #2
0
        public async Task <IActionResult> CalculateIrpf
        (
            [FromServices] ILaborTaxesService service,
            [FromBody] CalculateIrpfRequest request,
            [FromQuery] DateTime?date,
            CancellationToken cancellationToken = default
        )
        {
            CalculateIrpfResult resp = await service.CalculateIrpf(request.Revenue, request.InssValue, request.DependentsNumber, date, cancellationToken);

            if (resp == null)
            {
                return(BadRequest(resp));
            }
            return(Ok(resp));
        }