惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
C
Check Point Blog
GbyAI
GbyAI
Jina AI
Jina AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 司徒正美
Hacker News - Newest:
Hacker News - Newest: "LLM"
V2EX - 技术
V2EX - 技术
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
F
Full Disclosure
S
Secure Thoughts
WordPress大学
WordPress大学
博客园 - Franky
N
News and Events Feed by Topic
雷峰网
雷峰网
www.infosecurity-magazine.com
www.infosecurity-magazine.com
H
Hacker News: Front Page
N
Netflix TechBlog - Medium
Forbes - Security
Forbes - Security
TaoSecurity Blog
TaoSecurity Blog
C
CERT Recently Published Vulnerability Notes
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
MyScale Blog
MyScale Blog
Security Latest
Security Latest
Attack and Defense Labs
Attack and Defense Labs
The Register - Security
The Register - Security
Spread Privacy
Spread Privacy
H
Help Net Security
宝玉的分享
宝玉的分享
L
LangChain Blog
MongoDB | Blog
MongoDB | Blog
I
Intezer
Schneier on Security
Schneier on Security
Latest news
Latest news
Y
Y Combinator Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
I
InfoQ
A
About on SuperTechFans
T
Tor Project blog
Microsoft Security Blog
Microsoft Security Blog
M
MIT News - Artificial intelligence
Google DeepMind News
Google DeepMind News
Microsoft Azure Blog
Microsoft Azure Blog
T
Threat Research - Cisco Blogs
S
Schneier on Security
Cisco Talos Blog
Cisco Talos Blog
H
Heimdal Security Blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
От XML-отчёта до 3D-обрезки в Revit: как я сделал сервис для управления BIM-коллизиями
Aliklisss · 2026-05-11 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение12 мин

Охват и читатели427

Кейс

Всем привет!

Нечасто вижу на Хабре статьи про BIM-технологии, особенно в формате реального инженерного сервиса вокруг BIM-процессов. Поэтому решил рассказать про внутренний инструмент, который вырос из вполне бытовой боли: коллизии в проектах есть, отчёты по ним есть, люди их даже исправляют, но управлять всем этим как нормальным процессом неожиданно сложно.

Сразу зафиксирую контекст: речь пойдёт про стек Autodesk, а именно Revit и Navisworks. Да, у многих к Autodesk накопилось много вопросов, особенно в последние годы, но это отдельная дискуссия. В реальности эти продукты всё ещё занимают сильные позиции на рынке проектирования, и значительная часть BIM-процессов в компаниях продолжает крутиться именно вокруг них.

У меня за плечами около 6 лет в BIM: от небольшой проектной компании примерно на 20 человек до крупного девелопера. И почти везде я видел одну и ту же картину: Navisworks исправно находит коллизии, BIM-специалист выгружает отчёты, инженеры что-то правят, руководители периодически спрашивают «ну как там?», а между всем этим лежит смесь из HTML-отчётов, Excel-файлов, сообщений в мессенджерах, ручного копирования ID элементов и памяти конкретного BIM-специалиста.

Самое неприятное, что проблема не в одном конкретном инструменте. Navisworks хорошо делает проверки, а Revit хорошо подходит для исправления модели. Но между «коллизия найдена» и «коллизия управляемо доведена до исправления или допуска» часто не хватает отдельного слоя: с историей, аналитикой, ответственными, комментариями и быстрым переходом к месту проблемы в модели.

Так у меня постепенно появился web-сервис Clash Analytics - внутренний инструмент для работы с коллизиями из Navisworks: импорт XML-отчётов, аналитика по проектам, сравнение отчётов, работа со статусами и комментариями, назначение коллизий отделам и локальный Revit-плагин, который позволяет из браузера открыть проблемное место прямо в модели.

Сначала опишу боли, из которых всё выросло, а потом покажу, какие решения получились и какие технические нюансы пришлось учесть.


Проблема 1. Аналитика

В ролях: руководитель проекта, далее РП, и BIM-специалист по объекту, далее BIM.

РП: Ало,BIM, слушай, что у нас по проекту X? Сколько там коллизий?
BIM: Привет, я проверял на неделе, точно не помню, где-то тысяч 5.
РП: А точно сколько?
BIM: Подожди, сейчас Navisworks открою. Так. Если быть точным, 4967.
РП: А что так много, там вообще правят? Сколько было на той неделе?
BIM: Это надо отчёты выгруженные смотреть, сейчас гляну. Блин, их тут много, так не скажу, нужно суммировать сидеть.
РП: Ладно, а вообще, как прогресс движется? Сколько за месяц поправили? А сколько коллизий КЖ-АР всего?
BIM:

Знакомо?

В классической цепочке никто не ведёт статистику, сколько поправлено за неделю, сколько за месяц, следят только за итогом. Частично это вопрос квалификации BIM-специалиста и регламентов, описывающих еженедельную фиксацию результатов проверки.

Но давайте честно: никто не делает красивые дашборды в пустоту, особенно на еженедельной основе, ради того, чтобы два раза за проект кто-то спросил: «Ну как там с коллизиями?».


Проблема 2. Путь коллизий

Проблема не в самом процессе отработки коллизий конкретными специалистами. Эта проблема, мне кажется, неистребима. Проблема в цепочке:

BIM-специалист проверил модели на коллизии в Navisworks → выдал результат в табличном формате HTML всем причастным к моделированию → инженеры поправили → BIM-специалист снова проверяет модель.

Так цепочку воспринимают многие, кто заинтересован в качественном проекте, но под капотом она куда сложнее.

Если максимально расширять процесс, получается примерно так:

BIM-специалист проверил модели на коллизии в Navisworks → выдал результат в табличном формате HTML всем причастным к моделированию → инженеры открывают Revit, копируют ID элементов в модель для поиска, правят то, что могут и считают важным → если не могут или считают несущественным, пишут BIM-специалисту, что по каким-то коллизиям нужно договориться с заказчиком, или что «коллизии 15-128 не мои, это должен править архитектор» → BIM-специалист агрегирует обратную связь, чаще всего из мессенджеров, или, если повезло, из единой таблицы по проверке/объекту → через неделю BIM-специалист снова проверяет модель.

На первый взгляд всё логично. Но не хватает контроля, удобства и единого окна для всего процесса.


Проблема 3. «Коды следующих элементов некорректны и не могут использоваться…»

Знакомо?

Знакомо?

Если вы реально отрабатывали коллизии, то обязательно сталкивались с тем, как это трудоёмко:

  1. выделить мышкой ID из отчёта;

  2. найти в интерфейсе Revit кнопку «Код выбора»;

  3. вставить скопированный ID;

  4. получить ошибку «Коды следующих элементов некорректны и не могут использоваться…», потому что взял ID не из того столбца;

  5. снова скопировать уже корректный ID;

  6. снова найти кнопку «Код выбора»;

  7. вставить ID;

  8. нажать «Рамка выбора».

Это от 4 до 6 шагов в зависимости от внимательности и удачи. А и то, и другое всегда убывает пропорционально количеству коллизий, которые приходится отрабатывать руками.

А теперь перейдём к найденным и реализованным мной решениям этих проблем.


Решение проблемы 1. Дашборды и ещё немного сверху

В очередной раз столкнувшись с проблемой аналитики на проекте, я решил создать web-сервис с динамичными дашбордами по проектам. Идея простая: BIM-специалисты загружают отчёты по коллизиям, а сервис показывает готовую аналитику прогресса по проекту.

Базовые требования выглядели так:

  1. парсинг отчётов в формате XML - это единственное нормальное машиночитаемое представление из Navisworks;

  2. ведение базы данных по проектам для дальнейшей аналитики;

  3. готовая страница с дашбордом, один взгляд на которую закрывает большинство вопросов по коллизиям.

HTML-отчёт удобен человеку, но почти бесполезен как источник данных для истории, сравнения и автоматической аналитики. Поэтому основой стал именно XML.

Импорт отчётов

Контроль импорта отчетов

Контроль импорта отчетов

Можно загружать папки, можно загружать конкретные XML-документы.

Если загружается папка, то за дату отчёта применяется имя папки. По нашему регламенту имя папки с отчётами - это дата проверки в формате дд.мм.гггг.

Если загружается конкретный XML-документ, то за дату отчёта применяется дата создания XML-файла.

Важно было не просто распарсить XML и получить число строк. Я разделил импорт на несколько сущностей:

отчёт за конкретную дату
└── проверки внутри отчёта
    └── отдельные экземпляры коллизий
        └── метаданные  отдельных экземпляров коллизий

После успешного парсинга обновлённые данные попадают в дашборд. KPI-карточки всегда отражают состояние на дату последнего загруженного отчёта.

Дашборд по проекту

Дашборд по проекту

На этом этапе уже можно быстро отвечать на базовые вопросы по проекту.

Но почти сразу захотелось более подробной аналитики:

Аналитика - Обзор

Аналитика - Обзор

Аналитика - По дисциплинам

Аналитика - По дисциплинам

Аналитика - По уровням

Аналитика - По уровням

Аналитика - Повторяемость

Аналитика - Повторяемость

Аналитика - По типам

Аналитика - По типам

Аналитика - Прогресс по дисциплинам

Аналитика - Прогресс по дисциплинам

  • какие отчёты несут наибольшее число коллизий;

  • сколько коллизий по дисциплинам, например КЖ-АР;

  • сколько коллизий по уровням;

  • какие коллизии не правятся из раза в раз;

  • как двигается прогресс по разделам;

  • что изменилось между двумя отчётами.

Все это реальные запросы по проектам и просто полезная информация, которая помогает сделать акцент на проблемных местах.

Сравнение отчетов

Сравнение отчетов

Самое важное оказалось не в парсинге XML

Самая важная часть оказалась не в том, чтобы прочитать XML. Настоящий вопрос был другой:

Эта коллизия из нового отчёта - действительно новая, или это старая проблема, которая просто снова попала в выгрузку?

Для этого пришлось разделить конкретное появление коллизии в отчёте и её устойчивую идентичность во времени.

Условно:

ClashOccurrence - конкретное появление коллизии в конкретном отчёте
ClashIdentity   - устойчивая идентичность этой коллизии во времени

Именно это позволяет считать повторяемость, динамику исправлений и сравнивать отчёты без ручной сводной таблицы в Excel.

Теперь меня уже сложнее застать врасплох вопросом: «Ну как там с проектом?».


Решение проблемы 2. Работа в одном окне

Может быть, вы заметили, что некоторые коллизии на предыдущих скриншотах были в статусе «Исправлено». Если заметили - отлично. Если нет - это потому, что я ещё не рассказал про работу с коллизиями внутри сервиса.

Помните цепочку с HTML-отчётами, мессенджерами и ручной агрегацией обратной связи? Я решил, что отчёты не должны жить только в формате XML и не должны лежать просто в сетевой папке. Они должны превращаться в рабочие сущности внутри единого сервиса.

Так дашборд постепенно вырос в Clash Analytics. Рабочее название, обязательно переведу на русский как «Аналитика столкновений».

Коллизии по проекту

Коллизии по проекту

Теперь каждая коллизия отображается в сервисе. Их можно:

  • фильтровать;

  • сортировать по датам;

  • группировать по имени проверки;

  • смотреть по дисциплинам;

  • фильтровать по статусу;

  • сортировать по количеству повторений;

  • массово менять статус у выбранных коллизий.

Статусов три:

Активная
Исправлена
Допущена

Статусы меняются в сервисе, но также подхватываются из XML.

Каждую коллизию можно открыть в карточке и посмотреть подробности.

Карточка коллизии

Карточка коллизии

Да, детская кроватка пересекается со стеной ГКЛ. Ну ничего, пусть с детства привыкает спать у стенки.

Работа по старым отчётам

Один из неожиданных сценариев - работа по старым отчётам.

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

Если менять статус только у строки старого отчёта, в актуальном отчёте эта же проблема останется активной, и кто-то может начать разбирать её повторно.

Поэтому статус в сервисе привязан не только к строке отчёта, но и к идентичности коллизии. Это позволяет аккуратно протягивать изменение на более свежие появления той же проблемы и снижать риск двойной работы.

Сопоставление коллизий между отчётами

Отдельной задачей стало сопоставление коллизий между отчётами.

В идеальном мире можно было бы просто взять пару ID и считать её уникальной. Но в реальных BIM-данных всё сложнее.

Что если элемент А и элемент Б поменялись местами? Это другая коллизия? Нет.

Что если коллизия попала в несколько проверок сразу? Это несколько разных проблем или одна и та же? Зависит от контекста.

Что если в середине проекта изменили имена уровней или переименовали оси, но остальные данные остались без изменений? Коллизия новая? Тоже не всегда.

Поэтому пришлось делать более осторожную схему: учитывать источник объекта, сторону коллизии, имя проверки, дополнительные признаки и иметь страховку на случай, если часть данных изменилась или не приехала из XML.

Комментарии

Довольно очевидным следующим шагом стали комментарии к каждой коллизии, чтобы фиксировать договорённости, причины допуска и прочий контекст.

Комментарии к коллизии

Комментарии к коллизии

Так как вход в сервис происходит через внутреннюю систему авторизации, сервис всегда знает, кто оставляет комментарии.

Комментарии я специально не стал хранить как «текст где-то рядом с отчётом». Это отдельная история действий:

кто написал
когда написал
к какой устойчивой коллизии относится комментарий

Так проще не потерять контекст, когда приходит новый отчёт, а старая строка из XML уже формально перестала существовать.

И тут мы подходим к самому интересному - к двум кнопкам в карточке каждой коллизии:

Revit 3D-обрезка
Revit-изоляция
Волшебные кнопки

Волшебные кнопки

Они решают проблему ручного поиска элементов в Revit.


Решение проблемы 3. Магия плагинов

Кто-то может возразить:

Да никто уже ID не копирует из HTML, у всех есть свои плагины для просмотра коллизий напрямую в Revit через подгрузку XML.

И частично вы будете правы.

Но, во-первых, такое есть далеко не у всех. А во-вторых, во всех подобных разработках, которые я видел, элементы из связанных моделей по ID не выделялись. Поэтому я написал свой плагин.

Плагин для Revit в этой системе - это локальный мост между web-сервисом Clash Analytics и открытой моделью Revit.

Снаружи всё выглядит просто: пользователь открыл коллизию в браузере, нажал «Revit 3D-обрезка», и Revit сам:

  1. открывает 3D-вид;

  2. находит элементы;

  3. строит вокруг них section box;

  4. при необходимости изолирует элементы.

Всё, что нужно пользователю, это открытая модель Revit с установленным плагином.

К слову, если один из элементов находится в связи, section box всё равно строится вокруг объединённого bounding box двух элементов. А выбор ID элемента из связанного файла штатным инструментом «Код выбора» невозможен.

Как работает Revit Bridge

Отдельная часть системы - локальный Revit Bridge. Это небольшой add-in для Revit, который поднимает HTTP endpoint на 127.0.0.1 и принимает команды от web-интерфейса.

Сам сервис не управляет Revit напрямую. Он только знает, какие элементы участвуют в коллизии, и передаёт эти данные в локальный bridge.

Дальше уже плагин внутри Revit:

ищет элементы в активной модели и связанных файлах
→ учитывает смещение связей относительно друг друга
→ строит общий bounding box
→ открывает 3D-вид с section box вокруг проблемного места

Для режима изоляции поверх этого применяется временная изоляция найденных элементов.

Важный технический момент: Revit API нельзя безопасно вызывать из произвольного HTTP-потока. Поэтому bridge использует стандартную для Revit схему через ExternalEvent:

HTTP-запрос приходит в локальный bridge
→ запрос складывается в очередь
→ вызывается ExternalEvent
→ фактическое действие выполняется уже в контексте Revit

Без такого плагина web-сервис мог бы только показать пользователю ID и картинку из Navisworks. Но перейти из браузера прямо в нужное место открытой Revit-модели, особенно если один из элементов находится в связанной модели, без add-in практически невозможно.

В интерфейсе есть индикатор состояния Revit Bridge: frontend периодически проверяет локальный endpoint /ping. Если bridge отвечает, то индикатор зелёный, если нет, то красный.

Отдельный нюанс: ElementId и UniqueId

Тут есть потенциально хрупкий момент - это идентификаторы элементов Revit.

Тот ID, который я часто упоминается в отчётах и интерфейсе, строго говоря, называется ElementId. В документации Revit API он описывается как project-wide identifier, то есть уникальный внутри проекта, но не уникальный между разными файлами Revit.

Кроме того, UniqueId стабильнее для хранения во внешней базе, а ElementId в некоторых сценариях может измениться.

В своём решении я пока не стал доставать UniqueId из Navisworks. Вместо этого в HTTP-запросе используется имя связи (фактически имя источника из Navisworks), и ElementId. Это снижает риск ложных срабатываний, потому что один и тот же числовой ID в разных Revit-файлах может указывать на разные элементы.


Назначение коллизий отделам

Для полного счастья не хватало назначения коллизий.

Мои коллизии

Мои коллизии

Сделать назначение конкретным людям казалось очевидным: учетные записи есть, коллизии есть, сервис единый. Но в этом сценарии быстро появляется дополнительная сложность в администрировании:

  • люди часто переходят между проектами;

  • состав исполнителей меняется;

  • часть задач могут отдавать студентам или временным специалистам;

Поэтому я пришёл к другой схеме: у каждой учётной записи есть поле «Отдел» и список доступных проектов.

Настройки учетной записи

Настройки учетной записи

При выборе нескольких коллизий или в окне подробностей каждой коллизии можно назначить отдел, которому эта коллизия отправляется.

Например: по проекту 1 я назначаю две коллизии отделу АР. Все пользователи с отделом АР и доступом к проекту 1 получают уведомление о том, что им назначены коллизии.

При назначении коллизий отделам создаётся новая запись в комментариях у каждой назначенной коллизии. Так сохраняется история «перекидывания» коллизий между отделами.

При первичном парсинге отчётов пользователи тоже получают оповещения, но автоматически коллизии отделам не назначаются. Это просто информирование.


Автоматический импорт из сетевой папки

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

Источники импорта

Источники импорта

Один раз для проекта настраивается источник данных, и дальше сервис сам забирает новые отчёты.

Такой сценарий хорошо ложится на регламент: BIM-специалист продолжает выгружать результаты из Navisworks привычным способом, но дальше сервис сам забирает новые отчёты из сетевого источника, ставит импорт в очередь и обновляет аналитику.

Для инженера это выглядит так, будто новые отчёты просто появляются в сервисе сами.


Отдельная боль - нормализация

В реальных проектах уровни, дисциплины, имена файлов и типы элементов редко называются идеально. Да, это решается EIR, BEP, иными приложениями к договору, но зачастую работа начинается на своем шаблоне, а "подгонка" под требования - финальный этап.

Например:

Этаж 1
01_Этаж
Level 01
+0.000
АР
AR
Архитектура

Для человека это часто одно и то же. Для базы данных - разные значения.

Если не решать эту проблему, аналитика быстро превращается в кашу:

коллизии по уровню «Этаж 1»  - 100
коллизии по уровню «01_Этаж» - 80
коллизии по уровню «Level 01» - 40

Формально график построен правильно, но управленчески он бесполезен.

Поэтому часть логики вынесена в настраиваемые правила, чтобы не переписывать код под каждый новый проект и не превращать аналитику в набор исключений.


Что получилось в итоге

Если коротко, Clash Analytics вырос из простого дашборда, стал не просто просмотрщиком XML-отчётов, а отдельным рабочим слоем между Navisworks, Revit и участниками проекта.

Сейчас сервис закрывает несколько сценариев:

  • хранит историю отчётов по проектам;

  • показывает актуальные KPI по последней загруженной проверке;

  • строит динамику коллизий во времени;

  • показывает аналитику по проверкам, дисциплинам, уровням и типам;

  • позволяет сравнивать отчёты между собой;

  • помогает находить повторяющиеся и «зависшие» коллизии;

  • отображает каждую коллизию как отдельную рабочую сущность;

  • хранит статусы, комментарии и историю действий;

  • позволяет массово менять статусы и назначать коллизии отделам;

  • отправляет уведомления ответственным пользователям;

  • автоматически забирает новые отчёты из сетевого источника;

  • через Revit Bridge открывает проблемное место прямо в Revit;

  • строит 3D-обрезку вокруг элементов коллизии;

  • умеет работать не только с host model, но и со связанными моделями;

  • позволяет временно изолировать элементы коллизии на 3D-виде;

  • выгружает отчёты в удобных форматах для дальнейшего использования.

Самое важное для меня - сервис начал отвечать не только на вопрос «сколько сейчас коллизий?», но и на более полезные вопросы:

  • что изменилось с прошлого отчёта;

  • какие проверки дают основной объём проблем;

  • какие коллизии повторяются из недели в неделю;

  • какой раздел сейчас является узким местом;

  • какие задачи уже были назначены;

  • где по конкретной коллизии велась переписка;

  • можно ли быстро открыть проблему в Revit и исправить её.

В итоге BIM-специалисту не нужно каждый раз вручную собирать сводку из Navisworks, Excel и переписок. Руководитель проекта или ГИП получает понятную картину по проекту, а инженер может перейти от строки отчёта к месту проблемы в модели за один клик.


Что сейчас происходит с сервисом

На данный момент система раскатывается на специалистов внутри компании: проводятся обучения, собирается обратная связь, постепенно появляются новые сценарии использования.

Тестирование BIM-отделом уже проведено, в сервис загружено около 20 проектов. Руководители проектов и ГИПы особенно оценили аналитику: ответы на вопросы вроде «что у нас по коллизиям?», «где больше всего проблем?» и «что изменилось с прошлого отчёта?» теперь занимают не часы ручной подготовки, а пару минут.

Конечно, сервис не решает все проблемы магически. Качество аналитики всё равно зависит от регламента выгрузки, стабильности именования файлов, дисциплины заполнения статусов и того, насколько аккуратно ведутся модели, но это я постарался решить нормализацией данных.

Если в исходных данных хаос, его нельзя полностью победить красивым интерфейсом. Но его можно сделать видимым, измеримым и управляемым.

Если есть проблемы - значит, рядом есть место для инженерного решения. А если это решение ещё и избавляет BIM-специалиста от еженедельного исполнения роли живого Excel-дашборда, значит, оно точно было не зря.