События жизненного цикла кредитного контракта
Данный документ описывает ключевые события, возникающие в ходе жизненного цикла кредитного контракта. Каждое событие фиксируется как отдельный объект в системе и отправляется через шину сообщений с указанием routingKey и eventType. Особое внимание уделено последовательности и взаимосвязи событий, а также источникам их возникновения.
Общие принципы:
- Все события генерируются в формате
JSON. - Каждое событие содержит поле
eventType, определяющее тип события. - События публикуются в брокере сообщений (RabbitMQ) с соответствующим
routingKey. - Несмотря на логическую последовательность, каждое событие является независимым и обрабатывается отдельно.
1. Создание контракта
- Событие:
CONTRACT_SAVE(CREATED) - Контракт сохранён - routingKey:
core.entity.contract.save - eventType:
CONTRACT_SAVE(в заголовке и теле сообщения) - long id: id контракта
- Modification type:
CREATED
| Параметр | Значение |
|---|---|
| Тип события | CONTRACT_SAVE |
| Ключ маршрутизации | core.entity.contract.save |
| Метод API | POST /main/contracts |
| Условия формирования | Контракт создан, статус — «Новый», заполнено поле creationDate |
Пример тела события:
{
"eventType": "CONTRACT_SAVE",
"id": 4596,
"modificationType": "CREATED"
}
Пояснение:
id— идентификатор контракта.modificationType: CREATED— указывает на создание нового контракта.
2. Редактирование контракта
- Событие:
CONTRACT_SAVE(UPDATED) - Контракт сохранён - routingKey:
core.entity.contract.save - eventType:
CONTRACT_SAVE(в заголовке и теле сообщения) - long id: id контракта
- Modification type:
UPDATED
| Параметр | Значение |
|---|---|
| Тип события | CONTRACT_SAVE |
| Ключ маршрутизации | core.entity.contract.save |
| Метод API | PUT /main/contracts/{id} |
| Условия формирования | Изменение данных контракта до выдачи, статус остаётся «Новый», creationDate не null |
Пример тела события:
{
"eventType": "CONTRACT_SAVE",
"id": 4596,
"modificationType": "UPDATED"
}
Пояснение: Это событие генерируется при любом изменении контракта до его выдачи.
3. Установка статуса «К выдаче»
- Событие:
MAKE_CONTRACT_ISSUE- Контракт к выдаче (ядро) - routingKey:
core.entity.contract.make_contract_issue - eventType:
MAKE_CONTRACT_ISSUE(в заголовке и теле сообщения) - long id: id контракта
| Параметр | Значение |
|---|---|
| Тип события | MAKE_CONTRACT_ISSUE |
| Ключ маршрутизации | core.entity.contract.make_contract_issue |
| Источники | UI (галочка «К выдаче»), Метод API - PUT /main/contracts/{id} |
| Условия формирования | Поле "forIssue": true, и автоматически устанавливается forIssueSetupDate |
Пример тела события:
{
"eventType": "MAKE_CONTRACT_ISSUE",
"id": 4596
}
Важно! При установке признака «К выдаче» одновременно генерируются два события:
MAKE_CONTRACT_ISSUECONTRACT_SAVEсmodificationType: UPDATED
3.1. Установка статуса «К выдаче» при автовыдаче через ЛК
Аналогично предыдущему, но событие инициируется со стороны шлюза ЛК плательщика.
- Событие:
MAKE_CONTRACT_ISSUE - routingKey:
core.entity.contract.make_contract_issue - Логика: Идентична, только источник — внешний сервис.
4. Выдача контракта
Процесс выдачи контракта включает несколько взаимосвязанных, но независимых событий.
4.1. Создание расходного ДДС
- Событие:
FUNDTRANSACTION_SAVE- FundTransaction сохранён - routingKey:
core.entity.fundtransaction.save
| Параметр | Значение |
|---|---|
| Тип события | FUNDTRANSACTION_SAVE |
| API методы | Создаем ДДС POST /fund-transactions?autoaccept=false, затем проводим акцепт POST /fund-transactions/{id}/autoaccept |
Пример тела события:
{
"eventType": "FUNDTRANSACTION_SAVE",
"id": 3762,
"contractId": 4596
}
Пояснение: Данное событие означает создание и акцепт (одобрение) расходного денежного движения средств (ДДС).
4.2. Формирование первого графика платежей
- Событие:
CONTRACT_NEW_SCHEDULE- Создан новый график по контракту - routingKey:
core.entity.contract.new_schedule
| Параметр | Значение |
|---|---|
| Тип события | CONTRACT_NEW_SCHEDULE |
| Условие | После создания, акцепта ДДС и в момент расчёта первичного графика |
Пример тела события:
{
"eventType": "CONTRACT_NEW_SCHEDULE",
"id": 4596,
"firstSchedule": true
}
Пояснение:
firstSchedule: true— это первый график;false— последующий.
4.3. Изменение статуса контракта
- Событие:
CONTRACT_STATUS_CHANGED - routingKey:
core.entity.contract.status_changed - Изменение статуса: с «Нового» на «Обычный» (
contractStatusId: 101281)
Пример тела события:
{
"eventType": "CONTRACT_STATUS_CHANGED",
"id": 4596,
"contractStatusId": 101281,
"statusDate": 1757451600000
}
Пояснение:
statusDate— дата изменения статуса в Unix timestamp (мс).
4.4. Само событие выдачи
- Событие:
CONTRACT_ISSUE- Контракт выдан - routingKey:
core.entity.contract.contract_issue - Условие: Установлена дата выдачи
issueDate
Пример тела события:
{
"eventType": "CONTRACT_ISSUE",
"id": 4596
}
4.5. Изменение статуса лида
- Событие:
LEAD_STATUS_CHANGE- Изменён статус лида - routingKey:
core.entity.lead.status_change - Новый статус:
CONTRACT(контракт выдан)
Пример тела события:
{
"eventType": "LEAD_STATUS_CHANGE",
"id": 7566,
"status": "CONTRACT"
}
Пояснение: Генерируется одновременно с выдачей контракта.
4.6. Изменение баланса по контракту
- Событие:
CONTRACT_BALANCE_CHANGED- Изменение баланса по контракту - routingKey:
core.entity.contract.balance_changed
Пример тела события:
{
"eventType": "CONTRACT_BALANCE_CHANGED",
"contractId": 4596,
"amountTypeIds": [101291],
"operations": [ { "id": 38543, "operDate": 1757505192000 } ]
}
Пояснение:
amountTypeIds— ID видов сумм (например, 101291 — Основной долг). Отражает изменение баланса после выдачи.
5. Изменение баланса: Основные кейсы
5.1. Ночная обработка (Начисление процентов)
- Событие:
CONTRACT_BALANCE_CHANGED - Описание: Ежедневная обработка, начисляются проценты, штрафы и др. Баланс увеличивается.
Пример тела события:
{
"eventType": "CONTRACT_BALANCE_CHANGED",
"contractId": 4596,
"amountTypeIds": [101292],
"operations": [ { "id": 38544, "operDate": 1757538061000 } ]
}
Пояснение:
amountTypeIds: [101292]– вид суммы "Процент".
5.2. Поступление платежа (не в дату платежа)
Генерируются до 2 последовательных событий:
FUNDTRANSACTION_SAVE(создание приходного ДДС)CONTRACT_BALANCE_CHANGED(изменение баланса)
Пояснение: Процесс "Погашение с предоплатой" -> Операция "Предоплата" -> вид суммы "Предоплата по процентам".
5.3. Платёж в дату платежа (погашение)
- Событие:
CONTRACT_REPAYMENT- Погашения по контракту - routingKey:
core.entity.contract.repayment
Генерируется до 6 взаимосвязанных событий:
FUNDTRANSACTION_SAVE(создание приходного ДДС)CONTRACT_STATUS_CHANGED(возможная смена статуса)CONTRACT_BALANCE_CHANGED(списание)CONTRACT_REPAYMENT(фиксация погашения)CONTRACT_BALANCE_CHANGED(дополнительное изменение)CONTRACT_REPAYMENT(погашение ОД и процентов)
5.4. Откат операции (удаление)
- Событие:
CONTRACT_BALANCE_CHANGE_ROLLBACK- Откат изменения баланса - routingKey:
core.entity.contract.balance_change_rollback
Пример тела события:
{
"eventType": "CONTRACT_BALANCE_CHANGE_ROLLBACK",
"contractId": 4596,
"amountTypeIds": [101292],
"operations": [ { "id": 38557, "operDate": 1760205991281 } ]
}
5.5. Откат погашения по приходному ДДС
- Событие:
CONTRACT_REPAYMENT_ROLLBACK- Откат операций погашения - routingKey:
core.entity.contract.repayment_rollback
Генерируется до 3 взаимосвязанных событий:
CONTRACT_STATUS_CHANGEDCONTRACT_BALANCE_CHANGE_ROLLBACKCONTRACT_REPAYMENT_ROLLBACK
Пример тела события:
{
"eventType": "CONTRACT_REPAYMENT_ROLLBACK",
"contractId": 4596,
"amountTypeIds": [101291, 101292],
"operations": [
{ "id": 38554, "operDate": 1760086800000 },
{ "id": 38555, "operDate": 1760086800000 }
]
}
6. Перерасчёт графика (Доп. услуги)
- Событие:
CONTRACT_NEW_SCHEDULE- Создан новый график - routingKey:
core.entity.contract.new_schedule
Поддерживаемые операции: Отсрочка, кредитные каникулы, ЧДП/ПДП, пропуск платежа, растяжка графика.
Генерируется до 6 взаимосвязанных событий:
CONTRACT_STATUS_CHANGEDCONTRACT_BALANCE_CHANGED(проценты)CONTRACT_BALANCE_CHANGED(другие суммы)CONTRACT_REPAYMENT(если была корректировка)CONTRACT_NEW_SCHEDULECONTRACT_BALANCE_CHANGED(финальное обновление)
Пример тела события:
{
"eventType": "CONTRACT_NEW_SCHEDULE",
"id": 4596,
"firstSchedule": false
}
7. Удаление (откат) операции перерасчета графика
- Событие:
CONTRACT_SCHEDULE_DELETED- Удалён график - routingKey:
core.entity.contract.schedule_deleted
Генерируется до 4 взаимосвязанных событий:
CONTRACT_BALANCE_CHANGEDCONTRACT_STATUS_CHANGEDCONTRACT_SCHEDULE_DELETEDCONTRACT_BALANCE_CHANGE_ROLLBACK
Пример тела события:
{
"eventType": "CONTRACT_SCHEDULE_DELETED",
"id": 4596,
"scheduleId": 2689,
"scheduleCreationDate": "2025-10-10"
}
8. Пролонгация по контракту
- Событие:
CONTRACT_PROLONGATION - routingKey:
core.entity.contract.prolongation
Генерируется до 5 взаимосвязанных событий:
CONTRACT_SAVE(UPDATED)CONTRACT_NEW_SCHEDULE(firstSchedule: false)CONTRACT_PROLONGATIONCONTRACT_STATUS_CHANGEDCONTRACT_BALANCE_CHANGED
Пример тела события:
{
"eventType": "CONTRACT_PROLONGATION",
"id": 4596,
"newScheduleCreationDate": "2025-09-11"
}
9. Закрытие (погашение контракта)
- Событие:
CONTRACT_CLOSE- Контракт закрыт - routingKey:
core.entity.contract.close - Условия: Баланс по контракту равен нулю, проставлена дата закрытия (
closeDate).
Статусы закрытия:
101481Погашен101482Реструктурирован101483Списан101484Откорректирован101485Списан по цессии101486Отменён101487На реализацию
Генерируется до 2 взаимосвязанных событий:
CONTRACT_CLOSECONTRACT_BALANCE_CHANGED
Пример тела события:
{
"eventType": "CONTRACT_CLOSE",
"id": 4596,
"closedStatusId": 101485,
"closeDate": 1757609557000
}
10. Реструктуризация контракта
- Событие:
CONTRACT_RESTRUCTURING - routingKey:
core.entity.contract.restructuring
Генерируется сложная цепочка до 22 взаимосвязанных событий, включая закрытие старого контракта, создание нового лида, заявки, контракта и т.д.
Пример тела события:
{
"eventType": "CONTRACT_RESTRUCTURING",
"id": 4597,
"restructuredId": 4521
}
Пояснение:
id: 4597— новый контракт,restructuredId: 4521— закрытый контракт.
11. Удаление контракта
- Событие:
CONTRACT_DELETE- Контракт удален - routingKey:
core.entity.contract.delete - Метод API:
DELETE /main/contracts
Генерируется до 3 событий, если по контракту были операции:
CONTRACT_BALANCE_CHANGE_ROLLBACKCONTRACT_SCHEDULE_DELETEDCONTRACT_DELETE
Пример тела события:
{
"eventType": "CONTRACT_DELETE",
"id": 4597
}
12. Контракт выкуплен по цессии
- Событие:
CONTRACT_INCOMING_CESSION_TRANSFER- Передача по цессии - routingKey:
core.entity.contract.incoming_cession_transfer - Метод API:
/main/contracts/{id}/cession-transfers
Пример тела события:
{
"eventType": "CONTRACT_INCOMING_CESSION_TRANSFER",
"id": 4596
}