unlimited: add new results values

This commit is contained in:
vchikalkin 2023-04-20 18:20:11 +03:00
parent 9f0c126ffb
commit b7f0a3e6cf
6 changed files with 60 additions and 17 deletions

View File

@ -4,6 +4,12 @@ export const id = 'output';
export const title = 'Результаты';
export const titles: Record<keyof ResultValues, string> = {
_resultContractEconomy: 'Экономика',
_resultContractEconomyWithVAT: 'Экономика, с НДС',
_resultPi: 'PI',
_resultSumCredit: 'Сумма кредита',
_resultSumCreditPayment: 'Сумма платежей по кредиту',
_resultVatRecoverable: 'НДС к возмещению',
resultAB_FL: 'АВ ФЛ, без НДФЛ.',
resultAB_UL: 'АВ ЮЛ, с НДС.',
resultBonusDopProd: 'Бонус МПЛ за доп.продукты, без НДФЛ',
@ -37,6 +43,12 @@ const percentFormatter = Intl.NumberFormat('ru', {
}).format;
export const formatters = {
_resultContractEconomy: moneyFormatter,
_resultContractEconomyWithVAT: moneyFormatter,
_resultPi: percentFormatter,
_resultSumCredit: moneyFormatter,
_resultSumCreditPayment: moneyFormatter,
_resultVatRecoverable: moneyFormatter,
resultAB_FL: moneyFormatter,
resultAB_UL: moneyFormatter,
resultBonusDopProd: moneyFormatter,

View File

@ -4,6 +4,7 @@ import { useStore } from '@/stores/hooks';
import { min } from '@/styles/mq';
import { toJS } from 'mobx';
import { observer } from 'mobx-react-lite';
import { omit } from 'radash';
import styled from 'styled-components';
import { Text } from 'ui/elements';
import { Box } from 'ui/grid';
@ -18,8 +19,16 @@ const Grid = styled(Box)`
`;
const Results = observer(() => {
const { $results } = useStore();
const values = toJS($results.values);
const { $results, $process } = useStore();
const resultsValues = toJS($results.values);
// eslint-disable-next-line no-negated-condition
const values = !$process.has('Unlimited')
? omit(
resultsValues,
Object.keys(resultsValues).filter((x) => x.includes('_'))
)
: resultsValues;
return (
<Grid>

View File

@ -427,6 +427,10 @@ const ColumnsSchema = z.object({
sum: z.number(),
values: z.number().array(),
}),
vatRecoverableColumn: z.object({
sum: z.number(),
values: z.number().array(),
}),
});
export const ResponseCalculateSchema = z.object({

View File

@ -1,6 +1,12 @@
import { z } from 'zod';
export const ResultValuesSchema = z.object({
_resultContractEconomy: z.number(),
_resultContractEconomyWithVAT: z.number(),
_resultPi: z.number(),
_resultSumCredit: z.number(),
_resultSumCreditPayment: z.number(),
_resultVatRecoverable: z.number(),
resultAB_FL: z.number(),
resultAB_UL: z.number(),
resultBonusDopProd: z.number(),

View File

@ -21,16 +21,16 @@ export function transformCalculateResults({
length: preparedValues.nmper,
},
(_, i) => ({
cashflowMsfoColumn: columns.cashflowMsfoColumn.values[i + 1],
cashflowMsfoWithCfColumn: columns.cashflowMsfoWithCfColumn.values[i + 1],
creditPaymentColumn: columns.creditPaymentColumn.values[i + 1],
interestColumn: columns.interestColumn.values[i + 1],
cashflowMsfoColumn: columns?.cashflowMsfoColumn.values[i + 1],
cashflowMsfoWithCfColumn: columns?.cashflowMsfoWithCfColumn.values[i + 1],
creditPaymentColumn: columns?.creditPaymentColumn.values[i + 1],
interestColumn: columns?.interestColumn.values[i + 1],
key: String(i + 1),
ndsCompensation: columns.vatColumn.values[i + 1],
ndsCompensation: columns?.vatColumn.values[i + 1],
num: i + 1,
paymentSum: columns.sumWithVatColumn.values[i + 1],
piColumn: columns.piColumn.values[i + 1],
redemptionAmount: columns.sumRepaymentColumn.values[i + 1],
paymentSum: columns?.sumWithVatColumn.values[i + 1],
piColumn: columns?.piColumn.values[i + 1],
redemptionAmount: columns?.sumRepaymentColumn.values[i + 1],
})
);
@ -39,6 +39,12 @@ export function transformCalculateResults({
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 +
@ -50,11 +56,11 @@ export function transformCalculateResults({
(columns?.npvBonusExpensesColumn?.values[1] / (1 + preparedValues?.salaryRate)) * (1 - NDFL)
),
resultBonusMPL: Math.abs(
(columns.npvBonusExpensesColumn.values[2] / (1 + preparedValues.salaryRate)) * (1 - NDFL)
(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)
(columns?.extraBonusSumColumn.values[2] / (1 + preparedValues.salaryRate)) * (1 - NDFL)
),
resultDopProdSum:
preparedValues.rats +
@ -65,8 +71,8 @@ export function transformCalculateResults({
preparedValues.insuranceFinGAPNmper,
resultFirstPayment: preparedValues.firstPaymentSum * (1 + VAT) - inputValues.subsidySum,
resultFirstPaymentRiskPolicy: preparedValues?.firstPayment,
resultIRRGraphPerc: columns.sumColumn.irr,
resultIRRNominalPerc: columns.cashflowMsfoColumn.nominal,
resultIRRGraphPerc: columns?.sumColumn.irr,
resultIRRNominalPerc: columns?.cashflowMsfoColumn.nominal,
resultInsKasko: preparedValues.insuranceKasko,
resultInsOsago: preparedValues.insuranceOsago,
resultLastPayment: last(columns?.sumWithVatColumn?.values) || 0,
@ -75,9 +81,9 @@ export function transformCalculateResults({
(preparedValues.ratBonus + preparedValues.nsBonus + preparedValues.nsibBonus) *
preparedValues.marketRate *
preparedValues.districtRate +
Math.abs(columns.npvBonusExpensesColumn.values[0]) +
Math.abs(columns?.npvBonusExpensesColumn.values[0]) +
Math.abs(
columns.extraBonusSumColumn.values[0] +
columns?.extraBonusSumColumn.values[0] +
preparedValues.importerSum +
preparedValues.agentsSum +
preparedValues.deliverySum +
@ -91,7 +97,7 @@ export function transformCalculateResults({
inputValues.importProgramSum,
resultPriceUpPr: postValues.priceUP_Year_PR,
resultTerm: preparedValues.nmper,
resultTotalGraphwithNDS: columns.sumWithVatColumn.values[0] - inputValues.subsidySum,
resultTotalGraphwithNDS: columns?.sumWithVatColumn.values[0] - inputValues.subsidySum,
};
const values: OutputData['values'] = {

View File

@ -1,6 +1,12 @@
import type { ResultValues } from './types';
export const defaultResultsValues: ResultValues = {
_resultContractEconomy: 0,
_resultContractEconomyWithVAT: 0,
_resultPi: 0,
_resultSumCredit: 0,
_resultSumCreditPayment: 0,
_resultVatRecoverable: 0,
resultAB_FL: 0,
resultAB_UL: 0,
resultBonusDopProd: 0,