ATM-RIX (Маршруты • Персонал • GPS)

Веб-платформа для управления маршрутами обслуживания/инкассации: роли и филиалы, реестр ATM, подтверждающие фото, GPS-точки и уведомления (Telegram/Drive — опционально).

Python Flask + Jinja2 Templates Flask-SQLAlchemy + Flask-Migrate SQLite (dev) / PostgreSQL (prod) Sessions + RBAC (admin/technician/collector/supervisor) Интеграции: Telegram Bot API, Google Drive API (опционально)
Контекст эксплуатации
  • Сценарий: планирование работ (ТО/инкассация/инспекция) по банкоматам и контроль исполнения на уровне филиалов.
  • Ключевые сущности: User (роль/филиал), Branch, ATM (координаты/модель), Route (статус/приоритет/план/факт).
  • Система ориентирована на работу в корпоративной сети; интеграции могут быть отключены при строгом offline.
Проблема
  • Marshrut ishlarini (xizmat/inkassatsiya) rejalash va ijroni nazorat qilish uchun yagona tizim kerak.
  • Rollar/filiallar bo‘yicha kirish huquqlarini aniq ajratish zarur.
  • Tasdiqlar (foto), GPS nuqtalar va bildirishnomalar bilan sifat nazoratini kuchaytirish kerak.
Решение
  • Routes moduli: type/status/priority, plan/fact vaqtlar va izohlar.
  • Sessions + RBAC: admin/technician/collector/supervisor rollari.
  • Integratsiyalar (ixtiyoriy): Telegram bildirishnomalari, Drive’ga foto yuklash; offline’da o‘chiriladi.
Результат
  • Operatsion jarayonlar bo‘yicha “single source of truth”: vazifa, ijrochi, status.
  • Ijroni nazorat qilish: tasdiqlovchi foto/GPS va audit amaliyotlariga tayyor tuzilma.
  • Dev→prod migratsiya: SQLite’dan PostgreSQL’ga o‘tishga mos arxitektura.

Глубокий разбор

Сжато и по делу: что делает система и почему это важно.

Назначение и бизнес-сценарий

ATM-RIX — это внутренний web-инструмент для управления выездными работами по сети банкоматов: маршруты обслуживания/инкассации/инспекции, распределение по сотрудникам и контроль выполнения.

Ценность для операций: единая точка правды по задачам, исполнителям и статусам; возможность фиксировать подтверждения (фото) и маршрутные события (принят/прибыл/закрыт).

Функциональные модули

**Пользователи и роли (RBAC)**
- Роли: admin / technician / collector / supervisor
- Активность учётной записи, запрет входа для деактивированных
- Хеширование паролей (Werkzeug)

**Справочники: филиалы и ATM**
- Branch: реквизиты, контакты
- ATM: номер, адрес, модель, координаты (lat/lon), связь с филиалом
- Поля под внешний статус (например, из RDS) — для дальнейшей интеграции

**Маршруты (Routes)**
- Типы: maintenance / collection / inspection
- Статусы: planned / in_progress / completed / cancelled
- Приоритеты: low / normal / high / urgent
- План/факт: planned дата, оценка длительности, время старта/завершения, заметки

**Трекинг (GPS) и контроль исполнения**
- Эндпоинты для обновления локации сотрудника
- Фиксация координат событий по маршруту (например, принятие/прибытие) при наличии данных

Технический разбор: архитектура и API

Приложение построено на Flask с разделением на модули через Blueprint’ы:

- `api/auth`: вход/выход, текущий пользователь, проверка авторизации
- `api/routes`: CRUD для Users/Branches/ATMs/Routes + серверные проверки доступа
- отдельные модули под расширенную маршрутизацию/отчёты

**Данные**: SQLAlchemy-модели User/Branch/ATM/Route с сериализацией в dict для JSON API.
**Сессии**: хранение user_id/role/branch_id в session для маршрутизации прав доступа.
**Конфигурация**: поддержка .env (dotenv) и разделение dev/prod (SQLite → PostgreSQL).

Интеграции и подтверждения (опционально)

В проекте предусмотрены практические интеграции для контроля качества исполнения:

- **Фото-подтверждения**: загрузка файлов, безопасное имя, хранение в uploads
- **Google Drive** (опционально): загрузка фото и организация папок маршрута (например, open/closed)
- **Telegram уведомления** (опционально): рассылка сотрудникам филиала/админам о создании маршрута и прикрепление фото

Если окружение строго offline, эти интеграции отключаются, а подтверждения остаются локально (uploads/ + БД).

Надёжность и безопасность (что важно в проде)

- Секреты (SECRET_KEY, токены, ключи интеграций) должны храниться в переменных окружения/.env, а не в коде
- Лимиты и валидация для загрузок (MAX_CONTENT_LENGTH, контроль типов)
- Разделение прав на сервере (admin_required/login_required)
- Логи аудита: входы, создание/закрытие маршрутов, изменения статусов (рекомендуется)
- Резервное копирование: БД + uploads/ по регламенту