321 lines
14 KiB
Markdown
321 lines
14 KiB
Markdown
# 📋 План развития v2.x — Инициативная группа и Управление вопросами
|
||
|
||
**Дата:** 27 февраля 2026 г.
|
||
**Статус:** ⏳ Ожидает реализации
|
||
|
||
---
|
||
|
||
## 🎯 Концепция
|
||
|
||
**Инициативная группа (ИГ)** — активные жильцы, которые управляют домом. Им нужны:
|
||
- Отдельная рассылка
|
||
- Возможность создавать вопросы/предложения
|
||
- Статусы по вопросам (в работе, на будущем, решено)
|
||
- Прямое взаимодействие через Telegram
|
||
|
||
---
|
||
|
||
## 📊 НОВАЯ ФУНКЦИОНАЛЬНОСТЬ (v2.x)
|
||
|
||
### 1️⃣ Инициативная группа как сущность
|
||
|
||
| № | Функция | Описание | Приоритет |
|
||
|---|---------|----------|-----------|
|
||
| 1.1 | Модель `InitiativeGroup` в БД | Таблица с участниками ИГ | 🔴 Высокий |
|
||
| 1.2 | Поле `is_initiative` в `users` | Флаг участника ИГ | 🔴 Высокий |
|
||
| 1.3 | Команда `/ig_add <user_id>` | Добавить в ИГ (админ) | 🔴 Высокий |
|
||
| 1.4 | Команда `/ig_remove <user_id>` | Удалить из ИГ (админ) | 🔴 Высокий |
|
||
| 1.5 | Команда `/ig_list` | Список участников ИГ | 🔴 Высокий |
|
||
| 1.6 | Команда `/ig_only` | Режим рассылки только ИГ | 🟡 Средний |
|
||
|
||
---
|
||
|
||
### 2️⃣ Рассылки для инициативной группы
|
||
|
||
| № | Функция | Описание | Приоритет |
|
||
|---|---------|----------|-----------|
|
||
| 2.1 | Команда `/ig_broadcast` | Рассылка только ИГ | 🔴 Высокий |
|
||
| 2.2 | Команда `/broadcast_select` | Выбор аудитории (все/ИГ/квартира) | 🔴 Высокий |
|
||
| 2.3 | Шаблон "Только ИГ" | Префикс в сообщениях | 🟡 Средний |
|
||
| 2.4 | Статистика прочтения | Кто прочитал в ИГ | 🟢 Низкий |
|
||
|
||
---
|
||
|
||
### 3️⃣ Управление вопросами/предложениями
|
||
|
||
| № | Функция | Описание | Приоритет |
|
||
|---|---------|----------|-----------|
|
||
| 3.1 | Модель `Issue` в БД | Вопросы/предложения жильцов | 🔴 Высокий |
|
||
| 3.2 | Статусы вопросов | `new`, `in_work`, `on_hold`, `resolved`, `rejected` | 🔴 Высокий |
|
||
| 3.3 | Команда `/issue_create` | Создать вопрос (ИГ) | 🔴 Высокий |
|
||
| 3.4 | Команда `/issue_list` | Список вопросов | 🔴 Высокий |
|
||
| 3.5 | Команда `/issue_status <ID> <статус>` | Изменить статус (ИГ) | 🔴 Высокий |
|
||
| 3.6 | Команда `/issue_view <ID>` | Просмотр деталей | 🔴 Высокий |
|
||
| 3.7 | Команда `/issue_my` | Мои вопросы (жильцы) | 🟡 Средний |
|
||
| 3.8 | Приоритеты вопросов | `low`, `medium`, `high`, `critical` | 🟡 Средний |
|
||
| 3.9 | Назначение ответственного | Кто работает над вопросом | 🟡 Средний |
|
||
| 3.10 | Комментарии к вопросам | Обсуждение внутри вопроса | 🟢 Низкий |
|
||
|
||
---
|
||
|
||
### 4️⃣ Предложения от жильцов (через Telegram)
|
||
|
||
| № | Функция | Описание | Приоритет |
|
||
|---|---------|----------|-----------|
|
||
| 4.1 | Команда `/propose` | Создать предложение (все) | 🔴 Высокий |
|
||
| 4.2 | Модерация предложений | ИГ подтверждает/отклоняет | 🔴 Высокий |
|
||
| 4.3 | Команда `/propose_list` | Список предложений | 🟡 Средний |
|
||
| 4.4 | Голосование за предложения | Жильцы голосуют за важные | 🟡 Средний |
|
||
| 4.5 | Авто-создание вопроса | Если предложение набрало N голосов | 🟢 Низкий |
|
||
|
||
---
|
||
|
||
### 5️⃣ Статусы и уведомления
|
||
|
||
| № | Функция | Описание | Приоритет |
|
||
|---|---------|----------|-----------|
|
||
| 5.1 | Уведомление о новом вопросе | ИГ получает уведомление | 🔴 Высокий |
|
||
| 5.2 | Уведомление о смене статуса | Автор вопроса получает | 🔴 Высокий |
|
||
| 5.3 | Уведомление о комментарии | Участникам вопроса | 🟡 Средний |
|
||
| 5.4 | Еженедельный отчёт ИГ | Какие вопросы в работе | 🟢 Низкий |
|
||
|
||
---
|
||
|
||
### 6️⃣ Веб-интерфейс для ИГ (расширение)
|
||
|
||
| № | Функция | Описание | Приоритет |
|
||
|---|---------|----------|-----------|
|
||
| 6.1 | Страница "Вопросы" | Список всех вопросов | 🔴 Высокий |
|
||
| 6.2 | Фильтры по статусам | new/in_work/resolved | 🔴 Высокий |
|
||
| 6.3 | Редактирование вопроса | Изменить статус, ответственного | 🔴 Высокий |
|
||
| 6.4 | Дашборд ИГ | Статистика по вопросам | 🟡 Средний |
|
||
| 6.5 | Экспорт вопросов | CSV/Excel отчёт | 🟢 Низкий |
|
||
|
||
---
|
||
|
||
## 🗄️ БАЗА ДАННЫХ (новые таблицы)
|
||
|
||
### Таблица `initiative_group`
|
||
```sql
|
||
CREATE TABLE initiative_group (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
user_id BIGINT NOT NULL UNIQUE,
|
||
role TEXT DEFAULT 'member', -- admin, member
|
||
joined_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
is_active BOOLEAN DEFAULT 1,
|
||
FOREIGN KEY (user_id) REFERENCES users(user_id)
|
||
)
|
||
```
|
||
|
||
### Таблица `issues`
|
||
```sql
|
||
CREATE TABLE issues (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
title TEXT NOT NULL,
|
||
description TEXT,
|
||
status TEXT DEFAULT 'new', -- new, in_work, on_hold, resolved, rejected
|
||
priority TEXT DEFAULT 'medium', -- low, medium, high, critical
|
||
created_by BIGINT NOT NULL,
|
||
assigned_to BIGINT, -- кто работает
|
||
apartment VARCHAR(10), -- квартира заявителя
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP,
|
||
resolved_at TIMESTAMP,
|
||
FOREIGN KEY (created_by) REFERENCES users(user_id),
|
||
FOREIGN KEY (assigned_to) REFERENCES users(user_id)
|
||
)
|
||
```
|
||
|
||
### Таблица `issue_comments`
|
||
```sql
|
||
CREATE TABLE issue_comments (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
issue_id INTEGER NOT NULL,
|
||
user_id BIGINT NOT NULL,
|
||
message TEXT NOT NULL,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (issue_id) REFERENCES issues(id),
|
||
FOREIGN KEY (user_id) REFERENCES users(user_id)
|
||
)
|
||
```
|
||
|
||
### Таблица `proposals`
|
||
```sql
|
||
CREATE TABLE proposals (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
title TEXT NOT NULL,
|
||
description TEXT,
|
||
user_id BIGINT NOT NULL,
|
||
votes_count INTEGER DEFAULT 0,
|
||
status TEXT DEFAULT 'pending', -- pending, approved, rejected
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (user_id) REFERENCES users(user_id)
|
||
)
|
||
```
|
||
|
||
### Таблица `proposal_votes`
|
||
```sql
|
||
CREATE TABLE proposal_votes (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
proposal_id INTEGER NOT NULL,
|
||
user_id BIGINT NOT NULL,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
UNIQUE(proposal_id, user_id),
|
||
FOREIGN KEY (proposal_id) REFERENCES proposals(id),
|
||
FOREIGN KEY (user_id) REFERENCES users(user_id)
|
||
)
|
||
```
|
||
|
||
---
|
||
|
||
## 📱 НОВЫЕ КОМАНДЫ (список)
|
||
|
||
### Для админов / ИГ:
|
||
```
|
||
/ig_add <user_id> — Добавить в ИГ
|
||
/ig_remove <user_id> — Удалить из ИГ
|
||
/ig_list — Список ИГ
|
||
/ig_broadcast — Рассылка только ИГ
|
||
/broadcast_select — Выбор аудитории
|
||
|
||
/issue_create — Создать вопрос
|
||
/issue_list — Список вопросов
|
||
/issue_status <ID> <статус>— Изменить статус
|
||
/issue_view <ID> — Просмотр деталей
|
||
/issue_assign <ID> <user> — Назначить ответственного
|
||
|
||
/proposal_approve <ID> — Одобрить предложение
|
||
/proposal_reject <ID> — Отклонить предложение
|
||
```
|
||
|
||
### Для всех жильцов:
|
||
```
|
||
/propose — Создать предложение
|
||
/propose_list — Список предложений
|
||
/issue_my — Мои вопросы
|
||
/vote <ID> — Проголосовать за предложение
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 СЦЕНАРИИ ИСПОЛЬЗОВАНИЯ
|
||
|
||
### Сценарий 1: Добавление в ИГ
|
||
```
|
||
Админ: /ig_add 123456789
|
||
Бот: ✅ Пользователь Иван Иванов добавлен в инициативную группу
|
||
```
|
||
|
||
### Сценарий 2: Рассылка только ИГ
|
||
```
|
||
Админ: /ig_broadcast
|
||
Бот: Отправьте сообщение для инициативной группы:
|
||
Админ: Срочно! Завтра собрание в 19:00
|
||
Бот: ✅ Рассылка отправлена 5 участникам ИГ
|
||
```
|
||
|
||
### Сценарий 3: Создание вопроса
|
||
```
|
||
ИГ: /issue_create
|
||
Бот: Введите название вопроса:
|
||
ИГ: Протечка в подъезде №2
|
||
Бот: Введите описание:
|
||
ИГ: Течёт крыша, нужна УК
|
||
Бот: ✅ Вопрос создан #42
|
||
Статус: new
|
||
Ответственный: не назначен
|
||
```
|
||
|
||
### Сценарий 4: Изменение статуса
|
||
```
|
||
ИГ: /issue_status 42 in_work
|
||
Бот: ✅ Вопрос #42 переведён в статус "В работе"
|
||
Автор уведомлён
|
||
```
|
||
|
||
### Сценарий 5: Предложение от жильца
|
||
```
|
||
Жилец: /propose
|
||
Бот: Введите ваше предложение:
|
||
Жилец: Установить видеонаблюдение во дворе
|
||
Бот: ✅ Предложение создано #15
|
||
Для активации нужно 10 голосов
|
||
Текущих: 0
|
||
|
||
Другой жилец: /vote 15
|
||
Бот: ✅ Вы проголосовали за предложение #15
|
||
Голосов: 1/10
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 ТАБЛИЦА ВСЕХ НОВЫХ ФУНКЦИЙ (итоговая)
|
||
|
||
| № | Функция | Версия | Статус | Приоритет |
|
||
|---|---------|--------|--------|-----------|
|
||
| 1.1 | Модель `InitiativeGroup` в БД | v2.1 | ⏳ Ожидает | 🔴 |
|
||
| 1.2 | Поле `is_initiative` в `users` | v2.1 | ⏳ Ожидает | 🔴 |
|
||
| 1.3 | Команда `/ig_add` | v2.1 | ⏳ Ожидает | 🔴 |
|
||
| 1.4 | Команда `/ig_remove` | v2.1 | ⏳ Ожидает | 🔴 |
|
||
| 1.5 | Команда `/ig_list` | v2.1 | ⏳ Ожидает | 🔴 |
|
||
| 2.1 | Команда `/ig_broadcast` | v2.1 | ⏳ Ожидает | 🔴 |
|
||
| 2.2 | Команда `/broadcast_select` | v2.1 | ⏳ Ожидает | 🔴 |
|
||
| 3.1 | Модель `Issue` в БД | v2.2 | ⏳ Ожидает | 🔴 |
|
||
| 3.2 | Статусы вопросов | v2.2 | ⏳ Ожидает | 🔴 |
|
||
| 3.3 | Команда `/issue_create` | v2.2 | ⏳ Ожидает | 🔴 |
|
||
| 3.4 | Команда `/issue_list` | v2.2 | ⏳ Ожидает | 🔴 |
|
||
| 3.5 | Команда `/issue_status` | v2.2 | ⏳ Ожидает | 🔴 |
|
||
| 3.6 | Команда `/issue_view` | v2.2 | ⏳ Ожидает | 🔴 |
|
||
| 4.1 | Команда `/propose` | v2.3 | ⏳ Ожидает | 🔴 |
|
||
| 4.2 | Модерация предложений | v2.3 | ⏳ Ожидает | 🔴 |
|
||
| 4.3 | Команда `/propose_list` | v2.3 | ⏳ Ожидает | 🟡 |
|
||
| 4.4 | Голосование за предложения | v2.3 | ⏳ Ожидает | 🟡 |
|
||
| 5.1 | Уведомление о новом вопросе | v2.2 | ⏳ Ожидает | 🔴 |
|
||
| 5.2 | Уведомление о смене статуса | v2.2 | ⏳ Ожидает | 🔴 |
|
||
| 6.1 | Страница "Вопросы" (веб) | v2.4 | ⏳ Ожидает | 🔴 |
|
||
| 6.2 | Фильтры по статусам (веб) | v2.4 | ⏳ Ожидает | 🔴 |
|
||
|
||
---
|
||
|
||
## 🗺️ ДОРОЖНАЯ КАРТА
|
||
|
||
### v2.1 — Инициативная группа (1-2 дня)
|
||
- ✅ Модель в БД
|
||
- ✅ Команды `/ig_add`, `/ig_remove`, `/ig_list`
|
||
- ✅ Рассылка только ИГ
|
||
|
||
### v2.2 — Управление вопросами (2-3 дня)
|
||
- ✅ Модель `Issue` в БД
|
||
- ✅ Команды создания/просмотра/статусов
|
||
- ✅ Уведомления о сменах
|
||
|
||
### v2.3 — Предложения от жильцов (2 дня)
|
||
- ✅ Команда `/propose`
|
||
- ✅ Голосование
|
||
- ✅ Модерация ИГ
|
||
|
||
### v2.4 — Веб-интерфейс для ИГ (2-3 дня)
|
||
- ✅ Страница вопросов
|
||
- ✅ Фильтры и редактирование
|
||
- ✅ Дашборд
|
||
|
||
---
|
||
|
||
## 📝 ЗАМЕТКИ
|
||
|
||
### Важные решения:
|
||
1. **ИГ как отдельная таблица** или поле в `users`?
|
||
- ✅ Решил: **И то и то** — отдельная таблица для ролей + поле для быстрого доступа
|
||
|
||
2. **Кто может создавать вопросы?**
|
||
- ✅ Решил: **Все жильцы**, но модерация ИГ
|
||
|
||
3. **Сколько голосов для активации предложения?**
|
||
- ✅ Решил: **Настраиваемо** (по умолчанию 10% от жильцов)
|
||
|
||
4. **Удалять ли вопросы?**
|
||
- ✅ Решил: **Нет**, только статус `resolved` или `rejected`
|
||
|
||
---
|
||
|
||
**ГОТОВ К РЕАЛИЗАЦИИ! ЖДУ УКАЗАНИЙ!** 🚀
|