public TaxCalculationBase( EmployeeInsuranceFee employeeFee, RurMoney employeeNdfl, RurMoney additionalFee, RurMoney totalFee ) { if (employeeNdfl < RurMoney.Zero) { throw new ArgumentOutOfRangeException(nameof(employeeNdfl)); } if (additionalFee < RurMoney.Zero) { throw new ArgumentOutOfRangeException(nameof(additionalFee)); } if (totalFee < RurMoney.Zero) { throw new ArgumentOutOfRangeException(nameof(totalFee)); } EmployeeFee = employeeFee; EmployeeNdfl = employeeNdfl; AdditionalFee = additionalFee; TotalFee = totalFee; }
public static OrgUsnDTaxAggregate Calculate( TaxCalculationBase @base, OrganizationUsnDTaxParameters @params) { var usnChargedTax = CalculateUsnDChargedTax(@params); var feeDeduction = @params.CustomerTaxParameters.Salary > RurMoney.Zero ? RurMoney.Min(0.5M * usnChargedTax, @base.TotalFee) : @base.TotalFee; var taxTotal = usnChargedTax - feeDeduction; var(total, burgen) = CalculateTotal(taxTotal + @base.EmployeeNdfl, @base.TotalFee, @params); return(new OrgUsnDTaxAggregate( usnChargedTax, taxTotal, @base.EmployeeFee, feeDeduction, @base.TotalFee, @base.EmployeeNdfl, total, burgen )); }
public static (RurMoney total, decimal burgen) CalculateTotal(RurMoney totalTax, RurMoney totalFee, TaxParameters @params) { var total = totalTax + totalFee; var burgen = (total.Amount / @params.CustomerTaxParameters.Income.Amount) * 100m; return(total, Math.Round(burgen * 100m) / 100m); }
public static OrgUsnD_RTaxAggregate Calculate( TaxCalculationBase @base, OrganizationUsnD_RTaxParameters @params) { var totalExpenses = @base.EmployeeFee.Total + @base.EmployeeNdfl + @params.CustomerTaxParameters.Expense + @params.CustomerTaxParameters.Salary; var chargedTax = CalculateUsnDRChargedTax(@params, totalExpenses); var sts = RurMoney.Max(chargedTax, @params.MinTaxRate.Value * @params.CustomerTaxParameters.Income); var(total, burgen) = CalculateTotal(sts + @base.EmployeeNdfl, @base.TotalFee, @params); return(new OrgUsnD_RTaxAggregate( totalExpenses, sts, @base.EmployeeFee, @base.EmployeeNdfl, @base.TotalFee, total, burgen )); }
public static IndividualUsnD_RTaxAggregate Calculate( TaxCalculationBase @base, IndividualUsnD_RTaxParameters @params) { var totalExpenses = @params.SelfInsuranceFee.Total + @base.EmployeeFee.Total + @base.EmployeeNdfl + @params.CustomerTaxParameters.Expense + @params.CustomerTaxParameters.Salary; var chargedTax = CalculateUsnDRChargedTax(@params, totalExpenses); var taxTotal = RurMoney.Max(chargedTax, @params.MinTaxRate.Value * @params.CustomerTaxParameters.Income); var(total, burgen) = CalculateTotal(taxTotal + @base.EmployeeNdfl, @base.TotalFee, @params); return(new IndividualUsnD_RTaxAggregate( totalExpenses, taxTotal, @params.SelfInsuranceFee, @base.EmployeeFee, @base.AdditionalFee, @base.EmployeeNdfl, @base.TotalFee, total, burgen )); }
public static IndividualUsnDTaxAggregate Calculate( TaxCalculationBase @base, IndividualUsnDTaxParameters @params) { var chargedTax = CalculateUsnDChargedTax(@params); var feeDeduction = @params.CustomerTaxParameters.Salary > RurMoney.Zero ? RurMoney.Min(@base.TotalFee, 0.5M * chargedTax) // есть сотрудники : @base.TotalFee; var usnTotalTax = chargedTax - feeDeduction; var(total, burgen) = CalculateTotal(usnTotalTax + @base.EmployeeNdfl, @base.TotalFee, @params); return(new IndividualUsnDTaxAggregate( chargedTax, feeDeduction, @base.TotalFee, usnTotalTax, @params.SelfInsuranceFee, @base.EmployeeFee, @base.AdditionalFee, @base.EmployeeNdfl, total, burgen )); }
public static RurMoney CalculateUsnDRChargedTax(TaxParameters @params, RurMoney expense) { if (@params is UsnTaxParameters idp && idp.UsnType == EUsnType.IncomeExpense) { return(idp.UsnRate.Value * (@params.CustomerTaxParameters.Income - expense)); } throw new NotSupportedException(); }
protected IndividualUsnTaxAggregate( RurMoney sts, SelfInsuranceFee selfInsuranceFee, RurMoney additionalFee, RurMoney feeTotal, EmployeeInsuranceFee employeeFee, RurMoney employeeNdfl, RurMoney total, decimal burgen ) : base(selfInsuranceFee, additionalFee, feeTotal, employeeFee, employeeNdfl, total, burgen) { STS = sts; }
protected TaxAggregate( RurMoney insuranceContributionsTotal, EmployeeInsuranceFee employeeFee, RurMoney ndfl, RurMoney total, decimal taxBurden) { EmployeeFee = employeeFee; EmployeeNdfl = ndfl; InsuranceContributions = insuranceContributionsTotal; Total = total; TaxBurden = taxBurden; }
public OrgUsnD_RTaxAggregate( RurMoney taxExpenses, RurMoney sts, EmployeeInsuranceFee employeeFee, RurMoney ndfl, RurMoney feeTotal, RurMoney total, decimal burgen ) : base(feeTotal, employeeFee, ndfl, total, burgen) { TaxableExpenses = taxExpenses; STS = sts; }
protected IndividualTaxAggregate( SelfInsuranceFee selfInsuranceFee, RurMoney additionalFee, RurMoney feeTotal, EmployeeInsuranceFee employeeInsuranceFee, RurMoney ndfl, RurMoney total, decimal taxBurden ) : base(feeTotal, employeeInsuranceFee, ndfl, total, taxBurden) { InsuranceOneself = selfInsuranceFee; AdditionalInsuranceFee = additionalFee; }
public OrgOsnTaxAggregate( RurMoney profitTax, RurMoney nds, RurMoney feeTotal, EmployeeInsuranceFee employeeFee, RurMoney ndfl, RurMoney total, decimal burgen) : base(feeTotal, employeeFee, ndfl, total, burgen) { ProfitTax = profitTax; VAT = nds; }
public IndividualUsnD_RTaxAggregate( RurMoney taxExpenses, RurMoney sts, SelfInsuranceFee selfInsuranceFee, EmployeeInsuranceFee employeeFee, RurMoney additionalFee, RurMoney employeeNdfl, RurMoney feeTotal, RurMoney total, decimal burgen ) : base(sts, selfInsuranceFee, additionalFee, feeTotal, employeeFee, employeeNdfl, total, burgen) { TaxableExpenses = taxExpenses; }
public SelfInsuranceFee(RurMoney pfr, RurMoney ffoms) { if (pfr < RurMoney.Zero) { throw new ArgumentOutOfRangeException(nameof(pfr)); } if (ffoms < RurMoney.Zero) { throw new ArgumentOutOfRangeException(nameof(ffoms)); } Pension = pfr; Health = ffoms; Total = pfr + ffoms; }
public IndividualOsnTaxAggregate( RurMoney pit, RurMoney nds, SelfInsuranceFee selfInsuranceFee, RurMoney additionalFee, RurMoney feeTotal, EmployeeInsuranceFee employeeFee, RurMoney employeeNdfl, RurMoney total, decimal burgen ) : base(selfInsuranceFee, additionalFee, feeTotal, employeeFee, employeeNdfl, total, burgen) { PIT = pit; VAT = nds; }
public OrgUsnDTaxAggregate( RurMoney chargedTax, RurMoney sts, EmployeeInsuranceFee employeeFee, RurMoney feeDeduction, RurMoney feeTotal, RurMoney ndfl, RurMoney total, decimal burgen ) : base(feeTotal, employeeFee, ndfl, total, burgen) { STS = sts; AccruedSTS = chargedTax; InsuranceContributionsDeduction = feeDeduction; }
public IndividualUsnDTaxAggregate( RurMoney accruedSTS, RurMoney feeDeduction, RurMoney feeTotal, RurMoney sts, SelfInsuranceFee selfInsuranceFee, EmployeeInsuranceFee employeeFee, RurMoney additionalFee, RurMoney employeeNdfl, RurMoney total, decimal burgen ) : base(sts, selfInsuranceFee, additionalFee, feeTotal, employeeFee, employeeNdfl, total, burgen) { AccruedSTS = accruedSTS; InsuranceContributionsDeduction = feeDeduction; }
/// <summary> /// часть, соответствующая НДФЛ сотрудников /// </summary> /// <param name="params"></param> /// <returns></returns> public static RurMoney CalculateEmployeeNdfl(TaxParameters @params) { var salaryRate = new Rate(1M / (1M - @params.NdflRate.Value)); var salary = salaryRate.Value * @params.CustomerTaxParameters.Salary; var pfr = @params.InsuranceFeeParams.PfrRate.Value * salary; var ffoms = @params.InsuranceFeeParams.FfomsRate.Value * salary; var fss = @params.InsuranceFeeParams.FssRate.Value * salary; var ndfl = RurMoney.Round(@params.NdflRate.Value * salary); return(ndfl); }
public static RurMoney CalculateTotalFee( EmployeeInsuranceFee employeeFee, RurMoney additionalFee, SelfInsuranceFee selfFee, TaxParameters @params) { var tmp = employeeFee.Total + additionalFee; switch (@params.CompanyType) { case ECompanyType.IP: return(tmp + selfFee.Total); default: return(tmp); } }
public InsuranceFeeParameters( Rate pfrRate, Rate ffomsRate, Rate fssRate, Rate additionalContribRate, RurMoney annualFreeIncomeBoundary) { if (annualFreeIncomeBoundary < RurMoney.Zero) { throw new ArgumentOutOfRangeException(nameof(annualFreeIncomeBoundary)); } PfrRate = pfrRate; FfomsRate = ffomsRate; FssRate = fssRate; AdditionalContribRate = additionalContribRate; AnnualFreeIncomeBoundary = annualFreeIncomeBoundary; }
/// <param name="income">доход</param> /// <param name="expense">расход</param> /// <param name="salary">зарплата сотрудников</param> public CustomerTaxParameters(RurMoney income, RurMoney expense, RurMoney salary) { if (income < RurMoney.Zero) { throw new ArgumentOutOfRangeException(nameof(income)); } if (expense < RurMoney.Zero) { throw new ArgumentOutOfRangeException(nameof(expense)); } if (salary < RurMoney.Zero) { throw new ArgumentOutOfRangeException(nameof(salary)); } Income = income; Expense = expense; Salary = salary; }
public EmployeeInsuranceFee(RurMoney pfr, RurMoney ffoms, RurMoney fss) { if (fss < RurMoney.Zero) { throw new ArgumentOutOfRangeException(nameof(pfr)); } if (pfr < RurMoney.Zero) { throw new ArgumentOutOfRangeException(nameof(pfr)); } if (ffoms < RurMoney.Zero) { throw new ArgumentOutOfRangeException(nameof(ffoms)); } PFR = pfr; FFOMS = ffoms; FSS = fss; Total = PFR + FFOMS + FSS; }
public async Task ChooseOrgOsn_Then_CalculateWright() { // Assign var calculator = await _taxCalculatorFactory.CreateCalculator( ECompanyType.OOO, EAccountTaxationSystem.Osn); // Act var @params = new CustomerTaxParameters( new RurMoney(1000000m), new RurMoney(100000m), new RurMoney(30000m)); var actual = await calculator(@params); // Assert var feeTotal = new RurMoney(10344.83m); var profitTax = new RurMoney(143576.81m); var nds = new RurMoney(137288.13m); var expected = new OrgOsnTaxAggregate( profitTax, nds, feeTotal, employeeFee: new EmployeeInsuranceFee( new RurMoney(7586.21m), new RurMoney(1758.62m), new RurMoney(1000m)), ndfl: new RurMoney(4483m), total: new RurMoney(295692.77m), burgen: 29.57m ); Assert.AreEqual(expected, actual); }
public static IndividualOsnTaxAggregate Calculate( TaxCalculationBase @base, IndividualOsnTaxParameters @params) { var(salesNds, buyNds, totalNds) = CalculateNds(@params); var individualNdfl = CalculateIndividualNdfl(); var(total, burgen) = CalculateTotal(individualNdfl + totalNds, @base.TotalFee, @params); return(new IndividualOsnTaxAggregate( individualNdfl, totalNds, @params.SelfInsuranceFee, @base.AdditionalFee, @base.TotalFee, @base.EmployeeFee, @base.EmployeeNdfl, total, burgen )); RurMoney CalculateIndividualNdfl() { var expense = @params.CustomerTaxParameters.Expense - buyNds + @params.SelfInsuranceFee.Total; var totalExpense = expense + @base.EmployeeFee.Total + @base.EmployeeNdfl + @params.CustomerTaxParameters.Salary; var profit = @params.CustomerTaxParameters.Income - salesNds - totalExpense; return(RurMoney.Round(@params.NdflRate.Value * profit)); } }
public async Task ChooseOrgOsnWithoutEmployee_Then_CalculateWright() { // Assign var calculator = await _taxCalculatorFactory.CreateCalculator( ECompanyType.OOO, EAccountTaxationSystem.Osn); // Act var @params = new CustomerTaxParameters( new RurMoney(1000000m), new RurMoney(100000m), RurMoney.Zero); var actual = await calculator(@params); // Assert var feeTotal = RurMoney.Zero; var profitTax = new RurMoney(152542.37m); var nds = new RurMoney(137288.13m); var expected = new OrgOsnTaxAggregate( profitTax, nds, feeTotal, employeeFee: new EmployeeInsuranceFee(RurMoney.Zero, RurMoney.Zero, RurMoney.Zero), ndfl: RurMoney.Zero, total: new RurMoney(289830.5m), burgen: 28.98m ); Assert.AreEqual(expected, actual); }