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

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Розробка кредитного калькулятора на 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Розробка кредитного калькулятора на 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 рази вища.