BUH_bot/README.md
Игорь Надеин e24ef22337 feat: Add multi-user authentication system
- Implement per-user МойСклад credentials storage
- Add Fernet encryption for passwords (AES-128)
- Add UserManager module for credential management
- Add /logout and /change_credentials commands
- Update bot.py with AUTH_LOGIN/AUTH_PASSWORD states
- Each user works with their own МойСклад account
- Credentials stored in encrypted users.json
2025-11-03 14:20:07 +03:00

355 lines
14 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.

# Бот для бухгалтеров
Telegram-бот для автоматизации работы бухгалтеров: получение данных из МойСклад, валидация и генерация документов (УПД, ТН) в форматах XML (ВерсФорм 5.03) и Excel.
## 🔐 Многопользовательская система
**Каждый пользователь работает со своим личным кабинетом МойСклад!**
- Авторизация при первом запуске через `/start`
- Учетные данные шифруются и хранятся безопасно
- Возможность смены credentials через `/change_credentials`
- Выход из аккаунта через `/logout`
📖 Подробнее: [docs/MULTI_USER_AUTH.md](docs/MULTI_USER_AUTH.md)
## 🚀 Возможности
- 📦 **Интеграция с МойСклад** - автоматическое получение данных о заказах через API
- ✅ **Валидация данных** - проверка обязательных и желательных полей (ИНН, КПП, адреса, товары)
- 📄 **Генерация XML** - создание документов в формате ВерсФорм 5.03 (УПД/ТН)
- 📊 **Генерация Excel** - выгрузка в форматы УПД и ТОРГ-12
- 🤖 **Telegram интерфейс** - удобное управление через бота
## 📋 Требования
- Python 3.10+
- Аккаунт МойСклад с API доступом
- Telegram Bot Token
## 🛠️ Установка
### Вариант 1: Docker (рекомендуется) 🐳
#### Development
**Преимущества:**
- Изолированное окружение
- Простое развертывание
- Автоматический перезапуск
- Управление ресурсами
**Linux/Mac:**
```bash
# Клонирование
git clone <repository_url>
cd BUH_bot
# Настройка
cp .env.example .env
nano .env # Укажите TELEGRAM_BOT_TOKEN
# Запуск
chmod +x start.sh
./start.sh
```
**Windows:**
```cmd
git clone <repository_url>
cd BUH_bot
copy .env.example .env
notepad .env
start.bat
```
📖 Подробная документация: [docs/DOCKER_QUICKSTART.md](docs/DOCKER_QUICKSTART.md)
📚 Полное руководство: [docs/DOCKER_GUIDE.md](docs/DOCKER_GUIDE.md)
#### Production 🚀
Для production используется docker-compose с готовыми образами, мониторингом и автообновлением:
**Компоненты:**
- ✅ BUH Bot из registry (ghcr.io)
- ✅ Nginx reverse proxy
- ✅ Prometheus + Grafana мониторинг
- ✅ Watchtower автообновление
- ✅ Автоматический backup
**Быстрый деплой:**
```bash
# 1. Сборка и публикация образа
./build-image.sh
# 2. Настройка production
cp .env.prod.example .env.prod
nano .env.prod # TELEGRAM_BOT_TOKEN и др.
# 3. Деплой
./deploy-prod.sh
```
**Или через Makefile:**
```bash
make prod-build # Собрать образ
make prod-up # Запустить production
make prod-logs # Логи
```
**Мониторинг:**
- 📊 Grafana: `http://your-server:3000`
- 📈 Prometheus: `http://your-server:9090`
- 🐳 cAdvisor: `http://your-server:8080`
📖 Production документация: [docs/PRODUCTION_DEPLOYMENT.md](docs/PRODUCTION_DEPLOYMENT.md)
### Вариант 2: Локальная установка
1. **Клонируйте репозиторий**
```bash
git clone <repository_url>
cd BUH_bot
```
2. **Создайте виртуальное окружение**
```bash
python -m venv venv
source venv/bin/activate # Linux/Mac
# или
venv\Scripts\activate # Windows
```
3. **Установите зависимости**
```bash
pip install -r requirements.txt
```
4. **Настройте переменные окружения**
```bash
cp .env.example .env
```
Отредактируйте `.env` и укажите:
- `TELEGRAM_BOT_TOKEN` - токен Telegram бота
⚠️ **ВАЖНО:** `MOYSKLAD_LOGIN` и `MOYSKLAD_PASSWORD` больше не нужны!
Каждый пользователь вводит свои учетные данные МойСклад при первом запуске бота через `/start`.
5. **Создайте Telegram бота**
- Откройте [@BotFather](https://t.me/BotFather) в Telegram
- Отправьте команду `/newbot`
- Следуйте инструкциям и получите токен
- Вставьте токен в `.env`
## 🚀 Запуск
### Docker (рекомендуется)
```bash
# Linux/Mac
./start.sh
# Windows
start.bat
# Или напрямую
docker-compose up -d
```
**Управление:**
```bash
# Логи
docker-compose logs -f
# Остановка
docker-compose down
# Перезапуск
docker-compose restart
```
### Локальный запуск
```bash
python bot.py
```
### Первое использование
1. Отправьте `/start` боту в Telegram
2. Введите **ваш логин** от МойСклад
3. Введите **ваш пароль** от МойСклад (сообщение будет удалено)
4. Бот проверит учетные данные и сохранит их в зашифрованном виде
5. Начните работу!
### Управление учетными данными
- `/change_credentials` - сменить логин/пароль
- `/logout` - выйти из аккаунта и удалить данные
## 📖 Использование
### Команды бота
- `/start` - Начало работы / авторизация в МойСклад
- `/help` - Справка по использованию
- `/logout` - Выход из аккаунта (удаление учетных данных)
- `/change_credentials` - Смена логина/пароля МойСклад
- `🔍 Поиск отгрузки` - Найти отгрузку по номеру заказа
- `📋 Список отгрузок` - Показать последние отгрузки
### Пример работы
1. Первый запуск:
- Отправьте `/start`
- Введите логин МойСклад
- Введите пароль МойСклад (сообщение удаляется автоматически)
2. Поиск отгрузки:
- Нажмите `🔍 Поиск отгрузки`
- Введите номер заказа (например: `951`)
3. Работа с отгрузкой:
- Выберите отгрузку из списка
- Просмотрите результаты валидации
- Выберите формат документа: `📄 XML` или `📊 Excel`
- Для Excel бот автоматически рекомендует УПД или ТН в зависимости от типа контрагента
- Получите готовый файл
## 📁 Структура проекта
```
BUH_bot/
├── .env # Переменные окружения (только TELEGRAM_BOT_TOKEN)
├── .env.example # Пример настроек
├── .gitignore # Игнорируемые файлы
├── requirements.txt # Зависимости Python
├── config.py # Конфигурация приложения
├── bot.py # Основной файл бота (точка входа)
├── users.json # Зашифрованные данные пользователей (не в Git!)
├── .encryption_key # Ключ шифрования (не в Git!)
│
├── docs/ # Документация
│ ├── MULTI_USER_AUTH.md # Описание системы авторизации
│ ├── PROJECT_STRUCTURE.md # Структура проекта
│ └── CHANGES_2025-11-03.md # История изменений
│
├── modules/ # Модули приложения
│ ├── __init__.py
│ ├── moysklad_client.py # API клиент МойСклад
│ ├── validator.py # Валидация данных заказов
│ ├── xml_generator.py # Генерация XML (ВерсФорм 5.03)
│ └── user_manager.py # ⭐ NEW: Управление пользователями и credentials
│
├── scripts/ # Вспомогательные скрипты
│ └── __init__.py
│
└── temp_documents/ # Временные файлы (не в Git!)
```
## 🔍 Валидация данных
Бот проверяет следующие данные:
### Обязательные поля (❌ CRITICAL)
- **Продавец**: ИНН, КПП, наименование, юридический адрес
- **Покупатель**: ИНН, КПП, наименование, юридический адрес
- **Товары**: наименование, количество, цена, ставка НДС
- **Заказ**: номер, дата, сумма
### Желательные поля (⚠️ WARNING)
- ОГРН/ОГРНИП
- Расчетный счет и банк
- Контактные данные
- Единицы измерения товаров
### Валидация форматов
- **ИНН**: 10 цифр (юр. лица) или 12 цифр (ИП) + контрольная сумма
- **КПП**: 9 цифр
- **ОГРН**: 13 цифр (юр. лица) или 15 цифр (ИП)
- **НДС**: корректные ставки (0%, 10%, 20%, без НДС)
- **Суммы**: положительные числа, соответствие итогов
## 📄 Форматы документов
### XML (ВерсФорм 5.03)
- **УПД** - Универсальный передаточный документ (Счет-фактура + ТОРГ-12)
- **ТН** - Товарная накладная (ТОРГ-12)
Соответствие приказу ФНС России для электронного документооборота.
### Excel
- **УПД** - Печатная форма с полными реквизитами
- **ТОРГ-12** - Товарная накладная
## 🔐 Безопасность
⚠️ **Важно**:
- Никогда не коммитьте `.env` в репозиторий
- Храните учетные данные в безопасности
- Используйте HTTPS для всех API запросов
- Регулярно обновляйте зависимости
## 🐛 Устранение неполадок
### Ошибка авторизации в МойСклад
- Проверьте правильность логина и пароля
- Убедитесь, что у аккаунта есть API доступ
- Проверьте подключение к интернету
- Попробуйте `/change_credentials` для смены данных
### Ошибка: "Invalid token" (Telegram)
- Проверьте корректность токена в `.env`
- Убедитесь, что бот активен в BotFather
### Потеря доступа к данным
⚠️ Если файл `.encryption_key` был удален или поврежден:
- Все сохраненные учетные данные станут недоступны
- Пользователям нужно заново пройти авторизацию через `/start`
### Проблемы с многопользовательским доступом
- Убедитесь, что файл `users.json` доступен для записи
- Проверьте, что `.encryption_key` существует
- Смотрите логи бота для детальной информации
## 📚 Документация
- [API МойСклад](https://dev.moysklad.ru/)
- [Форматы ФНС](https://www.nalog.gov.ru/)
- [Telegram Bot API](https://core.telegram.org/bots/api)
## 🤝 Поддержка
При возникновении вопросов или проблем:
1. Проверьте раздел "Устранение неполадок"
2. Изучите `PROJECT_PLAN.md` для детального описания
3. Проверьте логи в консоли
## 📝 Лицензия
MIT License
## 🎯 Roadmap
- [x] ✅ Многопользовательская система авторизации
- [x] ✅ Шифрование учетных данных пользователей
- [x] ✅ Интеграция с МойСклад API
- [x] ✅ Валидация данных отгрузок
- [x] ✅ Генерация XML (УПД 5.03)
- [x] ✅ Генерация Excel через API МойСклад
- [x] ✅ Умная рекомендация шаблонов (ТН для физ.лиц, УПД для юр.лиц/ИП)
- [ ] База данных для истории генерации
- [ ] Автоматические уведомления о новых заказах
- [ ] Генерация PDF печатных форм
- [ ] Электронная подпись XML документов
- [ ] Интеграция с 1С:Бухгалтерия
- [ ] OAuth авторизация МойСклад
- [ ] Webhook режим для бота
---
Сделано с ❤️ для бухгалтеров