Нарушения

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

Где найти
«Инструменты» (значок чемоданчика справа вверху) → Эксплуатация → «Нарушения». То же — палитрой команд: Ctrl+K и начните набирать название.
Права
доступно всем, кто вошёл.
Короткое видео: как это выглядит в системе
Функция показана в сквозном сценарии:Авария: от нарушения до наряда
Читаю как

Журнал общий с десктопным ТГИД: это одна и та же таблица базы города. Запись, созданная в вебе, сразу видна в десктопе, и наоборот.

Возможности

  • Поиск по номеру записи, адресу, описанию и номеру акта; фильтры по источнику, состоянию, категории и датам; счётчики по состояниям.
  • Карточка нарушения: создать, изменить, удалить; документы записи (акты, фото); «На карте» — перейти к месту.
  • «Похожие аварии рядом» для открытой записи и их уточнение с ИИ.
  • Печать журнала по форме 11 (HTML для печати по текущему поиску) и «Карта нарушения» — документ Word с картой места и данными записи.
  • «Места повторных отказов» — скопления порывов, свищей и утечек за 5 лет: где отказы повторяются и была ли там перекладка.
  • «Привязка нарушений к участкам» — записи без участка получают ближайшую трубу (не дальше 20 м) одной кнопкой, с отменой.

Как это работает

Где хранятся данные. Каждое нарушение — строка таблицы defect базы города. Справочники полей — таблицы десктопа: defecttypes (источник), statedefect (состояние), remontcat (категория), vid_narusheniya (вид нарушения), brigades, subdivisions, ulitsy. Документы записи (акты, фото) — отдельная таблица документов журнала. Связь с сетью — номер трубопровода (lineid, участок linesobj) и точка на карте (shape).

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

Создание и правка. Карточка разбита на блоки, как в десктопе: обнаружение и привязка к трубопроводу, повреждение и состояние конструкций, ликвидация и ремонт, документы. При сохранении сервер проверяет права и тип каждого поля. Затем пишет запись и строку журнала изменений (audit_log) одной транзакцией: либо сохранено всё, либо ничего. Изменённые, но не сохранённые поля помечены точкой. Черновик карточки хранится в браузере до следующего открытия этой записи.

Похожие аварии рядом. Для открытой записи ищутся похожие повреждения в радиусе (по умолчанию 1000 м). Сходство — взвешенная сумма признаков, разобранных из текста записи (название, описание, отчёт, примечание):

Признак Вес Как считается
Вид повреждения 0,35 порыв, свищ, утечка, коррозия, изоляция, арматура, камера, работы; порыв, свищ и утечка — одно семейство «потеря воды» (частичное совпадение)
Труба 0,15 Т1 (подача), Т2 (обратка) или обе
Условный диаметр 0,15 «Ду159», «159 мм»; близкий Ду — частичное совпадение
Расстояние 0,20 exp(−d / 300 м): 0 м → 1, 300 м → 0,37, 1 км → 0,04
Общие слова 0,15 полнотекстовый поиск PostgreSQL с русским стеммингом

Кнопка «Уточнить с ИИ» отдаёт модели Claude описания найденных записей без имён и телефонов. Модель пересортировывает список по смыслу и объясняет сходство (см. Похожие аварии).

Места повторных отказов — кластеры записей семейства «потеря воды» за 5 лет (DBSCAN по месту, радиус 30 м). В кластере не меньше 3 записей, и они в разные дни. Для каждого места показан ближайший участок не дальше 20 м: его Ду, год прокладки и была ли перекладка после отказов.

Что нужно для работы

  • Данные: таблица defect и справочники десктопа в базе города. Без точки на карте запись не показывается на карте, а «Похожие аварии» ищут только по признакам текста.
  • Права: смотреть может любой вошедший. Создавать, править и удалять — право «Журналы»: оно есть у ролей «Редактор» и «Администратор», остальным его выдают отдельно. Для «Уточнить с ИИ» нужно право «Расчёты».
  • Сервер: запись журналов включена (MUTATIONS_ENABLED=true), иначе кнопок «Создать» и «Редактировать» нет. Для ИИ — AI_ENABLED=true и ключ ANTHROPIC_API_KEY.

Шаги

  1. Откройте «Инструменты» и наберите в поиске «Нарушения» — пункт выделен рамкой.

    Пункт «Нарушения» в панели «Инструменты»

  2. Нажмите пункт — откроется окно.

    Окно «Нарушения»

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

    Нарушения: шаг 3

  4. Нажмите «Сохранить»: появится сообщение «запись создана», карточка откроется на просмотр, запись — в журнале. Здесь же: «На карте», «Редактировать», документы, похожие аварии рядом; корзина в заголовке удаляет запись.

    Нарушения: шаг 4

Примеры

Похожие аварии. На копии Астаны журнал содержит 1785 записей: 1666 — «После ремонта», 78 — «Нарушение», 32 — «Ремонт». Для записи «Порыв во время опрессовки … по Т-1 Ду159» в радиусе 1 км нашлось 129 кандидатов. Первым идёт «Порыв на Т1 Ду159…» в 415 м:

  • вид, труба и Ду совпали — 0,35 + 0,15 + 0,15;
  • расстояние: exp(−415/300) = 0,25 → 0,2 × 0,25 = 0,05;
  • общие слова: 0,67 → 0,15 × 0,67 = 0,10;
  • итог 0,80, причины в списке: «тот же вид — порыв, Т1, Ду159, 415 м, общие слова».

Запись в 132 м оказалась ниже (0,68): Ду в её тексте не указан, и этот признак дал 0.

Повторные отказы. На той же копии найдено 2 места. В одном — 5 отказов (4 порыва и утечка) с июля 2023 по июль 2024 года. Ближайший участок — Ду150, проложен в июле 2025, то есть после отказов: место отмечено как переложенное.

Если не получается

  • «Сохранить» не срабатывает — не заполнена дата обнаружения.
  • Кнопки «Создать» нет — нужна роль с правом правки журналов.
  • Карточку закрыли во время правки — черновик сохраняется до следующего открытия этой записи.
  • Нет «Мест повторных отказов» — в журнале меньше 3 отказов в одном месте за 5 лет или у записей нет точки на карте.
  • «Привязка нарушений к участкам» показывает «далеко» — ближайшая труба дальше 20 м. Проверьте точку записи или укажите трубопровод вручную.

Для администратора

  • Запись журналов: MUTATIONS_ENABLED=true у API. Право «Журналы» (journals) выдаётся в матрице прав (permissions.py, «Личный кабинет» → «Пользователи»). При входе через роли PostgreSQL (AUTH_BACKEND=pg) окончательно права проверяет база (sql/pg_auth/03_grants.sql).
  • ИИ: AI_ENABLED=true, ANTHROPIC_API_KEY, модель пересортировки — AI_RERANK_MODEL. Один запрос «Уточнить с ИИ» — около 6 секунд и 1,5 цента.
  • Каждая запись, правка и удаление попадают в audit_log с автором. Их видно в «Истории правок» и в живой ленте «Кто на карте».

Для разработчика

  • Чтение: GET /api/defects (поиск, фильтры, страницы, state_counts), GET /api/defects/{id}, GET /api/defects/lookups (справочники), GET /api/defects/geojson (точки для карты) — routers/operations.py, database/defects.py.
  • Запись: POST|PATCH|DELETE /api/v1/journals/defects[/{id}], документы …/{id}/documents. Описание полей журнала (имя в API → колонка таблицы, тип, справочник): GET /api/v1/journals/defects/schema, в коде — database/journal_specs.py (DEFECTS).
  • Похожие и повторные отказы: GET /api/v1/defects/{id}/similar?radius_m=, POST /api/v1/defects/similar (по тексту и точке), GET /api/v1/defects/hotspots. Привязка к участкам: GET|POST /api/v1/defects/line-binding, POST …/line-binding/undo. Код — routers/defect_similarity.py, database/defect_similarity.py (веса WEIGHTS, словарь видов KINDS), database/defect_binding.py.
  • Печать: форма 11 — GET /api/reports/html/f11_defect?search=, карта нарушения — GET /reports/word/defect/{id}.
  • Веб: components/DefectJournalDialog.vue (на общем JournalShell.vue), SimilarDefectsPanel.vue, FailureHotspotsDialog.vue, DefectLineBindingDialog.vue.
  • Тесты API: tests/test_journals_write.py, tests/test_journal_mutations_qa.py, tests/test_defect_similarity.py, tests/test_defect_binding.py, tests/test_ai_defect_rerank.py; e2e — e2e/functions/operations.spec.ts.
Хотите увидеть эту функцию на своих данных?Покажем ТГИД на демонстрации и ответим на вопросы инженеров.
Запросить демо