Разработка калькулятора страхования на 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:
// Получение КБМ из внешнего АПИ (упрощённо)
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 (Битрикс24 или встроенный модуль CRM)
- Менеджер верифицирует и выставляет счёт
- Оплата через платёжный шлюз (ЮKassa, 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 месяца |
Страховой калькулятор — это публичное обязательство перед клиентом. Цифра, которую он видит на экране, должна соответствовать реальной стоимости полиса. Расхождение «за счёт дополнительных условий» разрушает доверие и приводит к отказам от оформления.







