ГИС-Скрипты

СКР-07 Дома (МКД)

Привязка МКД к договорам: переносим дома из ГИС ЖКХ в вашу базу

Читает из ГИС дома каждого договора и записывает привязки к себе. Умно сравнивает адреса, есть пробный режим и файл отката.

Какую задачу решает

В ГИС ЖКХ у договоров уже указаны дома, а в вашей учётной базе связь «договор — дом» может отсутствовать. Из-за этого акт невозможно соотнести с домом: связь идёт только через договор.

Скрипт читает дома из ГИС ЖКХ и записывает привязки в базу, не требуя ручного ввода.

Что делает скрипт

  1. Читает ИНН организации, под которой открыт ГИС, и работает только с её договорами: так чужие договоры с совпадающими номерами не перепутаются.
  2. Собирает ссылки на договоры со всех страниц реестра, затем открывает каждый договор в отдельной вкладке и читает таблицу домов.
  3. Находит договор в вашей базе и сверяет контрагента и заказчика: порядок слов, организационно-правовая форма и сокращения не мешают: «ООО СИО» и «СИО ООО» считаются одной фирмой.
  4. Сопоставляет каждый адрес из ГИС с домом в вашем справочнике по ключу «улица, тип улицы, номер дома»: «д. 29, корпус 2» и «Дом № 29/2» дают один ключ, а «5/2» и «5/2 строение 1» — разные.
  5. Записывает привязки в базу. Договоры, у которых уже есть дома, не трогает. Перед записью можно посмотреть план в пробном режиме.

Что понадобится

  • Windows и Google Chrome с отладочным портом 9222.
  • Python 3, Playwright, psycopg2.
  • База PostgreSQL с таблицами договоров, домов (справочник адресов) и привязок.
  • Доступ в ГИС ЖКХ с правом просмотра реестра договоров.

Как запустить

  1. Запустите Chrome с отладочным портом и войдите в ГИС ЖКХ.
  2. Откройте реестр: «Объекты управления → Договоры оказания услуг», выставьте фильтр (например, «Статус: Действующий») и нажмите «Найти».
  3. Запустите скрипт. Начните с DRY_RUN = True и MAX_CONTRACTS = 5: скрипт пролистает весь реестр, но откроет только первые пять договоров, которым привязка нужна.
  4. Когда план выглядит разумно, поставьте MAX_CONTRACTS = 0 и DRY_RUN = False. Руками в браузере ничего нажимать не нужно.

Общая подготовка — Chrome, Python, Playwright — описана на странице «Как запустить».

Основные настройки

ПараметрПо умолчаниюЧто значит
DRY_RUNTrueтолько прочитать и показать план, в базу не писать
MAX_CONTRACTS5сколько договоров открыть за запуск, 0 — все
SKIP_IF_HAS_MKDTrueне трогать договоры, где дома уже привязаны

Ограничения и на что обратить внимание

  • Скрипт рассчитан на структуру базы, где договоры, дома и привязки лежат в отдельных таблицах. Для вашей схемы данных потребуется адаптация.
  • Если ИНН организации прочитать не удалось или такой организации нет в базе, скрипт останавливается: искать договоры вслепую опаснее, чем не искать.
  • При записи рядом создаётся файл отката rollback_bind_mkd.sql с удалением каждой добавленной привязки.

Вопросы и ответы

Зачем привязывать дома к договорам?

Если у договоров нет домов, акт нельзя соотнести с домом: связь идёт «акт → договор → дом». Скрипты фиксации работ и услуг без этой связи не знают, к какому дому относится скан.

Почему адреса сравниваются по справочнику, а не по тексту?

Один и тот же дом записывают по-разному в ГИС и в базе, а один адрес бывает префиксом другого. Ключ «улица, тип, номер дома» убирает путаницу.

Можно ли откатить результат?

Да. При записи скрипт сохраняет SQL-файл, удаляющий каждую добавленную привязку.