README.md

Ипотечный калькулятор на Python

Этот репозиторий рекомендуется рассматривать как продолжение статьи на Хабр “Сокращать срок или платёж - раскрываем черный ящик ипотечного калькулятора”.

Чем может быть полезен скриптовый калькулятор

  • Сравнение множества похожих вариантов, отличающихся 1-2 параметрами. Без необходимости вводить исходные данные несколько раз.
  • Результаты расчёта всех вариантов отображаются друг под другом без необходимости переключения между вкладками.
  • Можно настроить формат вывода под себя.
  • Считать более сложные варианты, например, поэтапную схему как показано в примере использования. Для этого надо добавить всего одну переменную - стоимость промежуточного жилья.
  • Сохранять исходные данные расчётов и по одному клику получать новый расчёт всех вариантов. Может быть актуально если, например, поменялась ставка. Тогда можно пересчитать все варианты жилья изменив процентную ставку только один раз в одном месте.
  • Понимать как устроена ипотека изнутри.
  • Меньше тыкать мышью. Если вам как и мне больше нравится работать с клавиатуры.

Запуск

Код можно запустить прямо в браузере: Binder

Рекомендуется пересчитывать сразу все ячейки, так код гарантированно будет выполнен сверху вниз, в отличие от перезапуска расчёта ячеек в произвольном порядке.

Рекомендуемый способ запуска

Использование

Рассмотрим вариант покупки “базовая вторичка”

print("Базовая вторичка")
cheap_ugly_second_hand = Mortgage(
    property_cost=10_000_000,
    initial_payment=5_000_000,
    annual_interest_rate_percent=15.0,
    amortization_period_years=30,
    actual_monthly_payment=100_000,
    # payments_reducing_duration={7: 520_000},
    payments_reducing_payment={7: 520_000},
)
cheap_ugly_second_hand.print_mortgage_main_info()

Здесь задаём стоимость жилья, первоначальный взнос, процентную ставку, срок ипотеки, планируемый фактический ежемесячный платёж, который должен быть больше либо равен обязательного, и разовые дополнительные досрочные погашения в отдельные месяцы. Например, в 7-м месяце можно получить вычет 520 тысяч и потратить его на досрочное погашение.

Результат получаем в виде текста с краткой информацией о параметрах ипотеки:

Базовая вторичка
Ипотека будет выплачена за 5 лет 8 мес.
Стоимость недвижимости 10 000 000
Первоначальный взнос 5 000 000
Процентная ставка 15.0%
Начальный срок ипотеки 30
Планируемый ежемесячный платеж 100 000
Планируемые разовые платежи снижающие срок:

Планируемые разовые платежи снижающие платёж:
    7 мес: 520 000

и таблицы:

Полных лет Обязательный платёж
1 50 127
2 41 924
3 32 403
4 21 351
5 8 522

В таблице выводится обязательный платёж по прошествии соответствующего полного количества лет. Здесь представлен предельно краткий формат вывода, без разбивки по месяцам, без копеек в суммах платежей и т.д. Если вам интересно посмотреть больше информации, можете адаптировать формат вывода под себя в методе print_mortgage_main_info().

Добавим в сравнение вариант “приемлемая вторичка”

А что если теперь мы захотим сравнить с вариантом покупки более дорогой квартиры, но при этом сохранить предыдущий результат для сравнения? Тогда в новый объект well_enough_second_hand можно скопировать объект cheap_ugly_second_hand, но поменять параметр “стоимость недвижимости”:

print("Приемлемая вторичка")

well_enough_second_hand = replace(
    cheap_ugly_second_hand,
    property_cost=13_000_000,
)

well_enough_second_hand.print_mortgage_main_info()

Можем посчитать и более сложный вариант - покупка той же приемлемой вторички, но после окончания выплаты ипотеки для более дешёвой базовой вторички:

print("Приемлемая вторичка после продажи базовой вторички")

well_enough_after_ugly = replace(
    well_enough_second_hand,
    initial_payment=cheap_ugly_second_hand.property_cost,
    occasional_payments_reducing_period={}, # на втором этапе не получаем льготу
)

well_enough_after_ugly.print_mortgage_main_info()

Здесь нам пришлось поменять уже несколько параметров, т.к. вычетов в последующей ипотеке уже не предполагается, а первоначальный взнос будет равен стоимости базовой вторички. Конечно, к моменту покупки следующего жилья на рынке многое поменяется: ставка, стоимость жилья, зарплаты. Но для простоты считается, что совокупность факторов будет эквивалентна сегодняшнему дню.

И довершим сравнение IT-ипотекой

print("IT-ипотека")

it_mortgage_slavery = replace(
    cheap_ugly_second_hand,
    property_cost=20_000_000,
    annual_interest_rate=0.046,
)

it_mortgage_slavery.print_mortgage_main_info()

Здесь меняется стоимость жилья и процентная ставка, а вычеты остаются такие же, их не меняем.

Если вдруг мы решим отложить побольше денег в резерв или, наоборот, увеличить первоначальный взнос, или банк поменял ставку, или изменилась стоимость объекта, или мы поняли что ежемесячный платеж должен быть другой и так далее, то достаточно внести изменение только в одном месте и вся цепочка расчётов для всех объектов обновится.

Описание

Ипотечный калькулятор на Python позволяет сохранять настройки, легко сравнивать множество похожих вариантов, понимать как это всё считается и добавить любые форматы вывода результатов или экспериментировать с различными стратегиями погашения кредита.

Конвейеры
0 успешных
0 с ошибкой