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

FR (Функциональные требования)

Функциональные требования на создание заявки на досрочное расторжение договора

Область действия

Документ описывает функциональные требования к созданию заявки на досрочное расторжение договора через личный кабинет клиента.

Участники процесса

УчастникРоль
КлиентИнициирует создание заявки
FrontendОтображает форму и отправляет REST-запрос
API GatewayПринимает REST-запрос, валидирует и маппит данные в gRPC
Contract Termination ServiceВыполняет бизнес-проверки и создает заявку
Contract ServiceПредоставляет информацию о договоре
Notification ServiceОтправляет уведомление клиенту

Основной сценарий

  1. Клиент авторизуется в личном кабинете.
  2. Клиент открывает карточку активного договора.
  3. Клиент нажимает “Расторгнуть договор”.
  4. Система открывает форму создания заявки.
  5. Клиент заполняет обязательные поля.
  6. Клиент нажимает “Отправить заявку”.
  7. Frontend отправляет REST-запрос в API Gateway.
  8. API Gateway выполняет техническую валидацию.
  9. API Gateway маппит REST-запрос в gRPC-запрос.
  10. API Gateway вызывает ContractTerminationService.CreateTerminationRequest.
  11. Backend-сервис выполняет бизнес-проверки.
  12. Backend-сервис создает заявку.
  13. API Gateway возвращает фронту номер и статус заявки.
  14. Frontend показывает клиенту сообщение об успешной отправке.

Функциональные требования

FR.01. Отображение действия “Расторгнуть договор”

В карточке договора должна отображаться кнопка “Расторгнуть договор”, если выполняются условия:

УсловиеЗначение
Договор принадлежит авторизованному клиентуДа
Статус договораACTIVE
По договору нет активной заявки на расторжениеДа

Если условие не выполняется, кнопка не отображается или отображается в заблокированном состоянии с поясняющим текстом.

FR.02. Открытие формы заявки

Форма должна содержать поля:

ПолеОбязательностьОписание
Причина расторженияДаВыбор из справочника причин
Желаемая дата расторженияДаДата, с которой клиент хочет расторгнуть договор
БИК банкаДаБанковский идентификационный код
Номер счетаДаСчет для возврата денежных средств
ПолучательДаФИО получателя
КомментарийНетДополнительная информация от клиента
ДокументыНетСписок приложенных документов

FR.03. Валидация формы на Frontend

Frontend должен проверять:

ПроверкаУсловие
Обязательные поляВсе обязательные поля заполнены
Желаемая дата расторженияНе раньше текущей даты
БИК банка9 цифр
Номер счета20 цифр
ПолучательНе пустое значение, не более 255 символов
КомментарийНе более 1000 символов
Количество документовНе более 10 файлов
Размер одного файлаНе более 10 МБ

Фронтовая валидация не заменяет backend-валидацию.

FR.04. Отправка REST-запроса

После нажатия “Отправить заявку” Frontend должен отправить REST-запрос:

POST /api/v1/contracts/{contractId}/termination-requests

FR.05. Проверка авторизации

API Gateway должен принимать запрос только от авторизованного пользователя.

Если пользователь не авторизован, API Gateway должен вернуть HTTP 401 Unauthorized.

FR.06. Техническая валидация на API Gateway

API Gateway должен проверить:

ПроверкаОшибка
contractId передан и соответствует UUIDVALIDATION_ERROR
Тело запроса соответствует JSON-схемеVALIDATION_ERROR
Обязательные поля заполненыVALIDATION_ERROR
Типы данных корректныVALIDATION_ERROR
Передан Idempotency-KeyVALIDATION_ERROR

FR.07. Маппинг REST в gRPC

API Gateway должен преобразовать REST-запрос в gRPC-запрос к методу:

ContractTerminationService.CreateTerminationRequest

Подробный маппинг описан в отдельном артефакте Mapping REST to gRPC.

FR.08. Бизнес-проверки backend-сервиса

ContractTerminationService должен выполнить проверки:

IDПроверкаОшибка
FR.08.01Договор существуетCONTRACT_NOT_FOUND
FR.08.02Договор принадлежит клиентуACCESS_DENIED
FR.08.03Договор находится в статусе ACTIVECONTRACT_NOT_ACTIVE
FR.08.04По договору нет активной заявкиACTIVE_REQUEST_ALREADY_EXISTS
FR.08.05Желаемая дата расторжения не раньше текущей датыINVALID_TERMINATION_DATE
FR.08.06Банковские реквизиты проходят форматную проверкуINVALID_BANK_DETAILS
FR.08.07Документы существуют в файловом хранилище, если переданыDOCUMENT_NOT_FOUND

FR.09. Создание заявки

При успешном прохождении проверок ContractTerminationService должен создать заявку:

АтрибутЗначение
requestIdУникальный UUID заявки
requestNumberЧеловекочитаемый номер заявки
contractIdИдентификатор договора
customerIdИдентификатор клиента
reasonCodeКод причины расторжения
desiredTerminationDateЖелаемая дата расторжения
bankDetailsБанковские реквизиты
commentКомментарий клиента
documentIdsИдентификаторы документов
statusSUBMITTED
createdAtДата и время создания
updatedAtДата и время последнего обновления

FR.10. Возврат результата на Frontend

После успешного создания заявки API Gateway должен вернуть:

ПолеОписание
requestIdUUID заявки
requestNumberНомер заявки
statusСтатус заявки
createdAtДата и время создания
messageТекст для отображения пользователю

FR.11. Отправка уведомления

После создания заявки backend-сервис должен инициировать отправку уведомления клиенту:

Заявка на расторжение договора принята в работу. Номер заявки: {requestNumber}.

Ошибка отправки уведомления не должна откатывать созданную заявку.

FR.12. Идемпотентность

API Gateway должен передавать в gRPC-запрос idempotencyKey, полученный из HTTP-заголовка Idempotency-Key.

Если клиент повторно отправляет запрос с тем же ключом, backend-сервис должен вернуть результат ранее созданной заявки, а не создавать дубль.

FR.13. Логирование

API Gateway и backend-сервис должны логировать:

СобытиеГде логируется
Получение REST-запросаAPI Gateway
Ошибка технической валидацииAPI Gateway
Вызов gRPC-методаAPI Gateway
Ошибка бизнес-валидацииContract Termination Service
Создание заявкиContract Termination Service
Отправка уведомленияContract Termination Service / Notification Service

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