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