Создание и подача заявки клиентом#
Пользователи процесса#
- Пользователь с ролью CUSTOMER
Предусловия#
- Пользователь клиента авторизован в системе
- У роли пользователя есть право SUBMIT_ORDER
Точки входа#
- Кнопка создания новой заявки в списке заявок.md
Варианты завершения#
- В системе сохранена заявка в статусе DRAFT
- В системе сохранена заявка в статусе NEW. На email исполнителя отправлено письмо о поступлении новой заявки.
- Заявка удалена из системы
Процесс#
Общий вид#
См. диаграмму по ссылке
| # | Шаг |
|---|---|
| 1 | Пользователь открывает ранее сохраненный черновик или создает новую заявку, выбирает её тип. |
| 2 | Система создает новую заявку на бэк, показывает форму создания заявки в режиме редактирования. |
| 3 | Пользователь заполняет поля заявки. |
| 3.1 | Если пользователь добавляет вложения, система сохраняет вложения сразу на бэк |
| 3.2 | Если пользователь удаляет вложение, система помечает файлы как удаленные (файлы не удаляет), и не отображает их на форме. |
| 4 | Система пересчитывает значения расчетных полей, обновляет их на форме. |
| 5 | Пользователь нажимает Отправить заявку. |
| 6.1 | Если пользователь нажимает Сохранить, система проверяет формат полей и если ошибок нет сохраняет заявку в БД, в статусе DRAFT. Показывает сообщение об успешном сохранении. если ошибки есть - подсвечивает их. Возврат к шагу 3 |
| 6.2 | Если пользователь нажимает Удалить заявку, система удаляет заявку в БД, и все файлы вложений. Показывает список заявок и сообщение об успешном удалении. Конец сценария |
| 7. | Система делает недоступными все поля, кнопки и ссылки на форме, на всех закладках. Показывает лоадер на кнопке |
| 8. | Система проверят формат полей |
| 8а. | Если есть ошибки, система подсвечивает поля с ошибками. Конец процесса. |
| 9. | Система сохраняет заявку БД |
| 10. | Система проверят заполнение обязательных полей |
| 10а. | Если есть ошибки, система подсвечивает поля с ошибками. Конец процесса. |
| 11. | Система проверят обязательные вложения. |
| 11a. | Если не все обязательные вложения присутствуют, система показывает сообщение об ошибке. Конец процесса. |
| 12. | Система обновляет поля заявки и статус на NEW |
| 13. | Система отправляет сообщение исполнителю |
| 14. | Система закрывает заявку, показывает список заявок и сообщение об успешной отправке |
Особенности процесса#
- Может быть создано два типа заявки: на отправку денег и на получение денег. В зависимости от типа, меняются только лейблы и подсказки некоторых элементов формы. Описано в разделе интерфейс для элементов к которым это применимо.
- При добавлении вложений пользователем, система сразу сохраняет их на бэке
- При удалении вложений пользователем, в системе они не удаляются, только помечаются на удаление.
- При удалении черновика заявки пользователем, в системе удаляется и заявка и все её вложения.
- Расчетные поля заявки пересчитываются системой при изменении пользователем значений от которых они зависят.
- При активации текстовых полей, показывается всплывающий хинт с подсказкой о формате. Текст указан в разделе поля заявки для полей к которым это применимо.
- Если система при валидации перед отправкой заявки отловила ошибку формата, то под полем показывается сообщение с таким же текстом как и в хинте.
Особенности сабмита формы
- пользователь может сохранить заявку, даже если он не заполнил все обязательные поля
- при сохранении (и, опосредованно, при отправке, так как отправка тригерит сохранение) валидируются заполненные поля на соответстиве типам и паттернам.
- при отрпавке заявки проверяется заполнены ли все обязательные поля
- нельзя сохранить заявку, если в ней есть заполненные поля, чьё содержимое не отвечает требованиям
- можно сохранить заявку, если в ней не заполнены обязательные поля
- нельзя отправить заявку, если в ней не заполнены обязательные поля
Создание новой заявки#
- Пользователь нажимает на кнопку
Создать заявкув списке заявок, -
Система показывает выпадашку:
- Отправка денег
- Получение денег
-
Пользователь выбирает нужный пункт
- Если пользователь связан с несколькими клиентами, система показывает модалку с полем для выбора клиента. Модалка аналогична модалке при создании экспортной заявки Исполнителем. В поле выбора клиента отображаются только активные клиенты, связанные с пользователем.
- Система сохраняет пустую заявку в БД для (без выполнения проверок полей и вложений).
- Показывает форму создания новой заявки в режиме редактирования
- все поля доступны для изменения
- отображается кнопка
Сохранить:Сохранитьстановится доступна только после изменения значения полей заявки.- при нажатии
Сохранитьсистема сохраняет заявку, возвращает форму в режим просмотра
Открытие заявки в статусе "Черновик" на редактирование#
- Пользователь кликает на строке заявки в статусе DRAFT в списке заявок,
-
Система открывает его в режиме просмотра:
- все поля недоступны для изменения
- доступна кнопка
Радактировать
-
Пользователь нажимает кнопку
Радактировать, система показывает форму в режиме редактирования:- все поля доступны для изменения
- отображаются кнопки
ОтменитьиСохранить.Сохранитьстановится доступна только после изменения значения полей заявки.- при нажатии
Сохранитьсистема сохраняет заявку, возвращает форму в режим просмотра - при нажатии
Отменить, система сбрасывает изменения и возвращает форму в режим просмотра.
Интерфейс#
Ссылка возврата на список Заявок#
При клике на ссылку "<- Заявки", система показывает браузерный алерт с предупреждением о том, что введенные значения не сохранятся. Если пользователь подтвердил действие, система показывает список заявок. В таблице сохраняется примененные фильтры и активная страница.
Заголовок#
- В зависимости от типа заявки:
Импортная заявкаЭкспортная заявка
- Если заявка создана в результате закрытия рекламации)
(существует рекламация, у которой в
complaint.reExecutionOrderссылка на текущую заявку):- под заголовком отображается ссылка на заявку, к которой привязана такая рекламация.
- текст ссылки
Первоначальная заявка
- Если в заявке есть рекламация, в результате закрытия котрой была создана заявка на переисполнение (в рекламации заполнено
complaint.reExecutionOrder):- под заголовком отображается ссылка на эту заявку (если таких заявок несколько - на последнюю созданную)
- текст ссылки
Заявка на переисполнение. - если связанная заявка в статусе DRAFT:
- для пользователя с ролью CUSTOMER ссылка активна всегда
- для остальных пользователей: ссылка не активна, при наведении курсора на ссылку отображается хинт
Доступно после перевода заявки клиентом в статус “Новая”
Статус заявки#
При наведении курсора на значок подсказки отображается всплывающий хинт. Названия статусов и текст подсказки в хинте см. в таблице
Поля заявки#
Группа полей Платеж#
- Сумма
- Атрибут объекта:
order.payment.amountCounterparty
- обязательное
- инпут
- число
- минимальное значение - 0,00
- максимальное значение - 99 999 999 999,99
- разделитель групп разрядов - пробел
- десятичный разделитель - запятая
- 2 знака дробной части отображаются всегда:
- если пользователь вводит целое число, система добавляет в поле
,00. Например: введено123456, отображается123 456,00 - если пользователь вводит число одним заком поле запятой, система добавляет
0. Например: введено123456,3, отображается123 456,30 - если пользователь вводит точку для разделения дробной части, система заменяет точку на запятую. Например: введено
123456.3, отображается123 456,30 - Ссылка на пример (в примере нет добавления
,00)
- если пользователь вводит целое число, система добавляет в поле
- при вставке в поле значения из буфера, значение вставляется только если его формат соответствует требованиям
- подсказка под полем:
- на отправку -
Сколько денег и в какой валюте поступит получателю - на получение -
Сколько денег и в какой валюте поступит агенту
- на отправку -
- Валюта получателя \ Валюта отправителя
- Атрибут объекта:
order.payment.currencyCounterparty
- обязательное
- выбор из локального справочника валют:
- первыми в списке отображаются EUR,USD,CNY,CHF,GBP,AED,CAD,HKD, потом все остальные в алфавитном порядке
- пользователь вводит код валюты или его часть
- система показывает список валют у которых введенное значение входит в код валюты
- пользователь выбирает из предложенного списка нужную
- система отображает в поле код выбранной валюты (3 символа)
- если значение указано, очистить его нельзя
- лейбл:
- на отправку -
Валюта получателя - на получение -
Валюта отправителя
- на отправку -
- Валюта отправителя \ Валюта получателя
- Атрибут объекта:
order.payment.currencyCustomer
- обязательное
- работа поля аналогична работе поля
Валюта получателя - первыми в списке отображаются CNY, RUB, потом все остальные в алфавитном порядке
- если значение указано, очистить его нельзя
- лейбл:
- на отправку -
Валюта отправителя - на получение -
Валюта получателя
- на отправку -
- подсказка под полем:
- на отправку -
Валюта в которой вы отправите деньги агенту - на получение -
Валюта в которой агент отправит деньги получателю
- на отправку -
- Банк получателя
- Атрибут объекта:
order.payment.bank
- обязательное
- максимальная длина 200 символов
- выбор из локального справочника SWIFT:
- пользователь вводит в поле код SWIFT, название банка или их часть
- система отображает подсказку для выбора банка из локального справочника SWIFT.Отображается список из 5 первых найденных банков, у которых код SWIFT или название содержат введённое значение
- пользователь выбирает из предложенного списка нужный банк
- система отображает в поле наименование выбранного банка и под ним SWIFT банка
- лейбл:
Банк получателя
- Номер счета
- Атрибут объекта:
order.payment.accountNumber
- обязательное
- инпут, строка, максимум 50 символов
- разрешены для ввода только цифры и латиница
- текст хинта и ошибки:
Может содержать только цифры и латинские буквы - если пользователь вводит буквы в нижнем регистре, система приводит их к верхнему и в поле всегда отображает только в врхнем регистре
- Назначение
- Атрибут объекта:
order.payment.purpose
- обязательное
- инпут, строка, максимум 115 символов
- разрешены для ввода только латиница, цифры, пробел, точка и запятая
- текст хинта и ошибки:
Заполните на английском языке. Можно использовать латинские буквы, цифры, точку и запятую - при потере фокуса система выполняет проверку:
- если в веденном значении есть одно из слов из списка SPA_LIST_COMPLIANCE_RISK_WORDS (регистр не важен), то под полем отображается сообщение
Назначение платежа не должно содержать символы, имеющие связь с юрисдикциями повышенного комплаенс-риска (например, {{первые 6 слов из списка SPA_LIST_COMPLIANCE_RISK_WORDS}})Такое сообщение отображается во всех статусах заявки всем пользователям.
- если в веденном значении есть одно из слов из списка SPA_LIST_COMPLIANCE_RISK_WORDS (регистр не важен), то под полем отображается сообщение
Группа полей Получатель / Отправитель#
В зависимости от типа заявки лэйбл группы:
- на отправку -
Получатель - на получение -
Отправитель
- Название
- Атрибут объекта:
order.counterparty.name
- обязательное
- инпут, строка, максимум 66 символов
- разрешены для ввода только латиница, цифры, пробел, точка и запятая
- текст хинта и ошибки:
Заполните на английском языке. Можно использовать латинские буквы, цифры, точку и запятую
- Страна
- Атрибут объекта:
order.counterparty.country
- обязательное
- выбор из справочника стран:
- в списке для выбора страны показываются в алфавитном порядке
- пользователь вводит название страны на английском языке
- система показывает список стран у которых введенное значение входит в английское наименование
- пользователь выбирает из предложенного списка нужную страну
- система отображает в поле английское наименование страны
- Адрес
- Атрибут объекта:
order.counterparty.address
- обязательное
- инпут, строка, максимум 200 символов
- разрешены для ввода только латиница, цифры, пробел, точка и запятая
- текст хинта и ошибки:
Заполните на английском языке. Можно использовать латинские буквы, цифры, точку и запятую
- Сайт
- Атрибут объекта:
order.counterparty.website
- необязательное
- инпут, строка, максимум 200 символов
Группа полей Основание платежа#
Таблица документов Оснований платежа#
| Поле | Атрибут объекта |
|---|---|
| Номер | order.additionalinfo.documents[].number |
| Дата | order.additionalinfo.documents[].date |
- Макет
- Если строк нет, таблица и её заголовки не отображаются
- В группе отображается таблица товаров и услуг
order.additionalinfo.documents[] - Строки в таблице сортируются по номеру документа
order.additionalinfo.documents[].number
Добавление документов Оснований платежа#
- Кнопка
+ Добавитьактивна в режиме редактирования - При нажатии на кнопку открывается диалоговое окно с полями для ввода:
- Дата
- Атрибут объекта:
order.additionalinfo.documents[].date
- обязательное
- инпут, дата
- не может быть позднее текущего дня
- минимальное значение 01.01.1900
- Номер
- Атрибут объекта:
order.additionalinfo.documents[].number
- обязательное
- инпут, строка, максимум 100 символов
- разрешены для ввода все, кроме кириллицы
Кнопка Отменить
- активна всегда
- при нажатии пользователем, система:
- закрывает окно без дополнительных подтверждений
- запись в таблицу не добавляется
Кнопка Добавить
- активна когда заполнены оба поля
- При нажатии пользователем на кнопку, система:
- закрывает окно
- сохраняет в БД.
- отображает новую строку в таблице в даталке заявки
Редактирование и удаление документов Оснований платежа#
Пользователь нажимает на строку в режиме редактирования заявки, Система показывает диалоговое окно редактирования строки:
- поля аналогичны полям при добавлении строки, заполнены ранее сохраненными значениями, все доступны для редактирования
Кнопка Удалить
- Доступна всегда
- При нажатии пользователем на кнопку, система:
- закрывает окно без дополнительных подтверждений
- удаляет строку из таблицы
- удаляет в БД
- отображает новую строку в таблице в даталке заявки
Кнопка Отменить
- Доступна всегда
- При нажатии пользователем на кнопку, система:
- закрывает окно без дополнительных подтверждений
- изменения, внесенные в диалоговом окне не сохраняются
Кнопка Сохранить#
- Доступна если в одно из полей внесено изменение
- При нажатии пользователем на кнопку, система:
- закрывает окно без дополнительных подтверждений
- сохраняет в БД
- отображает в строке таблицы внесенные изменения
Другие поля Основания платежа#
- Тип продукта
- Атрибут объекта:
order.additionalinfo.productTypeилиorder.additionalinfo.productTypeOther
- обязательное
- максимум 50 символов
- автокомплит для значений из енама см. JSON,
- если в списке нужное значение отсутствует, пользователь может ввести свое вручную.
- если значение выбрано из списка, то сохраняется в
order.additionalinfo.productType, - если значение введено вручную, то в
order.additionalinfo.productTypeOther
- разрешены для ввода только латиница, цифры, пробел, точка и запятая
- текст хинта и ошибки:
Заполните на английском языке. Можно использовать латинские буквы, цифры, точку и запятую
- ТНВЭД код товара
- Атрибут объекта:
order.additionalinfo.tnvedCode
- обязательное, если
Тип продуктане равен `SERVICES - инпут, строка, максимум 100 символов
- разрешены для ввода только цифры, пробел, точка и запятая
- текст хинта и ошибки:
Можно использовать цифры, точку и запятую - если
Тип продуктаравенSERVICES- недоступно для изменения
- если ранее было указано значение - очищается
- Спецификация товаров, услуг или работ
- Атрибут объекта:
order.additionalinfo.specification
- обязательное
- инпут, строка, максимум 200 символов
- разрешены для ввода только латиница, цифры, пробел, точка и запятая
- текст хинта и ошибки:
Заполните на английском языке. Можно использовать латинские буквы, цифры, точку и запятую
Группа полей Предпочитаемый Плательщик#
Группа полей отображается, если у клиента, создавшего заявку customer.canRequestSubsidiary = true.
Группа полей отображается во всех статусах всем ролям.
- Указать параметры
- Атрибут объекта:
order.preferredSubsidiary.isSpecified
- по умолчанию = false
- при установке пользователем в true
- отображаются поля:
Страна,Банк,Страна банка,Комментарий - должно быть заполнено хотя бы одно из этих полей
- отображаются поля:
- при установке пользователем в false, поля скрываются, введенные в них значения сохраняются, и отображаются в полях если снова установили значение в true
- Страна
- Атрибут объекта:
order.preferredSubsidiary.country
- аналогично полю Страна получателя
order.counterparty.country
- Банк
- Атрибут объекта:
order.preferredSubsidiary.bank
- аналогично полю Банк получателя
order.payment.bank
- Страна банка
- Атрибут объекта:
order.preferredSubsidiary.bankCountry
- аналогично полю Страна получателя
order.counterparty.country
- Комментарий
- Атрибут объекта:
order.preferredSubsidiary.comment
- текстовое
- максимум 255 символов
- разрешены любы символы
- под полем отображается счетчик
{введено_символов}/255
Итоговая информация по заявке#
См. описание работы блока итоговой информации
Документы#
На закладке Документы Заявки отображаются две группы полей
Контракт/инвойсДругие документы
При создании новой заявки и при просмотре/редактировании заявки в статусе DRAFT пользователю с правом SUBMIT_ORDER доступно:
Сохранение заявки#
Сохранение заявки происходит при:
- нажатии пользователем кнопки
Сохранить - в момент нажатия пользователем кнопки создания новой заявки.
- перед отправкой заявки клиентом исполнителю
При сохранении заявки система не выполняет проверку обязательности полей и наличия обязательных вложений
При сохранении система выполняет проверку на соответствие типам и паттернам.
Соответствие полей формы схемам document и document-order описаны в разделе поля заявки
Кроме полей, введённых пользователем, система сохраняет:
-
только при первом сохранении:
order.status- DRAFTdocument.docType- ORDERdocument.direction- на отправку -
IMPORT - на получение -
EXPORT
- на отправку -
document.customer- клиент, связанный с пользователем создавшим заявку, или которого пользователь указал в модалке при создании (если пользователь связан с несколькими клиентами)document.userCustomer- пользователь, создавший заявкуdocument.createdAt- дата и время создания заявки
-
при каждом сохранении:
document.changedAt- текущие дата время
После сохранения заявки система переводит заявку в режим просмотра показывает сообщение:
Отправка заявки исполнителю#
| # | Шаг |
|---|---|
| 1. | Исполнитель нажимает кнопку отправки заявки |
| 2. | Система делает недоступными все поля, кнопки и ссылки на форме, на всех закладках. Показывает лоадер на кнопке |
| 3. | Система проверят формат полей |
| 2а. | Если есть ошибки, система подсвечивает поля с ошибками. Конец процесса. |
| 3. | Система сохраняет заявку БД |
| 4. | Система проверят заполнение обязательных полей |
| 4а. | Если есть ошибки, система подсвечивает поля с ошибками. Конец процесса. |
| 5. | Система проверят обязательные вложения. |
| 5a. | Если не все обязательные вложения присутствуют, система показывает сообщение об ошибке. Конец процесса. |
| 6. | Система обновляет поля заявки и статус на NEW |
| 7. | Система отправляет сообщение исполнителю |
| 8. | Система закрывает заявку, показывает список заявок и сообщение об успешной отправке |
Проверка перед отправкой#
Перед отправкой система выполняет проверку:
-
Формат и обязательность значений соответствуют описанию полей в разделе поля заявки
-
В группу вложений
Контракт / инвойсдобавлен хотя бы один файл -
В таблицу документов-оснований платежа добавлена хотя бы одна строка
- если ни одной строки нет, в группе отображается ошибка: макет
Если система обнаружила ошибку, показывает всплывающую подсказку на кнопке отправки:
Заполните обязательные поля и приложите к заявке сканы контракта или инвойса
Если система обнаружила ошибку только в полях или и в полях и во вложениях, то форма переходит в режим редактирования (если она еще не в нем), подсвечиваются незаполненные поля. Пользователя перекидывает на вкладку «Параметры»
Если ошибка только во вложениях, то отображает закладку с вложениями, с подсвеченными ошибками:
Обновление полей заявки при отправке#
При отправке заявки исполнителю система записывает в заявку значения:
order.status- NEWorder.submittedAt- текущие дата и время
Отправка сообщения на E-mail исполнителя#
Система отправляет сообщение на e-mail всех активных пользователей с ролью CONTRACTOR
Удаление#
Кнопка удаления заявки отображается
- только пользователю с ролью CUSTOMER статусе DRAFT
- если заявка не создана в результате закрытия рекламации (нет рекламации, со ссылкой complaint.reExecutionOrder на текущую заявку)1
- Пользователь нажал кнопку
Удалить заявку - Система показывает диалоговое окно подтверждение

- Если пользователь подтвердил, система удаляет и заявку и все вложения.
- если пользователь не подтвердил, диалоговое окно закрывается.
- После удаления заявки система показывает список заявок и сообщение

Полный набор макетов
Все макеты и состояния по ссылке Макеты Figma: создание заявки
Отмена заявки#
Кнопка отмены заявки отображается:
- только пользователю с ролью CUSTOMER статусе DRAFT
- если заявка создана в результате закрытия рекламации (есть рекламация, со ссылкой complaint.reExecutionOrder ссылающейся на текущую заявку)
При нажатии на кнопку инициализируется процесс отмены заявки













