diff --git a/apps/web/Components/Output/Results/config.ts b/apps/web/Components/Output/Results/config.ts index 12f92e9..1194bf0 100644 --- a/apps/web/Components/Output/Results/config.ts +++ b/apps/web/Components/Output/Results/config.ts @@ -4,6 +4,12 @@ export const id = 'output'; export const title = 'Результаты'; export const titles: Record = { + _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, diff --git a/apps/web/Components/Output/Results/index.jsx b/apps/web/Components/Output/Results/index.jsx index b421a1e..44b930f 100644 --- a/apps/web/Components/Output/Results/index.jsx +++ b/apps/web/Components/Output/Results/index.jsx @@ -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 ( diff --git a/apps/web/api/core/types/calculate.ts b/apps/web/api/core/types/calculate.ts index dc8552c..f38981a 100644 --- a/apps/web/api/core/types/calculate.ts +++ b/apps/web/api/core/types/calculate.ts @@ -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({ diff --git a/apps/web/config/schema/results.ts b/apps/web/config/schema/results.ts index be4744f..8ac56e0 100644 --- a/apps/web/config/schema/results.ts +++ b/apps/web/config/schema/results.ts @@ -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(), diff --git a/apps/web/server/routers/calculate/lib/transform.ts b/apps/web/server/routers/calculate/lib/transform.ts index cda9345..507392d 100644 --- a/apps/web/server/routers/calculate/lib/transform.ts +++ b/apps/web/server/routers/calculate/lib/transform.ts @@ -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'] = { diff --git a/apps/web/stores/results/default-values.ts b/apps/web/stores/results/default-values.ts index fb61969..acadc9f 100644 --- a/apps/web/stores/results/default-values.ts +++ b/apps/web/stores/results/default-values.ts @@ -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,