Skip to content

MrSpectra/fieldops

Repository files navigation

FieldOps

Автоматизированное рабочее место диспетчера службы ЖКХ: приём, маршрутизация и контроль исполнения заявок плюс планирование профилактических работ через интерактивный календарь и систему чек-листов.

Проект выполнен на заказ. Это обезличенная демо-версия для портфолио: все пользователи, адреса, телефоны, организации и заявки вымышлены. Реальные данные заказчика удалены и не входят в репозиторий.


Проблема

Диспетчерская служба ЖКХ принимает поток разнородных заявок (аварии, плановое ТО, административные задачи) по телефону, в мессенджерах и на бумаге. Это приводит к потерянным заявкам, отсутствию контроля качества работ на местах и трудоёмкой ручной отчётности перед руководством и ГЖИ.

Задача системы - превратить хаотичный поток обращений в структурированный план работ с прозрачным контролем исполнения и автоматической отчётностью.


Возможности

  • Интерактивный календарь - задачи по дням, drag-and-drop переноса с проверкой загруженности исполнителя, цветовая индикация (аварии / просрочки / выполнено), быстрые личные заметки на дату.
  • Управление заявками - три типа (аварийная / плановая / административная), приоритеты, дедлайны, статусы, журнал изменений, прикрепление файлов.
  • Конструктор чек-листов - типовые шаблоны работ; обязательные пункты и пункты с обязательной фотофиксацией; задачу нельзя закрыть, пока не отмечены все обязательные пункты.
  • Справочники - дома/объекты и исполнители (бригады, график, контакты).
  • Отчётность - выгрузка заявок и сводки в Excel (.xlsx) и PDF за период, статистика по статусам и типам, рейтинг исполнителей.
  • Ролевая модель - admin, dispatcher, master, manager. Мастер видит только свои задачи и не может их удалять; руководитель видит аналитику.
  • Уведомления - оповещения о новых авариях, приближении дедлайна и смене статуса.
  • Погодный виджет - прогноз в шапке календаря (OpenWeatherMap, опционально).

Стек

  • Backend: Python 3.10+, Flask 3.x
  • База данных: SQLite (модуль sqlite3, чистый SQL без ORM)
  • Frontend: серверный рендеринг Jinja2 + HTML5/CSS3 + vanilla JavaScript (без фреймворков)
  • Отчёты: openpyxl (Excel), reportlab (PDF)
  • Десктоп (опционально, Windows): pywebview - нативное окно поверх локального Flask-сервера

Архитектура

fieldops/
├── backend/
│   ├── app.py            # Flask-приложение: маршруты, авторизация, отчёты, API
│   ├── db.py             # подключение к SQLite (per-request, через flask.g)
│   ├── schema.sql        # DDL: таблицы, индексы, дефолтные настройки
│   ├── init_db.py        # создание БД + вымышленные демо-данные
│   ├── templates/        # Jinja2-шаблоны (base + страницы по модулям)
│   └── static/
│       ├── css/style.css # стили (sidebar-навигация, минимализм)
│       ├── js/main.js    # поиск, уведомления, drag-and-drop календаря, виджет погоды
│       └── uploads/      # вложения к задачам (в репозитории пусто)
├── start_web.py          # запуск в браузере (находит свободный порт, открывает вкладку)
├── main.py               # запуск как десктоп-приложение (pywebview)
├── setup.bat             # установка зависимостей и БД на Windows
├── requirements.txt
├── .env.example          # шаблон переменных окружения
└── DEMO_ACCOUNTS.txt     # демо-логины

Ключевые решения:

  • Без ORM - прямой SQL через sqlite3 для прозрачности и предсказуемости запросов.
  • Соединение на запрос хранится в flask.g и закрывается в teardown_appcontext.
  • Ролевой доступ реализован декораторами login_required / dispatcher_required / admin_required.
  • Целостность данных обеспечивается на уровне схемы (CHECK-ограничения статусов и типов, внешние ключи с ON DELETE).
  • Бизнес-правило завершения задачи (все обязательные пункты чек-листа отмечены) проверяется и на сервере, и в UI.
  • Пароли хранятся как хэши (werkzeug.security), SECRET_KEY генерируется при первом запуске.

Запуск

Требуется Python 3.10+.

# 1. Установить зависимости
pip install -r requirements.txt

# 2. (необязательно) скопировать шаблон окружения
cp .env.example .env

# 3. Запустить в браузере - БД с демо-данными создаётся автоматически
python start_web.py

Приложение поднимется на http://127.0.0.1:<свободный порт> и откроется в браузере.

Создать/пересоздать базу вручную можно так:

python -c "import sys; sys.path.insert(0, 'backend'); from init_db import init_db; init_db()"

Удаление backend/data.db сбрасывает базу - при следующем запуске она будет создана заново с демо-данными.

Демо-доступы

Роль Логин Пароль
Администратор admin admin123
Диспетчер dispatcher disp123
Мастер master master123
Руководитель manager mngr123

Заметки

  • Виджет погоды и email-уведомления требуют ключей в .env (или в разделе «Настройки»); без них приложение полностью работоспособно.
  • Десктоп-режим (main.py / setup.bat) рассчитан на Windows и Microsoft Edge WebView2; кроссплатформенный путь - веб-режим (start_web.py).

About

FieldOps - field service dispatch & work-order management. Flask, SQLite, Jinja2, role-based access, Excel/PDF report export. i18n EN/CS/RU. Demo data only.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors