Розробка іпотечного калькулятора на 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С-Бітрікс

Іпотечний калькулятор — один з найтехнічно насичених фінансових інструментів на сайті. На відміну від простого множення «площа × ціна», тут працюють формули ануїтетних платежів, урахування першого внеску, страховка, диференційований проти ануїтетного типу погашення. При цьому користувач очікує миттєвої відповіді — будь-яка затримка сприймається як помилка сайту.

Математика: ануїтетний платіж

Ануїтетний платіж — однакова сума щомісяця. Формула:

P = S × r / (1 - (1 + r)^(-n))

Де:

  • P — щомісячний платіж
  • S — сума кредиту (вартість − перший внесок)
  • r — місячна процентна ставка (річна ÷ 12 ÷ 100)
  • n — кількість місяців

Реалізація на PHP:

namespace MyProject\Services;

class MortgageCalculator
{
    public static function calculate(
        float $propertyPrice,
        float $downPayment,
        float $annualRate,
        int   $termYears
    ): array {
        $loanAmount  = $propertyPrice - $downPayment;
        $termMonths  = $termYears * 12;
        $monthlyRate = $annualRate / 12 / 100;

        if ($monthlyRate == 0) {
            // Безвідсоткова розстрочка (рідко, але буває)
            $monthlyPayment = $loanAmount / $termMonths;
        } else {
            $monthlyPayment = $loanAmount
                * $monthlyRate
                * pow(1 + $monthlyRate, $termMonths)
                / (pow(1 + $monthlyRate, $termMonths) - 1);
        }

        $totalPayment   = $monthlyPayment * $termMonths;
        $totalInterest  = $totalPayment - $loanAmount;
        $overpaymentPct = ($totalInterest / $loanAmount) * 100;

        return [
            'loan_amount'        => round($loanAmount, 2),
            'monthly_payment'    => round($monthlyPayment, 2),
            'total_payment'      => round($totalPayment, 2),
            'total_interest'     => round($totalInterest, 2),
            'overpayment_pct'    => round($overpaymentPct, 1),
            'down_payment_pct'   => round(($downPayment / $propertyPrice) * 100, 1),
        ];
    }

    public static function buildPaymentSchedule(
        float $loanAmount,
        float $annualRate,
        int   $termMonths
    ): array {
        $schedule     = [];
        $monthlyRate  = $annualRate / 12 / 100;
        $monthlyPayment = $loanAmount
            * $monthlyRate
            * pow(1 + $monthlyRate, $termMonths)
            / (pow(1 + $monthlyRate, $termMonths) - 1);

        $balance = $loanAmount;

        for ($month = 1; $month <= $termMonths; $month++) {
            $interestPayment = $balance * $monthlyRate;
            $principalPayment = $monthlyPayment - $interestPayment;
            $balance -= $principalPayment;

            $schedule[] = [
                'month'     => $month,
                'payment'   => round($monthlyPayment, 2),
                'principal' => round($principalPayment, 2),
                'interest'  => round($interestPayment, 2),
                'balance'   => round(max($balance, 0), 2),
            ];
        }

        return $schedule;
    }
}

Графік платежів: таблиця та діаграма

Повний графік погашення — конкурентна перевага. Користувач бачить, як зменшується основний борг, скільки йде на відсотки в різні періоди. Для візуалізації використовуються Chart.js або ApexCharts — легкі бібліотеки без зайвих залежностей.

// Дані для діаграми надходять з сервера через AJAX
async function updateChart(params) {
    const response = await fetch('/ajax/mortgage/schedule/', {
        method: 'POST',
        body: new URLSearchParams({ ...params, sessid: BX.bitrix_sessid() }),
    });
    const data = await response.json();

    if (!data.success) return;

    // Групуємо по роках для діаграми
    const years = [];
    const principalByYear = [];
    const interestByYear  = [];

    data.schedule.forEach((month, i) => {
        const yearIndex = Math.floor(i / 12);
        if (!years[yearIndex]) {
            years[yearIndex] = `Рік ${yearIndex + 1}`;
            principalByYear[yearIndex] = 0;
            interestByYear[yearIndex]  = 0;
        }
        principalByYear[yearIndex] += month.principal;
        interestByYear[yearIndex]  += month.interest;
    });

    renderStackedBarChart(years, principalByYear, interestByYear);
}

Урахування страховки

Банки вимагають страховку. Калькулятор повинен показувати реальну вартість:

  • Страхування майна — 0.1–0.5% від вартості нерухомості на рік
  • Страхування життя та здоров'я — 0.3–1.5% від суми боргу (опціонально, але знижує ставку)
  • Страхування титулу — актуально для вторинного ринку
$annualInsurance = $loanAmount * ($insuranceRate / 100);
$monthlyInsurance = $annualInsurance / 12;
$totalMonthlyPayment = $monthlyPayment + $monthlyInsurance;

Порівняння банків

Для агрегаторів і сайтів забудовників — таблиця порівняння пропозицій кількох банків. Дані зберігаються в HL-блоці й оновлюються менеджером:

Банк Ставка Перший внесок Термін
Банк А 8.5% від 15% до 30 років
Банк Б 7.9% від 20% до 25 років
Банк В 9.1% від 10% до 30 років

Інтеграція з формою заявки

Результат розрахунку передається у форму заявки як приховані поля — менеджер бачить, що клієнт розглядав:

document.getElementById('submit-btn').addEventListener('click', () => {
    document.getElementById('hidden-loan-amount').value  = currentResult.loan_amount;
    document.getElementById('hidden-monthly-pay').value  = currentResult.monthly_payment;
    document.getElementById('hidden-annual-rate').value  = currentParams.annualRate;
    document.getElementById('hidden-term-years').value   = currentParams.termYears;
});

Терміни

Завдання Термін
Базовий калькулятор (ануїтет, основні поля, форма заявки) 5–8 днів
Калькулятор з графіком платежів, діаграмою, урахуванням страховки 2–3 тижні
Повноцінний іпотечний агрегатор з кількома банками, збереженням розрахунків 4–6 тижнів

Іпотечний калькулятор працює, коли математика правильна, а UX не лякає. Клієнт повинен отримати відповідь за 2–3 секунди взаємодії з формою — це критерій успішного інструменту.