Перейти к основному содержимому

События жизненного цикла кредитного контракта

Данный документ описывает ключевые события, возникающие в ходе жизненного цикла кредитного контракта. Каждое событие фиксируется как отдельный объект в системе и отправляется через шину сообщений с указанием 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
Метод APIPOST /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
Метод APIPUT /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
}

Важно! При установке признака «К выдаче» одновременно генерируются два события:

  1. MAKE_CONTRACT_ISSUE
  2. 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 последовательных событий:

  1. FUNDTRANSACTION_SAVE (создание приходного ДДС)
  2. CONTRACT_BALANCE_CHANGED (изменение баланса)

Пояснение: Процесс "Погашение с предоплатой" -> Операция "Предоплата" -> вид суммы "Предоплата по процентам".

5.3. Платёж в дату платежа (погашение)

  • Событие: CONTRACT_REPAYMENT - Погашения по контракту
  • routingKey: core.entity.contract.repayment

Генерируется до 6 взаимосвязанных событий:

  1. FUNDTRANSACTION_SAVE (создание приходного ДДС)
  2. CONTRACT_STATUS_CHANGED (возможная смена статуса)
  3. CONTRACT_BALANCE_CHANGED (списание)
  4. CONTRACT_REPAYMENT (фиксация погашения)
  5. CONTRACT_BALANCE_CHANGED (дополнительное изменение)
  6. 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 взаимосвязанных событий:

  1. CONTRACT_STATUS_CHANGED
  2. CONTRACT_BALANCE_CHANGE_ROLLBACK
  3. 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 взаимосвязанных событий:

  1. CONTRACT_STATUS_CHANGED
  2. CONTRACT_BALANCE_CHANGED (проценты)
  3. CONTRACT_BALANCE_CHANGED (другие суммы)
  4. CONTRACT_REPAYMENT (если была корректировка)
  5. CONTRACT_NEW_SCHEDULE
  6. CONTRACT_BALANCE_CHANGED (финальное обновление)

Пример тела события:

{
"eventType": "CONTRACT_NEW_SCHEDULE",
"id": 4596,
"firstSchedule": false
}

7. Удаление (откат) операции перерасчета графика

  • Событие: CONTRACT_SCHEDULE_DELETED - Удалён график
  • routingKey: core.entity.contract.schedule_deleted

Генерируется до 4 взаимосвязанных событий:

  1. CONTRACT_BALANCE_CHANGED
  2. CONTRACT_STATUS_CHANGED
  3. CONTRACT_SCHEDULE_DELETED
  4. 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 взаимосвязанных событий:

  1. CONTRACT_SAVE (UPDATED)
  2. CONTRACT_NEW_SCHEDULE (firstSchedule: false)
  3. CONTRACT_PROLONGATION
  4. CONTRACT_STATUS_CHANGED
  5. 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 взаимосвязанных событий:

  1. CONTRACT_CLOSE
  2. 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 событий, если по контракту были операции:

  1. CONTRACT_BALANCE_CHANGE_ROLLBACK
  2. CONTRACT_SCHEDULE_DELETED
  3. 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
}