BUH_bot/docs/BATCH_VALIDATION.md

317 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Валидация при массовой генерации
## Обзор
При массовой генерации документов каждая отгрузка проходит валидацию перед созданием XML. Отгрузки с критическими ошибками исключаются из генерации, а пользователь получает подробный отчет об ошибках.
## Процесс валидации
### 1. Автоматическая проверка
Для каждой отгрузки из списка выполняются следующие проверки:
**Обязательные поля организации:**
- ✓ Наименование организации
- ✓ ИНН организации (с проверкой контрольной суммы)
- ✓ Банковские реквизиты
**Обязательные поля контрагента:**
- ✓ Наименование контрагента
- ✓ ИНН контрагента (если юридическое лицо)
**Обязательные поля заказа:**
- ✓ Номер заказа
- ✓ Дата заказа
- ✓ Сумма заказа > 0
- ✓ Наличие товарных позиций
**Обязательные поля грузополучателя:**
- ✓ Наименование грузополучателя
- ✓ Адрес грузополучателя (критично для УПД)
**Позиции заказа:**
- ✓ Наименование товара
- ✓ Единица измерения
- ✓ Количество > 0
- ✓ Цена ≥ 0
- ✓ Корректная ставка НДС
### 2. Обработка результатов
#### Успешная валидация
Отгрузка добавляется в список для генерации XML.
#### Критические ошибки
Отгрузка исключается из генерации, информация об ошибках сохраняется в отчет.
#### Предупреждения (warnings)
Не блокируют генерацию, но включаются в отчет для информации.
## Отчет об ошибках
При обнаружении критических ошибок валидации пользователь получает текстовый файл с подробным отчетом.
### Структура отчета
```
ОТЧЕТ О ВАЛИДАЦИИ ОТГРУЗОК
==================================================
Дата: 06.11.2025 14:10:31
Всего обработано: 8
С ошибками валидации: 3
КРИТИЧЕСКИЕ ОШИБКИ ВАЛИДАЦИИ:
Отгрузка: 4926
----------------------------------------
• counterparty.inn: ИНН контрагента некорректен
• consignee.address: Не указан адрес грузополучателя
Отгрузка: 4927
----------------------------------------
• organization.inn: ИНН организации некорректен
НЕ НАЙДЕНЫ:
----------------------------------------
• 4928
• 4929
ОШИБКИ ОБРАБОТКИ:
----------------------------------------
• 4931: Connection timeout
Успешно прошли валидацию: 2
----------------------------------------
✓ 4932
✓ 4933
```
### Разделы отчета
1. **Заголовок и статистика**
- Дата генерации отчета
- Общее количество обработанных отгрузок
- Количество отгрузок с ошибками
2. **Критические ошибки валидации**
- Номер отгрузки
- Список критических ошибок с указанием поля и описанием
3. **Не найденные отгрузки**
- Номера отгрузок, которые не найдены в МойСклад
4. **Ошибки обработки**
- Технические ошибки при получении данных из API
5. **Успешные отгрузки**
- Список отгрузок, прошедших валидацию
## Примеры использования
### Пример 1: Все отгрузки валидны
**Ввод:**
```
4926,4927,4928
```
**Результат:**
- ✅ Все 3 отгрузки прошли валидацию
- Генерируется XML с тремя документами
- Отчет об ошибках не создается
### Пример 2: Есть ошибки валидации
**Ввод:**
```
4926,4927,4928,4929
```
**Сценарий:**
- 4926 - ✅ валидна
- 4927 - ❌ отсутствует ИНН организации
- 4928 - ❌ не найдена в системе
- 4929 - ✅ валидна
**Результат:**
1. Бот отправляет текстовый отчет с ошибками для 4927 и 4928
2. Генерируется XML только для отгрузок 4926 и 4929
3. Пользователь видит статистику:
```
❌ Обнаружены ошибки валидации
📊 Статистика:
• Обработано: 4
• С ошибками: 1
• Прошли валидацию: 2
• Не найдено: 1
```
### Пример 3: Ни одна отгрузка не прошла валидацию
**Ввод:**
```
4926,4927,4928
```
**Сценарий:**
Все три отгрузки имеют критические ошибки
**Результат:**
1. Бот отправляет отчет с ошибками для всех трех отгрузок
2. XML не генерируется
3. Предлагается исправить ошибки и повторить попытку
## Типичные ошибки и решения
### Ошибка: "Не указан ИНН контрагента"
**Причина:** У контрагента-юридического лица не заполнен ИНН в МойСклад
**Решение:**
1. Откройте карточку контрагента в МойСклад
2. Заполните поле "ИНН"
3. Сохраните изменения
4. Повторите массовую генерацию
### Ошибка: "Не указан адрес грузополучателя"
**Причина:** Отсутствует адрес доставки, фактический или юридический адрес
**Решение:**
1. Откройте отгрузку в МойСклад
2. Укажите адрес доставки
3. Или заполните адрес в карточке контрагента
4. Повторите массовую генерацию
### Ошибка: "ИНН организации некорректен"
**Причина:** Ошибка в контрольной сумме ИНН или неверный формат
**Решение:**
1. Проверьте ИНН организации в МойСклад
2. Убедитесь, что ИНН состоит из 10 или 12 цифр
3. Проверьте правильность ввода
4. Исправьте и повторите генерацию
### Ошибка: "Заказ не содержит товарных позиций"
**Причина:** Отгрузка создана без товаров
**Решение:**
1. Откройте отгрузку в МойСклад
2. Добавьте товары/услуги
3. Сохраните изменения
4. Повторите массовую генерацию
## Технические детали
### Уровни валидации
```python
class ValidationLevel(Enum):
VALID = "valid" # Все проверки пройдены
WARNING = "warning" # Есть предупреждения
CRITICAL = "critical" # Критические ошибки
```
### Критерии блокировки
Отгрузка **исключается** из генерации, если имеет хотя бы одну ошибку уровня `CRITICAL`.
Отгрузка **включается** в генерацию, если:
- Нет критических ошибок
- Есть только предупреждения (`WARNING`)
- Все проверки пройдены (`VALID`)
### Формат отчета
- **Кодировка:** UTF-8
- **Формат файла:** .txt
- **Имя файла:** `validation_errors_YYYYMMDD_HHMMSS.txt`
- **Местоположение:** временная директория `temp_documents/`
### Производительность
- **Валидация одной отгрузки:** ~0.01-0.05 сек
- **Создание отчета:** ~0.05-0.1 сек
- **Отправка файла:** ~0.5-1 сек
Валидация не замедляет процесс массовой генерации значительно.
## Интеграция с другими функциями
### Одиночная генерация
Валидация также работает при генерации одного документа:
- Результаты валидации показываются в чате
- Пользователь может решить, генерировать XML или нет
- При критических ошибках генерация может быть заблокирована
### Формат XML
Валидация работает для обоих форматов XML:
- ✓ 1С EnterpriseData 1.20
- ✓ ВерсФорм 5.03 (УПД)
### Пакетная генерация
При выборе "Один файл (все документы)":
- Невалидные отгрузки исключаются
- Валидные отгрузки объединяются в один XML
При выборе "Отдельные файлы":
- Для каждой валидной отгрузки создается отдельный XML
- Невалидные отгрузки пропускаются
## Логирование
Все события валидации логируются:
```python
logger.warning(
f"Отгрузка {order_num} не прошла валидацию: "
f"{len(critical_errors)} критических ошибок"
)
```
Логи доступны в файле `logs/bot.log` для анализа и отладки.
## Рекомендации
### Для пользователей
1. **Проверьте данные заранее**
- Используйте одиночную генерацию для проверки отгрузок
- Исправьте ошибки до массовой генерации
2. **Заполняйте все обязательные поля**
- ИНН/КПП организаций и контрагентов
- Адреса доставки
- Банковские реквизиты
3. **Сохраняйте отчеты об ошибках**
- Отчеты помогут выявить типичные проблемы
- Используйте их для улучшения данных в МойСклад
### Для разработчиков
1. **Расширение валидации**
- Добавляйте новые проверки в `modules/validator.py`
- Классифицируйте их по уровням (CRITICAL/WARNING)
2. **Кастомизация отчетов**
- Формат отчета легко настраивается
- Можно добавить HTML-отчеты или PDF
3. **Оптимизация**
- Валидация выполняется асинхронно
- Можно распараллелить для больших объемов
## См. также
- [Массовая генерация документов](BATCH_GENERATION.md)
- [Модуль валидации](validator_refactoring.md)
- [Формат EnterpriseData 1.20](XML_1C_FORMAT.md)
- [API МойСклад](https://dev.moysklad.ru/doc/api/remap/1.2/)