Перейти к содержанию

Создание и подача заявки клиентом#

Пользователи процесса#

  • Пользователь с ролью CUSTOMER

Предусловия#

  • Пользователь клиента авторизован в системе
  • У роли пользователя есть право SUBMIT_ORDER

Точки входа#

Варианты завершения#

  • В системе сохранена заявка в статусе 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. Система закрывает заявку, показывает список заявок и сообщение об успешной отправке

Особенности процесса#

  • Может быть создано два типа заявки: на отправку денег и на получение денег. В зависимости от типа, меняются только лейблы и подсказки некоторых элементов формы. Описано в разделе интерфейс для элементов к которым это применимо.
  • При добавлении вложений пользователем, система сразу сохраняет их на бэке
  • При удалении вложений пользователем, в системе они не удаляются, только помечаются на удаление.
  • При удалении черновика заявки пользователем, в системе удаляется и заявка и все её вложения.
  • Расчетные поля заявки пересчитываются системой при изменении пользователем значений от которых они зависят.
  • При активации текстовых полей, показывается всплывающий хинт с подсказкой о формате. Текст указан в разделе поля заявки для полей к которым это применимо.
  • Если система при валидации перед отправкой заявки отловила ошибку формата, то под полем показывается сообщение с таким же текстом как и в хинте.

Особенности сабмита формы

  • пользователь может сохранить заявку, даже если он не заполнил все обязательные поля
  • при сохранении (и, опосредованно, при отправке, так как отправка тригерит сохранение) валидируются заполненные поля на соответстиве типам и паттернам.
  • при отрпавке заявки проверяется заполнены ли все обязательные поля

  • нельзя сохранить заявку, если в ней есть заполненные поля, чьё содержимое не отвечает требованиям
  • можно сохранить заявку, если в ней не заполнены обязательные поля
  • нельзя отправить заявку, если в ней не заполнены обязательные поля

Создание новой заявки#

img_13.png

  1. Пользователь нажимает на кнопку Создать заявку в списке заявок,
  2. Система показывает выпадашку:

    • Отправка денег
    • Получение денег
  3. Пользователь выбирает нужный пункт

  4. Если пользователь связан с несколькими клиентами, система показывает модалку с полем для выбора клиента. Модалка аналогична модалке при создании экспортной заявки Исполнителем. В поле выбора клиента отображаются только активные клиенты, связанные с пользователем.
  5. Система сохраняет пустую заявку в БД для (без выполнения проверок полей и вложений).
  6. Показывает форму создания новой заявки в режиме редактирования
    • все поля доступны для изменения
    • отображается кнопка Сохранить:
      • Сохранить становится доступна только после изменения значения полей заявки.
      • при нажатии Сохранить система сохраняет заявку, возвращает форму в режим просмотра

Открытие заявки в статусе "Черновик" на редактирование#

  1. Пользователь кликает на строке заявки в статусе DRAFT в списке заявок,
  2. Система открывает его в режиме просмотра:

    • все поля недоступны для изменения
    • доступна кнопка Радактировать

    img_16.png

  3. Пользователь нажимает кнопку Радактировать, система показывает форму в режиме редактирования:

    • все поля доступны для изменения
    • отображаются кнопки Отменить и Сохранить.
      • Сохранить становится доступна только после изменения значения полей заявки.
      • при нажатии Сохранить система сохраняет заявку, возвращает форму в режим просмотра
      • при нажатии Отменить, система сбрасывает изменения и возвращает форму в режим просмотра.

    img_15.png

Интерфейс#

img_12.png

Ссылка возврата на список Заявок#

При клике на ссылку "<- Заявки", система показывает браузерный алерт с предупреждением о том, что введенные значения не сохранятся. Если пользователь подтвердил действие, система показывает список заявок. В таблице сохраняется примененные фильтры и активная страница.

  • В зависимости от типа заявки:
    • Импортная заявка
    • Экспортная заявка
  • Если заявка создана в результате закрытия рекламации) (существует рекламация, у которой в complaint.reExecutionOrder ссылка на текущую заявку):
    • под заголовком отображается ссылка на заявку, к которой привязана такая рекламация.
    • текст ссылки Первоначальная заявка
  • Если в заявке есть рекламация, в результате закрытия котрой была создана заявка на переисполнение (в рекламации заполнено complaint.reExecutionOrder):
    • под заголовком отображается ссылка на эту заявку (если таких заявок несколько - на последнюю созданную)
    • текст ссылки Заявка на переисполнение.
    • если связанная заявка в статусе DRAFT:
      • для пользователя с ролью CUSTOMER ссылка активна всегда
      • для остальных пользователей: ссылка не активна, при наведении курсора на ссылку отображается хинт Доступно после перевода заявки клиентом в статус “Новая”

Статус заявки#

При наведении курсора на значок подсказки отображается всплывающий хинт. Названия статусов и текст подсказки в хинте см. в таблице

img_11.png

Поля заявки#

Группа полей Платеж#

Сумма
Атрибут объекта: 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 банка
  • лейбл: Банк получателя

img_18.png img_19.png

Номер счета
Атрибут объекта: order.payment.accountNumber
  • обязательное
  • инпут, строка, максимум 50 символов
  • разрешены для ввода только цифры и латиница
  • текст хинта и ошибки: Может содержать только цифры и латинские буквы
  • если пользователь вводит буквы в нижнем регистре, система приводит их к верхнему и в поле всегда отображает только в врхнем регистре
Назначение
Атрибут объекта: order.payment.purpose
  • обязательное
  • инпут, строка, максимум 115 символов
  • разрешены для ввода только латиница, цифры, пробел, точка и запятая
  • текст хинта и ошибки: Заполните на английском языке. Можно использовать латинские буквы, цифры, точку и запятую
  • при потере фокуса система выполняет проверку:
    • если в веденном значении есть одно из слов из списка SPA_LIST_COMPLIANCE_RISK_WORDS (регистр не важен), то под полем отображается сообщение Назначение платежа не должно содержать символы, имеющие связь с юрисдикциями повышенного комплаенс-риска (например, {{первые 6 слов из списка 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
  • разрешены для ввода только латиница, цифры, пробел, точка и запятая
  • текст хинта и ошибки: Заполните на английском языке. Можно использовать латинские буквы, цифры, точку и запятую

Выбор из списка: img_20.png

Ввод своего значения: img_21.png

ТНВЭД код товара
Атрибут объекта: 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

Итоговая информация по заявке#

См. описание работы блока итоговой информации

Документы#

На закладке Документы Заявки отображаются две группы полей

  • Контракт/инвойс
  • Другие документы

img_22.png

При создании новой заявки и при просмотре/редактировании заявки в статусе DRAFT пользователю с правом SUBMIT_ORDER доступно:

Сохранение заявки#

Сохранение заявки происходит при:

  • нажатии пользователем кнопки Сохранить
  • в момент нажатия пользователем кнопки создания новой заявки.
  • перед отправкой заявки клиентом исполнителю

При сохранении заявки система не выполняет проверку обязательности полей и наличия обязательных вложений

При сохранении система выполняет проверку на соответствие типам и паттернам.

Соответствие полей формы схемам document и document-order описаны в разделе поля заявки

Кроме полей, введённых пользователем, система сохраняет:

  1. только при первом сохранении:

    • order.status- DRAFT
    • document.docType - ORDER
    • document.direction
      • на отправку - IMPORT
      • на получение - EXPORT
    • document.customer - клиент, связанный с пользователем создавшим заявку, или которого пользователь указал в модалке при создании (если пользователь связан с несколькими клиентами)
    • document.userCustomer - пользователь, создавший заявку
    • document.createdAt - дата и время создания заявки
  2. при каждом сохранении:

    • document.changedAt - текущие дата время

После сохранения заявки система переводит заявку в режим просмотра показывает сообщение:

img_5.png

Отправка заявки исполнителю#

# Шаг
1. Исполнитель нажимает кнопку отправки заявки
2. Система делает недоступными все поля, кнопки и ссылки на форме, на всех закладках. Показывает лоадер на кнопке
3. Система проверят формат полей
2а. Если есть ошибки, система подсвечивает поля с ошибками. Конец процесса.
3. Система сохраняет заявку БД
4. Система проверят заполнение обязательных полей
4а. Если есть ошибки, система подсвечивает поля с ошибками. Конец процесса.
5. Система проверят обязательные вложения.
5a. Если не все обязательные вложения присутствуют, система показывает сообщение об ошибке. Конец процесса.
6. Система обновляет поля заявки и статус на NEW
7. Система отправляет сообщение исполнителю
8. Система закрывает заявку, показывает список заявок и сообщение об успешной отправке

img_10.png

Проверка перед отправкой#

Перед отправкой система выполняет проверку:

  1. Формат и обязательность значений соответствуют описанию полей в разделе поля заявки

  2. В группу вложений Контракт / инвойс добавлен хотя бы один файл

  3. В таблицу документов-оснований платежа добавлена хотя бы одна строка

    • если ни одной строки нет, в группе отображается ошибка: макет

Если система обнаружила ошибку, показывает всплывающую подсказку на кнопке отправки: Заполните обязательные поля и приложите к заявке сканы контракта или инвойса

Если система обнаружила ошибку только в полях или и в полях и во вложениях, то форма переходит в режим редактирования (если она еще не в нем), подсвечиваются незаполненные поля. Пользователя перекидывает на вкладку «Параметры»

img_6.png

Если ошибка только во вложениях, то отображает закладку с вложениями, с подсвеченными ошибками:

img_7.png

Обновление полей заявки при отправке#

При отправке заявки исполнителю система записывает в заявку значения:

  • order.status - NEW
  • order.submittedAt - текущие дата и время

Отправка сообщения на E-mail исполнителя#

Система отправляет сообщение на e-mail всех активных пользователей с ролью CONTRACTOR

Удаление#

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

  1. Пользователь нажал кнопку Удалить заявку
  2. Система показывает диалоговое окно подтверждение img_9.png
  3. Если пользователь подтвердил, система удаляет и заявку и все вложения.
    • если пользователь не подтвердил, диалоговое окно закрывается.
  4. После удаления заявки система показывает список заявок и сообщение img_8.png

Полный набор макетов

Все макеты и состояния по ссылке Макеты Figma: создание заявки

Отмена заявки#

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

При нажатии на кнопку инициализируется процесс отмены заявки