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

Процесс создания нового клиента#

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

  • пользователь с ролью CONTRACTOR.
  • пользователь с ролью PARTNER.

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

У роли пользователя есть право INVITE_CUSTOMER

Точки входа#

Кнопка "Добавить" в таблице клиентов

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

В системе создан новый клиент.

Процесс#

Общий вид#

# Шаг
1 Пользователь заполняет поля формы, нажимает кнопку Сохранить.
2 Система проверяет заполненные поля.
2а Если есть ошибки, система показывает сообщение об ошибке. Процесс останавливается.
3 Система выполняет проверку наличия дубликата клиента в базе.
3а Если в базе есть аналогичный клиент, система показывает сообщение об ошибке. Процесс останавливается.
4 Система создает нового клиента, показывает форму просмотра Клиента на закладке "Пользователи"

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

  1. Формы для физлица, ИП, юрлица отличаются.
  2. для юрлиц указываются реквизиты компании и подписант
  3. для физлиц и ИП — данные физлица
  4. для ИП указывается ОГРНИП
  5. Для клиента нужно выбрать страну резидентства: РФ, Беларусь, Казахстан или "Другая страна"
  6. Если указано резиденство РФ, используется упрощенный ввод реквизитов через Dadata. Пользователь вводит ИНН, ОГРН или название компании (для ИП: ФИО, ИНН, ОГРНИП), а система возвращает варианты. После выбора подходящего, форма заполняется реквизитами из дадаты.

Использование сервисов Dadata для автозаполнения атрибутов#

  1. Организации и ИП
  2. Адрес
  3. Кем выдан паспорт

Система должна быть dadata-независимой

  1. Если дадата сломалась или вышли за лимит, у пользовтаеля должна быть возможность заполнить поле.

  2. Для некоторых полей справедливо правило: если в дадате нет нужного значения, а пользовтаель убежден, что оно правильное, у него должна быть возможность указать это значение.

Интерфейс#

Ссылка возврата на таблицу Клиенты#

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

Поведение Dadata-полей при смене резидентства#

Часть Dadata-подсказок работает при выборе России в качестве страны резидентства.

Если пользователь меняет страну и Dadata-подсказки прекращают работать, введенные значения не должны теряться. Общий принцип использование подсказок такой:

  1. Пользователь что-то вводит
  2. Система отправляет запрос в дадату
  3. Дадата возвращает подсказки
  4. Система отображает подсказки
  5. Пользователь выбирает одну из них
  6. Система заполняет одно или несколько полей на форме.

Если, после этого, пользователь поменял страну резидентства и дадата-подсказки больше не работают, поля остаются заполненными. Их можно отредактировать или очистить совсем.

Пример

  1. Пользователь выбирает страну резиденства Россия.
  2. В поле Компания начинает вводить ИНН. Система отправляет запрос в дадату, получает подсказки и показывает пользователю.
  3. Пользователь выбирает подходящую компанию.
  4. Система заносит ее название, ИНН, КПП, ОГРН, ФИО и Должность представителя в соответствующие поля на форме.
  5. Пользователь меняет страну резиденства на Коста-Рику.
  6. Значения в полях Компания, ИНН, КПП и ОГРН не меняются
  7. Пользователь переходит в поле Компания и меняет текст. Поле ведет себя как обычный инпут.

Мэппинг полей из ответа Dadata и полей клиента#

При заполнении данных ЮЛ (в ответе type = LEGAL), система отправляет запрос в дадату при вводе текста в поле "Компания" При заполнении данных ИП (в ответе type = INDIVIDUAL), система отправляет запрос в дадату при вводе текста в поле "Индивидуальный предприниматель"

Общее для ЮЛ и ИП:

  • ИНН: data.inn
  • ОГРН/ОГРНИП: data.ogrn
  • Адрес: data.address.value

Для ЮЛ

  • Название: value
  • КПП: data.kpp
  • Фио представителя: data.managment.name (приходит одной строкой ФИО, разделить на три поля Фамилия, Имя, Отчество)

  • Должность руководителя data.managment.post:

    • Если полученная в ответе должность есть в справочнике должностей (сравниваем полное совпадение текста без учета регистра), то система сохраняет её в клиента customer.representative.title.titleId.name
    • Если полученная в ответе должность отсутствует, то в customer.representative.title.titleId.name система сохраняет как Другая, а полученную в ответе записывает в customer.representative.title.titleDetails.name
    • Если в ответе должность отсутствует (пустой или отсутствует data.managment.post), должность в клиенте остается пустой.

Для ИП

  • ФИО:
    • data.fio.surname
    • data.fio.name
    • data.fio.patronymic

Юрлицо#

Макет

Резидентство
Атрибут объекта: company.taxResidence. Записывается код страны из справочника.
  • Обязательно к заполнению.
  • Варианты выбора Россия, Беларусь, Казахстан, Другое. При выборе вариант Другое, появляется селект с вариантами из справочника стран.
Компания
Атрибут объекта: company.fullName.
  • Обязательно к заполнению.
  • Максимальная длина 500 символов.
  • Подсказка Дадата, если Резидентство = Россия. Работает на ввод названия, ИНН, КПП или ОГРН. Ищет только по организациям. Когда пользователь выберет подходящий вариант, заполняет поля Компания, Юридический адрес, ИНН, КПП, ОГРН, ФИО и Должность представителя
Юридический адрес
Атрибут объекта: company.addressRegistration.
  • Обязательно к заполнению.
  • Максимальная длина 250 символов.
  • Подсказка Дадата, если Резидентство = Россия
  • Индекс в строке адреса система не отображет (как в примере Дадата), но отдельно сохраняет в БД для возможности вывода в ПФ.
Юридический адрес на английском
Атрибут объекта: company.addressRegistrationEnglish.
  • Обязательно к заполнению.
  • Максимальная длина 250 символов.
  • Заполняется вручную пользователем.
  • Можно вводить любые символы, кроме кириллицы
ИНН
Атрибут объекта: company.inn.
  • Обязательно к заполнению.
  • Резиденство = Россия: строго 10 цифр
  • Резиденство ≠ Россия: цифры до 15 знаков.
КПП
Атрибут объекта: company.kpp.
  • Обязательно к заполнению.
  • Строго 9 цифр
ОГРН
Атрибут объекта: company.ogrn.
  • Резиденство = Россия: обязательно к заполнению, строго 13 цифр
  • Резиденство ≠ Россия: не обязательно к заполнению, цифры до 15 знаков.
Название компании на английском
Атрибут объекта: company.fullNameEnglish.
  • Обязательно к заполнению.
  • Максимальная длина 500 символов
  • Можно вводить любые символы, кроме кириллицы.
Email для договора
Атрибут объекта: customer.email
  • Необязательно к заполнению
  • Максимальная длина 255 символов
  • Значение E-mail соответствует паттерну указанному в модели
  • Если значение не соответствует паттерну, под полем E-mail отображается сообщение об ошибке: Некорректный e-mail
Партнёр
Атрибут объекта: customer.partner
  • Выбор из локального справочника
  • Обязательно к заполнению.
  • отображается если есть право VIEW_PARTNER_IN_CUSTOMER
Приоритетный клиент
Атрибут объекта: customer.isPriority
  • по умолчанию = false

Группа полей Расчетный счет#

  • Макет
  • Один расчетный счет = пара заполненных полей Номер счета и в каком банке открыт
  • Может быть указано до 5 расчетных счетов (5 пар Номер счета + Банк)
  • Хотя бы один Расчетный счет должен быть обязательно указан
  • По умолчанию, при создании клиента, отображается одна группа полей Номер счета + Банк (один расчетный счет)
  • Кнопка Добавить добавляет еще одну группу полей (Номер счета + Банк)
  • Если на форме больше 1 группы полей, то возле каждой группы отображается кнопка Удалить
  • Кнопка Удалить – убирает группу полей с формы (Номер счета + Банк), физическое удаление в БД вместе с сабминов всей карточки клиента
  • В режиме просмотра кнопки Добавить и Удалить не отображаются
Номер счета
Атрибут объекта: company.bankAccount.number.
  • Обязательно к заполнению.
  • Маска ввода и максимальная длина - строго 20 цифр
Банк
Атрибут объекта: company.bankAccount.bank.
  • Обязательно к заполнению.
  • Максимальная длина 250 символов.
  • Выбор из локального справочника российских банков.

Группа полей Подписант#

Фамилия
Атрибут объекта: customer.representative.fio.lastName
  • Обязательно к заполнению.
  • Максимальная длина: 50 символов.
  • Маска ввода: русские и латинские буквы, пробелы, дефисы.
Имя
Атрибут объекта: customer.representative.fio.firstName
  • Обязательно к заполнению.
  • Максимальная длина: 50 символов.
  • Маска ввода: русские и латинские буквы, пробелы, дефисы.
Отчество
Атрибут объекта: customer.representative.fio.patronymic
  • Необязательно к заполнению.
  • Максимальная длина: 50 символов.
  • Маска ввода: русские и латинские буквы, пробелы, дефисы.
Фамилия в родительном падеже
Атрибут объекта: customer.representative.fioGenitiveCase.lastName
  • Обязательно к заполнению.
  • Маска ввода: русские и латинские буквы, пробелы, дефисы.
  • Максимальная длина: 50 символов.
  • Заполняется системой автоматически после изменения значения в поле Фамилия (после ухода с поля и только если пользователь изменил значение, а не просто "встал в него и вышел") значением введенной Фамилии в родительном падеже
  • Может быть изменено пользователем
  • плейсхолдер поля - константа Иванова
Имя в родительном падеже
Атрибут объекта: customer.representative.fioGenitiveCase.firstName
  • Обязательно к заполнению.
  • Маска ввода: русские и латинские буквы, пробелы, дефисы.
  • Максимальная длина: 50 символов.
  • Заполняется системой автоматически после изменения значения в поле Имя (после ухода с поля и только если пользователь изменил значение, а не просто "встал в него и вышел") значением введенного Имени в родительном падеже
  • Может быть изменено пользователем
  • плейсхолдер поля - константа Ивана
Отчество в родительном падеже
Атрибут объекта: customer.representative.fioGenitiveCase.patronymic
  • Не обязательно к заполнению.
  • Маска ввода: русские и латинские буквы, пробелы, дефисы.
  • Максимальная длина: 50 символов.
  • Заполняется системой автоматически после изменения значения в поле Отчество (после ухода с поля и только если пользователь изменил значение, а не просто "встал в него и вышел") значением введенного Отчества в родительном падеже
  • Может быть изменено пользователем
  • плейсхолдер поля - константа Ивановича
Фамилия на английском языке
Атрибут объекта: customer.representative.fioEnglish.lastName
  • Обязательно к заполнению.
  • Маска ввода: латинские буквы, пробелы, дефисы.
  • Максимальная длина: 50 символов.
  • Заполняется системой автоматически после изменения значения в поле Фамилия (после ухода с поля и только если пользователь изменил значение, а не просто "встал в него и вышел") значением введенной Фамилии транслитерацией на английском. Специальных требований к правилам транслитерации нет.
  • Может быть изменено пользователем
  • плейсхолдер поля - константа Ivanov
Имя на английском языке
Атрибут объекта: customer.representative.fioEnglish.firstName
  • Обязательно к заполнению.
  • Маска ввода: латинские буквы, пробелы, дефисы.
  • Максимальная длина: 50 символов.
  • Заполняется системой автоматически после изменения значения в поле Имя (после ухода с поля и только если пользователь изменил значение, а не просто "встал в него и вышел") значением введенного Имени транслитерацией на английском. Специальных требований к правилам транслитерации нет.
  • Может быть изменено пользователем
  • плейсхолдер поля - константа Ivan
Отчество на английском языке
Атрибут объекта: customer.representative.fioEnglish.patronymic
  • Не обязательно к заполнению.
  • Маска ввода: латинские буквы, пробелы, дефисы.
  • Максимальная длина: 50 символов.
  • Заполняется системой автоматически после изменения значения в поле Отчество значением введенного Отчества транслитерацией на английском. Специальных требований к правилам транслитерации нет.
  • Может быть изменено пользователем
  • плейсхолдер поля - константа Ivanovich
Должность (выбор из справочника)
Атрибут объекта: customer.representative.title.titleId.name
  • обязательное
  • выбор из локального справочника должностей:
    • пользователь вводит название должности или её часть
    • отображается подсказку для выбора должности из локального справочника должностей. Отображаются список всех должностей у которых название содержит введенное значение. Первой строкой в списке отображается значение Другая
    • пользователь выбирает нужное значение, система отображает в поле название выбранной должности title.name
    • если в списке нужное значение отсутствует, пользователь выбирает значение Другая.
    • при выборе значения Другое отображается три дополнительных поля для ручного ввода должности customer.representative.title.titleDetails
  • Если было выбрано Другое и пользователь заполнил поля ручного ввода (см. ниже описание полей Должность, Должность в родительном падеже, Должность на английском), а потом перевыбрал должность из списка, то заполненные поля не очищаются до сохранения клиента в системе и при повторно выборе Другая, в полях отображаются ранее заполненные значения. При сохранении клиента с указанным значением отличным от Другое, заполненные вручную поля должности не сохраняются.
Должность (инпут)
Атрибут объекта: customer.representative.title.titleDetails.name
  • Обязательное.
  • инпут, русские и латинские буквы, пробелы, дефисы, цифры
  • Максимальная длина: 250 символов.
Должность в родительном падеже
Атрибут объекта: customer.representative.title.titleDetails.genitiveCase
  • Обязательное.
  • инпут, русские и латинские буквы, пробелы, дефисы, цифры
  • Максимальная длина: 250 символов.
Должность на английском
Атрибут объекта: customer.representative.title.titleDetails.englishName
  • Обязательное.
  • инпут, латинские буквы, пробелы, дефисы, цифры
  • Максимальная длина: 250 символов.
Основание полномочий
Атрибут объекта: customer.representative.actionBasis.type

Обязательно к заполнению. Код из справочника.

Группа полей Доверенность#

При выборе варианта "Доверенность", на форме появляются поля

img_6.png

Если пользователь выбрал "Доверенность", указал номер и дату окончания действия доверенности и поменял основание полномочий на любое другое, например "Устав" или "Другое" , поля скрываются, но не очищаются.

Если выбрано не "Доверенность", значения полей Номер и Дата окончания не сабмитятся на бэк.

Другое

При выборе варианта "Другое", на форме появяются поля

img_10.png

Если пользователь выбрал "Другое", указал названия на русском и английском языках и поменял основание полномочий на любое другое, например "Устав" или "Доверенность", поля скрываются, но не очищаются.

Если выбрано не "Другое", значения полей русского и английского названий не сабмитятся на бэк.

Номер доверенности
Атрибут объекта: customer.representative.actionBasis.number
  • Обязательно к заполнению, если Основание полномочий = "Доверенность".
Дата окончания действия доверенности
Атрибут объекта: customer.representative.actionBasis.notValidAfter.
  • Обязательно к заполнению, если Основание полномочий = "Доверенность".
  • Дата не может быть меньше сегодняшнего дня.
Название документа
Атрибут объекта: customer.representative.actionBasis.name.
  • Обязательно к заполнению, если Основание полномочий = "Другое".
Название документа на английском
Атрибут объекта: customer.representative.actionBasis.nameEnglish.
  • Обязательно к заполнению, если Основание полномочий = "Другое".
  • Можно вводить любые символы, кроме кириллицы.
Срок действия документа
Атрибут объекта: customer.representative.actionBasis.notValidAfter.
  • Не обязательно к заполнению.
  • Дата не может быть меньше сегодняшнего дня.
Тип подписания
Атрибут объекта: customer.signingType
  • выбор значения из вариантов
    • SIMPLE_ELECTRONIC: Простая электронная подпись. Выбрано по умолчанию.
    • HANDWRITTEN: Ручкой
Тип договора
Атрибут объекта: customer.defaultContractDirection
  • выбор значения из вариантов
    • Import: Импорт. Выбрано по умолчанию.
    • Export: Экспорт

Группа полей Плательщики#

Клиент может указать параметры плательщика в заявке
Атрибут объекта: customer.canRequestSubsidiary
  • по умолчанию = false
Приоритетные
Атрибут объекта: customer.prioritySubsidiaries[]
Поле Атрибут
Приоритетные subsidiary.fullNameEnglish - название субагента
Статус subsidiary.Status - статус субагента
  • сортировка по fullNameEnglish, по алфавиту
  • Если нет строк таблицы Приоритетных плательщиков и у пользователя нет права на добавление, вся группа Приоритетные вместе с заголовком скрывается
Добавление приоритетного плательщика#
  • Кнопка + Добавить отображается
  • При нажатии на кнопку + Добавить, открывается модальное окно с полями для ввода:
Название
Атрибут объекта: customer.prioritySubsidiaries[].fullNameEnglish
  • обязательное
  • выбор из списка Плательщиков/Получателей, у которых
    • canUseInImport = true
    • status = ACTIVE
    • subagent.status = ACTIVE (т.е. если субагент заблокирован, то связанных плательщиков не показываем в выпадашке)

Кнопка Отменить

  • Активна всегда
  • При нажатии пользователем на кнопку, система:
    • закрывает окно без дополнительных подтверждений
    • плательщик не сохраняется в БД

Кнопка Добавить

  • Активна если заполнены обязательне поля
  • При нажатии пользователем на кнопку, система:
    • проверяет, существует ли у клинта выбранный плательщик.
      • если существует, модалка не закрывается, поле подсвечивается и отображается сообщение о том что Плательщик уже добавлен
    • закрывает окно,
    • показывает обновленную таблицу
    • в БД Запись сохраняется после сохранения карточки клиента (каждую отельную строку в БД не сохраняем)
Редактирование и удаление приоритетного плательщика#
  • Редактирование строки - отсутствует. Можно только удалить и добавить.
  • Кнопка удаления на каждой строке таблицы отображается
  • при нажатии:
    • строка удаляется из списка
    • в БД удаление выполняется только после сохранения карточки клиента (каждую отельную строку в БД не удаляем)

Физлицо#

Макет

Резидентство
Атрибут объекта: person.taxResidence.
Фамилия
Атрибут объекта: person.fio.lastName
  • Обязательно к заполнению. Маска ввода: русские и латинские буквы, пробелы, дефисы. Максимальная длина: 50 символов.
Имя

Атрибут объекта: person.fio.firstName

Обязательно к заполнению. Маска ввода: русские и латинские буквы, пробелы, дефисы. Максимальная длина: 50 символов.

Отчество

Атрибут объекта: person.fio.patronymic

Необязательно к заполнению. Маска ввода: русские и латинские буквы, пробелы, дефисы. Максимальная длина: 50 символов.

Фамилия в дательном падеже
Атрибут объекта: person.fioDativeCase.lastName
  • Обязательно к заполнению.
  • Маска ввода: русские и латинские буквы, пробелы, дефисы.
  • Максимальная длина: 50 символов.
  • Заполняется системой автоматически после изменения значения в поле Фамилия (после ухода с поля и только если пользователь изменил значение, а не просто "встал в него и вышел") значением введенной Фамилии в дательном падеже
  • Может быть изменено пользователем
  • плейсхолдер поля - константа Иванову
Имя в дательном падеже
Атрибут объекта: person.fioDativeCase.firstName
  • Обязательно к заполнению.
  • Маска ввода: русские и латинские буквы, пробелы, дефисы.
  • Максимальная длина: 50 символов.
  • Заполняется системой автоматически после изменения значения в поле Имя (после ухода с поля и только если пользователь изменил значение, а не просто "встал в него и вышел") значением введенного Имени в дательном падеже
  • Может быть изменено пользователем
  • плейсхолдер поля - константа Ивану
Отчество в дательном падеже
Атрибут объекта: person.fioDativeCase.patronymic
  • Не обязательно к заполнению.
  • Маска ввода: русские и латинские буквы, пробелы, дефисы.
  • Максимальная длина: 50 символов.
  • Заполняется системой автоматически после изменения значения в поле Отчество (после ухода с поля и только если пользователь изменил значение, а не просто "встал в него и вышел") значением введенного Отчества в дательном падеже
  • Может быть изменено пользователем
  • плейсхолдер поля - константа Ивановичу
Фамилия на английском языке
Атрибут объекта: person.fioEnglish.lastName
  • Обязательно к заполнению.
  • Маска ввода: латинские буквы, пробелы, дефисы.
  • Максимальная длина: 50 символов.
  • Заполняется системой автоматически после изменения значения в поле Фамилия (после ухода с поля и только если пользователь изменил значение, а не просто "встал в него и вышел") значением введенной Фамилии транслитерацией на английском. Специальных требований к правилам транслитерации нет.
  • Может быть изменено пользователем
  • плейсхолдер поля - константа Ivanov
Имя на английском языке
Атрибут объекта: person.fioEnglish.firstName
  • Обязательно к заполнению.
  • Маска ввода: латинские буквы, пробелы, дефисы.
  • Максимальная длина: 50 символов.
  • Заполняется системой автоматически после изменения значения в поле Имя (после ухода с поля и только если пользователь изменил значение, а не просто "встал в него и вышел") значением введенного Имени транслитерацией на английском. Специальных требований к правилам транслитерации нет.
  • Может быть изменено пользователем
  • плейсхолдер поля - константа Ivan
Отчество на английском языке
Атрибут объекта: person.fioEnglish.patronymic
  • Не обязательно к заполнению.
  • Маска ввода: латинские буквы, пробелы, дефисы.
  • Максимальная длина: 50 символов.
  • Заполняется системой автоматически после изменения значения в поле Отчество значением введенного Отчества транслитерацией на английском. Специальных требований к правилам транслитерации нет.
  • Может быть изменено пользователем
  • плейсхолдер поля - константа Ivanovich
Адрес регистрации
Атрибут объекта: person.addressRegistration.
  • Обязательно к заполнению.
  • Максимальная длина 250 символов.
  • Подсказка Дадата, если Резидентство = Россия.
  • Индекс в строке адреса система не отображет (как в примере Дадата), но отдельно сохраняет в БД для возможности вывода в ПФ.
Адрес регистрации на английском
Атрибут объекта: person.addressRegistrationEnglish.
  • Обязательно к заполнению.
  • Максимальная длина 250 символов.
  • Заполняется вручную пользователем.
  • Можно вводить любые символы, кроме кириллицы
ИНН

Атрибут объекта: person.inn.

Обязательно к заполнению. Маска ввода: 12 цифр.

E-mail, Номер телефона, Тип подписания, Приоритетный клиент, Партнёр
аналогично ЮЛ

Группа полей Плательщики#

  • аналогично ЮЛ

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

Гражданство
Атрибут объекта: person.citizenship.
  • Обязательно к заполнению.
  • Код из справочника стран.
  • В списке стран для выбора, ситема первой строкий показывает Россию, потом все в алфавитном порядке.
Серия
Атрибут объекта: person.passport.series.
  • Отображается только если страна гражданства Россия.
  • Обязательно к заполнению.
  • Маска ввода: 4 цифры.
Номер
Атрибут объекта: person.passport.number.
  • Обязательно к заполнению.
    • Гражданство = Россия: строго 6 цифр
    • Гражданство ≠ Россия: латинские буквы и цифры до 20 знаков.
Дата выдачи
Атрибут объекта: person.passport.issueDate.
  • Обязательно к заполнению.
  • Не может быть значение в будущем.
  • Минимальная дата 01.01.1900, календарь должен соответсвовать ручному воду.
Место выдачи
Атрибут объекта: person.passport.issuedBy.
  • Обязательно к заполнению, если страна гражданства Россия.
  • Максимальная длина: 200 символов.
  • Подсказка Дадата. При выборе значения заполняется поля Место выдачи и Код подразделения.
Код подразделения
Атрибут объекта: person.passport.issueOrganizationCode.
  • Отображается только если страна гражданства Россия.
  • Обязательно к заполнению.
  • Подсказка Дадата. При выборе значения заполняется поля Место выдачи и Код подразделения.
  • Масска ввода в поле отсутствует, но введенное значение валидируем на соответсвие формату: ddd-ddd, где d — цифра.
  • Если страна гражданства не Россия, отображаются только поля Номер, Дата выдачи, Место выдачи.

Группа Расчетный счет#

  • Аналогично расчетному счету ЮЛ
Номер счета
Атрибут объекта: person.bankAccount.accountNumber.
Банк
Атрибут объекта: person.bankAccount.bankName.

ИП#

Поля, маски и ограничения аналогичны форме приглашения физлица. Специфичные поля описаны после изображения.

Макет

Индивидуальный предприниматель
Атрибут объекта: отсутствует

Система отображает в поле конкатенированную строку из ИП {Фамилия} {Имя} {Отчество}

  • отображается если резиденство - РФ.
  • Обязательно к заполнению.
  • Максимальная длина 500 символов.
  • Подсказка Дадата, если Резидентство = Россия. Работает на ввод ФИО, ИНН или ОГРНИП. Ищет только по ИП. Когда пользователь выберет подходящий вариант, заполняет поля: Фамилия, Имя, Отчество адрес, ИНН, ОГРНИП, Индивидуальный предприниматель

При изменении полей Фамилия, Имя, Отчество вручную пользователем, поле Индивидуальный предприниматель обновляется. При открытии клиента на просмотр/редактирование, в поле отображается конкатенированная строка.

ОГРНИП

Атрибут объекта: person.ogrnip.

  • Резиденство = Россия: обязательно к заполнению, маска ввода: строго 15 цифр
  • Резиденство ≠ Россия: необязательно к заполнению, маска ввода: цифры до 20 знаков.

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

Все макеты и состояния по ссылке Макеты Figma: Пригласить клиента

Сабмит формы#

Лоадер на кнопке, все поля на форме в readonly

Проверка статуса компании в DADATA#

  1. Система выполняет запрос в дадату по ИНН клиента (запрос тот же что и для подсказок дададты).
  2. Из всех полученных вариантов подбирает запись с такими же как у клиента:
    • для ЮЛ: ИНН data.inn и КПП data.kpp
    • для ИП: ИНН data.inn
  3. Проверяет в ответе значение статуса data.state.status, и если значение не ACTIVE, не сохраняет клиента, показывает сообщение об ошибке в зависимости от значения статуса:
    • LIQUIDATING: В процессе ликвидации
    • LIQUIDATED
      • для ЮЛ: Ликвидирована
      • для ИП: Ликвидирован
    • BANKRUPT: В процессе банкротства
    • REORGANIZING В процессе реорганизации, с последующей ликвидацией

Проверка наличия клиента в базе#

@startuml
skinparam ConditionEndStyle hline

start

if (Тип\nклиента) is (ФЛ или ИП) then
    if (В БД есть клиент\n**ФЛ** с таким ИНН) is (да) then
        :это дубль;
    else (НЕТ)
        :это не дубль;
    endif
else (ЮЛ)
    if (В БД есть клиент\n**ЮЛ** с таким ИНН и КПП) is (да) then
        :это дубль;
    else (НЕТ)
        :это не дубль;
    endif
endif
end

@enduml

Если проверка на дубли показала что пользователь пытается создать дублирующего клиента, система отображает сообщение об ошибке под полем ИНН или E-MAIL

Макет

Создание объектов#

@startuml
skinparam ConditionEndStyle hline

start

:Создать объект Customer;

if (Тип\nклиента) is (ФЛ или ИП) then
    :Создать объект Person;
else (ЮЛ)
    :Создать объект Company;
endif

end

@enduml

customer

  • type: из выбранного варианта в меню "Пригласить клиента".
  • status: ACTIVE
  • email: из поля на форме.
  • partner : из поля на форме.
    • если создает приглашение пользователь с ролю PARTNER, в partner записывается партнер связанный с текущим пользователем.
  • createdBy: user.id пользователя, создавшего клиента

company и person

Маппинг атрибутов company и person на поля формы описан в разделе Интерфейс

Журнал событий#

Система создает два события аудита