Нарушения
Журнал нарушений — дефекты и повреждения сети: где, когда, что найдено, состояние, ремонт.
Журнал общий с десктопным ТГИД: это одна и та же таблица базы города. Запись, созданная в вебе, сразу видна в десктопе, и наоборот.
Возможности
- Поиск по номеру записи, адресу, описанию и номеру акта; фильтры по источнику, состоянию, категории и датам; счётчики по состояниям.
- Карточка нарушения: создать, изменить, удалить; документы записи (акты, фото); «На карте» — перейти к месту.
- «Похожие аварии рядом» для открытой записи и их уточнение с ИИ.
- Печать журнала по форме 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.
Шаги
Откройте «Инструменты» и наберите в поиске «Нарушения» — пункт выделен рамкой.

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

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

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

Примеры
Похожие аварии. На копии Астаны журнал содержит 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.
