Розробка калькулятора страхування на 1С-Бітрікс
Калькулятор страхування — це конверсійний інструмент із високою відповідальністю: користувач приймає рішення про фінансовий захист, спираючись на показану цифру. Якщо калькулятор помиляється або дає нереалістичні значення, клієнт іде до конкурента. Правильна реалізація вимагає точної математики, актуальних тарифів із бази та плавного UX, який не стомлює кількістю запитань.
Види страхових продуктів для калькулятора
| Продукт | Ключові параметри | Формула |
|---|---|---|
| ОСЦПВ (ОСАГО) | Потужність двигуна, регіон, КБМ, стаж | Базова ставка × набір коефіцієнтів |
| КАСКО | Марка, модель, рік, вартість авто, опції | Відсоток від вартості з коефіцієнтами |
| ДМС | Вік, набір послуг, регіон, кількість осіб | Базова ставка × віковий коефіцієнт |
| Нерухомість | Тип, площа, матеріал стін, регіон | Ставка × страхова сума |
| Життя і здоров'я | Вік, професія, страхова сума, термін | Актуарні таблиці |
Архітектура тарифних таблиць
Страхові тарифи змінюються — іноді кілька разів на рік. Жорстке кодування в PHP виключено. Усе зберігається в базі даних.
Для простих продуктів — HighLoad-блок InsuranceTariffs:
| Поле | Тип | Опис |
|---|---|---|
UF_PRODUCT_TYPE |
Enum | Тип страхового продукту |
UF_PARAM_KEY |
String | Ключ параметра (region_code, power_from тощо) |
UF_PARAM_VALUE |
String | Значення параметра |
UF_COEFFICIENT |
Float | Коефіцієнт (для множників) |
UF_BASE_RATE |
Float | Базова ставка (для базових тарифів) |
UF_VALID_FROM |
Date | Дата початку дії |
UF_VALID_TO |
Date | Дата закінчення дії (NULL = безстроково) |
Розрахунок ОСЦПВ: приклад реалізації
ОСЦПВ — найскладніший розрахунок через велику кількість коефіцієнтів регулятора:
namespace MyProject\Services\Calculators;
class OsagoCalculator
{
// Коефіцієнти за потужністю двигуна (таблиця регулятора)
private const KM_COEFFICIENTS = [
50 => 0.6,
70 => 1.0,
100 => 1.1,
120 => 1.2,
150 => 1.4,
PHP_INT_MAX => 1.6,
];
public static function calculate(
float $baseTariff, // базовий тариф для категорії ТЗ
int $horsePower, // потужність двигуна
float $kbm, // коефіцієнт бонус-малус (0.5–2.45)
float $kt, // коефіцієнт регіону
int $driversCount, // кількість водіїв
int $minDriverAge, // мінімальний вік водія
int $minDriverExp // мінімальний стаж водія
): array {
$km = self::getPowerCoefficient($horsePower);
$kvs = self::getAgeExpCoefficient($minDriverAge, $minDriverExp);
$ko = $driversCount === 0 ? 1.87 : 1.0; // без обмежень водіїв
$premium = $baseTariff * $kbm * $kt * $km * $kvs * $ko;
return [
'base_tariff' => $baseTariff,
'premium' => round($premium, 2),
'coefficients' => [
'KBM' => $kbm,
'KT' => $kt,
'KM' => $km,
'KVS' => $kvs,
'KO' => $ko,
],
'valid_days' => 365,
];
}
private static function getPowerCoefficient(int $horsePower): float
{
foreach (self::KM_COEFFICIENTS as $maxPower => $coef) {
if ($horsePower <= $maxPower) {
return $coef;
}
}
return 1.6;
}
private static function getAgeExpCoefficient(int $age, int $experience): float
{
// Таблиця регулятора: вік × стаж
if ($age < 22 && $experience < 3) return 1.87;
if ($age < 22) return 1.66;
if ($experience < 3) return 1.04;
return 1.0;
}
}
КБМ (бонус-малус) — довідкова інтеграція
Актуальний КБМ водія повинен братися з бази даних союзу страховиків. Страхові компанії інтегруються з базою через API:
// Отримання КБМ із зовнішнього API (спрощено)
public static function getKbmFromRsa(string $driverLicense, string $birthDate): float
{
$apiUrl = 'https://api.rsa.ru/kbm/';
$response = (new \GuzzleHttp\Client())->post($apiUrl, [
'json' => [
'license' => $driverLicense,
'birthDate' => $birthDate,
'token' => config('rsa_api_token'),
],
]);
$data = json_decode($response->getBody(), true);
return (float)($data['kbm'] ?? 1.0);
}
Якщо інтеграція з реєстром неможлива — калькулятор приймає КБМ від користувача (клас страхування) з поправкою на верифікацію при оформленні поліса.
Онлайн-оформлення поліса
Після розрахунку — форма для отримання поліса:
- Користувач підтверджує розрахунок і вводить дані (паспорт, документи на авто)
- Дані передаються до CRM (Bitrix24 або вбудований модуль CRM)
- Менеджер верифікує та виставляє рахунок
- Оплата через платіжний шлюз (YooKassa, CloudPayments)
- Поліс відправляється на email через
\Bitrix\Main\Mail\Event
Регулярне оновлення тарифів
Страхові тарифи оновлюються через адміністративний інтерфейс. Для критичних даних (базовий тариф регулятора) — імпорт із XML-файлу через агент Бітрікс:
// Агент оновлення тарифів
function updateInsuranceTariffs(): string
{
$xml = simplexml_load_file('https://cbr.ru/insurance/tariffs.xml');
// парсинг і оновлення в HL-блоці
TariffUpdater::importFromCbr($xml);
return '\updateInsuranceTariffs();'; // плануємо наступний запуск
}
Терміни
| Завдання | Термін |
|---|---|
| Простий калькулятор (1 продукт, ручні тарифи, форма заявки) | 1–1.5 тижні |
| Калькулятор ОСЦПВ із коефіцієнтами регулятора, тарифи в БД, інтеграція з CRM | 3–5 тижнів |
| Повний страховий калькулятор (кілька продуктів, інтеграція з реєстром, онлайн-оформлення) | 2–4 місяці |
Страховий калькулятор — це публічне зобов'язання перед клієнтом. Цифра, яку він бачить на екрані, повинна відповідати реальній вартості поліса. Розбіжність «через додаткові умови» руйнує довіру та призводить до відмов від оформлення.







