Skip to content

Пошаговая инструкция бизнес-процесса

Шаг 1: Инициализация клиента

GET /bs-core/main/clients/init

Описание

Перед созданием клиента необходимо получить его "шаблон" с предзаполненными системными значениями. Возвращает объект клиента с заполненными значениями по умолчанию (например, bureauConsentDate, personalDataConsentDate). Этот объект будет использован в теле запроса на следующем шаге, с перенесенными значениями по умолчанию.

Документация: Инициализация клиента

Параметры запроса

Метод не принимает параметров.

Пример запроса

GET /bs-core/main/clients/init

Пример успешного ответа

Метод вернет JSON-объект клиента. Сохраните его для использования на Шаге 2.


Шаг 2: Создание клиента

POST /bs-core/main/clients

Описание

На этом шаге создается постоянная запись клиента в системе.

Документация: Создание клиента

Параметры запроса

Сформируйте объект клиента на основе данных, полученных в Шаге 1 GET /clients/init.

Важно

Для создания клиента требуется заполнить обязательные поля, указанные в таблице ниже.

Группа полейПараметрОбязательностьТипОписаниеПримечание
ОсновныеfirstNameRstringИмя"Фридрих"
lastNameRstringФамилия"Эберт"
birthDateRdateДата рождения (YYYY-MM-DD)"1982-12-20"
mobilePhoneRstringНомер телефона (только цифры)"797762007719"
sexIdRintИдентификатор пола (101251-М, 101252-Ж)101251
Паспортpassport.noRstringНомер паспорта"07825730"
passport.issueDateRdateДата выдачи (YYYY-MM-DD)"2012-01-23"
АдресaddressData.fiasRstringКод ФИАС для фактического адреса(код из ФИАС, в указанном примере "a0ed83c6-19b1-4d47-8c6d-0d2ed45b36c1")
addressData.fullAddressTextRstringТекстовое представление адреса"г Москва, ул Тверская, д 1, кв 10"
СогласияbureauConsentЗаполнено по умолчанию из initboolСогласие на передачу в КБtrue
bureauConsentDateЗаполнено по умолчанию из initdateДата согласия КБ (YYYY-MM-DD)"2019-04-30"
personalDataConsentЗаполнено по умолчанию из initboolСогласие на обработку ПДнtrue
personalDataConsentDateЗаполнено по умолчанию из initdateДата согласия ПДн (YYYY-MM-DD)"2019-04-30"

Примечания:

  • Поле managerId заполняется обязательно из справочника «Специалисты по займам». (См. пункт – Создание специалиста/менеджера по займам)
  • Поля bureauConsent (согласие на передачу в кредитное бюро) и personalDataConsent (согласие на обработку персональных данных) являются обязательными и предзаполнены из шага инициализации клиента. Есть возможность проверять корректность данных: можно отредактировать дату согласий или оставить в неизменном виде, полученном в шаге 1.
  • Поле "registrationAddressData" (адрес регистрации) в случае необходимости заполняется, иначе передается пустым.

Пример запроса

В примере ниже представлен минимальный набор обязательных полей для создания клиента.

POST /bs-core/main/clients
json
{
  "firstName": "Фридрих", // Имя
  "lastName": "Эберт", // Фамилия
  "birthDate": "1982-12-20", // Дата рождения (YYYY-MM-DD)
  "mobilePhone": "797762007719", // Номер телефона (только цифры)
  "sexId": 101251, // Идентификатор пола (101251-М, 101252-Ж)
  "managerId": 101091, // Идентификатор специалиста по займам (из справочника "Специалисты по займам")
  "passport": {
    // Паспортные данные
    "no": "07825730", // Номер паспорта
    "issueDate": "2012-01-23" // Дата выдачи паспорта (YYYY-MM-DD)
  },
  "addressData": {
    // Адрес фактического проживания
    "fias": "a0ed83c6-19b1-4d47-8c6d-0d2ed45b36c1", // Код ФИАС для фактического адреса
    "fullAddressText": "г Москва, ул Тверская, д 1, кв 10" // Текстовое представление адреса
  },
  "registrationAddressData": {}, // Адрес регистрации (передается пустым, если не требуется)
  "bureauConsent": true, // Согласие на передачу в кредитное бюро (предзаполнено из шага 1)
  "bureauConsentDate": "2019-04-30", // Дата согласия на передачу в КБ (YYYY-MM-DD, предзаполнено из шага 1)
  "personalDataConsent": true, // Согласие на обработку персональных данных (предзаполнено из шага 1)
  "personalDataConsentDate": "2019-04-30" // Дата согласия на обработку ПДн (YYYY-MM-DD, предзаполнено из шага 1)
}

Пример успешного ответа

json
{
  "status": "ok", // Статус ответа
  "timestamp": 1764048282284, // Временная метка ответа
  "data": {
    // Объект созданного клиента
    "id": 41364, // Идентификатор созданного клиента (сохраните для использования на шаге 3)
    "firstName": "Фридрих", // Имя
    "lastName": "Эберт", // Фамилия
    "patronymic": "", // Отчество
    "sexId": 101251, // Идентификатор пола
    "birthDate": "1982-12-20", // Дата рождения
    "deathDate": null, // Дата смерти
    "birthPlace": "", // Место рождения
    "birthCountryId": null, // Идентификатор страны рождения
    "educationId": null, // Идентификатор образования
    "highSchool": "", // Учебное заведение
    "faculty": "", // Факультет
    "studyGraduationYear": "", // Год окончания обучения
    "studyForm": "", // Форма обучения
    "professionId": null, // Идентификатор профессии
    "maritalStatusId": null, // Идентификатор семейного положения
    "dependent": false, // Наличие иждивенцев
    "passport": {
      // Паспортные данные
      "id": 151098, // Идентификатор паспорта
      "seria": "", // Серия паспорта
      "no": "07825730", // Номер паспорта
      "extraNumber": null, // Дополнительный номер
      "issueDate": "2012-01-23", // Дата выдачи
      "closeDate": null, // Дата закрытия
      "manager": "", // Менеджер
      "subdivisionCode": "", // Код подразделения
      "citizenshipId": null, // Идентификатор гражданства
      "complementaryDocTypeId": null // Идентификатор типа дополнительного документа
    },
    "mobilePhone": "797762007719", // Мобильный телефон
    "mobileNumberOwner": null, // Владелец номера телефона
    "additionalPhone": "", // Дополнительный телефон
    "homePhone": "" // Домашний телефон
    // ... остальные поля клиента
  }
}

Сохраните id клиента (значение поля "data.id") — он понадобится для создания заявки на шаге 3.


Шаг 3: Инициализация заявки

GET /bs-core/main/loan-apps/init/client-id/{clientId}

Описание

Инициализация новой заявки на займ для последующего заполнения полей и сохранения. Заявка инициализируется по указанному (созданному в предыдущем шаге) Id клиента. Возвращает объект заявки. Этот объект будет использован в теле запроса на следующем шаге.

Документация: Инициализация заявки

Параметры запроса

{clientId} (integer, обязательный) — уникальный идентификатор клиента, созданного на шаге 2.

Пример запроса

GET /bs-core/main/loan-apps/init/client-id/39208

Пример успешного ответа

Метод вернет JSON-объект заявки на займ. Сохраните его для использования на Шаге 4.


Шаг 4: Добавление кредитного продукта в заявку

POST /bs-core/main/loan-apps/products/{creditProductId}/apply

Описание

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

  1. Указать идентификатор кредитного продукта (creditProductId) в URL запроса.
  2. В теле запроса передать объект заявки, полученный в Шаге 3 (ответ от GET /bs-core/main/loan-apps/init/client-id/{clientId}).

Метод автоматически заполнит поля заявки параметрами из выбранного кредитного продукта (включая creditFieldReq). Полученный ответ с заполненными данными кредитного продукта используется на следующем шаге для создания заявки.

Документация:

МетодURLОписание
GET|HEAD/bs-core/dicts/credit-productsПолучить элементы справочника "Кредитные продукты"
GET|HEAD/bs-core/dicts/credit-products/{id}Получить Кредитный продукт по ID
POST/bs-core/main/loan-apps/products/{creditProductId}/applyАвтоматическое добавление кредитного продукта в заявку

Параметры запроса

{creditProductId} (integer, обязательный) — ID кредитного продукта. Описание создания кредитного продукта см. в разделе Создание кредитного продукта. В примере используется кредитный продукт "Тариф Базовый".

Тело запроса

Используйте ответ метода GET /bs-core/main/loan-apps/init/client-id/{clientId} в шаге 3.

Пример запроса

POST /bs-core/main/loan-apps/products/101704/apply
json
{
  "type": "LoanApplication", // Тип заявки
  "id": null, // Идентификатор заявки. При создании новой заявки - не указывается
  "name": null, // Код заявки
  "externalName": "",
  "creationDate": 1763138367184, // Дата создания в миллисекундах
  "clientId": 39208, // Идентификатор клиента (из шага 2)
  "activitySubtypeId": 1014167, // Идентификатор подтипа деятельности
  "loanTypeId": 101531, // Идентификатор типа займа
  "loanStage": 1, // Ступень займа
  "liabilityId": 101931, // Идентификатор финансового положения
  "creditProductId": null, // Идентификатор кредитного продукта (будет заполнен автоматически методом)
  "creditProductName": "", // Наименование кредитного продукта (будет заполнено автоматически методом)
  "creditFieldReq": {
    // Условия кредита (будут заполнены автоматически из кредитного продукта)
    "id": null, // Идентификатор кредитного продукта
    "dateCalcMethodId": null, // Метод расчета дат
    "allowHolidaysPayment": false, // Не переносить с праздников и выходных
    "shortTermControl": false, // Контроль краткосрочности займа
    "shiftFirstRepaymentDate": true,
    "interestChargeMethodId": null,
    "interestCalcMethodId": null, // Метод расчета процентов
    "repaymentNorm": 0.0, // Норма погашения
    "calcIntOnIssueDate": false, // Начислять проценты в день выдачи контракта (в этом случае проценты начисляются и на первый и на последний день транша)
    "calcInterestOnDelinqBalance": false, // Начислять процента на просроченную ОС
    "calcIntOnDelinqBalanceOnlyAtDelinqIntRate": null,
    "calcArrearInterest": false, // Начислять доп. проценты на просроченную ОС (отдельным видом суммы)
    "arrearInterestFirstDay": 1, // Первый день начисления доп. процентов на просроченную ОС
    "arrearInterestLastDay": 9999, // Последний день начисления доп. процентов на просроченную ОС
    "principalDistribMethodId": null, // Метод распределения основной суммы
    "forepaymentConsiderationMethodId": null, // Метод зачета предоплаты
    "creditLineId": null, // Тип кредитной линии
    "trancheDuration": 0, // Длительность периода между погашениями
    "interestForTranche": 0.0, // Процентная ставка
    "interestRateForPeriodList": [],
    "delinquencyIntRate": 0.0, // Процентная ставка при просрочке
    "delinqIntRateDelay": 0,
    "delinqIntDaysLimit": 0,
    "useDelinqIntRateTillNextTranche": true,
    "keepUsingDelinqIntRate": false,
    "interestRateTypeId": null, // Тип процентной ставки
    "chargeExtraInterest": false, // Начислять проценты по окончанию срока кредита
    "extraIntDaysQty": null,
    "interestLgotPeriod": 0, // Беспроцентный период в днях
    "interestLgotRate": 0.0,
    "interestGracePeriod": 0, // Беспроцентный льготный период (в днях)
    "gracePeriodDefermentMode": "RESTART",
    "trancheCount": 0, // Количество траншей
    "repaymentSequenceId": null, // Порядок погашения
    "mandatoryChargePeriod": 0, // Период обязательного начисления процентов
    "allowPrepayment": false, // Возможно погашение до срока при автоакцепте
    "prolongationPeriod": 0, // Срок пролонгации
    "earlyProlongationFromCurrentDate": false, // Досрочная пролонгация с текущей даты (иначе пролонгация с даты окончания текущего транша)
    "prolongationOnNewSchedule": false,
    "prolongedIntToLastTranche": true,
    "penaltyTypeId": null, // Вид начисления штрафов
    "calendarDaysPenalty": false, // Штраф по календарным дням
    "firstWeekendWithoutPenalty": false, // Первые выходные штрафы не начислять
    "stopPenaltyOnClose": false, // Останавливать штрафы после окончания графика
    "qtyDaysStopPenaltyOnClose": 0, // Кол-во дней после окончания графика до остановки штрафов
    "fixedDelayPenalty": 0.0, // Штраф за опоздание (Фиксированная сумма)
    "delayPenaltyDay": 1, // День просрочки для начисления штрафа за опоздание
    "inviteAmountPct": 0.0, // Процент от суммы выдачи (по которому определяем считать ли другом)
    "inviteDiscountPerFriend": 0.0, // Снижение процентной ставки за каждого друга
    "inviteMinIntRate": 0.0, // Минимальная процентная ставка
    "scheduleRecalcEnabled": false, // Перерасчет графика в дату планового платежа
    "fullScheduleDatesRecalc": false, // Полное смещение графика от фактической даты выдачи
    "useDelinqIntRateForPsk": false,
    "discountingEnabled": false, // Дисконтирование активировано
    "useEirForDiscounting": false,
    "fees": [], // Сборы
    "principalParts": [], // Части основной суммы
    "penaltyRates": [], // Ставки штрафа
    "qtyTranchesFirstPeriod": 0, // Кол-во траншей в 1-м периоде
    "intRateFirstPeriod": 0.0, // Процентная ставка в 1-м периоде
    "qtyTranchesSecondPeriod": 0, // Кол-во траншей в 2-м периоде
    "intRateSecondPeriod": 0.0, // Процентная ставка в 2-м периоде
    "amountSecondPeriod": null,
    "qtyTranchesRepNormSecondPeriod": 0, // Количество траншей для расчета нормы погашения второго периода
    "interestOnLoanAmount": false, // Рассчитывать проценты от суммы в контракте
    "penaltyRatePeriodFrom": "FROM_TRANCHE_REPAYMENT_DATE",
    "agreedRepaymentAmount": null,
    "disableLgotTrancheOnERN": false,
    "penaltyLimitValue": null,
    "penaltyLimitUnit": null,
    "lgotTranchesQty": null,
    "manualIntRateForFullCostCalc": null
  },
  "secondaryCreditProductId": null,
  "secondaryCreditField": null,
  "currencyId": 101011, // Идентификатор валюты заявки
  "loanAmount": 0.0, // Сумма займа
  "subsidyAmount": 0.0, // Сумма субсидии
  "commissionAmount": 0.0, // Сумма комиссии
  "loanDeniedRejectionId": null, // Идентификатор причины отказа
  "creditPurposeId": 101682, // Идентификатор цели кредита
  "creditSecondPurposeId": null,
  "managerId": null, // Специалист по займам
  "mainManagerId": null, // Главный специалист по займам
  "collateralLineId": null,
  "contractName": 0, // Имя контракта. Данное поле заполняется, если нужно знать номер контракта на этапе заявки, когда самого контракта еще нет
  "collateralIds": [], // Идентификатор залогов
  "coborrowers": [], // Созаемщики
  "issueSteps": [], // Этапы выдачи
  "gettingMoneyMethodId": 102396, // Способ получения денег
  "bureauScoringPoint": 0.0, // Скоринговый балл КБ
  "siteName": "", // Номер заявки на сайте
  "ipAddress": "", // IP адрес
  "applyPlace": "", // Место обращения клиента
  "socialNetwork": "", // Социальная сеть (vk; ok; fb)
  "userIDinSocialNetwork": "", // ID пользователя в социальной сети
  "friendsQuantityInSocialNetwork": "", // Количество друзей пользователя в соц. сети
  "mainPhotoLinkOnSocialNetwork": "", // Ссылка на основную фотографию из соц. сети
  "selectedPhotosLinksWithLike": "", // Ссылки на отобранные фотографии с отметкой "Мне нравится" (максимум 100 шт.)
  "selectedPhotosLinksWithMarkedPersons": "", // Ссылки на отобранные фотографии с отмеченными людьми (максимум 100 шт.)
  "groupsListFromSocialNetworks": "", // Список групп из соц. сети (максимум 100 шт.)
  "groupsLinksofFromSocialNetworks": "", // Ссылки на группы из соц. сети (максимум 100 шт.)
  "age": "", // Возраст
  "monthlyIncome": null,
  "monthlyPayment": null,
  "debtRatioCoef": null,
  "personalIncomes": [],
  "tenderName": null, // Название тендера
  "tenderNo": null, // Номер тендера
  "tenderNoticeNo": null, // Номер извещения тендера
  "tenderDelayedAppNo": null, // Номер отложенной заявки тендера
  "tenderPlatformCode": null, // Код площадки
  "repeatedLoan": false, // Повторный займ
  "premiumLoan": false, // Клиент Премиум
  "shopAddressId": null, // Адрес магазина
  "outletId": null,
  "contractorId": null,
  "merchantId": null,
  "consultantId": null,
  "conclusionDate": null, // Дата заключения соглашения
  "signingDate": null, // Дата подписания
  "decisionExpDate": null, // Срок действия решения СБОФ
  "initialInstallment": 0.0, // Первоначальный взнос
  "fullTaxAmount": 0.0,
  "originalLoanApplicationId": null,
  "restructedLoanApplicationId": null,
  "marketingOfferId": null,
  "contractUID": "01f0c196-0bd2-1b9a-a705-eb79bf07c851-0",
  "subrent": null,
  "rentalObjectResidualValue": null
}

Пример успешного ответа

Метод вернет JSON-объект заявки на займ с автоматически заполненными полями кредитного продукта:

  • creditProductId: 101704
  • creditProductName: "Тариф базовый"
  • creditFieldReq: параметры кредитного продукта

Сохраните полученный ответ — он будет использован в теле запроса на Шаге 5.


Шаг 5: Создание заявки на займ

POST /bs-core/main/loan-apps

Описание

На данном шаге выполняется финальное создание заявки на займ. Метод сохраняет все данные, собранные на предыдущих шагах (инициализация заявки из Шага 3 и добавление кредитного продукта из Шага 4).

При успешном создании заявки система автоматически:

  • создает объект Лид через канал поступления "channel": "LOAN_APPLICATION".
  • запускает проверки в СПР (Система принятия решений) согласно настроенной скоринговой схеме.
  • присваивает заявке статус и идентификатор.

Документация: Создание заявки

Параметры запроса

Тело запроса формируется на основе JSON-ответа, полученного в Шаге 4 от метода POST /bs-core/main/loan-apps/products/{creditProductId}/apply.

Инструкция:

  1. Скопируйте весь JSON-объект из ответа Шага 4
  2. Измените значение поля loanAmount с 0.0 на требуемую сумму займа (например, 10000.0)

Пример запроса

http
POST /bs-core/main/loan-apps
Content-Type: application/json

Тело запроса:

json
{
  "type": "LoanApplication",
  "id": null,
  "name": null,
  "externalName": "",
  "creationDate": 1763138367184,
  "clientId": 39208, // Идентификатор клиента (из Шага 2)
  "activitySubtypeId": 1014167,
  "loanTypeId": 101531,
  "loanStage": 1,
  "liabilityId": 101931,
  "creditProductId": 101704, // Идентификатор кредитного продукта (из Шага 4)
  "creditProductName": "Тариф базовый", // Название кредитного продукта (из Шага 4)
  "creditFieldReq": {
    /* ... параметры из Шага 4 ... */
  },
  "currencyId": 101011,
  "loanAmount": 10000.0, // Сумма займа (изменено с 0.0)
  "subsidyAmount": 0.0,
  "commissionAmount": 0.0,
  "creditPurposeId": 101682,
  "managerId": null,
  "gettingMoneyMethodId": 102396,
  "contractUID": "01f0c196-0bd2-1b9a-a705-eb79bf07c851-0"
  /* ... остальные поля из ответа Шага 4 ... */
}

Пример успешного ответа

json
{
  "status": "ok",
  "timestamp": 1764048282284,
  "data": {
    "id": 12345, // Идентификатор созданной заявки
    "name": "LA-2025-001234", // Код заявки
    "clientId": 39208,
    "creditProductId": 101704,
    "loanAmount": 10000.0,
    "loanStage": 1, // Стадия заявки
    "status": "К выдаче" // Статус заявки (зависит от настроек канала)
    /* ... остальные поля заявки ... */
  }
}

Важно

Наличие заполненного id в ответе означает, что заявка успешно создана, лид сформирован, и проверки в СПР пройдены.

Примечания

Статус заявки и контракт

В зависимости от настроек канала поступления лидов, после создания заявки возможны следующие сценарии:

Параметр каналаСтатус заявкиКонтракт
autoCreateContract: true"К выдаче"Создан, но не выдан
autoCreateContract: true
autoIssueContract: true
"Выдан"Создан и выдан
autoCreateContract: false
autoIssueContract: false
"К выдаче"Не создан

Автоматическое создание лида

В рассмотренном примере выше лид автоматически создается через канал "channel": "LOAN_APPLICATION" и проходит по схеме проверок СПР, настроенных на данном канале поступления лидов.

Настройка автоматического создания контракта

Для управления автоматическим созданием и выдачей контракта используйте следующие параметры в настройках канала поступления лида:

  • Автоматическое создание контракта (autoCreateContract):

    • true — контракт будет создан автоматически.
    • false — контракт не будет создан автоматически.
  • Автоматическая выдача контракта (autoIssueContract):

    • true — контракт будет автоматически выдан (требует autoCreateContract: true).
    • false — контракт не будет автоматически выдан.

Примеры настроек:

  • Создание и выдача контракта: "autoCreateContract": true, "autoIssueContract": true.
  • Только создание контракта: "autoCreateContract": true, "autoIssueContract": false.
  • Без автоматического создания: "autoCreateContract": false, "autoIssueContract": false.

Дополнительная информация

Подробнее о настройке каналов поступления, автоматическом создании контрактов и работе со скоринговыми схемами см. раздел документации: Лид, Каналы поступления, Скоринговые схемы (Системы принятия решений).


Обработка ошибок

Если вы столкнулись с ошибками на шаге создания клиента (Шаг 2), вот наиболее вероятные причины:

Код ошибкиПричина
METADATA__EMPTY_REQUIRED_FIELDНе заполнено одно из обязательных полей (имя, фамилия, дата рождения и т.д.)
NO_PASSPORT_ERRORНе указаны или неверно указаны паспортные данные
NO_ADDRESS_ERRORНе указан фактический адрес
NO_MANAGER_ERRORНе указан managerId
NO_BUREAU_CONSENT_DATE_ERRORНе указана дата согласия при переданном bureauConsent: true

Возможное решение: Убедитесь, что в Админ-панели в разделе "Редактор моделей" для сущности "Физическое лицо" (/admin/model-editor/person – метод получение метаданных свойств заданной модели - https://docs.brainysoft.ru/documentation/page/267) не включена излишняя Обязательность для полей, не используемых в данном сценарии.


Полезные ссылки