BR 6.6: Computer Vision внутри ТТ
Демо 29.05.2026 — Сценарий 4 (часть 2)
Этот BR закрывает CV-наблюдение Сценария 4: камеры в зале реальной ТТ снимают, AI-сервис (делает коллега) детектирует очередь, загрузку зала, внимание у витрины. ERP принимает метрики, отображает в админке и через LLM превращает в инсайты («очередь > 4 в 12:40–13:20 — добавь кассира»). Превью — HTML-демо.
Зависит от:
- Готовое CV у коллеги — он отлаживает свою систему, передаст контракт API. ERP — потребитель данных
- BR 6.4 — использует LLM-провайдер для генерации инсайтов
Открытый блокер
Контракт API от коллеги ещё не получен. До этого — каркас сервиса и спеки готовим, реальная интеграция — после получения контракта.
Контекст
Раздел аналитики не будет полным без real-time observation внутри точки. Когда мы видим только заказы и склад — мы видим только результат. Камеры с CV дают сигнал ДО факта: «прямо сейчас в очереди 4 человека», «38% подошедших к витрине не покупают», «зал заполнен на 67%».
У коллеги уже отлажена CV-система — наша задача:
- Принять её события (push или pull — обсудить)
- Сохранить time-series метрики
- Отобразить в админке
- Превратить через LLM в action-инсайты
Что хочет бизнес
Маркетолог / менеджер ТТ открывает «AI-аналитика → Камеры», видит:
- 3+ камеры зала (касса, зал, витрина) — карточки с тёмным placeholder’ом изображения и метриками поверх
- Real-time метрики — длина очереди, загрузка зала (%), конверсия с витрины (%)
- Тепловая карта зала — где зоны больше всего «горят» (где люди стоят) — опционально для MVP
- Тренды — пики очереди по часам, средняя загрузка по дням недели
- LLM-инсайты — «в 12:40–13:20 очередь стабильно > 4 — добавь второго кассира»
Функции «Computer Vision»
- Приём событий — endpoint для push от CV-системы коллеги (HTTP / Kafka — обсудить)
- Time-series хранение — метрики по
(camera_id, metric_type, timestamp, value) - Real-time агрегация — последние 5 минут / 1 час / день
- LLM-инсайты — пересчёт раз в час, на основе свежих метрик
- Управление камерами — список, имена, привязка к ТТ, активность
Поток данных
Камера в зале → CV-система коллеги (детектирует объекты, считает)
↓ HTTPS POST (TBD: или Kafka)
ERP / cv-ingest service
↓ записывает в cv_metric (TS)
LLM-провайдер (TBD, см. BR 6.4) — раз в час
↓ забирает агрегаты за час
↓ генерирует insight'ы
ERP UI (admin web)
↓ отображает метрики и insight'ы
Пользователи
| Профиль | Кто | Permissions |
|---|---|---|
| Менеджер ТТ / владелец | Видит свои камеры | cv.read |
| Администратор франшизы | Видит всё | cv.read.all, cv.config |
Сущности
cv_camera
| Поле | Тип | Описание |
|---|---|---|
id | UUID | PK |
store_id | UUID FK | |
external_id | VARCHAR | ID камеры в CV-системе коллеги |
name | VARCHAR | «Касса», «Зал», «Витрина» |
zone_type | ENUM | cashier_queue / dining_area / showcase / entrance |
active | BOOLEAN | |
created_at, last_event_at | TIMESTAMPTZ |
cv_metric
| Поле | Тип | Описание |
|---|---|---|
id | UUID | PK |
camera_id | UUID FK | |
metric_type | ENUM | queue_length / zone_load / attention_at_showcase / dwell_time |
value | DECIMAL | Численное значение |
unit | VARCHAR | count / percent / seconds |
captured_at | TIMESTAMPTZ | Время с камеры (не сервера) |
received_at | TIMESTAMPTZ | Когда мы приняли событие |
Гранулярность — раз в 30 секунд (зависит от того что отдаст коллега).
cv_insight
Аналогично osint_insight из BR 6.5 — LLM-сгенерированный текст на основе агрегатов.
API (новый cv-ingest service)
От коллеги к нам (приём)
| Метод | Путь | Описание |
|---|---|---|
| POST | /api/v1/cv/events | Принимает batch событий: [{camera_external_id, metric_type, value, captured_at}] |
Авторизация: service token (как у Photo Studio).
От админки к нам (чтение)
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/v1/admin/cv/cameras?store_id= | Список камер ТТ |
| GET | /api/v1/admin/cv/metrics?camera_id=&period=1h | Метрики камеры за период |
| GET | /api/v1/admin/cv/insights?store_id= | LLM-инсайты |
| GET | /api/v1/admin/cv/dashboard?store_id= | Aggregate dashboard endpoint — всё, что нужно UI за один запрос |
Открытые вопросы (для контракта с коллегой)
- Push или Pull? Коллега шлёт нам события или мы запрашиваем?
- Транспорт: HTTP / Kafka / WebSocket?
- Какие метрики коллега уже считает? Точный список
metric_type - Гранулярность: раз в N секунд / per event?
- Идентификатор камеры: какой external_id формат?
- Аутентификация: shared secret / mTLS / service token?
Согласовать в течение недели.
Новые permissions
| Ключ | Описание |
|---|---|
cv.read | Просмотр камер и метрик своей ТТ |
cv.read.all | Просмотр по всей франшизе |
cv.config | Настройка камер (привязка к ТТ, имя, активность) |
Что НЕ входит в текущий скоуп
- Сам CV-движок (детекция, трекинг) — делает коллега
- Хранение видео — только метрики
- Распознавание лиц гостей — отдельный сервис, Phase 2 + compliance issues
- Live-стрим видео в админку — Phase 2
- Уведомления push на телефон менеджера при критических событиях — Phase 2
Затронутые сервисы и продукты
| Компонент | Что меняется |
|---|---|
| erp-cv-ingest (новый) | Java / Python, БД cv_db, time-series таблицы, REST API |
| LLM-провайдер | Используется для cv_insight. Самопис erp-llm-gateway отказан 2026-05-13 — см. BR 6.4 |
| admin-bff | Прокси для /cv/* эндпоинтов |
| erp-admin/web | Вкладка «Камеры» в разделе «AI-аналитика» с реальными изображениями placeholder’ов + метрики |
| erp-user-service | Permissions cv.read, cv.read.all, cv.config |
Acceptance criteria для демо 29.05
- Раздел «AI-аналитика → Камеры» открывается
- 3 камеры в UI (Касса / Зал / Витрина) — карточки с placeholder-видом и метриками
- Метрики обновляются в реальном времени (через SSE или polling каждые 30 сек)
- На каждой камере виден bounding-box (как в HTML-превью) с подписями «Очередь 4», «Гости», «Внимание»
- 2–3 LLM-инсайта на русском — упоминают конкретные камеры и time-окна
- Если коллегин CV даст вовремя — реальные данные. Иначе — fallback на mock с реалистичными цифрами с пометкой «mock»
Ссылки
- HTML-превью демо
- BR 6.4 — LLM-провайдер
- Спека: Computer Vision