116 lines
4.6 KiB
TypeScript
116 lines
4.6 KiB
TypeScript
import type { CalculateInput, OutputData } from '../types';
|
|
import type { RequestCalculate, ResponseCalculate } from '@/api/core/types';
|
|
import { ESN, NDFL, VAT } from '@/constants/values';
|
|
import { last } from 'radash';
|
|
|
|
type Input = {
|
|
calculateInput: CalculateInput;
|
|
requestCalculate: RequestCalculate;
|
|
responseCalculate: ResponseCalculate;
|
|
};
|
|
|
|
export function transformCalculateResults({
|
|
responseCalculate,
|
|
calculateInput,
|
|
}: Input): OutputData {
|
|
const { values: inputValues } = calculateInput;
|
|
const { postValues, columns, preparedValues } = responseCalculate;
|
|
|
|
const resultPayments: OutputData['resultPayments'] = Array.from(
|
|
{
|
|
length: preparedValues.nmper,
|
|
},
|
|
(_, i) => ({
|
|
_cashflowMsfoColumn: columns?.cashflowMsfoColumn.values[i + 1] || 0,
|
|
_cashflowMsfoWithCfColumn: columns?.cashflowMsfoWithCfColumn.values[i + 1] || 0,
|
|
_creditPaymentColumn: columns?.creditPaymentColumn.values[i + 1] || 0,
|
|
_interestColumn: columns?.interestColumn.values[i + 1] || 0,
|
|
_piColumn: columns?.piColumn.values[i + 1] || 0,
|
|
key: String(i + 1),
|
|
ndsCompensation: columns?.vatColumn.values[i + 1] || 0,
|
|
num: i + 1,
|
|
paymentSum: columns?.sumWithVatColumn.values[i + 1] || 0,
|
|
redemptionAmount: columns?.sumRepaymentColumn.values[i + 1] || 0,
|
|
})
|
|
);
|
|
|
|
const { subsidySum } = inputValues;
|
|
resultPayments[0].paymentSum -= subsidySum;
|
|
resultPayments[0].ndsCompensation -= subsidySum - subsidySum / (1 + VAT);
|
|
|
|
const resultValues: OutputData['resultValues'] = {
|
|
_resultContractEconomy: postValues.contractEconomy,
|
|
_resultContractEconomyWithVAT: postValues.contractEconomyWithVAT,
|
|
_resultPi: columns?.piColumn.values[0],
|
|
_resultSumCredit: columns?.sumCreditColumn.values[1],
|
|
_resultSumCreditPayment: columns?.creditPaymentColumn.values[0],
|
|
_resultVatRecoverable: columns?.vatRecoverableColumn.values[0],
|
|
resultAB_FL: ((preparedValues.agentsSum + preparedValues.doubleAgentsSum) / ESN) * (1 - NDFL),
|
|
resultAB_UL:
|
|
(preparedValues.deliverySum +
|
|
preparedValues.brokerSum +
|
|
preparedValues.brokerOfDeliverySum +
|
|
preparedValues.financialDeptOfDeliverySum) *
|
|
(1 + VAT),
|
|
resultBonusDopProd: Math.abs(
|
|
((columns?.npvBonusExpensesColumn?.values[1] / (1 + preparedValues?.salaryRate)) *
|
|
(1 - NDFL)) /
|
|
preparedValues.marketRate /
|
|
preparedValues.districtRate
|
|
),
|
|
resultBonusMPL: Math.abs(
|
|
(columns?.npvBonusExpensesColumn.values[2] / (1 + preparedValues.salaryRate)) * (1 - NDFL)
|
|
),
|
|
resultBonusSafeFinance: preparedValues?.bonusFinGAP * (1 - NDFL),
|
|
resultDopMPLLeasing: Math.abs(
|
|
(columns?.extraBonusSumColumn.values[2] / (1 + preparedValues.salaryRate)) * (1 - NDFL)
|
|
),
|
|
resultDopProdSum:
|
|
preparedValues.rats +
|
|
preparedValues.registration +
|
|
preparedValues.trackerCost +
|
|
preparedValues.tlmCost +
|
|
preparedValues.nsibBrutto +
|
|
preparedValues.insuranceFinGAPNmper,
|
|
resultFirstPayment: preparedValues.firstPaymentSum * (1 + VAT) - inputValues.subsidySum,
|
|
resultFirstPaymentRiskPolicy: preparedValues?.firstPayment,
|
|
resultIRRGraphPerc: columns?.sumColumn.irr,
|
|
resultIRRNominalPerc: columns?.cashflowMsfoColumn.nominal,
|
|
resultInsKasko: preparedValues.insuranceKasko,
|
|
resultInsOsago: preparedValues.insuranceOsago,
|
|
resultLastPayment: last(columns?.sumWithVatColumn?.values) || 0,
|
|
resultParticipationAmount:
|
|
preparedValues.niAtInception +
|
|
(preparedValues.ratBonus + preparedValues.nsBonus + preparedValues.nsibBonus) *
|
|
preparedValues.marketRate *
|
|
preparedValues.districtRate +
|
|
Math.abs(columns?.npvBonusExpensesColumn.values[0]) +
|
|
Math.abs(
|
|
columns?.extraBonusSumColumn.values[0] +
|
|
preparedValues.importerSum +
|
|
preparedValues.agentsSum +
|
|
preparedValues.deliverySum +
|
|
preparedValues.brokerSum +
|
|
preparedValues.brokerOfDeliverySum +
|
|
preparedValues.financialDeptOfDeliverySum
|
|
),
|
|
resultPlPrice:
|
|
preparedValues.plPriceWithVAT -
|
|
inputValues.supplierDiscountRub -
|
|
inputValues.importProgramSum,
|
|
resultPriceUpPr: postValues.priceUP_Year_PR,
|
|
resultTerm: preparedValues.nmper,
|
|
resultTotalGraphwithNDS: columns?.sumWithVatColumn.values[0] - inputValues.subsidySum,
|
|
};
|
|
|
|
const values: OutputData['values'] = {
|
|
IRR_Perc: columns?.cashflowMsfoColumn?.nominal * 100,
|
|
downloadKp: null,
|
|
lastPaymentRub: last(columns?.sumWithVatColumn?.values) || 0,
|
|
pi: columns?.piColumn.values[0] * 100,
|
|
totalPayments: columns?.sumWithVatColumn?.values[0] - inputValues.subsidySum,
|
|
};
|
|
|
|
return { resultPayments, resultValues, values };
|
|
}
|