Юридические лица — Импорт из Excel

Роут: /legal-entities/import Доступ: только Franchise

Пошаговый flow: загрузка → валидация → результат → подтверждение.


Шаг 1: Загрузка файла

Что видит пользователь

Заголовок: “Импорт юридических лиц из Excel”

  • Зона drag & drop с текстом “Перетащите xlsx-файл сюда или нажмите для выбора”
  • Ограничение: только .xlsx, до 10 000 строк
  • Ссылка “Скачать шаблон” → GET /api/v1/legal-entities/import/template (скачивание файла)

Действия

ДействиеРезультат
Перетащить файлПереход к шагу 2
Клик по зонеОткрытие file picker
”Скачать шаблон”Скачивание xlsx-файла
”Назад”Возврат на список ЮЛ

Валидация на клиенте

  • Формат: только .xlsx — иначе toast “Поддерживается только формат xlsx”
  • Размер: разумный лимит (50MB) — иначе toast “Файл слишком большой”

Шаг 2: Валидация

API: POST /api/v1/legal-entities/import/preview (multipart/form-data)

Что видит пользователь

  • Текст: “Проверка файла…”
  • Прогресс-бар (для файлов >1000 строк — анимация, для остальных — спиннер)

Переходы

РезультатКуда
Успех (200)Шаг 3
Неверный формат (400)Сообщение об ошибке + возврат к шагу 1
Слишком много строк (422 TOO_MANY_ROWS)“Файл содержит больше 10 000 строк. Разделите файл на части.” + возврат к шагу 1

Шаг 3: Результат валидации

Что видит пользователь

Сводка:

  • “Корректных строк: N” (зелёный)
  • “С ошибками: M” (красный, если M > 0)

Таблица ошибок (если есть):

СтрокаПолеОшибка
12ИНННеверная контрольная сумма
15ИННДубликат (ИНН уже существует)
23ОГРННеверная длина

Действия

КнопкаУсловиеРезультат
”Импортировать корректные (N)“N > 0Переход к шагу 4
”Скачать ошибки”M > 0Скачивание xlsx с ошибочными строками
”Загрузить другой файл”ВсегдаВозврат к шагу 1
”Отмена”ВсегдаВозврат на список ЮЛ

Если все строки с ошибками (N = 0) — кнопка "Импортировать" скрыта. Показывается текст: "Нет корректных строк для импорта. Исправьте ошибки и загрузите файл повторно."


Шаг 4: Подтверждение и импорт

API: POST /api/v1/legal-entities/import/{preview_id}/apply

Модалка подтверждения

  • Текст: “Будет импортировано N юридических лиц. Продолжить?”
  • Кнопки: “Отмена” / “Импортировать”

После запроса

РезультатЧто показываем
УспехToast: “Импортировано N юридических лиц, пропущено M” → redirect на список
Preview истёк (422)“Время ожидания истекло (30 мин). Загрузите файл повторно.” → шаг 1
Ошибка сервераToast с ошибкой, остаёмся на шаге 3

Состояния

СостояниеЧто показываем
Шаг 1: пустоЗона drag & drop + ссылка на шаблон
Шаг 2: загрузкаПрогресс-бар / спиннер
Шаг 3: результатСводка + таблица ошибок
Шаг 3: все ошибкиСводка + “Нет корректных строк”
Шаг 4: импортСпиннер “Импортируем…”
Preview истёкСообщение + возврат к шагу 1

Переходы

ОткудаКудаТриггер
СписокИмпорт (шаг 1)Кнопка “Импорт из Excel”
Шаг 1Шаг 2Загрузка файла
Шаг 2Шаг 3Успешная валидация
Шаг 2Шаг 1Ошибка файла
Шаг 3Шаг 4”Импортировать корректные”
Шаг 3Шаг 1”Загрузить другой файл”
Шаг 4СписокУспешный импорт
ЛюбойСписок”Отмена” / “Назад”

Ссылки