Оборудование
NAS-серверы, коммутаторы, IPTV-приставки и настройки СОРМ — всё сетевое оборудование, которым управляет биллинг.
Содержание раздела
Тот же механизм, но нарисованный: узлы можно подсвечивать, связи — разбирать по шагам. Открывается в новой вкладке.
Все схемы системыОборудование
Раздел меню «Оборудование» объединяет всё сетевое и абонентское оборудование, через которое работает биллинг.
NAS
URL: /admin/equipment/Nas/
NAS (Network Access Server) — устройство, через которое клиент попадает в сеть: BRAS, MikroTik, коммутатор с авторизацией. Для биллинга это одновременно RADIUS-клиент (шлёт Access-Request и Accounting) и цель управляющих команд (CoA Disconnect, SSH). На проде 12 устройств.
Что такое NAS для биллинга
- NAS
- Идентификация
- IP и маска
- RADIUS secret
- Тип устройства
- Организации
- Роль RADIUS
- Access-Request
- Accounting
- Пулы адресов
- Параметры тарифа
- Управление
- CoA Disconnect
- SSH fallback
- Развёртывание конфигов
- Перезапуск FreeRADIUS
- Наблюдение
- UP DOWN
- Онлайн-сессии
- Простой за сутки
- SLA и алерты
Из этой карты следует главное: NAS — не просто запись в справочнике. Ошибка в secret рвёт авторизацию всем клиентам устройства, а неверный IP делает CoA бесполезным — команда уйдёт в никуда, и заблокированный клиент останется в сети.
Как проходит авторизация
flowchart LR
AB["Клиент
подключается"] --> NAS["NAS"]
NAS -->|"Access-Request
+ secret"| RAD["FreeRADIUS"]
RAD --> CHK{"Клиент известен?
clients.conf"}
CHK -->|"нет"| DROP["Пакет отброшен"]
CHK -->|"да"| USR{"Учётка и
тариф есть?"}
USR -->|"нет"| REJ["Access-Reject"]
USR -->|"да"| BAL{"Баланс и
блокировки"}
BAL -->|"заблокирован"| REJ
BAL -->|"ок"| ACC["Access-Accept
+ IP + шейпер"]
ACC --> SESS["Сессия в
USERS_RADIUSAUTH"]
SESS --> ONL["Колонка «Онлайн»
в списке NAS"]
clients.conf генерируется из таблицы NAS при старте контейнера FreeRADIUS. Поэтому после добавления устройства или смены secret нужен перезапуск RADIUS — иначе новый NAS для демона не существует. Список сам показывает предупреждение, когда конфигурация изменилась.
Список устройств
- KPI-чипы справа: Всего / UP / DOWN / Онлайн / CoA-готовность. Считаются по всей выборке, не по странице.
- Чипы-фильтры со счётчиками: Все · UP · DOWN · без RADIUS · без SSH · PROD · выключенные. Состояние переносится в URL, ссылку можно отправить коллеге.
- Состояние (UP/DOWN/OFF) — из
NasStatusLog, с подсказкой о длительности простоя. Строки DOWN подсвечены. - Колонка «Орг.» — организации устройства, см. Мультиорганизация.
- Онлайн — прогресс-бар «активных / максимум». Клик по числу открывает список сессий.
- Бейджи у имени: PROD (боевое), CoA (Disconnect настроен), SSH (только SSH-fallback).
Адрес установки сокращается многоточием: полный остаётся в подсказке. Так таблица помещается в экран без горизонтальной прокрутки — а она в списке оборудования особенно мешает, потому что взгляд идёт по строке до колонки «Состояние».
Мультиорганизация
Связь NAS с организацией — «многие ко многим», а не одна компания на устройство. Причина простая: один BRAS обслуживает клиентов нескольких организаций сразу, и жёсткая привязка была бы неверной.
- Колонка «Орг.» показывается только при мульти-орг и режиме «Все организации».
- Организации отмечаются чекбоксами в полосе статистики карточки — сразу видно, кого обслуживает устройство.
- Устройств без организации быть не должно: при переходе на связь всем существующим проставлена организация по умолчанию.
Список NAS намеренно не скоупится по организации. Сотрудник компании должен видеть оборудование, через которое работают его клиенты, даже если устройство принадлежит другой организации — иначе диагностика «почему у клиента нет интернета» упирается в пустой экран. Скоуп стоит там, где раскрываются данные клиентов.
Что видит сотрудник чужой организации
flowchart LR
REQ["Запрос сотрудника"] --> T{"К чему обращается"}
T -->|"список NAS"| OPEN["Виден весь
парк устройств"]
T -->|"сессии, панель клиентов"| SCOPE["Фильтр по
организации клиента"]
T -->|"отключить, IP, resync"| GUARD["Проверка клиента"]
T -->|"перезапуск RADIUS"| PERM{"Админ сети?"}
GUARD -->|"чужой"| E404["404"]
GUARD -->|"свой"| DO["Действие выполняется"]
PERM -->|"нет"| E403["403"]
PERM -->|"да"| RST["Перезапуск"]
Ответ на чужого клиента — 404: одинаковая реакция на «нет такого» и «есть, но не ваш» не даёт перебором выяснить, какие клиенты существуют. Перезапуск RADIUS отвечает 403 — здесь скрывать нечего, а причина отказа должна быть понятной.
Карточка устройства
Шесть вкладок. Сверху — полоса статистики (активных / максимум / последняя авторизация) и чекбоксы организаций.
RADIUS
RADIUS secret — общий ключ с устройством; при несовпадении демон молча отбрасывает пакеты, и клиенты просто не авторизуются. CoA пароль и порт (по умолчанию 3799) нужны для команды Disconnect. Флаг «Не использовать CoA» переводит разрыв сессий на SSH-fallback — медленнее, но работает там, где CoA не включён.
Авторизация
Правила выдачи доступа: тип авторизации, привязка к MAC и порту, поведение при переподключении. Здесь же — «Отправлять подключение если заблокирован»: для схем с walled-garden, где заблокированного клиента пускают на страницу-заглушку вместо полного отказа.
IP-пулы
Пулы динамических и белых адресов, NAT, hotspot, DNS и «следующий NAS» для цепочек. Из этих пулов выдаётся адрес при авторизации; свободный ищет ip_allocation с проверкой занятости по трём источникам сразу.
Онлайн-сессии
Открывается кликом по числу в колонке «Онлайн». Поиск по логину, ФИО, договору и IP; подгрузка по мере прокрутки. Клик по имени открывает боковую панель клиента поверх списка — оператор смотрит карточку, не теряя разобранный список сессий.
Состояние NAS
URL: /admin/equipment/nas_status/
Страница для дежурного: что сейчас лежит и насколько это больно.
- Алерт сверху — какие устройства недоступны, сколько минут и сколько клиентов затронуто. Появляется только при авариях.
- Sparkline за 24 часа — 24 столбика по часам: зелёный (работал), оранжевый (частичный простой), красный (лежал более половины часа). Видно, это разовый сбой или устройство «моргает» третьи сутки.
- Затронутые клиенты — клик по числу открывает тот же список сессий.
- SLA за 7 и 30 дней с порогами из настроек (
NAS_SLA_TARGET_PCT,NAS_SLA_WARNING_PCT). - Авто-обновление (30 с / 60 с / 5 мин) через отдельный JSON-эндпоинт: перерисовываются только строки и KPI, страница не мигает.
- История событий сгруппирована по дням, с фильтром Все / DOWN / UP и выгрузкой в CSV.
Обновление стоит дёшево: JSON отдаётся за ~24 мс при четырёх запросах к базе, поэтому режим «каждые 30 секунд» можно держать включённым весь день.
Опасные операции
Перезапуск FreeRADIUS перегенерирует clients.conf и поднимает демона заново. На эти секунды авторизация не работает на всей сети — новые подключения не проходят, действующие сессии не рвутся.
Поэтому операция спрятана в отдельное меню и доступна только администраторам сети: superuser и группам из настройки NAS_ADMIN_GROUPS (по умолчанию root,network). Остальным кнопка не показывается, а прямой запрос отвечает 403.
Признак «конфигурация изменена» появляется в списке автоматически после сохранения или удаления NAS — чтобы перезапуск не забыли.
Мобильная версия
На телефоне остаются три колонки: название, состояние и онлайн — то, ради чего в список заходят с телефона во время аварии. IP, RADIUS, SSH, адрес и время последней авторизации скрыты, горизонтальной прокрутки нет.
В списке сессий на телефоне остаются клиент и IP: номер строки и логин на 390 px только отнимают место. ФИО не переносится — иначе одна строка растягивалась на три-четыре ряда и список переставал читаться; полное имя доступно в подсказке.
Тёмная тема
Endpoints
| URL | Метод | Назначение |
|---|---|---|
/admin/equipment/Nas/ | GET | Список устройств |
/admin/equipment/nas_status/ | GET | Дашборд состояния (?json=1 — данные для авто-обновления) |
/admin/equipment/nas_status/export/ | GET | История в CSV (?period=24h|7d|30d) |
/admin/equipment/nas_modal/[<id>/] | GET / POST | Карточка: чтение, сохранение, удаление |
/admin/nas_api/<id>/online/ | GET | Онлайн-сессии устройства (скоуп по организации клиента) |
/admin/nas_api/<id>/abonents/ | GET | Панель клиентов устройства (скоуп по организации) |
/admin/nas_api/<id>/ping/ | POST | TCP-проверка доступности |
/admin/nas_api/<id>/sync/ | POST | Синхронизация сессий |
/admin/nas_api/abonent-disconnect/<id>/ | POST | Разрыв сессий клиента (проверка организации) |
/admin/nas_api/allocate-ip/<user_id>/ | POST | Выдача свободного IP (проверка организации) |
/admin/nas_api/restart-radius/ | POST | Перезапуск FreeRADIUS (только админы сети) |
Смежные разделы
- Кэш авторизаций — почему повторная авторизация проходит за миллисекунду.
- RADIUS REJECT без тарифа — частая причина «клиент не подключается».
- Карта сети — те же устройства на карте с панелью клиентов.
- Счета и Финансовые операции — блокировка по балансу, из-за которой NAS получает REJECT.
- IP-пулы — адреса, которые устройство раздаёт.
Кэш авторизаций (Redis fast-path для FreeRADIUS)
Виджет на дашборде «Состояние NAS». Решает проблему массового падения NAS: когда тысячи клиентов одновременно переавторизуются, FreeRADIUS не успевает обрабатывать пакеты из-за серии SQL-запросов на каждый Access-Request.
Без кэша один authorize() делал 5 SQL-запросов:
Users + abonent + nas + NasRadiusParams + TarifRadiusParams + VpnConst,
суммарно 5–15 ms на пакет. При 1000 пакетов/сек FreeRADIUS не успевал,
очередь max_requests=16384 заполнялась за 16 сек, NAS retry'ил пакеты,
БД захлёбывалась.
С кэшем: при штатной авторизации (не заблокирован, NAS назначен, IP в пуле) ответ строится из снапшота в Redis — 1 ms вместо 10 ms, SQL не выполняется. Эффективная capacity FreeRADIUS Python module растёт в 5–10 раз.
Архитектура
- Сервис:
billing/services/radius_user_cache.py - Ключи Redis:
radius_user:{login}— снапшот, TTL 5 минradius_user_neg:{login}— маркер «не найден», TTL 60 сек (защита от перебора)radius_cache_stats(HSET) — счётчики hits/misses/negatives/invalidations
- Содержимое снапшота:
user_id,psw,enabled,ip,nas_id,abonent_tarif_id, объединённый списокreply_attrsиз NasRadiusParams + TarifRadiusParams
Fast-path vs Slow-path
Fast-path (новый, без БД) активируется только при штатных условиях:
enabled=True, abonent_enabled=True, есть пароль и NAS,
ip в пулах NAS. Иначе срабатывает slow-path с ORM —
для блокированных клиентов (нужна логика soft-block), OPT82, auto-assign NAS/IP,
cache miss. После успешного slow-path снапшот пишется в кэш для следующих пакетов.
flowchart LR
REQ["Access-Request
от NAS"] --> CACHE{"Снапшот
в Redis?"}
CACHE -->|"hit"| CHKFAST{"Штатные
условия?"}
CACHE -->|"miss"| PWD{"Пароль
верный?"}
CHKFAST -->|"да · fast-path 1 ms"| OK["RLM_MODULE_OK
+ Framed-IP
+ Rate-Limit"]
CHKFAST -->|"нет"| PWD
PWD -->|"нет"| REJ["REJECT"]
PWD -->|"да · slow-path ~10 ms"| TARIF{"tarif_id?"}
TARIF -->|"NULL"| REJT["REJECT
no tariff"]
TARIF -->|"есть"| BLOCK{"Заблоки-
рован?"}
BLOCK -->|"да"| SOFT["soft-block
блок-пул"]
BLOCK -->|"нет"| WRITE["Снапшот → Redis
TTL 5 мин"]
WRITE --> OK
OK --> AB(("Клиент
в сети"))
style REQ fill:#1e3a5f,stroke:#5BA89D,color:#fff
style CHKFAST fill:#14532d,stroke:#16a34a,color:#fff
style OK fill:#43b77a,stroke:#2d9a5f,color:#fff
style REJ fill:#7f1d1d,stroke:#dc2626,color:#fff
style REJT fill:#7f1d1d,stroke:#dc2626,color:#fff
style SOFT fill:#78350f,stroke:#d97706,color:#fff
style AB fill:#134e4a,stroke:#43b77a,color:#fff
Инвалидация
5 Django signals (post_save) сбрасывают соответствующие ключи:
| Модель | Что сбрасывается |
|---|---|
Users | Свой ключ |
Abonents | Все ключи учёток клиента |
AbonentsBlock | Все ключи учёток клиента |
NasRadiusParams | Все ключи users этого NAS |
TarifRadiusParams | Все ключи users на этом тарифе |
Дополнительно — TTL 5 минут гарантирует протухание даже без сигналов (защита от рассинхрона при ручном UPDATE через psql).
Метрики и UI
Виджет «Кэш авторизаций» на дашборде «Состояние NAS» показывает:
- Hits — попадания в кэш (1 ms, без БД)
- Misses — промахи (10 ms через ORM)
- Hit ratio % — целевое значение > 90% (после прогрева)
- В кэше — количество ключей
radius_user:*в Redis - Инвалид — счётчик сбросов по сигналам
- Кнопка «Сбросить» (для superuser) — полный flush, например после массового импорта Users
Endpoint: GET /admin/equipment/radius_cache_stats/ возвращает JSON с метриками.
POST /admin/equipment/radius_cache_flush/ сбрасывает весь кэш (только superuser).
Реальная статистика рабочего сервера через 5 минут после деплоя при штатной нагрузке ~10–20 авторизаций/сек: hits=838, misses=92, hit ratio=90.1%.
При hit ratio 90% среднее время authorize() снизилось с 10 ms до ~2 ms,
эффективная пропускная способность выросла в ~5 раз без увеличения ресурсов.
RADIUS REJECT без тарифа
Защита от бесплатного интернета у клиентов без тарифа.
До фикса клиент с Abonents.TARIF_ID=NULL авторизовывался в RADIUS, получал IP и
нерезаную скорость канала (без Mikrotik-Rate-Limit). Параллельно
billing_worker его не списывал — у клиента без тарифа нет связанных UsersUsluga.
Симметричная дыра: интернет работал бесплатно, пока кто-то не назначит тариф вручную.
Логика после фикса (radius_python/internet.py::authorize и
_try_authorize_from_snapshot):
- После проверки пароля проверяется
user.abonent.tarif_id - Если
NULL→RLM_MODULE_REJECTс пометкойno tariff assigned - Fast-path (Redis cache) тоже валидирует
tarif_idиз snapshot — иначе fall-through на slow-path → REJECT
Quick Add (создание клиента) — валидация на billing/views/abonents.py::abonent_quick_add:
поле «Тариф» помечено required, при пустом значении возвращается HTTP 400 с сообщением
«Тариф обязателен — выберите тариф для нового клиента».
Management-команда зачистки «осиротевших»:
python manage.py disable_abonents_without_tariff --dry-run
python manage.py disable_abonents_without_tariff --apply
Команда находит активных клиентов с TARIF_ID IS NULL и блокирует их через
ab.block(comment='Автоблок: нет назначенного тарифа', flags=['b_sys']). На рабочий сервер
2026-05-13 нашла 72 таких клиента (6 с активной RADIUS-сессией, суммарно ~12 ГБ нерезаного трафика).
Telegram-алерт (опционально): Celery beat-задача раз в час шлёт уведомление,
если за последние 24 часа создан клиент с tarif_id IS NULL. Защита на случай если
основной REJECT кто-то откатит.
В разделе «Диагностика связи» (карточка клиента) добавлена красная плашка «⚠ Тариф не назначен — RADIUS должен отклонять авторизацию» — оператор видит проблему сразу при открытии карточки.
Мониторинг оборудования
Оборудование → Мониторинг оборудования, URL /admin/equipment/monitoring/.
Опрос управляемых коммутаторов по SNMP: состояние (в сети / не отвечает),
число активных портов, история падений. Биллинг опрашивает устройства сам, раз в 5 минут,
и присылает алерт в Telegram при падении.
Как это работает
Каждое устройство опрашивается по стандартному IF-MIB (ifOperStatus,
ifSpeed, счётчики ошибок) через утилиты net-snmp. Результат — снимок состояния
и событие в истории при смене «в сети ↔ не отвечает». Опрос идёт напрямую из сети сервера,
дополнительного ПО на коммутаторах не требуется — достаточно включённого SNMP с community
на чтение.
Дашборд состояния
Над таблицей — счётчики Всего / В сети / Не отвечают / Неизвестно. В таблице по каждому устройству:
- Статус — цветная точка: зелёная «в сети», красная «не отвечает», серая «неизвестно» (ещё не опрашивалось).
- Порты — прогресс-бар и счётчик активных портов (например, 29 / 48).
- Модель — определяется автоматически из ответа устройства (
sysDescr). - Последний опрос — время последнего успешного опроса.
- Действия: опросить сейчас, снять MAC портов, пауза, удалить.
Ниже — блок «Последние события» с историей падений и восстановлений (время, устройство, событие, длительность простоя).
Добавление устройства
Кнопка «Добавить устройство» открывает окно выбора коммутатора (показываются записи с заполненным IP, ещё не под мониторингом), SNMP community и интервал опроса. После добавления устройство попадает в очередь опроса автоматически.
Отображение на карте сети
Коммутаторы под мониторингом раскрашиваются на карте сети по статусу: зелёный маркер — в сети, красный — не отвечает, серый — без мониторинга. В всплывающем окне маркера показывается статус и число активных портов.
MAC на портах (кто где подключён)
Кнопка «Снять MAC портов» читает у коммутатора таблицу MAC-адресов по портам и сопоставляет их с MAC-адресами клиентов в биллинге. Совпавшие записи показывают, на каком физическом порту (и в каком VLAN) подключён конкретный клиент. Точность зависит от того, насколько заполнены MAC-адреса в карточках клиентов.
Оптические линии (GPON) и радиосекторы
Сейчас мониторинг охватывает управляемые коммутаторы. Сбор оптического уровня сигнала с OLT (GPON-клиенты) и уровня радиосигнала с базовых станций (радиоклиенты) — следующие этапы; они требуют сетевого доступа сервера к этому оборудованию и доступа на чтение.
IPTV
Тот же список NAS, но отфильтрованный по типу оборудования IPTV-серверы: middleware и stream-серверы провайдера (TVIP Media, LFStream «Смотрёшка»).
Привязка пакетов IPTV к услугам биллинга настраивается отдельно — в разделе Настройки → IPTV-пакеты (см. 5.6).
Подробная документация — на отдельной странице
Настройка TVIP Media, LFStream и маппинга пакетов — в разделе Интеграция с оборудованием → IPTV.
Коммутаторы
Список всех коммутаторов в сети оператора. Записи используются для:
- Привязки точек подключения клиентов (порт коммутатора + VLAN).
- DHCP Option 82 — распознавание клиента по физическому подключению.
- Генерации конфигов и SORM-отчётов.
В списке доступны поиск, модальное добавление/редактирование/удаление. Колонка «Тип» показывает модель коммутатора (бренд + серия) и скрывается на мобильном.
Типы коммутаторов
Шаблоны типов коммутаторов: бренд, модель, число портов, наличие Opt82. Используется при создании коммутатора чтобы не вводить параметры вручную.
Настройки СОРМ
Список конфигураций выгрузки данных в СОРМ-3 на FTP-сервер РКН. Каждая конфигурация определяет: имя оператора СОРМ, FTP-сервер, расписание выгрузки, набор отчётов.
Подробная документация — на отдельной странице
Принцип работы СОРМ-3, список интегрированных решений, метаданные UserAttributes, pre-flight валидация и REST API готовности — в разделе Интеграция с СОРМ3.
Карта сети
Интерактивная GIS-карта сети оператора на Leaflet: узлы (PoP / боксы / муфты /
опоры / колодцы / шкафы / NAS), оптические трассы с классами
(магистраль / распределение / абонентская), зоны покрытия,
точки подключения, лиды CRM и клиенты биллинга, а также заявки Поддержки и мониторинг
состояния NAS — всё на одном слоистом полотне. URL:
/admin/equipment/netmap/. Меню: Оборудование → 🗺 Карта сети.
Слои тремя группами, поиск и ссылка на объект, карточка со статусом использования, правка с отменой и горячие клавиши, техвозможность заявок с «Закрепить», «Что заполнить», заявки и мониторинг NAS, карта на телефоне и три правила. Кадры — с демо-стенда.
Слои и тулбар
- 11 слоёв тремя группами — у группы общая подложка: Сеть — Узлы · Трассы · Оборудование · Зоны · ТП (подстанции электросетей) · Опоры (оплачиваемые по договору) · Точки (точки подключения, ~4.6 тыс. — грузятся при первом включении) · Заявки · Лиды (открытые сделки CRM с домом) · Клиенты (клиенты биллинга по дому); Электросети — ТП, Опоры и Инвентаризация (карта монтажников); Клиенты и заявки — Лиды, Клиенты, Заявки. На телефоне в панели «Фильтры» те же группы идут подзаголовками. Включённый слой залит своим цветом, выключенный — только контур. На экране шире 1400 px панель помещается в одну строку.
- Счётчик — в самой кнопке: «Узлы 1.2к», «Трассы 874», «ТП 10». Отдельной строки статистики больше нет, она занимала целый ряд и повторяла те же кнопки. Километраж волокна — в подсказке кнопки «Трассы».
- Поиск — по названию узла и трассы, адресу дома, ФИО и номеру договора клиента (см. ниже).
- Мониторинг NAS (кнопка-значок с сердцем справа от поиска) — наложение состояния UP/DOWN на маркеры NAS, авто-обновление каждые 30 с, счётчик онлайн-клиентов.
Инструменты карты — в её правом верхнем углу, отдельной панелью поверх полотна: карандаш (режим редактора — рисование и перетаскивание объектов через Geoman: маркер = узел или бокс, линия = трасса, полигон = зона), кнопка «+» (добавить объект, только в режиме редактора), линейка (измерение расстояния по ломаной), «во весь экран» (вернуться к общему плану сети), Отменить/Вернуть (история правок редактора) и обновление данных без перезагрузки страницы. На телефоне те же кнопки остаются в мобильной панели.
Добавление объектов, Отменить/Вернуть
Кнопка «+» показывается только в режиме редактора (карандаш) и открывает список, что поставить на карту: Узел сети, Трасса, Зона, Опора. Выбор переключает инструмент рисования Geoman на нужный тип, без похода в меню слоёв.
Рядом с «+» — пара Отменить / Вернуть: общая история правок редактора на все типы объектов разом (опоры, узлы, трассы, зоны), а не отдельная кнопка на каждый. Кнопки видны, пока в истории есть действия (правки опор пишут её и вне режима редактора), подсказка называет, что именно отменится. Удаление узла, трассы и опоры мягкое: «Отменить» прямо в уведомлении или Ctrl+Z возвращают объект целиком — с разваркой, волокнами, клиентами и вложением. Перемещение объекта — отдельная кнопка «Переместить» в подсказке узла или опоры (двигает один маркер) и у трассы (тянет всю линию целиком через Geoman layer-drag, а не правку отдельных вершин) — тоже попадает в общую историю.
Горячие клавиши. Ctrl+Z — отменить, Ctrl+Y — вернуть, / — поиск, E — режим редактора, M — линейка, Esc — выйти из любого режима (перемещение узла, трассы или опоры, привязка клиента, линейка, рисование). Пока идут запросы слоёв, вверху карты горит «Загрузка…»; при сбое сети — сообщение, а не пустая карта. Окна узла и трассы спрашивают, прежде чем закрыться с несохранёнными правками. Режим редактора, «+» и «Рестарт RADIUS» видят только те, кто может править карту.
Перед сохранением узла или трассы — диалог с перечнем конкретных изменений (что именно поменялось), а не общее «Сохранить изменения?»: кнопка подтверждения неактивна, пока в форме ничего не поменялось.
Полосы фильтров под тулбаром
Под кнопками слоёв — полосы фильтров, каждая появляется вместе со своим слоем и исчезает, когда слой выключен:
- Технология (со слоем «Зоны») — Оптика, Радио, Медь, Медь / оптика, Для бизнеса со счётчиком зон. Клик прячет зоны этой технологии.
- Заявки (со слоем «Заявки») — четыре среза для дежурной смены: Ожидают (открытые и ждущие ответа, включён по умолчанию), Мои (назначенные на вас), Не назначены (ничьи), Закрыты. Срезы складываются; последний включённый выключить нельзя — иначе карта опустела бы молча. На карту попадают только заявки, у клиента которых заполнен адрес с координатами, поэтому у сотрудника с внутренними задачами «Мои» честно показывает ноль — об этом говорит подсказка среза.
- Лиды (со слоем «Лиды») — этапы воронки с числом сделок: Новый, Тариф, Монтаж, Неразобранное. Клик прячет этап. Кнопка «Без дома N» ведёт в «Что заполнить»: сделку без дома на карте не показать.
- Клиенты (со слоем «Клиенты») — активные, заблокированные, приостановленные и отключённые (отключённые скрыты по умолчанию). «Неточные адреса» открывает список клиентов, у дома которых координата неточная, — такие на слой не попадают.
Внизу карты — линейка масштаба и переключатель подложки («Как тема» / «Светлая» / «Тёмная»), не зависящий от темы интерфейса: на тёмной подложке хуже читаются названия улиц, и это отдельный выбор. Он запоминается.
Слой «Лиды»
Открытые сделки CRM, у которых выбран дом, — точками на карте сети. Цвет — этап воронки, как на карте лидов. В подсказке точки — название сделки, в карточке — этап, адрес, тариф, дата монтажа и монтажник, ответственный, телефон и вердикт техвозможности, кнопка «Открыть сделку». Слой виден тем, у кого есть доступ к разделу CRM, и только по организациям сотрудника.
Слой «Клиенты»
Клиенты биллинга по домам — те же данные и статусы, что на карте клиентов, но поверх трасс, боксов и зон: видно, где клиенты уже есть и откуда их подключали. Точки собираются в кружки с числом и при приближении распадаются. Цвет точки — статус: активный, заблокирован, приостановлен, отключён. В карточке — договор, тариф, баланс, точка подключения и ссылка на карточку клиента.
Клиенты, у дома которых неточная координата (улица или населённый пункт вместо дома), на слой не попадают — иначе они собрались бы в одну точку посреди улицы. Список таких адресов — по кнопке «Неточные адреса» и в разделе «Что заполнить».
Привязка клиентов к узлам
Точка подключения есть не у всех клиентов, а физически клиент всегда подведён к конкретному узлу сети — боксу, муфте, уличному шкафу, ТП. Клиент на слое «Клиенты» теперь рисуется иконкой-человечком (цвет — статус, как и раньше), а не просто точкой: по ней сразу видно, что это абонент, а не узел или опора. Клик открывает попап клиента со списком узлов, к которым он привязан.
Правило — один узел каждого типа на клиента одновременно: один бокс, одна муфта, одна ТП и так далее, но бокс и ТП — не конфликтуют и держатся оба сразу. Привязка делается кликом по узлу на карте в режиме «Привязать к узлу» (открывается из попапа клиента). Если у клиента уже есть узел этого же типа, повторная привязка не затирает её молча — диалог подтверждения с именем прежнего узла предупреждает, что это замена, и просит подтвердить. Отвязать узел можно и из попапа клиента (кнопка «×» у строки узла), и из вкладки «Клиенты» самого узла.
flowchart TD CLICK["Клик по узлу
в режиме «Привязать к узлу»"] --> CHECK{"Есть ли у клиента
узел ЭТОГО типа?"} CHECK -- "нет" --> LINK["Создать привязку"] CHECK -- "да, другой узел" --> CONFIRM["Диалог: заменить
«узел А» на «узел Б»?"] CONFIRM -- "подтвердил" --> REPLACE["Прежняя привязка удалена,
создана новая"] CONFIRM -- "отменил" --> KEEP["Остаётся как было"] LINK --> RESULT(["Один узел каждого типа
на клиента одновременно"]) REPLACE --> RESULT
Узлы разных типов различаются квадратной цветной иконкой —
тот же приём, что у типов узлов сети в
справочнике, применён сразу в трёх местах: заголовок сайдбара узла на карте,
список привязанных узлов в попапе клиента и вкладка «Узлы» в карточке клиента
(общий сайдбар AbDrawer, открывается из любого раздела биллинга —
списка, поиска, карточки). Так один и тот же узел узнаётся с первого взгляда
везде, где он показан.
В обратную сторону — у самого узла есть вкладка «Клиенты» в боковой панели: таблица всех клиентов, привязанных к этому узлу (ФИО сокращено до «Фамилия И.О.» без переноса строки, цветной индикатор статуса, баланс, IP последней учётной записи). Под координатами узла в модалке редактирования — человекочитаемый адрес, полученный обратным геокодированием DaData по координатам узла; запрос ленивый (только при открытии формы правки) и кэшируется по координатам, не по id узла, — опора, которую подвинули, не покажет адрес с прежнего места.
Откуда берётся каждый слой
Карта ничего не хранит у себя, кроме собственных объектов сети: остальные слои читают те же таблицы, что и разделы биллинга, поэтому расходиться им не с чем.
flowchart LR KML["Выгрузка
Google Earth"] --> NODES["Узлы и трассы
NetworkNode, CableRoute"] ROSSETI["Договор с сетевой
организацией"] --> TP["ТП, линии ВЛ
и опоры поштучно"] NAS["Учёт оборудования
Nas, Switch"] --> EQ["Оборудование"] CP["Точки подключения
ConnectionPoints"] --> DOTS["Точки"] SUP["Поддержка
SupportConversation"] --> TICK["Заявки"] CRM["Сделки CRM
с выбранным домом"] --> DEALS["Лиды"] AB["Клиенты биллинга
карта клиентов"] --> ABON["Клиенты"] NODES --> MAP(["Карта сети"]) TP --> MAP EQ --> MAP DOTS --> MAP TICK --> MAP DEALS --> MAP ABON --> MAP MAP --> ORG{{"Скоуп
организации"}} ORG --> VIEW["То, что видит
сотрудник"]
Слой отдаётся только в рамках организаций сотрудника: узлы, трассы и зоны — по своей организации, точки подключения — по организации клиента, оборудование — по привязке NAS и коммутаторов. Объекты без организации видны всем.
Поиск, ссылки на объект и запоминание вида
Поле поиска в тулбаре ищет одновременно по узлам (название, комментарий), трассам (название, марка кабеля) и адресам клиентов — по улице, ФИО и номеру договора. Результаты сгруппированы значками, выбор центрирует карту и открывает карточку объекта; если объект лежит в выключенном слое, слой включается сам. Для адреса ставится временная метка — видно, куда именно попали. Список управляется с клавиатуры: стрелки, Enter, Escape; клавиша / ставит курсор в поиск с любого места карты.
Ссылка на объект. Адрес страницы меняется при выборе объекта:
?node=1222, ?route=87 или ?lat=&lon=&z=.
Такую ссылку можно скопировать из строки браузера и отправить коллеге — она
откроет карту сразу на нужном объекте с раскрытой карточкой. Если объекта нет
или он выключен либо принадлежит другой организации, показывается сообщение. Из
списка «Узлы и боксы» выключенный узел открывается на своём месте по координатам.
Карта помнит, где вы были. Включённые слои, центр и масштаб сохраняются в браузере и восстанавливаются при следующем заходе — не нужно каждый раз включать «Опоры» и доезжать до своего участка. Кнопка «Показать всю сеть» возвращает общий план. Ссылка на объект приоритетнее запомненного вида.
Измерение расстояния
Кнопка с линейкой включает режим измерения: клики по карте строят ломаную, длина считается нарастающим итогом и показывается в метрах или километрах. Двойной клик завершает измерение, ссылка «сбросить» очищает построенное. Инструмент считает расстояние по прямой между точками — для прикидки длины кабеля с запасом на провис это и нужно.
Импорт схемы из Google Earth
Если схема сети ведётся в Google Earth, её не нужно перерисовывать: выгрузка KMZ или KML загружается командой
manage.py import_netmap_kml --file "сеть.kmz" --org <ID организации> [--dry-run] [--fibers]
manage.py import_netmap_kml --purge-source kmz_smit34_map # откат импорта
Точки становятся узлами, линии — трассами. Тип объекта и ёмкость кабеля определяются по названию, как их пишет инженер: «муфта оптическая» → муфта, «ТШ Мира 8» → уличный шкаф, «ТП-417» → подстанция, «48ОВ» в названии линии → 48 волокон. Команда идемпотентна: повторный запуск обновляет ранее импортированное, а не плодит дубли, поэтому карту можно переливать после каждой правки в Google Earth.
Фильтр по региону. В выгрузках Google Earth часто лежат демонстрационные метки («Тур по достопримечательностям» — Сидней, Париж, офис Google). Импорт берёт только объекты в границах области, иначе карта растянулась бы на весь мир.
Статус использования
У каждого узла и трассы есть статус: используем, не используем или не определено. Неиспользуемые объекты на карте гаснут и получают красный крестик, неопределённые — знак вопроса. Статус переключается прямо из карточки объекта в режиме редактора.
Это основа инвентаризации подвеса: участок со статусом «не используем» либо исключается из договора с сетевой организацией, либо демонтируется — и то, и другое дешевле, чем платить за размещение.
Подстанции и договорные опоры
Два слоя описывают не нашу сеть, а чужую инфраструктуру, на которой она висит.
- ТП — трансформаторные подстанции электросетей. К карточке подстанции прикрепляется поопорная схема сетевой организации, в описании — паспорт (тип КТП, мощность, число линий, питающая ВЛ) и разбор претензий, если они были.
- Опоры — опоры сетевой организации, за размещение на которых оператор платит по договору. Реестр договора разложен поштучно: у каждой опоры — номер, линия ВЛ, подстанция, позиция договора, статус и, когда её поставили на карту, координата. Пока опора не поставлена, на карте остаётся точка улицы с перечнем позиций и оговоркой, что координата ориентировочная.
Позиции договора и сумма по ДС, реестр опор с выгрузкой, массовые действия с подтверждением, линии ВЛ, владельцы с договорами, сверка с «Не предлагать» и опоры на карте. С озвучкой. Этот же ролик — первый шаг знакомства с модулем на карте сети.
Реестр договорных опор
«Оборудование → Карта сети → Опоры «Россети»» (/admin/equipment/netmap/poles/)
— договор на размещение с сетевой организацией таблицей: позиция, улица и населённый
пункт, подстанция, линия ВЛ и напряжение, номера опор (список раскрывается), число
опор, кабель, дата начала и плата в месяц. Итоги в шапке — число опор, подстанций и плата в месяц с НДС —
совпадают с договором до копейки.
- Срезы по напряжению, фильтры по населённому пункту и подстанции, поиск по номеру опоры, улице и линии (Ctrl+K).
- Плата считается по ставкам договора для 0,4 и 10 кВ, НДС — по
каждому классу напряжения отдельно: только так итог сходится с договором. Ставки и
НДС — настройки
POLES_RATE_LV,POLES_RATE_HV,POLES_VAT_PCT. - Выгрузка — Excel и CSV в текущем срезе; кнопка в строке показывает позицию на карте. Из шапки — переходы к сверке, «Что заполнить» и карте.
Линии ВЛ
Раньше линию ВЛ можно было только выбрать в форме опоры — завести новую или
посмотреть, что на ней стоит, было негде. «Оборудование → Линии ВЛ»
(/admin/equipment/netmap/lines/) — отдельный реестр линий:
название, подстанция, напряжение, владелец, число опор на линии и число
позиций договора. Поиск по названию и подстанции, фильтры по владельцу и
напряжению.
- Создание и правка — модалкой: название, подстанция, напряжение, владелец. Линию с опорами или позициями договора удалить нельзя — сначала перенести их на другую линию.
- Переход в «Опоры» — кнопка в строке открывает список
опор этой линии уже отфильтрованным (
/netmap/poles_list/?line=<id>). - На карте — значок в строке открывает карту на середине опор линии.
- Отбор и выгрузка — владелец (с подкатегориями, как в «Опорах»), напряжение и поиск; Excel и CSV выгружают ровно отобранное.
- Название линии из реестра договора не меняется — по нему разбор ДС находит линию; подстанцию, напряжение и владельца менять можно. Добавлять и править линии могут только редакторы карты.
- ТП у линии — необязательная привязка линии к узлу карты (подстанция/ТП). Без неё линия существует только в реестре; с ней — рисуется на карте.
Если у линии указана ТП и хотя бы одна из её опор поставлена на карту (координата не черновая — «уточнена» инженером, GPS, кандидатом с трассы или импортом «Россетей»), слой «Опоры» рисует саму линию — провод: ломаную от подстанции через опоры по порядку номера, не как они лежат в базе. Номера опор сортируются по-людски («7/1» < «7/2» < «7/10» < «8»), а не по алфавиту, иначе на двузначных номерах провод прыгал бы туда-сюда.
Ответвления рисуются отдельно: опоры «13/1, 13/2» — отпайка от опоры 13, их линия начинается от неё, а магистраль идёт 12 → 13 → 14 без зигзага.
Провод рисуется только по опорам с уточнённой координатой — опоры, расставленные приблизительно (цепочкой вдоль улицы при массовой раскладке договора), в него не попадают: до уточнения места инженером линия просто короче. На демо-стенде расставлена только часть опор, поэтому большинство из 165 линий реестра пока не рисуются проводом — это ожидаемо, не ошибка; на карте выше показана ровно одна линия, для которой есть и подстанция, и уточнённая опора.
Опоры поштучно: расстановка на карте
Координат опор в реестре нет, поэтому их расставляют на карте. Со слоем «Опоры» и при приближении (масштаб 16 и крупнее) карта предлагает кандидатов — вершины наших трасс рядом с точкой улицы: излом воздушной трассы обычно приходится на опору. Если подключена карта инвентаризации, первыми идут опоры с неё — монтажники отметили их точно на месте, они коричневые. Клик по кандидату открывает выбор позиции договора и номера опоры, после сохранения опора встаёт на своё место. Опору, которой нет в договоре, отмечают отдельно: если рядом проходит наша трасса, она попадает в список «К оформлению».
Пролёты между поставленными опорами считаются на лету по трассам; полоса над картой показывает, сколько опор уже поставлено.
Ставить полторы тысячи опор по одной долго, поэтому весь договор разложен разом: опоры каждой позиции выстроены цепочкой вдоль своей улицы с шагом сорок метров, в сторону ближайшей нашей трассы. Такие опоры помечены как расставленные приблизительно — на карте они рисуются пунктиром, в сверку и расчёт пролётов не идут. Когда инженер поправит место руками, пометка снимается, и опора становится обычной. Так на карте видно каждую опору со своим статусом, а не одну точку на восемь опор.
Слой «Инвентаризация»: карта монтажников из Яндекса
Монтажники отмечают опоры, PON-боксы, адреса подключений и линии в «Конструкторе карт» Яндекса — с телефона, прямо у опоры. Биллинг читает эту карту по ссылке и показывает её слоем «Инвентаризация» на карте сети. Ничего не переносится руками: что поправили в конструкторе, через несколько часов видно в биллинге.
Цвет метки, подпись и описание, линии, как метка попадает в биллинг и как подключить карту — для монтажников и инженеров. Этот же ролик открывает кнопка «Как это работает?» в полосе слоя «Инвентаризация» на карте сети.
Вид объекта биллинг определяет по цвету метки в конструкторе и по подписи:
| Метка в конструкторе | На карте сети |
|---|---|
Коричневая #793d0e, подпись — номер (13/6) или оп | Опора — кандидат для опор реестра |
Тёмно-синяя #0e4779, «опора освещения», «0,4 дерево» | Опора 0,4 кВ или освещения — тоже кандидат |
Голубая #1e98ff, «пон бокс» | PON-бокс |
Зелёная #56db40 или красная #ed4543 с адресом | Адрес подключения |
Линия «ВЛ-0,4кВ №3» или серая #595959 | Линия ВЛ (пунктир) |
Линия «оптика 8ов» или красная #ed4543 | Оптика |
Над картой при включённом слое — полоса: «Как это работает?» (ролик выше), название карты, «Открыть в Яндексе» и «Как вести карту» (ведёт на правила ниже). Тем, кто может править карту сети, видны ещё «Обновить» — перечитать карту сейчас, не дожидаясь шести часов, — и «Ссылка на карту».
Подсказка у метки показывает подпись и описание из конструктора. Если на этом месте (ближе 3 м) уже стоит опора реестра, в подсказке — её номер и линия ВЛ. Если нет — напоминание, что опору реестра ставят в слое «Опоры».
flowchart LR
M["Монтажник у опоры
ставит метку"] --> Y["Конструктор карт
Яндекса"]
Y -->|"раз в 6 часов
или «Обновить»"| B["Биллинг разбирает
цвет и подпись"]
B --> L(("Слой
«Инвентаризация»"))
B --> C(("Кандидаты мест
для опор реестра"))
C -->|"подтвердил
сотрудник"| P["Опора реестра на месте
источник «Карта инвентаризации»"]
P -.->|"± 3 м"| L
style M fill:#78350f,stroke:#d97706,color:#fff
style Y fill:#1e3a5f,stroke:#5BA89D,color:#fff
style B fill:#134e4a,stroke:#43b77a,color:#fff
style P fill:#43b77a,stroke:#2d9a5f,color:#fff
Как опора реестра встаёт на место. Когда в слое «Опоры» открыт выбор места, метки опор с карты инвентаризации идут первыми среди кандидатов, а метка с тем же номером, что у опоры реестра, — первой в списке. Место сохраняется с источником «Карта инвентаризации», его видно в карточке опоры и в списке опор. Сам биллинг без подтверждения ставил опоры один раз, при подключении карты, и только там, где совпали и номер, и линия ВЛ.
flowchart TD
A["Опора реестра без места
номер · улица · линия ВЛ"] --> K["Кандидаты рядом с улицей:
метки карты инвентаризации
и вершины трасс"]
K --> Q{"Есть метка
с тем же номером?"}
Q -->|"да"| F["Она первая в списке"]
Q -->|"нет"| S["Метки «оп» и вершины трасс —
выбор по расположению"]
F --> OK["Сотрудник подтверждает"]
S --> OK
OK --> R["Координата = метка
источник «Карта инвентаризации»"]
style A fill:#7048e8,stroke:#9775fa,color:#fff
style F fill:#43b77a,stroke:#2d9a5f,color:#fff
style R fill:#134e4a,stroke:#43b77a,color:#fff
Подключение карты. В конструкторе нажмите «Поделиться» и скопируйте
ссылку (подойдёт и ссылка Яндекс Карт с um=constructor%3A…). На карте сети
включите слой «Инвентаризация», нажмите «Ссылка на карту», вставьте ссылку и
«Сохранить». Биллинг сразу загрузит карту и скажет, сколько на ней точек и линий;
если карта не открылась, ссылка не сохраняется и остаётся прежняя. Смена карты
записывается в журнал действий.
Биллинг только читает карту — в Яндекс он ничего не пишет. Если Яндекс не ответил, сутки показывается последняя загруженная копия. На демо-стенде карта не подключена: там слой пуст, пока не вставить ссылку на свою карту.
Как вести карту инвентаризации
От того, как подписана метка, зависит, найдёт ли биллинг нужную опору. Правила для тех, кто ставит метки в конструкторе:
- Одна метка — одна опора, точно на месте. Включите «Спутник» и приблизьте карту, чтобы видеть саму опору. Две метки рядом — это две опоры.
- Цвет — из палитры конструктора, по таблице выше. Другие цвета попадут в «Другое» и кандидатами не станут.
- Подпись опоры — только номер:
13/6,58,17а. Можно с «№» или «оп.» — их биллинг отбросит. Дробь — только через/:13-6и13.6не распознаются. Нет номера — подпишитеоп. - В описание — линия и подстанция (
ВЛ-0,4кВ №3 ТП 403), материал, особенности («за забором»). Описание видно в подсказке на карте сети. - PON-бокс — подпись «пон бокс», в описании делитель и порты:
делитель 1/8,1: 7569. - Линии рисуйте от опоры к опоре, узлы — на метках. Подпись ВЛ —
ВЛ-0,4кВ №3, второй строкой пролёт4 - 2/9; оптика —оптика 8ов. - Снятую опору удаляйте, повторно таблицу Excel не импортируйте — появятся дубли всех меток.
Подробная памятка для монтажников с примерами — в разделе «Отчёты разработки → Документация» биллинга: «Карта инвентаризации опор в Яндекс Картах».
Опоры списком: фильтры и работа с выделенными
Отдельная страница «Оборудование → Опоры» (/admin/equipment/netmap/poles_list/)
показывает опоры по одной, а не позициями договора: номер, линия и подстанция,
улица, владелец, статус, координата и то, как она получена. Фильтры — по
владельцу, статусу, линии и наличию координаты; поиск идёт по номеру опоры,
улице и линии. Набор колонок каждый настраивает под себя, он запоминается в
профиле сотрудника.
Отметив опоры, можно разом сменить владельца, статус или линию либо удалить их. После такой правки час доступна отмена — она возвращает прежние значения, если статус поставили не тем опорам. Отдельную опору правят в её окне: номер, линия, владелец, статус, координата и примечание; то же окно открывается с карты кнопкой «Изменить» в подсказке опоры.
В окне опоры на карте есть блок «Фото»: «Загрузить фото» (с телефона снимок можно сделать камерой прямо у опоры), «Заменить» и «Убрать». Снимок сохраняется сразу, без кнопки «Сохранить», и лежит в закрытом хранилище — открыть его можно только после входа в биллинг. Принимаются JPG, PNG, WEBP и HEIC до 15 МБ. В списке опор у такой опоры рядом с номером значок камеры.
Массовая смена владельца, статуса или линии спрашивает подтверждение с числом опор, а в журнал каждой опоры пишется своя строка. Опоры договора не удаляются и не меняют номер и линию. Номер, введённый вручную, приводится к виду реестра («13 п 1» → «13п/1»), номера сортируются как числа: «2» раньше «10». Координата в строке открывает опору на карте, Excel и CSV выгружают текущий отбор. «Добавить опору», меню строки и массовые действия видны только редакторам карты. Опора, поставленная ближе 2 м к другой, получает предупреждение «не одна ли это опора».
Владельцы опор и их договоры
Опоры принадлежат не только сетевым организациям — кроме электросетевых компаний, городского электротранспорта и наружного
освещения встречаются СНТ, предприятия и
частные линии. Крупных владельцев немного и они постоянны, мелких много и
заводить их приходится по ходу работы, поэтому справочник
(/admin/dictionary/pole_owners/) двухуровневый: у владельца «Прочие»
живут «СНТ Рассвет» и подобные, и общий список не разрастается.
Владелец указывается у линии ВЛ, а опора наследует его от своей линии. У отдельной опоры можно поставить своего: на улице бывает чужая опора в середине линии, и по договору она оплачивается отдельно. Цвет владельца — это цвет его опор на карте, поэтому видно, где чья зона. В карточке указано, сколько у владельца линий, опор и подкатегорий; того, на кого ссылаются, удалить нельзя — его только выключают, и тогда он не предлагается при выборе. Владельца, у которого есть подкатегории, нельзя сделать подкатегорией — справочник остаётся двухуровневым.
К владельцу прикладывают сам договор и всё, что подписали к нему позже: допсоглашения и прочие документы. У каждого файла свой вид, номер, даты подписания и окончания — истёкший срок в списке помечен, чтобы перед согласованием подвеса было видно, действует ли договор сейчас. Файлы (PDF или снимок, до 25 МБ) лежат в закрытом хранилище и открываются только из биллинга, по ссылке с ограниченным сроком: договор с реквизитами контрагента не должен оказаться в открытом доступе.
Типы узлов сети: свой значок и цвет
Раньше вид узлов на карте был задан в самой странице, и добавить свой тип без
разработчика было нельзя. Теперь это справочник
(/admin/dictionary/net_node_types/): у каждого типа своё название,
значок и цвет, а также подпись для ёмкости — у муфты считают волокна, у шкафа
порты. Карточка раскрывается, значок и цвет выбирают из общего набора, правки
видны на карте сразу.
Встроенные типы можно переименовать, перекрасить и выключить, но не удалить: на них ссылаются уже созданные узлы. Выключенный тип не предлагается при создании узла, а существующие узлы продолжают работать.
Сверка опор
«Сверка» (/admin/equipment/netmap/poles/reconcile/) сравнивает статус
поставленных опор с нашими трассами: наша трасса проходит ближе 15 м к опоре (расстояние меряется до
линии кабеля, а не до точек её изгиба) — наш кабель висит на этой опоре.
- Предложения — где статус опоры расходится с трассами; их принимают по одному или все сразу, с отменой; «Принять» применяет только то, что было на экране. Кнопка «Не предлагать» запоминает решение после осмотра в журнале опоры — сверка не повторяет его, пока опору не переставят.
- К оформлению — наш кабель висит на опоре, которой нет в договоре.
- К исключению — опора в договоре, а нашего кабеля на ней нет или трасса помечена «не используем».
- В шапке — сколько опор уже на карте и на сколько изменится плата в месяц; «Списки для «Россетей»» выгружают оба списка в формате приложения к договору.
Что заполнить
«Что заполнить» (/admin/equipment/netmap/checklist/) собирает в одном
месте всё, без чего карта, проверка техвозможности и план выездов работают
вполсилы: дома в открытых заявках, точные координаты домов клиентов, ёмкость
боксов и шкафов, подстанции реестра на карте, адреса в обращениях, статус трасс, график
монтажников, сверку номеров опор с их количеством и расстановку опор. У каждой
проверки — процент готовности; раскрытая строка показывает до 100 объектов со
ссылками, где исправить. На отдельную проверку можно дать ссылку вида
#ck-<ключ>. Ссылки ведут
в уже отобранные списки — «Боксы без ёмкости», «Трассы без статуса»; заявки без дома
считаются тем же отбором, что в техвозможности.
Техвозможность заявок
Каждая открытая заявка CRM с домом получает вердикт по карте сети: можно ли её подключить и что для этого нужно. Вердикт ставится сам, когда в сделке выбирают или меняют дом, и хранится в системном доп. поле сделки «Техвозможность», пояснение — в поле «Техвозможность — почему». Его видно в карточке сделки, в попапе слоя «Лиды» и в обзвоне.
flowchart TD
D["Заявка с домом"] --> C{"В доме уже есть
клиенты?"}
C -- да --> OK["Можно"]
C -- нет --> R{"Дом только
в зоне радио?"}
R -- да --> OK
R -- нет --> B{"Бокс или шкаф
ближе 50 м?"}
B -- да --> OK
B -- нет --> L{"Бокс до 150 м
и наша линия у дома?"}
L -- да --> OK
L -- нет --> F{"Бокс до 500 м?"}
F -- да --> P["Можно с новыми опорами
опора на каждые 50 м отвода"]
F -- нет --> Z{"Зона покрытия
или наша линия рядом?"}
Z -- да --> I["Нужен осмотр"]
Z -- нет --> N["Нельзя"]
D -. "дома нет" .-> NA["Нет адреса"]
style OK fill:#43b77a,stroke:#2d9a5f,color:#fff
style P fill:#0f766e,stroke:#43b77a,color:#fff
style I fill:#d97706,stroke:#b45309,color:#fff
style N fill:#b02a37,stroke:#dc2626,color:#fff
style NA fill:#64748b,stroke:#475569,color:#fff
- Точность координаты. Если дом найден только до улицы, а клиентов в нём нет, «Можно» понижается до «Нужен осмотр».
- Ручной вердикт после осмотра повторная проверка не трогает, пока в сделке не сменится дом. Каждая смена вердикта — системная заметка в сделке. Подтверждённый вердикт закрепляют кнопкой «Закрепить» (замок в строке) — тогда его не меняет и ночная проверка.
- Пороги — настройки
TECH_SPAN_M(50 м),TECH_DROP_MAX_M(150),TECH_LINE_NEAR_M(40),TECH_FAR_M(500). Если у бокса или шкафа заполнена ёмкость, занятые порты считаются по привязкам клиентов: полный бокс даёт «Нужен осмотр», в пояснении — «занято портов N из M». Планируемая зона покрытием не считается, абонентский отвод и подземная трасса — не «наша линия у дома». - Для всех заявок сразу — «Проверить все» на странице или команда
manage.py tech_check_deals [--apply] [--force] [--deal N]. «Проверить все» идёт порциями по 200 заявок. - Каждую ночь в 03:15 открытые заявки перепроверяются командой
manage.py tech_recheck; закреплённые вердикты она не трогает. - Проверяются только заявки, которым нужна линия: интернет, МКД и сделки без типа. Закрытыми считаются и стадии воронки с типом «успех» или «проигрыш».
Страница «Оборудование → Карта сети → Техвозможность»
(/admin/equipment/netmap/tech/): сводка, заявки по вердиктам с
пояснением и срез «Где не хватает сети» — сколько заявок ждёт у
каждого бокса и на каких улицах сети нет вовсе.
Заявки без дома
Заявка без дома не попадает ни на карту, ни в проверку, ни в план выездов. В срезе «Нет адреса» кнопка «Найти дома по тексту заявок» ищет адрес там, где его обычно оставляют: у клиента сделки, в заметке «Адрес: …», в названии и комментарии; координаты из текста переводятся в ближайший дом. Принимается только дом с номером.
- Найденное показывается рядом с заявкой; «Привязать дома» записывает дом и квартиру в выбранные сделки — с заметкой и отменой. Вердикт после привязки считается сам.
- Пометка «далеко от нашей сети» — найденный дом вне зон и без бокса в паре километров: чаще всего это одноимённая улица в другом районе. Массовая привязка такие строки пропускает.
- Адрес, продиктованный в звонке, разбирает AI — только по кнопке «Разобрать через AI», по пять заявок за раз.
- Где адрес не нашёлся, ответственному ставится задача «Уточнить адрес» — без повторов.
Где строить сеть: отчёт раз в неделю
В «Своих отчётах» есть отчёт «Где заявкам не хватает сети (техвозможность)» — заявки, которым нужен осмотр, новые опоры или подключить нельзя, по организациям, районам и улицам, с числом новых за неделю. Его удобно отправлять в рабочий чат раз в неделю: см. параметр «Организация» и отчёты по расписанию.
Зоны покрытия и технологии
Зона покрытия — полигон с указанием технологии абонентской линии: оптика, радио, медь, медь / оптика, «для бизнеса». Технология задаётся отдельным полем, а не подписью, поэтому по ней можно фильтровать карту.
Под тулбаром выводится легенда-фильтр: чип на каждую технологию с её цветом и числом зон. Клик по чипу убирает группу с карты — удобно, чтобы посмотреть, например, только радиопокрытие. Легенда появляется вместе со слоем «Зоны» и прячется вместе с ним. При наведении на полигон всплывает подсказка «название · технология».
Перенос из Конструктора Яндекс.Карт. Если карта
покрытия велась в Конструкторе, её объекты переносятся командой
manage.py import_yandex_zones --um <ID> --org <N> --apply.
Без --apply команда только показывает, что будет создано.
Технология определяется по подписи полигона — именно по абонентской
линии: «аплинк радио, абонентская линия оптика» попадёт в «оптику», потому что
подключаемость адреса определяет последняя миля, а не аплинк. Повторный запуск
с --replace перезаливает ту же карту.
Оптические волокна и трассировка
Трасса хранит структуру кабеля по стандарту TIA-598 (модули × волокна), панель свойств показывает разварку (splice) на муфтах и узлах. Поддерживается трассировка пути волокна от точки к точке — подсветка участков на карте. Трассировка проходит все ветки сплиттера и обе стороны от узла. Разварка создаётся только в узле на линии трассы и без повторов; удаление разварки освобождает волокна и убирает только свою строку.
Заявки Поддержки на карте
Слой «Заявки» накладывает геопривязанные тикеты Поддержки СмИТ Биллинг. Клик по маркеру открывает панель тикета: ответ клиенту, Нейроответ (AI-черновик), внутренняя заметка, назначение ответственного, а также drawer карточки клиента. Та же панель работает на карте клиентов.
Вложения. Снимки открываются просмотрщиком прямо в панели: стрелки на экране и клавиши ← → листают вложения заявки, счётчик показывает «N из M», Esc закрывает, кнопка «Скачать» отдаёт оригинал. Раньше клик уводил на отдельную вкладку с голой картинкой, и к следующей приходилось возвращаться назад. Файлы (PDF, таблица, документ, архив) выводятся со значком своего формата — до этого на всём висела скрепка.
Прошлые обращения. Список под шапкой открывает выбранную заявку в этой же панели, а в шапке появляется стрелка возврата к предыдущей. Ctrl+клик по-прежнему открывает заявку в новой вкладке раздела Поддержки.
Мониторинг NAS
Включённый «Монитор» подсвечивает аварийные NAS, в панели узла доступны действия Ping, Синхронизация, Рестарт RADIUS и список онлайн-клиентов. «Рестарт RADIUS» перезапускает RADIUS целиком, поэтому кнопка есть только у редакторов карты.
Слои и источники данных
flowchart LR
KMZ["Google Earth
KMZ / KML"] -->|"import_netmap_kml"| MAP
MAP["Карта Leaflet
10 слоёв"] --> N(("Узлы /
оборуд."))
MAP --> R(("Трассы
(волокна)"))
MAP --> Z(("Зоны
покрытия"))
MAP --> TP(("ТП и опоры
электросетей"))
MAP --> CP(("Точки
подключения"))
MAP --> TK(("Заявки
Поддержки"))
MAP --> MON(("Монитор
NAS"))
MAP --> LD(("Лиды
CRM"))
MAP --> AB(("Клиенты
биллинга"))
N -->|"редактор"| EDIT["Geoman
CRUD + drag"]
R -->|"клик"| FIB["Панель волокон
splice · трассировка"]
TP -->|"клик"| DOC["Схема и договор
номера опор"]
TK -->|"клик"| TPANEL["Панель тикета
ответ · AI · заметка"]
MON -->|"клик NAS"| NAS["Ping · Sync ·
Restart · онлайн"]
LD -->|"вердикт"| TECH["Техвозможность
можно · опоры · осмотр · нельзя"]
TP -->|"поштучно"| POLES["Реестр · расстановка
сверка опор"]
style KMZ fill:#0f766e,stroke:#43b77a,color:#fff
style MAP fill:#134e4a,stroke:#43b77a,color:#fff
style FIB fill:#1e3a5f,stroke:#5BA89D,color:#fff
style DOC fill:#7048e8,stroke:#9775fa,color:#fff
style TPANEL fill:#78350f,stroke:#d97706,color:#fff
style NAS fill:#7f1d1d,stroke:#dc2626,color:#fff
style EDIT fill:#43b77a,stroke:#2d9a5f,color:#fff
style TECH fill:#0f766e,stroke:#43b77a,color:#fff
style POLES fill:#7048e8,stroke:#9775fa,color:#fff
Связи объектов карты
Узел — универсальный объект с координатами. Он может быть «геопаспортом» уже учтённого оборудования (тогда ссылается на NAS, коммутатор, точку подключения или адрес), либо самостоятельным инфраструктурным объектом (муфта, опора, колодец).
erDiagram
NETWORK_NODE ||--o{ CABLE_ROUTE : "откуда / куда"
NETWORK_NODE ||--o{ FIBER_SPLICE : "разварка в узле"
NETWORK_NODE ||--o{ COVERAGE_ZONE : "покрытие узла"
NETWORK_NODE }o--|| NAS : "геопаспорт"
NETWORK_NODE }o--|| SWITCH : "геопаспорт"
NETWORK_NODE }o--|| HOMES : "адрес"
NETWORK_NODE }o--|| CONNECTION_POINT : "точка подкл."
CABLE_ROUTE ||--o{ FIBER : "волокна кабеля"
FIBER }o--|| ABONENTS : "кому заведено"
FIBER ||--o{ FIBER_SPLICE : "сварка A/B"
COVERAGE_ZONE }o--|| NAS : "покрытие NAS"
ORGANIZATION ||--o{ NETWORK_NODE : "принадлежит"
ORGANIZATION ||--o{ CABLE_ROUTE : "принадлежит"
ORGANIZATION ||--o{ COVERAGE_ZONE : "принадлежит"
Справочники значений:
- Типы узлов: узел связи (PoP) · бокс / ШР · муфта · опора · колодец · уличный шкаф · трансформаторная подстанция · прочее.
- Статус использования (у узлов и трасс): используем · не используем · не определено.
- Типы трасс (задают цвет по умолчанию): магистраль (красная) · распределение (синяя) · абонентская (зелёная) · воздушная (жёлтая) · подземная (серая).
- Статусы волокна: свободно · занято · резерв · повреждено. Цвет самого волокна — по TIA-598, циклично по 12.
- Типы разварки: сварка · разъём · сплиттер (PON).
- Технологии зон: оптика · радио · медь · медь / оптика · для бизнеса.
Карта раздела
- Карта сети
- Слои
- Узлы
- Оборудование
- Трассы
- Зоны покрытия
- Подстанции
- Договорные опоры
- Точки подключения
- Заявки Поддержки
- Лиды CRM
- Клиенты биллинга
- Навигация
- Поиск по узлам и адресам
- Ссылка на объект
- Запоминание вида
- Измерение расстояния
- Данные
- Импорт из Google Earth
- Статус использования
- Идемпотентный перезалив
- Оптика
- Волокна TIA-598
- Разварка в узлах
- Трассировка пути
- Статусы занятости
- Зоны
- Технология линии
- Легенда-фильтр
- Импорт из Яндекс.Карт
- Эксплуатация
- Мониторинг NAS
- Ping и синхронизация
- Рестарт RADIUS
- Онлайн-клиенты
- Опоры и заявки
- Реестр договора
- Расстановка опор
- Сверка и списки
- Что заполнить
- Техвозможность
- Поиск домов по тексту
- Доступ
- Просмотр всем сотрудникам
- Правка root и network
- Изоляция по организации
Права и разграничение по организациям
Просмотр карты доступен любому сотруднику, правка
топологии — нет. Создавать, менять и удалять узлы, трассы, зоны, волокна
и разварки могут только суперпользователь и группы из настройки
NETMAP_ADMIN_GROUPS (по умолчанию root,network).
Удаление мягкое: узел или трассу «Отменить» возвращает целиком — с разваркой,
волокнами и клиентами. Переписку заявок, карточки и баланс клиентов в панели карты
видят только те, у кого есть доступ к разделам «Поддержка» и «Клиенты». Схемы и фото
узлов и трасс лежат в закрытом хранилище и открываются только после входа в биллинг.
Мультиорганизационность. Узлы, трассы и зоны хранят организацию, и карта показывает сотруднику только то, что входит в его разрешённые организации. Кеш слоёв разделён по этому же признаку, поэтому сотрудник одной организации не может получить закешированный ответ, собранный для другой. Ограничение действует не только на карте: списки «Узлы и боксы» и «Трассы связи», поиск, а также обращение к объекту по прямой ссылке (открытие, правка, удаление, волокна, разварка, трассировка) проверяют принадлежность — чужой объект отвечает «не найдено». Объект по ссылке открывается по правам сотрудника, а не по организации, выбранной в шапке; списки и поиск — по шапке. Журнал правок карты пишется с организацией объекта. Волокно наследует организацию от трассы, разварка — от узла, в котором сварена.
Если у организации своей сети на карте ещё нет, вместо пустого поля показывается подсказка с предложением загрузить схему из Google Earth или нарисовать её в режиме редактора.
Тёмная тема и адаптив
При тёмной теме интерфейса карта становится тёмной: подписи остаются русскими, трассы и узлы сохраняют цвета, zoom-контролы и легенда адаптированы. Подложку можно закрепить независимо от темы переключателем «Как тема / Светлая / Тёмная» — на тёмной подложке хуже читаются названия улиц, и при разборе адресов удобнее светлая карта в тёмном интерфейсе. Всплывающие подсказки маркеров, плашка мониторинга и чипы волокон в тёмной теме тоже тёмные.
На телефоне карте отдан почти весь экран: сводка, поиск, фильтр технологий и легенда переезжают в панель «Фильтры», а в тулбаре остаются только иконки — монитор, редактор, измерение, «вся сеть», обновление и лупа поиска; кнопки не меньше 44 px. Карточка объекта раскрывается во весь экран, как остальные слайд-панели системы.
Без PostGIS — координаты и геометрия хранятся в
JSONField, расстояния считаются по формуле гаверсинуса. Раздел лицензируется
модулем netmap.