Skip to content

Калькулятор

Контекст

Контекст калькулятора это список переменных, с которыми можно проводить какие либо действия. Переменные калькулятора

  1. Константа - переменная, значение которой нельзя менять в процессе работы калькулятора. Нельзя присвоить ей значение. Это может быть, например, премия по договору, или фиксированный тариф.
  2. Коэффициент - расчетное значение, вычисляемое с помощью тарифной таблицы.
  3. Переменная - хранилище промежуторного результата расчета

Коэффициенты

Способ получения результата расчета по таблице. Для поиска нужно настроить колонки таблицы. Для настройки кадой колонки указывается, с какими данными из словаря данных эта колонка сравникается и как. Например кужно получить возрастной коэффициент

ВозрастРезультат
200.1
300.2
400.3

Для этого добавлем колонку 1, значение которой = возраст затрахованного, тип данных число, сортировки нет. Это условие даст нам SQL

sql
SELECT result
FROM coefficients
WHERE coef_id = :id
AND col1 = :param1
LIMIT 1

Теперь если вызвать получение коэффициента из формулы, то сначала вычислится чему равен 'возраст затрахованного'. Далее выполнится SQL запрос к БД и вернется значение из колонки result. В качетстве результата можно использовать или коэффициент ( 4% ), или сразу готовое значение ( 3000 р ) Количество колонок не ограничено, можно строить сложные тарифные таблицы.

Тип данных ( число или строка )

Важно указать правильный тип данных. В БД все хранится в виде строк, и сравнение по умолчанию будет так же для строк. Если указано число, то значение к БД и параметр для поиск будут приводится к числу в формате '90.00'

Сортировка ( asc, desc )

В приведенном выше примере порядок сортировки не важен, как как под условие попадает всегда только 1 строка. Но если переделать услови с 'возраст равен 20, 30, 40 лет' на до 20 лет - 0.1, до 30 - 0.2, до 40 - 0.3 то есть несколько решений

  1. перечислить все возможные значения. Иногда можно, иногда будет громоздзко.
  2. сделать 2 колонки - 1 <= , 2 >=. Явно указать диапазон
  3. использовать сортировку. В этом случае запрос будет выглядеть
sql
SELECT result
FROM coefficients
WHERE coef_id = :id
AND col1 <= :param1
ORDER BY col1 DESC
LIMIT 1

Если страхователю 36 лет, то под условие попадет 2 строки - для 20 и 30 Далее мортируем по убыванию - 30,20 и берем 1 строку. to_number из запроса убран для читаемости.

Если ничего не найдено

Если по тарифной талице ничего не найдено, то результат будет равен null. И все дальнейшие вычисления не дадут результатат. Но можно указать, что делать.

  1. Указать фиксированное значение. Например 1.
  2. Указать название переменной из контекста калькулятора. Это может быть значение из договора, константа, другой коэффициент. Например если есть спец.тариф по регионам и по городам, то можно сделать 1 таблицу по региону. Вторую по городу. Если ничего не нашли то дефолтный тариф.
  3. Добавить текст ошибки, тогда выполнение расчета прервется и вернется BadRequest с текстом ошибки. Это удобно для проверки, например, страховых сумм.

Договоры

  1. Данные из договра. Доступны только данные, для которых в словаре обозначено, что это тарифный фактор. Это сделано, чтобы ограничить контест расчета, и сгенерировать валидатор на процесс квотрирования.
  2. Страховая сумма, премия, франшиза по каждому покрытию.

Типовые решения

Фиксированная премия и страховая сумма по договору.

Например

Страховая сумма = 10000 
Премия = 2000
  1. В схеме договора пометить премию по договору и страховую сумму по объекту страхования как тарифный фактор
  2. Добавить в калькуляторе константы const_premium = 2000, const_si = 10000
  3. В формуле калькультора
1. premium = const_premium
2. sum_insured = const_si

Фиксированный тариф

Например

Тариф = 3%
  1. В схеме договора пометить премию по договору и страховую сумму по объекту страхования как тарифный фактор
  2. Добавить в калькуляторе константы const_premium_tariff = 0.03
  3. В формуле калькультора
2. premium = const_premium_tariff * sum_insured ( + округлить до 2 знаков )

Проверка страховой суммы

В калькуляторе есть опция - если какаято страховая сумма меньше 0, то расчет вернет ошибку - страховая сумма не соответсвует условиям тарифа. Как это можно использовать. Допустим есть ограничение

text
Для возраста 
20-50 СС 10000 - 20000
50-60 СС 5000-10000
  1. добавляет коэффициент SI_VALIDATOR
  2. колонка 1 '<=' 'возраст страхователя'
  3. колонка 2 '>=' 'возраст страхователя'
  4. колонка 3 '<=' 'страховая сумма'
  5. колонка 4 '>=' 'страховая сумма'
  6. если не найдено -1

Загружаем такую таблицу

1234результат
205010000200001
51605000100001
  1. в формуле добавляем строку страховая сумма = страховая сумма * SI_VALIDATOR Теперь есть нарущены условия по страховой сумме, она станет отрицательной и получив такой результат калькулятор вернет ошибку.

Ступенчатый тариф

Есть условие - для СС меньше

Для возраста 
20-50 max СС 10000
50-60 max CC 5000

использовать тарифную таблицу 1, для суммы превышающей 6000 тарифную таблицу 2.

  1. Создаем таблицу 1 и 2. ( tarif 1, tarif 2 )
  2. Создаем таблицу для ограничения по тарифу SI_LIMIT. 20-50 результат 10000, 50-60 результат 5000
  3. страховая сумма SI1 = min (SI, SI_LIMIT ). Если сумма меньше лимита, то сс1 = сумме, иначе лимиту
  4. страховая сумма SI2 = SI - SI1
  5. премия = SI1 * Tarif1 + SI2 * Tarif 2

PxP PoliTech — Direct Insurance Platform