Юридические лица — Импорт из 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 | Список | Успешный импорт |
| Любой | Список | ”Отмена” / “Назад” |