СКР-07 Дома (МКД)
Привязка МКД к договорам: переносим дома из ГИС ЖКХ в вашу базу
Читает из ГИС дома каждого договора и записывает привязки к себе. Умно сравнивает адреса, есть пробный режим и файл отката.
Какую задачу решает
В ГИС ЖКХ у договоров уже указаны дома, а в вашей учётной базе связь «договор — дом» может отсутствовать. Из-за этого акт невозможно соотнести с домом: связь идёт только через договор.
Скрипт читает дома из ГИС ЖКХ и записывает привязки в базу, не требуя ручного ввода.
Что делает скрипт
- Читает ИНН организации, под которой открыт ГИС, и работает только с её договорами: так чужие договоры с совпадающими номерами не перепутаются.
- Собирает ссылки на договоры со всех страниц реестра, затем открывает каждый договор в отдельной вкладке и читает таблицу домов.
- Находит договор в вашей базе и сверяет контрагента и заказчика: порядок слов, организационно-правовая форма и сокращения не мешают: «ООО СИО» и «СИО ООО» считаются одной фирмой.
- Сопоставляет каждый адрес из ГИС с домом в вашем справочнике по ключу «улица, тип улицы, номер дома»: «д. 29, корпус 2» и «Дом № 29/2» дают один ключ, а «5/2» и «5/2 строение 1» — разные.
- Записывает привязки в базу. Договоры, у которых уже есть дома, не трогает. Перед записью можно посмотреть план в пробном режиме.
Что понадобится
- Windows и Google Chrome с отладочным портом 9222.
- Python 3, Playwright, psycopg2.
- База PostgreSQL с таблицами договоров, домов (справочник адресов) и привязок.
- Доступ в ГИС ЖКХ с правом просмотра реестра договоров.
Как запустить
- Запустите Chrome с отладочным портом и войдите в ГИС ЖКХ.
- Откройте реестр: «Объекты управления → Договоры оказания услуг», выставьте фильтр (например, «Статус: Действующий») и нажмите «Найти».
- Запустите скрипт. Начните с DRY_RUN = True и MAX_CONTRACTS = 5: скрипт пролистает весь реестр, но откроет только первые пять договоров, которым привязка нужна.
- Когда план выглядит разумно, поставьте MAX_CONTRACTS = 0 и DRY_RUN = False. Руками в браузере ничего нажимать не нужно.
Общая подготовка — Chrome, Python, Playwright — описана на странице «Как запустить».
Основные настройки
| Параметр | По умолчанию | Что значит |
|---|---|---|
DRY_RUN | True | только прочитать и показать план, в базу не писать |
MAX_CONTRACTS | 5 | сколько договоров открыть за запуск, 0 — все |
SKIP_IF_HAS_MKD | True | не трогать договоры, где дома уже привязаны |
Ограничения и на что обратить внимание
- Скрипт рассчитан на структуру базы, где договоры, дома и привязки лежат в отдельных таблицах. Для вашей схемы данных потребуется адаптация.
- Если ИНН организации прочитать не удалось или такой организации нет в базе, скрипт останавливается: искать договоры вслепую опаснее, чем не искать.
- При записи рядом создаётся файл отката rollback_bind_mkd.sql с удалением каждой добавленной привязки.
Вопросы и ответы
Зачем привязывать дома к договорам?
Если у договоров нет домов, акт нельзя соотнести с домом: связь идёт «акт → договор → дом». Скрипты фиксации работ и услуг без этой связи не знают, к какому дому относится скан.
Почему адреса сравниваются по справочнику, а не по тексту?
Один и тот же дом записывают по-разному в ГИС и в базе, а один адрес бывает префиксом другого. Ключ «улица, тип, номер дома» убирает путаницу.
Можно ли откатить результат?
Да. При записи скрипт сохраняет SQL-файл, удаляющий каждую добавленную привязку.