zov-tech/ROADMAP.md

106 lines
7.6 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.

# ROADMAP — zov-tech CRM MiniApp
> Обновляется агентами автоматически. Последнее обновление: 2026-05-18 (вечер)
---
## 🎯 Продуктовая цель
Telegram MiniApp для 112 менеджеров салонов ЗОВ: подбор техники, замеры, сборки, CRM-клиенты.
Привязка менеджеров к куратору через инструмент. Клиентский кабинет — воронка покупки.
---
## ✅ Готово (реализовано)
### Инфраструктура
- [x] VPS на Docker (FastAPI + aiogram + Caddy)
- [x] GitHub Pages для MiniApp (auto-deploy при push в master)
- [x] Google Sheets как БД
- [x] HMAC-SHA256 аутентификация через Telegram initData
- [x] Pre-push hook: CSS-линтер + UI Playwright блокируют сломанный код
- [x] CI: GitHub Actions запускает тесты при каждом push
### Модули MiniApp (менеджер/admin)
- [x] Список клиентов + поиск + карточка клиента
- [x] Создание/редактирование клиента
- [x] Замеры: создание, фото, закрытие заявки
- [x] Заявка на замер (назначение замерщику)
- [x] Сборки: создание, список, детальная карточка
- [x] Подбор техники (proposals): создание, варианты, голосование клиента
- [x] Подбор через AI (GigaChat/Claude)
- [x] Приватность клиентских данных (имена/телефоны скрыты визуально)
- [x] 4 темы оформления: Default, Foundry, Boardroom, Atelier
- [x] Экран #/me — профиль для всех ролей (менеджер / сотрудник / клиент)
- [x] Экран #/master — входящие заявки для замерщика/сборщика
- [x] Экран #/inbox — входящие задачи менеджера (решение по подбору)
### Качество
- [x] 15-секундный таймаут на все fetch-запросы (все модули)
- [x] CSS-линтер (запрещённые паттерны + WCAG-контраст)
- [x] Smoke API тесты (12 эндпоинтов)
- [x] Полный тест кабинета менеджера (19 сценариев)
- [x] UI Playwright smoke (15 проверок — все экраны включая #/inbox, #/me)
- [x] CI: smoke-ui.yml — Playwright против GitHub Pages после каждого деплоя
- [x] Docker login на VPS (без 429 при ребилде)
---
## 🔄 В работе
| Задача | Агент | Статус |
|--------|-------|--------|
| Доступ сервисного аккаунта к Google Drive (отгрузки/поступления) | devops | ⏳ ждём подтверждения |
---
## 📋 Бэклог (приоритизирован)
### Приоритет 1 — Завершение MVP менеджера
- [x] Экран «Мой статус» — #/me реализован
- [x] Входящие задачи менеджера — #/inbox реализован
- [ ] Отгрузки и поступления склада (⏳ блокер: share Drive с zov-backend@zov-sborka.iam.gserviceaccount.com)
### Приоритет 2 — Клиентский кабинет ✅
- [x] Базовый клиентский экран #/c/cabinet
- [x] История заказов клиента #/c/orders (подборы + сборки, таймлайн)
- [x] Самозамер #/c/selfmeasure (5-шаговый мастер + бэкенд)
- [x] Детальная карточка сборки #/c/assembly/:id
- [x] Цена замера: 2500₽ + 40₽/км за КАД — везде в UI
- [ ] Калькулятор стоимости кухни — отложен (недостаточно данных)
### Приоритет 2б — Договоры и документы (новый блок)
- [ ] **Модуль Contracts** — лист Contracts в Sheets: номер, дата, стоимость кухни/техники/камня, схема оплаты (50/70/100%), аванс, остаток, срок изготовления, тип фасадов
- [ ] **Личный дашборд сборщика** (#/master/dashboard): календарь работ, заработок по дням, итого за период (8-9% от kitchen_price)
- [ ] **Платформенный модуль подписи** (SignRequest) — единая инфраструктура для всех документов:
- Подпись пальцем на экране (canvas) когда клиент/сторона присутствует
- Удалённая подпись: ссылка в Telegram/SMS → клиент подписывает со своего устройства
- Подпись представителя (строитель, уполномоченный) с отметкой «подписал представитель»
- Отметка «без подписи» с причиной (клиент недоступен)
- Применимо к: актам сборки, актам доставки (водители/экспедиторы), актам приёмки товара, будущим документам
- Поля: `sign_token` (72ч), `signed_via` (canvas/telegram/proxy/absent), `signed_by_name`, `signature_file`, timestamp
- [ ] **Цифровой акт сборки** (#/c/act/:id): Акт№3 (сборка+выезд) + Акт№4 (приёмка товара) — использует SignRequest
- [ ] **Прайс на доп. работы** — голосовой ввод → форматированный PDF/JPEG с факсимиле → отправка в бот или на email; источник: `! ПРАЙС-ЛИСТ.xlsx` (41 позиция, уже структурирован)
- [ ] ⚠️ Уточнить: сборщик получает 8% или 9% от стоимости кухни (прайс неоднозначен)
- [ ] ⚠️ Уточнить: выезд замерщика 2500₽ vs выезд на сборку 1500₽ — разные тарифы, проверить
### Приоритет 3 — Аналитика и управление
- [ ] Дашборд куратора: активность менеджеров, воронка сделок
- [ ] Реестр менеджеров: поле `last_order_date`, 90-дневный контроль активности
- [ ] Метрики: количество замеров, подборов, сборок по менеджеру
### Приоритет 4 — Монетизация
- [ ] Платёжная интеграция (Telegram Stars / ЮKassa)
- [ ] Статусы подписки менеджеров (бесплатно / платно)
### Технический долг
- [ ] `Content-Type: application/json` в `_fetchWithTimeout` (все модули)
- [ ] Аудит `app.js` роутера на edge cases
- [ ] Тест карточки клиента в Playwright (нужна фикстура)
- [ ] Staging-окружение (отдельный VPS или Docker Compose override)
---
## 🚫 Не в скоупе (решение принято)
- Нативное мобильное приложение (остаётся MiniApp)
- База знаний, Обучение, FAQ (отдельный продукт)
- Партнёрская комиссия от производителей