# Структура ролей и взаимодействий — zov-tech
> Источник истины для всех агентов. Обновлять при изменении бизнес-логики.

---

## Роли

| Роль | Код | Кто |
|------|-----|-----|
| Менеджер | `manager` | Ведёт клиентов, управляет всем циклом |
| Замерщик | `measurer` | Проводит замеры |
| Сборщик | `assembler` | Исполняет сборки |
| Клиент | `client` | Получает подбор, голосует, самозамер |

**Важно:** один человек может иметь несколько ролей (`measurer` + `assembler` = универсал).
Роли выдаются через `/grant_role` менеджером.

---

## Доступ по ролям

### 🧑‍💼 Менеджер (`manager`)
- Полный доступ к CRM: клиенты, замеры, сборки, подборы
- Создаёт заявки на замер → назначает замерщику
- Создаёт заявки на сборку → назначает сборщику
- Создаёт подбор техники — самостоятельно или для клиента
- Видит все подборы своих клиентов
- Выдаёт/отзывает роли (`grant_role`)
- Видит входящие задачи (`manager_pending`)

### 📐 Замерщик (`measurer`)
- Видит входящие заявки на замер (`measurement_inbox`)
- Закрывает замер: фото, логистика, чертежи
- Не видит клиентскую базу и сборки

### 🔧 Сборщик (`assembler`)
- Видит список своих сборок (`assembly_list`)
- Видит детальную карточку сборки
- Читает логистику замера (адрес, этаж, парковка)
- Не видит клиентскую базу и замеры

### 👤 Клиент (`client`)
- Подбор техники: заполняет бриф, смотрит варианты, голосует
- Видит только свои подборы
- Самозамер (в разработке)

---

## Подбор техники — совместный доступ

**Правило:** подбор всегда имеет `manager_tg_id` + `client_tg_id`.
Оба видят его в своём кабинете.

| Сценарий | Кто создаёт | `filled_by` | Видят |
|----------|-------------|-------------|-------|
| Клиент сам | клиент | `client_self` | клиент + его менеджер |
| Менеджер для клиента | менеджер | `manager_for_client` | менеджер + клиент |
| Менеджер без клиента | менеджер | `manager_for_client` | только менеджер |

**Требование к UI:** когда менеджер создаёт подбор из карточки клиента — передавать `client_tg_id` клиента. Бэкенд уже поддерживает.

---

## Цикл сделки

```
1. КЛИЕНТ обращается
        ↓
2. МЕНЕДЖЕР заводит клиента в CRM
        ↓
3. МЕНЕДЖЕР создаёт заявку на замер → назначает ЗАМЕРЩИКУ
        ↓
4. ЗАМЕРЩИК проводит замер, загружает фото/чертежи, закрывает заявку
        ↓
5. МЕНЕДЖЕР создаёт подбор техники
   → самостоятельно, или совместно с КЛИЕНТОМ (клиент голосует)
        ↓
6. МЕНЕДЖЕР создаёт заявку на сборку → назначает СБОРЩИКУ
        ↓
7. СБОРЩИК выполняет сборку, закрывает заявку
        ↓
8. МЕНЕДЖЕР закрывает сделку
```

---

## Экраны MiniApp по ролям

| Маршрут | Менеджер | Замерщик | Сборщик | Клиент |
|---------|----------|----------|---------|--------|
| `#/clients` | ✅ | ❌ | ❌ | ❌ |
| `#/clients/new` | ✅ | ❌ | ❌ | ❌ |
| `#/clients/client/{key}` | ✅ | ❌ | ❌ | ❌ |
| `#/request` | ✅ | ❌ | ❌ | ❌ |
| `#/measurements` | ✅ | ✅ | ❌ | ❌ |
| `#/assembly` | ✅ | ❌ | ✅ | ❌ |
| `#/assembly/new` | ✅ | ❌ | ❌ | ❌ |
| `#/picker` (подбор) | ✅ | ❌ | ❌ | ✅ |
| `#/master` (входящие) | ❌ | ✅ | ✅ | ❌ |
| `#/me` (мой статус) | ✅ | ✅ | ✅ | ✅ |

> `#/master` и `#/me` — не реализованы, в ROADMAP Приоритет 1.

---

## Решения (зафиксированы 2026-05-18)

- [x] Сборщик видит фото замера + логистику ✅
- [x] Клиент видит все свои сборки (полная история) ✅
- [x] Замерщик получает уведомление в боте при назначении заявки ✅
