События жизненного цикла кредитного контракта
Данный документ описывает ключевые события, возникающие в ходе жизненного цикла кредитного контракта. Каждое событие фиксируется как отдельный объект в системе и отправляется через шину сообщений с указанием 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_ISSUE
CONTRACT_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_CHANGED
CONTRACT_BALANCE_CHANGE_ROLLBACK
CONTRACT_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_CHANGED
CONTRACT_BALANCE_CHANGED
(проценты)CONTRACT_BALANCE_CHANGED
(другие суммы)CONTRACT_REPAYMENT
(если была корректировка)CONTRACT_NEW_SCHEDULE
CONTRACT_BALANCE_CHANGED
(финальное обновление)
Пример тела события:
{
"eventType": "CONTRACT_NEW_SCHEDULE",
"id": 4596,
"firstSchedule": false
}
7. Удаление (откат) операции перерасчета графика
- Событие:
CONTRACT_SCHEDULE_DELETED
- Удалён график - routingKey:
core.entity.contract.schedule_deleted
Генерируется до 4 взаимосвязанных событий:
CONTRACT_BALANCE_CHANGED
CONTRACT_STATUS_CHANGED
CONTRACT_SCHEDULE_DELETED
CONTRACT_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_PROLONGATION
CONTRACT_STATUS_CHANGED
CONTRACT_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_CLOSE
CONTRACT_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_ROLLBACK
CONTRACT_SCHEDULE_DELETED
CONTRACT_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
}