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

Ипотечный калькулятор — один из самых технически насыщенных финансовых инструментов на сайте. В отличие от простого умножения «площадь × цена», здесь работают формулы аннуитетных платежей, учёт первоначального взноса, страховка, дифференцированный vs аннуитетный тип погашения. При этом пользователь ждёт мгновенного ответа — любая задержка воспринимается как ошибка сайта.

Математика: аннуитетный платёж

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

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 секунды взаимодействия с формой — это критерий успешного инструмента.