Журнал изменений
Содержание раздела
- v3.0.0 — август 2026
- Защита от дублей клиентов
- MAC оборудования редактируется в таблице аккаунтов
- AI-бот: телефон поддержки берётся из брендинга организации
- Склад: роли «держателей подотчёта»
- СОРМ: изоляция по организации и мобильная версия (UX-аудит)
- v3.0.0 — июль 2026
- Карта клиентов: скорость, права и тёмная тема
- Папки организаций и раскладка клиентов
- Тарифы по организациям и полноширинный редактор бота
- Поддержка: расшифровка и суть звонка (AI)
- Карточка сделки — полноэкранный дровер
- Единый поток клиента
- Мастер настройки CRM и навигация
- Виджеты-плагины
- Единая CRM: воронки и пресеты
- Источники сделок v2
- Salesbot v2
- Платежи: фискализация на стороне ЮKassa
- CRM-конструктор в стиле amo
- СОРМ (03–04.07.2026)
- Поддержка
- v3.0.0 — июнь–июль 2026
- Поддержка
- CRM
- Внутренний чат
- Клиенты и данные
- Интерфейс и инфраструктура
- v2.1.0 — 6 июня 2026
- Диагностика HelpDesk в настройках
- Вкладка «Маркетинг»
- v2.1.0 — 18 мая 2026
- Логика разблокировки и фин-блоки
- Аудит и safety net
- Backup-модуль
- UI — настройки и виджеты
- Соблюдённые правила
- v2.0.0 — 15 мая 2026
- Карточка клиента — рестайлинг
- Ревизия бейджей шапки и плашек
- Единая дизайн-система компонентов
- Прочие фиксы
- v1.6.0 — 2 мая 2026
- Sprint A: справочник адресов и точек подключения
- Автоподстановка шлюза IpPull
- Новые колонки точек подключения
- Фирменный зелёный вместо синего
- Модальное редактирование адресов
- Tooltips к подписям полей
- v1.6.0 — 27 апреля 2026
- RADIUS / Сессии
- Адреса / ФИАС / DaData
- Юр.лица / СОРМ
- UX Audit Sprint 1+2-3
- Тарифы / Услуги
- Дашборд (build ~250-260)
- FreeRADIUS / NAS
- Прочее
- v1.0.0 — 29 марта 2026
- NAS Развёртывание (OSS)
- Общая схема работы
- Под-вкладки
- Модальное окно вывода команд
- OSS утилиты
- rtsh — главная утилита
- OSS команды
- OSS схемы (44 шт.)
- Структура каталогов NAS
- Docker конфигурация
- Аудит форм — Select2 и AJAX
- Исправления из Telegram-чата (25 задач)
v3.0.0 — август 2026
Защита от дублей клиентов
- Система больше не даёт создать второго клиента с тем же номером договора — ни через быстрое добавление, ни через полную форму, ни из сделки CRM. Договор — фактический уникальный идентификатор клиента. При повторном номере показывается ссылка на существующего клиента, дубль не создаётся. Сравнение учитывает ведущие нули (EBS-договора). Папки не проверяются.
MAC оборудования редактируется в таблице аккаунтов
- Колонка «Mac девайса» на карточке клиента (вкладка «Аккаунты») стала редактируемой прямо в таблице: карандаш или двойной клик → поле ввода → сохранение. Формат MAC проверяется, при совпадении с MAC другого клиента показывается предупреждение. Значение общее для клиента — правка обновляет все строки.
AI-бот: телефон поддержки берётся из брендинга организации
- Телефон, который AI-ассистент даёт клиентам, теперь берётся из Настройки → Организации → Брендинг → «Телефон поддержки» (свой у каждой организации), а не из зашитого в код значения. Пусто — бот предлагает написать оператору без диктовки номера.
Склад: роли «держателей подотчёта»
- «Взять со склада» (взять единицу себе в подотчёт) в скан-центре доступно сотрудникам
из групп-держателей (настройка
STOCK_HOLDER_GROUPS, по умолчанию установщик / поддержка / кладовщик), а также кладовщикам и суперпользователям. Если группа сотрудника не в списке — сообщение «Ваша группа не входит в держателей подотчёта». Список групп настраивается без правки кода.
СОРМ: изоляция по организации и мобильная версия (UX-аудит)
- Мульти-орг изоляция по прямой ссылке: открыть, запустить или удалить
чужой СОРМ-конфиг по прямому URL больше нельзя — проверяются права сотрудника
(
allowed_orgs). Список тоже скоуплен по правам. Подробнее — Мульти-организация. - Мобильные карточки: список конфигураций на телефоне превращается в карточки с подписями — колонки FTP, расписание и статус последней выгрузки не прячутся. См. Список конфигураций.
- Мелочи: почищены англицизмы в интерфейсе («Vendor» → «Вендор», «Field code» → «Код поля»), исправлена опечатка в бейдже готовности.
v3.0.0 — июль 2026
Карта клиентов: скорость, права и тёмная тема
- Карта грузится в 4 раза быстрее: 11,6 → 2,6 с, передача по сети 4585 → 380 КБ. В nginx не был включён gzip для JSON (сжимался только HTML) — теперь сжимаются все JSON-ответы биллинга. Плюс ответ карты больше не экранирует кириллицу: русские буквы занимали по 6 байт вместо двух. Подробнее — Вес карты и скорость.
- Пустая карта объясняет причину: если у организации нет адресов с точными координатами, вместо молчания выводится счётчик клиентов и ссылка на редактор координат. См. Мультиорганизация.
- Правка координат дома закрыта правами — раньше сохранить координаты
мог любой залогиненный сотрудник. Теперь суперпользователь и группы из
ADDRESS_ADMIN_GROUPS. - Тёмная тема: вернулся жёлтый индикатор «Приостановлен» в легенде (правило темы гасило любой цвет, начинающийся на «f», — задевало ещё #ffc107 и #fd7e14 по всему проекту), тёмные тайлы получили русские подписи вместо латиницы.
- Мелочи доступности: подпись маркера для скринридера, кнопка сворачивания легенды выросла с 7×14 до 44×44 px, зум на мобильном — 40×40.
Папки организаций и раскладка клиентов
- Папку верхнего уровня можно закрепить за организацией — она становится её «домом». Закрепление проходит вглубь: подпапки, клиенты и их финансовые операции получают организацию папки. Иконка красится акцентным цветом компании из брендинга и наследуется вложенными папками. Появилось редактирование папки (имя + организация) — раньше папку можно было только создать или удалить. Подробнее — Папка организации.
- Раздел «Клиенты» подчиняется выбору организации в шапке: чужие папки скрыты и в дереве, и в содержимом. Прежде папки шли в обход фильтра, поэтому у «СмИТ» висели папки других компаний. Записи без организации видны в любом режиме. Выбор в шапке остаётся фильтром отображения и не влияет на права доступа — см. Мультиорганизация.
- У тарифа появилась «Директория» — папка, куда попадают его новые клиенты (заняла место неиспользуемой «Валюты»). Список строится от папки организации тарифа с её вложенными. См. Директория тарифа.
- Раскладка новых клиентов настраивается: по директории тарифа (по умолчанию), только по папке организации или не раскладывать — Настройки → Система → Профиль. Клиент, созданный внутри конкретной папки, остаётся в ней в любом режиме. См. Раскладка новых клиентов.
- В модалке «Новый клиент» организация выбирается селектом в шапке (в режиме «Все организации»), а списки тарифов и NAS следуют за выбором. Пустой список тарифов объясняется текстом, а NAS показываются все, если своих у компании нет.
- Папки разовых импортов
EBS-импорт <дата>объединены: клиенты перенесены в основную папку, пустые папки удалены. Импорт больше не создаёт папку под каждую дату.
Тарифы по организациям и полноширинный редактор бота
- В карточке сделки селектор тарифа показывает только тарифы организации сделки: селектор показывает только тарифы этой организации
- Автозаполнение полей лида из расшифровки звонка: тариф (по публичным тарифам с галкой «показывать на сайте»), стоимость подключения, отдельное поле «Настройка», роутер; адрес подключения нормализуется через DaData. Упоминание компании в разговоре переводит сделку в её организацию с соответствующей стоимостью подключения.
- Канвас редактора Salesbot развёрнут на всю ширину рабочей области; модалка добавления сделки адаптирована для телефонов. Подробнее — Salesbot.
Поддержка: расшифровка и суть звонка (AI)
- У тикета со звонком — блок «Запись звонка» с плеером и кнопкой «Транскрибировать / Обновить суть»: запись расшифровывается и AI выделяет структурную выжимку — суть обращения, категорию, теги, признак «требуется оператор».
- Тикет автоматически связывается с клиентом по телефону или по номеру договора, названному в разговоре; если у клиента не заполнен телефон — добавляется номер звонящего.
- Блок доступен и в карточке тикета, и в выезжающей панели (сворачиваемый аккордеон). Тумблер «Авто-транскрибация звонков» в Настройках → Общие запускает разбор автоматически при поступлении звонка. Подробнее — Расшифровка и суть звонка.
Карточка сделки — полноэкранный дровер
- Сделка открывается одинарным кликом дровером на весь экран: слева «паспорт» с полосой-прогрессом стадий и вкладками Основное / Статистика (все UTM-метки) / Доп. поля / Настроить (+ добавление группы полей), справа — лента с задачами-карточками и композером «Примечание | Задача».
- Задача требует дату и ответственного; результат добавляет тот, кому она поставлена. Плашка «Возможные дубли» с объединением — прямо в дровере.
- Доп. телефон контакта: второй номер сам извлекается из комментария заявки; e-mail в шапке, мини-карта адреса, тикеты Поддержки, история стадий, ответы Salesbot и виджеты точки «Карточка сделки» — всё в дровере. Подробнее — Карточка сделки.
Единый поток клиента
- «Лента клиента» в карточке клиента: обращения, сделки, заметки, задачи и звонки одной хронологией (виджет).
- Импорт лидов из CSV в канбане — через штатный приём с дедупликацией. Подробнее — Импорт CSV.
- Наряды монтажника: вид «Наряды» календаря, «Выполнено» двигает сделку в «Подключено» с телефона. Подробнее — Наряды.
- Дистрибутив: у новых инсталляций с пустой CRM стартовые воронки создаются автоматически; «Быстрый старт» — в документации.
Мастер настройки CRM и навигация
- Мастер настройки (CRM → Настройки → Мастер): 5 шагов — воронки из пресетов, каналы приёма, команда и распределение, AI-бот, виджеты; чеклист «Готовность CRM: N%» из 6 живых проверок.
- Раздел Настроек «Лицензия и расширения» объединил Лицензию, Модули и Виджеты.
- Новая сделка создаётся в выбранной воронке (а не по техническому типу); бейдж карточки — имя воронки.
- Поддержка на виджет-платформе: блоки сайдбара тикета (Биллинг, SLA, Теги, Доп.поля, Учёт времени) включаются из каталога; там же — плитки каналов обращений с тумблером.
Виджеты-плагины
- Каталог с категориями и обложками; четыре точки монтирования: дашборд CRM, карточка сделки, карточка клиента, дашборд биллинга.
- Стандартные виджеты: «Сводка воронки», «Рядом с адресом», «CRM и Поддержка клиента», «Лицензия и модули» (с обложкой тарифа).
- Карточки «Быстрый доступ» стали встроенными виджетами — вкл/выкл из каталога; автообновление пакетов раз в сутки. Подробнее — Виджеты-плагины.
Единая CRM: воронки и пресеты
- Селектор воронок в канбане: открывается любая воронка, колонки/правила/вид карточки — из выбранной; Задачи и Календарь следуют за выбором.
- Галерея «Из шаблона»: 5 готовых воронок провайдера (подключение, B2B, доп.продажи, возврат ушедших, видеонаблюдение) + рецепты с сервера лицензий по тарифу.
- Причины отказа: настраиваемый список, запрос при переносе сделки в закрытый этап.
- Кнопка «Создать клиента» в карточке сделки — данные сделки переходят в биллинг без перевбивания.
- NPS-опрос через 3 дня после подключения; у источников-форм — «Скопировать код вставки» с токеном.
Источники сделок v2
- Источник — сущность: несколько источников на канал, кастомные (лендинги, формы — с токеном), этап входа, теги, распределение ответственного по очереди, кампания по умолчанию.
- Аналитика в карточке: лиды за 7/30 дней и конверсия; у сделок появилась ссылка на источник.
- Мультиорганизация: пары «канал×ящик» — у брендов свои воронки; без модуля орг-поля скрыты.
- Источники приёма заявок (Mango, AI, формы) — плитками в каталоге виджетов; виджет «Лиды по источникам» на дашборде CRM. Подробнее — Источники сделок.
Salesbot v2
- Нативные inline-кнопки во «ВКонтакте» (раньше — только Telegram).
- Новые узлы: «Проверка ответа» (телефон/email/число/regex с переспросом) и «Распределение» (ответственный по очереди или случайно).
Платежи: фискализация на стороне ЮKassa
- Фискальный чек 54-ФЗ в каждом онлайн-платеже — ЮKassa пробивает чек и отправляет клиенту (email → телефон → резервный email).
- Оба протокола:
receiptв REST v3 (с автоповтором без чека при неготовом магазине) иym_merchant_receiptв HTTP-форме. - Настройки ставки НДС и признаков расчёта; покрытие ЛК и мобильного приложения. Подробнее — Фискализация ЮKassa.
CRM-конструктор в стиле amo
- Конструктор воронок: этапы-колонки, правила перехода, 14 действий автоматизации, Salesbot с визуальным редактором и inline-кнопками Telegram.
- Задачи, Списки, доп.поля по воронкам и организациям, источники сделок по каналам. Подробнее — CRM.
СОРМ (03–04.07.2026)
- IP_PLAN дополнен технологическими подсетями (управление NAS, транспорт).
- ABONENT_IDENT: у динамических клиентов IP-поля пустые, идентификатор — LOGIN. Подробнее — правки от 03.07.
Поддержка
- Организация у ящика обязательна: тикеты наследуют организацию ящика, «ничейные» тикеты привязаны к организации по умолчанию (исправлено «тикет не открывается из карточки клиента»).
v3.0.0 — июнь–июль 2026
Большой релиз: нативные модули Поддержка и CRM доведены до полного рабочего цикла, появился внутренний чат с toast-уведомлениями и отчётами по расписанию, клиенты получили аватарки и соцсети, интерфейс — единые паттерны (темы, dirty-save, i-иконки). Карта нового функционала:
- СмИТ Биллинг
· - Поддержка - Умный поиск: телефон/адрес/текст + сниппет - Вложения: политика, сжатие, архив GCS - Категории пер-ящик + «Перезвонить» - SLA-таймер + прошлые обращения - Выезжающая панель: мини-Биллинг + приоритет - Мобильная шапка клиента в тикете - Тикеты внимания + «следующий» - AI авто-триаж, DaData-адреса - Настройки пер-ящик, рейтинги, учёт времени - CRM - Воронка: чипы, период, свёрнутые стадии - Дашборд-карта: фильтры, fullscreen, тултипы - Кампании UTM + QR + CAC - Сайдбар лида для сэйлзов - Наблюдение и Undo - Внутренний чат - Toast: матовое стекло + аватар + «Ответить» - Отчёты по расписанию: авто-период параметров - Клиенты - Аватарки VK/TG + соц-иконки VK/TG/MAX - Импорт контактов: fuzzy-матчинг ФИО - Нормализация телефонов E.164 + аудит - Интерфейс - Тема: Система/Светлая/Тёмная в профиле - Dirty-save кнопка во всех настройках - i-иконки popover + единые карточки - 6 стилей вкладок из профиля - Инфраструктура - BlastRADIUS-фикс Message-Authenticator - Авто-reload FreeRADIUS при новом NAS - GCS managed через шлюз лицензии
Поддержка
- Умный поиск по тикетам: телефон в любом формате, адрес, текст переписки — со сниппетом-подсветкой совпадения в списке.
- Сайдбар тикета: SLA-таймер «Клиент ждёт ответа» (цвет по порогу), виджет «Прошлые обращения» (5 последних тикетов клиента).
- Выезжающая панель тикета: мини-Биллинг (аватар/баланс/тариф/статус/соцсети), быстрая смена приоритета, SLA, прошлые обращения.
- Мобильная свёрнутая sticky-шапка клиента над тредом (аватар/баланс/статус + действия).
- Вложения: политика типов (multiselect) + лимит объёма, сжатие картинок при загрузке, архивация старых в GCS.
- Категории обращений пер-ящик, отметка «Перезвонить», блок «тикеты, требующие внимания», кнопка «следующий тикет».
- Редактирование своего ответа с отметкой о правке; DaData-нормализация адресов; AI авто-триаж старых тикетов.
- Настройки реорганизованы пер-ящик (вкладки, IMAP+SMTP вместе, Telegram-параметры у ящика), рейтинги, учёт времени.
- Подробнее — Модуль «Поддержка».
CRM
- Воронка: компактные колонки, чипы Все/Мои/Наблюдаю/Не назнач., фильтр периода (запоминается), свёрнутые «Подключено»/«Отказ», undo.
- Дашборд-карта: фильтры/полный экран, тултип с аватаркой и ФИО, цвет маркера по стадии; сайдбар лида для сэйлзов.
- Рекламные кампании: UTM-линк-билдер + QR, атрибуция сделок, дашборд CAC.
- Подробнее — CRM — продажи и подключения.
Внутренний чат
- Toast-уведомления о новых личных/групповых сообщениях: матовое стекло, аватар, имя, время, «Ответить»; мобильная адаптация.
- Отчёты по расписанию в чат: параметризованные SQL-отчёты работают — даты авто-заполняются периодом по частоте.
- Подробнее — Внутренний чат.
Клиенты и данные
- Аватарки и соцсети (VK/TG/MAX) в профиле, drawer-сайдбаре, тикетах, карте CRM; импорт контактов с fuzzy-матчингом ФИО (транслитерация, Ё→Е).
- Нормализация телефонов к E.164 (
fix_phone_numbers): 268 номеров, каждый — с записью в аудит.+77XXXXXXXXX— валидный формат, не задвоение. - СОРМ: серия/номер паспорта принимают буквы (иностранные граждане). Смена адреса клиента больше не откатывается.
Интерфейс и инфраструктура
- Переключатель темы Система/Светлая/Тёмная в меню профиля; dirty-save кнопка и i-иконки-popover во всех настройках; 6 стилей вкладок; единые блоки-карточки.
- FreeRADIUS: фикс BlastRADIUS (Message-Authenticator в Access-Accept — новые MikroTik пускают клиентов), авто-перезагрузка при добавлении NAS, часовой logrotate.
- GCS: managed-режим через шлюз сервера лицензий (квоты, постоянные публичные URL), приоритет собственных ключей.
v2.1.0 — 6 июня 2026
Инструменты самодиагностики связи с HelpDesk в настройках интеграции и восстановление вкладки «Маркетинг» в карточке клиента.
Диагностика HelpDesk в настройках
- «Проверить БД» с подсказкой по доступу — при ошибке подключения к базе HelpDesk (доступ закрыт для IP сервера биллинга) инструмент показывает понятное объяснение и готовую команду для администратора с уже подставленным исходящим IP сервера. Это частая поломка после переезда сервера биллинга на новый адрес.
- Приоритет поиска клиента уточнён — реальный email теперь предпочтительнее телефона (телефон часто общий у нескольких клиентов), а среди совпадений по телефону выбирается карточка с настоящим email, а не служебная заглушка. Устраняет показ «чужой» пустой карточки без тикетов.
Вкладка «Маркетинг»
- Восстановлено открытие вкладки «Маркетинг» в карточке клиента и её адрес приведён к виду
/admin/Abonents/<id>/marketing/(раньше вела на адрес другой вкладки). Вкладка получила постоянный идентификатор вместо «плавающего», из-за которого периодически переставала открываться.
v2.1.0 — 18 мая 2026
Доработки логики разблокировок (фин-блок, b_sys, b_own), 3 read-only audit-команды, backup-модуль self-contained, синхронизация с EBS suspendedperiod, UI настроек профиля клиента (новая вкладка с 33 настройками в 2-колоночном layout).
Логика разблокировки и фин-блоки
- auto-unblock b_negbal в _credit_abonent — после webhook-оплаты (YooKassa/W1/Generic) фин-блокировка снимается автоматически. Заменяет ручную проводку оператора.
- signals.sync_tarif_on_create для NULL→X — через sentinel-маркер триггерит копирование шаблона UsersUsluga при первом назначении тарифа. Раньше шаблон не подтягивался — оператор менял тариф на другой и обратно.
- auto-unblock b_sys «не назначен тариф» — при появлении tarif_id блок снимается сразу, без отдельного нажатия «снять блок».
- auto-unblock b_negbal в promise_sync + EBS reconcile — симметрично 868 для всех путей зачисления баланса (webhook + EBS-pull).
- Celery beat safety net —
auto-unblock-bnegbal-with-positiveкаждые 5 мин ловит любые остаточные случаи + Telegram-алёрт если >5 за тик. - Кнопка 💰 «Снять фин-блок» — в шапке карточки клиента при активном b_negbal. Url
/admin/abonents/force_unblock_negbal/<id>/. Баланс не меняется. - sync_ebs_suspendedperiod + beat + кнопка 🏖 — синхронизация добровольных блокировок с EBS. Снимает зомби-блоки из миграционного импорта, когда отпуск в EBS закрыт. Кнопка в шапке для ручного снятия.
Аудит и safety net
- 3 read-only audit-команды —
audit_block_consistency(4 проверки блокировок+тарифов),audit_duplicates(FinOps/MsgStack/UsersUsluga),audit_billing_consistency(сверка AdminAccounts vs SUM(FinOps)). - Фикс дублей FinOps в promise_sync — broad-dedup в окне ±60s по abonent+op_type+summa.
- Ежедневный audit_block_consistency_daily — Celery beat в 06:00 UTC, Telegram-алёрт при расхождениях.
- disable_abonents_without_tariff — массовая блокировка клиентов без тарифа.
Backup-модуль
_make_docker_backupтеперь включает Dockerfile, docker-compose.prod.yml, .env, requirements.txt, manage.py, gunicorn.conf.py и папкуdocker/— полный self-contained пакет для разворачивания на пустом VPS.- Bind-mount
/opt/smit-billing/app:/host_app:roв web и celery контейнерах. restore.shпереписан: принимаетTARGET_DIR, sanity-check наdatabase.dump+manage.py, подтверждение перед перезаписом, корректно поднимает БД, восстанавливает дамп, билдит и запускает контейнеры.
UI — настройки и виджеты
- Новая вкладка
/admin/settings/system/?tab=abonent_profile— 33 настройки в 9 секциях: Quick Cards, видимость секций карточки, колонки списка, AJAX/refresh, дефолты карточки, drag&drop вкладок + 4 стиля, баннеры уведомлений, прочее. - 2-колоночный layout для вкладки «Профиль» — CSS
column-count:2на ≥1280px, секции укладываются masonry-style плотно. На узких — 1 колонка автоматически. - Переименование вкладок: «Производительность» → «Скорость», «Сессии и RADIUS» → «RADIUS».
- Виджет «Клиенты NAS» — общий онлайн — на дашборде в шапке виджета теперь сумма активных RADIUS-сессий по всем NAS.
Соблюдённые правила
- EBS — источник правды по балансам. Поле
ostatokне правится никакими скриптами или командами. - Все блокировки/разблокировки — через
AbonentsBlock(наша таблица, EBS её не трогает). - Аудит на каждое действие через
billing.services.audit_log.write_audit. - Toggle через VpnConst для отключения автоматики при инцидентах:
EBS_PROMISE_SYNC_ENABLED,AUTO_UNBLOCK_BNEGBAL_ENABLED,EBS_SUSPEND_SYNC_ENABLED.
GitHub Release: v2.1.0
v2.0.0 — 15 мая 2026
Крупный рестайлинг карточки клиента и единая дизайн-система компонентов. Версия повышена до 2.0 — пользовательский интерфейс существенно перестроен.
Карточка клиента — рестайлинг
- Hero-блок тарифа — крупный блок с иконкой-плиткой, названием тарифа, ценой/мес и кнопкой «Изменить тариф». Заменил скучную строку поля.
- Объединение «Договор и контакты» — subgroup 26 «Договор» + 61 «Контактная информация» в единый блок. Юр-поля (Отправлять счёт / Формировать акт / Дата выставления акта) показываются динамически по чекбоксу «Юр. лицо».
- Скрыто: ФИО-заголовок в форме (дублировал шапку), поле «Точка подключения» (есть отдельная вкладка), «Группа» (parent), «Скидка %» (рекомендуется лояльность), весь блок «Особые настройки» (17 технических полей).
- Подзаголовки в «Смена тарифа / Блокировки» — три смысловые группы: Запланированная смена / Добровольная блокировка / Административная блокировка.
- Маски и валидация email/телефон — jQuery MaskedInput для
+7 (999) 999-99-99, авто-нормализация существующих значений, серверная валидация вAbonents.clean(). - Подсветка пустых полей — незаполненные обязательные поля в «Договор и контакты» получают красную рамку (.smit-empty).
- Интерактив «Юр. лицо» — при включении на физ-тарифе предлагает выбрать Business-тариф через модалку смены, серверная валидация требует
Tarif.is_business=true.
Ревизия бейджей шапки и плашек
- Шапка карточки: убраны дубли (тариф, статус) — оставлена только идентификация (№ договора, ФИО, баланс). На десктопе бейдж тарифа справа от ФИО.
- Карточка «Биллинг» в плашке диагностики связи удалена — дублировала тариф+цену.
- Плашка «Проблема со связью» не показывается заблокированным клиентам.
- Понятные тексты в проверке «Адрес»: «Адрес в договоре и адрес монтажа совпадают» вместо неоднозначного «Адрес клиента совпадает с точкой подключения».
- Чипы шапки сведены к единому языку: solid пастель, единая высота 24px, без градиентов.
Единая дизайн-система компонентов
- Кнопки — 14+ Bootstrap-вариантов
.btn-*сведены к 3 палитрам: Primary (зелёный fill), Primary Outline (зелёный outline → fill), Secondary (серый outline), Destructive (красный/янтарный). Кнопки на красных banner'ах — белые с прозрачным фоном. - Модалки — sticky header/footer scroll-shadows, лёгкая анимация открытия (scale 0.96 + translateY), единый стиль контейнера.
- Чекбоксы и тогглы — 18×18 со скруглением 5px, SVG-галочка inline, фирменный зелёный fill; свитчи 38×22 pill с белым шариком; toggle-group в pill-контейнере с activated state.
appearance:none+.form-checkpadding под новый размер. - Поля даты — нативные
input[type=date]со скруглением + jQuery UI datepicker перекрашен в фирменный#43b77a(header, today, selected, hover, кнопки) + тёмная тема. - Select2 — refined-look: уменьшенные скругления, тонкий зелёный скроллбар, мягкие тени, фирменный focus-ring.
Прочие фиксы
- CRIT:
_block_negative_balance()не блокировал должников после первых ~200 по pk — фикс черезannotate(has_negbal=Exists(...)). - Quick Add: убран чекбокс «Отпр. договор», «Назначить NAS и IP сразу» активен по умолчанию.
- i-иконки документации — на legend'ах hero-блоков ссылки на соответствующие якоря в docs.billing.smit34.ru.
GitHub: SmitBilling/commits · ~24 коммита builds 838–861.
v1.6.0 — 2 мая 2026
55c5110 · 7d26932 · 9556537 · 4fc97cdСервер: адрес вашей установки
Период: → 428 (8 билдов, 1 день)
Sprint A: справочник адресов и точек подключения
- KPI-бейджи и фильтры-чипы на странице
/admin/dictionary/Homes/объединены в одну строку: «Все», «С клиентами», «С точками», «Пустые», «С датой подкл.». Каждый чип содержит свой счётчик. - Кликабельные колонки «Абон.» и «Точки» в таблице адресов: переход в глобальный поиск клиентов по этому адресу или в справочник точек.
- Удалены 7 «мусорных» адресов на рабочем сервере: «Дом у Озера», «Планета Венера», «Среди Озера» и др. — без клиентов и точек, без улицы и дома.
- CSV-экспорт для точек подключения с учётом фильтров.
- A11y:
aria-sortна сортируемых заголовках,aria-pressedна чипах,aria-liveна счётчике, шорткатCtrl+Kдля фокуса в поиск.
Автоподстановка шлюза IpPull
Проблема: после миграции из прежней системы у IP-пулов поле GATEWAY оказывается пустым, хотя NETWORK_ADDRESS и MASK заполнены. Решение в трёх уровнях:
- Уровень 1: подсказка-предложение в модалке IP-пула («🪄 предложение: первый адрес подсети») + кнопка Подставить.
- Уровень 2: автоподстановка при сохранении, если поле пустое.
- Уровень 3: bulk-кнопка 🪄 Авто-шлюз N в toolbar — модалка предпросмотра + одно нажатие применяет ко всем кандидатам.
Защита от граничных случаев: /31, /32, broadcast, network_address, адреса вне подсети. Поддержка IPv4 и IPv6. Все обновления пишутся в AuditOperations.
Результат: шлюзы проставляются всем пулам, включая сложные случаи адрес/25 → .129. Подробнее: 11.5 → Автоподстановка шлюза.
Новые колонки точек подключения
Таблица /admin/dictionary/conn_points_list/ переработана:
- Убран дубль: раньше колонки «Адрес (строка)» и «Дом» содержали один и тот же текст. Объединены в одну «Адрес» с приоритетом home_name.
- Колонка «Клиент» с зелёной иконкой + ФИО + №договора, ссылка на профиль (86% покрытие).
- Колонка «Учётка» с логином Users в monospace, ссылка на учётку (86% покрытие).
- Колонка «Кв.» с бейджем (32% покрытие; иногда используется для инфраструктурных пометок «winbox 62400 / ssh 3311»).
- Иконка-комментарий 💬 рядом с именем точки заменила отдельную колонку «Комментарий».
Фирменный зелёный вместо синего
Убраны последние следы Bootstrap-синего #0d6efd / #0c63e4 в шаблонах списков:
ip_pull_list.html: ip-pool-fallback-badge, ip-nas-bind, kpi-info, row-fallback border.vlan_pull_list.html: vp-nas-bind, kpi-info color.homes_list.html: hm-count-cp (счётчик «Точек подкл.»).
Теперь все активные элементы используют брендовый #43b77a с фоном #e8f5e9 и hover #c8e6c9.
Модальное редактирование адресов
Карандаш на странице адресов теперь открывает модальное окно с полным набором из 31 поля модели Homes (раньше — переход на отдельную страницу). 5 вкладок:
- Основные — Название, Краткое, Полное название, Родительский адрес, Тип объекта, Тип наименования
- Адрес — 14 полей: Страна, Регион, Район, Город, Нас.пункт, Улица, Номер, Литера + типы для каждого
- Гео и связи — Координаты, IP-пул, Оператор, УК, Управдом, Подъезды, Квартиры, Дата подключения
- ФИАС — КЛАДР ID, статус синхронизации, Полный адрес ФИАС, ОКАТО
- Служебные — ID при импорте, статистика связей, кнопка удаления
Backend защищён от удаления адресов с активными связями: возвращает HTTP 400 со списком («5 клиентов, 3 точек подключения»). Иконка в шапке модалки даёт переход к старой полной форме.
Tooltips к подписям полей
К каждой подписи поля в модалке редактирования адреса добавлена голубая i-иконка . На наведение/клик/focus показывается всплывающая подсказка с пояснением: формат, источник данных, область применения.
35 подсказок покрывают все 5 вкладок. Триггеры работают одинаково на десктопе (наведение), тач-устройствах (тап) и при клавиатурной навигации.
v1.6.0 — 27 апреля 2026
RADIUS / Сессии
- Сброс RADIUS-сессий — кнопка ⏻ в шапке карточки клиента теперь работает: помимо CoA Disconnect на NAS принудительно приводит БД в офлайн (
Users.LOGGED=false,USERS_RADIUSAUTH.LOGGED=0,RADIUS_SESSIONS.END_TIME=now()сEND_REASON='Admin reset'). - Recovery missed Accounting-Start — если NAS шлёт только Interim-Update (без Start),
_radius_sessions_updateтеперь закрывает осиротевшие открытые сессии и создаёт новую запись. - Монитор сессий — бейдж «Online» теперь только при совпадении
ACCT_SESSION_IDмеждуRADIUS_SESSIONSиUSERS_RADIUSAUTH; сортировка поUPDATE_TIME DESC. - cleanup_stale_sessions (Celery beat ежечасно) — закрывает зависшие
RADIUS_SESSIONSсUPDATE_TIME < now()-60min.
Адреса / ФИАС / DaData
- Создание адреса через ФИАС/DaData в Quick Add модалке клиента — иконка ⊕ рядом с полем Адрес, подсказки в реальном времени.
- Та же иконка ⊕ добавлена в карточку клиента (Информация → Контактная информация → Адрес).
- Список адресов — модалка редактирования с подсказками FIAS, переименование «Home type» → «Тип объекта», skрытие пустых subsection-header.
- DaData admin UI — настройка ключей в SystemSettings.
Юр.лица / СОРМ
Tarif.is_business— флаг «Для юр.лиц», в Quick Add фильтрует тарифы по флажку «Юр. лицо».- Реквизиты юр.лица — 12 атрибутов (ИНН, КПП, ОГРН, юр./физ./почт. адреса, р/с, Банк, БИК, к/с, В лице, Директор) автогенерятся при первом открытии вкладки.
- СОРМ для юр.лиц — отдельная карточка «Реквизиты юр.лица» с 12 полями + бейдж «Юр.лицо» в шапке СОРМ.
- SORM ABONENT_LEGAL — новый отчёт для категории Abonents.company.
- Поддержка кириллической «с» в р/с и к/с.
UX Audit Sprint 1+2-3
- Sprint 1:
focus-visible,prefers-reduced-motion, color independence (иконки направления к суммам), bulk-confirm modal с превью имён и подтверждением количества. - Sprint 2-3: bulk undo (snapshot полей в cache 1ч), единый поиск navbar+страница, Ctrl+K hotkey, унификация «Баланс»/«Остаток» → «Баланс», auto-refresh дашборда (30с/60с/5мин), перестановка иерархии дашборда.
- Health Score: 72 → ~88/100 (Excellent).
Тарифы / Услуги
- Список тарифов — полный редизайн (BS5, custom toolbar, expanded views), модалка редактирования с 4 вкладками.
- Список услуг — toolbar с фильтрами, bulk actions, types modal, audit, shaper.
- Modal editor для Usluga — добавление/редактирование без перехода на полную форму.
- Бонусы — редактирование
enable_dateв модалке, бейдж «с DD.MM.YYYY» для будущей активации.
Дашборд (build ~250-260)
- ApexCharts + KPI-карточки — revenue, ARPU, новые/churn с дельтами за период.
- Heatmap распределения активностей по часам/дням.
- Top tariffs bar chart.
FreeRADIUS / NAS
- CoA Disconnect after unblock — после снятия блокировки NAS получает Disconnect-Request, чтобы клиент переавторизовался без таймаута сессии.
- Виртуальный NAS
127.0.0.1(наш FreeRADIUS) пропускается вdisconnect_user— сразу идёт fallback поRADIUS_SESSIONS. - Fallback CoA: NAS_IP теперь берётся из
RADIUS_SESSIONS(там колонка реально существует).
Прочее
- graphify wiki — knowledge graph 7407 нод, 36122 рёбер, 636 communities, доступен на
docs.billing.smit34.ru/graphify/. - AbonentWizard UI удалён — кнопка «Мастер» убрана, класс остался для helpdesk/CP.
- Десятки fix-ов: операции клиента при
ostatok=None, открытие dev_reports из Telegram-ссылок, многострочные{# #}Django-комменты, conn-points modal backdrop и др.
v1.0.0 — 29 марта 2026
Отчёт по задачам: 25 задач из Telegram-чата
Детальный лог сессии: session_29mart.html
NAS Развёртывание (OSS)
Содержание раздела
Вкладка «Развёртывание» в карточке NAS позволяет управлять конфигурацией MikroTik и другого оборудования. Полностью воспроизводит функционал Carbon Billing 4.
Общая схема работы
1. Инициализация → rtsh cfg init <scheme> → создаёт структуру каталогов
2. Заполнение данных → rtsh cfg fill <ip> → заполняет .ini из биллинга
3. Скачать текущую → rtsh cfg download → загружает конфиг с оборудования
4. Генерация новой → rtsh cfg make → генерирует .cfg из .ini + .tmplt
5. Загрузка → rtsh cfg upload → загружает конфигурацию на NAS
6. Сохранение → rtsh cfg save → коммит в git-историю
Под-вкладки
Управление
5 шагов развёртывания + дополнительные команды (status, diff, log, acl upload).
Настройка (INI файлы)
Редактирование .ini файлов конфигурации: main.ini, firewall.ini, netflow.ini, pppoe.ini. Ссылка «Отобразить доступные параметры» показывает все поддерживаемые ключи.
Шаблоны (.tmplt)
Редактирование Jinja2-шаблонов для генерации конфигурации: firewall_address_list.cfg.tmplt, firewall_filter.cfg.tmplt, firewall_nat.cfg.tmplt, netflow.cfg.tmplt, pppoe.cfg.tmplt.
Upload cfg
Файлы сгенерированной конфигурации для загрузки на NAS. Появляются после rtsh cfg make.
Download cfg
Файлы текущей конфигурации, скачанные с оборудования через rtsh cfg download. Только для просмотра.
Модальное окно вывода команд
При нажатии на любую кнопку (rtsh cfg init, fill, make и др.) открывается модальное окно с выводом команды в реальном времени. Кнопки «Скачать вывод» и «Закрыть».
OSS утилиты
Утилиты для управления конфигурациями NAS-устройств, перенесённые из Carbon Billing 4.
rtsh — главная утилита
Расположение: /usr/local/bin/rtsh (bash-скрипт).
rtsh cfg init <scheme_name> — инициализировать каталог управления
rtsh cfg fill <ip> — заполнить .ini данными из биллинга
rtsh cfg make — сгенерировать конфигурацию из .ini + .tmplt
rtsh cfg upload — загрузить конфигурацию в оборудование
rtsh cfg download — скачать конфигурацию с оборудования в ./cur/
rtsh cfg save <comment> — сохранить в git-историю
rtsh cfg diff [ref] — показать изменения
rtsh cfg status — текущее состояние
rtsh cfg log — журнал изменений
rtsh acl upload — загрузить ACL-листы на оборудование
rtsh list scheme — список доступных схем
OSS команды
18 скриптов в /usr/local/bin/oss/:
| Команда | Описание |
|---|---|
| cfg_init | Инициализация каталога (создаёт структуру из схемы) |
| cfg_fill | Заполнение .ini данными из биллинга (IP, пароли, интерфейсы) |
| cfg_make | Генерация .cfg из .ini + .tmplt (Jinja2) |
| cfg_upload | Загрузка конфигурации на NAS (SSH/Telnet) |
| cfg_download | Скачивание текущей конфигурации с NAS |
| cfg_save | Git commit (сохранение в историю) |
| cfg_diff | Git diff (показать изменения) |
| cfg_status | Git status |
| cfg_log | Git log |
| cfg_render | Рендеринг одного шаблона |
| acl_fill | Генерация ACL-листов |
| list | Список NAS/схем |
| session | Управление сессиями (add/redirect) |
| daemon | Фоновый процесс |
| ini_generator.py | Генерация .ini по шаблону |
| cfgparse.py | Парсер конфигураций |
OSS схемы (44 шт.)
Расположение: /usr/local/share/oss/. Каждая схема содержит набор .ini шаблонов, .tmplt шаблонов и скриптов для конкретного типа оборудования.
| Схема | Описание |
|---|---|
| mikrotik_simple_v1 | Рекомендуемая схема для MikroTik 6 (PPPoE/VPN) |
| mikrotik6_pcq | MikroTik 6 с PCQ (для знающих) |
| mikrotik5_pcq | MikroTik 5 с PCQ |
| mikrotik_simple_ipv6_dual_stack_v1 | MikroTik 6 + IPv6 dual stack |
| mikrotik_hotspot_simple | Hotspot на MikroTik |
| cisco_isg | Cisco ISG (IPoE/PPPoE) |
| cisco_bng_pppoe | Cisco BNG PPPoE |
| redback | Redback IPoE/PPPoE |
| asterisk_v1 | Asterisk VoIP |
| eltex | Eltex IPTV |
| flussonic | Flussonic Watcher |
| ... и 33 другие схемы | |
Структура каталогов NAS
/var/oss/<nas_name>/
├── main.ini ← основной конфиг (IP, секрет, порты)
├── firewall.ini ← настройки файрвола
├── netflow.ini ← настройки NetFlow
├── pppoe.ini ← настройки PPPoE
├── tmplt/ ← Jinja2 шаблоны
│ ├── firewall_address_list.cfg.tmplt
│ ├── firewall_filter.cfg.tmplt
│ ├── firewall_nat.cfg.tmplt
│ ├── netflow.cfg.tmplt
│ └── pppoe.cfg.tmplt
├── upload/ ← сгенерированные .cfg (после cfg make)
├── cur/ ← текущий конфиг с NAS (после cfg download)
├── bin/ ← скрипты схемы
├── ubin/ ← пользовательские скрипты
├── utmplt/ ← пользовательские шаблоны
├── uinit.d/ ← пользовательские init-скрипты
└── .git/ ← история изменений
Docker конфигурация
- Dockerfile —
COPY oss_tools/(rtsh, oss_bin, oss_share) +apt install git rsync - Volume
oss_data:/var/oss— данные сохраняются между перезапусками - /run_script/ — endpoint для выполнения команд (POST → start, GET → stream stdout)
- Gunicorn —
WORKERS=1, THREADS=8(для корректной работы /run_script/)
Аудит форм — Select2 и AJAX
Все FK-поля всех форм биллинга проверены и оптимизированы:
- Select2 — для справочников до 100 записей (NAS, типы авторизации, IP-пулы)
- AJAX Select2 — для больших справочников (Homes: 4270 записей — поиск по адресу)
- Popup-select — для таблиц > 500 записей (клиенты, пользователи)
- HEAVY_FK_FIELDS — ограничение queryset для таблиц > 1000 записей
Исправления из Telegram-чата (25 задач)
Полный отчёт: chat_tasks_29mart.html
| # | Задача | Статус |
|---|---|---|
| 1 | Шейпер — скорости тарифных услуг | ✅ |
| 2 | Поиск по адресам | ✅ |
| 3-4 | СОРМ — верстка + 13 отчётов + CSV | ✅ |
| 5 | Актуализация балансов | ✅ |
| 6-10 | Ошибки 500, пароли, NAS развёртывание, RADIUS | ✅ |
| 11 | Users — сохранение IP/NAS (блокер RADIUS) | ✅ |
| 12-25 | Списание, обещ. платеж, popup, операции, блок, комментарии, юр.лицо, тема, учётки, CSV, цены | ✅ |