Beispiel #1
0
        public async Task <ActionResult <TaxResponse> > GetBenefitTaxAsync([FromBody] BenefitTaxRequest request)
        {
            await RequestUtilites.ValidatebenfitTaxRequestAsync(_taxOfficeClient, request);

            var benefitTaxSummary = await _beneFitTaxService.CalculateNetCost(request);

            return(Ok(new TaxResponse(benefitTaxSummary.NetCost)));
        }
Beispiel #2
0
        private async Task <int> GetTaxTable(BenefitTaxRequest benefitTaxRequest)
        {
            if (benefitTaxRequest.ChurchMember == true && !string.IsNullOrEmpty(benefitTaxRequest.Congregation))
            {
                return(await _taxOfficeClient.GetChurchMemberTaxTable(benefitTaxRequest.Municipality, benefitTaxRequest.ChurchMember, benefitTaxRequest.Congregation));
            }

            return(await _taxOfficeClient.GetTaxTable(benefitTaxRequest.Municipality));
        }
Beispiel #3
0
        public async Task <TaxResponse> CalculateNetCost(BenefitTaxRequest benefitTaxRequest)
        {
            // Get Tax table
            var taxtable = await GetTaxTable(benefitTaxRequest);

            // Get income from and to
            var incomePairNoBenefit   = _taxCalculationService.GetIncomeInterval(benefitTaxRequest.Income);
            var incomePairWithBenefit = _taxCalculationService.GetIncomeInterval(benefitTaxRequest.Income + benefitTaxRequest.BenefitTax);

            // Calculate tax to deduct
            var taxToDeductNoBenefit = await _taxOfficeClient.GetTaxToDeduct(taxtable, "30B", incomePairNoBenefit.IncomeTop, benefitTaxRequest.IncomeYear, incomePairNoBenefit.IncomeBottom);

            var taxToDeductWithBenefit = await _taxOfficeClient.GetTaxToDeduct(taxtable, "30B", incomePairWithBenefit.IncomeTop, benefitTaxRequest.IncomeYear, incomePairWithBenefit.IncomeBottom);

            var netIncomeNoBeneFit   = benefitTaxRequest.Income - taxToDeductNoBenefit;
            var netIncomeWithBenefit = benefitTaxRequest.Income - taxToDeductWithBenefit;

            // Return net cost
            return(new TaxResponse(netIncomeNoBeneFit - netIncomeWithBenefit));
        }
        public static async Task <BenefitTaxRequest> ValidatebenfitTaxRequestAsync(ITaxAgencyClient _taxOfficeClient, BenefitTaxRequest request)
        {
            if (request == null)
            {
                throw new ValidationException("Request cannot be null", nameof(request));
            }

            if (request.ChurchMember != false)
            {
                var validatedCongregation = await ValidateCongregation(_taxOfficeClient, request.Congregation, 2020, request.Municipality);
            }

            return(request);
        }