Схемы Что нового

Видеонаблюдение — услуга под ключ

Видеонаблюдение (/admin/video/) — продажа и обслуживание видеонаблюдения как услуги: от заявки до ежемесячной абонплаты. Модуль ведёт объекты клиента с камерами, воронку монтажных проектов с документами, пульт оператора охраны, собственный медиа-сервер и архив записей. Деньги идут через отдельный лицевой счёт объекта, оборудование — через склад, сделки — общие с CRM.

Модуль «Видеонаблюдение» — на сайте продукта
Содержание раздела
Обучающее видео 2:45

Шесть шагов работы с модулем на живых экранах: объекты и камеры, проекты, подписки и оплата.

1920×1080 с озвучкой Скачать

Как устроен модуль

Дашборд видеонаблюдения: сводка, облачный архив, воронка и последние проекты
Дашборд: сводка, облачный архив, воронка проектов и последние проекты

Ядро — объект наблюдения: адрес клиента, на котором стоят камеры. У объекта свой лицевой счёт, поэтому долг за видео отключает камеры, но не трогает интернет. Всё остальное навешивается на объект:

flowchart LR
  A["Клиент"] --> B["Объект наблюдения"]
  B --> C["Камеры"]
  B --> D["Оборудование"]
  B --> E["Подписки"]
  B --> F["Проект (сделка)"]
  E --> G["Ежемесячные списания"]
  C --> H["Медиа-сервер"]
  H --> I["Архив записей"]
  B --> J["Пульт ЧОПа"]

Все страницы раздела устроены одинаково (каркас списков биллинга): в шапке — название и главные действия, под ней сводка, затем строка срезов со счётчиками, поиск и выбор колонок. Действия со строкой — в меню ⋮, окна открываются поверх списка, удаление всегда спрашивает подтверждение и перечисляет, что уйдёт вместе с записью. Каждое изменение пишется в журнал в виде «было → стало»; если ничего не поменялось, окно отвечает «Изменений нет» и журнал не трогает.

Сводка на дашборде

ПоказательКак считается
Объекты, камерывсё, что видно сотруднику по его организациям; клик ведёт в список
Проектов в работевсе стадии, кроме «Сдан» и «Отменён», из общего числа проектов
Абонплата в месяцсумма активных подписок; облачный архив — за каждую камеру. Та же формула — в сводке объектов
В работе по проектамсумма проектов, которые ещё не сданы и не отменены
Проектов сданодоля проектов, дошедших до стадий «Сдан» или «На сервисе»
Объектов с подпискойдоля объектов, у которых есть хотя бы одна активная подписка

Полоса «Камер в облачном архиве» показывает, сколько осталось до порога, после которого своё облако выгоднее аренды. Кнопка «Удалить демо-данные» видна только суперадминистратору и только когда такие данные есть; чтобы удалить, нужно ввести число удаляемых объектов.

Объект и проект — разные вещи. Объект живёт постоянно (камеры, подписки, архив), проект — это разовая сделка на монтаж или расширение. У одного объекта может быть несколько проектов: первая очередь, вторая, ремонт после грозы.

Объекты и камеры

Список объектов: сводка, срезы, колонка «В эфире», меню строки
Список объектов: сводка, срезы, колонка «В эфире», меню строки

Список объектов — /admin/video/objects/. Сводка показывает, сколько камер в эфире из общего числа, абонплату в месяц и объём облачного архива (если архив в облаке включён). Срезы со счётчиками:

Рядом — поиск по объекту, адресу и клиенту, выбор типа и организации, настройка колонок (баланс и архив по умолчанию скрыты) и выгрузка показанных строк в CSV. Колонка «В эфире» — «3 / 4» зелёным, если все камеры работают, жёлтым — если часть, красным — если ни одна. Под названием объекта — метки «камеры отключены» и «долг». Клик по клиенту открывает его боковую панель, по названию — вкладку «Видео» в карточке клиента.

Окно объекта: клиент, название, тип, организация, адрес, заметка
Окно объекта: сводка по камерам и подпискам, поля объекта

Окно объекта: клиент (при создании — поиск по имени, договору, телефону, адресу), название, тип, организация, адрес и заметка. Для типа «Охраняемый объект (ЧОП)» окно подсказывает, что объект появится на пульте. Организация «как у клиента» берётся из карточки клиента — объект без организации больше не остаётся «ничьим» и не виден чужим компаниям. Адрес по умолчанию подставляется из карточки клиента; кнопка «Подставить адрес клиента» возвращает его, если вписали другой.

Удаление спрашивает подтверждение и перечисляет, что уйдёт вместе с объектом: камеры, оборудование, проекты и активные подписки (их списания прекратятся). В журнал записывается, сколько чего было удалено.

Тот же список объектов клиента доступен из его карточки — вкладка «Видео», там же камеры, оборудование и подписки.

Проекты: воронка и документы

Канбан проектов: стадии, суммы по колонкам, документы на карточке
Канбан проектов: сводка, стадии с суммами, документы на карточке

Путь проекта от заявки до абонплаты:

flowchart LR
  L["Заявка"] --> S["Обследование"]
  S --> D["Проект / КП"]
  D --> C["Договор"]
  C --> M["Монтаж"]
  M --> P["ПНР"]
  P --> G["Сдан"]
  G --> V["На сервисе"]
  D -. "КП, согласие ПДн" .-> DOC["Документы"]
  C -. "договор" .-> DOC
  G -. "акт сдачи-приёмки" .-> DOC
  V --> B["Ежемесячная абонплата"]

Канбан проектов — /admin/video/projects/. Девять стадий: заявка, обследование, проект/КП, договор, монтаж, ПНР, сдан, на сервисе, отменён. В шапке колонки — количество сделок и сумма по стадии, в сводке — сколько проектов в работе и на какую сумму. Поиск ищет по проекту, объекту и клиенту, фильтр — по сегменту.

Стадию меняют перетаскиванием карточки или из меню ⋮ → «Сменить стадию». Меню карточки: изменить, сменить стадию, четыре документа, сделка в CRM, камеры клиента, удалить. На доске видны и сделки, заведённые в CRM без объекта, — у них подпись «объект не указан» и нет кнопок документов.

Окно проекта: название, сегмент, камеры, смета, комментарий
Окно проекта: смета оборудования и работ, итог по предложению

Окно проекта открывается кликом по названию: название, сегмент, число камер, смета оборудования и работ, итог по предложению (пусто — сумма двух смет, подсказка под полем показывает её) и комментарий. Отрицательные суммы сервер не примет. В журнал записываются изменённые поля и смена стадии словами — «Заявка» → «Договор».

Новая заявка — кнопкой «+ Заявка»: клиент, объект (можно создать новый по названию заявки), название, сегмент и примерное число камер. Смету заполняют позже.

Проект видеонаблюдения — это та же сделка, что в CRM (deal_type='video'), просто показанная в своём разрезе. Кнопка «Воронка в CRM» открывает воронку видеонаблюдения, из карточки сделки — задачи, звонки, теги и история стадий. Старый адрес заявок /admin/video/leads/ тоже ведёт в эту воронку.

С карточки проекта печатаются документы: коммерческое предложение, договор, акт сдачи-приёмки и согласие на обработку персональных данных (152-ФЗ). Тексты редактируются в едином центре документов /admin/documents/templates/ — шапка с реквизитами, логотип и печать берутся из брендинга организации.

Сервисные планы и подписки

Сервисные планы карточками: цена, архив, реакция, осмотр
Сервисные планы карточками: цена, архив, время реакции, плановый осмотр

Как подписка превращается в деньги:

flowchart LR
  PL["Сервисный план"] --> SUB["Подписка объекта"]
  SUB --> UU["Периодическая услуга"]
  UU --> BW["Списание раз в месяц"]
  BW --> ACC["Счёт объекта"]
  ACC -- "минус" --> BLK["Камеры отключены"]
  ACC -- "оплачен" --> OK["Камеры работают"]

Счёт видеонаблюдения отдельный: долг гасит камеры, но интернет клиента продолжает работать. Обратное поведение включается настройкой «Отключать и интернет».

/admin/video/plans/ — карточки планов обслуживания, их удобно сравнивать между собой. Срезы: активные, выключенные и без услуги списания — подписка по такому плану не списывается. В сводке — число активных подписок по всем планам.

Окно плана, раздел «Условия»: архив, время реакции, осмотр
Окно плана, раздел «Условия»: срок архива и время реакции в минутах

Окно плана из трёх разделов:

Новая цена не меняет сумму уже подключённых подписок — окно предупреждает об этом, если на плане есть подписки. План, выбранный хотя бы в одной подписке, удалить нельзя: его выключают, и новые подписки его не видят.

Подписка привязывает план к объекту и создаёт периодическую услугу (system_type=20), которую биллинг списывает раз в месяц — с отдельного счёта объекта, без скидок интернет-лояльности.

Каталог оборудования и склад

Каталог моделей: срезы по типу, цена, склад, число на объектах
Каталог моделей: срезы по типу, цена-ориентир, склад, число на объектах

/admin/video/models/ — справочник моделей: камеры, регистраторы, PoE-коммутаторы, ИБП, накопители, коммутаторы. Срезы — по типу со счётчиками, рядом выбор состояния (активные, выключенные, без связи со складом). Колонка «На объектах» показывает, у скольких камер и устройств модель уже выбрана.

Окно модели — разделы «Модель» (тип, бренд, модель, разрешение, поворотная, уличная, цена-ориентир, предлагать ли в окне камеры) и «Склад и паспорт» (позиция склада, ссылка на паспорт, заметка). Паспорт открывается из меню строки. Выключить и включить модель можно прямо из меню — меняется только это поле.

Модель, выбранную у камер, удалить нельзя: окно заранее говорит, что её выключат, и перечисляет, сколько раз она используется. Новые камеры такую модель не увидят, выбранные останутся.

Модель связывается с позицией склада. Тогда в каталоге видно фото, закупочную цену и остаток, а в карточке сделки считается экономика проекта: смета оборудования и работ против фактической себестоимости списанного со склада, маржа в рублях и процентах. Пока по сделке ничего не списано, маржа не показывается — иначе она равнялась бы всей сумме КП.

Медиа-сервер

Медиа-сервер: состояние связи, срезы, потоки, кнопка «Завести»
Медиа-сервер: состояние связи, срезы потоков, «Завести» у незаведённых

Состояния камеры и что с ними делать:

stateDiagram-v2
  [*] --> Заведена_в_биллинге
  Заведена_в_биллинге --> Не_заведена: потока на сервере нет
  Не_заведена --> В_эфире: кнопка «Завести»
  В_эфире --> Нет_сигнала: источник молчит
  Нет_сигнала --> В_эфире: связь восстановилась
  В_эфире --> Выключена: снята «Транслировать камеру»
  Выключена --> В_эфире: включили обратно

«Не заведена» и «нет сигнала» — разные неисправности. Первая лечится кнопкой в биллинге, вторая — выездом или проверкой канала: поток создан, но камера не отдаёт картинку.

/admin/video/streams/ — все потоки медиа-сервера и их сопоставление с камерами биллинга. Над списком — состояние связи с сервером и предупреждение, если не задан адрес для просмотра (без него камеры не открыть); адреса задаются в настройках. В сводке — сколько человек смотрят камеры сейчас. Срезы: в эфире, не в эфире, не заведены (камера есть в биллинге, потока на сервере нет), без камеры (поток есть только на сервере) и с архивом.

Меню строки: смотреть, архив записей, изменить камеру, клиент. У незаведённой камеры вместо «Смотреть» — «Завести поток», рядом та же кнопка «Завести». «Завести все» в шапке создаёт потоки для всех таких камер разом; камеры с ошибкой в адресе остаются в срезе и перечисляются в уведомлении.

Окно просмотра — живое видео и записи за сутки; клик по фрагменту проигрывает его, «Весь архив камеры» открывает страницу архива. Окно камеры — объект и клиент (при создании — выбор клиента и его объекта), метка зоны, адрес источника видео и переключатель «Транслировать камеру».

Пароли камер не показываются. В списке и в API строка источника маскируется (rtsp://user:•••@host). Оставьте строку как есть — пароль не изменится. Полный адрес открывает только администратор — кнопкой с глазом в окне камеры, и каждый показ записывается в журнал.

Архив записей

Архив камеры: живой поток, шкала суток, фрагменты
Архив камеры: живой поток, шкала суток, фрагменты

Архив камеры открывается из медиа-сервера или карточки объекта. На странице живой поток, шкала суток с сегментами записи и список фрагментов.

Пульт ЧОПа

Пульт ЧОПа: счётчики, объекты, стена камер, тревоги
Пульт ЧОПа: счётчики, объекты, стена камер, тревоги

Жизненный цикл тревоги — и откуда берётся время реакции:

stateDiagram-v2
  [*] --> Новая: сигнал с объекта
  Новая --> Принята: дежурный нажал «Принять»
  Новая --> Ложная: помечена ложной
  Принята --> Обработана: выезд завершён
  Принята --> Ложная: подтвердилась как ложная
  Обработана --> [*]
  Ложная --> [*]
  note right of Принята
    время от «Новой» до «Принята»
    и есть время реакции в отчёте
  end note

/admin/dispatch/ — рабочее место дежурного охраны: стена камер охраняемых объектов на всю ширину, счётчики, список объектов и панель тревог. Плитка камеры показывает своё состояние: «в эфире», «нет сигнала» (поток есть, источник молчит), «не заведена» или «выключена»; снизу — название камеры и объекта. Клик по объекту в списке оставляет на стене только его камеры.

У тревоги всегда одно очевидное действие: новая — «Принять», принятая — «Обработана»; «Ложная» спрашивает подтверждение, потому что тревога закроется без выезда. Закрытую тревогу повторно не изменить. Рядом видно, кто принял и когда, а у непринятой тикает счётчик ожидания — это и есть время реакции. Новая тревога поднимает баннер со звуком; при открытии пульта баннер о неразобранной тревоге показывается без звука.

Кнопка «+ Тревога» регистрирует тревогу вручную: объект, что случилось, комментарий.

Приёмник сигналов: адрес приёма, ключ, разрешённые адреса, потеря связи
Приёмник сигналов: раздел «Приём»

Кнопка с антенной открывает приёмник сигналов охранных панелей:

На телефоне тревоги стоят первым блоком, выше стены камер: дежурный не должен пролистывать десятки плиток, чтобы увидеть тревогу.

Отчётность ЧОП

Отчётность ЧОП: период, сводка, графики, таблицы
Отчётность ЧОП: период в шапке, сводка, графики, таблицы

/admin/video/reports/ — отчёт по охраняемым объектам за период. Период (7, 30, 90 дней, год) и «Выгрузить» в CSV — в шапке; выгрузка всегда берёт выбранный период. Сводка: средняя доступность, средняя реакция (медиана — в подсказке), доля тревог, принятых вовремя, абонплата в месяц, число объектов охраны и тревог за период.

Ниже — графики доступности по дням и тревог со средним временем реакции, таблица по объектам (доступность, простой, тревоги, реакция с нормой из плана, абонплата; колонки настраиваются), сводки по охранным предприятиям и по дежурным.

Доступность считается по событиям потери и восстановления связи. Если таких событий за период не было, отчёт ставит прочерк, а не рисует ровные 100 %, которых никто не измерял. «Тревог принято вовремя» считается только по объектам, у плана которых задано время реакции в минутах.

Права и организации

flowchart TD
  U["Сотрудник"] --> O{"Его организации"}
  O -->|"свои"| VIS["Объекты, камеры, сметы, тревоги"]
  O -->|"чужие"| X404["404 даже по прямой ссылке"]
  U --> R{"Права разделов"}
  R -->|"sec_video"| SV["Раздел «Видеонаблюдение»"]
  R -->|"sec_dispatch"| SD["Пульт ЧОПа"]

Раздел скоупится по организациям: сотрудник видит объекты, камеры, сметы и тревоги только своих компаний, а переключатель организации в шапке фильтрует списки. Переход по прямой ссылке на чужой объект отдаёт 404.

Права разведены на два ключа:

Настраиваются в /admin/settings/permission_settings/.

Настройки модуля

Настройки модуля: основные, оплата, медиа-сервер, архив
Настройки модуля: четыре группы и панель сохранения

/admin/video/settings/ — четыре группы:

Внизу — панель сохранения: сколько полей изменено и кнопка «Вернуть как было». «Сохранить» показывает список изменений и спрашивает подтверждение (отдельно предупреждает, если включается удаление записей с диска). В журнал пишется только изменённое, «было → стало». Шаблоны документов и сервисные планы открываются кнопками в шапке.

Чек-лист запуска

  1. Включить модуль в /admin/settings/modules/.
  2. Завести услуги типа «Видеонаблюдение» в каталоге услуг и сервисные планы на их основе; в плане задать время реакции в минутах, если есть охрана.
  3. Наполнить каталог моделей и связать их с позициями склада — иначе себестоимость проектов не сойдётся.
  4. Настроить медиа-сервер: внутренний адрес и адрес для просмотра камер.
  5. Включить архив, если записи хранятся на своей стороне.
  6. Раздать права: sec_video инженерам и продажам, sec_dispatch — операторам пульта.
  7. Завести первый объект, камеру и подписку; проверить, что списание прошло по счёту объекта.

Видеонаблюдение — доп.услуга «под ключ»

Модуль продажи видеонаблюдения через биллинг: от заявки и обследования до монтажа, recurring-подписок и документов. Реализован как собственный сервисно-инсталляционный домен (объект → проект → камеры/оборудование → подписки), а не плоская интеграция. Использует существующее ядро биллинга: тарификацию Usluga/UsersUsluga, ежемесячное списание billing_worker, FinanceOperations, генерацию PDF (WeasyPrint), фискализацию.

3 слоя дохода — как продавать правильно

3 слоя дохода видеонаблюдения
3 слоя дохода видеонаблюдения

Ключевой принцип: маржа бизнеса — в recurring-подписке, а не в разовом монтаже. Продажа только «установки под ключ» убыточна, потому что облако (хранилище, трафик) — постоянная затрата, которую нужно отбивать ежемесячной платой.

СлойУслугаЦенаТип
1. Разовый проектУстановка камеры под ключ13 500 ₽разово
2. Облако на камеруCloud Start (архив 7 дн)490 ₽/камера/месrecurring
2. Облако на камеруCloud Pro (архив 30 дн + аналитика)690 ₽/камера/месrecurring
3. Сервис на объектСервис Home (до 4 камер, ТО+гарантия)390 ₽/месrecurring
3. Сервис на объектСервис Pro (5+ камер, SLA-выезд)990 ₽/месrecurring

Пример экономики (частный дом, 4 камеры): установка 13 500 ₽ разово + recurring 4×490 (облако) + 390 (сервис) = 2 350 ₽/мес = 28 200 ₽/год. Recurring-слой — это то, чего нет при продаже «только установки».

Цены хранятся в каталоге услуг (Usluga.summa, тип «Видеонаблюдение») и редактируются оператором. Конкретная сумма подписки берётся из услуги/плана, но может быть переопределена индивидуально на клиенте.

Жизненный цикл сделки — от заявки до ежемесячной выручки:

flowchart LR
  L["📥 Заявка
VideoLead"] --> P["📋 Проект
обследование · КП · договор"] P --> I["🔧 Монтаж + ПНР
разовый платёж 13 500 ₽"] I --> O["🏠 Объект сдан
VideoObject"] O --> S["🔁 Подписки
облако + сервис"] S --> B["💰 billing_worker
списание/мес с видео-счёта"] B -.->|каждый месяц| S style L fill:#eef2ff,stroke:#6366f1,color:#1b1b1b style I fill:#fef9c3,stroke:#ca8a04,color:#1b1b1b style S fill:#dcfce7,stroke:#16a34a,color:#1b1b1b style B fill:#43b77a,stroke:#2d9a5f,color:#fff

Раздел /admin/video/

Раздел сайдбара «Видеонаблюдение» с 5 страницами: дашборд, проекты (канбан), объекты, сервисные планы, заявки.

Дашборд видеонаблюдения
Дашборд видеонаблюдения
Канбан проектов видеонаблюдения
Канбан проектов видеонаблюдения

UI/UX раздела

В разделе есть фильтры, редактирование в модальных окнах, просмотр камер, тёмная тема и работа с телефона:

Объекты — фильтры, чипы, цвет баланса
Объекты — фильтры, чипы, цвет баланса
Модалка просмотра камеры — live + архив
Модалка просмотра камеры — live + архив
Настройки видеонаблюдения в 2 колонки
Настройки видеонаблюдения в 2 колонки

Превью камер, просмотр в модалке и «Диск, Гб»

Доработка раздела «Объекты» и панели объекта: камеры теперь с превью и просмотром live/архива прямо в модальном окне, без перехода на другую страницу.

Камера в панели объекта (превью — snapshot go2rtc) → «Трансляция» → Модалка: live-плеер (go2rtc stream.html в iframe) · «Архив» → Модалка: embed-страница — live + таймлайн 24ч · «Поток» → Модалка: WebRTC (low-latency)
Сегменты архива: MediaMTX → через прокси (роль GCS) → Google Cloud Storage → подсчёт размера → Колонка «Диск, Гб» (по объекту)
Объекты: колонки «Компания» (компактная) и «Диск, Гб»
Объекты: колонки «Компания» (компактная) и «Диск, Гб»
Панель объекта: камеры с превью и кнопками Трансляция / Архив / Поток
Панель объекта: камеры с превью и кнопками Трансляция / Архив / Поток
Модальное окно трансляции камеры (live-плеер go2rtc)
Модальное окно трансляции камеры (live-плеер go2rtc)
Модальное окно архива камеры: live + таймлайн записей за 24 часа
Модальное окно архива камеры: live + таймлайн записей за 24 часа

Архив в GCS через прокси (роль «GCS»)

Из российских сетей storage.googleapis.com и oauth2.googleapis.com недоступны напрямую. Чтобы биллинг мог считать размер архива и выгружать сегменты в облако, добавлена отдельная роль «GCS» у прокси-сервера.

Меню прокси: пункт «Добавить роль GCS» рядом с ролями Telegram / Нейросеть
Меню прокси: пункт «Добавить роль GCS» рядом с ролями Telegram / Нейросеть

Отчётность ЧОП (Фаза 4) — SLA, uptime, выручка

Раздел /admin/video/reports/ («Видео → Отчётность ЧОП») — единый экран по охраняемым объектам ЧОПа. Отвечает на три вопроса заказчика: насколько стабильна связь (SLA-uptime %), как быстро оператор реагирует на тревоги (время реакции + % в пределах SLA) и сколько объект приносит в месяц (recurring-выручка). Это доказуемый SLA — ключевая ценность, которую мы продаём охранным предприятиям.

Дашборд отчётности ЧОП: KPI, таблица по объектам, сводка по ЧОПам и операторам
Дашборд отчётности ЧОП: KPI, таблица по объектам, сводка по ЧОПам и операторам

KPI и как они считаются

KPIИсточник / формула
📡 Средний uptimedowntime из пар тревог offline → restore (SecurityAlarm); 1 − downtime/период. «—» если событий связи за период нет
⏱ Ср. реакцияacked_at − event_time по принятым тревогам (среднее + медиана)
✅ % в пределах SLAдоля тревог с реакцией ≤ VideoServicePlan.sla_react_minutes (числовое целевое время реакции по плану)
💰 Выручка/мес (MRR)Σ активных VideoSubscription.price_month (для облака × число камер)
🛡 Объектов охраныVideoObject(object_type='security') + сколько с заблокированными камерами
🚨 Тревог за периодвсего + сколько принято операторами

Под KPI — таблица по объектам (uptime, простой, тревоги, реакция, выручка), сводка по охранным предприятиям (группировка по security_company) и реакция по операторам (через acked_by).

Период и экспорт

Кнопки периода 7 / 30 / 90 дней / Год перезапрашивают данные через /admin/video/reports/json/ без перезагрузки. Экспорт CSV (/admin/video/reports/export/) — UTF-8 BOM + ; для Excel, колонки по объектам.

Отчётность ЧОП за 90 дней
Отчётность ЧОП за 90 дней
SecurityAlarm (тревоги, реакция, offline/restore) + VideoSubscription (подписки) → _collect_report() → KPI + таблицы + CSV

Тёмная тема и мобильная вёрстка поддержаны; uptime начнёт наполняться, когда заработает приём сигналов с панелей (Фаза 3) — сейчас приёмник выключен до аудита оборудования ЧОПа.

Вкладка клиента и ЛК

На карточке клиента — вкладка «📹 Видеонаблюдение»: объекты → камеры / оборудование / подписки / проекты, с модалкой объекта (side-nav). У каждого объекта — отдельный лицевой счёт под видео (не смешивается с интернет-балансом). Recurring-подписки списываются с этого счёта; при минусе блокируются камеры/облако (настройка VIDEO_BLOCK_ON_NEGBAL), интернет не трогается.

Вкладка видеонаблюдения на карточке клиента
Вкладка видеонаблюдения на карточке клиента

В личном кабинете (/lk/video/) и мобильном приложении (GET /mobile-api/v1/video/objects) клиент видит свои объекты, камеры, подписки, статус проекта, баланс видео-счёта и кнопку пополнения.

ЛК: объект «Ворота» — 4 камеры, подписка 390 ₽/мес, кнопка Пополнить
ЛК: объект «Ворота» — 4 камеры, подписка 390 ₽/мес, кнопка Пополнить

Как списываются подписки — пошагово

Видеоподписка — это recurring-услуга (UsersUsluga, system_type=20), которую billing_worker списывает 1-го числа каждого месяца. Деньги берутся с отдельного видео-счёта объекта (VideoObject.account) — интернет-баланс клиента не затрагивается.

🏠
Объект«Ворота» клиента
→
🔄
ПодпискаСервис на объект
390 ₽/мес
→
💳
Видео-счёт объектаотдельный от интернета
→
📅
1-го числаbilling_worker
списывает 390 ₽
→
🔒
Если баланс < 0камеры блокируются
(интернет работает)
Тип подпискиЦена считаетсяПример
Сервис / SLA (service)фиксировано за объектСервис Home 390 ₽, Сервис Pro 990 ₽
Облако (cloud)× число камерCloud Start 490 ₽ × 4 камеры = 1960 ₽/мес

Важно: цены подписок хранятся в каталоге услуг (тип «Видеонаблюдение»), а не в тарифах — линейка «Видеонаблюдение» в разделе «Тарифы» остаётся пустой намеренно. Скидки лояльности интернета на видео не распространяются — это отдельный продукт со своим счётом.

Архив записей в ЛК — календарь, выделение, выбор камеры

Страница архива камеры (/lk/video/archive/<camera>/) даёт клиенту просмотр и выгрузку записей за период хранения (retention из подписки).

Архив видео: календарь выбора даты с точками на днях с записью, таймлайн суток
Архив видео: календарь выбора даты с точками на днях с записью, таймлайн суток
Архив видео: выделение участка на таймлайне (5 ч 31 мин) + кнопки Просмотр / Скачать фрагмент / Сбросить
Архив видео: выделение участка на таймлайне (5 ч 31 мин) + кнопки Просмотр / Скачать фрагмент / Сбросить

Уведомления о сбоях записи

Клиент может подключить уведомления о прерывании записи прямо в ЛК (вкладка «Архив» карточки объекта). Опция доступна только если у объекта активна запись. Канал — Telegram / Email / оба; контакты берутся из профиля клиента.

Серверный health-мониторинг (video-archive-health, каждые 10 мин) проверяет свежесть последнего записанного сегмента по каждой archive_enabled камере. Если записи нет дольше 15 минут — запись считается отвалившейся: billing_worker-независимая задача шлёт Telegram-алерт оператору, а при включённой подписке на уведомления — ещё и клиенту (группировка по объекту, анти-спам 6 ч).

ЛК: переключатель «Уведомлять о сбоях записи» включён, выбор канала Telegram/Email
ЛК: переключатель «Уведомлять о сбоях записи» включён, выбор канала Telegram/Email

Документы (КП / договор / акт / согласие 152-ФЗ)

Из проекта генерируются 5 типов PDF (WeasyPrint, реквизиты из настроек компании, загрузка в облако):

Сервисные планы видеонаблюдения
Сервисные планы видеонаблюдения

Настройки модуля

Страница /admin/video/settings/ — 4 группы настроек в карточках: Основные (включение, отдельный счёт), Биллинг и блокировки, Облако VSaaS. У облака — кнопка «Проверить соединение» прямо со страницы.

Блокировка камер по балансу

Настройка VIDEO_BLOCK_ON_NEGBAL реально работает: при отрицательном балансе видео-счёта камеры объекта блокируются, при пополнении — разблокируются. Срабатывает в трёх точках:

Логика облако-агностична: флаг cameras_blocked на объекте + вызов VSaaS-провайдера (в MVP без облака — только флаг и запись в аудит, интернет клиента не трогается).

Облако VSaaS (вариант B)

Ядро готово к реселлу облачного видеонаблюдения: абстракция провайдера (BaseVsaasProvider) + заглушка (MVP без облака) + реестр. Реальный облачный провайдер добавляется без переписывания вызывающего кода — выбирается в настройках (VIDEO_CLOUD_PROVIDER) вместе с API URL и ключом. Пока спрос/поставщик не определены — модуль работает в режиме «локальный NVR».

По исследованиям (финансовая модель + анализ платформ) платформа старта — TRASSIR Cloud (DSSL): провайдер TrassirProvider зарегистрирован в реестре (каркас, реальные вызовы API — при получении ключа). Стратегия: TRASSIR Cloud (0–12 мес) → собственное облако Xeoma при достижении ~1000 камер. На дашборде /admin/video/ — метрика «камер в облаке / порог 1000» с сигналом «пора на своё облако» и расчётом дополнительной прибыли.

Срок архива — параметр сервисного плана (retention_days: Дом 7 дн, Семья/Бизнес 30 дн, Бизнес+ 90 дн). Указывается в согласии на обработку ПДн (152-ФЗ — «видеозаписи хранятся не дольше N дней»).

Справочник моделей оборудования

Модели камер и оборудования ведутся в каталоге /admin/video/models/ (раздел «Видео» → «Модели оборудования»), а не вводятся текстом. Каждая модель — тип (камера/NVR/PoE/ИБП/диск), бренд, модель, характеристики (Мп/PTZ/уличная для камер), цена-ориентир. В модалках камеры и оборудования объекта — выбор из справочника с автозаполнением характеристик; свободный текст остаётся как fallback. Цена-ориентир используется в КП/смете проекта.

Мульти-орг: чей клиент

Один биллинг обслуживает несколько компаний. Клиент привязан к организации (с кем подписан договор); объект видеонаблюдения наследует организацию от клиента, при необходимости переопределяется вручную (один клиент — разные компании по разным объектам). От организации зависят реквизиты документов (КП/договор/акт/152-ФЗ). В карточке клиента в блоке «Договор и контакты» отображается «Чей клиент: <организация>».

Модуль в реестре и лицензии

Видеонаблюдение — продаваемый модуль тарифа Pro. Управляется на /admin/settings/modules/: включение/выключение, замок при отсутствии в тарифе. При выключении модуль недоступен везде — раздел скрыт из меню, прямой URL даёт редирект, AJAX/API отвечает 403, вкладка в карточке клиента и раздел в ЛК/мобильном скрыты.

Выключение модуля также скрывает связанные с ним сущности в тарификации и CRM: линейки услуг, тарифы этих линеек, вкладки типов сделок в разделе «Документы» CRM и типы сделок в воронке. Для модуля «Видеонаблюдение» это линейки Видеонаблюдение, Домофон и ЧОП (домофон и охрана — часть видеонаправления). Привязка линейки к модулю определяется полем «Модуль» в карточке линейки, а если оно пустое — по названию линейки. Услуги отдельно не скрываются: они низкоуровневые и уходят из вида вместе со своими тарифами.

Перед запуском: модуль выключен по умолчанию (VIDEO_ENABLED=false). Включается после заведения услуг-пакетов, реквизитов компании и юридического контура 152-ФЗ (согласия + уведомление РКН). Охранный мониторинг с реагированием оказывает партнёр-ЧОО (лицензия), оператор связи — технический сервис.

Домофонный домен

Домофония для новостроек реализована как рескин существующего биллинга, а не отдельный модуль: иерархия «оператор → ЖК → подъезд → квартира» укладывается на MPTT-дерево клиентов один-в-один, пакеты домофона — это тарифы, абонентская плата — recurring-услуги (списываются billing_worker). Все клиенты домофонных/видео-услуг привязаны к оператору домофонии (отдельная папка-юр.лицо).

Доменная модель домофонного проекта
Доменная модель домофонного проекта

Доменная модель