Калькулятор
Контекст
Контекст калькулятора это список переменных, с которыми можно проводить какие либо действия. Переменные калькулятора
- Константа - переменная, значение которой нельзя менять в процессе работы калькулятора. Нельзя присвоить ей значение. Это может быть, например, премия по договору, или фиксированный тариф.
- Коэффициент - расчетное значение, вычисляемое с помощью тарифной таблицы.
- Переменная - хранилище промежуторного результата расчета
Коэффициенты
Способ получения результата расчета по таблице. Для поиска нужно настроить колонки таблицы. Для настройки кадой колонки указывается, с какими данными из словаря данных эта колонка сравникается и как. Например кужно получить возрастной коэффициент
| Возраст | Результат |
|---|---|
| 20 | 0.1 |
| 30 | 0.2 |
| 40 | 0.3 |
Для этого добавлем колонку 1, значение которой = возраст затрахованного, тип данных число, сортировки нет. Это условие даст нам 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 то есть несколько решений
- перечислить все возможные значения. Иногда можно, иногда будет громоздзко.
- сделать 2 колонки - 1 <= , 2 >=. Явно указать диапазон
- использовать сортировку. В этом случае запрос будет выглядеть
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 таблицу по региону. Вторую по городу. Если ничего не нашли то дефолтный тариф.
- Добавить текст ошибки, тогда выполнение расчета прервется и вернется BadRequest с текстом ошибки. Это удобно для проверки, например, страховых сумм.
Договоры
- Данные из договра. Доступны только данные, для которых в словаре обозначено, что это тарифный фактор. Это сделано, чтобы ограничить контест расчета, и сгенерировать валидатор на процесс квотрирования.
- Страховая сумма, премия, франшиза по каждому покрытию.
Типовые решения
Фиксированная премия и страховая сумма по договору.
Например
Страховая сумма = 10000
Премия = 2000- В схеме договора пометить премию по договору и страховую сумму по объекту страхования как тарифный фактор
- Добавить в калькуляторе константы const_premium = 2000, const_si = 10000
- В формуле калькультора
1. premium = const_premium
2. sum_insured = const_siФиксированный тариф
Например
Тариф = 3%- В схеме договора пометить премию по договору и страховую сумму по объекту страхования как тарифный фактор
- Добавить в калькуляторе константы const_premium_tariff = 0.03
- В формуле калькультора
2. premium = const_premium_tariff * sum_insured ( + округлить до 2 знаков )Проверка страховой суммы
В калькуляторе есть опция - если какаято страховая сумма меньше 0, то расчет вернет ошибку - страховая сумма не соответсвует условиям тарифа. Как это можно использовать. Допустим есть ограничение
Для возраста
20-50 СС 10000 - 20000
50-60 СС 5000-10000- добавляет коэффициент SI_VALIDATOR
- колонка 1 '<=' 'возраст страхователя'
- колонка 2 '>=' 'возраст страхователя'
- колонка 3 '<=' 'страховая сумма'
- колонка 4 '>=' 'страховая сумма'
- если не найдено -1
Загружаем такую таблицу
| 1 | 2 | 3 | 4 | результат |
|---|---|---|---|---|
| 20 | 50 | 10000 | 20000 | 1 |
| 51 | 60 | 5000 | 10000 | 1 |
- в формуле добавляем строку страховая сумма = страховая сумма * SI_VALIDATOR Теперь есть нарущены условия по страховой сумме, она станет отрицательной и получив такой результат калькулятор вернет ошибку.
Ступенчатый тариф
Есть условие - для СС меньше
Для возраста
20-50 max СС 10000
50-60 max CC 5000использовать тарифную таблицу 1, для суммы превышающей 6000 тарифную таблицу 2.
- Создаем таблицу 1 и 2. ( tarif 1, tarif 2 )
- Создаем таблицу для ограничения по тарифу SI_LIMIT. 20-50 результат 10000, 50-60 результат 5000
- страховая сумма SI1 = min (SI, SI_LIMIT ). Если сумма меньше лимита, то сс1 = сумме, иначе лимиту
- страховая сумма SI2 = SI - SI1
- премия = SI1 * Tarif1 + SI2 * Tarif 2