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-система — наша задача:

  1. Принять её события (push или pull — обсудить)
  2. Сохранить time-series метрики
  3. Отобразить в админке
  4. Превратить через LLM в action-инсайты

Что хочет бизнес

Маркетолог / менеджер ТТ открывает «AI-аналитика → Камеры», видит:

  1. 3+ камеры зала (касса, зал, витрина) — карточки с тёмным placeholder’ом изображения и метриками поверх
  2. Real-time метрики — длина очереди, загрузка зала (%), конверсия с витрины (%)
  3. Тепловая карта зала — где зоны больше всего «горят» (где люди стоят) — опционально для MVP
  4. Тренды — пики очереди по часам, средняя загрузка по дням недели
  5. LLM-инсайты — «в 12:40–13:20 очередь стабильно > 4 — добавь второго кассира»

Функции «Computer Vision»

  1. Приём событий — endpoint для push от CV-системы коллеги (HTTP / Kafka — обсудить)
  2. Time-series хранение — метрики по (camera_id, metric_type, timestamp, value)
  3. Real-time агрегация — последние 5 минут / 1 час / день
  4. LLM-инсайты — пересчёт раз в час, на основе свежих метрик
  5. Управление камерами — список, имена, привязка к ТТ, активность

Поток данных

Камера в зале → 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

ПолеТипОписание
idUUIDPK
store_idUUID FK
external_idVARCHARID камеры в CV-системе коллеги
nameVARCHAR«Касса», «Зал», «Витрина»
zone_typeENUMcashier_queue / dining_area / showcase / entrance
activeBOOLEAN
created_at, last_event_atTIMESTAMPTZ

cv_metric

ПолеТипОписание
idUUIDPK
camera_idUUID FK
metric_typeENUMqueue_length / zone_load / attention_at_showcase / dwell_time
valueDECIMALЧисленное значение
unitVARCHARcount / percent / seconds
captured_atTIMESTAMPTZВремя с камеры (не сервера)
received_atTIMESTAMPTZКогда мы приняли событие

Гранулярность — раз в 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 за один запрос

Открытые вопросы (для контракта с коллегой)

  1. Push или Pull? Коллега шлёт нам события или мы запрашиваем?
  2. Транспорт: HTTP / Kafka / WebSocket?
  3. Какие метрики коллега уже считает? Точный список metric_type
  4. Гранулярность: раз в N секунд / per event?
  5. Идентификатор камеры: какой external_id формат?
  6. Аутентификация: 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-servicePermissions cv.read, cv.read.all, cv.config

Acceptance criteria для демо 29.05

  1. Раздел «AI-аналитика → Камеры» открывается
  2. 3 камеры в UI (Касса / Зал / Витрина) — карточки с placeholder-видом и метриками
  3. Метрики обновляются в реальном времени (через SSE или polling каждые 30 сек)
  4. На каждой камере виден bounding-box (как в HTML-превью) с подписями «Очередь 4», «Гости», «Внимание»
  5. 2–3 LLM-инсайта на русском — упоминают конкретные камеры и time-окна
  6. Если коллегин CV даст вовремя — реальные данные. Иначе — fallback на mock с реалистичными цифрами с пометкой «mock»

Ссылки