diff --git a/apps/web/Components/Calculation/Settings/config.ts b/apps/web/Components/Calculation/Settings/config.ts
index 6684545..982cef7 100644
--- a/apps/web/Components/Calculation/Settings/config.ts
+++ b/apps/web/Components/Calculation/Settings/config.ts
@@ -2,7 +2,7 @@ import type { FormTabRows } from '../lib/render-rows';
const defaultRowStyle = { gridTemplateColumns: '1fr' };
-export const rows: FormTabRows = [
+export const mainRows: FormTabRows = [
{ title: 'Выбор Интереса/ЛС' },
[['selectLead'], defaultRowStyle],
[['selectOpportunity'], defaultRowStyle],
@@ -14,10 +14,20 @@ export const rows: FormTabRows = [
gridTemplateColumns: ['1fr 0.15fr'],
},
],
+];
+export const paramsRows: FormTabRows = [
{ title: 'Параметры расчета' },
[['labelIrrInfo'], defaultRowStyle],
[['radioCalcType'], defaultRowStyle],
[['tbxIRR_Perc'], defaultRowStyle],
[['tbxTotalPayments'], defaultRowStyle],
];
+
+export const unlimitedParamsRows: FormTabRows = [
+ { title: 'Параметры расчета' },
+ [['labelIrrInfo'], defaultRowStyle],
+ [['radioCalcType'], defaultRowStyle],
+ [['tbxIRR_Perc', 'tbxPi'], { gridTemplateColumns: '1fr 1fr' }],
+ [['tbxTotalPayments'], defaultRowStyle],
+];
diff --git a/apps/web/Components/Calculation/Settings/index.jsx b/apps/web/Components/Calculation/Settings/index.jsx
index 35cfa80..f7c0a6e 100644
--- a/apps/web/Components/Calculation/Settings/index.jsx
+++ b/apps/web/Components/Calculation/Settings/index.jsx
@@ -1,6 +1,7 @@
import renderFormRows from '../lib/render-rows';
-import { rows } from './config';
+import * as config from './config';
import Background from '@/Components/Layout/Background';
+import { useStore } from '@/stores/hooks';
import { min } from '@/styles/mq';
import styled from 'styled-components';
@@ -17,5 +18,17 @@ const Wrapper = styled(Background)`
`;
export default function Settings() {
- return {renderFormRows(rows)};
+ const { $process } = useStore();
+
+ const mainRows = renderFormRows(config.mainRows);
+ const paramsRows = $process.has('Unlimited')
+ ? renderFormRows(config.unlimitedParamsRows)
+ : renderFormRows(config.paramsRows);
+
+ return (
+
+ {mainRows}
+ {paramsRows}
+
+ );
}
diff --git a/apps/web/Components/Calculation/config/elements-components.ts b/apps/web/Components/Calculation/config/elements-components.ts
index 323b557..62db886 100644
--- a/apps/web/Components/Calculation/config/elements-components.ts
+++ b/apps/web/Components/Calculation/config/elements-components.ts
@@ -133,6 +133,7 @@ const components = wrapComponentsMap({
tbxVIN: e.Input,
selectUser: e.Select,
cbxSupplierFinancing: e.Switch,
+ tbxPi: e.InputNumber,
/** Readonly Elements */
labelLeaseObjectRisk: e.Text,
diff --git a/apps/web/Components/Calculation/config/elements-props.tsx b/apps/web/Components/Calculation/config/elements-props.tsx
index b962483..9f50bf9 100644
--- a/apps/web/Components/Calculation/config/elements-props.tsx
+++ b/apps/web/Components/Calculation/config/elements-props.tsx
@@ -481,7 +481,19 @@ const props: Partial = {
optionFilterProp: 'label',
},
tbxIRR_Perc: {
- min: 0,
+ min: -500,
+ max: 500,
+ step: 0.0001,
+ precision: 6,
+ parser,
+ formatter: createFormatter({ minimumFractionDigits: 6, maximumFractionDigits: 6 }),
+ addonAfter: '%',
+ style: {
+ width: '100%',
+ },
+ },
+ tbxPi: {
+ min: -500,
max: 500,
step: 0.0001,
precision: 6,
diff --git a/apps/web/Components/Calculation/config/elements-titles.ts b/apps/web/Components/Calculation/config/elements-titles.ts
index 03a3b8d..7337ae4 100644
--- a/apps/web/Components/Calculation/config/elements-titles.ts
+++ b/apps/web/Components/Calculation/config/elements-titles.ts
@@ -127,6 +127,7 @@ const titles: Record = {
tbxVIN: 'VIN',
selectUser: 'Пользователь',
cbxSupplierFinancing: 'Финансирование поставщика',
+ tbxPi: 'PI',
/** Link Elements */
linkDownloadKp: '',
diff --git a/apps/web/Components/Calculation/config/elements-types.ts b/apps/web/Components/Calculation/config/elements-types.ts
index 58834fd..dc22621 100644
--- a/apps/web/Components/Calculation/config/elements-types.ts
+++ b/apps/web/Components/Calculation/config/elements-types.ts
@@ -192,6 +192,7 @@ const types = wrapElementsTypes({
tbxVIN: t.Value,
selectUser: t.Options,
cbxSupplierFinancing: t.Switch,
+ tbxPi: t.Number,
labelLeaseObjectRisk: t.Readonly,
tbxInsKaskoPriceLeasePeriod: t.Readonly,
diff --git a/apps/web/Components/Calculation/config/map/values.ts b/apps/web/Components/Calculation/config/map/values.ts
index 80a6dd5..bfa9fdc 100644
--- a/apps/web/Components/Calculation/config/map/values.ts
+++ b/apps/web/Components/Calculation/config/map/values.ts
@@ -130,6 +130,7 @@ const elementsToValues = wrapElementsMap({
tbxVIN: 'vin',
selectUser: 'user',
cbxSupplierFinancing: 'supplierFinancing',
+ tbxPi: 'pi',
/** Readonly Elements */
labelLeaseObjectRisk: 'leaseObjectRiskName',
diff --git a/apps/web/config/default-options.ts b/apps/web/config/default-options.ts
index f1f9570..eca1773 100644
--- a/apps/web/config/default-options.ts
+++ b/apps/web/config/default-options.ts
@@ -193,14 +193,14 @@ export const radioCalcType = [
label: 'IRR',
value: 100_000_000,
},
- {
- label: 'Суммы',
- value: 100_000_001,
- },
{
label: 'PI',
value: 100_000_099,
},
+ {
+ label: 'Суммы',
+ value: 100_000_001,
+ },
];
export const selectRequirementTelematic = [
@@ -503,6 +503,7 @@ const defaultOptions: CalculationOptions = {
tbxVIN: [],
selectUser: [],
cbxSupplierFinancing: [],
+ tbxPi: [],
};
export default defaultOptions;
diff --git a/apps/web/config/default-statuses.ts b/apps/web/config/default-statuses.ts
index e2bc520..48cd1bd 100644
--- a/apps/web/config/default-statuses.ts
+++ b/apps/web/config/default-statuses.ts
@@ -126,6 +126,7 @@ const defaultStatuses: CalculationStatuses = {
tbxMileage: 'Default',
tbxMinPriceChange: 'Default',
tbxParmentsDecreasePercent: 'Default',
+ tbxPi: 'Default',
tbxQuoteName: 'Default',
tbxRedemptionPaymentSum: 'Disabled',
tbxSaleBonus: 'Default',
diff --git a/apps/web/config/default-values.ts b/apps/web/config/default-values.ts
index d398ec7..f2dd0e1 100644
--- a/apps/web/config/default-values.ts
+++ b/apps/web/config/default-values.ts
@@ -101,6 +101,7 @@ const defaultValues: CalculationValues = {
opportunity: null,
opportunityUrl: null,
parmentsDecreasePercent: 94,
+ pi: 0,
plPriceRub: 0,
priceWithDiscount: false,
product: null,
@@ -134,12 +135,12 @@ const defaultValues: CalculationValues = {
townRegistration: null,
tracker: null,
typePTS: null,
+ user: null,
VATInLeaseObjectPrice: 0,
vehicleTaxInLeasingPeriod: 0,
vehicleTaxInYear: 0,
- withTrailer: false,
vin: null,
- user: null,
+ withTrailer: false,
};
export default defaultValues;
diff --git a/apps/web/config/schema/values.ts b/apps/web/config/schema/values.ts
index 1c6fc82..06b0478 100644
--- a/apps/web/config/schema/values.ts
+++ b/apps/web/config/schema/values.ts
@@ -90,6 +90,7 @@ const ValuesSchema = z.object({
objectTypeTax: z.number().nullable(),
opportunity: z.string().nullable(),
parmentsDecreasePercent: z.number(),
+ pi: z.number(),
priceWithDiscount: z.boolean(),
product: z.string().nullable(),
quote: z.string().nullable(),
@@ -119,12 +120,12 @@ const ValuesSchema = z.object({
townRegistration: z.string().nullable(),
tracker: z.string().nullable(),
typePTS: z.number().nullable(),
+ user: z.string().nullable(),
VATInLeaseObjectPrice: z.number(),
vehicleTaxInLeasingPeriod: z.number(),
vehicleTaxInYear: z.number(),
- withTrailer: z.boolean(),
vin: z.string().nullable(),
- user: z.string().nullable(),
+ withTrailer: z.boolean(),
/**
* Link Values
diff --git a/apps/web/server/routers/calculate/lib/request.ts b/apps/web/server/routers/calculate/lib/request.ts
index 222ae74..9d8fc0c 100644
--- a/apps/web/server/routers/calculate/lib/request.ts
+++ b/apps/web/server/routers/calculate/lib/request.ts
@@ -858,7 +858,7 @@ export async function createRequestData({
},
async npvniExpected() {
- return 0;
+ return values.pi / 100;
},
async nsBonus() {
diff --git a/apps/web/server/routers/calculate/lib/transform.ts b/apps/web/server/routers/calculate/lib/transform.ts
index 0b597ef..a9725d6 100644
--- a/apps/web/server/routers/calculate/lib/transform.ts
+++ b/apps/web/server/routers/calculate/lib/transform.ts
@@ -104,6 +104,7 @@ export function transformCalculateResults({
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,
};
diff --git a/apps/web/server/routers/calculate/types.ts b/apps/web/server/routers/calculate/types.ts
index f3ba96e..d17f387 100644
--- a/apps/web/server/routers/calculate/types.ts
+++ b/apps/web/server/routers/calculate/types.ts
@@ -25,6 +25,7 @@ export const OutputDataSchema = z.object({
IRR_Perc: true,
downloadKp: true,
lastPaymentRub: true,
+ pi: true,
totalPayments: true,
}),
});