15-01-2019 17:44

Метод для расчета графика в кредитном калькуляторе

POST   /bs-core/main/credit-calculator/calc-schedule

Метод позволяет расчитать (подобрать) сумму займа или кол-во траншей. Для этого метода API добавлены два необязательных булиновых параметра:

  • calcTrancheCount - для расчета кол-ва траншей и
  • calcLoanAmount - для расчета суммы займа.

Если эти параметры не передавать, то кредитный калькулятор работает как обычно. Одновременно нельзя передавать оба параметра, так как рассчитывается либо сумма займа либо кол-во траншей, иначе возвращается ошибка с кодом CANNOT_CALC_TWO_PARAMS_ERROR.

Расчет кол-ва траншей:

POST /bs-core/main/credit-calculator/calc-schedule?calcTrancheCount=true

Расчет суммы займа:

POST /bs-core/main/credit-calculator/calc-schedule?calcLoanAmount=true

Для этих расчетов должна быть указана норма погашения в кредитном калькуляторе (поле repaymentNorm). Для остаточных методов расчета процентов в этом поле должна быть передана норма, к которой стремимся при подборе аннуитета на всех траншах, для комбинированного или простого метода расчета - в этом поле должна быть передана максимальная сумма платежа (ОС + проценты) - сумма платежа первого транша. Для остаточных методов расчета процентов расчет выполняется методом подбора:

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

Нужно учесть что подбор продолжается до тех пор пока разница не будет меньше либо равна значению из константы "Приемлемая разница между нормой погашения последнего и предпоследнего транша", то есть как только мы достигаем приемлемой разницы - выходим из подбора. Также подбор прекращается если разница текущего расчета стала больше разницы предыдущего. В этом случае считаем что предыдущий график являлся наилучшим вариантом. Также подбор прекращается по достижении 1000-ной итерации цикла (чтобы гарантировать отсутствие бесконечных циклов при подборе).

Для комбинированного или простого метода рассчитываем кол-во траншей или сумму займа исходя из нормы погашения (поле repaymentNorm), в котором должна быть передана максимальная сумма платежа (ОС и проценты первого транша). Подразумеваем что ОС должна быть распределена равномерно по всем траншам.

Запрос

POST bs-core/main/credit-calculator/calc-schedule

{
    "loanAmount": "19999",
    "issuePlanDate": "2017-09-05",
    "firstRepaymentDate": "",
    "repaymentPlanDate": "",
    "creditField": {
        "dateCalcMethodId": "101232",
        "allowHolidaysPayment": "true",
        "trancheCount": "12",
        "trancheDuration": "15",
        "repaymentNorm": "0",
        "interestRateTypeId": "101123",
        "interestForTranche": "0.35",
        "interestCalcMethodId": "101222",
        "qtyTranchesFirstPeriod": "0",
        "qtyTranchesSecondPeriod": "12",
        "intRateFirstPeriod": "0.35",
        "intRateSecondPeriod": "0",
        "interestChargeMethodId": 101863,
        "penaltyTypeId": 101271,
        "repaymentSequenceId": 101204,
        "principalParts": [],
        "fees": [],
        "principalDistribMethodId": 101352
    }
}
Описание параметров
Параметр Обязателен Тип данных Описание
loanAmount R [float ] Сумма займа
issuePlanDate R [date ] Плановая дата выдачи (YYYY-MM-DD)
firstRepaymentDate R [date ] Плановая дата первого погашения. (YYYY-MM-DD)
repaymentPlanDate R [date ] Плановая дата последнего погашения (закрытия) (YYYY-MM-DD)
creditField R [object ] Параметры кредитного продукта.

В данном случае можно передавать весь массив коллекции. В качестве примера указаны лишь некоторые параметры кредитного продукта.

 
creditField.dateCalcMethodId М [int ] Метод расчета дат
creditField.allowHolidaysPayment М [bool ] Не переносить с праздников и выходных.
creditField.trancheCount М [int ] Количество траншей.
creditField.trancheDuration М [int ] Длительность периода между погашениями.
creditField.repaymentNorm М [float ] Норма погашения
creditField.interestRateTypeId М [int ]  
creditField.interestForTranche М [float ] Процентная ставка.
creditField.interestCalcMethodId М [string][20]

Метод расчета процентов

creditField.qtyTranchesFirstPeriod М [ ] Количество траншей в 1-м периоде
creditField.qtyTranchesSecondPeriod М [ ] Количество траншей во 2-м периоде
creditField.intRateFirstPeriod М [ ] Процентная ставка в 1-м периоде
creditField.intRateSecondPeriod М [ ] Процентная ставка во 2-м периоде
creditField.interestChargeMethodId М [int ] Метод начисления процентов.
creditField.penaltyTypeId М [int ] Вид начисления штрафов.
creditField.repaymentSequenceId М [int ] Порядок погашения.
creditField.principalParts М [collection ] Части основной суммы.
creditField.fees М [collection ] Сборы
creditField.principalDistribMethodId М [int][20]

Метод распределения основной суммы

Ответ


                        {
    "status": "ok",
    "timestamp": 1504681579307,
    "data": {
        "id": null,
        "creationDate": 1504569600000,
        "amount": 19999,
        "chargeIssueFee": true,
        "specifiedRepaymentNorm": 0,
        "issued": false,
        "activeBefore": null,
        "tranches": [
            {
                "id": null,
                "issueDate": "2017-09-05",
                "repaymentDate": "2017-09-20",
                "principal": 1238.37,
                "interest": 1049.95,
                "lgot": false,
                "eachRepaymentFee": 0,
                "rest": 18760.63
            },
            {
                "id": null,
                "issueDate": "2017-09-20",
                "repaymentDate": "2017-10-05",
                "principal": 1303.39,
                "interest": 984.93,
                "lgot": false,
                "eachRepaymentFee": 0,
                "rest": 17457.24
            },
            {
                "id": null,
                "issueDate": "2017-10-05",
                "repaymentDate": "2017-10-20",
                "principal": 1371.81,
                "interest": 916.51,
                "lgot": false,
                "eachRepaymentFee": 0,
                "rest": 16085.43
            },
            {
                "id": null,
                "issueDate": "2017-10-20",
                "repaymentDate": "2017-11-04",
                "principal": 1443.83,
                "interest": 844.49,
                "lgot": false,
                "eachRepaymentFee": 0,
                "rest": 14641.6
            },
            {
                "id": null,
                "issueDate": "2017-11-04",
                "repaymentDate": "2017-11-19",
                "principal": 1519.64,
                "interest": 768.68,
                "lgot": false,
                "eachRepaymentFee": 0,
                "rest": 13121.96
            },
            {
                "id": null,
                "issueDate": "2017-11-19",
                "repaymentDate": "2017-12-04",
                "principal": 1599.42,
                "interest": 688.9,
                "lgot": false,
                "eachRepaymentFee": 0,
                "rest": 11522.54
            },
            {
                "id": null,
                "issueDate": "2017-12-04",
                "repaymentDate": "2017-12-19",
                "principal": 1683.39,
                "interest": 604.93,
                "lgot": false,
                "eachRepaymentFee": 0,
                "rest": 9839.15
            },
            {
                "id": null,
                "issueDate": "2017-12-19",
                "repaymentDate": "2018-01-03",
                "principal": 1771.76,
                "interest": 516.56,
                "lgot": false,
                "eachRepaymentFee": 0,
                "rest": 8067.39
            },
            {
                "id": null,
                "issueDate": "2018-01-03",
                "repaymentDate": "2018-01-18",
                "principal": 1864.78,
                "interest": 423.54,
                "lgot": false,
                "eachRepaymentFee": 0,
                "rest": 6202.61
            },
            {
                "id": null,
                "issueDate": "2018-01-18",
                "repaymentDate": "2018-02-02",
                "principal": 1962.68,
                "interest": 325.64,
                "lgot": false,
                "eachRepaymentFee": 0,
                "rest": 4239.93
            },
            {
                "id": null,
                "issueDate": "2018-02-02",
                "repaymentDate": "2018-02-17",
                "principal": 2065.72,
                "interest": 222.6,
                "lgot": false,
                "eachRepaymentFee": 0,
                "rest": 2174.21
            },
            {
                "id": null,
                "issueDate": "2018-02-17",
                "repaymentDate": "2018-03-04",
                "principal": 2174.21,
                "interest": 114.15,
                "lgot": false,
                "eachRepaymentFee": 0,
                "rest": 0
            }
        ]
    }
}
                    
Описание параметров
Параметр Обязателен Тип данных Описание
id R [int] Идентификатор графика по контракту 
creationDate R [timestamp] Дата создания
amount R [float ] Сумма займа
chargeIssueFee R [bool] Коммисия
specifiedRepaymentNorm R [ ] Норма погашения
issued R [bool] Выдан Да/Нет
activeBefore R [ ] До какой даты действителен график
tranches R [collection] Транши
tranches._.id R [ ] Идентификатор транша
tranches._.issueDate R [date] Дата начала транша
tranches._.repaymentDate R [date] Дата завершения траша
tranches._.principal R [float] Основной долг
tranches._.interest R [float] Проценты
tranches._.lgot R [bool] Логотный период ДА/НЕТ
tranches._.eachRepaymentFee R [ ] Сумма погашения ОС+%
tranches._.rest R [float] Сумма остатока задолженности по основному долгу