Разработка кредитного калькулятора на 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка кредитного калькулятора на 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка кредитного калькулятора на 1С-Битрикс

Кредитный калькулятор решает задачу проще, чем ипотечный: нет первоначального взноса, нет страховки имущества, но есть своя специфика — типы кредитных продуктов (потребительский, автокредит, кредит наличными), комиссии банков, досрочное погашение. Для бизнеса калькулятор особенно важен: помогает клиенту понять доступность покупки и снимает главное возражение «это дорого».

Виды кредитных продуктов в калькуляторе

Тип Особенности расчёта
Потребительский кредит Аннуитет или дифференцированный, диапазон ставок по сумме/сроку
Автокредит Каско обязательно, возможен trade-in как первый взнос
Кредит наличными Минимум документов, ставка выше
POS-кредит (в магазине) Часто 0% от банка, но с комиссией магазина
Целевой кредит Ставка зависит от категории товара

Формулы расчёта

Аннуитетный платёж (одинаковые платежи, стандарт для большинства кредитов):

function calcAnnuity(amount, annualRate, termMonths) {
    if (annualRate === 0) {
        return amount / termMonths;
    }
    const r = annualRate / 12 / 100;
    return amount * r * Math.pow(1 + r, termMonths) / (Math.pow(1 + r, termMonths) - 1);
}

Дифференцированный платёж (убывающий — первые платежи выше, переплата меньше):

function calcDifferentiated(amount, annualRate, termMonths, monthNumber) {
    const r = annualRate / 12 / 100;
    const principalPart = amount / termMonths;
    const remainingDebt = amount - principalPart * (monthNumber - 1);
    const interestPart  = remainingDebt * r;
    return {
        payment:   principalPart + interestPart,
        principal: principalPart,
        interest:  interestPart,
    };
}

Серверная реализация на PHP

Расчёт на сервере нужен для валидации и передачи данных в CRM:

namespace MyProject\Services;

class CreditCalculator
{
    public static function calculate(
        float $amount,
        float $annualRate,
        int   $termMonths,
        string $type = 'annuity',
        float $commissionPercent = 0
    ): array {
        $commission = $amount * ($commissionPercent / 100);

        if ($type === 'annuity') {
            $monthlyRate = $annualRate / 12 / 100;
            if ($monthlyRate > 0) {
                $payment = $amount * $monthlyRate
                    * pow(1 + $monthlyRate, $termMonths)
                    / (pow(1 + $monthlyRate, $termMonths) - 1);
            } else {
                $payment = $amount / $termMonths;
            }
            $totalPayment  = $payment * $termMonths;
            $totalInterest = $totalPayment - $amount;
        } else {
            // Дифференцированный — берём сумму всех платежей
            $totalPayment = 0;
            $totalInterest = 0;
            $monthlyRate = $annualRate / 12 / 100;
            $principalPart = $amount / $termMonths;
            $remaining = $amount;
            $maxPayment = 0;

            for ($m = 1; $m <= $termMonths; $m++) {
                $interestPart   = $remaining * $monthlyRate;
                $monthPayment   = $principalPart + $interestPart;
                $totalPayment  += $monthPayment;
                $totalInterest += $interestPart;
                $remaining     -= $principalPart;
                $maxPayment     = max($maxPayment, $monthPayment);
            }
            $payment = $maxPayment; // первый (максимальный) платёж
        }

        return [
            'amount'         => $amount,
            'first_payment'  => round($payment, 2),
            'total_payment'  => round($totalPayment + $commission, 2),
            'total_interest' => round($totalInterest, 2),
            'commission'     => round($commission, 2),
            'overpayment'    => round($totalInterest + $commission, 2),
            'effective_rate' => self::calcEffectiveRate($amount, $payment, $termMonths),
        ];
    }

    private static function calcEffectiveRate(float $amount, float $payment, int $termMonths): float
    {
        // Приближение через итерацию (ПСК — полная стоимость кредита)
        $rate = 0.01;
        for ($i = 0; $i < 1000; $i++) {
            $pv = $payment * (1 - pow(1 + $rate, -$termMonths)) / $rate;
            if (abs($pv - $amount) < 0.01) break;
            $rate += ($pv > $amount) ? 0.00001 : -0.00001;
        }
        return round($rate * 12 * 100, 2);
    }
}

Настройка условий через административный интерфейс

Условия кредитования хранятся в HL-блоке CreditConditions:

Поле Тип Описание
UF_BANK_NAME String Название банка / продукта
UF_AMOUNT_FROM Float Минимальная сумма
UF_AMOUNT_TO Float Максимальная сумма
UF_TERM_FROM Int Минимальный срок (мес.)
UF_TERM_TO Int Максимальный срок (мес.)
UF_RATE Float Процентная ставка
UF_COMMISSION Float Комиссия (%)
UF_CALC_TYPE Enum annuity / differentiated

При вводе суммы и срока система автоматически находит подходящие условия и показывает варианты.

Досрочное погашение

Клиент спрашивает: «Если я погашу часть досрочно в третьем месяце, сколько сэкономлю?» — это отдельный расчёт:

public static function withEarlyRepayment(
    float $loanAmount,
    float $annualRate,
    int   $termMonths,
    int   $repaymentMonth,
    float $repaymentAmount,
    string $repaymentType = 'reduce_payment' // или 'reduce_term'
): array {
    // До досрочного погашения
    $schedule1 = self::buildSchedule($loanAmount, $annualRate, $termMonths);

    // Остаток долга после N месяцев
    $remainingDebt = $schedule1[$repaymentMonth - 1]['balance'] - $repaymentAmount;

    if ($repaymentType === 'reduce_term') {
        // Тот же платёж — срок уменьшается
        $newTerm = self::calcTerm($remainingDebt, $annualRate, $schedule1[0]['payment']);
        $schedule2 = self::buildSchedule($remainingDebt, $annualRate, $newTerm);
    } else {
        // Тот же срок — платёж уменьшается
        $newTermMonths = $termMonths - $repaymentMonth;
        $schedule2 = self::buildSchedule($remainingDebt, $annualRate, $newTermMonths);
    }

    return [
        'original_total'   => array_sum(array_column($schedule1, 'interest')),
        'new_total_interest' => array_sum(array_column($schedule2, 'interest')),
        'savings'          => /* разница */,
    ];
}

Сроки

Задача Срок
Базовый калькулятор (аннуитет, форма заявки) 4–7 дней
Полный калькулятор (оба типа платежей, несколько условий, ЭСК) 2–3 недели
Калькулятор с досрочным погашением, сравнением предложений, историей 3–5 недель

Кредитный калькулятор снижает барьер входа: клиент видит конкретную цифру ежемесячного платежа и соотносит её со своими возможностями ещё до разговора с менеджером. Конверсия в заявку у посетителей, воспользовавшихся калькулятором, в среднем в 2–3 раза выше.