osago: use getInsuranceCondition
This commit is contained in:
parent
66cc33b899
commit
5954a64941
@ -12,10 +12,26 @@ import dayjs from 'dayjs';
|
||||
import { sort } from 'radash';
|
||||
import { round } from 'tools';
|
||||
|
||||
export function convertEltOsagoResponse(response: ELT.ResponseEltOsago, row: Row): Row {
|
||||
const { message, numCalc, premiumSum = 0, skCalcId } = response;
|
||||
let { error } = response;
|
||||
if (premiumSum > MAX_INSURANCE) {
|
||||
type BaseConvertResponseInput = {
|
||||
context: Pick<ProcessContext, 'apolloClient' | 'store'>;
|
||||
row: Row;
|
||||
};
|
||||
|
||||
type ConvertEltOsagoResponseInput = BaseConvertResponseInput & {
|
||||
response: ELT.ResponseEltOsago;
|
||||
};
|
||||
|
||||
export async function convertEltOsagoResponse(input: ConvertEltOsagoResponseInput): Promise<Row> {
|
||||
const { context, response, row } = input;
|
||||
const { store } = context;
|
||||
|
||||
const { message, premiumSum = 0 } = response;
|
||||
let { numCalc, skCalcId, error } = response;
|
||||
let sum = premiumSum;
|
||||
|
||||
const { $calculation } = store;
|
||||
|
||||
if (sum > MAX_INSURANCE) {
|
||||
error ||= `Сумма по страховке превышает максимально допустимое значение по стоимости ОСАГО: ${Intl.NumberFormat(
|
||||
'ru',
|
||||
{
|
||||
@ -24,7 +40,7 @@ export function convertEltOsagoResponse(response: ELT.ResponseEltOsago, row: Row
|
||||
}
|
||||
).format(MAX_INSURANCE)}`;
|
||||
}
|
||||
if (premiumSum < MIN_INSURANCE) {
|
||||
if (sum < MIN_INSURANCE) {
|
||||
error ||= `Сумма по страховке не должна быть меньше допустимого значения по стоимости ОСАГО: ${Intl.NumberFormat(
|
||||
'ru',
|
||||
{
|
||||
@ -34,13 +50,69 @@ export function convertEltOsagoResponse(response: ELT.ResponseEltOsago, row: Row
|
||||
).format(MIN_INSURANCE)}`;
|
||||
}
|
||||
|
||||
const cost =
|
||||
$calculation.$values.getValue('plPriceRub') -
|
||||
$calculation.$values.getValue('discountRub') -
|
||||
$calculation.$values.getValue('importProgramSum') +
|
||||
$calculation.$values.getValue('addEquipmentPrice');
|
||||
|
||||
const selectedRule = await getInsuranceCondition(input, { cost, riskType: 'osago' });
|
||||
|
||||
const insuranceCondition = selectedRule?.evo_id ?? null;
|
||||
|
||||
if (selectedRule) {
|
||||
const rule_evo_discount = selectedRule.evo_discount ?? 0;
|
||||
|
||||
switch (selectedRule.evo_rules_type) {
|
||||
// "не выводить результат расчета"
|
||||
case 100_000_000: {
|
||||
sum = 0;
|
||||
numCalc = Number.parseInt(defaultRow.numCalc, 2);
|
||||
skCalcId = defaultRow.skCalcId;
|
||||
if (selectedRule.evo_message) error = selectedRule.evo_message;
|
||||
break;
|
||||
}
|
||||
|
||||
// "проверка на мин.тариф"
|
||||
case 100_000_001: {
|
||||
const newSum = round((sum / cost) * 100, 2);
|
||||
if (newSum < rule_evo_discount) {
|
||||
sum = 0;
|
||||
numCalc = Number.parseInt(defaultRow.numCalc, 2);
|
||||
skCalcId = defaultRow.skCalcId;
|
||||
if (selectedRule.evo_message) error = selectedRule.evo_message;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// "скидка за счет КВ"
|
||||
case 100_000_002: {
|
||||
sum = (((sum / cost) * 100 - rule_evo_discount) / 100) * cost;
|
||||
numCalc = Number.parseInt(defaultRow.numCalc, 2);
|
||||
skCalcId = defaultRow.skCalcId;
|
||||
if (selectedRule.evo_message) error = selectedRule.evo_message;
|
||||
break;
|
||||
}
|
||||
|
||||
// "акционный тариф"
|
||||
case 100_000_003: {
|
||||
sum = (rule_evo_discount / 100) * cost;
|
||||
numCalc = Number.parseInt(defaultRow.numCalc, 2);
|
||||
skCalcId = defaultRow.skCalcId;
|
||||
if (selectedRule.evo_message) error = selectedRule.evo_message;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
...row,
|
||||
insuranceCondition,
|
||||
message: error || message,
|
||||
numCalc: `${numCalc}`,
|
||||
skCalcId,
|
||||
status: error ? 'error' : null,
|
||||
sum: premiumSum,
|
||||
sum,
|
||||
};
|
||||
}
|
||||
|
||||
@ -80,10 +152,8 @@ export function convertOwnOsagoResult(result: ResponseOwnOsago | undefined, row:
|
||||
};
|
||||
}
|
||||
|
||||
type ConvertEltKaskoResponseInput = {
|
||||
context: Pick<ProcessContext, 'apolloClient' | 'store'>;
|
||||
type ConvertEltKaskoResponseInput = BaseConvertResponseInput & {
|
||||
response: ELT.ResponseEltKasko;
|
||||
row: Row;
|
||||
};
|
||||
|
||||
export async function convertEltKaskoResponse(input: ConvertEltKaskoResponseInput): Promise<Row> {
|
||||
@ -226,7 +296,7 @@ type GetInsuranceConditionParams = {
|
||||
};
|
||||
|
||||
async function getInsuranceCondition(
|
||||
input: ConvertEltKaskoResponseInput,
|
||||
input: BaseConvertResponseInput,
|
||||
{ cost, riskType }: GetInsuranceConditionParams
|
||||
) {
|
||||
const { context, row } = input;
|
||||
|
||||
@ -19,6 +19,7 @@ export const eltOsagoRouter = router({
|
||||
const store = new RootStore();
|
||||
store.$calculation.$values.hydrate(input.calculation.values);
|
||||
|
||||
const context = { apolloClient, store };
|
||||
const { init: initElt } = await eltHelper({ apolloClient, store });
|
||||
const { osago: initRows } = await initElt();
|
||||
|
||||
@ -31,7 +32,7 @@ export const eltOsagoRouter = router({
|
||||
|
||||
return makeEltOsagoRequest({ apolloClient, store }, row).then((request) =>
|
||||
getEltOsago(request)
|
||||
.then((response) => convertEltOsagoResponse(response, row))
|
||||
.then((response) => convertEltOsagoResponse({ context, response, row }))
|
||||
.catch((error) => ({ ...row, message: error.message, status: 'error' }))
|
||||
);
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user