Методика расчётов
Здесь описано, как калькулятор получает каждую цифру: какие формулы применяются, как округляются суммы и почему результат может отличаться от банковского на копейки. Ядро вычислений покрыто тестами: эталонные графики, инвариантные проверки на случайных наборах параметров и граничные случаи.
Денежные величины
Все суммы хранятся и обрабатываются как целые числа копеек. Числа с плавающей точкой для хранения денег не используются: они дают ошибку уже на третьем знаке и накапливают её на длинном графике.
Промежуточные вычисления ведутся в обычных числах, но результат каждого шага округляется до целых копеек математическим округлением: 0,5 копейки — вверх. Перед округлением значение нормализуется до 15 значащих цифр, чтобы двоичная погрешность вида 12345,499999999998 не превращалась в лишнюю копейку.
Начисление процентов за период
Базовый метод — по фактическому числу дней. Проценты за период равны остатку долга, умноженному на годовую ставку и на долю дней периода в году.
Число дней в периоде — фактическое количество календарных дней между предыдущей датой платежа (для первого платежа — датой выдачи) и текущей датой платежа. База — 365 или 366 дней в зависимости от того, високосный ли год. Если период пересекает границу года, он разбивается на части, и каждая считается со своей базой.
Альтернативный метод — равными месяцами: за любой период начисляется ровно 1/12 годовой ставки, независимо от того, сколько в нём дней.
Проценты = Остаток × (Ставка / 100) × ДниВПериоде / ДнейВГоду
Если платёж вносится между датами графика, проценты за неполный период при методе «равными месяцами» делятся пропорционально дням.
Аннуитетный платёж
При начислении «равными месяцами» размер платежа считается по классической формуле аннуитета, где i — месячная ставка, n — число месяцев. При нулевой ставке платёж равен сумме кредита, делённой на срок.
При начислении по фактическим дням классическая формула не годится: она исходит из равных периодов в 1/12 года, а периоды графика различаются длиной — 28 дней в феврале и 31 в марте. Платёж по ней не сходится с начислением, и график заканчивался бы то раньше срока, то втрое увеличенным последним платежом. Поэтому берётся наименьший платёж, при котором долг закрывается ровно за отведённое число периодов с их фактическими длинами. Поиск двоичный по целым копейкам: чем больше платёж, тем меньше остаётся, — функция монотонна. Замкнутой формулы у этой модели нет, потому что платёж может не покрывать начисленные проценты, а неоплаченные проценты не капитализируются.
Из-за этого платёж по фактическим дням отличается от платежа за те же условия при равных месяцах — обычно на несколько рублей. Это не расхождение расчёта, а разные модели начисления: метод указан в кредитном договоре.
Результат округляется до целых копеек вверх: банки округляют платёж вверх, чтобы гарантировать погашение к концу срока. Округление применяется к настоящему остатку, а не к двоичной погрешности возведения в степень. Расхождение между платежом и фактически начисленными процентами поглощается частью основного долга, а последний платёж корректируется так, чтобы остаток стал ровно нулевым.
Платёж = Сумма × i / (1 − (1 + i)^(−n)), i = Ставка / 100 / 12
Формула приведена для метода «равными месяцами». По фактическим дням тот же платёж находится подбором по реальным датам графика — результат тот же по смыслу, но учитывает длину каждого периода.
Дифференцированный платёж
Часть основного долга в каждом платеже постоянна и равна сумме кредита, делённой на число месяцев, с округлением вниз до копейки. Накопленная за счёт округления разница добавляется к последнему платежу.
Проценты начисляются по общим правилам на остаток долга, поэтому платёж уменьшается от месяца к месяцу.
Платёж = Сумма / n + Проценты на остаток
Даты платежей и производственный календарь
Плановая дата платежа — то же число месяца, что и день платежа. Если в месяце меньше дней (например, 31-е в феврале), берётся последний день месяца, а в следующем месяце дата возвращается на своё число.
К плановой дате применяется правило переноса с нерабочего дня: на следующий рабочий день (по умолчанию), на предыдущий рабочий или без переноса. Используется производственный календарь России: нерабочие праздничные дни, перенесённые выходные и рабочие субботы.
Перенос даты меняет число дней в периоде, а значит, и сумму процентов в следующем расчёте.
Для годов, на которые постановление Правительства о переносах ещё не опубликовано, используются нерабочие праздничные дни по статье 112 ТК РФ. Интерфейс отмечает такие расчёты примечанием. Если данных о годе нет совсем, нерабочими считаются только субботы и воскресенья.
Досрочное погашение
Досрочный платёж, попадающий в дату регулярного платежа, применяется после начисления процентов и списания регулярного платежа — вся его сумма идёт в тело долга.
Досрочный платёж между датами платежей: сначала начисляются проценты на остаток за дни с предыдущей даты платежа, они гасятся из суммы досрочки, остаток идёт в тело долга. Следующий регулярный платёж рассчитывается уже от даты досрочки.
В режиме «сократить срок» размер регулярного платежа не меняется, а срок уменьшается за счёт более быстрого погашения остатка. В режиме «уменьшить платёж» дата окончания кредита остаётся исходной, а платёж пересчитывается по формуле аннуитета от нового остатка на оставшееся число периодов; для дифференцированного графика пересчитывается постоянная часть основного долга.
Если сумма досрочки превышает остаток долга вместе с начисленными процентами, кредит закрывается, а излишек показывается отдельно. Регулярные досрочки разворачиваются в набор разовых до начала расчёта.
Полная стоимость кредита
ПСК рассчитывается по методике статьи 6 Федерального закона № 353-ФЗ «О потребительском кредите (займе)». Решается уравнение приведённой стоимости денежных потоков: выдача входит со знаком минус, платежи — со знаком плюс.
Базовый период для ежемесячных платежей — месяц, число базовых периодов в году ЧБП = 12. Величина qk — число полных базовых периодов от выдачи до k-го потока, ek — остаток срока в долях базового периода. Уравнение решается методом бисекции на интервале от 0 до 5 с точностью 1e-9, результат округляется до трёх знаков.
Разовые комиссии при выдаче уменьшают сумму, фактически полученную заёмщиком, и потому увеличивают ПСК.
Σ ДПk / ((1 + ek × i) × (1 + i)^qk) = 0, ПСК = i × ЧБП × 100
В техническом задании формула приведена с опечаткой (ЧБП внутри степени, переставленные qk и ek). Реализована формула в редакции закона — иначе результат не совпадал бы с ПСК из кредитного договора.
Обратные расчёты
Формула аннуитета даёт первое приближение, а ответ уточняется по тому же построителю графика, что и основной расчёт: с фактическими датами, выбранным методом начисления и типом платежа. Иначе «подставить в расчёт» давало бы платёж, отличный от запрошенного, — на девять рублей при комфортных 30 000 ₽, а для дифференцированного графика и на несколько тысяч.
Сумма подбирается наибольшая, при которой платёж не превышает комфортный: у неё платёж совпадает с запрошенным до копейки. Срок и ставка дискретны — срок целый, ставка хранится с двумя знаками, — поэтому берутся наименьший срок и наибольшая ставка, при которых платёж заведомо не выходит за комфортный.
Если платёж меньше процентов за первый период, кредит не будет погашен никогда — расчёт возвращает ошибку с понятным объяснением. Если платежа не хватает даже на предельный срок в 600 месяцев, калькулятор говорит об этом прямо, а не предлагает срок, который сам же не примет.
Что калькулятор не считает
Не моделируются: регулярные страховые платежи (разовая комиссия при выдаче учитывается), плавающие и субсидированные ставки, пени и штрафы за просрочку, кредитные каникулы по закону с их собственными правилами.
Налоговый вычет, материнский капитал и рефинансирование считаются, но на отдельных страницах и по упрощённым правилам: их расчёт не заменяет консультацию и не учитывает всех условий конкретного случая.
Кредитный договор может содержать особые условия округления и начисления, из-за которых график банка отличается на несколько копеек. Если расхождение больше, напишите нам — форма обратной связи не запрашивает суммы и ставки.
Расчёт не сходится с вашим банком?
Расхождение обычно составляет копейки. Если оно больше, проверьте метод начисления процентов и дату первого платежа: когда между выдачей и первым платежом больше или меньше месяца, первый платёж отличается от остальных.
Сообщить о расхождении →