Архив изменений: версии 1.x и 2.x
Содержание раздела
- 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
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.
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 и др.